aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'php/lib/util.php')
-rw-r--r--php/lib/util.php322
1 files changed, 322 insertions, 0 deletions
diff --git a/php/lib/util.php b/php/lib/util.php
new file mode 100644
index 0000000..af64fbb
--- /dev/null
+++ b/php/lib/util.php
@@ -0,0 +1,322 @@
+<?php
+/**
+ * Utility funcs.
+ * @package mirror
+ * @subpackage lib
+ */
+
+/**
+ * determine float value of now
+ * @return float value of current time in seconds
+ */
+function microtime_float()
+{
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec + (float)$sec);
+}
+
+/**
+ * Add a message to SESSION['messages'] array.
+ * The $_SESSION['messages'] array stores general or success messages.
+ * @param string $str message to add (optional)
+ */
+function set_msg($str=null)
+{
+ if (!empty($str))
+ {
+ $_SESSION['messages'][]=$str;
+ }
+}
+
+/**
+ * Show messages.
+ * Iterates through $_SESSION['messages'] and displays them in a ul.
+ * @param string $class css class for message style
+ */
+function show_msg($class='msg')
+{
+ if (is_array($_SESSION['messages']) && count($_SESSION['messages']) > 0)
+ {
+ echo ($class !== NULL) ? '<div class="'.$class.'">' : '';
+ echo '<ul>';
+ foreach ($_SESSION['messages'] as $message)
+ echo '<li>'.$message.'</li>';
+ echo '</ul>';
+ echo ($class !== NULL) ? '</div>' : '';
+ $ret = count($_SESSION['messages']);
+ }
+ else
+ {
+ $ret = 0;
+ }
+ unset($_SESSION['messages']);
+ return $ret;
+}
+
+/**
+ * Add an error message to SESSION['errors'] array.
+ * The $_SESSION['errors'] array stores error messages.
+ * @param string $str message to add (optional)
+ */
+function set_error($str=null)
+{
+ if (!empty($str))
+ {
+ $_SESSION['errors'][]=$str;
+ }
+}
+
+/**
+ * Show errors messages.
+ * Iterates through $_SESSION['errors'] and displays them in a ul.
+ * @param string $class css class for message style
+ */
+function show_error($class='error')
+{
+ if (@is_array($_SESSION['errors']) && count($_SESSION['errors']) > 0)
+ {
+ echo '<div class="'.$class.'">';
+ echo '<ul>';
+ foreach ($_SESSION['errors'] as $error)
+ echo '<li>'.$error.'</li>';
+ echo '</ul>';
+ echo '</div>';
+ $ret = count($_SESSION['errors']);
+ unset($_SESSION['errors']);
+ }
+ else
+ {
+ $ret = 0;
+ }
+ return $ret;
+}
+
+/**
+ * Print out an varible enclosed by &lt;pre&gt; tags
+ * @param mixed $var the variable to print by print_r
+ */
+function debug_r(&$var)
+{
+ echo '<pre>';
+ print_r($var);
+ echo '</pre>';
+}
+
+/**
+ * Generate a random string good for passwords
+ * @param in $len the length of the password string
+ * @return string password
+ */
+function password_gen($len=6)
+{
+
+ $set = array( '0','1','2','3','4','5','6','7','8','9','a','e','i','o','u','y','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z' );
+ $pw = '';
+
+ while (strlen($pw) <= $len)
+ {
+ // random alphanum
+ $char = $set[array_rand($set)];
+ $pw .= $char;
+ }
+
+ return $pw;
+}
+
+/**
+ * This recursive function empty values in an 'multi-dimensional' array.
+ * @param mixed $needle it accepts just one value or an array of values
+ * @return mixed false if an empty needle passed in, else a copy of the array with needle values replaced with empty strings
+ */
+function emptify_in_array($array, $needle)
+{
+ if ($needle == '')
+ return FALSE;
+
+ foreach ($array as $key=>$val)
+ {
+ if (is_array($val))
+ $array[$key] = emptify_in_array($val, $needle);
+ elseif (is_array($needle) && in_array($val, $needle))
+ $array[$key] = '';
+ elseif ($val === $needle)
+ $array[$key] = '';
+ }
+
+ return $array;
+}
+
+/**
+ * This function checks for the existence of a particular row in a particular table matching a value.
+ * Use this with libdb, unless you want lots of problems. :)
+ * @param string $table name of table
+ * @param string $column name of column containing value to match
+ * @param string $val value to match against database (goes in WHERE clause)
+ * @param string $extra (optional) any AND or ORDER BY or LIMIT or anything you want to add.
+ * @ret bool if a match exists, return true -- otherwise return false
+ */
+function record_exists($table,$column,$val,$extra=NULL)
+{
+ $result = db_query("SELECT * FROM {$table} WHERE {$column}='{$val}' {$extra}");
+ if ($result&&mysql_num_rows($result)>0)
+ {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Show user tabs, based on an array.
+ * @param array $tabs array of tabs (name=>href)
+ * @param string $current name of tab to highlight
+ */
+function show_tabs($tabs,$current)
+{
+ if ( is_array($tabs) )
+ {
+ echo "\n".'<div id="tabs"><ul>';
+ foreach ( $tabs as $key=>$val )
+ {
+ if ( strtolower($key) == $current)
+ echo "\n".'<li class="active-tab"><a href="'.$val.'">'.$key.'</a></li>';
+ else
+ echo "\n".'<li><a href="'.$val.'">'.$key.'</a></li>';
+ }
+ echo "\n".'</ul></div>';
+ }
+}
+
+/**
+ * Sort a two dimensional array based on a 'column' key
+ * @param array $array the array to be sorted
+ * @param mixed $key the column key to be used for sorting, an array of keys are also acceptable
+ * @param mixed $order the order of the sort, either 'asc' (ascending) or 'desc' (descending), can also be an array (with matching array keys to the $key param)
+ * @param bool $retain_keys option to retain the original keys; default to true
+ * @param bool $case_sensitive option for a case sensitive sort; default to false
+ * @return array the original array on argument errors, the sorted array on success
+ */
+function array_order_by(&$array, $key=null, $order=null, $retain_keys=TRUE, $case_sensitive=FALSE)
+{
+ if (is_array($key) && count($key)==1)
+ {
+ $temp = each($key);
+ $key = $temp['value'];
+ $order = $order[$temp['key']];
+ unset($temp);
+ }
+
+ if (is_array($key))
+ {
+ if (!is_array($order))
+ {
+ $order = array();
+ }
+ if (count($key) > count($order))
+ {
+ $order = array_pad($order, count($key), 'asc');
+ }
+
+ // sort it according to the first key
+ $temp_sort_key = reset($key);
+ $temp_order_val = $order[key($key)];
+ $return_arr = array_order_by($array, $temp_sort_key, $temp_order_val, $retain_keys, $case_sensitive);
+
+ // set up the arrays for the 'inner', next recursion
+ $key_copy = $key;
+ $order_copy = $order;
+ unset($key_copy[key($key)]);
+ unset($order_copy[key($key)]);
+
+ // get the sorting column's value in the first row
+ $temp = current($return_arr);
+ $temp_prev_sort_val = $temp[$temp_sort_key];
+ unset($temp);
+
+ $temp_return_arr = array();
+ $temp_partial_array = array();
+
+ foreach ($return_arr as $return_arr_key=>$return_arr_val)
+ {
+ if ($return_arr_val[$temp_sort_key] == $temp_prev_sort_val)
+ {
+ $temp_partial_array[$return_arr_key] = $return_arr_val;
+ }
+ else
+ {
+ if ($retain_keys)
+ {
+ $temp_return_arr = $temp_return_arr + array_order_by($temp_partial_array, $key_copy, $order_copy, $retain_keys, $case_sensitive);
+ }
+ else
+ {
+ $temp = array_order_by($temp_partial_array, $key_copy, $order_copy, $retain_keys, $case_sensitive);
+ foreach ($temp as $temp_val)
+ {
+ $temp_return_arr[] = $temp_val;
+ }
+ unset($temp);
+ }
+ $temp_prev_sort_val = $return_arr_val[$temp_sort_key];
+ $temp_partial_array = array();
+ $temp_partial_array[$return_arr_key] = $return_arr_val;
+ }
+ }
+
+ // important! if the last n $temp_prev_sort_val has the same value, then they aren't sorted and added to the temp array
+ if (count($return_arr) > count($temp_return_arr))
+ {
+ if ($retain_keys)
+ {
+ $temp_return_arr = $temp_return_arr + array_order_by($temp_partial_array, $key_copy, $order_copy, $retain_keys, $case_sensitive);
+ }
+ else
+ {
+ $temp = array_order_by($temp_partial_array, $key_copy, $order_copy, $retain_keys, $case_sensitive);
+ foreach ($temp as $temp_val)
+ {
+ $temp_return_arr[] = $temp_val;
+ }
+ unset($temp);
+ }
+ }
+
+ return $temp_return_arr;
+ }
+
+ if (empty($array) || is_null($key))
+ return $array;
+
+ if (!array_key_exists($key, reset($array)))
+ return $array;
+
+ $order =& strtolower($order);
+ if ($order == '' || ($order != 'asc' && $order != 'desc'))
+ $order = 'asc';
+
+ // construct an array that will be used to order the keys
+ foreach($array as $row_key => $row)
+ {
+ $x[$row_key] = $row[$key];
+ }
+
+ if ($case_sensitive)
+ natsort($x);
+ else
+ natcasesort($x);
+
+ if ($order == 'desc')
+ $x =& array_reverse($x, TRUE);
+
+ // now use those keys to order the original array
+ foreach($x as $row_key => $uselessvalue)
+ {
+ if ($retain_keys)
+ $return_arr[$row_key] =& $array[$row_key];
+ else
+ $return_arr[] =& $array[$row_key];
+ }
+
+ return $return_arr;
+}
+
+?>