<?php
function splitSQL($sql)
{
$tokens = explode(';', $sql);
$output = array();
$matches = array();
$token_count = count($tokens);
for ($i = 0; $i < $token_count; $i++) {
if ($i != $token_count-1 || strlen($tokens[$i] > 0)) {
$total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);
$unescaped_quotes = $total_quotes - $escaped_quotes;
if (($unescaped_quotes % 2) == 0) {
$output[] = $tokens[$i];
$tokens[$i] = '';
} else {
$temp = $tokens[$i] . ';';
$tokens[$i] = '';
$complete_stmt = false;
for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++) {
$total_quotes = preg_match_all("/'/", $tokens[$j], $matches);
$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches);
$unescaped_quotes = $total_quotes - $escaped_quotes;
if (($unescaped_quotes % 2) == 1) {
$output[] = $temp . $tokens[$j];
$tokens[$j] = '';
$temp = '';
$complete_stmt = true;
$i = $j;
} else {
$temp .= $tokens[$j] . ';';
$tokens[$j] = '';
}
}
}
}
}
return $output;
}
function selectSQL($query)
{
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
$result = mysqli_query($link, $query, MYSQLI_STORE_RESULT);
if (false === $result) {
echo mysqli_error($link);
}
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
if (null === $row) {
echo "[ERROR]: The query you have requested has no result.\n";
exit(1);
}
mysqli_free_result($result);
mysqli_close($link);
return $row[0];
}
function importSQL($schema)
{
$schema = trim($schema);
$schema = removeRemarks($schema);
$schema = removeComments($schema);
$schema = splitSQL($schema);
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
foreach ($schema as $query) {
$query .= ';';
$result = mysqli_query($link, $query, MYSQLI_STORE_RESULT);
if (false === $result) {
echo mysqli_error($link);
exit(1);
}
}
}
function dropSQL(){
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
$db_prefix = DB_MAIN_PREFIX;
$query = "SHOW TABLES LIKE '$db_prefix%'";
$query_result = mysqli_query($link, $query);
if (false === $query_result) {
echo "\nQuery $query failed.\n";
echo mysqli_error($link) . "\n";
exit(1);
}
$tables = array();
while ($row = mysqli_fetch_array($query_result, MYSQLI_BOTH)) {
$tables[] = $row[0];
}
for ($i = 0; $i < count($tables); $i++) {
$delete_query = "DROP TABLE ". $tables[$i] . ";";
mysqli_query($link, $delete_query);
}
mysqli_close($link);
}
function dumpSQL()
{
if (DB_MAIN_HOST == 'localhost'){
$args = array(
'host' => DB_MAIN_HOST,
'socket' => DB_MAIN_SOCKET,
'user' => DB_MAIN_LOGIN,
'password' => DB_MAIN_PASSWORD,
);
} else {
$args = array(
'host' => DB_MAIN_HOST,
'user' => DB_MAIN_LOGIN,
'password' => DB_MAIN_PASSWORD,
);
}
$mysql = 'mysqldump';
foreach ($args as $argName => $argValue) {
$mysql .= " --$argName='$argValue'";
}
$db_name = DB_MAIN_NAME;
$mysql .= " '$db_name' > " . ROOT_DIR . "/dump.sql";
return $mysql;
}
function renameSQL($oldTablePrefix, $newTablePrefix)
{
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
$db_prefix = $oldTablePrefix;
$query = "SHOW TABLES LIKE '$db_prefix%'";
$query_result = mysqli_query($link, $query);
if (false === $query_result) {
echo "\nQuery $query failed.\n";
echo mysqli_error($link) . "\n";
exit(1);
}
while ($row = mysqli_fetch_array($query_result, MYSQLI_BOTH)) {
$old_table = $row[0];
if (!empty($oldTablePrefix)) {
$new_table = preg_replace('/^' . $oldTablePrefix.'/', $newTablePrefix, $old_table);
} else {
$new_table = $newTablePrefix . $old_table;
}
$rename_query = "RENAME TABLE `$old_table` TO `$new_table`;";
mysqli_query($link, $rename_query);
}
mysqli_close($link);
}
function querySQL($query)
{
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
$result = mysqli_query($link, $query);
if (false === $result) {
echo "\nQuery $query failed.\n";
echo mysqli_error($link) . "\n";
exit(1);
}
}
function removeRemarks($sql)
{
$lines = explode("\n", $sql);
$linecount = count($lines);
$output = '';
for ($i = 0; $i < $linecount; $i++) {
if (($i != ($linecount - 1)) || (strlen($lines[$i]) > 0)) {
if (isset($lines[$i][0]) && $lines[$i][0] != "#") {
$output .= $lines[$i] . "\n";
} else {
$output .= "\n";
}
$lines[$i] = '';
}
}
return $output;
}
function removeComments(&$output)
{
$lines = explode("\n", $output);
$output = '';
$linecount = count($lines);
$in_comment = false;
for($i = 0; $i < $linecount; $i++) {
if(preg_match("/^\/\*/", preg_quote($lines[$i]))) {
$in_comment = true;
}
if(!$in_comment) {
$output .= $lines[$i] . "\n";
}
if(preg_match("/\*\/$/", preg_quote($lines[$i]))) {
$in_comment = false;
}
}
unset($lines);
return $output;
}
function checkEmptyFolder($target)
{
if (!is_readable($target)) {
echo "[ERROR]: $target no readable.\n";
exit(1);
}
$handle = opendir($target);
while (false !== ($entry = readdir($handle))) {
if ($entry != '.' && $entry != '..') {
return false;
}
}
closedir($handle);
return true;
}
function deleteFolder($target)
{
if (true === checkEmptyFolder($target)) {
rmdir($target);
} else {
if (is_dir($target)) {
$objects = scandir($target);
foreach ($objects as $object) {
if ($object != '.' && $object != '..') {
if (filetype($target . '/' . $object) == 'dir') {
deleteFolder($target . '/' . $object);
} else {
unlink($target . '/' . $object);
}
}
}
reset($objects);
rmdir($target);
}
}
}
function copyContent ($source, $destination)
{
if (!file_exists($source)) {
echo "[ERROR]: Source $source does not exist.\n";
exit(1);
}
if (file_exists($destination)) {
if (is_file($destination)) {
unlink($destination);
} elseif (is_dir($destination)) {
deleteFolder($destination);
}
}
if (is_file($source)) {
copy($source, $destination);
} elseif (is_dir($source)) {
$dir = opendir($source);
mkdir($destination, 0777, true);
while(false !== ($file = readdir($dir))) {
if ($file != '.' && $file != '..') {
copyContent($source . '/' . $file, $destination . '/' . $file);
}
}
closedir($dir);
}
}
function replace($search, $replace, $subject)
{
if (!is_array($subject)) {
$searches = is_array($search) ? array_values($search) : array($search);
$replacements = is_array($replace) ? array_values($replace) : array($replace);
$replacements = array_pad($replacements, count($searches), '');
foreach ($searches as $key => $search) {
$parts = mb_split(preg_quote($search), $subject);
$subject = implode($replacements[$key], $parts);
}
} else {
foreach ($subject as $key => $value) {
$subject[$key] = replace($search, $replace, $value);
}
}
return $subject;
}
function cURL($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
$data = curl_exec($ch);
if (false === $data) {
echo "[ERROR]: $url can't be processed\n";
}
curl_close($ch);
}
function timezone()
{
switch (LOCALE) {
case 'de_DE':
$timezone = 'Europe/Berlin';
break;
case 'en_CA':
$timezone = 'America/Vancouver';
break;
case 'en_GB':
$timezone = 'Europe/London';
break;
case 'en_US':
$timezone = 'US/Eastern';
break;
case 'es_ES':
$timezone = 'Europe/Madrid';
break;
case 'es_MX':
$timezone = 'America/Mexico_City';
break;
case 'fr_CA':
$timezone = 'America/Toronto';
break;
case 'fr_FR':
$timezone = 'Europe/Paris';
break;
case 'pl_PL':
$timezone = 'Europe/Warsaw';
break;
case 'it_IT':
$timezone = 'Europe/Rome';
break;
default:
$timezone = 'Europe/London';
}
return $timezone;
}
function listSQL($query)
{
$link = mysqli_connect(DB_MAIN_HOST, DB_MAIN_LOGIN, DB_MAIN_PASSWORD, DB_MAIN_NAME, (int)DB_MAIN_PORT, DB_MAIN_SOCKET);
if (!$link) {
echo mysqli_connect_error();
exit(1);
}
$result = mysqli_query($link, $query, MYSQLI_STORE_RESULT);
if (false === $result) {
echo mysqli_error($link);
}
$rows = array();
while ($row = mysqli_fetch_row($result)) {
$rows[] = $row[0];
}
mysqli_free_result($result);
mysqli_close($link);
return $rows;
}