Esempio n. 1
0
 public static function GetList($order = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     $filter = array("LOGIC" => "AND");
     if (is_array($arFilter)) {
         foreach ($arFilter as $dkey => $val) {
             $key = CSqlUtil::GetFilterOperation($dkey);
             if ($key["FIELD"] == "ID" && is_array($val)) {
                 $res = array("LOGIC" => "OR");
                 foreach ($val as $v) {
                     if ($v == self::SUBSCRIBE_ALL) {
                         $res[] = array("=SUBSCRIBE_TYPE" => \Bitrix\Idea\NotifyEmailTable::SUBSCRIBE_TYPE_ALL);
                     } else {
                         if (strpos($v, self::SUBSCRIBE_IDEA_COMMENT) === 0) {
                             $res[] = array("=ENTITY_TYPE" => \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_IDEA, "=ENTITY_CODE" => str_replace(self::SUBSCRIBE_IDEA_COMMENT, "", $v));
                         }
                     }
                 }
                 $filter[] = $res;
             } else {
                 if ($key["FIELD"] == "USER_ID" || $key["FIELD"] == "USER_EMAIL") {
                     $filter[] = array($dkey => $val);
                 }
             }
         }
     }
     $select = array();
     $runtime = array();
     if (is_array($arSelectFields)) {
         $select = array_intersect($arSelectFields, array_keys(\Bitrix\Idea\NotifyEmailTable::getMap()));
         if (in_array("USER_EMAIL", $arSelectFields)) {
             $select["USER_EMAIL"] = "USER.EMAIL";
         }
         if (in_array("ID", $arSelectFields)) {
             $select["ID"] = 'RUNTIME_ID';
             $runtime[] = new ExpressionField('RUNTIME_ID', Application::getConnection()->getSqlHelper()->getConcatFunction("CASE " . "WHEN %s='" . \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_IDEA . "' AND %s='' THEN '" . self::SUBSCRIBE_ALL . "' " . "WHEN %s='" . \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_IDEA . "' THEN '" . self::SUBSCRIBE_IDEA_COMMENT . "' " . "WHEN %s='" . \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_CATEGORY . "' AND %s='' THEN '" . self::SUBSCRIBE_ALL_IDEA . "' " . "WHEN %s='" . \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_CATEGORY . "' THEN '" . \Bitrix\Idea\NotifyEmailTable::ENTITY_TYPE_CATEGORY . "' " . "ELSE 'UNK' END", "%s"), array("ENTITY_TYPE", "ENTITY_CODE", "ENTITY_TYPE", "ENTITY_TYPE", "ENTITY_CODE", "ENTITY_TYPE", "ENTITY_CODE"));
         }
     }
     $db_res = \Bitrix\Idea\NotifyEmailTable::getList(array('filter' => $filter, 'select' => $select, 'order' => $order, 'runtime' => $runtime));
     return new CDBResult($db_res);
 }
Esempio n. 2
0
 private static function PrepareSearchQuery(&$arFilter, &$arSqlSearch)
 {
     global $DB;
     $filter_keys = array_keys($arFilter);
     for ($i = 0, $ic = count($filter_keys); $i < $ic; $i++) {
         $val = $arFilter[$filter_keys[$i]];
         if (!is_array($val) && strlen($val) <= 0 || $val == "NOT_REF") {
             continue;
         }
         $key = strtoupper($filter_keys[$i]);
         $operationInfo = CSqlUtil::GetFilterOperation($key);
         $operation = $operationInfo['OPERATION'];
         // Process only like operation
         $isLikeOperation = $operation === 'LIKE' ? 'Y' : 'N';
         $fieldName = $operationInfo['FIELD'];
         switch ($fieldName) {
             case 'ID':
                 $arSqlSearch[] = GetFilterQuery('CFM.ID', $val, 'N');
                 break;
             case 'ENTITY_ID':
                 $arSqlSearch[] = GetFilterQuery('CFM.ENTITY_ID', $val, $isLikeOperation);
                 break;
             case 'ELEMENT_ID':
                 if (is_array($val)) {
                     $ar = array();
                     foreach ($val as $v) {
                         $ar[] = intval($v);
                     }
                     if (!empty($ar)) {
                         $arSqlSearch[] = 'CFM.ELEMENT_ID IN (' . implode(',', $ar) . ')';
                     }
                 } else {
                     $arSqlSearch[] = 'CFM.ELEMENT_ID = ' . intval($val);
                 }
                 break;
             case 'TYPE_ID':
                 $arSqlSearch[] = GetFilterQuery('CFM.TYPE_ID', $val, $isLikeOperation);
                 break;
             case 'VALUE_TYPE':
                 if (is_array($val)) {
                     $valueTypeFilter = '';
                     foreach ($val as $v) {
                         $v = $DB->ForSql(trim(strval($v)));
                         if ($v === '') {
                             continue;
                         }
                         if ($valueTypeFilter !== '') {
                             $valueTypeFilter .= ', ';
                         }
                         $valueTypeFilter .= "'{$v}'";
                     }
                     if ($valueTypeFilter !== '') {
                         $arSqlSearch[] = "CFM.VALUE_TYPE IN ({$valueTypeFilter})";
                     }
                 } else {
                     $arSqlSearch[] = GetFilterQuery('CFM.VALUE_TYPE', $val, $isLikeOperation);
                 }
                 break;
             case 'COMPLEX_ID':
                 $arSqlSearch[] = GetFilterQuery('CFM.COMPLEX_ID', $val, $isLikeOperation);
                 break;
             case 'VALUE':
                 $arSqlSearch[] = GetFilterQuery('CFM.VALUE', $val, $isLikeOperation);
                 break;
             case 'FILTER':
                 $arSqlFilterSearch = array();
                 if (is_array($val)) {
                     // Processing of filter parts
                     foreach ($val as $v) {
                         // Prepering filter part - items are joined by 'AND'
                         $arSqlInnerSearch = array();
                         self::PrepareSearchQuery($v, $arSqlInnerSearch);
                         if (!empty($arSqlInnerSearch)) {
                             $arSqlFilterSearch[] = '(' . implode(' AND ', $arSqlInnerSearch) . ')';
                         }
                     }
                 }
                 if (!empty($arSqlFilterSearch)) {
                     //$logic = isset($arFilter['LOGIC']) && is_string($arFilter['LOGIC']) ? strtoupper($arFilter['LOGIC']) : '';
                     //$logic = '';
                     //if($logic === '')
                     //{
                     //	$logic = 'OR';
                     //}
                     // Prepering filter - parts are joined by 'OR'
                     //$arSqlSearch[] = '('.implode(" {$logic} ", $arSqlFilterSearch).')';
                     $arSqlSearch[] = '(' . implode(" OR ", $arSqlFilterSearch) . ')';
                 }
                 break;
         }
     }
 }
Esempio n. 3
0
if ($nTopCount > 0) {
    $arNavParams['nTopCount'] = $nTopCount;
}
//$arEntityList = Array();
$arResult['EVENT'] = array();
$event = new CCrmInvoiceEvent();
if (!array_key_exists('TYPE', $arFilter)) {
    $arFilter['TYPE'] = array_keys($arResult['EVENT_TYPES']);
}
$obRes = $event->GetList($arResult['SORT'], $arFilter, false, $arNavParams, array(), array());
$arResult['DB_LIST'] = $obRes;
$arResult['ROWS_COUNT'] = $obRes->NavRecordCount;
// Prepare raw filter ('=CREATED_BY' => 'CREATED_BY')
$arResult['DB_FILTER'] = array();
foreach ($arFilter as $filterKey => &$filterItem) {
    $info = CSqlUtil::GetFilterOperation($filterKey);
    $arResult['DB_FILTER'][$info['FIELD']] = $filterItem;
}
unset($filterItem);
$arUserDistinct = array();
$arUserInfo = array();
$arEventDescr = array();
while ($arEvent = $obRes->Fetch()) {
    $arEvent['PATH_TO_EVENT_DELETE'] = CHTTP::urlAddParams($arParams['PATH_TO_EVENT_LIST'], array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $arEvent['ID'], 'sessid' => bitrix_sessid()));
    $arEvent['~FILES'] = $arEvent['FILES'];
    //$arEvent['~EVENT_NAME'] = $arEvent['EVENT_NAME'];
    $arUserDistinct[intval($arEvent['USER_ID'])] = true;
    $arEvent['DATE_CREATE'] = $arEvent['DATE_CREATE'];
    //$arEvent['EVENT_NAME'] = htmlspecialcharsbx($arEvent['~EVENT_NAME']);
    if (!empty($arEvent['FILES'])) {
        $i = 1;
Esempio n. 4
0
 protected function internalizeFilterFields(&$filter, &$fieldsInfo)
 {
     if (!is_array($filter)) {
         return;
     }
     foreach ($filter as $k => $v) {
         $operationInfo = CSqlUtil::GetFilterOperation($k);
         $fieldName = $operationInfo['FIELD'];
         $info = isset($fieldsInfo[$fieldName]) ? $fieldsInfo[$fieldName] : null;
         if (!$info) {
             unset($filter[$k]);
             continue;
         }
         $fieldType = isset($info['TYPE']) ? $info['TYPE'] : '';
         if ($fieldType === 'datetime') {
             $filter[$k] = CRestUtil::unConvertDateTime($v);
         }
     }
     CCrmEntityHelper::PrepareMultiFieldFilter($filter);
 }
Esempio n. 5
0
 public static function GetList($arSort = array(), $arFilter = array(), $arSelect = array())
 {
     if (!CModule::IncludeModule('sale')) {
         return array();
     }
     $arStatus = array();
     self::ensureLanguageDefined();
     $fieldsInfo = self::GetFieldsInfo();
     $filterOperations = array();
     foreach ($arFilter as $k => $v) {
         $operationInfo = CSqlUtil::GetFilterOperation($k);
         $operationInfo['FILTER_VALUE'] = $v;
         $fieldName = $operationInfo['FIELD'];
         $info = isset($fieldsInfo[$fieldName]) ? $fieldsInfo[$fieldName] : null;
         if ($info) {
             $operationInfo['FIELD_TYPE'] = $info['TYPE'];
             $filterOperations[] = $operationInfo;
         }
     }
     $res = CSaleStatus::GetList(array(), array('LID' => self::$languageID), false, false, array('ID', 'SORT', 'NAME'));
     while ($row = $res->Fetch()) {
         if ($row['ID'] === 'F') {
             continue;
         }
         $arStatus[$row['ID']] = array('ID' => strval(ord($row['ID'])), 'ENTITY_ID' => 'INVOICE_STATUS', 'STATUS_ID' => $row['ID'], 'NAME' => $row['NAME'], 'NAME_INIT' => '', 'SORT' => $row['SORT'], 'SYSTEM' => 'N');
         if (in_array($row['ID'], array('N', 'P', 'F', 'D'))) {
             if ($row['ID'] === 'F') {
                 $arStatus[$row['ID']]['NAME_INIT'] = GetMessage('CRM_INVOICE_STATUS_F');
             } elseif ($row['ID'] === 'D') {
                 $arStatus[$row['ID']]['NAME_INIT'] = GetMessage('CRM_INVOICE_STATUS_D');
             } elseif ($row['ID'] === 'N') {
                 $arStatus[$row['ID']]['NAME_INIT'] = GetMessage('CRM_INVOICE_STATUS_N');
             } elseif ($row['ID'] === 'P') {
                 $arStatus[$row['ID']]['NAME_INIT'] = GetMessage('CRM_INVOICE_STATUS_P');
             }
             $arStatus[$row['ID']]['SYSTEM'] = 'Y';
         }
     }
     // filter
     $arResult = array();
     foreach ($arStatus as $row) {
         $bRowSelected = true;
         foreach ($filterOperations as $filterInfo) {
             if (!self::CheckFilter($filterInfo, $row)) {
                 $bRowSelected = false;
                 break;
             }
         }
         if ($bRowSelected) {
             $arResult[] = $row;
         }
     }
     // sort
     if (count($arSort) > 0 && count($arResult) > 0) {
         $arSortKeys = array_keys($arSort);
         $arSortBy = $arSortDir = $arSortType = array();
         $origFieldsNames = array_keys($fieldsInfo);
         $numSorts = 0;
         foreach ($arSortKeys as $sortKey) {
             if (in_array($sortKey, $origFieldsNames, true)) {
                 $arSortBy[] = ToUpper($sortKey);
                 $arSortDir[] = ToUpper($arSort[$sortKey]) === 'DESC' ? SORT_DESC : SORT_ASC;
                 $sortType = SORT_REGULAR;
                 switch ($fieldsInfo[$sortKey]['TYPE']) {
                     case 'integer':
                         $sortType = SORT_NUMERIC;
                         break;
                     case 'string':
                     case 'char':
                         $sortType = SORT_STRING;
                         break;
                 }
                 $arSortType[] = $sortType;
                 $numSorts++;
             }
         }
         if ($numSorts > 0) {
             $fieldsNames = array();
             foreach ($origFieldsNames as $fieldName) {
                 if (!in_array($fieldName, $arSortBy, true)) {
                     $fieldsNames[] = $fieldName;
                 }
             }
             $fieldsNames = array_merge($arSortBy, $fieldsNames);
             $fieldsIndex = $columns = array();
             $index = 0;
             foreach ($fieldsNames as $fieldName) {
                 $columns[$index] = array();
                 $fieldsIndex[$fieldName] = $index++;
             }
             foreach ($arResult as $row) {
                 foreach ($row as $fieldName => $fieldValue) {
                     if (isset($fieldsIndex[$fieldName])) {
                         $columns[$fieldsIndex[$fieldName]][] = $fieldValue;
                     }
                 }
             }
             $args = array();
             $index = 0;
             foreach ($columns as &$column) {
                 $args[] =& $column;
                 if ($index < $numSorts) {
                     $args[] =& $arSortDir[$index];
                     $args[] =& $arSortType[$index];
                 }
                 $index++;
             }
             unset($column);
             call_user_func_array('array_multisort', $args);
             $numRows = count($arResult);
             $arResult = array();
             for ($index = 0; $index < $numRows; $index++) {
                 $row = array();
                 foreach ($origFieldsNames as $fieldName) {
                     $row[$fieldName] = $columns[$fieldsIndex[$fieldName]][$index];
                 }
                 $arResult[] = $row;
             }
         }
     }
     // select
     if (count($arResult) > 0 && is_array($arSelect) && count($arSelect) > 0) {
         $selectedFields = array_intersect($arSelect, array_keys($fieldsInfo));
         if (count($selectedFields) > 0) {
             $arStatus = $arResult;
             $arResult = array();
             foreach ($arStatus as $row) {
                 $newRow = array();
                 foreach ($selectedFields as $fieldName) {
                     $newRow[$fieldName] = $row[$fieldName];
                 }
                 $arResult[] = $newRow;
             }
         }
     }
     return $arResult;
 }
Esempio n. 6
0
 protected function internalizeFilterFields(&$filter, &$fieldsInfo)
 {
     if (!is_array($filter)) {
         return;
     }
     foreach ($filter as $k => $v) {
         $operationInfo = CSqlUtil::GetFilterOperation($k);
         $fieldName = $operationInfo['FIELD'];
         $info = isset($fieldsInfo[$fieldName]) ? $fieldsInfo[$fieldName] : null;
         if (!$info) {
             unset($filter[$k]);
             continue;
         }
         $operation = substr($k, 0, strlen($k) - strlen($fieldName));
         if (isset($info['FORBIDDEN_FILTERS']) && is_array($info['FORBIDDEN_FILTERS']) && in_array($operation, $info['FORBIDDEN_FILTERS'], true)) {
             unset($filter[$k]);
             continue;
         }
         $fieldType = isset($info['TYPE']) ? $info['TYPE'] : '';
         if (($fieldType === 'crm_status' || $fieldType === 'crm_company' || $fieldType === 'crm_contact') && ($operation === '%' || $operation === '%=' || $operation === '=%')) {
             //Prevent filtration by LIKE due to performance considerations
             $filter["={$fieldName}"] = $v;
             unset($filter[$k]);
             continue;
         }
         if ($fieldType === 'datetime') {
             $filter[$k] = CRestUtil::unConvertDateTime($v);
         } elseif ($fieldType === 'date') {
             $filter[$k] = CRestUtil::unConvertDate($v);
         }
     }
     CCrmEntityHelper::PrepareMultiFieldFilter($filter, array(), '=%', true);
 }