<?php
/* This file is part of Madcollector.
* Madcollector created by Thomas Andrieu,
* Developped by Thomas Andrieu.
* Madcollector is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
* Madcollector is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
function maddb_connect($cfg_database_driver,$cfg_host,$cfg_database,$cfg_user,$cfg_password)
{
$dbconnector = null;
if(extension_loaded('pdo_'.$cfg_database_driver))
{
try
{
$dbconnector = new PDO($cfg_database_driver.':host='.$cfg_host.';dbname='.$cfg_database, $cfg_user, $cfg_password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(Exception $e){
echo 'Error '.$e->getCode().': '.$e->getMessage().'<br />';
exit ;
}
}
else
{
$dbconnector = mysql_connect($cfg_host, $cfg_user, $cfg_password);
if (!function_exists('mysql_set_charset')) {
function mysql_set_charset($charset,$dbh)
{
return mysql_query("set names $charset",$dbh);
}
}
mysql_set_charset('utf8',$dbconnector);
if (! $dbconnector){
echo "<h1>Database connexion error</h1>";
exit ;
}
if(!mysql_select_db($cfg_database)){
echo "<h1>Database connexion error</h1>";
exit ;
}
}
return $dbconnector;
}
function maddb_lastId()
{
global $dbconnector,$cfg_database_driver;
$result = -1;
if(extension_loaded('pdo_'.$cfg_database_driver))
{
return $dbconnector->lastInsertId();
}
else
{
return mysql_insert_id();
}
return $result;
}
function maddb_query($requete)
{
global $dbconnector,$cfg_database_driver, $error_messages;
$changedLines = -1;
if(extension_loaded('pdo_'.$cfg_database_driver))
{
try
{
$dbconnector->beginTransaction();
$res = $dbconnector->query($requete);
$dbconnector->commit();
$changedLines = $res->rowCount();
}
catch(Exception $e)
{
$dbconnector->rollback();
array_push($error_messages,'Error '.$e->getCode().': '.$e->getMessage());
}
}
else
{
$envoi_requete = mysql_query($requete,$dbconnector);
if($envoi_requete)
{
$changedLines = mysql_affected_rows();
}
}
return $changedLines;
}
function maddb_select($requete)
{
global $dbconnector,$cfg_database_driver;
$result = array();
if(extension_loaded('pdo_'.$cfg_database_driver))
{
$prepared = $dbconnector->prepare($requete);
$prepared->execute();
if ($row = $prepared->fetch(PDO::FETCH_BOTH))
$result = $row;
$prepared->closeCursor();
}
else
{
$result_requete=mysql_query($requete,$dbconnector);
if($result_requete)
{
$result = mysql_fetch_array($result_requete, MYSQL_BOTH);
if(!$result) $result = array();
mysql_free_result($result_requete);
}
}
return $result;
}
function maddb_selectAll($requete)
{
global $dbconnector,$cfg_database_driver;
$results = array();
if(extension_loaded('pdo_'.$cfg_database_driver))
{
$prepared = $dbconnector->prepare($requete);
$prepared->execute();
while($result = $prepared->fetch(PDO::FETCH_BOTH))
{
array_push($results,$result);
}
$prepared->closeCursor();
}
else
{
$result_requete=mysql_query($requete,$dbconnector);
if($result_requete)
{
while($result = mysql_fetch_array($result_requete, MYSQL_BOTH))
{
array_push($results,$result);
}
mysql_free_result($result_requete);
}
}
return $results;
}
function maddb_transaction($requete)
{
global $dbconnector,$cfg_database_driver, $error_messages;
$isOK = true;
$changedLines = 0;
if(extension_loaded('pdo_'.$cfg_database_driver))
{
try
{
$dbconnector->beginTransaction();
for($i=0;$i<sizeOf($requete);$i++)
{
$res = $dbconnector->query($requete[$i]);
if($res) $changedLines .= $res->rowCount();
}
$dbconnector->commit();
}
catch(Exception $e)
{
$dbconnector->rollback();
array_push($error_messages,'Error '.$e->getCode().': '.$e->getMessage());
$changedLines = -1;
}
}
else
{
for($i=0;$i<sizeOf($requete);$i++)
{
if($isOK)
{
$envoi_requete = mysql_query($requete[$i],$dbconnector);
if(!$envoi_requete)
{
$isOK = false;
$changedLines = -1;
}
else $changedLines .= mysql_affected_rows();
}
}
}
return $changedLines;
}
function delete_issue($id_series,$issue)
{
global $cfg_table_prefix;
$resultOK = true;
$myIssueRequetes = array();
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."forsale WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."search WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."possess WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."issue_links WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."issue_comments WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."issue_variantcovers WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."works WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."stories WHERE id_series='".$id_series."' AND issue='".$issue."'");
array_push($myIssueRequetes,"DELETE FROM ".$cfg_table_prefix."issues WHERE id_series='".$id_series."' AND issue='".$issue."'");
$changedLinesSeries = maddb_transaction($myIssueRequetes);
if($changedLinesSeries == -1) $resultOK = false;
if($resultOK)
{
if ($dh = opendir(PREVIEWCOVER))
{
while (($file = readdir($dh)) !== false)
if ((preg_match("/^".$id_series."_".$issue."_(.+)$/", $file, $regs))||(preg_match("/^".$id_series."_".$issue."\.jpg$/", $file, $regs2)))
unlink(PREVIEWCOVER.$file);
}
closedir($dh);
if ($dh2 = opendir(COVER))
{
while (($file = readdir($dh2)) !== false)
if ((preg_match("/^".$id_series."_".$issue."_(.+)$/", $file, $regs))||(preg_match("/^".$id_series."_".$issue."\.jpg$/", $file, $regs2)))
unlink(COVER.$file);
}
closedir($dh2);
}
return $resultOK;
}
function move_issue($old_series,$old_issue,$new_series,$new_issue)
{
global $cfg_table_prefix;
$resultOK = true;
$myIssueRequetes = array();
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."forsale SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND id_user NOT IN (SELECT id_user FROM (SELECT * FROM ".$cfg_table_prefix."forsale WHERE id_series='".$old_issue."' AND issue='".$old_issue."') AS A);");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."possess SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND id_user NOT IN (SELECT id_user FROM (SELECT * FROM ".$cfg_table_prefix."possess WHERE id_series='".$old_issue."' AND issue='".$old_issue."') AS B);");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."search SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND id_user NOT IN (SELECT id_user FROM (SELECT * FROM ".$cfg_table_prefix."search WHERE id_series='".$old_issue."' AND issue='".$old_issue."') AS C);");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."issue_comments SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."';");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."issue_links SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."';");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."issue_variantcovers SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."';");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."stories SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND id_story NOT IN (SELECT id_story FROM (SELECT * FROM ".$cfg_table_prefix."stories WHERE id_series='".$old_series."' AND issue='".$old_issue."') AS D);");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."works SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND id_story NOT IN (SELECT id_story FROM (SELECT * FROM ".$cfg_table_prefix."works WHERE id_series='".$old_series."' AND issue='".$old_issue."') AS E);");
array_push($myIssueRequetes,"UPDATE ".$cfg_table_prefix."issues SET id_series='".$new_series."', issue='".addslashes($new_issue)."' WHERE id_series='".$old_series."' AND issue='".$old_issue."' AND issue NOT IN (SELECT issue FROM (SELECT * FROM ".$cfg_table_prefix."issues WHERE id_series='".$new_series."' AND issue='".$new_issue."') AS F);");
$changedLines = maddb_transaction($myIssueRequetes);
if($changedLines == -1) $resultOK = false;
if($resultOK) $resultOK = delete_issue($old_series,$old_issue);
if($resultOK)
{
if ($dh = opendir(COVER))
{
while (($coverfile = readdir($dh)) !== false)
{
$cover_reg_results = array();
if (preg_match('/^('.$old_series.')_('.$old_issue.')\.jpg/', $coverfile, $cover_reg_results))
{
rename(COVER.$coverfile, COVER.$new_series."_".$new_issue.".jpg");
}
if (preg_match('/^('.$old_series.')_('.$old_issue.')_(.*)/', $coverfile, $cover_reg_results))
{
rename(COVER.$coverfile, COVER.$new_series."_".$new_issue."_".$cover_reg_results[3]);
}
}
}
closedir($dh);
if ($dh2 = opendir(PREVIEWCOVER))
{
while (($previewcoverfile = readdir($dh2)) !== false)
{
$previewcover_reg_results = array();
if (preg_match('/^('.$old_series.')_('.$old_issue.')\.jpg/', $previewcoverfile, $previewcover_reg_results))
{
rename(PREVIEWCOVER.$previewcoverfile, PREVIEWCOVER.$new_series."_".$new_issue.".jpg");
}
if (preg_match('/^('.$old_series.')_('.$old_issue.')_(.*)/', $previewcoverfile, $previewcover_reg_results))
{
rename(PREVIEWCOVER.$previewcoverfile, PREVIEWCOVER.$new_series."_".$new_issue."_".$previewcover_reg_results[3]);
}
}
}
closedir($dh2);
}
return $resultOK;
}
?>