<?php /* Interface Creator www.bioinformatics.org/phplabware 6 September 2014 release By Santosh Patnaik, MD, PhD GPL license Based on DaDaBik version 3.2 by Eugenio Tacchini - http://www.dadabik.org */ // include business logic, db_functions and general_functions // magic quotes issues function add_slashes($value, $param = 0) { if(is_array($value)) { foreach($value as $index=>$val) { $value[$index] = add_slashes($val); } return $value; } else { $value = str_replace(array("\\", "\0", "\n", "\r", "\x1a", "'", '"'), array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'), $value); if(empty($param)) { return "'" . $value . "'"; } elseif($param == 2) { return $value; } else { return str_replace('`', '\`', $value); } } } function strip_slashes($value) { if(is_array($value)) { foreach($value as $index=>$val) { $value[$index] = strip_slashes($val); } return $value; } else { return stripslashes($value); } } // for function stripos - undefined in PHP versions before 5 if(!function_exists('stripos')) { function stripos($haystack, $needle, $offset = 0) { return(strpos(strtolower($haystack), strtolower($needle), $offset)); } } // fix for lack of strripos function in PHP older than version 5 if(!function_exists('strripos')) { function strripos($haystack, $needle, $offset = null) { if(!is_scalar($haystack)) { user_error('strripos() expects parameter 1 to be scalar, ' . gettype($haystack) . ' given', E_USER_WARNING); return false; } if(!is_scalar($needle)) { user_error('strripos() expects parameter 2 to be scalar, ' . gettype($needle) . ' given', E_USER_WARNING); return false; } if(!is_int($offset) && !is_bool($offset) && !is_null($offset)) { user_error('strripos() expects parameter 3 to be long, ' . gettype($offset) . ' given', E_USER_WARNING); return false; } // manipulate the string if there is an offset $fix = 0; if(!is_null($offset)) { // If the offset is larger than the haystack, return if(abs($offset) >= strlen($haystack)) { return false; } // check whether offset is negative or positive if($offset > 0) { $haystack = substr($haystack, $offset, strlen($haystack) - $offset); // we need to add this to the position of the needle $fix = $offset; } else { $haystack = substr($haystack, 0, strlen($haystack) + $offset); } } $segments = explode(strtolower($needle), strtolower($haystack)); $last_seg = count($segments) - 1; $position = strlen($haystack) + $fix - strlen($segments[$last_seg]) - strlen($needle); return $position; } } include_once(realpath(dirname(__FILE__) . '/business_logic.php')); function format_date($date) { global $date_format, $date_separator; $temp_ar = explode("-", $date); $temp_ar[2] = substr($temp_ar[2], 0, 2); switch($date_format) { case "literal_english": $date = gmdate("j M Y", mktime(0, 0, 0, $temp_ar[1], $temp_ar[2], $temp_ar[0])); break; case "latin": $date = $temp_ar[2] . $date_separator . $temp_ar[1] . $date_separator . $temp_ar[0]; break; case "numeric_english": $date = $temp_ar[1] . $date_separator . $temp_ar[2] . $date_separator . $temp_ar[0]; break; } return $date; } // goal: split a mysql date returning $day, $mont, $year // input: $date, a MySQL date, &$day, &$month, &$year // output: &$day, &$month, &$year function split_date($date, &$day, &$month, &$year) { $temp = explode("-", $date); $day = $temp[2]; $month = $temp[1]; $year = $temp[0]; } // goal: build a select with operators: nothing = > < // input: $field_name // output: $operator_select function build_date_select_type_select($field_name) { $operator_select = ""; $operator_select .= "<select name=\"" . htmlspecialchars($field_name) . "\" id=\"" . htmlspecialchars($field_name) . "\">"; $operator_select .= "<option value=\"\"></option>"; $operator_select .= "<option value=\"=\">=</option>"; $operator_select .= "<option value=\">\">></option>"; $operator_select .= "<option value=\"<\"><</option>"; $operator_select .= "</select>"; return $operator_select; } function txt_out($message, $class = "") { $message = trim($message). ' '; if($class != "") { echo "<span class=\"", $class, "\">", $message, "</span>"; } else { echo $message; } } // goal: calculate the total number of pages necessary to display results function get_pages_number($results_number, $records_per_page) { $pages_number = $results_number / $records_per_page; $pages_number = (int)($pages_number); if(($results_number % $records_per_page) != 0) { $pages_number++; } return $pages_number; } // goal: build three select to select a data (day, mont, year), if are set $day, $month and $year select them // input: $field_name, the name of the date field, $day, $month, $year (or "", "", "" if not set) function build_date_select($field_name, $day, $month, $year) { global $start_year, $end_year; $date_select = ""; $day_select = ""; $month_select = ""; $year_select = ""; $day_select .= "<select name=\"" . htmlspecialchars($field_name) . "_day\" id=\"" . htmlspecialchars($field_name) . "_day\">"; $month_select .= "<select name=\"" . htmlspecialchars($field_name) . "_month\" id=\"" . htmlspecialchars($field_name) . "_month\">"; $year_select .= "<select name=\"" . htmlspecialchars($field_name) . "_year\" id=\"" . htmlspecialchars($field_name) . "_year\">"; for($i = 1; $i <= 31; $i++) { $day_select .= "<option value=\"" . sprintf("%02d", $i) . "\""; if($day != "" and $day == $i) { $day_select .= " selected=\"selected\""; } $day_select .= ">" . sprintf("%02d", $i) . "</option>"; } for($i = 1; $i <= 12; $i++) { $month_select .= "<option value=\"" . sprintf("%02d", $i) . "\""; if($month != "" and $month == $i) { $month_select .= " selected=\"selected\""; } $month_select .= ">" . sprintf("%02d", $i) . "</option>"; } for($i = $start_year; $i <= $end_year; $i++) { $year_select .= "<option value=\"$i\""; if($year != "" and $year == $i) { $year_select .= " selected=\"selected\""; } $year_select .= ">" . $i . "</option>"; } $day_select .= "</select>"; $month_select .= "</select>"; $year_select .= "</select>"; $date_select = "<td valign=\"top\">" . $day_select . "</td><td valign=\"top\">" . $month_select . "</td><td valign=\"top\">" . $year_select . "</td>"; return $date_select; } // goal: verify if a string contains numbers function contains_numerics($string) { if(preg_match("`[0-9]+`", $string)) { return true; } return false; } // goal: check if an email address is valid, according to its syntax function is_valid_email($email) { return(preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+' . // the user name '@' . // the ubiquitous at-sign '([-0-9A-Z]+\.)+' . // host, sub-, and domain names '([0-9A-Z]){2,4}$/i', // top-level domain (TLD) trim($email))); } // goal: check if an url address is valid, according to its syntax, supports 4 letters domaains (e.g. .info), http https ftp protcols and also port numbers function is_valid_url($url) { return preg_match("`^((ht|f)tps*://)((([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))(:[0-9]{1,4})*((/|\?)[a-z0-9~#%&'_\+=:\?\.-]*)*)$`i", $url); } // goal: check if a phone number is valid, according to its syntax (should be: "+390523599314") function is_valid_phone($phone) { if($phone[0] != "+") { return false; } else { $phone = substr($phone, 1); // delete the "+" if(!is_numeric($phone)) { return false; } } return true; } // goal: get the name of the first unique field in a table function get_unique_field($table_name) { global $conn, $db_name; $unique_field_name = ""; $fields = database_list_fields($db_name, $table_name, $conn); $columns = count($fields); for($i = 0; $i < $columns; $i++) { if($fields[$i][3] == 'PRI') { $unique_field_name = $fields[$i][0]; break; } } return $unique_field_name; } // db functions function connect_db($server, $user, $password) { global $debug_mode; if($debug_mode == 1) { $conn = database_connect($server, $user, $password) or die('<p><b>[06] Error:</b> during MySQL database connection.<br />MySQL server said: ' . htmlspecialchars(database_error($conn)) . '</p>'); } else { $conn = database_connect($server, $user, $password) or die('<p><b>[06] Error:</b> during MySQL database connection. Most likely the settings in config.php file are incorrect, or the MySQL server is down. For PHP/MySQL debugging, turn on the debug_mode option in the config.php file.</p>'); } return $conn; } function choose_db($dbase, $conn) { global $debug_mode; if($debug_mode == 1) { database_select_db($dbase, $conn) or die('<p><b>[07] Error:</b> during MySQL database selection.<br />MySQL server said: ' . htmlspecialchars(database_error($conn)) . '</p>'); } else { database_select_db($dbase, $conn) or die('<p><b>[07] Error:</b> during MySQL database selection. Most likely the database name set in config.php file is incorrect, or there is no such database is down. For PHP/MySQL debugging, turn on the debug_mode option in the config.php file.</p>'); } database_query("SET NAMES 'utf8'", $conn); } function execute_db($sql, $conn, $file = 'unknown') { global $debug_mode; if($debug_mode == 1) { $results = database_query($sql, $conn) or die('<p><b>[08] Error:</b> during MySQL query execution (called from file <i>' . $file . '</i>). The query statement was:<br /><br />' . htmlspecialchars($sql) . '<br /><br />The MySQL server responded: ' . htmlspecialchars(database_error($conn)) . '</p>'); } else { $results = database_query($sql, $conn) or die('<p><b>[08] Error:</b> during MySQL query execution. Perhaps there is something wrong with the PHP code. For PHP/MySQL debugging, turn on the debug_mode option in the config.php file.</p>'); } return $results; } if(!function_exists('mysqli_connect')){ function database_affected_rows($x){return mysql_affected_rows($x);} function database_connect($x, $y, $z){return mysql_connect($x, $y, $z);} function database_error($x){return mysql_error($x);} function database_fetch_array($x){return mysql_fetch_array($x);} function database_fetch_field($x){return mysql_fetch_field($x);} function database_fetch_row($x){return mysql_fetch_row($x);} function database_field_flags($x, $y){return mysql_field_flags($x, $y);} function database_field_name($x, $y){return mysql_field_name($x, $y);} function database_insert_id($x){return mysql_insert_id($x);} function database_list_fields($x, $y, $z){$r = array(); $b = mysql_query('SHOW COLUMNS FROM `'. $y. '`', $z); while($a = mysql_fetch_row($b)){$r[] = $a;}; return $r;} function database_list_tables($x, $y){$r = array(); $z = mysql_query('SHOW TABLES', $y); while($a = mysql_fetch_row($z)){$r[] = $a[0];}; return $r;} function database_num_fields($x){return mysql_num_fields($x);} function database_num_rows($x){return mysql_num_rows($x);} function database_query($x){return mysql_query($x);} function database_select_db($x, $y){return mysql_select_db($x, $y);} } else{ function database_affected_rows($x){return mysqli_affected_rows($x);} function database_connect($x, $y, $z){return mysqli_connect($x, $y, $z);} function database_error($x){return mysqli_error($x);} function database_fetch_array($x){return mysqli_fetch_array($x);} function database_fetch_field($x){return mysqli_fetch_field($x);} function database_fetch_row($x){return mysqli_fetch_row($x);} function database_field_name($x, $y){return mysqli_fetch_field_direct($x, $y)->name;} function database_insert_id($x){return mysqli_insert_id($x);} function database_list_fields($x, $y, $z){$r = array(); $b = mysqli_query($z, 'SHOW COLUMNS FROM `'. $y. '`'); while($a = $b->fetch_row()){$r[] = $a;}; return $r;} function database_list_tables($x, $y){$r = array(); $z = mysqli_query($y, 'SHOW TABLES'); while($a = $z->fetch_row()){$r[] = $a[0];}; return $r;} function database_num_fields($x){return mysqli_num_fields($x);} function database_num_rows($x){return mysqli_num_rows($x);} function database_query($x, $y){return mysqli_query($y, $x);} function database_select_db($x, $y){return mysqli_select_db($y, $x);} } // encryption/decryption // use mcrypt functions if available // else Rafael Salvoni's 2008 code using RC4 -- http://www.php.net/manual/en/ref.mcrypt.php#87274 function enc($data) { global $pass; if(function_exists(mcrypt_encrypt)) { return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)); } $key = $pass; static $SC; $swap = create_function('&$v1, &$v2', ' $v1 = $v1 ^ $v2; $v2 = $v1 ^ $v2; $v1 = $v1 ^ $v2; '); $ikey = crc32($key); if(!isset($SC[$ikey])) { $S = range(0, 255); $j = 0; $n = strlen($key); for($i = 0;$i < 255;$i++) { $char = ord($key { $i % $n }); $j = ($j + $S[$i] + $char) % 256; $swap($S[$i], $S[$j]); } $SC[$ikey] = $S; } else { $S = $SC[$ikey]; } $n = strlen($data); $data = str_split($data, 1); $i = $j = 0; for($m = 0;$m < $n;$m++) { $i = ($i + 1) % 256; $j = ($j + $S[$i]) % 256; $swap($S[$i], $S[$j]); $char = ord($data[$m]); $char = $S[($S[$i] + $S[$j]) % 256]^ $char; $data[$m] = chr($char); } return implode('', $data); } function denc($data) { global $pass; if(function_exists(mcrypt_decrypt)) { return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)); } $key = $pass; static $SC; $swap = create_function('&$v1, &$v2', ' $v1 = $v1 ^ $v2; $v2 = $v1 ^ $v2; $v1 = $v1 ^ $v2; '); $ikey = crc32($key); if(!isset($SC[$ikey])) { $S = range(0, 255); $j = 0; $n = strlen($key); for($i = 0;$i < 255;$i++) { $char = ord($key { $i % $n }); $j = ($j + $S[$i] + $char) % 256; $swap($S[$i], $S[$j]); } $SC[$ikey] = $S; } else { $S = $SC[$ikey]; } $n = strlen($data); $data = str_split($data, 1); $i = $j = 0; for($m = 0;$m < $n;$m++) { $i = ($i + 1) % 256; $j = ($j + $S[$i]) % 256; $swap($S[$i], $S[$j]); $char = ord($data[$m]); $char = $S[($S[$i] + $S[$j]) % 256]^ $char; $data[$m] = chr($char); } return implode('', $data); }