| Current Path : /var/www/homesaver/www/bitrix/updates/update_m1740083790/ipol.sdek/classes/mysql/ |
| Current File : /var/www/homesaver/www/bitrix/updates/update_m1740083790/ipol.sdek/classes/mysql/sqlSdekOrders.php |
<?
class sqlSdekOrders
{
public function toLog($wat,$sign){sdekHelper::toLog($wat,$sign);}
private static $tableName = "ipol_sdek";
public static function Add($Data)
{
// = $Data = format:
// PARAMS - ALL INFO
// ORDER_ID - corresponding order
// STATUS - response from iml
// MESSAGE - info from server
// OK - 0 / 1 - was confirmed
// UPTIME - order add time
global $DB;
if(!$Data['STATUS'])
$Data['STATUS']='NEW';
if($Data['STATUS']=='NEW')
$Data['MESSAGE']='';
if(is_array($Data['PARAMS'])) {
$Data['PARAMS'] = serialize($Data['PARAMS']);
}
$Data['UPTIME']=mktime();
$rec = self::CheckRecord($Data['ORDER_ID'],$Data['SOURCE']);
if($rec)
{
$err_mess = "";
$strUpdate = $DB->PrepareUpdate(self::$tableName, $Data);
$strSql = "UPDATE ".self::$tableName." SET ".$strUpdate." WHERE ID=".$rec['ID'];
$DB->Query($strSql, false, $err_mess.__LINE__);
}
else
{
$arInsert = $DB->PrepareInsert(self::$tableName, $Data);
$strSql =
"INSERT INTO ".self::$tableName."(".$arInsert[0].") ".
"VALUES(".$arInsert[1].")";
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
return self::CheckRecord($Data['ORDER_ID'],$Data['SOURCE']);
}
public static function select($arOrder=array("ID","DESC"),$arFilter=array(),$arNavStartParams=array())
{
global $DB;
if(!$arFilter){
$arFilter = array();
}
$possFields = self::getPossFilterFields();
$_arFilter = $arFilter;
$arFilter = array();
foreach ($_arFilter as $key => $val){
$field = self::checkFilterField($key,$possFields);
if($field){
$skip = false;
switch ($possFields[$field]){
case 'int' :
if (!is_array($val))
{
$val = (int)$val;
}
else
{
foreach ($val as $vKey => $vData)
{
$val[$vKey] = (int)$vData;
}
}
break;
case 'string' :
if (!is_array($val))
{
$val = (string)$val;
if(strpos($val,'(') !== false){$skip = true;}
}
else
{
foreach ($val as $vKey => $vData)
{
$val[$vKey] = (string)$vData;
if(strpos($val[$vKey],'(') !== false){unset($val[$vKey]);}
}
if (!count($val))
{
$skip = true;
}
}
break;
}
if(!$skip) {
$arFilter[$key] = $val;
}
}
}
$strSql='';
$where='';
if(strpos($arFilter['>=UPTIME'],".")!==false)
$arFilter['>=UPTIME']=strtotime($arFilter['>=UPTIME']);
if(strpos($arFilter['<=UPTIME'],".")!==false)
$arFilter['<=UPTIME']=strtotime($arFilter['<=UPTIME']);
if(is_array($arFilter) && count($arFilter)>0)
foreach($arFilter as $field => $value)
{
if($field == 'SOURCE' && $value == 0)
$where.= ' and '.$DB->ForSql(self::getSource('order'));
else{
if(strpos($field,'!')!==false)
$where.=' and '.$DB->ForSql(substr($field,1)).' != "'.$DB->ForSql($value).'"';
elseif(strpos($field,'<=')!==false)
$where.=' and '.$DB->ForSql(substr($field,2)).' <= "'.$DB->ForSql($value).'"';
elseif(strpos($field,'>=')!==false)
$where.=' and '.$DB->ForSql(substr($field,2)).' >= "'.$DB->ForSql($value).'"';
elseif(strpos($field,'>')!==false)
$where.=' and '.$DB->ForSql(substr($field,1)).' > "'.$DB->ForSql($value).'"';
elseif(strpos($field,'<')!==false)
$where.=' and '.$DB->ForSql(substr($field,1)).' < "'.$DB->ForSql($value).'"';
else
{
if(is_array($value))
{
$where.=' and (';
foreach($value as $val)
$where.=$DB->ForSql($field).' = "'.$DB->ForSql($val).'" or ';
$where=substr($where,0,strlen($where)-4).")";
}
else
$where.=' and '.$DB->ForSql($field).' = "'.$DB->ForSql($value).'"';
}
}
}
if($where)
$strSql.="
WHERE ".substr($where,4);
if(in_array($arOrder[0],array('ID','ORDER_ID','STATUS','UPTIME'))&&($arOrder[1]=='ASC'||$arOrder[1]=='DESC'))
$strSql.="
ORDER BY ".$arOrder[0]." ".$arOrder[1];
$err_mess = "";
$cnt=$DB->Query("SELECT COUNT(*) as C FROM ".self::$tableName." ".$strSql, false, $err_mess.__LINE__)->Fetch();
if($arNavStartParams['nPageSize']==0)
$arNavStartParams['nPageSize']=$cnt['C'];
$strSql="SELECT * FROM ".self::$tableName." ".$strSql;
$res = new CDBResult();
$res->NavQuery($strSql,$cnt['C'],$arNavStartParams);
return $res;
}
public static function Delete($orderId,$mode='order'){
global $DB;
$orderId = $DB->ForSql($orderId);
$strSql =
"DELETE FROM ".self::$tableName."
WHERE ORDER_ID='".$orderId."' && ".self::getSource($mode);
$DB->Query($strSql, true);
return true;
}
public static function GetByOI($orderId){
global $DB;
$orderId=$DB->ForSql($orderId);
$strSql =
"SELECT PARAMS, STATUS, SDEK_ID, MESSAGE, OK, MESS_ID, ORDER_ID, ACCOUNT, SDEK_UID ".
"FROM ".self::$tableName." ".
"WHERE ORDER_ID = '".$orderId."' && ".self::getSource('order');
$res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if($arr = $res->Fetch())
return $arr;
else return false;
}
public static function GetBySI($shipmentId){
global $DB;
$shipmentId=$DB->ForSql($shipmentId);
$strSql =
"SELECT PARAMS, STATUS, SDEK_ID, MESSAGE, OK, MESS_ID, ORDER_ID, ACCOUNT, SDEK_UID ".
"FROM ".self::$tableName." ".
"WHERE ORDER_ID = '".$shipmentId."' && ".self::getSource('shipment');
$res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if($arr = $res->Fetch())
return $arr;
else return false;
}
public static function GetByUId($uid){
global $DB;
$strSql =
"SELECT PARAMS, STATUS, SDEK_ID, MESSAGE, OK, MESS_ID, ORDER_ID, ACCOUNT, SDEK_UID ".
"FROM ".self::$tableName." ".
"WHERE SDEK_UID = '".$uid."'";
$res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if($arr = $res->Fetch())
return $arr;
else return false;
}
public static function CheckRecord($orderId,$mode=0){
global $DB;
$source = (is_numeric($mode)) ? "SOURCE = '".$mode."'" : self::getSource($mode);
$orderId = $DB->ForSql($orderId);
$strSql =
"SELECT ID, STATUS ".
"FROM ".self::$tableName." ".
"WHERE ORDER_ID = '".$orderId."' && ".$source;
$res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if($res && $arr = $res->Fetch())
return $arr;
return false;
}
public static function updateStatus($arParams){
global $DB;
foreach($arParams as $key => $val)
$arParams[$key] = $DB->ForSql($val);
$okStat='';
if($arParams["STATUS"]=='OK')
$okStat=" OK='1',";
elseif($arParams["STATUS"]=='DELETE')
$okStat=" OK='',";
$setStr = "STATUS ='".$arParams["STATUS"]."', MESSAGE = '".$arParams["MESSAGE"]."',";
if($arParams["SDEK_ID"])
$setStr.="SDEK_ID = '".$arParams["SDEK_ID"]."',";
if($arParams["MESS_ID"])
$setStr.="MESS_ID = '".$arParams["MESS_ID"]."',";
if($arParams["ACCOUNT"])
$setStr.="ACCOUNT = '".$arParams["ACCOUNT"]."',";
$setStr.=$okStat." UPTIME= '".mktime()."'";
if(array_key_exists('SOURCE',$arParams) && $arParams['SOURCE'])
$source = "SOURCE = '".$arParams['SOURCE']."'";
elseif(array_key_exists('SOURCE',$arParams) && $arParams['SOURCE'] === '')
$source = "SOURCE <=> NULL";
elseif(array_key_exists('mode',$arParams))
$source = self::getSource($arParams['mode']);
else
$source = "SOURCE = 0";
$strSql =
"UPDATE ".self::$tableName."
SET ".$setStr."
WHERE ORDER_ID = '".$arParams["ORDER_ID"]."' && $source";
if($DB->Query($strSql, true))
return true;
else
return false;
}
private static function getSource($mode='order'){
return ($mode == 'order' || $mode == '') ? '(SOURCE <=> NULL || SOURCE = 0)' : "SOURCE = '1'";
}
protected static function getPossFilterFields()
{
return array("ID" => 'int',"MESS_ID" => 'int',"PARAMS" => 'text',"ORDER_ID"=>'int',"SOURCE"=>'int',"SDEK_ID"=>'int',"STATUS"=>'string',"MESSAGE"=> 'text',"ACCOUNT"=>'int',"OK"=>'string',"UPTIME"=>'string','SDEK_UID'=>'string');
}
protected static function checkFilterField($field,$filterFields)
{
$arKeys = array_keys($filterFields);
foreach($arKeys as $_field){
if(strpos($field,$_field) !== false){
return $_field;
}
}
return false;
}
}
?>