"if(P.STATUS='S','".$DB->ForSql(GetMessage("POST_STATUS_SENT"))."', if(P.STATUS='P','".$DB->ForSql(GetMessage("POST_STATUS_PART"))."', if(P.STATUS='E','".$DB->ForSql(GetMessage("POST_STATUS_ERROR"))."', if(P.STATUS='W','".$DB->ForSql(GetMessage("POST_STATUS_WAIT"))."', '".$DB->ForSql(GetMessage("POST_STATUS_DRAFT"))."'))))", "ID" => "P.ID", "STATUS" => "P.STATUS", "FROM_FIELD" => "P.FROM_FIELD", "TO_FIELD" => "P.TO_FIELD", "EMAIL_FILTER" => "P.EMAIL_FILTER", "SUBJECT" => "P.SUBJECT", "BODY_TYPE" => "P.BODY_TYPE", "DIRECT_SEND" => "P.DIRECT_SEND", "CHARSET" => "P.CHARSET", "MSG_CHARSET" => "P.MSG_CHARSET", "SUBSCR_FORMAT" => "P.SUBSCR_FORMAT", "TIMESTAMP_X" => $DB->DateToCharFunction("P.TIMESTAMP_X"), "DATE_SENT" => $DB->DateToCharFunction("P.DATE_SENT"), ); } $this->LAST_ERROR = ""; $arSqlSearch = Array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach($arFilter as $key=>$val) { if (!is_array($val) && ((string)$val == '' || $val=="NOT_REF")) continue; switch(strtoupper($key)) { case "MSG_CHARSET": $arSqlSearch[] = "P.MSG_CHARSET = '".$DB->ForSql($val)."'"; break; case "ID": $arSqlSearch[] = GetFilterQuery("P.ID", $val, "N"); break; case "TIMESTAMP_1": if($DB->IsDate($val)) { $arSqlSearch[] = "P.TIMESTAMP_X>=".$DB->CharToDateFunction($val, "SHORT"); } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_TIMESTAMP_FROM")."
"; } break; case "TIMESTAMP_2": if($DB->IsDate($val)) { $arSqlSearch[] = "P.TIMESTAMP_XCharToDateFunction($val, "SHORT").",INTERVAL 1 DAY)"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_TIMESTAMP_TILL")."
"; } break; case "DATE_SENT_1": if($DB->IsDate($val)) { $arSqlSearch[] = "P.DATE_SENT>=".$DB->CharToDateFunction($val, "SHORT"); } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_DATE_SENT_FROM")."
"; } break; case "DATE_SENT_2": if($DB->IsDate($val)) { $arSqlSearch[] = "P.DATE_SENTCharToDateFunction($val, "SHORT").",INTERVAL 1 DAY)"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_DATE_SENT_TILL")."
"; } break; case "STATUS": $arSqlSearch[] = GetFilterQuery(array("P.STATUS", $arSelectFields["STATUS_TITLE"]), $val, "Y", array(), "N", "N"); break; case "STATUS_ID": $arSqlSearch[] = GetFilterQuery("P.STATUS", $val, "N"); break; case "SUBJECT": $arSqlSearch[] = GetFilterQuery("P.SUBJECT", $val); break; case "FROM": $arSqlSearch[] = GetFilterQuery("P.FROM_FIELD", $val, "Y", array("@", "_", ".")); break; case "TO": $r = GetFilterQuery("PE.EMAIL", $val, "Y", array("@", "_", ".")); if($r <> '') { $arSqlSearch[] = "EXISTS (SELECT * FROM b_posting_email PE WHERE PE.POSTING_ID=P.ID AND PE.STATUS='N' AND ".$r.")"; } break; case "BODY_TYPE": $arSqlSearch[] = ($val == "html")? "P.BODY_TYPE='html'" : "P.BODY_TYPE='text'"; break; case "RUB_ID": if(is_array($val) && count($val) > 0) { $rub_id = array(); foreach($val as $i => $v) { $v = intval($v); if($v > 0) { $rub_id[$v] = $v; } } if(count($rub_id)) { $arSqlSearch[] = "EXISTS (SELECT * from b_posting_rubric PR WHERE PR.POSTING_ID = P.ID AND PR.LIST_RUBRIC_ID in (".implode(", ", $rub_id)."))"; } } break; case "BODY": $arSqlSearch[] = GetFilterQuery("P.BODY", $val); break; case "AUTO_SEND_TIME_1": if($DB->IsDate($val, false, false, "FULL")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME>=".$DB->CharToDateFunction($val, "FULL")." )"; } elseif($DB->IsDate($val, false, false, "SHORT")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME>=".$DB->CharToDateFunction($val, "SHORT")." )"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_AUTO_FROM")."
"; } break; case "AUTO_SEND_TIME_2": if($DB->IsDate($val, false, false, "FULL")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME<=".$DB->CharToDateFunction($val, "FULL")." )"; } elseif($DB->IsDate($val, false, false, "SHORT")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME<=".$DB->CharToDateFunction($val, "SHORT")." )"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_AUTO_TILL")."
"; } break; } } } $arOrder = array(); foreach($aSort as $key => $ord) { $key = mb_strtoupper($key); $ord = (mb_strtoupper($ord) <> "ASC"? "DESC": "ASC"); switch($key) { case "ID": $arOrder[$key] = "P.ID ".$ord; break; case "TIMESTAMP": $arOrder[$key] = "P.TIMESTAMP_X ".$ord; break; case "SUBJECT": $arOrder[$key] = "P.SUBJECT ".$ord; break; case "BODY_TYPE": $arOrder[$key] = "P.BODY_TYPE ".$ord; break; case "STATUS": $arOrder[$key] = "P.STATUS ".$ord; break; case "DATE_SENT": $arOrder[$key] = "P.DATE_SENT ".$ord; break; case "AUTO_SEND_TIME": $arOrder[$key] = "P.AUTO_SEND_TIME ".$ord; break; case "FROM_FIELD": $arOrder[$key] = "P.FROM_FIELD ".$ord; break; case "TO_FIELD": $arOrder[$key] = "P.TO_FIELD ".$ord; break; } } if(count($arOrder) <= 0) { $arOrder["ID"] = "P.ID DESC"; } $strSqlOrder = " ORDER BY ".implode(", ", $arOrder); if (!is_array($arSelect) || empty($arSelect)) { $arSelect = array_keys($arSelectFields); } $arSqlSelect = array(); foreach ($arSelect as $selectField) { if (isset($arSelectFields[$selectField])) { $arSqlSelect[$selectField] = $arSelectFields[$selectField]." as ".$selectField; } } if (!$arSqlSelect) { $arSqlSelect["ID"] = $arSelectFields["ID"]." as ID"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = " SELECT ".implode(", ", $arSqlSelect)." FROM b_posting P WHERE ".$strSqlSearch." ".$strSqlOrder; if (is_array($arNavStartParams)) { $nTopCount = (isset($arNavStartParams['nTopCount']) ? (int)$arNavStartParams['nTopCount'] : 0); if ($nTopCount > 0) { $res = $DB->Query($DB->TopSql( $strSql, $nTopCount )); } else { $res_cnt = $DB->Query(" SELECT COUNT(P.ID) as C FROM b_posting P WHERE ".$strSqlSearch." "); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $res->NavQuery($strSql, $res_cnt["C"], $arNavStartParams); } } else { $res = $DB->Query($strSql); } $res->is_filtered = (IsFiltered($strSqlSearch)); return $res; } public static function Lock($ID=0) { global $DB, $APPLICATION; $ID = intval($ID); $uniq = $APPLICATION->GetServerUniqID(); $db_lock = $DB->Query("SELECT GET_LOCK('".$uniq."_post_".$ID."', 0) as L", false, "File: ".__FILE__."
Line: ".__LINE__); $ar_lock = $db_lock->Fetch(); if($ar_lock["L"]=="1") return true; else return false; } public static function UnLock($ID=0) { global $DB; $ID = intval($ID); $uniq = COption::GetOptionString("main", "server_uniq_id", ""); if($uniq <> '') { $db_lock = $DB->Query("SELECT RELEASE_LOCK('".$uniq."_post_".$ID."') as L", false, "File: ".__FILE__."
Line: ".__LINE__); $ar_lock = $db_lock->Fetch(); if($ar_lock["L"]=="0") return false; else return true; } } } ?>