From 4d6b6dd1c38e9db55e7ab9d068923f72f06f1112 Mon Sep 17 00:00:00 2001 From: Ms_Natali Date: Tue, 29 Jan 2019 09:55:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20GetNextElement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Queries/ElementQuery.php | 104 ++++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 25 deletions(-) diff --git a/src/Queries/ElementQuery.php b/src/Queries/ElementQuery.php index 9f09ac2..ffb9c27 100644 --- a/src/Queries/ElementQuery.php +++ b/src/Queries/ElementQuery.php @@ -232,31 +232,31 @@ public function count() return $this->handleCacheIfNeeded(compact('filter', 'queryType'), $callback); } - -// /** -// * Normalize properties's format converting it to 'PROPERTY_"CODE"_VALUE'. -// * -// * @param array $fields -// * -// * @return null -// */ -// protected function normalizePropertyResultFormat(&$fields) -// { -// if (empty($fields['PROPERTIES'])) { -// return; -// } -// -// foreach ($fields['PROPERTIES'] as $code => $prop) { -// $fields['PROPERTY_'.$code.'_VALUE'] = $prop['VALUE']; -// $fields['~PROPERTY_'.$code.'_VALUE'] = $prop['~VALUE']; -// $fields['PROPERTY_'.$code.'_DESCRIPTION'] = $prop['DESCRIPTION']; -// $fields['~PROPERTY_'.$code.'_DESCRIPTION'] = $prop['~DESCRIPTION']; -// $fields['PROPERTY_'.$code.'_VALUE_ID'] = $prop['PROPERTY_VALUE_ID']; -// if (isset($prop['VALUE_ENUM_ID'])) { -// $fields['PROPERTY_'.$code.'_ENUM_ID'] = $prop['VALUE_ENUM_ID']; -// } -// } -// } + + /** + * Normalize properties's format converting it to 'PROPERTY_"CODE"_VALUE'. + * + * @param array $fields + * + * @return null + */ + protected function normalizePropertyResultFormat(&$fields) + { + if (empty($fields['PROPERTIES'])) { + return; + } + + foreach ($fields['PROPERTIES'] as $code => $prop) { + $fields['PROPERTY_'.$code.'_VALUE'] = $prop['VALUE']; + $fields['~PROPERTY_'.$code.'_VALUE'] = $prop['~VALUE']; + $fields['PROPERTY_'.$code.'_DESCRIPTION'] = $prop['DESCRIPTION']; + $fields['~PROPERTY_'.$code.'_DESCRIPTION'] = $prop['~DESCRIPTION']; + $fields['PROPERTY_'.$code.'_VALUE_ID'] = $prop['PROPERTY_VALUE_ID']; + if (isset($prop['VALUE_ENUM_ID'])) { + $fields['PROPERTY_'.$code.'_ENUM_ID'] = $prop['VALUE_ENUM_ID']; + } + } + } /** * Normalize filter before sending it to getList. @@ -344,4 +344,58 @@ protected function mergeChunks($chunks) return $items; } + + protected function performFetchUsingSelectedMethod($rsItems) + { + if ($this->fetchUsing['method'] === 'GetNextElement') { + /** @var \_CIBElement $elItem */ + $elItem = $rsItems->GetNextElement(); + + if (!$elItem) { + return false; + } + + $arItem = $elItem->GetFields(); + $arItem['PROPERTIES'] = $elItem->GetProperties(); + $this->normalizePropertyResultFormat($arItem); + unset($arItem['PROPERTIES']); + } else { + $arItem = parent::performFetchUsingSelectedMethod($rsItems); + } + + return $arItem; + } + + /** + * Set fetch using from string or array. + * + * @param string|array $methodAndParams + * @return $this + */ + public function fetchUsing($methodAndParams) + { + // simple case + if (is_string($methodAndParams) || empty($methodAndParams['method'])) { + if (in_array($methodAndParams, ['GetNextElement', 'getNextElement'])) { + $this->fetchUsing = ['method' => 'GetNextElement', 'params' => [true, true]]; + $this->select(['FIELDS', 'PROPERTY_*']); + } else { + parent::fetchUsing($methodAndParams); + } + + return $this; + } + + // complex case + if (in_array($methodAndParams['method'], ['GetNextElement', 'getNextElement'])) { + $bTextHtmlAuto = isset($methodAndParams['params'][0]) ? $methodAndParams['params'][0] : true; + $useTilda = isset($methodAndParams['params'][1]) ? $methodAndParams['params'][1] : true; + $this->fetchUsing = ['method' => 'GetNextElement', 'params' => [$bTextHtmlAuto, $useTilda]]; + $this->select(['FIELDS', 'PROPERTY_*']); + } else { + parent::fetchUsing($methodAndParams); + } + + return $this; + } }