diff --git a/resources/functions.php b/resources/functions.php index a1d24aa34b..792a15c1be 100644 --- a/resources/functions.php +++ b/resources/functions.php @@ -1,2088 +1,2126 @@ - - Portions created by the Initial Developer are Copyright (C) 2008-2019 - the Initial Developer. All Rights Reserved. - - Contributor(s): - Mark J Crane - Luis Daniel Lucio Quiroz -*/ - - if (!function_exists('software_version')) { - function software_version() { - return '4.5.6'; - } - } - - if (!function_exists('version')) { - function version() { - return software_version(); - } - } - - if (!function_exists('numeric_version')) { - function numeric_version() { - $v = explode('.', software_version()); - $n = ($v[0] * 10000 + $v[1] * 100 + $v[2]); - return $n; - } - } - - if (!function_exists('mb_strtoupper')) { - function mb_strtoupper($string) { - return strtoupper($string); - } - } - - if (!function_exists('check_float')) { - function check_float($string) { - $string = str_replace(",",".",$string); - return trim($string); - } - } - - if (!function_exists('check_str')) { - function check_str($string, $trim = true) { - global $db_type, $db; - //when code in db is urlencoded the ' does not need to be modified - if ($db_type == "sqlite") { - if (function_exists('sqlite_escape_string')) { - $string = sqlite_escape_string($string); - } - else { - $string = str_replace("'","''",$string); - } - } - if ($db_type == "pgsql") { - $string = pg_escape_string($string); - } - if ($db_type == "mysql") { - if(function_exists('mysql_real_escape_string')){ - $tmp_str = mysql_real_escape_string($string); - } - else{ - $tmp_str = mysqli_real_escape_string($db, $string); - } - if (strlen($tmp_str)) { - $string = $tmp_str; - } - else { - $search = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a"); - $replace = array("\\x00", "\\n", "\\r", "\\\\" ,"\'", "\\\"", "\\\x1a"); - $string = str_replace($search, $replace, $string); - } - } - $string = ($trim) ? trim($string) : $string; - return $string; - } - } - - if (!function_exists('check_sql')) { - function check_sql($string) { - return trim($string); //remove white space - } - } - - if (!function_exists('check_cidr')) { - function check_cidr ($cidr,$ip_address) { - list ($subnet, $mask) = explode ('/', $cidr); - return ( ip2long ($ip_address) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet); - } - } - - if (!function_exists('fix_postback')) { - function fix_postback($post_array) { - foreach ($post_array as $index => $value) { - if (is_array($value)) { fix_postback($value); } - else { - $value = str_replace('"', """, $value); - $value = str_replace("'", "'", $value); - $post_array[$index] = $value; - } - } - return $post_array; - } - } - - if (!function_exists('uuid')) { - function uuid() { - //uuid version 4 - return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', - // 32 bits for "time_low" - mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), - - // 16 bits for "time_mid" - mt_rand( 0, 0xffff ), - - // 16 bits for "time_hi_and_version", - // four most significant bits holds version number 4 - mt_rand( 0, 0x0fff ) | 0x4000, - - // 16 bits, 8 bits for "clk_seq_hi_res", - // 8 bits for "clk_seq_low", - // two most significant bits holds zero and one for variant DCE1.1 - mt_rand( 0, 0x3fff ) | 0x8000, - - // 48 bits for "node" - mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) - ); - } - //echo uuid(); - } - - if (!function_exists('is_uuid')) { - function is_uuid($uuid) { - $regex = '/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i'; - return preg_match($regex, $uuid); - } - } - - if (!function_exists('recursive_copy')) { - if (file_exists('/bin/cp')) { - function recursive_copy($src, $dst, $options = '') { - if (strtoupper(substr(PHP_OS, 0, 3)) === 'SUN') { - //copy -R recursive, preserve attributes for SUN - $cmd = 'cp -Rp '.$src.'/* '.$dst; - } else { - //copy -R recursive, -L follow symbolic links, -p preserve attributes for other Posix systemss - $cmd = 'cp -RLp '.$options.' '.$src.'/* '.$dst; - } - //$this->write_debug($cmd); - exec ($cmd); - } - } elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - function recursive_copy($src, $dst, $options = '') { - $src = normalize_path_to_os($src); - $dst = normalize_path_to_os($dst); - exec("xcopy /E /Y \"$src\" \"$dst\""); - } - } else { - function recursive_copy($src, $dst, $options = '') { - $dir = opendir($src); - if (!$dir) { - throw new Exception("recursive_copy() source directory '".$src."' does not exist."); - } - if (!is_dir($dst)) { - if (!mkdir($dst,02770,true)) { - throw new Exception("recursive_copy() failed to create destination directory '".$dst."'"); - } - } - while(false !== ( $file = readdir($dir)) ) { - if (( $file != '.' ) && ( $file != '..' )) { - if ( is_dir($src . '/' . $file) ) { - recursive_copy($src . '/' . $file,$dst . '/' . $file); - } - else { - copy($src . '/' . $file,$dst . '/' . $file); - } - } - } - closedir($dir); - } - } - } - - if (!function_exists('recursive_delete')) { - if (file_exists('/bin/rm')) { - function recursive_delete($dir) { - //$this->write_debug('rm -Rf '.$dir.'/*'); - exec ('rm -Rf '.$dir.'/*'); - clearstatcache(); - } - }elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){ - function recursive_delete($dir) { - $dst = normalize_path_to_os($dst); - //$this->write_debug("del /S /F /Q \"$dir\""); - exec("del /S /F /Q \"$dir\""); - clearstatcache(); - } - }else{ - function recursive_delete($dir) { - foreach (glob($dir) as $file) { - if (is_dir($file)) { - //$this->write_debug("rm dir: ".$file); - recursive_delete("$file/*"); - rmdir($file); - } else { - //$this->write_debug("delete file: ".$file); - unlink($file); - } - } - clearstatcache(); - } - } - } - - if (!function_exists('if_group')) { - function if_group($group) { - //set default false - $result = false; - //search for the permission - if (count($_SESSION["groups"]) > 0) { - foreach($_SESSION["groups"] as $row) { - if ($row['group_name'] == $group) { - $result = true; - break; - } - } - } - //return the result - return $result; - } - } - - if (!function_exists('permission_exists')) { - function permission_exists($permission) { - //set default false - $result = false; - //find the permission - if (is_array($_SESSION["permissions"]) && $_SESSION["permissions"][$permission] == true) { - $result = true; - } - //return the result - return $result; - } - } - - if (!function_exists('group_members')) { - function group_members($db, $user_uuid) { - global $domain_uuid; - $sql = "select * from v_user_groups "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and user_uuid = '".$user_uuid."' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $result_count = count($result); - $group_members = "||"; - foreach($result as $field) { - //get the list of groups - $group_members .= $field['group_name']."||"; - } - unset($sql, $result, $row_count); - return $group_members; - } - } - - if (!function_exists('if_group_member')) { - function if_group_member($group_members, $group) { - if (stripos($group_members, "||".$group."||") === false) { - return false; //group does not exist - } - else { - return true; //group exists - } - } - } - - if (!function_exists('superadmin_list')) { - function superadmin_list($db) { - global $domain_uuid; - $sql = "select * from v_user_groups "; - $sql .= "where group_name = 'superadmin' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $result_count = count($result); - $superadmin_list = "||"; - foreach($result as $field) { - //get the list of superadmins - $superadmin_list .= $field['user_uuid']."||"; - } - unset($sql, $result, $row_count); - return $superadmin_list; - } - } - //superadmin_list($db); - - if (!function_exists('if_superadmin')) { - function if_superadmin($superadmin_list, $user_uuid) { - if (stripos($superadmin_list, "||".$user_uuid."||") === false) { - return false; //user_uuid does not exist - } - else { - return true; //user_uuid exists - } - } - } - - if (!function_exists('html_select_other')) { - function html_select_other($db, $table_name, $field_name, $sql_where_optional, $field_current_value) { - //html select other : build a select box from distinct items in db with option for other - global $domain_uuid; - - $html = "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "
\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "\n"; - $html .= "
"; - - return $html; - } - } - - if (!function_exists('html_select')) { - function html_select($db, $table_name, $field_name, $sql_where_optional, $field_current_value, $field_value = '', $style = '') { - //html select other : build a select box from distinct items in db with option for other - global $domain_uuid; - - if (strlen($field_value) > 0) { - $html .= "\n"; - $html .= "\n"; - $sql = "SELECT distinct($field_name) as $field_name FROM $table_name $sql_where_optional "; - } - - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $result_count = count($result); - if ($result_count > 0) { //if user account exists then show login - foreach($result as $field) { - if (strlen($field[$field_name]) > 0) { - if ($field_current_value == $field[$field_name]) { - if (strlen($field_value) > 0) { - $html .= "\n"; - } - else { - $html .= "\n"; - } - } - else { - if (strlen($field_value) > 0) { - $html .= "\n"; - } - else { - $html .= "\n"; - } - } - } - } - } - unset($sql, $result, $result_count); - $html .= "\n"; - - return $html; - } - } - //$table_name = 'v_templates'; $field_name = 'templatename'; $sql_where_optional = "where domain_uuid = '$domain_uuid' "; $field_current_value = ''; - //echo html_select($db, $table_name, $field_name, $sql_where_optional, $field_current_value); - - if (!function_exists('html_select_on_change')) { - function html_select_on_change($db, $table_name, $field_name, $sql_where_optional, $field_current_value, $onchange, $field_value = '') { - //html select other : build a select box from distinct items in db with option for other - global $domain_uuid; - - $html .= "\n"; - - return $html; - } - } - - if (!function_exists('th_order_by')) { - //html table header order by - function th_order_by($field_name, $columntitle, $order_by, $order, $app_uuid = '', $css = '', $additional_get_params='', $description='') { - if (strlen($app_uuid) > 0) { $app_uuid = "&app_uuid=".$app_uuid; } // accomodate need to pass app_uuid where necessary (inbound/outbound routes lists) - if (strlen($additional_get_params) > 0) {$additional_get_params = '&'.$additional_get_params; } // you may need to pass other parameters - $html = ""; - $description = (strlen($description) > 0) ? $description . ', ': ''; - if (strlen($order_by) == 0) - $order = 'asc'; - if ($order == "asc") { - $description .= 'sort(ascending)'; - $html .= "$columntitle"; - } - else { - $description .= 'sort(descending)'; - $html .= "$columntitle"; - } - $html .= ""; - return $html; - } - } - ////example usage - //$table_name = 'tblcontacts'; $field_name = 'contactcategory'; $sql_where_optional = "", $field_current_value =''; - //echo html_select_other($db, $table_name, $field_name, $sql_where_optional, $field_current_value); - //// On the page that recieves the POST - //if (check_str($_POST["contactcategory"]) == "Other") { //echo "found: ".$contactcategory; - // $contactcategory = check_str($_POST["contactcategoryother"]); - //} - - if (!function_exists('log_add')) { - function log_add($db, $log_type, $log_status, $log_desc, $log_add_user, $log_add_user_ip) { - return; //this disables the function - global $domain_uuid; - - $sql = "insert into logs "; - $sql .= "("; - $sql .= "log_type, "; - $sql .= "log_status, "; - $sql .= "log_desc, "; - $sql .= "log_add_user, "; - $sql .= "log_add_user_ip, "; - $sql .= "log_add_date "; - $sql .= ")"; - $sql .= "values "; - $sql .= "("; - $sql .= "'$log_type', "; - $sql .= "'$log_status', "; - $sql .= "'$log_desc', "; - $sql .= "'$log_add_user', "; - $sql .= "'$log_add_user_ip', "; - $sql .= "now() "; - $sql .= ")"; - $db->exec(check_sql($sql)); - unset($sql); - } - } - //$log_type = ''; $log_status=''; $log_add_user=''; $log_desc=''; - //log_add($db, $log_type, $log_status, $log_desc, $log_add_user, $_SERVER["REMOTE_ADDR"]); - - if (!function_exists('get_ext')) { - function get_ext($filename) { - preg_match('/[^?]*/', $filename, $matches); - $string = $matches[0]; - - $pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE); - - // check if there is any extension - if(count($pattern) == 1){ - //echo 'No File Extension Present'; - return ''; - } - - if(count($pattern) > 1) { - $filenamepart = $pattern[count($pattern)-1][0]; - preg_match('/[^?]*/', $filenamepart, $matches); - return $matches[0]; - } - } - //echo "ext: ".get_ext('test.txt'); - } - - if (!function_exists('file_upload')) { - function file_upload($field = '', $file_type = '', $dest_dir = '') { - - $uploadtempdir = $_ENV["TEMP"]."\\"; - ini_set('upload_tmp_dir', $uploadtempdir); - - $tmp_name = $_FILES[$field]["tmp_name"]; - $file_name = $_FILES[$field]["name"]; - $file_type = $_FILES[$field]["type"]; - $file_size = $_FILES[$field]["size"]; - $file_ext = get_ext($file_name); - $file_name_orig = $file_name; - $file_name_base = substr($file_name, 0, (strlen($file_name) - (strlen($file_ext)+1))); - //$dest_dir = '/tmp'; - - if ($file_size == 0){ - return; - } - - if (!is_dir($dest_dir)) { - echo "dest_dir not found
\n"; - return; - } - - //check if allowed file type - if ($file_type == "img") { - switch (strtolower($file_ext)) { - case "jpg": - break; - case "png": - break; - case "gif": - break; - case "bmp": - break; - case "psd": - break; - case "tif": - break; - default: - return false; - } - } - if ($file_type == "file") { - switch (strtolower($file_ext)) { - case "doc": - break; - case "pdf": - break; - case "ppt": - break; - case "xls": - break; - case "zip": - break; - case "exe": - break; - default: - return false; - } - } - - //find unique filename: check if file exists if it does then increment the filename - $i = 1; - while( file_exists($dest_dir.'/'.$file_name)) { - if (strlen($file_ext)> 0) { - $file_name = $file_name_base . $i .'.'. $file_ext; - } - else { - $file_name = $file_name_orig . $i; - } - $i++; - } - - //echo "file_type: ".$file_type."
\n"; - //echo "tmp_name: ".$tmp_name."
\n"; - //echo "file_name: ".$file_name."
\n"; - //echo "file_ext: ".$file_ext."
\n"; - //echo "file_name_orig: ".$file_name_orig."
\n"; - //echo "file_name_base: ".$file_name_base."
\n"; - //echo "dest_dir: ".$dest_dir."
\n"; - - //move the file to upload directory - //bool move_uploaded_file ( string $filename, string $destination ) - - if (move_uploaded_file($tmp_name, $dest_dir.'/'.$file_name)){ - return $file_name; - } - else { - echo "File upload failed! Here's some debugging info:\n"; - return false; - } - exit; - - } //end function - } - - if ( !function_exists('sys_get_temp_dir')) { - function sys_get_temp_dir() { - if( $temp=getenv('TMP') ) return $temp; - if( $temp=getenv('TEMP') ) return $temp; - if( $temp=getenv('TMPDIR') ) return $temp; - $temp=tempnam(__FILE__,''); - if (file_exists($temp)) { - unlink($temp); - return dirname($temp); - } - return null; - } - } - //echo realpath(sys_get_temp_dir()); - - if ( !function_exists('normalize_path')) { - //don't use DIRECTORY_SEPARATOR as it will change on a per platform basis and we need consistency - function normalize_path($path) { - return str_replace(array('/','\\'), '/', $path); - } - } - - if ( !function_exists('normalize_path_to_os')) { - function normalize_path_to_os($path) { - return str_replace(array('/','\\'), DIRECTORY_SEPARATOR, $path); - } - } - - if (!function_exists('username_exists')) { - function username_exists($username) { - global $db, $domain_uuid; - $sql = "select * from v_users "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and username = '".$username."' "; - //$sql .= "and user_enabled = 'true' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $result_count = count($result); - if ($result_count > 0) { - return true; - } - else { - return false; - } - } - } - - if (!function_exists('add_extension_user')) { - function add_extension_user($extension_uuid, $username) { - global $db, $domain_uuid; - //get the user_uuid by using the username - $sql = "select * from v_users "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and username = '$username' "; - //$sql .= "and user_enabled = 'true' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - unset($prep_statement); - foreach ($result as &$row) { - //check if the user_uuid exists in v_extension_users - $sql = "select * from v_extension_users "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and user_uuid = '".$row["user_uuid"]."' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $extension_users_result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - unset($prep_statement); - //assign the extension to the user - if (count($extension_users_result) == 0) { - $sql = "insert into v_extension_users "; - $sql .= "("; - $sql .= "domain_uuid, "; - $sql .= "extension_uuid, "; - $sql .= "user_uuid "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'$domain_uuid', "; - $sql .= "'$extension_uuid', "; - $sql .= "'".$row["user_uuid"]."' "; - $sql .= ")"; - $db->exec(check_sql($sql)); - unset($sql); - } - } - unset ($result); - } - } - - if (!function_exists('user_add')) { - function user_add($username, $password, $user_email='') { - global $db, $domain_uuid, $v_salt; - $user_uuid = uuid(); - if (strlen($username) == 0) { return false; } - if (strlen($password) == 0) { return false; } - if (!username_exists($username)) { - //salt used with the password to create a one way hash - $salt = generate_password('20', '4'); - //add the user account - $user_type = 'Individual'; - $user_category = 'user'; - $sql = "insert into v_users "; - $sql .= "("; - $sql .= "domain_uuid, "; - $sql .= "user_uuid, "; - $sql .= "username, "; - $sql .= "password, "; - $sql .= "salt, "; - if (strlen($user_email) > 0) { $sql .= "user_email, "; } - $sql .= "add_date, "; - $sql .= "add_user "; - $sql .= ")"; - $sql .= "values "; - $sql .= "("; - $sql .= "'$domain_uuid', "; - $sql .= "'$user_uuid', "; - $sql .= "'$username', "; - $sql .= "'".md5($salt.$password)."', "; - $sql .= "'$salt', "; - if (strlen($user_email) > 0) { $sql .= "'$user_email', "; } - $sql .= "now(), "; - $sql .= "'".$_SESSION["username"]."' "; - $sql .= ")"; - $db->exec(check_sql($sql)); - unset($sql); - - //add the user to the member group - $group_name = 'user'; - $sql = "insert into v_user_groups "; - $sql .= "("; - $sql .= "user_group_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "group_name, "; - $sql .= "user_uuid "; - $sql .= ")"; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$domain_uuid', "; - $sql .= "'$group_name', "; - $sql .= "'$user_uuid' "; - $sql .= ")"; - $db->exec(check_sql($sql)); - unset($sql); - } //end if !username_exists - } //end function definition - } //end function_exists - -function switch_module_is_running($fp, $mod) { - if (!$fp) { - //if the handle does not exist create it - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - //if the handle still does not exist show an error message - if (!$fp) { - $msg = "
Connection to Event Socket failed.
"; - } - } - if ($fp) { - //send the api command to check if the module exists - $switchcmd = "module_exists $mod"; - $switch_result = event_socket_request($fp, 'api '.$switchcmd); - unset($switchcmd); - if (trim($switch_result) == "true") { - return true; - } - else { - return false; - } - } - else { - return false; - } -} -//switch_module_is_running('mod_spidermonkey'); - -//format a number (n) replace with a number (r) remove the number -function format_string ($format, $data) { - $x=0; - $tmp = ''; - for ($i = 0; $i <= strlen($format); $i++) { - $tmp_format = strtolower(substr($format, $i, 1)); - if ($tmp_format == 'x') { - $tmp .= substr($data, $x, 1); - $x++; - } - elseif ($tmp_format == 'r') { - $x++; - } - else { - $tmp .= $tmp_format; - } - } - return $tmp; -} - -//get the format and use it to format the phone number - function format_phone($phone_number) { - $phone_number = trim($phone_number, "+"); - if (is_numeric($phone_number)) { - if (isset($_SESSION["format"]["phone"])) foreach ($_SESSION["format"]["phone"] as &$format) { - $format_count = substr_count($format, 'x'); - $format_count = $format_count + substr_count($format, 'R'); - $format_count = $format_count + substr_count($format, 'r'); - if ($format_count == strlen($phone_number)) { - //format the number - $phone_number = format_string($format, $phone_number); - } - } - } - return $phone_number; - } - -//format seconds into hh:mm:ss - function format_hours($seconds) { - $hours = floor($seconds / 3600); - $minutes = floor(($seconds / 60) % 60); - $seconds = $seconds % 60; - if (strlen($minutes) == 1) { $minutes = '0'.$minutes; } - if (strlen($seconds) == 1) { $seconds = '0'.$seconds; } - return "$hours:$minutes:$seconds"; - } - -//browser detection without browscap.ini dependency - function http_user_agent($info = '') { - - //set default values - $user_agent = $_SERVER['HTTP_USER_AGENT']; - $browser_name = 'Unknown'; - $platform = 'Unknown'; - $version = ''; - $mobile = false; - - //get the platform - if (preg_match('/linux/i', $user_agent)) { - $platform = 'Linux'; - } - elseif (preg_match('/macintosh|mac os x/i', $user_agent)) { - $platform = 'Apple'; - } - elseif (preg_match('/windows|win32/i', $user_agent)) { - $platform = 'Windows'; - } - - //set mobile to true or false - if (preg_match('/mobile/i', $user_agent)) { - $platform = 'Mobile'; - $mobile = true; - } - elseif (preg_match('/android/i', $user_agent)) { - $platform = 'Android'; - $mobile = true; - } - - //get the name of the useragent - if (preg_match('/MSIE/i',$user_agent) && !preg_match('/Opera/i',$user_agent)) { - $browser_name = 'Internet Explorer'; - $browser_shortname = 'MSIE'; - } - elseif (preg_match('/Firefox/i',$user_agent)) { - $browser_name = 'Mozilla Firefox'; - $browser_shortname = 'Firefox'; - } - elseif (preg_match('/Chrome/i',$user_agent)) { - $browser_name = 'Google Chrome'; - $browser_shortname = 'Chrome'; - } - elseif (preg_match('/Safari/i',$user_agent)) { - $browser_name = 'Apple Safari'; - $browser_shortname = 'Safari'; - } - elseif (preg_match('/Opera/i',$user_agent)) { - $browser_name = 'Opera'; - $browser_shortname = 'Opera'; - } - elseif (preg_match('/Netscape/i',$user_agent)) { - $browser_name = 'Netscape'; - $browser_shortname = 'Netscape'; - } - - //finally get the correct version number - $known = array('Version', $browser_shortname, 'other'); - $pattern = '#(?' . join('|', $known) . ')[/ ]+(?[0-9.|a-zA-Z.]*)#'; - if (!preg_match_all($pattern, $user_agent, $matches)) { - //we have no matching number just continue - } - - //see how many we have - $i = count($matches['browser']); - if ($i != 1) { - //we will have two since we are not using 'other' argument yet - //see if version is before or after the name - if (strripos($user_agent,"Version") < strripos($user_agent,$browser_shortname)) { - $version= $matches['version'][0]; - } - else { - $version= $matches['version'][1]; - } - } - else { - $version= $matches['version'][0]; - } - - //check if we have a number - if ($version == null || $version == "") { $version = "?"; } - - //return the data - switch ($info) { - case "agent": return $user_agent; break; - case "name": return $browser_name; break; - case "version": return $version; break; - case "platform": return $platform; break; - case "mobile": return $mobile; break; - case "pattern": return $pattern; break; - default : - return array( - 'user_agent' => $user_agent, - 'name' => $browser_name, - 'version' => $version, - 'platform' => $platform, - 'mobile' => $mobile, - 'pattern' => $pattern - ); - } - } - -//tail php function for non posix systems - function tail($file, $num_to_get=10) { - $fp = fopen($file, 'r'); - $position = filesize($file); - $chunklen = 4096; - if($position-$chunklen<=0) { - fseek($fp,0); - } - else { - fseek($fp, $position-$chunklen); - } - $data="";$ret="";$lc=0; - while($chunklen > 0) { - $data = fread($fp, $chunklen); - $dl=strlen($data); - for($i=$dl-1;$i>=0;$i--){ - if($data[$i]=="\n"){ - if($lc==0 && $ret!="")$lc++; - $lc++; - if($lc>$num_to_get)return $ret; - } - $ret=$data[$i].$ret; - } - if($position-$chunklen<=0){ - fseek($fp,0); - $chunklen=$chunklen-abs($position-$chunklen); - } - else { - fseek($fp, $position-$chunklen); - } - $position = $position - $chunklen; - } - fclose($fp); - return $ret; - } - -//generate a random password with upper, lowercase and symbols - function generate_password($length = 0, $strength = 0) { - $password = ''; - $charset = ''; - if ($length === 0 && $strength === 0) { //set length and strenth if specified in default settings and strength isn't numeric-only - $length = (is_numeric($_SESSION["extension"]["password_length"]["numeric"])) ? $_SESSION["extension"]["password_length"]["numeric"] : 10; - $strength = (is_numeric($_SESSION["extension"]["password_strength"]["numeric"])) ? $_SESSION["extension"]["password_strength"]["numeric"] : 4; - } - if ($strength >= 1) { $charset .= "0123456789"; } - if ($strength >= 2) { $charset .= "abcdefghijkmnopqrstuvwxyz"; } - if ($strength >= 3) { $charset .= "ABCDEFGHIJKLMNPQRSTUVWXYZ"; } - if ($strength >= 4) { $charset .= "!!!!!^$%*?....."; } - srand((double)microtime() * rand(1000000, 9999999)); - while ($length > 0) { - $password .= $charset[rand(0, strlen($charset)-1)]; - $length--; - } - return $password; - } - -//check password strength against requirements (if any) - function check_password_strength($password, $text, $type = 'default') { - if ($password != '') { - if ($type == 'default') { - $req['length'] = $_SESSION['extension']['password_length']['numeric']; - $req['number'] = ($_SESSION['extension']['password_number']['boolean'] == 'true') ? true : false; - $req['lowercase'] = ($_SESSION['extension']['password_lowercase']['boolean'] == 'true') ? true : false; - $req['uppercase'] = ($_SESSION['extension']['password_uppercase']['boolean'] == 'true') ? true : false; - $req['special'] = ($_SESSION['extension']['password_special']['boolean'] == 'true') ? true : false; - } elseif ($type == 'user') { - $req['length'] = $_SESSION['user']['password_length']['numeric']; - $req['number'] = ($_SESSION['user']['password_number']['boolean'] == 'true') ? true : false; - $req['lowercase'] = ($_SESSION['user']['password_lowercase']['boolean'] == 'true') ? true : false; - $req['uppercase'] = ($_SESSION['user']['password_uppercase']['boolean'] == 'true') ? true : false; - $req['special'] = ($_SESSION['user']['password_special']['boolean'] == 'true') ? true : false; - } - if (is_numeric($req['length']) && $req['length'] != 0 && !preg_match_all('$\S*(?=\S{'.$req['length'].',})\S*$', $password)) { // length - $msg_errors[] = $req['length'].'+ '.$text['label-characters']; - } - if ($req['number'] && !preg_match_all('$\S*(?=\S*[\d])\S*$', $password)) { //number - $msg_errors[] = '1+ '.$text['label-numbers']; - } - if ($req['lowercase'] && !preg_match_all('$\S*(?=\S*[a-z])\S*$', $password)) { //lowercase - $msg_errors[] = '1+ '.$text['label-lowercase_letters']; - } - if ($req['uppercase'] && !preg_match_all('$\S*(?=\S*[A-Z])\S*$', $password)) { //uppercase - $msg_errors[] = '1+ '.$text['label-uppercase_letters']; - } - if ($req['special'] && !preg_match_all('$\S*(?=\S*[\W])\S*$', $password)) { //special - $msg_errors[] = '1+ '.$text['label-special_characters']; - } - if (is_array($msg_errors) && sizeof($msg_errors) > 0) { - message::add($_SESSION["message"] = $text['message-password_requirements'].': '.implode(', ', $msg_errors), 'negative', 6000); - return false; - } - else { - return true; - } - } - return true; - } - -//based on Wez Furlong do_post_request - if (!function_exists('send_http_request')) { - function send_http_request($url, $data, $method = "POST", $optional_headers = null) { - $params = array('http' => array( - 'method' => $method, - 'content' => $data - )); - if ($optional_headers !== null) { - $params['http']['header'] = $optional_headers; - } - $ctx = stream_context_create($params); - $fp = @fopen($url, 'rb', false, $ctx); - if (!$fp) { - throw new Exception("Problem with $url, $php_errormsg"); - } - $response = @stream_get_contents($fp); - if ($response === false) { - throw new Exception("Problem reading data from $url, $php_errormsg"); - } - return $response; - } - } - -//convert the string to a named array - if(!function_exists('csv_to_named_array')) { - function csv_to_named_array($tmp_str, $tmp_delimiter) { - $tmp_array = explode ("\n", $tmp_str); - $result = array(); - if (trim(strtoupper($tmp_array[0])) !== "+OK") { - $tmp_field_name_array = explode ($tmp_delimiter, $tmp_array[0]); - $x = 0; - foreach ($tmp_array as $row) { - if ($x > 0) { - $tmp_field_value_array = explode ($tmp_delimiter, $tmp_array[$x]); - $y = 0; - foreach ($tmp_field_value_array as $tmp_value) { - $tmp_name = $tmp_field_name_array[$y]; - if (trim(strtoupper($tmp_value)) !== "+OK") { - $result[$x][$tmp_name] = $tmp_value; - } - $y++; - } - } - $x++; - } - unset($row); - } - return $result; - } - } - -function get_time_zone_offset($remote_tz, $origin_tz = 'UTC') { - $origin_dtz = new DateTimeZone($origin_tz); - $remote_dtz = new DateTimeZone($remote_tz); - $origin_dt = new DateTime("now", $origin_dtz); - $remote_dt = new DateTime("now", $remote_dtz); - $offset = $remote_dtz->getOffset($remote_dt) - $origin_dtz->getOffset($origin_dt); - return $offset; -} - -function number_pad($number,$n) { - return str_pad((int) $number,$n,"0",STR_PAD_LEFT); -} - -// validate email address syntax - if(!function_exists('valid_email')) { - function valid_email($email) { - $regex = '/^[A-z0-9][\w.-]*@[A-z0-9][\w\-\.]+(\.[A-z0-9]{2,6})?$/'; - if ($email != "" && preg_match($regex, $email) == 1) { - return true; // email address has valid syntax - } - else { - return false; // email address does not have valid syntax - } - } - } - -// ellipsis nicely truncate long text - if(!function_exists('ellipsis')) { - function ellipsis($string, $max_characters, $preserve_word = true) { - if ($max_characters+$x >= strlen($string)) { return $string; } - if ($preserve_word) { - for ($x = 0; $x < strlen($string); $x++) { - if ($string{$max_characters+$x} == " ") { - return substr($string,0,$max_characters+$x)." ..."; - } - else { continue; } - } - } - else { - return substr($string,0,$max_characters)." ..."; - } - } - } - -//function to convert hexidecimal color value to rgb string/array value - if (!function_exists('hex_to_rgb')) { - function hex_to_rgb($hex, $delim = '') { - $hex = str_replace("#", "", $hex); - - if (strlen($hex) == 3) { - $r = hexdec(substr($hex,0,1).substr($hex,0,1)); - $g = hexdec(substr($hex,1,1).substr($hex,1,1)); - $b = hexdec(substr($hex,2,1).substr($hex,2,1)); - } - else { - $r = hexdec(substr($hex,0,2)); - $g = hexdec(substr($hex,2,2)); - $b = hexdec(substr($hex,4,2)); - } - $rgb = array($r, $g, $b); - - if ($delim != '') { - return implode($delim, $rgb); // return rgb delimited string - } - else { - return $rgb; // return array of rgb values - } - } - } - -//function to get a color's luminence level -- dependencies: rgb_to_hsl() - if (!function_exists('get_color_luminence')) { - function get_color_luminence($color) { - //convert hex to rgb - if (substr_count($color, ',') == 0) { - $color = str_replace(' ', '', $color); - $color = str_replace('#', '', $color); - if (strlen($color) == 3) { - $r = hexdec(substr($color,0,1).substr($color,0,1)); - $g = hexdec(substr($color,1,1).substr($color,1,1)); - $b = hexdec(substr($color,2,1).substr($color,2,1)); - } - else { - $r = hexdec(substr($color,0,2)); - $g = hexdec(substr($color,2,2)); - $b = hexdec(substr($color,4,2)); - } - $color = $r.','.$g.','.$b; - } - - //color to array, pop alpha - if (substr_count($color, ',') > 0) { - $color = str_replace(' ', '', $color); - $color = str_replace('rgb', '', $color); - $color = str_replace('a(', '', $color); - $color = str_replace(')', '', $color); - $color = explode(',', $color); - $hsl = rgb_to_hsl($color[0], $color[1], $color[2]); - } - - //return luminence value - return (is_array($hsl) && is_numeric($hsl[2])) ? $hsl[2] : null; - } - } - -//function to lighten or darken a hexidecimal, rgb, or rgba color value by a percentage -- dependencies: rgb_to_hsl(), hsl_to_rgb() - if (!function_exists('color_adjust')) { - function color_adjust($color, $percent) { - /* - USAGE - 20% Lighter - color_adjust('#3f4265', 0.2); - color_adjust('234,120,6,0.3', 0.2); - 20% Darker - color_adjust('#3f4265', -0.2); // - color_adjust('rgba(234,120,6,0.3)', -0.2); - RETURNS - Same color format provided (hex in = hex out, rgb(a) in = rgb(a) out) - */ - - //convert hex to rgb - if (substr_count($color, ',') == 0) { - $color = str_replace(' ', '', $color); - if (substr_count($color, '#') > 0) { - $color = str_replace('#', '', $color); - $hash = '#'; - } - if (strlen($color) == 3) { - $r = hexdec(substr($color,0,1).substr($color,0,1)); - $g = hexdec(substr($color,1,1).substr($color,1,1)); - $b = hexdec(substr($color,2,1).substr($color,2,1)); - } - else { - $r = hexdec(substr($color,0,2)); - $g = hexdec(substr($color,2,2)); - $b = hexdec(substr($color,4,2)); - } - $color = $r.','.$g.','.$b; - } - - //color to array, pop alpha - if (substr_count($color, ',') > 0) { - $color = str_replace(' ', '', $color); - $wrapper = false; - if (substr_count($color, 'rgb') != 0) { - $color = str_replace('rgb', '', $color); - $color = str_replace('a(', '', $color); - $color = str_replace(')', '', $color); - $wrapper = true; - } - $colors = explode(',', $color); - $alpha = (sizeof($colors) == 4) ? array_pop($colors) : null; - $color = $colors; - unset($colors); - - //adjust color using rgb > hsl > rgb conversion - $hsl = rgb_to_hsl($color[0], $color[1], $color[2]); - $hsl[2] = $hsl[2] + $percent; - $color = hsl_to_rgb($hsl[0], $hsl[1], $hsl[2]); - - //return adjusted color in format received - if ($hash == '#') { //hex - for ($i = 0; $i <= 2; $i++) { - $hex_color = dechex($color[$i]); - if (strlen($hex_color) == 1) { $hex_color = '0'.$hex_color; } - $hex .= $hex_color; - } - return $hash.$hex; - } - else { //rgb(a) - $rgb = implode(',', $color); - if ($alpha != '') { $rgb .= ','.$alpha; $a = 'a'; } - if ($wrapper) { $rgb = 'rgb'.$a.'('.$rgb.')'; } - return $rgb; - } - } - - return $color; - } - } - -//function to convert an rgb color array to an hsl color array - if (!function_exists('rgb_to_hsl')) { - function rgb_to_hsl($r, $g, $b) { - $r /= 255; - $g /= 255; - $b /= 255; - - $max = max($r, $g, $b); - $min = min($r, $g, $b); - - $h; - $s; - $l = ($max + $min) / 2; - $d = $max - $min; - - if ($d == 0) { - $h = $s = 0; // achromatic - } - else { - $s = $d / (1 - abs((2 * $l) - 1)); - switch($max){ - case $r: - $h = 60 * fmod((($g - $b) / $d), 6); - if ($b > $g) { $h += 360; } - break; - case $g: - $h = 60 * (($b - $r) / $d + 2); - break; - case $b: - $h = 60 * (($r - $g) / $d + 4); - break; - } - } - - return array(round($h, 2), round($s, 2), round($l, 2)); - } - } - -//function to convert an hsl color array to an rgb color array - if (!function_exists('hsl_to_rgb')) { - function hsl_to_rgb($h, $s, $l){ - $r; - $g; - $b; - - $c = (1 - abs((2 * $l) - 1)) * $s; - $x = $c * (1 - abs(fmod(($h / 60), 2) - 1)); - $m = $l - ($c / 2); - - if ($h < 60) { - $r = $c; - $g = $x; - $b = 0; - } - else if ($h < 120) { - $r = $x; - $g = $c; - $b = 0; - } - else if ($h < 180) { - $r = 0; - $g = $c; - $b = $x; - } - else if ($h < 240) { - $r = 0; - $g = $x; - $b = $c; - } - else if ($h < 300) { - $r = $x; - $g = 0; - $b = $c; - } - else { - $r = $c; - $g = 0; - $b = $x; - } - - $r = ($r + $m) * 255; - $g = ($g + $m) * 255; - $b = ($b + $m) * 255; - - if ($r > 255) { $r = 255; } - if ($g > 255) { $g = 255; } - if ($b > 255) { $b = 255; } - - if ($r < 0) { $r = 0; } - if ($g < 0) { $g = 0; } - if ($b < 0) { $b = 0; } - - return array(floor($r), floor($g), floor($b)); - } - } - -//function to send email - if (!function_exists('send_email')) { - function send_email($eml_recipients, $eml_subject, $eml_body, &$eml_error = '', $eml_from_address = '', $eml_from_name = '', $eml_priority = 3, $eml_debug_level = 0) { - /* - RECIPIENTS NOTE: - - Pass in a single email address... - - user@domain.com - - Pass in a comma or semi-colon delimited string of e-mail addresses... - - user@domain.com,user2@domain2.com,user3@domain3.com - user@domain.com;user2@domain2.com;user3@domain3.com - - Pass in a simple array of email addresses... - - Array ( - [0] => user@domain.com - [1] => user2@domain2.com - [2] => user3@domain3.com - ) - - Pass in a multi-dimentional array of addresses (delivery, address, name)... - - Array ( - [0] => Array ( - [delivery] => to - [address] => user@domain.com - [name] => user 1 - ) - [1] => Array ( - [delivery] => cc - [address] => user2@domain2.com - [name] => user 2 - ) - [2] => Array ( - [delivery] => bcc - [address] => user3@domain3.com - [name] => user 3 - ) - ) - - - ERROR RESPONSE: - - Error messages are stored in the variable passed into $eml_error BY REFERENCE - - */ - - include_once("resources/phpmailer/class.phpmailer.php"); - include_once("resources/phpmailer/class.smtp.php"); - - $regexp = '/^[A-z0-9][\w.-]*@[A-z0-9][\w\-\.]+\.[A-z0-9]{2,6}$/'; - - $mail = new PHPMailer(); - $mail -> IsSMTP(); - if ($_SESSION['email']['smtp_hostname']['text'] != '') { - $mail -> Hostname = $_SESSION['email']['smtp_hostname']['text']; - } - $mail -> Host = $_SESSION['email']['smtp_host']['text']; - if (is_numeric($_SESSION['email']['smtp_port']['numeric'])) { - $mail -> Port = $_SESSION['email']['smtp_port']['numeric']; - } - if ($_SESSION['email']['smtp_auth']['text'] == "true") { - $mail -> SMTPAuth = $_SESSION['email']['smtp_auth']['text']; - $mail -> Username = $_SESSION['email']['smtp_username']['text']; - $mail -> Password = $_SESSION['email']['smtp_password']['text']; - } - else { - $mail -> SMTPAuth = 'false'; - } - if ($_SESSION['email']['smtp_secure']['text'] == "none") { - $_SESSION['email']['smtp_secure']['text'] = ''; - } - if ($_SESSION['email']['smtp_secure']['text'] != '') { - $mail -> SMTPSecure = $_SESSION['email']['smtp_secure']['text']; - } - if (isset($_SESSION['email']['smtp_validate_certificate']) && $_SESSION['email']['smtp_validate_certificate']['boolean'] == "false") { - // bypass TLS certificate check e.g. for self-signed certificates - $mail -> SMTPOptions = array( - 'ssl' => array( - 'verify_peer' => false, - 'verify_peer_name' => false, - 'allow_self_signed' => true - ) - ); - } - $eml_from_address = ($eml_from_address != '') ? $eml_from_address : $_SESSION['email']['smtp_from']['text']; - $eml_from_name = ($eml_from_name != '') ? $eml_from_name : $_SESSION['email']['smtp_from_name']['text']; - $mail -> SetFrom($eml_from_address, $eml_from_name); - $mail -> AddReplyTo($eml_from_address, $eml_from_name); - $mail -> Subject = $eml_subject; - $mail -> MsgHTML($eml_body); - $mail -> Priority = $eml_priority; - if (is_numeric($eml_debug_level) && $eml_debug_level > 0) { - $mail -> SMTPDebug = $eml_debug_level; - } - - $address_found = false; - - if (!is_array($eml_recipients)) { // must be a single or delimited recipient address(s) - $eml_recipients = str_replace(' ', '', $eml_recipients); - if (substr_count(',', $eml_recipients)) { $delim = ','; } - if (substr_count(';', $eml_recipients)) { $delim = ';'; } - if ($delim) { $eml_recipients = explode($delim, $eml_recipients); } // delimiter found, convert to array of addresses - } - - if (is_array($eml_recipients)) { // check if multiple recipients - foreach ($eml_recipients as $eml_recipient) { - if (is_array($eml_recipient)) { // check if each recipient has multiple fields - if ($eml_recipient["address"] != '' && preg_match($regexp, $eml_recipient["address"]) == 1) { // check if valid address - switch ($eml_recipient["delivery"]) { - case "cc" : $mail -> AddCC($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); break; - case "bcc" : $mail -> AddBCC($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); break; - default : $mail -> AddAddress($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); - } - $address_found = true; - } - } - else if ($eml_recipient != '' && preg_match($regexp, $eml_recipient) == 1) { // check if recipient value is simply (only) an address - $mail -> AddAddress($eml_recipient); - $address_found = true; - } - } - - if (!$address_found) { - $eml_error = "No valid e-mail address provided."; - return false; - } - - } - else { // just a single e-mail address found, not an array of addresses - if ($eml_recipients != '' && preg_match($regexp, $eml_recipients) == 1) { // check if email syntax is valid - $mail -> AddAddress($eml_recipients); - } - else { - $eml_error = "No valid e-mail address provided."; - return false; - } - } - - if (!$mail -> Send()) { - $eml_error = $mail -> ErrorInfo; - return false; - } - else { - return true; - } - - $mail -> ClearAddresses(); - $mail -> SmtpClose(); - - unset($mail); - } - } - -//encrypt a string - if (!function_exists('encrypt')) { - function encrypt($key, $data) { - $encryption_key = base64_decode($key); - $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); - $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv); - return base64_encode($encrypted.'::'.$iv); - } - } - -//decrypt a string - if (!function_exists('decrypt')) { - function decrypt($key, $data) { - $encryption_key = base64_decode($key); - list($encrypted_data, $iv) = explode('::', base64_decode($data), 2); - return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv); - } - } - -//json detection - if (!function_exists('is_json')) { - function is_json($str) { - return (is_string($str) && is_object(json_decode($str))) ? true : false; - } - } - -//mac detection - if (!function_exists('is_mac')) { - function is_mac($str) { - return (preg_match('/([a-fA-F0-9]{2}[:|\-]?){6}/', $str) == 1) ? true : false; - } - } - -//format mac address - if (!function_exists('format_mac')) { - function format_mac($str, $delim = '-', $case = 'lower') { - if (is_mac($str)) { - $str = join($delim, str_split($str, 2)); - $str = ($case == 'upper') ? strtoupper($str) : strtolower($str); - } - return $str; - } - } - -//transparent gif - if (!function_exists('img_spacer')) { - function img_spacer($width = '1px', $height = '1px', $custom = null) { - return ""; - } - } - -//lower case - function lower_case($string) { - if (function_exists('mb_strtolower')) { - return mb_strtolower($string, 'UTF-8'); - } - else { - return strtolower($string); - } - } - -//upper case - function upper_case($string) { - if (function_exists('mb_strtoupper')) { - return mb_strtoupper($string, 'UTF-8'); - } - else { - return strtoupper($string); - } - } - -//email validate - if (!function_exists('email_validate')) { - function email_validate($strEmail){ - $validRegExp = '/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-zA-Z]{2,3}$/'; - // search email text for regular exp matches - preg_match($validRegExp, $strEmail, $matches, PREG_OFFSET_CAPTURE); - if (count($matches) == 0) { - return 0; - } - else { - return 1; - } - } - } - -//write javascript function that detects select key combinations to perform designated actions - if (!function_exists('key_press')) { - function key_press($key, $direction = 'up', $subject = 'document', $exceptions = array(), $prompt = null, $action = null, $script_wrapper = true) { - //determine key code - switch (strtolower($key)) { - case 'escape': - $key_code = '(e.which == 27)'; - break; - case 'delete': - $key_code = '(e.which == 46)'; - break; - case 'enter': - $key_code = '(e.which == 13)'; - break; - case 'backspace': - $key_code = '(e.which == 8)'; - break; - case 'ctrl+s': - $key_code = '(((e.which == 115 || e.which == 83) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; - break; - case 'ctrl+q': - $key_code = '(((e.which == 113 || e.which == 81) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; - break; - case 'ctrl+a': - $key_code = '(((e.which == 97 || e.which == 65) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; - break; - case 'ctrl+enter': - $key_code = '(((e.which == 13 || e.which == 10) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; - break; - default: - return; - } - //check for element exceptions - if (sizeof($exceptions) > 0) { - $exceptions = "!$(e.target).is('".implode(',', $exceptions)."') && "; - } - //quote if selector is id or class - $subject = ($subject != 'window' && $subject != 'document') ? "'".$subject."'" : $subject; - //output script - echo "\n\n\n"; - if ($script_wrapper) { - echo "\n"; - } - echo "\n\n\n"; - } - } - -//format border radius values - if (!function_exists('format_border_radius')) { - function format_border_radius($radius_value, $default = 5) { - $radius_value = ($radius_value != '') ? $radius_value : $default; - $br_a = explode(' ', $radius_value); - foreach ($br_a as $index => $br) { - if (substr_count($br, '%') > 0) { - $br_b[$index]['number'] = str_replace('%', '', $br); - $br_b[$index]['unit'] = '%'; - } - else { - $br_b[$index]['number'] = str_replace('px', '', strtolower($br)); - $br_b[$index]['unit'] = 'px'; - } - } - unset($br_a, $br); - if (sizeof($br_b) == 4) { - $br['tl']['n'] = $br_b[0]['number']; - $br['tr']['n'] = $br_b[1]['number']; - $br['br']['n'] = $br_b[2]['number']; - $br['bl']['n'] = $br_b[3]['number']; - $br['tl']['u'] = $br_b[0]['unit']; - $br['tr']['u'] = $br_b[1]['unit']; - $br['br']['u'] = $br_b[2]['unit']; - $br['bl']['u'] = $br_b[3]['unit']; - } - else if (sizeof($br_b) == 2) { - $br['tl']['n'] = $br_b[0]['number']; - $br['tr']['n'] = $br_b[0]['number']; - $br['br']['n'] = $br_b[1]['number']; - $br['bl']['n'] = $br_b[1]['number']; - $br['tl']['u'] = $br_b[0]['unit']; - $br['tr']['u'] = $br_b[0]['unit']; - $br['br']['u'] = $br_b[1]['unit']; - $br['bl']['u'] = $br_b[1]['unit']; - } - else { - $br['tl']['n'] = $br_b[0]['number']; - $br['tr']['n'] = $br_b[0]['number']; - $br['br']['n'] = $br_b[0]['number']; - $br['bl']['n'] = $br_b[0]['number']; - $br['tl']['u'] = $br_b[0]['unit']; - $br['tr']['u'] = $br_b[0]['unit']; - $br['br']['u'] = $br_b[0]['unit']; - $br['bl']['u'] = $br_b[0]['unit']; - } - unset($br_b); - - return $br; //array - } - } - -//converts a string to a regular expression - if (!function_exists('string_to_regex')) { - function string_to_regex($string, $prefix='') { - //escape the plus - if (substr($string, 0, 1) == "+") { - $string = "^\\+(".substr($string, 1).")$"; - } - //add prefix - if (strlen($prefix) > 0) { - $prefix = $prefix.'?'; - } - //convert N,X,Z syntax to regex - $string = str_ireplace("N", "[2-9]", $string); - $string = str_ireplace("X", "[0-9]", $string); - $string = str_ireplace("Z", "[1-9]", $string); - //add ^ to the start of the string if missing - if (substr($string, 0, 1) != "^") { - $string = "^".$string; - } - //add $ to the end of the string if missing - if (substr($string, -1) != "$") { - $string = $string."$"; - } - //add the round brackets ( and ) - if (!strstr($string, '(')) { - if (strstr($string, '^')) { - $string = str_replace("^", "^".$prefix."(", $string); - } - else { - $string = '^('.$string; - } - } - if (!strstr($string, ')')) { - if (strstr($string, '$')) { - $string = str_replace("$", ")$", $string); - } - else { - $string = $string.')$'; - } - } - //return the result - return $string; - } - //$string = "+12089068227"; echo $string." ".string_to_regex($string)."\n"; - //$string = "12089068227"; echo $string." ".string_to_regex($string)."\n"; - //$string = "2089068227"; echo $string." ".string_to_regex($string)."\n"; - //$string = "^(20890682[0-9][0-9])$"; echo $string." ".string_to_regex($string)."\n"; - //$string = "1208906xxxx"; echo $string." ".string_to_regex($string)."\n"; - //$string = "nxxnxxxxxxx"; echo $string." ".string_to_regex($string)."\n"; - //$string = "208906xxxx"; echo $string." ".string_to_regex($string)."\n"; - //$string = "^(2089068227"; echo $string." ".string_to_regex($string)."\n"; - //$string = "^2089068227)"; echo $string." ".string_to_regex($string)."\n"; - //$string = "2089068227$"; echo $string." ".string_to_regex($string)."\n"; - //$string = "2089068227)$"; echo $string." ".string_to_regex($string)."\n"; - } - -//dynamically load available web fonts - if (!function_exists('get_available_fonts')) { - function get_available_fonts($sort = 'alpha') { - if ($_SESSION['theme']['font_source_key']['text'] != '') { - if (!is_array($_SESSION['fonts_available']) || sizeof($_SESSION['fonts_available']) == 0) { - /* - sort options: - alpha - alphabetically - date - by date added (most recent font added or updated first) - popularity - by popularity (most popular family first) - style - by number of styles available (family with most styles first) - trending - by families seeing growth in usage (family seeing the most growth first) - */ - $google_api_url = 'https://www.googleapis.com/webfonts/v1/webfonts?key='.$_SESSION['theme']['font_source_key']['text'].'&sort='.$sort; - $response = file_get_contents($google_api_url); - if ($response != '') { - $data = json_decode($response, true); - $items = $data['items']; - foreach ($items as $item) { - $fonts[] = $item['family']; - } - //echo "
".print_r($font_list, true)."
"; - } - $_SESSION['fonts_available'] = $fonts; - unset($fonts); - } - return (is_array($_SESSION['fonts_available']) && sizeof($_SESSION['fonts_available']) > 0) ? $_SESSION['fonts_available'] : array(); - } - else { - return false; - } - } - } - -//dynamically import web fonts (by reading static css file) - if (!function_exists('import_fonts')) { - function import_fonts($file_to_parse, $line_styles_begin = null) { - /* - This function reads the contents of $file_to_parse, beginning at $line_styles_begin (if set), - and attempts to parse the specified google fonts used. The assumption is that each curly brace - will be on its own line, each CSS style (attribute: value;) will be on its own line, a single - Google Fonts name will be used per selector, and that it will be surrounded by SINGLE quotes, - as shown in the example below: - - .class_name { - font-family: 'Google Font'; - font-weight: 300; - font-style: italic; - } - - If the CSS styles are formatted as described, the necessary @import string should be generated - correctly. - */ - - $file = file_get_contents($_SERVER["DOCUMENT_ROOT"].$file_to_parse); - $lines = explode("\n", $file); - - $style_counter = 0; - foreach ($lines as $line_number => $line) { - if ($line_styles_begin != '' && $line_number < $line_styles_begin - 1) { continue; } - if (substr_count($line, "{") > 0) { - $style_lines[$style_counter]['begins'] = $line_number; - } - if (substr_count($line, "}") > 0) { - $style_lines[$style_counter]['ends'] = $line_number; - $style_counter++; - } - } - //echo "\n\n".print_r($style_lines, true)."\n\n"; - - if (is_array($style_lines) && sizeof($style_lines) > 0) { - - foreach ($style_lines as $index => $style_line) { - for ($l = $style_line['begins']+1; $l < $style_line['ends']; $l++) { - $tmp[] = $lines[$l]; - } - $style_groups[] = $tmp; - unset($tmp); - } - //echo "\n\n".print_r($style_groups, true)."\n\n"; - - if (is_array($style_groups) && sizeof($style_groups) > 0) { - - foreach ($style_groups as $style_group_index => $style_group) { - foreach ($style_group as $style_index => $style) { - $tmp = explode(':', $style); - $attribute = trim($tmp[0]); - $value = trim(trim($tmp[1]),';'); - $style_array[$attribute] = $value; - } - $style_groups[$style_group_index] = $style_array; - unset($style_array); - } - //echo "\n\n".print_r($style_groups, true)."\n\n"; - - foreach ($style_groups as $style_group_index => $style_group) { - $style_value = $style_group['font-family']; - if (substr_count($style_value, "'") > 0) { - //determine font - $font_begin = strpos($style_value, "'")+1; - $font_end = strpos($style_value, "'", $font_begin); - $font_name = substr($style_value, $font_begin, $font_end - $font_begin); - //determine modifiers - $weight = (is_numeric($style_group['font-weight']) || strtolower($style_group['font-weight']) == 'bold') ? strtolower($style_group['font-weight']) : null; - $italic = (strtolower($style_group['font-style']) == 'italic') ? 'italic' : null; - //add font to array - $fonts[$font_name][] = $weight.$italic; - } - } - //echo "\n\n/*".print_r($fonts, true)."*/\n\n"; - - if (is_array($fonts)) { - foreach ($fonts as $font_name => $modifiers) { - $modifiers = array_unique($modifiers); - $import_font_string = str_replace(' ', '+', $font_name); - if (is_array($modifiers) && sizeof($modifiers) > 0) { - $import_font_string .= ':'.implode(',', $modifiers); - } - $import_fonts[] = $import_font_string; - } - //echo "\n\n/*".print_r($import_fonts, true)."*/\n\n"; - $import_string = "@import url(//fonts.googleapis.com/css?family=".implode('|', $import_fonts).");"; - echo $import_string."\n"; - } - - } - - } - - } - } - -//retrieve array of countries - if (!function_exists('get_countries')) { - function get_countries($db) { - $sql = "select * from v_countries order by country asc"; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $result_count = count($result); - return ($result_count > 0) ? $result : false; - unset ($prep_statement, $sql); - } - } - -//make directory with event socket - function event_socket_mkdir($dir) { - //connect to fs - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - if (!$fp) { - return false; - } - //send the mkdir command to freeswitch - if ($fp) { - //build and send the mkdir command to freeswitch - $switch_cmd = "lua mkdir.lua '$dir'"; - $switch_result = event_socket_request($fp, 'api '.$switch_cmd); - fclose($fp); - //check result - if (trim($switch_result) == "-ERR no reply") { - return true; - } - } - //can not create directory - return false; - } - -//escape user data - function escape($string) { - return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); - //return htmlentities($string, ENT_QUOTES, 'UTF-8'); - } - -//output pre-formatted array keys and values - if (!function_exists('view_array')) { - function view_array($array, $exit = true) { - echo '
'.print_r($array, true).'

'; - $exit and exit(); - } - } - -//format db date and/or time to local date and/or time - if (!function_exists('format_when_local')) { - function format_when_local($when, $format = 'dt', $include_seconds = false) { - if ($when != '') { - // determine when format - if (substr_count($when, ' ') > 0) { // date and time - $tmp = explode(' ', $when); - $date = $tmp[0]; - $time = $tmp[1]; - } - else if (substr_count($when, '-') > 0) { // date only - $date = $when; - } - else if (substr_count($when, ':') > 0) { // time only - $time = $when; - } - unset($when, $tmp); - - // format date - if ($date != '') { - $tmp = explode('-', $date); - $date = $tmp[1].'-'.$tmp[2].'-'.$tmp[0]; - } - - // format time - if ($time != '') { - $tmp = explode(':', $time); - if ($tmp[0] >= 0 && $tmp[0] <= 11) { - $meridiem = 'AM'; - $hour = ($tmp[0] == 0) ? 12 : $tmp[0]; - } - else { - $meridiem = 'PM'; - $hour = ($tmp[0] > 12) ? ($tmp[0] - 12) : $tmp[0]; - } - $minute = $tmp[1]; - $second = $tmp[2]; - } - - // structure requested time format - $time = $hour.':'.$minute; - if ($include_seconds) { $time .= ':'.$second; } - $time .= ' '.$meridiem; - - $return['d'] = $date; - $return['t'] = $time; - $return['dt'] = $date.' '.$time; - - return $return[$format]; - } - else { - return false; - } - } - } - -//define email button (src: https://buttons.cm) - if (!function_exists('email_button')) { - function email_button($text = 'Click Here!', $link = URL, $bg_color = '#dddddd', $fg_color = '#000000', $radius = '') { - - // default button radius - $radius = $radius != '' ? $radius : '3px'; - - // retrieve single/first numeric radius value for ms arc - $tmp = $radius; - if (substr_count($radius, ' ') > 0) { - $tmp = explode(' ', $radius); - $tmp = $tmp[0]; - } - $tmp = preg_replace("/[^0-9,.]/", '', $tmp); // remove non-numeric characters - $arc = floor($tmp / 35 * 100); // calculate percentage - - // create button code - $btn = " -
- - ".$text." - -
- "; - - return $btn; - } - } - - -?> + + Portions created by the Initial Developer are Copyright (C) 2008-2019 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane + Luis Daniel Lucio Quiroz +*/ + + if (!function_exists('software_version')) { + function software_version() { + return '4.5.6'; + } + } + + if (!function_exists('version')) { + function version() { + return software_version(); + } + } + + if (!function_exists('numeric_version')) { + function numeric_version() { + $v = explode('.', software_version()); + $n = ($v[0] * 10000 + $v[1] * 100 + $v[2]); + return $n; + } + } + + if (!function_exists('mb_strtoupper')) { + function mb_strtoupper($string) { + return strtoupper($string); + } + } + + if (!function_exists('check_float')) { + function check_float($string) { + $string = str_replace(",",".",$string); + return trim($string); + } + } + + if (!function_exists('check_str')) { + function check_str($string, $trim = true) { + global $db_type, $db; + //when code in db is urlencoded the ' does not need to be modified + if ($db_type == "sqlite") { + if (function_exists('sqlite_escape_string')) { + $string = sqlite_escape_string($string); + } + else { + $string = str_replace("'","''",$string); + } + } + if ($db_type == "pgsql") { + $string = pg_escape_string($string); + } + if ($db_type == "mysql") { + if(function_exists('mysql_real_escape_string')){ + $tmp_str = mysql_real_escape_string($string); + } + else{ + $tmp_str = mysqli_real_escape_string($db, $string); + } + if (strlen($tmp_str)) { + $string = $tmp_str; + } + else { + $search = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a"); + $replace = array("\\x00", "\\n", "\\r", "\\\\" ,"\'", "\\\"", "\\\x1a"); + $string = str_replace($search, $replace, $string); + } + } + $string = ($trim) ? trim($string) : $string; + return $string; + } + } + + if (!function_exists('check_sql')) { + function check_sql($string) { + return trim($string); //remove white space + } + } + + if (!function_exists('check_cidr')) { + function check_cidr ($cidr,$ip_address) { + list ($subnet, $mask) = explode ('/', $cidr); + return ( ip2long ($ip_address) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($subnet); + } + } + + if (!function_exists('fix_postback')) { + function fix_postback($post_array) { + foreach ($post_array as $index => $value) { + if (is_array($value)) { fix_postback($value); } + else { + $value = str_replace('"', """, $value); + $value = str_replace("'", "'", $value); + $post_array[$index] = $value; + } + } + return $post_array; + } + } + + if (!function_exists('uuid')) { + function uuid() { + //uuid version 4 + return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + // 32 bits for "time_low" + mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), + + // 16 bits for "time_mid" + mt_rand( 0, 0xffff ), + + // 16 bits for "time_hi_and_version", + // four most significant bits holds version number 4 + mt_rand( 0, 0x0fff ) | 0x4000, + + // 16 bits, 8 bits for "clk_seq_hi_res", + // 8 bits for "clk_seq_low", + // two most significant bits holds zero and one for variant DCE1.1 + mt_rand( 0, 0x3fff ) | 0x8000, + + // 48 bits for "node" + mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) + ); + } + //echo uuid(); + } + + if (!function_exists('is_uuid')) { + function is_uuid($uuid) { + $regex = '/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i'; + return preg_match($regex, $uuid); + } + } + + if (!function_exists('recursive_copy')) { + if (file_exists('/bin/cp')) { + function recursive_copy($src, $dst, $options = '') { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'SUN') { + //copy -R recursive, preserve attributes for SUN + $cmd = 'cp -Rp '.$src.'/* '.$dst; + } else { + //copy -R recursive, -L follow symbolic links, -p preserve attributes for other Posix systemss + $cmd = 'cp -RLp '.$options.' '.$src.'/* '.$dst; + } + //$this->write_debug($cmd); + exec ($cmd); + } + } elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + function recursive_copy($src, $dst, $options = '') { + $src = normalize_path_to_os($src); + $dst = normalize_path_to_os($dst); + exec("xcopy /E /Y \"$src\" \"$dst\""); + } + } else { + function recursive_copy($src, $dst, $options = '') { + $dir = opendir($src); + if (!$dir) { + throw new Exception("recursive_copy() source directory '".$src."' does not exist."); + } + if (!is_dir($dst)) { + if (!mkdir($dst,02770,true)) { + throw new Exception("recursive_copy() failed to create destination directory '".$dst."'"); + } + } + while(false !== ( $file = readdir($dir)) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ) { + recursive_copy($src . '/' . $file,$dst . '/' . $file); + } + else { + copy($src . '/' . $file,$dst . '/' . $file); + } + } + } + closedir($dir); + } + } + } + + if (!function_exists('recursive_delete')) { + if (file_exists('/bin/rm')) { + function recursive_delete($dir) { + //$this->write_debug('rm -Rf '.$dir.'/*'); + exec ('rm -Rf '.$dir.'/*'); + clearstatcache(); + } + }elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){ + function recursive_delete($dir) { + $dst = normalize_path_to_os($dst); + //$this->write_debug("del /S /F /Q \"$dir\""); + exec("del /S /F /Q \"$dir\""); + clearstatcache(); + } + }else{ + function recursive_delete($dir) { + foreach (glob($dir) as $file) { + if (is_dir($file)) { + //$this->write_debug("rm dir: ".$file); + recursive_delete("$file/*"); + rmdir($file); + } else { + //$this->write_debug("delete file: ".$file); + unlink($file); + } + } + clearstatcache(); + } + } + } + + if (!function_exists('if_group')) { + function if_group($group) { + //set default false + $result = false; + //search for the permission + if (count($_SESSION["groups"]) > 0) { + foreach($_SESSION["groups"] as $row) { + if ($row['group_name'] == $group) { + $result = true; + break; + } + } + } + //return the result + return $result; + } + } + + if (!function_exists('permission_exists')) { + function permission_exists($permission) { + //set default false + $result = false; + //find the permission + if (is_array($_SESSION["permissions"]) && $_SESSION["permissions"][$permission] == true) { + $result = true; + } + //return the result + return $result; + } + } + + if (!function_exists('group_members')) { + function group_members($db, $user_uuid) { + global $domain_uuid; + $sql = "select * from v_user_groups "; + $sql .= "where domain_uuid = '$domain_uuid' "; + $sql .= "and user_uuid = '".$user_uuid."' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + $result_count = count($result); + $group_members = "||"; + foreach($result as $field) { + //get the list of groups + $group_members .= $field['group_name']."||"; + } + unset($sql, $result, $row_count); + return $group_members; + } + } + + if (!function_exists('if_group_member')) { + function if_group_member($group_members, $group) { + if (stripos($group_members, "||".$group."||") === false) { + return false; //group does not exist + } + else { + return true; //group exists + } + } + } + + if (!function_exists('superadmin_list')) { + function superadmin_list($db) { + global $domain_uuid; + $sql = "select * from v_user_groups "; + $sql .= "where group_name = 'superadmin' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + $result_count = count($result); + $superadmin_list = "||"; + foreach($result as $field) { + //get the list of superadmins + $superadmin_list .= $field['user_uuid']."||"; + } + unset($sql, $result, $row_count); + return $superadmin_list; + } + } + //superadmin_list($db); + + if (!function_exists('if_superadmin')) { + function if_superadmin($superadmin_list, $user_uuid) { + if (stripos($superadmin_list, "||".$user_uuid."||") === false) { + return false; //user_uuid does not exist + } + else { + return true; //user_uuid exists + } + } + } + + if (!function_exists('html_select_other')) { + function html_select_other($db, $table_name, $field_name, $sql_where_optional, $field_current_value) { + //html select other : build a select box from distinct items in db with option for other + global $domain_uuid; + + $html = "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "
\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "\n"; + $html .= "
"; + + return $html; + } + } + + if (!function_exists('html_select')) { + function html_select($db, $table_name, $field_name, $sql_where_optional, $field_current_value, $field_value = '', $style = '') { + //html select other : build a select box from distinct items in db with option for other + global $domain_uuid; + + if (strlen($field_value) > 0) { + $html .= "\n"; + $html .= "\n"; + $sql = "SELECT distinct($field_name) as $field_name FROM $table_name $sql_where_optional "; + } + + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + $result_count = count($result); + if ($result_count > 0) { //if user account exists then show login + foreach($result as $field) { + if (strlen($field[$field_name]) > 0) { + if ($field_current_value == $field[$field_name]) { + if (strlen($field_value) > 0) { + $html .= "\n"; + } + else { + $html .= "\n"; + } + } + else { + if (strlen($field_value) > 0) { + $html .= "\n"; + } + else { + $html .= "\n"; + } + } + } + } + } + unset($sql, $result, $result_count); + $html .= "\n"; + + return $html; + } + } + //$table_name = 'v_templates'; $field_name = 'templatename'; $sql_where_optional = "where domain_uuid = '$domain_uuid' "; $field_current_value = ''; + //echo html_select($db, $table_name, $field_name, $sql_where_optional, $field_current_value); + + if (!function_exists('html_select_on_change')) { + function html_select_on_change($db, $table_name, $field_name, $sql_where_optional, $field_current_value, $onchange, $field_value = '') { + //html select other : build a select box from distinct items in db with option for other + global $domain_uuid; + + $html .= "\n"; + + return $html; + } + } + + if (!function_exists('th_order_by')) { + //html table header order by + function th_order_by($field_name, $columntitle, $order_by, $order, $app_uuid = '', $css = '', $additional_get_params='', $description='') { + if (strlen($app_uuid) > 0) { $app_uuid = "&app_uuid=".$app_uuid; } // accomodate need to pass app_uuid where necessary (inbound/outbound routes lists) + if (strlen($additional_get_params) > 0) {$additional_get_params = '&'.$additional_get_params; } // you may need to pass other parameters + $html = ""; + $description = (strlen($description) > 0) ? $description . ', ': ''; + if (strlen($order_by) == 0) + $order = 'asc'; + if ($order == "asc") { + $description .= 'sort(ascending)'; + $html .= "$columntitle"; + } + else { + $description .= 'sort(descending)'; + $html .= "$columntitle"; + } + $html .= ""; + return $html; + } + } + ////example usage + //$table_name = 'tblcontacts'; $field_name = 'contactcategory'; $sql_where_optional = "", $field_current_value =''; + //echo html_select_other($db, $table_name, $field_name, $sql_where_optional, $field_current_value); + //// On the page that recieves the POST + //if (check_str($_POST["contactcategory"]) == "Other") { //echo "found: ".$contactcategory; + // $contactcategory = check_str($_POST["contactcategoryother"]); + //} + + if (!function_exists('log_add')) { + function log_add($db, $log_type, $log_status, $log_desc, $log_add_user, $log_add_user_ip) { + return; //this disables the function + global $domain_uuid; + + $sql = "insert into logs "; + $sql .= "("; + $sql .= "log_type, "; + $sql .= "log_status, "; + $sql .= "log_desc, "; + $sql .= "log_add_user, "; + $sql .= "log_add_user_ip, "; + $sql .= "log_add_date "; + $sql .= ")"; + $sql .= "values "; + $sql .= "("; + $sql .= "'$log_type', "; + $sql .= "'$log_status', "; + $sql .= "'$log_desc', "; + $sql .= "'$log_add_user', "; + $sql .= "'$log_add_user_ip', "; + $sql .= "now() "; + $sql .= ")"; + $db->exec(check_sql($sql)); + unset($sql); + } + } + //$log_type = ''; $log_status=''; $log_add_user=''; $log_desc=''; + //log_add($db, $log_type, $log_status, $log_desc, $log_add_user, $_SERVER["REMOTE_ADDR"]); + + if (!function_exists('get_ext')) { + function get_ext($filename) { + preg_match('/[^?]*/', $filename, $matches); + $string = $matches[0]; + + $pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE); + + // check if there is any extension + if(count($pattern) == 1){ + //echo 'No File Extension Present'; + return ''; + } + + if(count($pattern) > 1) { + $filenamepart = $pattern[count($pattern)-1][0]; + preg_match('/[^?]*/', $filenamepart, $matches); + return $matches[0]; + } + } + //echo "ext: ".get_ext('test.txt'); + } + + if (!function_exists('file_upload')) { + function file_upload($field = '', $file_type = '', $dest_dir = '') { + + $uploadtempdir = $_ENV["TEMP"]."\\"; + ini_set('upload_tmp_dir', $uploadtempdir); + + $tmp_name = $_FILES[$field]["tmp_name"]; + $file_name = $_FILES[$field]["name"]; + $file_type = $_FILES[$field]["type"]; + $file_size = $_FILES[$field]["size"]; + $file_ext = get_ext($file_name); + $file_name_orig = $file_name; + $file_name_base = substr($file_name, 0, (strlen($file_name) - (strlen($file_ext)+1))); + //$dest_dir = '/tmp'; + + if ($file_size == 0){ + return; + } + + if (!is_dir($dest_dir)) { + echo "dest_dir not found
\n"; + return; + } + + //check if allowed file type + if ($file_type == "img") { + switch (strtolower($file_ext)) { + case "jpg": + break; + case "png": + break; + case "gif": + break; + case "bmp": + break; + case "psd": + break; + case "tif": + break; + default: + return false; + } + } + if ($file_type == "file") { + switch (strtolower($file_ext)) { + case "doc": + break; + case "pdf": + break; + case "ppt": + break; + case "xls": + break; + case "zip": + break; + case "exe": + break; + default: + return false; + } + } + + //find unique filename: check if file exists if it does then increment the filename + $i = 1; + while( file_exists($dest_dir.'/'.$file_name)) { + if (strlen($file_ext)> 0) { + $file_name = $file_name_base . $i .'.'. $file_ext; + } + else { + $file_name = $file_name_orig . $i; + } + $i++; + } + + //echo "file_type: ".$file_type."
\n"; + //echo "tmp_name: ".$tmp_name."
\n"; + //echo "file_name: ".$file_name."
\n"; + //echo "file_ext: ".$file_ext."
\n"; + //echo "file_name_orig: ".$file_name_orig."
\n"; + //echo "file_name_base: ".$file_name_base."
\n"; + //echo "dest_dir: ".$dest_dir."
\n"; + + //move the file to upload directory + //bool move_uploaded_file ( string $filename, string $destination ) + + if (move_uploaded_file($tmp_name, $dest_dir.'/'.$file_name)){ + return $file_name; + } + else { + echo "File upload failed! Here's some debugging info:\n"; + return false; + } + exit; + + } //end function + } + + if ( !function_exists('sys_get_temp_dir')) { + function sys_get_temp_dir() { + if( $temp=getenv('TMP') ) return $temp; + if( $temp=getenv('TEMP') ) return $temp; + if( $temp=getenv('TMPDIR') ) return $temp; + $temp=tempnam(__FILE__,''); + if (file_exists($temp)) { + unlink($temp); + return dirname($temp); + } + return null; + } + } + //echo realpath(sys_get_temp_dir()); + + if ( !function_exists('normalize_path')) { + //don't use DIRECTORY_SEPARATOR as it will change on a per platform basis and we need consistency + function normalize_path($path) { + return str_replace(array('/','\\'), '/', $path); + } + } + + if ( !function_exists('normalize_path_to_os')) { + function normalize_path_to_os($path) { + return str_replace(array('/','\\'), DIRECTORY_SEPARATOR, $path); + } + } + + if (!function_exists('username_exists')) { + function username_exists($username) { + global $db, $domain_uuid; + $sql = "select * from v_users "; + $sql .= "where domain_uuid = '$domain_uuid' "; + $sql .= "and username = '".$username."' "; + //$sql .= "and user_enabled = 'true' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + $result_count = count($result); + if ($result_count > 0) { + return true; + } + else { + return false; + } + } + } + + if (!function_exists('add_extension_user')) { + function add_extension_user($extension_uuid, $username) { + global $db, $domain_uuid; + //get the user_uuid by using the username + $sql = "select * from v_users "; + $sql .= "where domain_uuid = '$domain_uuid' "; + $sql .= "and username = '$username' "; + //$sql .= "and user_enabled = 'true' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + unset($prep_statement); + foreach ($result as &$row) { + //check if the user_uuid exists in v_extension_users + $sql = "select * from v_extension_users "; + $sql .= "where domain_uuid = '$domain_uuid' "; + $sql .= "and user_uuid = '".$row["user_uuid"]."' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $extension_users_result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + unset($prep_statement); + //assign the extension to the user + if (count($extension_users_result) == 0) { + $sql = "insert into v_extension_users "; + $sql .= "("; + $sql .= "domain_uuid, "; + $sql .= "extension_uuid, "; + $sql .= "user_uuid "; + $sql .= ") "; + $sql .= "values "; + $sql .= "("; + $sql .= "'$domain_uuid', "; + $sql .= "'$extension_uuid', "; + $sql .= "'".$row["user_uuid"]."' "; + $sql .= ")"; + $db->exec(check_sql($sql)); + unset($sql); + } + } + unset ($result); + } + } + + if (!function_exists('user_add')) { + function user_add($username, $password, $user_email='') { + global $db, $domain_uuid, $v_salt; + $user_uuid = uuid(); + if (strlen($username) == 0) { return false; } + if (strlen($password) == 0) { return false; } + if (!username_exists($username)) { + //salt used with the password to create a one way hash + $salt = generate_password('20', '4'); + //add the user account + $user_type = 'Individual'; + $user_category = 'user'; + $sql = "insert into v_users "; + $sql .= "("; + $sql .= "domain_uuid, "; + $sql .= "user_uuid, "; + $sql .= "username, "; + $sql .= "password, "; + $sql .= "salt, "; + if (strlen($user_email) > 0) { $sql .= "user_email, "; } + $sql .= "add_date, "; + $sql .= "add_user "; + $sql .= ")"; + $sql .= "values "; + $sql .= "("; + $sql .= "'$domain_uuid', "; + $sql .= "'$user_uuid', "; + $sql .= "'$username', "; + $sql .= "'".md5($salt.$password)."', "; + $sql .= "'$salt', "; + if (strlen($user_email) > 0) { $sql .= "'$user_email', "; } + $sql .= "now(), "; + $sql .= "'".$_SESSION["username"]."' "; + $sql .= ")"; + $db->exec(check_sql($sql)); + unset($sql); + + //add the user to the member group + $group_name = 'user'; + $sql = "insert into v_user_groups "; + $sql .= "("; + $sql .= "user_group_uuid, "; + $sql .= "domain_uuid, "; + $sql .= "group_name, "; + $sql .= "user_uuid "; + $sql .= ")"; + $sql .= "values "; + $sql .= "("; + $sql .= "'".uuid()."', "; + $sql .= "'$domain_uuid', "; + $sql .= "'$group_name', "; + $sql .= "'$user_uuid' "; + $sql .= ")"; + $db->exec(check_sql($sql)); + unset($sql); + } //end if !username_exists + } //end function definition + } //end function_exists + +function switch_module_is_running($fp, $mod) { + if (!$fp) { + //if the handle does not exist create it + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + //if the handle still does not exist show an error message + if (!$fp) { + $msg = "
Connection to Event Socket failed.
"; + } + } + if ($fp) { + //send the api command to check if the module exists + $switchcmd = "module_exists $mod"; + $switch_result = event_socket_request($fp, 'api '.$switchcmd); + unset($switchcmd); + if (trim($switch_result) == "true") { + return true; + } + else { + return false; + } + } + else { + return false; + } +} +//switch_module_is_running('mod_spidermonkey'); + +//format a number (n) replace with a number (r) remove the number +function format_string ($format, $data) { + $x=0; + $tmp = ''; + for ($i = 0; $i <= strlen($format); $i++) { + $tmp_format = strtolower(substr($format, $i, 1)); + if ($tmp_format == 'x') { + $tmp .= substr($data, $x, 1); + $x++; + } + elseif ($tmp_format == 'r') { + $x++; + } + else { + $tmp .= $tmp_format; + } + } + return $tmp; +} + +//get the format and use it to format the phone number + function format_phone($phone_number) { + $phone_number = trim($phone_number, "+"); + if (is_numeric($phone_number)) { + if (isset($_SESSION["format"]["phone"])) foreach ($_SESSION["format"]["phone"] as &$format) { + $format_count = substr_count($format, 'x'); + $format_count = $format_count + substr_count($format, 'R'); + $format_count = $format_count + substr_count($format, 'r'); + if ($format_count == strlen($phone_number)) { + //format the number + $phone_number = format_string($format, $phone_number); + } + } + } + return $phone_number; + } + +//format seconds into hh:mm:ss + function format_hours($seconds) { + $hours = floor($seconds / 3600); + $minutes = floor(($seconds / 60) % 60); + $seconds = $seconds % 60; + if (strlen($minutes) == 1) { $minutes = '0'.$minutes; } + if (strlen($seconds) == 1) { $seconds = '0'.$seconds; } + return "$hours:$minutes:$seconds"; + } + +//browser detection without browscap.ini dependency + function http_user_agent($info = '') { + + //set default values + $user_agent = $_SERVER['HTTP_USER_AGENT']; + $browser_name = 'Unknown'; + $platform = 'Unknown'; + $version = ''; + $mobile = false; + + //get the platform + if (preg_match('/linux/i', $user_agent)) { + $platform = 'Linux'; + } + elseif (preg_match('/macintosh|mac os x/i', $user_agent)) { + $platform = 'Apple'; + } + elseif (preg_match('/windows|win32/i', $user_agent)) { + $platform = 'Windows'; + } + + //set mobile to true or false + if (preg_match('/mobile/i', $user_agent)) { + $platform = 'Mobile'; + $mobile = true; + } + elseif (preg_match('/android/i', $user_agent)) { + $platform = 'Android'; + $mobile = true; + } + + //get the name of the useragent + if (preg_match('/MSIE/i',$user_agent) && !preg_match('/Opera/i',$user_agent)) { + $browser_name = 'Internet Explorer'; + $browser_shortname = 'MSIE'; + } + elseif (preg_match('/Firefox/i',$user_agent)) { + $browser_name = 'Mozilla Firefox'; + $browser_shortname = 'Firefox'; + } + elseif (preg_match('/Chrome/i',$user_agent)) { + $browser_name = 'Google Chrome'; + $browser_shortname = 'Chrome'; + } + elseif (preg_match('/Safari/i',$user_agent)) { + $browser_name = 'Apple Safari'; + $browser_shortname = 'Safari'; + } + elseif (preg_match('/Opera/i',$user_agent)) { + $browser_name = 'Opera'; + $browser_shortname = 'Opera'; + } + elseif (preg_match('/Netscape/i',$user_agent)) { + $browser_name = 'Netscape'; + $browser_shortname = 'Netscape'; + } + + //finally get the correct version number + $known = array('Version', $browser_shortname, 'other'); + $pattern = '#(?' . join('|', $known) . ')[/ ]+(?[0-9.|a-zA-Z.]*)#'; + if (!preg_match_all($pattern, $user_agent, $matches)) { + //we have no matching number just continue + } + + //see how many we have + $i = count($matches['browser']); + if ($i != 1) { + //we will have two since we are not using 'other' argument yet + //see if version is before or after the name + if (strripos($user_agent,"Version") < strripos($user_agent,$browser_shortname)) { + $version= $matches['version'][0]; + } + else { + $version= $matches['version'][1]; + } + } + else { + $version= $matches['version'][0]; + } + + //check if we have a number + if ($version == null || $version == "") { $version = "?"; } + + //return the data + switch ($info) { + case "agent": return $user_agent; break; + case "name": return $browser_name; break; + case "version": return $version; break; + case "platform": return $platform; break; + case "mobile": return $mobile; break; + case "pattern": return $pattern; break; + default : + return array( + 'user_agent' => $user_agent, + 'name' => $browser_name, + 'version' => $version, + 'platform' => $platform, + 'mobile' => $mobile, + 'pattern' => $pattern + ); + } + } + +//tail php function for non posix systems + function tail($file, $num_to_get=10) { + $fp = fopen($file, 'r'); + $position = filesize($file); + $chunklen = 4096; + if($position-$chunklen<=0) { + fseek($fp,0); + } + else { + fseek($fp, $position-$chunklen); + } + $data="";$ret="";$lc=0; + while($chunklen > 0) { + $data = fread($fp, $chunklen); + $dl=strlen($data); + for($i=$dl-1;$i>=0;$i--){ + if($data[$i]=="\n"){ + if($lc==0 && $ret!="")$lc++; + $lc++; + if($lc>$num_to_get)return $ret; + } + $ret=$data[$i].$ret; + } + if($position-$chunklen<=0){ + fseek($fp,0); + $chunklen=$chunklen-abs($position-$chunklen); + } + else { + fseek($fp, $position-$chunklen); + } + $position = $position - $chunklen; + } + fclose($fp); + return $ret; + } + +//generate a random password with upper, lowercase and symbols + function generate_password($length = 0, $strength = 0) { + $password = ''; + $charset = ''; + if ($length === 0 && $strength === 0) { //set length and strenth if specified in default settings and strength isn't numeric-only + $length = (is_numeric($_SESSION["extension"]["password_length"]["numeric"])) ? $_SESSION["extension"]["password_length"]["numeric"] : 10; + $strength = (is_numeric($_SESSION["extension"]["password_strength"]["numeric"])) ? $_SESSION["extension"]["password_strength"]["numeric"] : 4; + } + if ($strength >= 1) { $charset .= "0123456789"; } + if ($strength >= 2) { $charset .= "abcdefghijkmnopqrstuvwxyz"; } + if ($strength >= 3) { $charset .= "ABCDEFGHIJKLMNPQRSTUVWXYZ"; } + if ($strength >= 4) { $charset .= "!!!!!^$%*?....."; } + srand((double)microtime() * rand(1000000, 9999999)); + while ($length > 0) { + $password .= $charset[rand(0, strlen($charset)-1)]; + $length--; + } + return $password; + } + +//check password strength against requirements (if any) + function check_password_strength($password, $text, $type = 'default') { + if ($password != '') { + if ($type == 'default') { + $req['length'] = $_SESSION['extension']['password_length']['numeric']; + $req['number'] = ($_SESSION['extension']['password_number']['boolean'] == 'true') ? true : false; + $req['lowercase'] = ($_SESSION['extension']['password_lowercase']['boolean'] == 'true') ? true : false; + $req['uppercase'] = ($_SESSION['extension']['password_uppercase']['boolean'] == 'true') ? true : false; + $req['special'] = ($_SESSION['extension']['password_special']['boolean'] == 'true') ? true : false; + } elseif ($type == 'user') { + $req['length'] = $_SESSION['user']['password_length']['numeric']; + $req['number'] = ($_SESSION['user']['password_number']['boolean'] == 'true') ? true : false; + $req['lowercase'] = ($_SESSION['user']['password_lowercase']['boolean'] == 'true') ? true : false; + $req['uppercase'] = ($_SESSION['user']['password_uppercase']['boolean'] == 'true') ? true : false; + $req['special'] = ($_SESSION['user']['password_special']['boolean'] == 'true') ? true : false; + } + if (is_numeric($req['length']) && $req['length'] != 0 && !preg_match_all('$\S*(?=\S{'.$req['length'].',})\S*$', $password)) { // length + $msg_errors[] = $req['length'].'+ '.$text['label-characters']; + } + if ($req['number'] && !preg_match_all('$\S*(?=\S*[\d])\S*$', $password)) { //number + $msg_errors[] = '1+ '.$text['label-numbers']; + } + if ($req['lowercase'] && !preg_match_all('$\S*(?=\S*[a-z])\S*$', $password)) { //lowercase + $msg_errors[] = '1+ '.$text['label-lowercase_letters']; + } + if ($req['uppercase'] && !preg_match_all('$\S*(?=\S*[A-Z])\S*$', $password)) { //uppercase + $msg_errors[] = '1+ '.$text['label-uppercase_letters']; + } + if ($req['special'] && !preg_match_all('$\S*(?=\S*[\W])\S*$', $password)) { //special + $msg_errors[] = '1+ '.$text['label-special_characters']; + } + if (is_array($msg_errors) && sizeof($msg_errors) > 0) { + message::add($_SESSION["message"] = $text['message-password_requirements'].': '.implode(', ', $msg_errors), 'negative', 6000); + return false; + } + else { + return true; + } + } + return true; + } + +//based on Wez Furlong do_post_request + if (!function_exists('send_http_request')) { + function send_http_request($url, $data, $method = "POST", $optional_headers = null) { + $params = array('http' => array( + 'method' => $method, + 'content' => $data + )); + if ($optional_headers !== null) { + $params['http']['header'] = $optional_headers; + } + $ctx = stream_context_create($params); + $fp = @fopen($url, 'rb', false, $ctx); + if (!$fp) { + throw new Exception("Problem with $url, $php_errormsg"); + } + $response = @stream_get_contents($fp); + if ($response === false) { + throw new Exception("Problem reading data from $url, $php_errormsg"); + } + return $response; + } + } + +//convert the string to a named array + if(!function_exists('csv_to_named_array')) { + function csv_to_named_array($tmp_str, $tmp_delimiter) { + $tmp_array = explode ("\n", $tmp_str); + $result = array(); + if (trim(strtoupper($tmp_array[0])) !== "+OK") { + $tmp_field_name_array = explode ($tmp_delimiter, $tmp_array[0]); + $x = 0; + foreach ($tmp_array as $row) { + if ($x > 0) { + $tmp_field_value_array = explode ($tmp_delimiter, $tmp_array[$x]); + $y = 0; + foreach ($tmp_field_value_array as $tmp_value) { + $tmp_name = $tmp_field_name_array[$y]; + if (trim(strtoupper($tmp_value)) !== "+OK") { + $result[$x][$tmp_name] = $tmp_value; + } + $y++; + } + } + $x++; + } + unset($row); + } + return $result; + } + } + +function get_time_zone_offset($remote_tz, $origin_tz = 'UTC') { + $origin_dtz = new DateTimeZone($origin_tz); + $remote_dtz = new DateTimeZone($remote_tz); + $origin_dt = new DateTime("now", $origin_dtz); + $remote_dt = new DateTime("now", $remote_dtz); + $offset = $remote_dtz->getOffset($remote_dt) - $origin_dtz->getOffset($origin_dt); + return $offset; +} + +function number_pad($number,$n) { + return str_pad((int) $number,$n,"0",STR_PAD_LEFT); +} + +// validate email address syntax + if(!function_exists('valid_email')) { + function valid_email($email) { + $regex = '/^[A-z0-9][\w.-]*@[A-z0-9][\w\-\.]+(\.[A-z0-9]{2,6})?$/'; + if ($email != "" && preg_match($regex, $email) == 1) { + return true; // email address has valid syntax + } + else { + return false; // email address does not have valid syntax + } + } + } + +// ellipsis nicely truncate long text + if(!function_exists('ellipsis')) { + function ellipsis($string, $max_characters, $preserve_word = true) { + if ($max_characters+$x >= strlen($string)) { return $string; } + if ($preserve_word) { + for ($x = 0; $x < strlen($string); $x++) { + if ($string{$max_characters+$x} == " ") { + return substr($string,0,$max_characters+$x)." ..."; + } + else { continue; } + } + } + else { + return substr($string,0,$max_characters)." ..."; + } + } + } + +//function to convert hexidecimal color value to rgb string/array value + if (!function_exists('hex_to_rgb')) { + function hex_to_rgb($hex, $delim = '') { + $hex = str_replace("#", "", $hex); + + if (strlen($hex) == 3) { + $r = hexdec(substr($hex,0,1).substr($hex,0,1)); + $g = hexdec(substr($hex,1,1).substr($hex,1,1)); + $b = hexdec(substr($hex,2,1).substr($hex,2,1)); + } + else { + $r = hexdec(substr($hex,0,2)); + $g = hexdec(substr($hex,2,2)); + $b = hexdec(substr($hex,4,2)); + } + $rgb = array($r, $g, $b); + + if ($delim != '') { + return implode($delim, $rgb); // return rgb delimited string + } + else { + return $rgb; // return array of rgb values + } + } + } + +//function to get a color's luminence level -- dependencies: rgb_to_hsl() + if (!function_exists('get_color_luminence')) { + function get_color_luminence($color) { + //convert hex to rgb + if (substr_count($color, ',') == 0) { + $color = str_replace(' ', '', $color); + $color = str_replace('#', '', $color); + if (strlen($color) == 3) { + $r = hexdec(substr($color,0,1).substr($color,0,1)); + $g = hexdec(substr($color,1,1).substr($color,1,1)); + $b = hexdec(substr($color,2,1).substr($color,2,1)); + } + else { + $r = hexdec(substr($color,0,2)); + $g = hexdec(substr($color,2,2)); + $b = hexdec(substr($color,4,2)); + } + $color = $r.','.$g.','.$b; + } + + //color to array, pop alpha + if (substr_count($color, ',') > 0) { + $color = str_replace(' ', '', $color); + $color = str_replace('rgb', '', $color); + $color = str_replace('a(', '', $color); + $color = str_replace(')', '', $color); + $color = explode(',', $color); + $hsl = rgb_to_hsl($color[0], $color[1], $color[2]); + } + + //return luminence value + return (is_array($hsl) && is_numeric($hsl[2])) ? $hsl[2] : null; + } + } + +//function to lighten or darken a hexidecimal, rgb, or rgba color value by a percentage -- dependencies: rgb_to_hsl(), hsl_to_rgb() + if (!function_exists('color_adjust')) { + function color_adjust($color, $percent) { + /* + USAGE + 20% Lighter + color_adjust('#3f4265', 0.2); + color_adjust('234,120,6,0.3', 0.2); + 20% Darker + color_adjust('#3f4265', -0.2); // + color_adjust('rgba(234,120,6,0.3)', -0.2); + RETURNS + Same color format provided (hex in = hex out, rgb(a) in = rgb(a) out) + */ + + //convert hex to rgb + if (substr_count($color, ',') == 0) { + $color = str_replace(' ', '', $color); + if (substr_count($color, '#') > 0) { + $color = str_replace('#', '', $color); + $hash = '#'; + } + if (strlen($color) == 3) { + $r = hexdec(substr($color,0,1).substr($color,0,1)); + $g = hexdec(substr($color,1,1).substr($color,1,1)); + $b = hexdec(substr($color,2,1).substr($color,2,1)); + } + else { + $r = hexdec(substr($color,0,2)); + $g = hexdec(substr($color,2,2)); + $b = hexdec(substr($color,4,2)); + } + $color = $r.','.$g.','.$b; + } + + //color to array, pop alpha + if (substr_count($color, ',') > 0) { + $color = str_replace(' ', '', $color); + $wrapper = false; + if (substr_count($color, 'rgb') != 0) { + $color = str_replace('rgb', '', $color); + $color = str_replace('a(', '', $color); + $color = str_replace(')', '', $color); + $wrapper = true; + } + $colors = explode(',', $color); + $alpha = (sizeof($colors) == 4) ? array_pop($colors) : null; + $color = $colors; + unset($colors); + + //adjust color using rgb > hsl > rgb conversion + $hsl = rgb_to_hsl($color[0], $color[1], $color[2]); + $hsl[2] = $hsl[2] + $percent; + $color = hsl_to_rgb($hsl[0], $hsl[1], $hsl[2]); + + //return adjusted color in format received + if ($hash == '#') { //hex + for ($i = 0; $i <= 2; $i++) { + $hex_color = dechex($color[$i]); + if (strlen($hex_color) == 1) { $hex_color = '0'.$hex_color; } + $hex .= $hex_color; + } + return $hash.$hex; + } + else { //rgb(a) + $rgb = implode(',', $color); + if ($alpha != '') { $rgb .= ','.$alpha; $a = 'a'; } + if ($wrapper) { $rgb = 'rgb'.$a.'('.$rgb.')'; } + return $rgb; + } + } + + return $color; + } + } + +//function to convert an rgb color array to an hsl color array + if (!function_exists('rgb_to_hsl')) { + function rgb_to_hsl($r, $g, $b) { + $r /= 255; + $g /= 255; + $b /= 255; + + $max = max($r, $g, $b); + $min = min($r, $g, $b); + + $h; + $s; + $l = ($max + $min) / 2; + $d = $max - $min; + + if ($d == 0) { + $h = $s = 0; // achromatic + } + else { + $s = $d / (1 - abs((2 * $l) - 1)); + switch($max){ + case $r: + $h = 60 * fmod((($g - $b) / $d), 6); + if ($b > $g) { $h += 360; } + break; + case $g: + $h = 60 * (($b - $r) / $d + 2); + break; + case $b: + $h = 60 * (($r - $g) / $d + 4); + break; + } + } + + return array(round($h, 2), round($s, 2), round($l, 2)); + } + } + +//function to convert an hsl color array to an rgb color array + if (!function_exists('hsl_to_rgb')) { + function hsl_to_rgb($h, $s, $l){ + $r; + $g; + $b; + + $c = (1 - abs((2 * $l) - 1)) * $s; + $x = $c * (1 - abs(fmod(($h / 60), 2) - 1)); + $m = $l - ($c / 2); + + if ($h < 60) { + $r = $c; + $g = $x; + $b = 0; + } + else if ($h < 120) { + $r = $x; + $g = $c; + $b = 0; + } + else if ($h < 180) { + $r = 0; + $g = $c; + $b = $x; + } + else if ($h < 240) { + $r = 0; + $g = $x; + $b = $c; + } + else if ($h < 300) { + $r = $x; + $g = 0; + $b = $c; + } + else { + $r = $c; + $g = 0; + $b = $x; + } + + $r = ($r + $m) * 255; + $g = ($g + $m) * 255; + $b = ($b + $m) * 255; + + if ($r > 255) { $r = 255; } + if ($g > 255) { $g = 255; } + if ($b > 255) { $b = 255; } + + if ($r < 0) { $r = 0; } + if ($g < 0) { $g = 0; } + if ($b < 0) { $b = 0; } + + return array(floor($r), floor($g), floor($b)); + } + } + +//function to send email + if (!function_exists('send_email')) { + function send_email($eml_recipients, $eml_subject, $eml_body, &$eml_error = '', $eml_from_address = '', $eml_from_name = '', $eml_priority = 3, $eml_debug_level = 0, $eml_attachments = '', $eml_read_confirmation = false) { + /* + RECIPIENTS NOTE: + + Pass in a single email address... + + user@domain.com + + Pass in a comma or semi-colon delimited string of e-mail addresses... + + user@domain.com,user2@domain2.com,user3@domain3.com + user@domain.com;user2@domain2.com;user3@domain3.com + + Pass in a simple array of email addresses... + + Array ( + [0] => user@domain.com + [1] => user2@domain2.com + [2] => user3@domain3.com + ) + + Pass in a multi-dimentional array of addresses (delivery, address, name)... + + Array ( + [0] => Array ( + [delivery] => to + [address] => user@domain.com + [name] => user 1 + ) + [1] => Array ( + [delivery] => cc + [address] => user2@domain2.com + [name] => user 2 + ) + [2] => Array ( + [delivery] => bcc + [address] => user3@domain3.com + [name] => user 3 + ) + ) + + ATTACHMENTS NOTE: + + Pass in as many files as necessary in an array in the following format... + + Array ( + [0] => Array ( + [type] => file (or 'path') + [name] => filename.ext + [value] => /folder/filename.ext + ) + [1] => Array ( + [type] => string + [name] => filename.ext + [value] => (string of file contents - if base64, will be decoded automatically) + ) + ) + + ERROR RESPONSE: + + Error messages are stored in the variable passed into $eml_error BY REFERENCE + + */ + + include_once("resources/phpmailer/class.phpmailer.php"); + include_once("resources/phpmailer/class.smtp.php"); + + $regexp = '/^[A-z0-9][\w.-]*@[A-z0-9][\w\-\.]+\.[A-z0-9]{2,6}$/'; + + $mail = new PHPMailer(); + $mail -> IsSMTP(); + if ($_SESSION['email']['smtp_hostname']['text'] != '') { + $mail -> Hostname = $_SESSION['email']['smtp_hostname']['text']; + } + $mail -> Host = $_SESSION['email']['smtp_host']['text']; + if (is_numeric($_SESSION['email']['smtp_port']['numeric'])) { + $mail -> Port = $_SESSION['email']['smtp_port']['numeric']; + } + if ($_SESSION['email']['smtp_auth']['text'] == "true") { + $mail -> SMTPAuth = $_SESSION['email']['smtp_auth']['text']; + $mail -> Username = $_SESSION['email']['smtp_username']['text']; + $mail -> Password = $_SESSION['email']['smtp_password']['text']; + } + else { + $mail -> SMTPAuth = 'false'; + } + if ($_SESSION['email']['smtp_secure']['text'] == "none") { + $_SESSION['email']['smtp_secure']['text'] = ''; + } + if ($_SESSION['email']['smtp_secure']['text'] != '') { + $mail -> SMTPSecure = $_SESSION['email']['smtp_secure']['text']; + } + if (isset($_SESSION['email']['smtp_validate_certificate']) && $_SESSION['email']['smtp_validate_certificate']['boolean'] == "false") { + // bypass TLS certificate check e.g. for self-signed certificates + $mail -> SMTPOptions = array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ) + ); + } + $eml_from_address = ($eml_from_address != '') ? $eml_from_address : $_SESSION['email']['smtp_from']['text']; + $eml_from_name = ($eml_from_name != '') ? $eml_from_name : $_SESSION['email']['smtp_from_name']['text']; + $mail -> SetFrom($eml_from_address, $eml_from_name); + $mail -> AddReplyTo($eml_from_address, $eml_from_name); + $mail -> Subject = $eml_subject; + $mail -> MsgHTML($eml_body); + $mail -> Priority = $eml_priority; + if ($eml_read_confirmation) { + $mail -> AddCustomHeader('X-Confirm-Reading-To: '.$eml_from_address); + $mail -> AddCustomHeader('Return-Receipt-To: '.$eml_from_address); + $mail -> AddCustomHeader('Disposition-Notification-To: '.$eml_from_address); + } + if (is_numeric($eml_debug_level) && $eml_debug_level > 0) { + $mail -> SMTPDebug = $eml_debug_level; + } + + $address_found = false; + + if (!is_array($eml_recipients)) { // must be a single or delimited recipient address(s) + $eml_recipients = str_replace(' ', '', $eml_recipients); + if (substr_count(',', $eml_recipients)) { $delim = ','; } + if (substr_count(';', $eml_recipients)) { $delim = ';'; } + if ($delim) { $eml_recipients = explode($delim, $eml_recipients); } // delimiter found, convert to array of addresses + } + + if (is_array($eml_recipients)) { // check if multiple recipients + foreach ($eml_recipients as $eml_recipient) { + if (is_array($eml_recipient)) { // check if each recipient has multiple fields + if ($eml_recipient["address"] != '' && preg_match($regexp, $eml_recipient["address"]) == 1) { // check if valid address + switch ($eml_recipient["delivery"]) { + case "cc" : $mail -> AddCC($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); break; + case "bcc" : $mail -> AddBCC($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); break; + default : $mail -> AddAddress($eml_recipient["address"], ($eml_recipient["name"]) ? $eml_recipient["name"] : $eml_recipient["address"]); + } + $address_found = true; + } + } + else if ($eml_recipient != '' && preg_match($regexp, $eml_recipient) == 1) { // check if recipient value is simply (only) an address + $mail -> AddAddress($eml_recipient); + $address_found = true; + } + } + + if (!$address_found) { + $eml_error = "No valid e-mail address provided."; + return false; + } + + } + else { // just a single e-mail address found, not an array of addresses + if ($eml_recipients != '' && preg_match($regexp, $eml_recipients) == 1) { // check if email syntax is valid + $mail -> AddAddress($eml_recipients); + } + else { + $eml_error = "No valid e-mail address provided."; + return false; + } + } + + if (is_array($eml_attachments) && sizeof($eml_attachments) > 0) { + foreach ($eml_attachments as $attachment) { + $attachment['name'] = $attachment['name'] != '' ? $attachment['name'] : basename($attachment['value']); + if ($attachment['type'] == 'file' || $attachment['type'] == 'path') { + $mail -> AddAttachment($attachment['value'], $attachment['name']); + } + else if ($attachment['type'] == 'string') { + if (base64_encode(base64_decode($attachment['value'], true)) === $attachment['value']) { + $mail -> AddStringAttachment(base64_decode($attachment['value']), $attachment['name']); + } + else { + $mail -> AddStringAttachment($attachment['value'], $attachment['name']); + } + } + } + } + + if (!$mail -> Send()) { + $eml_error = $mail -> ErrorInfo; + return false; + } + else { + return true; + } + + $mail -> ClearAddresses(); + $mail -> SmtpClose(); + + unset($mail); + } + } + +//encrypt a string + if (!function_exists('encrypt')) { + function encrypt($key, $data) { + $encryption_key = base64_decode($key); + $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); + $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv); + return base64_encode($encrypted.'::'.$iv); + } + } + +//decrypt a string + if (!function_exists('decrypt')) { + function decrypt($key, $data) { + $encryption_key = base64_decode($key); + list($encrypted_data, $iv) = explode('::', base64_decode($data), 2); + return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv); + } + } + +//json detection + if (!function_exists('is_json')) { + function is_json($str) { + return (is_string($str) && is_object(json_decode($str))) ? true : false; + } + } + +//mac detection + if (!function_exists('is_mac')) { + function is_mac($str) { + return (preg_match('/([a-fA-F0-9]{2}[:|\-]?){6}/', $str) == 1) ? true : false; + } + } + +//format mac address + if (!function_exists('format_mac')) { + function format_mac($str, $delim = '-', $case = 'lower') { + if (is_mac($str)) { + $str = join($delim, str_split($str, 2)); + $str = ($case == 'upper') ? strtoupper($str) : strtolower($str); + } + return $str; + } + } + +//transparent gif + if (!function_exists('img_spacer')) { + function img_spacer($width = '1px', $height = '1px', $custom = null) { + return ""; + } + } + +//lower case + function lower_case($string) { + if (function_exists('mb_strtolower')) { + return mb_strtolower($string, 'UTF-8'); + } + else { + return strtolower($string); + } + } + +//upper case + function upper_case($string) { + if (function_exists('mb_strtoupper')) { + return mb_strtoupper($string, 'UTF-8'); + } + else { + return strtoupper($string); + } + } + +//email validate + if (!function_exists('email_validate')) { + function email_validate($strEmail){ + $validRegExp = '/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-zA-Z]{2,3}$/'; + // search email text for regular exp matches + preg_match($validRegExp, $strEmail, $matches, PREG_OFFSET_CAPTURE); + if (count($matches) == 0) { + return 0; + } + else { + return 1; + } + } + } + +//write javascript function that detects select key combinations to perform designated actions + if (!function_exists('key_press')) { + function key_press($key, $direction = 'up', $subject = 'document', $exceptions = array(), $prompt = null, $action = null, $script_wrapper = true) { + //determine key code + switch (strtolower($key)) { + case 'escape': + $key_code = '(e.which == 27)'; + break; + case 'delete': + $key_code = '(e.which == 46)'; + break; + case 'enter': + $key_code = '(e.which == 13)'; + break; + case 'backspace': + $key_code = '(e.which == 8)'; + break; + case 'ctrl+s': + $key_code = '(((e.which == 115 || e.which == 83) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; + break; + case 'ctrl+q': + $key_code = '(((e.which == 113 || e.which == 81) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; + break; + case 'ctrl+a': + $key_code = '(((e.which == 97 || e.which == 65) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; + break; + case 'ctrl+enter': + $key_code = '(((e.which == 13 || e.which == 10) && (e.ctrlKey || e.metaKey)) || (e.which == 19))'; + break; + default: + return; + } + //check for element exceptions + if (sizeof($exceptions) > 0) { + $exceptions = "!$(e.target).is('".implode(',', $exceptions)."') && "; + } + //quote if selector is id or class + $subject = ($subject != 'window' && $subject != 'document') ? "'".$subject."'" : $subject; + //output script + echo "\n\n\n"; + if ($script_wrapper) { + echo "\n"; + } + echo "\n\n\n"; + } + } + +//format border radius values + if (!function_exists('format_border_radius')) { + function format_border_radius($radius_value, $default = 5) { + $radius_value = ($radius_value != '') ? $radius_value : $default; + $br_a = explode(' ', $radius_value); + foreach ($br_a as $index => $br) { + if (substr_count($br, '%') > 0) { + $br_b[$index]['number'] = str_replace('%', '', $br); + $br_b[$index]['unit'] = '%'; + } + else { + $br_b[$index]['number'] = str_replace('px', '', strtolower($br)); + $br_b[$index]['unit'] = 'px'; + } + } + unset($br_a, $br); + if (sizeof($br_b) == 4) { + $br['tl']['n'] = $br_b[0]['number']; + $br['tr']['n'] = $br_b[1]['number']; + $br['br']['n'] = $br_b[2]['number']; + $br['bl']['n'] = $br_b[3]['number']; + $br['tl']['u'] = $br_b[0]['unit']; + $br['tr']['u'] = $br_b[1]['unit']; + $br['br']['u'] = $br_b[2]['unit']; + $br['bl']['u'] = $br_b[3]['unit']; + } + else if (sizeof($br_b) == 2) { + $br['tl']['n'] = $br_b[0]['number']; + $br['tr']['n'] = $br_b[0]['number']; + $br['br']['n'] = $br_b[1]['number']; + $br['bl']['n'] = $br_b[1]['number']; + $br['tl']['u'] = $br_b[0]['unit']; + $br['tr']['u'] = $br_b[0]['unit']; + $br['br']['u'] = $br_b[1]['unit']; + $br['bl']['u'] = $br_b[1]['unit']; + } + else { + $br['tl']['n'] = $br_b[0]['number']; + $br['tr']['n'] = $br_b[0]['number']; + $br['br']['n'] = $br_b[0]['number']; + $br['bl']['n'] = $br_b[0]['number']; + $br['tl']['u'] = $br_b[0]['unit']; + $br['tr']['u'] = $br_b[0]['unit']; + $br['br']['u'] = $br_b[0]['unit']; + $br['bl']['u'] = $br_b[0]['unit']; + } + unset($br_b); + + return $br; //array + } + } + +//converts a string to a regular expression + if (!function_exists('string_to_regex')) { + function string_to_regex($string, $prefix='') { + //escape the plus + if (substr($string, 0, 1) == "+") { + $string = "^\\+(".substr($string, 1).")$"; + } + //add prefix + if (strlen($prefix) > 0) { + $prefix = $prefix.'?'; + } + //convert N,X,Z syntax to regex + $string = str_ireplace("N", "[2-9]", $string); + $string = str_ireplace("X", "[0-9]", $string); + $string = str_ireplace("Z", "[1-9]", $string); + //add ^ to the start of the string if missing + if (substr($string, 0, 1) != "^") { + $string = "^".$string; + } + //add $ to the end of the string if missing + if (substr($string, -1) != "$") { + $string = $string."$"; + } + //add the round brackets ( and ) + if (!strstr($string, '(')) { + if (strstr($string, '^')) { + $string = str_replace("^", "^".$prefix."(", $string); + } + else { + $string = '^('.$string; + } + } + if (!strstr($string, ')')) { + if (strstr($string, '$')) { + $string = str_replace("$", ")$", $string); + } + else { + $string = $string.')$'; + } + } + //return the result + return $string; + } + //$string = "+12089068227"; echo $string." ".string_to_regex($string)."\n"; + //$string = "12089068227"; echo $string." ".string_to_regex($string)."\n"; + //$string = "2089068227"; echo $string." ".string_to_regex($string)."\n"; + //$string = "^(20890682[0-9][0-9])$"; echo $string." ".string_to_regex($string)."\n"; + //$string = "1208906xxxx"; echo $string." ".string_to_regex($string)."\n"; + //$string = "nxxnxxxxxxx"; echo $string." ".string_to_regex($string)."\n"; + //$string = "208906xxxx"; echo $string." ".string_to_regex($string)."\n"; + //$string = "^(2089068227"; echo $string." ".string_to_regex($string)."\n"; + //$string = "^2089068227)"; echo $string." ".string_to_regex($string)."\n"; + //$string = "2089068227$"; echo $string." ".string_to_regex($string)."\n"; + //$string = "2089068227)$"; echo $string." ".string_to_regex($string)."\n"; + } + +//dynamically load available web fonts + if (!function_exists('get_available_fonts')) { + function get_available_fonts($sort = 'alpha') { + if ($_SESSION['theme']['font_source_key']['text'] != '') { + if (!is_array($_SESSION['fonts_available']) || sizeof($_SESSION['fonts_available']) == 0) { + /* + sort options: + alpha - alphabetically + date - by date added (most recent font added or updated first) + popularity - by popularity (most popular family first) + style - by number of styles available (family with most styles first) + trending - by families seeing growth in usage (family seeing the most growth first) + */ + $google_api_url = 'https://www.googleapis.com/webfonts/v1/webfonts?key='.$_SESSION['theme']['font_source_key']['text'].'&sort='.$sort; + $response = file_get_contents($google_api_url); + if ($response != '') { + $data = json_decode($response, true); + $items = $data['items']; + foreach ($items as $item) { + $fonts[] = $item['family']; + } + //echo "
".print_r($font_list, true)."
"; + } + $_SESSION['fonts_available'] = $fonts; + unset($fonts); + } + return (is_array($_SESSION['fonts_available']) && sizeof($_SESSION['fonts_available']) > 0) ? $_SESSION['fonts_available'] : array(); + } + else { + return false; + } + } + } + +//dynamically import web fonts (by reading static css file) + if (!function_exists('import_fonts')) { + function import_fonts($file_to_parse, $line_styles_begin = null) { + /* + This function reads the contents of $file_to_parse, beginning at $line_styles_begin (if set), + and attempts to parse the specified google fonts used. The assumption is that each curly brace + will be on its own line, each CSS style (attribute: value;) will be on its own line, a single + Google Fonts name will be used per selector, and that it will be surrounded by SINGLE quotes, + as shown in the example below: + + .class_name { + font-family: 'Google Font'; + font-weight: 300; + font-style: italic; + } + + If the CSS styles are formatted as described, the necessary @import string should be generated + correctly. + */ + + $file = file_get_contents($_SERVER["DOCUMENT_ROOT"].$file_to_parse); + $lines = explode("\n", $file); + + $style_counter = 0; + foreach ($lines as $line_number => $line) { + if ($line_styles_begin != '' && $line_number < $line_styles_begin - 1) { continue; } + if (substr_count($line, "{") > 0) { + $style_lines[$style_counter]['begins'] = $line_number; + } + if (substr_count($line, "}") > 0) { + $style_lines[$style_counter]['ends'] = $line_number; + $style_counter++; + } + } + //echo "\n\n".print_r($style_lines, true)."\n\n"; + + if (is_array($style_lines) && sizeof($style_lines) > 0) { + + foreach ($style_lines as $index => $style_line) { + for ($l = $style_line['begins']+1; $l < $style_line['ends']; $l++) { + $tmp[] = $lines[$l]; + } + $style_groups[] = $tmp; + unset($tmp); + } + //echo "\n\n".print_r($style_groups, true)."\n\n"; + + if (is_array($style_groups) && sizeof($style_groups) > 0) { + + foreach ($style_groups as $style_group_index => $style_group) { + foreach ($style_group as $style_index => $style) { + $tmp = explode(':', $style); + $attribute = trim($tmp[0]); + $value = trim(trim($tmp[1]),';'); + $style_array[$attribute] = $value; + } + $style_groups[$style_group_index] = $style_array; + unset($style_array); + } + //echo "\n\n".print_r($style_groups, true)."\n\n"; + + foreach ($style_groups as $style_group_index => $style_group) { + $style_value = $style_group['font-family']; + if (substr_count($style_value, "'") > 0) { + //determine font + $font_begin = strpos($style_value, "'")+1; + $font_end = strpos($style_value, "'", $font_begin); + $font_name = substr($style_value, $font_begin, $font_end - $font_begin); + //determine modifiers + $weight = (is_numeric($style_group['font-weight']) || strtolower($style_group['font-weight']) == 'bold') ? strtolower($style_group['font-weight']) : null; + $italic = (strtolower($style_group['font-style']) == 'italic') ? 'italic' : null; + //add font to array + $fonts[$font_name][] = $weight.$italic; + } + } + //echo "\n\n/*".print_r($fonts, true)."*/\n\n"; + + if (is_array($fonts)) { + foreach ($fonts as $font_name => $modifiers) { + $modifiers = array_unique($modifiers); + $import_font_string = str_replace(' ', '+', $font_name); + if (is_array($modifiers) && sizeof($modifiers) > 0) { + $import_font_string .= ':'.implode(',', $modifiers); + } + $import_fonts[] = $import_font_string; + } + //echo "\n\n/*".print_r($import_fonts, true)."*/\n\n"; + $import_string = "@import url(//fonts.googleapis.com/css?family=".implode('|', $import_fonts).");"; + echo $import_string."\n"; + } + + } + + } + + } + } + +//retrieve array of countries + if (!function_exists('get_countries')) { + function get_countries($db) { + $sql = "select * from v_countries order by country asc"; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + $result_count = count($result); + return ($result_count > 0) ? $result : false; + unset ($prep_statement, $sql); + } + } + +//make directory with event socket + function event_socket_mkdir($dir) { + //connect to fs + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + if (!$fp) { + return false; + } + //send the mkdir command to freeswitch + if ($fp) { + //build and send the mkdir command to freeswitch + $switch_cmd = "lua mkdir.lua '$dir'"; + $switch_result = event_socket_request($fp, 'api '.$switch_cmd); + fclose($fp); + //check result + if (trim($switch_result) == "-ERR no reply") { + return true; + } + } + //can not create directory + return false; + } + +//escape user data + function escape($string) { + return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); + //return htmlentities($string, ENT_QUOTES, 'UTF-8'); + } + +//output pre-formatted array keys and values + if (!function_exists('view_array')) { + function view_array($array, $exit = true) { + echo '
'.print_r($array, true).'

'; + $exit and exit(); + } + } + +//format db date and/or time to local date and/or time + if (!function_exists('format_when_local')) { + function format_when_local($when, $format = 'dt', $include_seconds = false) { + if ($when != '') { + // determine when format + if (substr_count($when, ' ') > 0) { // date and time + $tmp = explode(' ', $when); + $date = $tmp[0]; + $time = $tmp[1]; + } + else if (substr_count($when, '-') > 0) { // date only + $date = $when; + } + else if (substr_count($when, ':') > 0) { // time only + $time = $when; + } + unset($when, $tmp); + + // format date + if ($date != '') { + $tmp = explode('-', $date); + $date = $tmp[1].'-'.$tmp[2].'-'.$tmp[0]; + } + + // format time + if ($time != '') { + $tmp = explode(':', $time); + if ($tmp[0] >= 0 && $tmp[0] <= 11) { + $meridiem = 'AM'; + $hour = ($tmp[0] == 0) ? 12 : $tmp[0]; + } + else { + $meridiem = 'PM'; + $hour = ($tmp[0] > 12) ? ($tmp[0] - 12) : $tmp[0]; + } + $minute = $tmp[1]; + $second = $tmp[2]; + } + + // structure requested time format + $time = $hour.':'.$minute; + if ($include_seconds) { $time .= ':'.$second; } + $time .= ' '.$meridiem; + + $return['d'] = $date; + $return['t'] = $time; + $return['dt'] = $date.' '.$time; + + return $return[$format]; + } + else { + return false; + } + } + } + +//define email button (src: https://buttons.cm) + if (!function_exists('email_button')) { + function email_button($text = 'Click Here!', $link = URL, $bg_color = '#dddddd', $fg_color = '#000000', $radius = '') { + + // default button radius + $radius = $radius != '' ? $radius : '3px'; + + // retrieve single/first numeric radius value for ms arc + $tmp = $radius; + if (substr_count($radius, ' ') > 0) { + $tmp = explode(' ', $radius); + $tmp = $tmp[0]; + } + $tmp = preg_replace("/[^0-9,.]/", '', $tmp); // remove non-numeric characters + $arc = floor($tmp / 35 * 100); // calculate percentage + + // create button code + $btn = " +
+ + ".$text." + +
+ "; + + return $btn; + } + } + + +?> \ No newline at end of file