コード例 #1
0
ファイル: status.php プロジェクト: andy-profi/bxApiDocs
 public static function adaptResult(Compatible\CDBResult $result, Compatible\OrderQuery $query, $taskIdName)
 {
     if (!($query->grouped() || $query->aggregated())) {
         $select = $query->allSelected() ? self::permissions() : array_intersect_key(self::permissions(), $query->getSelect());
         if ($select) {
             $query->setSelect(array_diff_key($query->getSelect(), $select));
             $query->addAlias('TASK_ID', $taskIdName);
             $query->addAliasSelect('TASK_ID');
             $result->addFetchAdapter(new self($select));
         }
     }
 }
コード例 #2
0
ファイル: compatible.php プロジェクト: webgksupport/alpina
 public function compatibleExec(CDBResult $result, $navStart)
 {
     if ($this->aggregated) {
         $result->addFetchAdapter(new AggregateAdapter($this->aggregated));
     }
     if (is_array($navStart) && isset($navStart['nTopCount'])) {
         if ($navStart['nTopCount'] > 0) {
             $this->setLimit($navStart['nTopCount']);
         } else {
             $result->compatibleNavQuery($this, $navStart);
             return $result;
         }
     }
     $rows = $this->exec()->fetchAll();
     $result->InitFromArray($rows);
     return $result;
 }
コード例 #3
0
 /**
  * <p>Метод возвращает результат выборки записей из заказов в соответствии со своими параметрами. Метод динамичный.</p>
  *
  *
  * @param array $arOrder = array() Массив, в соответствии с которым сортируются результирующие
  * записи. Массив имеет вид: <pre class="syntax">array( "название_поля1" =&gt;
  * "направление_сортировки1", "название_поля2" =&gt;
  * "направление_сортировки2", . . . )</pre> В качестве "название_поля<i>N</i>"
  * может стоять любое поле местоположения, а в качестве
  * "направление_сортировки<i>X</i>" могут быть значения "<i>ASC</i>" (по
  * возрастанию) и "<i>DESC</i>" (по убыванию).<br><br> Если массив сортировки
  * имеет несколько элементов, то результирующий набор сортируется
  * последовательно по каждому элементу (т.е. сначала сортируется по
  * первому элементу, потом результат сортируется по второму и
  * т.д.). <br><br> Значение по умолчанию - пустой массив array() - означает,
  * что результат отсортирован не будет.
  *
  * @param array $arFilter = array() Массив, в соответствии с которым фильтруются записи значений
  * свойств. Массив имеет вид: <pre class="syntax">array(
  * "[модификатор1][оператор1]название_поля1" =&gt; "значение1",
  * "[модификатор2][оператор2]название_поля2" =&gt; "значение2", . . . )</pre>
  * Удовлетворяющие фильтру записи возвращаются в результате, а
  * записи, которые не удовлетворяют условиям фильтра,
  * отбрасываются.<br><br> Допустимыми являются следующие модификаторы:
  * <ul> <li> <b> !</b> - отрицание;</li> <li> <b> +</b> - значения null, 0 и пустая строка
  * так же удовлетворяют условиям фильтра.</li> </ul> Допустимыми
  * являются следующие операторы: <ul> <li> <b>&gt;=</b> - значение поля больше
  * или равно передаваемой в фильтр величины;</li> <li> <b>&gt;</b> - значение
  * поля строго больше передаваемой в фильтр величины;</li> <li> <b>&lt;=</b> -
  * значение поля меньше или равно передаваемой в фильтр величины;</li>
  * <li> <b>&lt;</b> - значение поля строго меньше передаваемой в фильтр
  * величины;</li> <li> <b>@</b> - значение поля находится в передаваемом в
  * фильтр массиве со списком значений;</li> <li> <b>~</b> - значение поля
  * проверяется на соответствие передаваемому в фильтр шаблону;</li>
  * <li> <b>%</b> - значение поля проверяется на соответствие передаваемой
  * в фильтр строке в соответствии с языком запросов.</li> </ul> В
  * качестве "название_поляX" может стоять любое поле заказов.<br><br>
  * Пример фильтра: <pre class="syntax">array("~CODE" =&gt; "SH*")</pre> Этот фильтр означает
  * "выбрать все записи, в которых значение в поле CODE (символьный код
  * свойства) начинается с SH".<br><br> Значение по умолчанию - пустой
  * массив array() - означает, что результат отфильтрован не будет.
  *
  * @param array $arGroupBy = false Массив полей, по которым группируются записи значений свойств.
  * Массив имеет вид: <pre class="syntax"> array("название_поля1",
  * "группирующая_функция2" =&gt; "название_поля2", . . .)</pre> В качестве
  * "название_поля<i>N</i>" может стоять любое поле значений свойств. В
  * качестве группирующей функции могут стоять: <ul> <li> <b> COUNT</b> -
  * подсчет количества;</li> <li> <b>AVG</b> - вычисление среднего значения;</li>
  * <li> <b>MIN</b> - вычисление минимального значения;</li> <li> <b> MAX</b> -
  * вычисление максимального значения;</li> <li> <b>SUM</b> - вычисление
  * суммы.</li> </ul> Если массив пустой, то метод вернет число записей,
  * удовлетворяющих фильтру.<br><br> Значение по умолчанию - <i>false</i> -
  * означает, что результат группироваться не будет.
  *
  * @param array $arNavStartParams = false Массив параметров выборки. Может содержать следующие ключи: <ul>
  * <li>"<b>nTopCount</b>" - количество возвращаемых методом записей будет
  * ограничено сверху значением этого ключа;</li> <li> любой ключ,
  * принимаемый методом <b> CDBResult::NavQuery</b> в качестве третьего
  * параметра.</li> </ul> Значение по умолчанию - <i>false</i> - означает, что
  * параметров выборки нет.
  *
  * @param array $arSelectFields = array() Массив полей записей, которые будут возвращены методом. Можно
  * указать только те поля, которые необходимы. Если в массиве
  * присутствует значение "*", то будут возвращены все доступные
  * поля.<br><br> Значение по умолчанию - пустой массив array() - означает,
  * что будут возвращены все поля основной таблицы запроса.
  *
  * @return CDBResult <p>Возвращается объект класса CDBResult, содержащий набор
  * ассоциативных массивов параметров значений свойств с ключами:</p>
  * <table class="tnormal" width="100%"> <tr> <th width="15%">Ключ</th> <th>Описание</th> </tr> <tr> <td>ID</td>
  * <td>Код значения свойства заказа.</td> </tr> <tr> <td>ORDER_ID</td> <td>Код
  * заказа.</td> </tr> <tr> <td>ORDER_PROPS_ID</td> <td>Код свойства.</td> </tr> <tr> <td>NAME</td>
  * <td>Название свойства.</td> </tr> <tr> <td>VALUE</td> <td>Значение свойства.</td> </tr>
  * <tr> <td>CODE</td> <td>Символьный код свойства.</td> </tr> </table> <p>Если в качестве
  * параметра arGroupBy передается пустой массив, то метод вернет число
  * записей, удовлетворяющих фильтру.</p> <a name="examples"></a>
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // Узнаем имя заказчика (т.е. значение, которое было введено в поле свойства 
  * // заказа $ORDER_ID с установленным флагом IS_PAYER)
  * $PAYER_NAME = "";
  * $db_order = CSaleOrder::GetList(
  *         array("DATE_UPDATE" =&gt; "DESC"),
  *         array("ID" =&gt; $ORDER_ID)
  *     );
  * if ($arOrder = $db_order-&gt;Fetch())
  * {
  *    $db_props = CSaleOrderProps::GetList(
  *         array("SORT" =&gt; "ASC"),
  *         array(
  *                 "PERSON_TYPE_ID" =&gt; $arOrder["PERSON_TYPE_ID"],
  *                 "IS_PAYER" =&gt; "Y"
  *             )
  *     );
  *    if ($arProps = $db_props-&gt;Fetch())
  *    {
  *       $db_vals = CSaleOrderPropsValue::GetList(
  *             array("SORT" =&gt; "ASC"),
  *             array(
  *                     "ORDER_ID" =&gt; $ORDER_ID,
  *                     "ORDER_PROPS_ID" =&gt; $arProps["ID"]
  *                 )
  *         );
  *       if ($arVals = $db_vals-&gt;Fetch())
  *         $PAYER_NAME = $arVals["VALUE"];
  *    }
  * }
  * echo $PAYER_NAME;
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderpropsvalue/csaleorderpropsvalue__getlist.52da0d54.php
  * @author Bitrix
  */
 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB;
     if (!is_array($arOrder) && !is_array($arFilter)) {
         $arOrder = strval($arOrder);
         $arFilter = strval($arFilter);
         if (strlen($arOrder) > 0 && strlen($arFilter) > 0) {
             $arOrder = array($arOrder => $arFilter);
         } else {
             $arOrder = array();
         }
         if (is_array($arGroupBy)) {
             $arFilter = $arGroupBy;
         } else {
             $arFilter = array();
         }
         $arGroupBy = false;
         $arSelectFields = array("ID", "ORDER_ID", "ORDER_PROPS_ID", "NAME", "VALUE", "VALUE_ORIG", "CODE");
     }
     if (count($arSelectFields) <= 0) {
         $arSelectFields = array("ID", "ORDER_ID", "ORDER_PROPS_ID", "NAME", "VALUE", "VALUE_ORIG", "CODE");
     }
     // add aliases
     $query = new Compatible\OrderQueryLocation(Internals\OrderPropsValueTable::getEntity());
     $query->addLocationRuntimeField('VALUE', 'PROPERTY');
     $query->addAliases(array('PROP_ID' => 'PROPERTY.ID', 'PROP_PERSON_TYPE_ID' => 'PROPERTY.PERSON_TYPE_ID', 'PROP_NAME' => 'PROPERTY.NAME', 'PROP_TYPE' => 'PROPERTY.TYPE', 'PROP_REQUIED' => 'PROPERTY.REQUIRED', 'PROP_DEFAULT_VALUE' => 'PROPERTY.DEFAULT_VALUE', 'PROP_SORT' => 'PROPERTY.SORT', 'PROP_USER_PROPS' => 'PROPERTY.USER_PROPS', 'PROP_IS_LOCATION' => 'PROPERTY.IS_LOCATION', 'PROP_PROPS_GROUP_ID' => 'PROPERTY.PROPS_GROUP_ID', 'PROP_DESCRIPTION' => 'PROPERTY.DESCRIPTION', 'PROP_IS_EMAIL' => 'PROPERTY.IS_EMAIL', 'PROP_IS_PROFILE_NAME' => 'PROPERTY.IS_PROFILE_NAME', 'PROP_IS_PAYER' => 'PROPERTY.IS_PAYER', 'PROP_IS_LOCATION4TAX' => 'PROPERTY.IS_LOCATION4TAX', 'PROP_IS_ZIP' => 'PROPERTY.IS_ZIP', 'PROP_CODE' => 'PROPERTY.CODE', 'PROP_ACTIVE' => 'PROPERTY.ACTIVE', 'PROP_UTIL' => 'PROPERTY.UTIL', 'TYPE' => 'PROPERTY.TYPE', 'SETTINGS' => 'PROPERTY.SETTINGS', 'MULTIPLE' => 'PROPERTY.MULTIPLE', 'PROPERTY_NAME' => 'PROPERTY.NAME', 'PROPS_GROUP_ID' => 'PROPERTY.PROPS_GROUP_ID', 'INPUT_FIELD_LOCATION' => 'PROPERTY.INPUT_FIELD_LOCATION', 'IS_LOCATION' => 'PROPERTY.IS_LOCATION', 'IS_EMAIL' => 'PROPERTY.IS_EMAIL', 'IS_PROFILE_NAME' => 'PROPERTY.IS_PROFILE_NAME', 'IS_PAYER' => 'PROPERTY.IS_PAYER', 'ACTIVE' => 'PROPERTY.ACTIVE', 'UTIL' => 'PROPERTY.UTIL', 'GROUP_SORT' => 'PROPERTY.GROUP.SORT', 'GROUP_NAME' => 'PROPERTY.GROUP.NAME'));
     // relations for GetOrderRelatedProps
     $relationFilter = array();
     if ($arFilter['PAYSYSTEM_ID']) {
         $relationFilter[] = array('=PROPERTY.Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'P', '=PROPERTY.Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['PAYSYSTEM_ID']);
     }
     if ($arFilter['DELIVERY_ID']) {
         $relationFilter['LOGIC'] = 'OR';
         $relationFilter[] = array('=PROPERTY.Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'D', '=PROPERTY.Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['DELIVERY_ID']);
     }
     if ($relationFilter) {
         $query->addFilter(null, $relationFilter);
     }
     // execute
     $query->prepare($arOrder, $arFilter, $arGroupBy, $arSelectFields);
     if ($query->counted()) {
         return $query->exec()->getSelectedRowsCount();
     } else {
         $result = new Compatible\CDBResult();
         $adapter = new CSaleOrderPropsValueAdapter($query->getSelectNamesAssoc() + array_flip($arSelectFields));
         $adapter->addFieldProxy('VALUE');
         $result->addFetchAdapter($adapter);
         if (!$query->aggregated()) {
             $query->addAliasSelect('TYPE');
             $query->addAliasSelect('SETTINGS');
             $query->addAliasSelect('MULTIPLE');
             if ($relationFilter) {
                 $query->registerRuntimeField('PROPERTY_ID', new Entity\ExpressionField('PROPERTY_ID', 'DISTINCT(%s)', 'ID'));
                 $sel = $query->getSelect();
                 array_unshift($sel, 'PROPERTY_ID');
                 $query->setSelect($sel);
             }
         }
         return $query->compatibleExec($result, $arNavStartParams);
     }
 }
コード例 #4
0
ファイル: compatible.php プロジェクト: andy-profi/bxApiDocs
 public function compatibleExec(CDBResult $result, $navStart)
 {
     if ($this->aggregated) {
         $result->addFetchAdapter(new AggregateAdapter($this->aggregated));
     }
     if (is_array($navStart) && isset($navStart['nTopCount'])) {
         if ($navStart['nTopCount'] > 0) {
             $this->setLimit($navStart['nTopCount']);
         } else {
             $result->compatibleNavQuery($this, $navStart);
             return $result;
         }
     }
     // Do not remove!!!
     //		file_put_contents('/var/www/log', "\n\n\n\n".$this->getQuery()."\n", FILE_APPEND); // $this->dump()
     $rows = $this->exec()->fetchAll();
     // Do not remove!!!
     //		foreach ($rows as $row)
     //		{
     //			file_put_contents('/var/www/log', "\n".print_r($row, true), FILE_APPEND);
     //		}
     $result->InitFromArray($rows);
     // Do not remove!!!
     //		while ($row = $result->Fetch())
     //		{
     //			file_put_contents('/var/www/log', "\n".print_r($row, true), FILE_APPEND);
     //		}
     return $result;
 }