<?php
/* 
	osCommerce, Open Source E-Commerce Solutions 
	http://www.oscommerce.com 
	
	Copyright (c) 2003 - 2013 osCommerce 
	
	 
	
	Freeway eCommerce 
	http://www.openfreeway.org
	Copyright (c) 2007 ZacWare
	
	osConcert, Online Seat Booking 
  	http://www.osconcert.com

  	Copyright (c) 2009-2016 osConcert 
	
	Released under the GNU General Public License 
*/ 


  function osc_db_connect($server, $username, $password, $database, $link = 'db_link') {
    global $$link, $db_error;
//xamp etc password
if ($password == ''){$password = NULL;}
    $db_error = false;

    if (!$server) {
      $db_error = 'No Server selected.';
      return false;
    }
    $$link = @mysqli_connect($server, $username, $password, $database);
    if ( !mysqli_connect_errno() ) {
      mysqli_set_charset($$link, 'utf8');
    } else {
      $db_error = mysqli_connect_error();
  }
    @mysqli_query($$link, 'set session sql_mode=""');
	return $$link;
  }





  function osc_db_select_db($database, $link = 'db_link') {
    global $$link, $db_error;
    if ( empty($database) ) {
      $db_error = 'No Database selected.';
      return false;
    }
    if ( !@mysqli_select_db($$link, $database) ) {
      $db_error = 'Could not open database "' . $database . '".';
      return false;
    }
    return true;
  }
  function osc_db_query($query, $link = 'db_link') {
    global $$link;
    return mysqli_query($$link, $query);
  }
  function osc_db_num_rows($db_query) {
    return mysqli_num_rows($db_query);
  }
  function osc_db_install($database, $sql_file,$link='db_link') {
    global $$link, $db_error;

    $db_error = false;

    if (!@osc_db_select_db($database)) {
      if (@osc_db_query('create database ' . $database)) {
        osc_db_select_db($database);
      } else {
        $db_error = mysqli_error($$link);
      }
    }
    if (!$db_error) {
      if (file_exists($sql_file)) {
        $fd = fopen($sql_file, 'rb');
        $restore_query = fread($fd, filesize($sql_file));
		$restore_query=$restore_query . "\n";
        fclose($fd);
      } else {
        $db_error = 'SQL file does not exist: ' . $sql_file;
        return false;
      }
      $sql_array = array();
      $sql_length = strlen($restore_query);
      $pos = strpos($restore_query, ';');
	  if (!$pos) {
	  	$restore_query.=';';
	    $pos = strpos($restore_query, ';');
		}	
	  $temp_cnt=0;
      for ($i=$pos; $i<$sql_length; $i++) {
        if ($restore_query[0] == '#') {
		  $temp_cnt++;
          $restore_query = ltrim(substr($restore_query, strpos($restore_query, "\n")));
          $sql_length = strlen($restore_query);
          $i = strpos($restore_query, ';')-1;
          continue;
        }
        if ($restore_query[($i+1)] == "\n") {
          for ($j=($i+2); $j<$sql_length; $j++) {
            if (trim($restore_query[$j]) != '') {
              $next = substr($restore_query, $j, 8);
              if ($next[0] == '#') {
// find out where the break position is so we can remove this line (#comment line)
                for ($k=$j; $k<$sql_length; $k++) {
                  if ($restore_query[$k] == "\n") break;
                }
                $query = substr($restore_query, 0, $i+1);
                $restore_query = substr($restore_query, $k);
// join the query before the comment appeared, with the rest of the dump
                $restore_query = $query . $restore_query;
                $sql_length = strlen($restore_query);
                $i = strpos($restore_query, ';')-1;
                continue 2;
              }
              break;
            }
          }
          if ($next == '') { // get the last insert query
            $next = 'insert';
          }
          //if ( (eregi('create t', $next)) || (eregi('insert i', $next)) || (eregi('drop tab', $next)) ||  (eregi('delete f',$next)) || (eregi('alter t',$next)) || (eregi('update ',$next)) ) {
		  if ( (preg_match('/create t/i', $next)) || (preg_match('/insert i/i', $next)) || (preg_match('/drop tab/i', $next)) ||  (preg_match('/delete f/i',$next)) || (preg_match('/alter t/i',$next)) || (preg_match('/update /i',$next)) ) {
            $next = '';
            $sql_array[] = substr($restore_query, 0, $i);
            $restore_query = ltrim(substr($restore_query, $i+1));
            $sql_length = strlen($restore_query);
            $i = strpos($restore_query, ';')-1;
          }
        }
      }

      for ($i=0; $i<sizeof($sql_array); $i++) {
        if (!osc_db_query($sql_array[$i])){
          $db_error = mysqli_error($$link);

          return false;
        }
      }
    } else {
      return false;
    }
  }
function osc_db_test_create_db_permission($database) {
    global  $$link, $db_error;

    $db_created = false;
    $db_error = false;

    if (!$database) {
      $db_error = 'No Database selected.';
      return false;
    }

    if (!$db_error) {
      if (!@osc_db_select_db($database)) {
        $db_created = true;
        if (!@osc_db_query('create database ' . $database)) {
        //$db_error = mysqli_error($$link);
		$db_error = mysqli_connect_error();
        }
      } else {
        //$db_error = mysqli_error($$link);
		$db_error = mysqli_connect_error();
      }
      if (!$db_error) {
        if (@osc_db_select_db($database)) {
          if (@osc_db_query('create table temp ( temp_id int(5) )')) {
            if (@osc_db_query('drop table temp')) {
              if ($db_created) {
                if (@osc_db_query('drop database ' . $database)) {
                } else {
                         //$db_error = mysqli_error($$link);
		                 $db_error = mysqli_connect_error();
                }
              }
            } else {
                     //$db_error = mysqli_error($$link);
	               	$db_error = mysqli_connect_error();
            }
          } else {
                    //$db_error = mysqli_error($$link);
		            $db_error = mysqli_connect_error();
          }
        } else {
                 //$db_error = mysqli_error($$link);
	          	$db_error = mysqli_connect_error();
        }
      }
    }

    if ($db_error) {
      return false;
    } else {
      return true;
    }
  }

  function osc_db_test_connection($database) {
    global $db_error,$start_time;

    $db_error = false;

    if (!$db_error) {
      if (!@osc_db_select_db($database)) {
        $db_error = mysqli_error();
      } else {
        if (!@osc_db_query('select count(*) from configuration')) {
          $db_error = mysqli_error();
        }
      }
    }

    if ($db_error) {
      return false;
    } else {
      return true;
    }
  }

?>
