upgrade on mysqlmanager

This commit is contained in:
2015-05-25 19:53:01 +02:00
parent 49a500fafb
commit 2347a08f1f
4 changed files with 126 additions and 82 deletions

View File

@@ -3,6 +3,7 @@
/** /**
* Manage includes * Manage includes
* @author franzz * @author franzz
* @version 1.0
*/ */
class ClassManagement extends PhpObject class ClassManagement extends PhpObject
{ {
@@ -15,7 +16,7 @@ class ClassManagement extends PhpObject
function __construct($sMainClass) function __construct($sMainClass)
{ {
parent::__construct(); parent::__construct(__CLASS__, true);
$this->asIncFiles = array(); $this->asIncFiles = array();
//try to include default files //try to include default files
@@ -61,9 +62,9 @@ class ClassManagement extends PhpObject
} }
/** /**
* PhpObject *
* @author franzz * @author franzz
* @version 1.0 * @version 1.0a
*/ */
class PhpObject class PhpObject
{ {
@@ -85,13 +86,25 @@ class PhpObject
//Class variables //Class variables
private $asMessageStack; private $asMessageStack;
private $iExtractMode; private $iExtractMode;
protected $bDebug; private $sChildClass;
private $bDebug;
function __construct($iExtractMode=self::MODE_FILE) function __construct($sClass='', $bDebug=false, $iExtractMode=self::MODE_FILE)
{ {
$this->resetMessageStack(); $this->resetMessageStack();
$this->setDebug($bDebug);
$this->iExtractMode = $iExtractMode; $this->iExtractMode = $iExtractMode;
$this->bDebug = false; $this->sChildClass = $sClass;
}
public function setDebug($bDebug)
{
$this->bDebug = $bDebug;
}
public function getDebug()
{
return $this->bDebug;
} }
private static function getLogPath() private static function getLogPath()
@@ -141,6 +154,28 @@ class PhpObject
return $this->glueMessages($asMessages); return $this->glueMessages($asMessages);
} }
protected function cleanMessageStack()
{
$sErrorStack = $this->getCleanMessageStack($this->getDebug()?self::ALL_TAB:self::ERROR_TAB);
if($sErrorStack!='')
{
switch($this->iExtractMode)
{
case self::MODE_TEXT:
echo $sErrorStack;
break;
case self::MODE_HTML:
echo $sErrorStack;
break;
case self::MODE_ARRAY:
break;
case self::MODE_FILE:
@file_put_contents(self::getLogPath(), "\n\n".$this->sChildClass.' - '.date('r')."\n".$sErrorStack, FILE_APPEND);
break;
}
}
}
protected function getCleanMessageStacks($aoExtsources, $sType=self::ALL_TAB) protected function getCleanMessageStacks($aoExtsources, $sType=self::ALL_TAB)
{ {
$aoExtsources[] = $this; $aoExtsources[] = $this;
@@ -202,24 +237,7 @@ class PhpObject
function __destruct() function __destruct()
{ {
$sErrorStack = $this->getCleanMessageStack($this->bDebug?self::ALL_TAB:self::ERROR_TAB); $this->cleanMessageStack();
if($sErrorStack!='')
{
switch($this->iExtractMode)
{
case self::MODE_TEXT:
echo $sErrorStack;
break;
case self::MODE_HTML:
echo $sErrorStack;
break;
case self::MODE_ARRAY:
break;
case self::MODE_FILE:
@file_put_contents(self::getLogPath(), "\n\n".date('r')."\n".$sErrorStack, FILE_APPEND);
break;
}
}
} }
} }

View File

@@ -13,7 +13,6 @@ class MySqlManager extends PhpObject
public $sDbState; public $sDbState;
private $bTrace; private $bTrace;
private $asOptions;
/** /**
* SQL connection Handle * SQL connection Handle
@@ -21,19 +20,15 @@ class MySqlManager extends PhpObject
*/ */
private $oConnection; private $oConnection;
private $sDatabase; private $sDatabase;
private $asOptions;
/** /**
* Constructor MySqlManager * Tables & fields descriptions
* @param String $sDbServer * array( 'tables'=>array('table_name1'=>array('table_field1', 'table_field2', ...), 'table_name2'=>array(...)),
* @param String $sLogin
* @param String $sPass
* @param String $sDatabase
* @param Array $asOptions
* array( 'tables'=>array('table_name1'=>array('table_field1', 'table_field2', ...), 'table_name2'=>array(...)),
* 'types'=>array('field1'=>'field_type1', 'field2'=>'field_type2', ...) * 'types'=>array('field1'=>'field_type1', 'field2'=>'field_type2', ...)
* 'constraints'=>array('table_name1'=>'table_contraint1', 'table_name2'=>'table_contraint2', ...), * 'constraints'=>array('table_name1'=>'table_contraint1', 'table_name2'=>'table_contraint2', ...),
* 'cascading_delete'=>array('table_name1'=>array('linked_table1', 'linked_table2', ...), 'table_name2'=>...)) * 'cascading_delete'=>array('table_name1'=>array('linked_table1', 'linked_table2', ...), 'table_name2'=>...))
* @param string $sEncoding * @var Array
*/ */
public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $asOptions, $sEncoding='utf8mb4') public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $asOptions, $sEncoding='utf8mb4')
{ {
@@ -51,16 +46,13 @@ class MySqlManager extends PhpObject
*/ */
$this->setTrace(false); $this->setTrace(false);
//if(!$this->oConnection)
if($this->oConnection->connect_error) if($this->oConnection->connect_error)
{ {
//$this->addError('bug connection');
$this->addError('bug connection : '.$this->oConnection->connect_error); $this->addError('bug connection : '.$this->oConnection->connect_error);
$this->sDbState = self::DB_NO_CONN; $this->sDbState = self::DB_NO_CONN;
} }
else else
{ {
//if(!mysql_select_db($this->sDatabase, $this->oConnection))
if(!$this->oConnection->select_db($this->sDatabase)) if(!$this->oConnection->select_db($this->sDatabase))
{ {
$this->addError('bug selecting database. Installing...'); $this->addError('bug selecting database. Installing...');
@@ -88,31 +80,22 @@ class MySqlManager extends PhpObject
public function __destruct() public function __destruct()
{ {
parent::__destruct(); parent::__destruct();
//mysql_close($this->oConnection);
$this->oConnection->close(); $this->oConnection->close();
} }
public function setTrace($bAction) public function setTrace($bTrace)
{ {
$this->bTrace = $bAction; $this->bTrace = $bTrace;
if($bTrace) $this->setDebug(true);
}
public function getTrace()
{
return $this->bTrace;
} }
public function getTables() public function getTables()
{ {
/*
$oReflect = new ReflectionClass(__CLASS__);
$asConstants = $oReflect->getConstants();
$sTableTag = '_TABLE';
$asTables = array();
foreach($asConstants as $sConstant=>$sConstantValue)
{
if(mb_strpos($sConstant, $sTableTag)!==false && mb_strpos($sConstant, $sTableTag)==(mb_strlen($sConstant) - mb_strlen($sTableTag)))
{
$asTables[] = $sConstantValue;
}
}
return $asTables;
*/
return array_keys($this->asOptions['tables']); return array_keys($this->asOptions['tables']);
} }
@@ -121,7 +104,6 @@ class MySqlManager extends PhpObject
//Create Database //Create Database
$this->setQuery("DROP DATABASE IF EXISTS ".$this->sDatabase); $this->setQuery("DROP DATABASE IF EXISTS ".$this->sDatabase);
$this->setQuery("CREATE DATABASE ".$this->sDatabase." DEFAULT CHARACTER SET ".Settings::DB_ENC." DEFAULT COLLATE ".Settings::DB_ENC."_general_ci"); $this->setQuery("CREATE DATABASE ".$this->sDatabase." DEFAULT CHARACTER SET ".Settings::DB_ENC." DEFAULT COLLATE ".Settings::DB_ENC."_general_ci");
//mysql_select_db($this->sDatabase, $this->oConnection);
$this->oConnection->select_db($this->sDatabase); $this->oConnection->select_db($this->sDatabase);
//Create tables //Create tables
@@ -171,31 +153,25 @@ class MySqlManager extends PhpObject
private function setQuery($sQuery, $sTypeQuery=__FUNCTION__) private function setQuery($sQuery, $sTypeQuery=__FUNCTION__)
{ {
$this->getQuery($sQuery, $sTypeQuery); $this->getQuery($sQuery, $sTypeQuery);
//return (mysql_affected_rows()!=0);
return ($this->oConnection->affected_rows!=0); return ($this->oConnection->affected_rows!=0);
} }
private function getQuery($sQuery, $sTypeQuery=__FUNCTION__) private function getQuery($sQuery, $sTypeQuery=__FUNCTION__)
{ {
$sQuery = str_replace(array("\n", "\t"), array(" ", ""), $sQuery); $sQuery = str_replace(array("\n", "\t"), array(" ", ""), $sQuery);
//$oResult = mysql_query($sQuery, $this->oConnection);
if($this->bTrace) if($this->getTrace()) $this->addNotice($sQuery);
{
$this->setDebug(true);
$this->addNotice($sQuery);
}
if(!($oResult = $this->oConnection->query($sQuery))) if(!($oResult = $this->oConnection->query($sQuery)))
{ {
$this->addError("\nErreur SQL : \n".str_replace("\t", "", $sQuery)."\n\n".str_replace(array("\t", "\n"), "", $this->oConnection->error)); $this->addError("\nErreur SQL : \n".str_replace("\t", "", $sQuery)."\n\n".str_replace(array("\t", "\n"), "", $this->getLastError()));
} }
return $oResult; return $oResult;
} }
public function getLastError() public function getLastError()
{ {
return $this->oConnection->error;
} }
public function getArrayQuery($sQuery, $bStringOnly=false, $sGroupBy='', $sTypeQuery=__FUNCTION__) public function getArrayQuery($sQuery, $bStringOnly=false, $sGroupBy='', $sTypeQuery=__FUNCTION__)
@@ -206,7 +182,6 @@ class MySqlManager extends PhpObject
$oResult = $this->getQuery($sQuery, true, $sTypeQuery); $oResult = $this->getQuery($sQuery, true, $sTypeQuery);
if($oResult!==false) if($oResult!==false)
{ {
//while($asCurrentRow = mysql_fetch_array($oResult))
while($asCurrentRow = $oResult->fetch_array()) while($asCurrentRow = $oResult->fetch_array())
{ {
if($bStringOnly) $asCurrentRow = $this->arrayKeyFilter($asCurrentRow, 'is_string'); if($bStringOnly) $asCurrentRow = $this->arrayKeyFilter($asCurrentRow, 'is_string');
@@ -445,6 +420,23 @@ class MySqlManager extends PhpObject
} }
} }
public function emptyTable($sTableName)
{
$this->cleanSql($sTableName);
return $this->setQuery("TRUNCATE ".$sTableName);
}
public function selectList($sTableName, $sColumnName='', $asConstraints=array())
{
$sColumnName = $sColumnName==''?self::getText($sTableName):$sColumnName;
$sIdColumnName = self::getId($sTableName);
return $this->selectRows( array( 'select' => array($sIdColumnName, $sColumnName),
'from' => $sTableName,
'constraint'=> $asConstraints),
true,
$sIdColumnName);
}
public function selectRows($asInfo, $bStringOnly=true, $sGroupBy='') public function selectRows($asInfo, $bStringOnly=true, $sGroupBy='')
{ {
$asAttributes = array('select'=>"SELECT", 'from'=>"FROM", 'join'=>"LEFT JOIN", 'joinOn'=>"LEFT JOIN", 'constraint'=>"WHERE", 'groupBy'=>"GROUP BY", 'orderBy'=>"ORDER BY", 'limit'=>'LIMIT'); $asAttributes = array('select'=>"SELECT", 'from'=>"FROM", 'join'=>"LEFT JOIN", 'joinOn'=>"LEFT JOIN", 'constraint'=>"WHERE", 'groupBy'=>"GROUP BY", 'orderBy'=>"ORDER BY", 'limit'=>'LIMIT');
@@ -452,7 +444,6 @@ class MySqlManager extends PhpObject
$asOperators = array('constraint'=>" = ", 'orderBy'=>" ", 'join'=>" USING(", 'joinOn'=>" ON "); $asOperators = array('constraint'=>" = ", 'orderBy'=>" ", 'join'=>" USING(", 'joinOn'=>" ON ");
$asEndOfStatement = array('constraint'=>"", 'orderBy'=>"", 'join'=>")", 'joinOn'=>""); $asEndOfStatement = array('constraint'=>"", 'orderBy'=>"", 'join'=>")", 'joinOn'=>"");
//$sQuery = "/* ".str_replace(array("\n", "\t"), '', print_r($asInfo, true))." */";
$sQuery = ""; $sQuery = "";
foreach($asAttributes as $sStatement => $sKeyWord) foreach($asAttributes as $sStatement => $sKeyWord)
{ {
@@ -482,6 +473,15 @@ class MySqlManager extends PhpObject
{ {
$asOperators[$sStatement] = $asInfo['constOpe']; $asOperators[$sStatement] = $asInfo['constOpe'];
} }
elseif($sStatement=='joinOn')
{
$asSimplifiedSelection = array();
foreach($asSelection as $sTable => $asJoinFields)
{
$asSimplifiedSelection[$sTable] = $this->implodeAll($asJoinFields, " = ", " AND ", $sTable.".", ".[/KEY\]");
}
$asSelection = $asSimplifiedSelection;
}
$sQuery .= $this->implodeAll($asSelection, $asOperators[$sStatement], $asRowSeparators[$sStatement], "", $asEndOfStatement[$sStatement]); $sQuery .= $this->implodeAll($asSelection, $asOperators[$sStatement], $asRowSeparators[$sStatement], "", $asEndOfStatement[$sStatement]);
} }
else else
@@ -500,7 +500,7 @@ class MySqlManager extends PhpObject
private function addColumnSelectors(&$asSelection) private function addColumnSelectors(&$asSelection)
{ {
//TODO get rid of this //FIXME get rid of this
$sSqlWord = 'option'; $sSqlWord = 'option';
$sKey = array_search($sSqlWord, $asSelection); $sKey = array_search($sSqlWord, $asSelection);
if($sKey!==false) if($sKey!==false)
@@ -516,21 +516,22 @@ class MySqlManager extends PhpObject
public function selectRow($sTableName, $asConstraints=array(), $sColumnName='*') public function selectRow($sTableName, $asConstraints=array(), $sColumnName='*')
{ {
if(!is_array($asConstraints)) //Table ID directly
{ if(!is_array($asConstraints)) $asConstraints = array($this->getId($sTableName)=>$asConstraints);
$asConstraints = array($this->getId($sTableName)=>$asConstraints);
} $asRows = $this->selectRows(array('select'=>$sColumnName, 'from'=>$sTableName, 'constraint'=>$asConstraints));
$asResult = $this->selectRows(array('select'=>$sColumnName, 'from'=>$sTableName, 'constraint'=>$asConstraints)); $iCountNb = count($asRows);
$iCountNb = count($asResult);
switch($iCountNb) switch($iCountNb)
{ {
case 0 : case 0 :
return false; $asResult = array();
break;
case $iCountNb > 1 : case $iCountNb > 1 :
$this->addError('Trop de résultats pour un selectRow() : '.$iCountNb.' lignes. Table: '.$sTableName.', contrainte: '.self::implodeAll($asConstraints, '=', ' ').', colonne: '.$sColumnName); $this->addError('Trop de résultats pour un selectRow() : '.$iCountNb.' lignes. Table: '.$sTableName.', contrainte: '.self::implodeAll($asConstraints, '=', ' ').', colonne: '.$sColumnName);
break; default:
$asResult = array_shift($asRows);
} }
return array_shift($asResult); return $asResult;
} }
public function selectValue($sTableName, $sColumnName, $oConstraints=array()) public function selectValue($sTableName, $sColumnName, $oConstraints=array())
@@ -539,7 +540,8 @@ class MySqlManager extends PhpObject
{ {
$oConstraints = array($this->getId($sTableName)=>$oConstraints); $oConstraints = array($this->getId($sTableName)=>$oConstraints);
} }
return $this->selectRow($sTableName, $oConstraints, $sColumnName); $oResult = $this->selectRow($sTableName, $oConstraints, $sColumnName);
return empty($oResult)?false:$oResult;
} }
public function pingValue($sTableName, $oConstraints) public function pingValue($sTableName, $oConstraints)
@@ -549,12 +551,11 @@ class MySqlManager extends PhpObject
public function cleanSql(&$oData) public function cleanSql(&$oData)
{ {
//self::cleanData($oData, 'mysql_real_escape_string');
//$oData = self::cleanData($oData, 'mysql_real_escape_string');
$this->cleanData($oData); $this->cleanData($oData);
$oData = $this->cleanData($oData); $oData = $this->cleanData($oData);
} }
//TODO déplacer dans ToolBox::implodeAll
public static function implodeAll($asText, $asKeyValueSeparator='', $sRowSeparator='', $sKeyPre='', $sValuePost=false) public static function implodeAll($asText, $asKeyValueSeparator='', $sRowSeparator='', $sKeyPre='', $sValuePost=false)
{ {
if($sValuePost===false) if($sValuePost===false)
@@ -569,9 +570,14 @@ class MySqlManager extends PhpObject
$asKeyValueSeparator = array_combine(array_keys($asText), array_fill(0, count($asText), $asKeyValueSeparator)); $asKeyValueSeparator = array_combine(array_keys($asText), array_fill(0, count($asText), $asKeyValueSeparator));
} }
$asFrom = array('[/KEY\]', '[/VALUE\]');
foreach($asText as $sKey=>$sValue) foreach($asText as $sKey=>$sValue)
{ {
$asCombinedText[] = $sKeyPre.$sKey.$asKeyValueSeparator[$sKey].(is_array($sValue)?implode($sValue):$sValue).$sValuePost; $asTo = array($sKey, $sValue);
$sRepKeyPre = str_replace($asFrom, $asTo, $sKeyPre);
$asRepKeyValueSeparator = str_replace($asFrom, $asTo, $asKeyValueSeparator[$sKey]);
$sRepValuePost = str_replace($asFrom, $asTo, $sValuePost);
$asCombinedText[] = $sRepKeyPre.$sKey.$asRepKeyValueSeparator.(is_array($sValue)?implode($sValue):$sValue).$sRepValuePost;
} }
return implode($sRowSeparator, $asCombinedText); return implode($sRowSeparator, $asCombinedText);
} }

View File

@@ -4,7 +4,7 @@
//Start buffering //Start buffering
ob_start(); ob_start();
require_once 'config.php'; require_once 'class_management.php';
$oClassManagement = new ClassManagement('main'); $oClassManagement = new ClassManagement('main');
ToolBox::cleanPost($_POST); ToolBox::cleanPost($_POST);
ToolBox::cleanPost($_GET); ToolBox::cleanPost($_GET);

View File

@@ -0,0 +1,20 @@
<?php
$sOutFilePath = 'logo_givaudan_48.php';
$asResult[] = '<?php';
$asResult[] = '';
foreach (glob("resize/*_48.png") as $sFileName)
{
$sImageString = base64_encode(file_get_contents($sFileName));
$asImages[] = '\''.str_replace("'", "\'", $sImageString).'\'';
}
$asResult[] = '$asImages = array('."\t".implode(', '."\n\t\t\t\t\t", $asImages).');';
$asResult[] = '';
$asResult[] = 'header(\'Content-Type: image/png\');';
$asResult[] = 'echo base64_decode($asImages[rand(0, count($asImages)-1)]);';
$asResult[] = "\n\n".'?>';
file_put_contents($sOutFilePath, implode("\n", $asResult));
chmod($sOutFilePath, 0777);
?>