• Модуль: subscribe
  • Путь к файлу: ~/bitrix/modules/subscribe/classes/mysql/posting.php
  • Класс: CPosting
  • Вызов: CPosting::GetList
function GetList($aSort=Array(), $arFilter=Array(), $arSelect=Array(), $arNavStartParams=false)
{
	global $DB;

	static $arSelectFields = false;
	if (!$arSelectFields)
	{
		$arSelectFields = array(
			"STATUS_TITLE" => "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; }