Exemplo n.º 1
-1
 function GetListEx($arOrder = array(), $arFilter = array(), $arParams = array())
 {
     global $DB;
     $arSearch = $arSearch1 = $arSearch2 = array();
     $arSelect = array();
     $arSqlSearch = array();
     $strSqlSearch = "";
     $arSqlOrder = array();
     foreach ($arFilter as $key => $val) {
         if (strlen($val) <= 0) {
             continue;
         }
         $val = $DB->ForSql($val);
         $key_res = CEventType::GetFilterOperation($key);
         $key = strToUpper($key_res["FIELD"]);
         $strNegative = $key_res["NEGATIVE"];
         $strOperation = $key_res["OPERATION"];
         $strNOperation = $key_res["NOPERATION"];
         $arOperationReplace = array('LIKE' => '=%', 'QUERY' => '', 'IN' => '');
         switch ($key) {
             case "EVENT_NAME":
             case "TYPE_ID":
                 if ($strOperation == "LIKE") {
                     $val = "%" . $val . "%";
                 }
                 $arSearch[] = array($strNOperation . 'EVENT_NAME' => $val);
                 break;
             case "DESCRIPTION":
             case "NAME":
                 if ($strOperation == "LIKE") {
                     $val = "%" . $val . "%";
                 }
                 $arSearch1[] = array($strNOperation . 'EVENT_MESSAGE_TYPE.' . $key => $val);
                 $arSearch2[] = array($strNOperation . $key => $val);
                 break;
             case "LID":
                 $arSearch1[] = array($strNOperation . 'EVENT_MESSAGE_TYPE.' . $key => $val);
                 $arSearch2[] = array($strNOperation . $key => $val);
                 break;
             case "ID":
                 $val = intVal($val);
                 $arSearch1[] = array($strNOperation . 'EVENT_MESSAGE_TYPE.' . $key => $val);
                 $arSearch2[] = array($strNOperation . $key => $val);
                 break;
             case "MESSAGE_ID":
                 $val = intVal($val);
                 $arSearch1[] = array($strNOperation . "ID" => $val);
                 $arSearch2[] = array($strNOperation . 'EVENT_MESSAGE.ID' => $val);
                 break;
         }
     }
     if (is_array($arOrder)) {
         foreach ($arOrder as $by => $order) {
             $by = strtoupper($by);
             $order = strtoupper($order);
             $order = $order != "DESC" ? "ASC" : "DESC";
             if ($by == "EVENT_NAME" || $by == "ID") {
                 $arSqlOrder["EVENT_NAME"] = "EVENT_NAME1 " . $order;
             }
         }
     }
     if (empty($arSqlOrder)) {
         $arSqlOrder["EVENT_NAME"] = "EVENT_NAME1 ASC";
     }
     $strSqlOrder = " ORDER BY " . implode(", ", $arSqlOrder);
     $arSearch['!EVENT_NAME'] = null;
     $arQuerySelect = array('ID1' => 'EVENT_NAME', 'EVENT_NAME1' => 'EVENT_NAME');
     $query1 = new \Bitrix\Main\Entity\Query(Mail\Internal\EventMessageTable::getEntity());
     $query1->setSelect($arQuerySelect);
     $query1->setFilter(array_merge($arSearch, $arSearch1));
     $query1->registerRuntimeField('EVENT_MESSAGE_TYPE', array('data_type' => 'Bitrix\\Main\\Mail\\Internal\\EventType', 'reference' => array('=this.EVENT_NAME' => 'ref.EVENT_NAME')));
     $query2 = new \Bitrix\Main\Entity\Query(Mail\Internal\EventTypeTable::getEntity());
     $query2->setSelect($arQuerySelect);
     $query2->setFilter(array_merge($arSearch, $arSearch2));
     $query2->registerRuntimeField('EVENT_MESSAGE', array('data_type' => 'Bitrix\\Main\\Mail\\Internal\\EventMessage', 'reference' => array('=this.EVENT_NAME' => 'ref.EVENT_NAME')));
     $connection = \Bitrix\Main\Application::getConnection();
     $strSql = $query1->getQuery() . " UNION " . $query2->getQuery() . " " . $strSqlOrder;
     $db_res = $connection->query($strSql);
     $db_res->addFetchDataModifier(array('CEventType', 'GetListExFetchDataModifier'));
     $db_res = new _CEventTypeResult($db_res, $arParams);
     return $db_res;
 }