Файл: pma/lib/functions.php
Строк: 469
<?php
// wap phpmyadmin
// ionutvmi@gmail.com
// master-land.net
function connect_db(&$db) {
global $pma;
if(!$pma->host) { header("Location: index.php"); exit; }
$db = new mysqli($pma->host, $pma->user, $pma->pass);
/* check connection */
if ($db->connect_errno) {
die($db->connect_error);
}
return $db;
}
function PMA_bkq($a_name)
{
if (is_array($a_name)) {
foreach ($a_name as &$data) {
$data = PMA_backquote($data, $do_it);
}
return $a_name;
}
// '0' is also empty for php :-(
if (strlen($a_name) && $a_name !== '*') {
return '`' . str_replace('`', '``', $a_name) . '`';
} else {
return $a_name;
}
} // end of the 'PMA_bkq()' function
function pma_img($src) {
global $pma;
if(!$_SESSION['noimg'])
return "<img class='icon' src='".$pma->tpl."style/img/$src'>";
}
/*
Function: highlight_sql
Author: ME Wieringa <pholeron@hotmail.com>
Description: Highlight your query on the fly
*/
function highlight_sql($string)
{
$aKeywords = array();
// SQL syntax
$aKeywords[] = array('and', true); // keyword name (any string [a-zA-Z0-9_], or any character), keyword to next line (true or false, default: false), css class (default: 'keyword')
$aKeywords[] = array('as', false);
$aKeywords[] = array('asc', false);
$aKeywords[] = array('binary', false);
$aKeywords[] = array('by', false);
$aKeywords[] = array('delete', true);
$aKeywords[] = array('desc', false);
$aKeywords[] = array('from', true);
$aKeywords[] = array('having', true);
$aKeywords[] = array('group', true);
$aKeywords[] = array('insert', true);
$aKeywords[] = array('in', true);
$aKeywords[] = array('into', false);
$aKeywords[] = array('join', false);
$aKeywords[] = array('left', false);
$aKeywords[] = array('like', false);
$aKeywords[] = array('limit', true);
$aKeywords[] = array('order', true);
$aKeywords[] = array('on', false);
$aKeywords[] = array('or', true);
$aKeywords[] = array('right', false);
$aKeywords[] = array('select', true);
$aKeywords[] = array('set', true);
$aKeywords[] = array('values', true);
$aKeywords[] = array('where', true);
$aKeywords[] = array('xor', true);
// Operators
$aKeywords[] = array('+', false, 'operator');
$aKeywords[] = array('-', false, 'operator');
$aKeywords[] = array('*', false, 'operator');
$aKeywords[] = array('/', false, 'operator');
$aKeywords[] = array('=', false, 'operator');
$aKeywords[] = array('<', false, 'operator');
$aKeywords[] = array('>', false, 'operator');
$aKeywords[] = array('%', false, 'operator');
$aKeywords[] = array('.', false, 'operator');
$aKeywords[] = array(',', false, 'operator');
$aKeywords[] = array('true', false, 'quoted');
$aKeywords[] = array('false', false, 'quoted');
$aKeywords[] = array('null', false, 'quoted');
$aKeywords[] = array('unkown', false, 'quoted');
// Split query into pieces (quoted values, ticked values, string and/or numeric values, and all others).
$expr = '/('((\\.)|[^\\\'])*')|(`((\\.)|[^\\\`])*`)|([a-z0-9_]+)|([sn]+)|(.)/i';
preg_match_all($expr, $string, $matches);
// Use a buffer to build up lines.
$buffer = '';
// Keep track of brackets to indent/outdent
$iTab = 0;
for($i = 0; $i < sizeof($matches[0]); $i++)
{
if(strcasecmp($match = $matches[0][$i], "") !== 0)
{
if(in_array($match, array("(", ")"))) // Bracket found
{
$buffer = trim($buffer);
if(strlen($buffer) > 0)
{
$result .= $buffer . ' ';
}
$buffer = '';
if(strcasecmp($match, ")") === 0)
{
$iTab--;
if($iTab < 0)
{
$iTab = 0;
}
$result .= str_repeat('', 4 * $iTab) . '<span class="bracket">' . htmlentities($match, ENT_QUOTES, "UTF-8") . '</span> ';
}
else // if(strcasecmp($match, "(") === 0)
{
$result .= str_repeat('', 4 * $iTab) . '<span class="bracket">' . htmlentities($match, ENT_QUOTES, "UTF-8") . '</span> ';
$iTab++;
}
}
elseif(preg_match('/^[sn]+$/', $match)) // Space character(s)
{
if(strlen($buffer) === 0)
{
// Ignore space character(s)!
}
else
{
$buffer .= ' ';
}
}
else
{
$aKeyword = false;
for($j = 0; $j < sizeof($aKeywords); $j++)
{
if(strcasecmp($match, $aKeywords[$j][0]) === 0)
{
$aKeyword = $aKeywords[$j];
break;
}
}
if($aKeyword) // Keyword found
{
if(isset($aKeyword[1]) && $aKeyword[1] === true) // Keyword to next line
{
$buffer = trim($buffer);
if(strlen($buffer) > 0)
{
$result .= $buffer . ' ';
}
$buffer = '';
}
if(strlen($buffer) === 0) // Indent
{
$buffer .= str_repeat('', 4 * $iTab);
}
$buffer .= '<span class="' . (isset($aKeyword[2]) ? $aKeyword[2] : 'keyword') . '">' . htmlentities(strtoupper($match), ENT_QUOTES, "UTF-8") . '</span>';
}
else
{
if(strlen($buffer) === 0) // Indent
{
$buffer = str_repeat('', 4 * $iTab);
}
if(is_numeric($match))
$buffer .= '<span class="numeric">' . htmlentities($match, ENT_QUOTES, "UTF-8") . '</span>';
else
if((strcasecmp(substr($match, 0, 1), "'") === 0)) // Quoted value or number
{
$buffer .= '<span class="quoted">' . htmlentities($match, ENT_QUOTES, "UTF-8") . '</span>';
}
elseif((strcasecmp(substr($match, 0, 1), "`") === 0) || preg_match('/[a-z0-9_]+/i', $match)) // Ticked value or unquoted string (table/column name?!)
{
$buffer .= '<span class="ticked">' . htmlentities($match, ENT_QUOTES, "UTF-8") . '</span>';
}
else // All other chars
{
$buffer .= htmlentities($match, ENT_QUOTES, "UTF-8");
}
}
}
}
}
$buffer = trim($buffer);
if(strlen($buffer) > 0)
{
$result .= $buffer;
}
return '<code class="sql">' . $result . '</code>';
}
function convert($size)
{
$unit=array('B','KB','MB','GB','TB','PB');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function make_select($type,$name,$vars,$selected=false,$extra=''){
$content_cells = "<select name='$name'>".$extra;
foreach ($vars as $col_goup => $column_type) {
if (is_array($column_type)) {
$content_cells .= '<optgroup label="' . htmlspecialchars($col_goup, ENT_QUOTES, "UTF-8") . '">';
foreach ($column_type as $col_group_type) {
$content_cells .= '<option value="'. $col_group_type . '"';
if (strtoupper($selected) == strtoupper($col_group_type)) {
$content_cells .= ' selected="selected"';
}
$content_cells .= '>' . $col_group_type . '</option>';
}
$content_cells .= '</optgroup>';
continue;
}
$content_cells .= '<option value="'. ($type==1 ? $col_goup: $column_type) . '"';
if ((strtoupper($selected) == strtoupper($column_type)) OR (strtoupper($selected) == strtoupper($col_goup) && $type==1)) {
$content_cells .= ' selected="selected"';
}
$content_cells .= '>' . $column_type . '</option>';
} // end for
$content_cells.="</select>";
return $content_cells;
}
function getChar() {
global $db;
$res = $db->query('SHOW CHARACTER SET;');
$mysql_charsets = array();
while ($row = $res->fetch_assoc()) {
$mysql_charsets[] = $row['Charset'];
}
sort($mysql_charsets, SORT_STRING);
$mysql_collations = array_flip($mysql_charsets);
$res = $db->query('SHOW COLLATION;');
while ($row = $res->fetch_assoc()) {
if (!is_array($mysql_collations[$row['Charset']])) {
$mysql_collations[$row['Charset']] = array($row['Collation']);
} else {
$mysql_collations[$row['Charset']][] = $row['Collation'];
}
}
foreach ($mysql_collations AS $key => $value) {
sort($mysql_collations[$key], SORT_STRING);
reset($mysql_collations[$key]);
}
return $mysql_collations;
}
function stripslashes_recursive($value) {
if (is_array($value)) {
foreach ($value as $index => $val) {
$value[$index] = stripslashes_recursive($val);
}
return $value;
} else {
return stripslashes($value);
}
}
function remove_magic_quotes()
{
if( get_magic_quotes_gpc() ) {
$_GET = stripslashes_recursive($_GET);
$_POST = stripslashes_recursive($_POST);
}
}
function fwrite_stream($fp, $string) {
for ($written = 0; $written < strlen($string); $written += $fwrite) {
$fwrite = fwrite($fp, substr($string, $written));
if ($fwrite === false) {
return $written;
}
}
return $written;
}
/* creates a compressed zip file */
function create_zip($files = array(),$destination = '',$overwrite = false) {
//if the zip file already exists and overwrite is false, return false
if(file_exists($destination) && !$overwrite) { return false; }
//vars
$valid_files = array();
//if files were passed in...
if(is_array($files)) {
//cycle through each file
foreach($files as $file) {
//make sure the file exists
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
//if we have good files...
if(count($valid_files)) {
//create the archive
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
//add the files
foreach($valid_files as $file) {
$zip->addFile($file,str_replace('data/','',$file));
}
//debug
//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
//close the zip -- done!
$zip->close();
//check to make sure the file exists
return file_exists($destination);
}
else
{
return false;
}
}
function zipIsValid($path) {
$zip = zip_open($path);
if (is_resource($zip)) {
// it's ok
zip_close($zip); // always close handle if you were just checking
return true;
} else {
return false;
}
}
function get_max_upl() {
$max_upload = (int)(ini_get('upload_max_filesize'));
$max_post = (int)(ini_get('post_max_size'));
$memory_limit = (int)(ini_get('memory_limit'));
return min($max_upload, $max_post, $memory_limit);
}
/**
* Extracts the various parts from a field type spec
*
* @uses strpos()
* @uses chop()
* @uses substr()
* @param string $fieldspec
* @return array associative array containing type, spec_in_brackets
* and possibly enum_set_values (another array)
* @author Marc Delisle
* @author Joshua Hogendorn
*/
function PMA_extractFieldSpec($fieldspec) {
$first_bracket_pos = strpos($fieldspec, '(');
if ($first_bracket_pos) {
$spec_in_brackets = chop(substr($fieldspec, $first_bracket_pos + 1, (strrpos($fieldspec, ')') - $first_bracket_pos - 1)));
// convert to lowercase just to be sure
$type = strtolower(chop(substr($fieldspec, 0, $first_bracket_pos)));
} else {
$type = $fieldspec;
$spec_in_brackets = '';
}
if ('enum' == $type || 'set' == $type) {
// Define our working vars
$enum_set_values = array();
$working = "";
$in_string = false;
$index = 0;
// While there is another character to process
while (isset($fieldspec[$index])) {
// Grab the char to look at
$char = $fieldspec[$index];
// If it is a single quote, needs to be handled specially
if ($char == "'") {
// If we are not currently in a string, begin one
if (! $in_string) {
$in_string = true;
$working = "";
// Otherwise, it may be either an end of a string, or a 'double quote' which can be handled as-is
} else {
// Check out the next character (if possible)
$has_next = isset($fieldspec[$index + 1]);
$next = $has_next ? $fieldspec[$index + 1] : null;
// If we have reached the end of our 'working' string (because there are no more chars, or the next char is not another quote)
if (! $has_next || $next != "'") {
$enum_set_values[] = $working;
$in_string = false;
// Otherwise, this is a 'double quote', and can be added to the working string
} elseif ($next == "'") {
$working .= "'";
// Skip the next char; we already know what it is
$index++;
}
}
// escaping of a quote?
} elseif ('\' == $char && isset($fieldspec[$index + 1]) && "'" == $fieldspec[$index + 1]) {
$working .= "'";
$index++;
// Otherwise, add it to our working string like normal
} else {
$working .= $char;
}
// Increment character index
$index++;
} // end while
} else {
$enum_set_values = array();
}
return array(
'type' => $type,
'spec_in_brackets' => $spec_in_brackets,
'enum_set_values' => $enum_set_values
);
}
function get_hidden($ignore=array()) {
foreach($_GET as $k=>$v){
if(!in_array($k,$ignore))
$h.="<input type='hidden' name='".urlencode($k)."' value='".urlencode($v)."'>";
}
return $h;
}
/*
* figure out what is making a record unique
* if it has a primary or unique key(s) return that
* if not use all columns
*/
function getUniqueCondition($result,$row)
{
global $db;
$fields = $result->fetch_fields();
foreach ($fields as $k => $field) {
if(defined('MYSQLI_PRI_KEY_FLAG') && defined('MYSQLI_UNIQUE_KEY_FLAG')) {
$_primary_key = (int) (bool) ($field->flags & MYSQLI_PRI_KEY_FLAG);
$_unique_key = (int) (bool) ($field->flags & MYSQLI_UNIQUE_KEY_FLAG);
}else{
$_primary_key = (int) (bool) ($field->primary_key);
$_unique_key = (int) (bool) ($field->unique_key);
}
$c[]="(".PMA_bkq($field->name)." = '".$db->real_escape_string($row[$field->name])."')";
if($_primary_key)
$primary[]="(".PMA_bkq($field->name)." = '".$db->real_escape_string($row[$field->name])."')";
elseif($_unique_key)
$unique[]="(".PMA_bkq($field->name)." = '".$db->real_escape_string($row[$field->name])."')";
}
if($primary)
$result=implode(" AND ",$primary);
elseif($unique)
$result=implode(" AND ",$unique);
else
$result=implode(" AND ",$c);
return $result;
}
// pagination function
function pag($total,$currentPage,$baseLink,$nextPrev=true,$limit=10) {
global $lang;
if(!$total OR !$currentPage OR !$baseLink) {
return false; } //Total Number of pages
$totalPages = ceil($total/$limit); //Text to use after number of pages
$txtPagesAfter = ($totalPages==1)? " $lang->Page": " $lang->Pages"; //Start off the list.
$txtPageList = $totalPages.$txtPagesAfter .': ' ; //Show only 3 pages before current page(so that we don't have too many pages)
$min = ($currentPage - 3 < $totalPages && $currentPage-3 > 0) ? $currentPage-3 : 1; //Show only 3 pages after current page(so that we don't have too many pages)
$max = ($currentPage + 3 > $totalPages) ? $totalPages : $currentPage+3; //Variable for the actual page links
$pageLinks = ""; //Loop to generate the page links
for($i=$min;$i<=$max ;$i++) {
if($currentPage==$i) { //Current Page
$pageLinks .= ' <b class="selected">'.$i.'</b> ' ; }
else { $pageLinks .= ' <a href="'.$baseLink.$i.'" class="page">'.$i.'</a> ' ; } }
if($nextPrev ) { //Next and previous links
$next = ($currentPage + 1 > $totalPages) ? false : '<a href="'.$baseLink.($currentPage + 1) .'">'.$lang->Next.'</a>' ;
$prev = ($currentPage - 1 <= 0 ) ? false : '<a href="'.$baseLink.($currentPage - 1).'">'.$lang->Prev.'</a>' ; }
$first= ($currentPage > 2) ? '<a href="'.$baseLink.'1">'.$lang->First.'</a> ': false ;
$last= ($currentPage < ($totalPages - 2)) ? " <a href='".$baseLink.$totalPages."'>".$lang->Last."</a> " : false ;
return $txtPageList.$first.$prev.$pageLinks.$next.$last;
}
// this should check if data is an
// sql function to remove ' from query
// i'm pretty sure there is a better way of doing this
// i will come back on this when i can
function isSqlFunction($str){
global $_var;
// check if it's exact
$str=trim(strtoupper($str));
if(in_array($str,$_var->sql_function_name))
return true;
// this needs to be improved
return false;
}
?>