$val) { if($val == '') continue; $key = mb_strtoupper($key); switch($key) { case "ID": case "ACTIVE": case "VISIBLE": case "LID": case "AUTO": case "CODE": $arFilter[] = "R.".$key." = '".$DB->ForSql($val)."'"; break; case "NAME": $arFilter[] = "R.NAME like '%".$DB->ForSql($val)."%'"; break; } } $arOrder = array(); foreach($aSort as $key=>$val) { $ord = (mb_strtoupper($val) <> "ASC"? "DESC": "ASC"); $key = mb_strtoupper($key); switch($key) { case "ID": case "NAME": case "SORT": case "LAST_EXECUTED": case "VISIBLE": case "LID": case "AUTO": case "CODE": $arOrder[] = "R.".$key." ".$ord; break; case "ACT": $arOrder[] = "R.ACTIVE ".$ord; break; } } if(count($arOrder) == 0) $arOrder[] = "R.ID DESC"; $sOrder = "\nORDER BY ".implode(", ",$arOrder); if(count($arFilter) == 0) $sFilter = ""; else $sFilter = "\nWHERE ".implode("\nAND ", $arFilter); $strSql = " SELECT R.ID ,R.NAME ,R.CODE ,R.SORT ,R.LID ,R.ACTIVE ,R.DESCRIPTION ,R.AUTO ,R.VISIBLE ,".$DB->DateToCharFunction("R.LAST_EXECUTED", "FULL")." AS LAST_EXECUTED ,R.FROM_FIELD ,R.DAYS_OF_MONTH ,R.DAYS_OF_WEEK ,R.TIMES_OF_DAY ,R.TEMPLATE FROM b_list_rubric R ".$sFilter.$sOrder; return $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } //Get by ID public static function GetByID($ID) { global $DB; $ID = intval($ID); $strSql = " SELECT R.* ,".$DB->DateToCharFunction("R.LAST_EXECUTED", "FULL")." AS LAST_EXECUTED FROM b_list_rubric R WHERE R.ID = ".$ID." "; return $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } //Count of subscribers public static function GetSubscriptionCount($ID) { global $DB; $ID = intval($ID); $strSql = " SELECT COUNT('x') AS CNT FROM b_subscription_rubric SR WHERE SR.LIST_RUBRIC_ID = ".$ID." "; $res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); if($res_arr = $res->Fetch()) return intval($res_arr["CNT"]); else return 0; } // delete public static function Delete($ID) { global $DB; $ID = intval($ID); $DB->StartTransaction(); $res = $DB->Query("DELETE FROM b_subscription_rubric WHERE LIST_RUBRIC_ID=".$ID, false, "File: ".__FILE__."
Line: ".__LINE__); if($res) $res = $DB->Query("DELETE FROM b_posting_rubric WHERE LIST_RUBRIC_ID=".$ID, false, "File: ".__FILE__."
Line: ".__LINE__); if($res) $res = $DB->Query("DELETE FROM b_list_rubric WHERE ID=".$ID, false, "File: ".__FILE__."
Line: ".__LINE__); if($res) $DB->Commit(); else $DB->Rollback(); return $res; } public static function OnBeforeLangDelete($lang) { global $DB, $APPLICATION; $rs = $DB->Query("SELECT count(*) C FROM b_list_rubric WHERE LID='".$DB->ForSql($lang, 2)."'", false, "File: ".__FILE__."
Line: ".__LINE__); $ar = $rs->Fetch(); if($ar["C"] > 0) { $APPLICATION->ThrowException(GetMessage("class_rub_err_exists", array("#COUNT#"=>$ar["C"]))); return false; } else { return true; } } //check fields before writing function CheckFields($arFields) { global $DB; $this->LAST_ERROR = ""; $aMsg = array(); if($arFields["NAME"] == '') $aMsg[] = array("id"=>"NAME", "text"=>GetMessage("class_rub_err_name")); if($arFields["LID"] <> '') { $r = CLang::GetByID($arFields["LID"]); if(!$r->Fetch()) $aMsg[] = array("id"=>"LID", "text"=>GetMessage("class_rub_err_lang")); } else $aMsg[] = array("id"=>"LID", "text"=>GetMessage("class_rub_err_lang2")); if($arFields["DAYS_OF_MONTH"] <> '') { $arDoM = explode(",", $arFields["DAYS_OF_MONTH"]); $arFound = array(); foreach($arDoM as $strDoM) { if(preg_match("/^(\d{1,2})$/", trim($strDoM), $arFound)) { if(intval($arFound[1]) < 1 || intval($arFound[1]) > 31) { $aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("class_rub_err_dom")); break; } } elseif(preg_match("/^(\d{1,2})-(\d{1,2})$/", trim($strDoM), $arFound)) { if(intval($arFound[1]) < 1 || intval($arFound[1]) > 31 || intval($arFound[2]) < 1 || intval($arFound[2]) > 31 || intval($arFound[1]) >= intval($arFound[2])) { $aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("class_rub_err_dom")); break; } } else { $aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("class_rub_err_dom2")); break; } } } if($arFields["DAYS_OF_WEEK"] <> '') { $arDoW = explode(",", $arFields["DAYS_OF_WEEK"]); $arFound = array(); foreach($arDoW as $strDoW) { if(preg_match("/^(\d)$/", trim($strDoW), $arFound)) { if(intval($arFound[1]) < 1 || intval($arFound[1]) > 7) { $aMsg[] = array("id"=>"DAYS_OF_WEEK", "text"=>GetMessage("class_rub_err_dow")); break; } } else { $aMsg[] = array("id"=>"DAYS_OF_WEEK", "text"=>GetMessage("class_rub_err_dow2")); break; } } } if($arFields["TIMES_OF_DAY"] <> '') { $arToD = explode(",", $arFields["TIMES_OF_DAY"]); $arFound = array(); foreach($arToD as $strToD) { if(preg_match("/^(\d{1,2}):(\d{1,2})$/", trim($strToD), $arFound)) { if(intval($arFound[1]) > 23 || intval($arFound[2]) > 59) { $aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("class_rub_err_tod")); break; } } else { $aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("class_rub_err_tod2")); break; } } } if($arFields["TEMPLATE"] <> '' && !CPostingTemplate::IsExists($arFields["TEMPLATE"])) $aMsg[] = array("id"=>"TEMPLATE", "text"=>GetMessage("class_rub_err_wrong_templ")); if($arFields["AUTO"]=="Y") { if((mb_strlen($arFields["FROM_FIELD"]) < 3) || !check_email($arFields["FROM_FIELD"])) $aMsg[] = array("id"=>"FROM_FIELD", "text"=>GetMessage("class_rub_err_email")); if(mb_strlen($arFields["DAYS_OF_MONTH"]) + mb_strlen($arFields["DAYS_OF_WEEK"]) <= 0) $aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("class_rub_err_days_missing")); if($arFields["TIMES_OF_DAY"] == '') $aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("class_rub_err_times_missing")); if($arFields["TEMPLATE"] == '') $aMsg[] = array("id"=>"TEMPLATE", "text"=>GetMessage("class_rub_err_templ_missing")); if(is_set($arFields, "FROM_FIELD") && $arFields["FROM_FIELD"] == '') $aMsg[] = array("id"=>"FROM_FIELD", "text"=>GetMessage("class_rub_err_from")); if($arFields["LAST_EXECUTED"] == '') $aMsg[] = array("id"=>"LAST_EXECUTED", "text"=>GetMessage("class_rub_err_le_missing")); elseif(is_set($arFields, "LAST_EXECUTED") && $arFields["LAST_EXECUTED"]!==false && $DB->IsDate($arFields["LAST_EXECUTED"], false, false, "FULL")!==true) $aMsg[] = array("id"=>"LAST_EXECUTED", "text"=>GetMessage("class_rub_err_le_wrong")); } if(!empty($aMsg)) { $e = new CAdminException($aMsg); $GLOBALS["APPLICATION"]->ThrowException($e); $this->LAST_ERROR = $e->GetString(); return false; } return true; } //add function Add($arFields) { global $DB; if(!$this->CheckFields($arFields)) return false; $ID = $DB->Add("b_list_rubric", $arFields); if($ID>0 && $arFields["ACTIVE"]=="Y" && $arFields["AUTO"]=="Y" && COption::GetOptionString("subscribe", "subscribe_template_method")!=="cron") CAgent::AddAgent("CPostingTemplate::Execute();", "subscribe", "N", COption::GetOptionString("subscribe", "subscribe_template_interval")); return $ID; } //update function Update($ID, $arFields) { global $DB; $ID = intval($ID); if(!$this->CheckFields($arFields)) return false; $strUpdate = $DB->PrepareUpdate("b_list_rubric", $arFields); if($strUpdate!="") { $strSql = "UPDATE b_list_rubric SET ".$strUpdate." WHERE ID=".$ID; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); if($ID>0 && $arFields["ACTIVE"]=="Y" && $arFields["AUTO"]=="Y" && COption::GetOptionString("subscribe", "subscribe_template_method")!=="cron") CAgent::AddAgent("CPostingTemplate::Execute();", "subscribe", "N", COption::GetOptionString("subscribe", "subscribe_template_interval")); } return true; } } ?>