2016-04-01 23:44:31 +02:00
< ? php
/*
* A set of utility helper functions
*/
use Sakura\Config ;
2016-10-07 19:37:00 +02:00
use Sakura\FileSystem ;
2016-04-01 23:44:31 +02:00
use Sakura\Net ;
2016-11-04 18:51:11 +01:00
use Sakura\Router ;
2016-07-31 03:32:37 +02:00
use Sakura\Template ;
2016-04-01 23:44:31 +02:00
2016-07-29 21:31:36 +02:00
// Sort of alias for Config::get
2016-07-26 19:29:53 +02:00
function config ( $value )
{
$split = explode ( '.' , $value );
$key = array_pop ( $split );
$section = implode ( '.' , $split );
2017-04-08 18:08:03 +02:00
return Config :: get ( $section , $key ) ? ? Config :: get ( $value ) ? ? null ;
2016-07-26 19:29:53 +02:00
}
2016-11-04 18:51:11 +01:00
// Alias for Router::route
2016-08-10 18:10:57 +02:00
function route ( $name , $args = null , $full = false )
2016-07-29 21:31:36 +02:00
{
2016-11-04 18:51:11 +01:00
return ( $full ? full_domain () : '' ) . Router :: route ( $name , $args );
2016-08-10 18:10:57 +02:00
}
// Getting the full domain (+protocol) of the current host, only works for http
function full_domain ()
{
return 'http' . ( $_SERVER [ 'HTTPS' ] ? ? false ? 's' : '' ) . '://' . $_SERVER [ 'HTTP_HOST' ];
2016-07-29 21:31:36 +02:00
}
2016-07-31 03:32:37 +02:00
// Checking if a parameter is equal to session_id()
function session_check ( $param = 'session' )
{
return isset ( $_REQUEST [ $param ]) && $_REQUEST [ $param ] === session_id ();
}
// Alias for Template::vars and Template::render
function view ( $name , $vars = [])
{
Template :: vars ( $vars );
return Template :: render ( $name );
}
2016-10-07 19:37:00 +02:00
// Get a path
function path ( $path )
{
return FileSystem :: getPath ( $path );
}
2016-11-01 22:14:02 +01:00
// Convert camel case to snake case
function camel_to_snake ( $text )
{
return ltrim ( strtolower ( preg_replace ( '#[A-Z]#' , '_$0' , $text )), '_' );
}
2016-04-01 23:44:31 +02:00
function clean_string ( $string , $lower = false , $noSpecial = false , $replaceSpecial = '' )
{
// Run common sanitisation function over string
2016-07-26 19:29:53 +02:00
$string = htmlentities ( $string , ENT_NOQUOTES | ENT_HTML401 , 'utf-8' );
2016-04-01 23:44:31 +02:00
$string = stripslashes ( $string );
$string = strip_tags ( $string );
// If set also make the string lowercase
if ( $lower ) {
$string = strtolower ( $string );
}
// If set remove all characters that aren't a-z or 0-9
if ( $noSpecial ) {
$string = preg_replace ( '/[^a-z0-9]/' , $replaceSpecial , $string );
}
// Return clean string
return $string ;
}
2016-09-14 00:05:03 +02:00
// Redirect with turbolinks header
function redirect ( $url )
{
header ( " Turbolinks-Location: { $url } " );
header ( " Location: { $url } " );
2016-12-04 17:33:52 +01:00
return $url ;
2016-09-14 00:05:03 +02:00
}
2016-04-01 23:44:31 +02:00
function check_mx_record ( $email )
{
// Get the domain from the e-mail address
$domain = substr ( strstr ( $email , '@' ), 1 );
// Check the MX record
$record = checkdnsrr ( $domain , 'MX' );
// Return the record data
return $record ;
}
function get_country_code ()
{
// Attempt to get country code using PHP's built in geo thing
if ( function_exists ( " geoip_country_code_by_name " )) {
try {
$code = geoip_country_code_by_name ( Net :: ip ());
// Check if $code is anything
if ( $code ) {
return $code ;
}
} catch ( \Exception $e ) {
}
}
// Check if the required header is set and return it
2016-07-29 21:31:36 +02:00
if ( isset ( $_SERVER [ 'HTTP_CF_IPCOUNTRY' ]) && strlen ( $_SERVER [ 'HTTP_CF_IPCOUNTRY' ]) === 2 ) {
2016-04-01 23:44:31 +02:00
return $_SERVER [ 'HTTP_CF_IPCOUNTRY' ];
}
// Return XX as a fallback
return 'XX' ;
}
function get_country_name ( $code )
{
2016-07-26 19:29:53 +02:00
switch ( strtolower ( $code )) {
case " xx " :
return " Unknown " ;
2016-04-01 23:44:31 +02:00
2016-07-26 19:29:53 +02:00
case " a1 " :
return " Anonymous Proxy " ;
2016-04-01 23:44:31 +02:00
2016-07-26 19:29:53 +02:00
case " a2 " :
return " Satellite Provider " ;
2016-04-25 04:01:14 +02:00
2016-07-26 19:29:53 +02:00
default :
return locale_get_display_region ( " - { $code } " , 'en' );
}
2016-04-01 23:44:31 +02:00
}
2016-09-14 00:05:03 +02:00
// Count the amount of unique characters in the password string and calculate the entropy
2016-04-01 23:44:31 +02:00
function password_entropy ( $password )
{
2016-09-14 00:05:03 +02:00
return count ( count_chars ( utf8_decode ( $password ), 1 )) * log ( 256 , 2 );
2016-04-01 23:44:31 +02:00
}
function byte_symbol ( $bytes )
{
// Return nothing if the input was 0
if ( ! $bytes ) {
return " 0 B " ;
}
// Array with byte symbols
$symbols = [ 'B' , 'KiB' , 'MiB' , 'GiB' , 'TiB' , 'PiB' , 'EiB' , 'ZiB' , 'YiB' ];
// Calculate byte entity
$exp = floor ( log ( $bytes ) / log ( 1024 ));
// Format the things
$bytes = sprintf ( " %.2f " . $symbols [ $exp ], ( $bytes / pow ( 1024 , floor ( $exp ))));
// Return the formatted string
return $bytes ;
}
2016-07-29 21:31:36 +02:00
// turn this function into a wrapped class!
2016-04-01 23:44:31 +02:00
function send_mail ( $to , $subject , $body )
{
2016-07-29 21:31:36 +02:00
$transport = Swift_SmtpTransport :: newInstance ()
-> setHost ( config ( 'mail.smtp.server' ))
-> setPort ( config ( 'mail.smtp.port' ));
2016-04-01 23:44:31 +02:00
2016-07-29 21:31:36 +02:00
if ( config ( 'mail.smtp.secure' )) {
$transport -> setEncryption ( config ( 'mail.smtp.secure' ));
2016-04-01 23:44:31 +02:00
}
2016-07-29 21:31:36 +02:00
if ( config ( 'mail.smtp.auth' )) {
$transport
-> setUsername ( config ( 'mail.smtp.username' ))
-> setPassword ( config ( 'mail.smtp.password' ));
2016-04-01 23:44:31 +02:00
}
2016-07-29 21:31:36 +02:00
$mailer = Swift_Mailer :: newInstance ( $transport );
2016-04-01 23:44:31 +02:00
2016-08-02 15:17:16 +02:00
$message = Swift_Message :: newInstance ( $subject )
2016-07-29 21:31:36 +02:00
-> setFrom ([ config ( 'mail.smtp.from' ) => config ( 'mail.smtp.name' )])
-> setBcc ( $to )
-> setBody ( $body );
2016-04-01 23:44:31 +02:00
2016-07-29 21:31:36 +02:00
return $mailer -> send ( $message );
2016-04-01 23:44:31 +02:00
}