diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..004b004 --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Numerous always-ignore extensions +*.diff +*.err +*.orig +*.log* +*.rej +*.swo +*.swp +*.zip +*.vi +*~ +*.lock +!**/yarn.lock + +# Dotenv +.env +.env.* +!.env.example + +# OS or Editor folders +.DS_Store +._* +Thumbs.db +.cache +.buildpath +.project +.settings +.tmproj +*.esproj +nbproject +*.sublime-project +*.sublime-workspace +.idea +.phpstorm.meta.php +*.komodoproject +.komodotools +.atom +.vscode +.directory +*.sql +*.tar* + +# Project folders and files to ignore +build +phpunit.xml +vendor +phpstan.neon +docker-compose.override.yml +auth.json +.phpunit.result.cache + +/bitrix diff --git a/HLHelpers.php b/HLHelpers.php index 8cc18ce..40b4316 100644 --- a/HLHelpers.php +++ b/HLHelpers.php @@ -1,4 +1,5 @@ @@ -62,13 +63,13 @@ public function getList($arOrder = [], $arFilter = [], $arMoreParams = []) * @param array $arMoreParams остальные параметры select|group|limit|offset|count_total|runtime|data_doubling * @return array */ - public function getOne($arOrder=[],$arFilter=[],$arMoreParams=[]) + public function getOne($arOrder = [], $arFilter = [], $arMoreParams = []) { $arParams = []; - if($arOrder) $arParams['order'] = $arOrder; - if($arFilter) $arParams['filter'] = $arFilter; - if($arMoreParams) { - foreach ($arMoreParams as $k=>$arMoreParam) { + if ($arOrder) $arParams['order'] = $arOrder; + if ($arFilter) $arParams['filter'] = $arFilter; + if ($arMoreParams) { + foreach ($arMoreParams as $k => $arMoreParam) { $key = \mb_strtolower($k); $arParams[$key] = $arMoreParam; } @@ -85,14 +86,14 @@ public function getOne($arOrder=[],$arFilter=[],$arMoreParams=[]) * @throws \Bitrix\Main\ObjectPropertyException * @throws \Bitrix\Main\SystemException */ - public function exists($arFilter=[],$arMoreParams=[]) + public function exists($arFilter = [], $arMoreParams = []) { $arParams = []; - if($arFilter) { + if ($arFilter) { $arParams['filter'] = $arFilter; } - if($arMoreParams) { - foreach ($arMoreParams as $k=>$arMoreParam) { + if ($arMoreParams) { + foreach ($arMoreParams as $k => $arMoreParam) { $key = \mb_strtolower($k); $arParams[$key] = $arMoreParam; } @@ -103,7 +104,7 @@ public function exists($arFilter=[],$arMoreParams=[]) /** * Возвращает класс для работы с инфоблоком - * @param int $hlblockID - идентификатор таблицы HL + * @param int $hlblockID идентификатор таблицы HL * @return Entity\DataManager|bool */ public function getEntityTable($hlblockID) @@ -115,12 +116,31 @@ public function getEntityTable($hlblockID) return $entity->getDataClass(); } + /** + * Возвращает список пользовательских полей HL таблицы (ключем массива является ID записи) + * @param int $hlblockID идентификатор таблицы HL + * @return array + */ + public static function getEntityFields($hlblockID) + { + $resUF = \CUserTypeEntity::GetList([], [ + 'ENTITY_ID' => 'HLBLOCK_' . $hlblockID, + ]); + + $arResult = []; + while ($uf = $resUF->GetNext()) { + $arResult[$uf['ID']] = $uf; + } + + return $arResult; + } + /** * Возвращает ресурс результата списка элеметнов - * @param int $hlblockID - идентификатор таблицы HL - * @param array $arFilter - фильтры - * @param array $arOrder - сортировка - * @param array $arSelect - поля, по умолчанию все + * @param int $hlblockID идентификатор таблицы HL + * @param array $arFilter фильтры + * @param array $arOrder сортировка + * @param array $arSelect поля, по умолчанию все * @param array $arMoreParams остальные параметры group|limit|offset|runtime|data_doubling * @return \Bitrix\Main\DB\Result */ @@ -142,11 +162,11 @@ public function getElementsResource($hlblockID, $arFilter = [], $arOrder = ["ID" } /** - * Возвращает список эдементов инфоблока - * @param int $hlblockID - идентификатор таблицы HL - * @param array $arFilter - фильтры - * @param array $arOrder - сортировка - * @param array $arSelect - поля, по умолчанию все + * Возвращает список элементов инфоблока + * @param int $hlblockID идентификатор таблицы HL + * @param array $arFilter фильтры + * @param array $arOrder сортировка + * @param array $arSelect поля, по умолчанию все * @param array $arMoreParams остальные параметры group|limit|offset|runtime|data_doubling * @return array|bool */ @@ -167,10 +187,10 @@ public function getElementList($hlblockID, $arFilter = [], $arOrder = ["ID" => " * @param array $arMoreParams остальные параметры group|runtime|data_doubling * @return bool */ - public function existsElement($hlblockID, $arFilter=[], $arMoreParams=[]) + public function existsElement($hlblockID, $arFilter = [], $arMoreParams = []) { - if(!$hlblockID) return false; - $result = $this->getElementsResource($hlblockID,$arFilter,[],['ID'],$arMoreParams)->fetch(); + if (!$hlblockID) return false; + $result = $this->getElementsResource($hlblockID, $arFilter, [], ['ID'], $arMoreParams)->fetch(); return !empty($result); } @@ -184,7 +204,7 @@ public function existsElement($hlblockID, $arFilter=[], $arMoreParams=[]) * @throws \Bitrix\Main\SystemException * @since 1.0.3 */ - public function getTotalCount($hlblockID, $arFilter=[], $cache=[]) + public function getTotalCount($hlblockID, $arFilter = [], $cache = []) { $entity = $this->getEntityTable($hlblockID); return (int) $entity::getCount($arFilter, $cache); @@ -219,8 +239,8 @@ public function getElementById($hlblockID, $id, $arMoreParams = []) /** * Создает элемент в хайлоад инфоблоке - * @param integer $hlblockID - идентификатор таблицы HL - * @param array $arFields - поля + * @param integer $hlblockID идентификатор таблицы HL + * @param array $arFields поля * @return bool|int */ public function addElement($hlblockID, $arFields = []) @@ -238,8 +258,8 @@ public function addElement($hlblockID, $arFields = []) /** * Удаляет элемент из хайлоад инфоблока - * @param integer $hlblockID - идентификатор таблицы HL - * @param integer $ID - идентификатор элемента + * @param integer $hlblockID идентификатор таблицы HL + * @param integer $ID идентификатор элемента * @return bool */ public function deleteElement($hlblockID, $ID = null) @@ -257,9 +277,9 @@ public function deleteElement($hlblockID, $ID = null) /** * Обновляет элемент хайлоад инфоблока - * @param integer $hlblockID - идентификатор таблицы HL - * @param integer $ID - идентификатор элемента - * @param array $arFields - обновляемые поля + * @param integer $hlblockID идентификатор таблицы HL + * @param integer $ID идентификатор элемента + * @param array $arFields обновляемые поля * @return bool */ public function updateElement($hlblockID, $ID = null, $arFields = []) @@ -278,14 +298,14 @@ public function updateElement($hlblockID, $ID = null, $arFields = []) /** * Возвращает значения поля * @param string $fieldName название поля UF_NAME - * @param int $fieldID идентификатор значения + * @param int $enumId идентификатор значения * @return bool|mixed */ - public function getFieldValue($fieldName = '', $fieldID = null) + public function getFieldValue($fieldName = '', $enumId = null) { $arResult = $this->getFieldValuesList([], [ 'USER_FIELD_NAME' => $fieldName, - 'ID' => $fieldID, + 'ID' => $enumId, ]); if ($arResult[0]) { return $arResult[0]; @@ -334,11 +354,22 @@ public function getFieldValueByCode($fieldName = '', $codeName = '') return false; } + /** + * Возвращает все значения поля $fieldId + * @param string $fieldId ID поля UF_ID + * @param array $arSort сортировка + * @return array + */ + public function getFieldValuesByFieldId($fieldId = null, $arSort = ['SORT' => 'ASC']) + { + return $this->getFieldValuesList($arSort, ['USER_FIELD_ID' => $fieldId]); + } + /** * Создает таблицу для HighloadBlock - * @param string $nameHLBlock - название HL-блока, должно начинаться с заглавной буквы и состоять только из латинских букв и цифр - * @param string $tableName - название таблицы для HL-блока, должно состоять только из строчных латинских букв, цифр и знака подчеркивания - * @return bool|int - id HL-блока + * @param string $nameHLBlock название HL-блока, должно начинаться с заглавной буквы и состоять только из латинских букв и цифр + * @param string $tableName название таблицы для HL-блока, должно состоять только из строчных латинских букв, цифр и знака подчеркивания + * @return bool|int id HL-блока */ public function create($nameHLBlock, $tableName) { @@ -359,8 +390,8 @@ public function create($nameHLBlock, $tableName) /** * Добавляет поле в HighloadBlock - * @param integer $hlblockID - идентификатор HighloadBlock - * @param array $arFields - поля, подробности https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3496 + * @param integer $hlblockID идентификатор HighloadBlock + * @param array $arFields поля, подробности https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3496 * @return int * @throws $LAST_ERROR */ @@ -380,7 +411,7 @@ public function addField($hlblockID, $arFields) /** * Возвращает поля таблица - * @param int $hlblockID - идентификатор таблицы HL + * @param int $hlblockID идентификатор таблицы HL * @return \Bitrix\Main\ORM\Fields\Field[]|bool * @since 1.0.2 */ @@ -412,7 +443,7 @@ public function updateFieldByName($hlblockID, $ufName, $arFields) ] )->GetNext(); - if(!$field) return false; + if (!$field) return false; return $this->updateField($hlblockID, $field['ID'], $arFields); } @@ -434,7 +465,7 @@ public function updateField($hlblockID, $fieldId, $arFields) /** * Удаляет HighloadBlock по $hlblockID - * @param integer $hlblockID - идентификатор HighloadBlock + * @param integer $hlblockID идентификатор HighloadBlock * @return \Bitrix\Main\DB\Result|Entity\DeleteResult */ public function deleteHighloadBlock($hlblockID) @@ -465,7 +496,7 @@ public function removeFields($hlblockID, $kFields) $fileFields = []; $fields = $USER_FIELD_MANAGER->getUserFields(HL\HighloadBlockTable::compileEntityId($hlblockID)); foreach ($fields as $name => $field) { - if(!\in_array($name, $kFields)) continue; + if (!\in_array($name, $kFields)) continue; if ($field['USER_TYPE']['BASE_TYPE'] === 'file') { $fileFields[] = $name; } @@ -511,7 +542,7 @@ public function removeFields($hlblockID, $kFields) $connection = Application::getConnection(); foreach ($fields as $name => $field) { - if(!\in_array($name, $kFields)) continue; + if (!\in_array($name, $kFields)) continue; // delete from uf registry if ($field['USER_TYPE']['BASE_TYPE'] === 'enum') { $enumField = new \CUserFieldEnum; @@ -521,7 +552,7 @@ public function removeFields($hlblockID, $kFields) $connection->query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = " . $field['ID']); $connection->query("DELETE FROM b_user_field WHERE ID = " . $field['ID']); - // if multiple - drop utm table + // if multiple drop utm table if ($field['MULTIPLE'] == 'Y') { $utmTableName = HL\HighloadBlockTable::getMultipleValueTableName($hlblock, $field); $connection->dropTable($utmTableName); diff --git a/README.md b/README.md index e353cfa..0f7c0e2 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,45 @@ # HLHelpers + Набор методов для работы с highloadblock 1С-Битрикс -Содержание ----- -* [Как установить](#install) -* Работа с HighloadBlockTable - + [Получить все highloadblock](#ListHighloadBlock) - + [Создать HighloadBlockTable](#CreateHighloadBlock) - + [Добавить поле в HighloadBlockTable](#AddFieldHighloadBlock) - + [Обновить поле в HighloadBlockTable по ID](#UpdateFieldHighloadBlock) - + [Обновить поле в HighloadBlockTable по UF_NAME](#UpdateFieldHighloadBlockByUF) - + [Удалить поле или поля в HighloadBlockTable](#DeleteFieldHighloadBlock) - + [Удалить HighloadBlockTable](#DeleteHighloadBlock) -* Работа с элементами - + [Получить все элементы](#ListElements) - + [Получить количество строк](#CountElements) - + [Добавить новый элемент](#AddElement) - + [Обновить элемент](#UpdateElement) - + [Удалить элемент](#DelElement) -* Работа с полем вида список - + [Получить все значения списка](#GetValuesFieldList) - + [Получить 1 значение списка](#GetValueFieldList) - + [Получить 1 значение списка по его XML_ID](#GetValueFieldListByXmlId) -* [Гибкость в работе с HighloadBlock](#FlexHighloadBlock) -* [Гибкость в работа с полем "список"](#FlexFieldValuesList) +## Содержание + +- [Как установить](#install) +- Работа с HighloadBlockTable + - [Получить все highloadblock](#ListHighloadBlock) + - [Создать HighloadBlockTable](#CreateHighloadBlock) + - [Добавить поле в HighloadBlockTable](#AddFieldHighloadBlock) + - [Обновить поле в HighloadBlockTable по ID](#UpdateFieldHighloadBlock) + - [Обновить поле в HighloadBlockTable по UF_NAME](#UpdateFieldHighloadBlockByUF) + - [Удалить поле или поля в HighloadBlockTable](#DeleteFieldHighloadBlock) + - [Удалить HighloadBlockTable](#DeleteHighloadBlock) +- Работа с элементами + - [Получить все элементы](#ListElements) + - [Получить количество строк](#CountElements) + - [Добавить новый элемент](#AddElement) + - [Обновить элемент](#UpdateElement) + - [Удалить элемент](#DelElement) +- Работа с полем вида список + - [Получить все значения списка](#GetValuesFieldList) + - [Получить 1 значение списка](#GetValueFieldList) + - [Получить 1 значение списка по его XML_ID](#GetValueFieldListByXmlId) +- [Гибкость в работе с HighloadBlock](#FlexHighloadBlock) +- [Гибкость в работа с полем "список"](#FlexFieldValuesList) ## Установка #### Способ 1: -* Переходим в папку `/local/php_interface/lib/` -* `composer require darkfriend/hlhelpers` -* В файле `/local/php_interface/init.php` пишем ```require __DIR__.'/lib/vendor/autoload.php'``` -* Готово + +- Переходим в папку `/local/php_interface/lib/` +- `composer require darkfriend/hlhelpers` +- В файле `/local/php_interface/init.php` пишем `require __DIR__.'/lib/vendor/autoload.php'` +- Готово #### Способ 2: -* Копируем репозиторий в папку `/local/php_interface/lib/` -* В файле `/local/php_interface/init.php` пишем ```require __DIR__.'/lib/hlhelpers/HLHelpers.php'``` -* Готово + +- Копируем репозиторий в папку `/local/php_interface/lib/` +- В файле `/local/php_interface/init.php` пишем `require __DIR__.'/lib/hlhelpers/HLHelpers.php'` +- Готово ## Как пользоваться? @@ -168,20 +171,20 @@ ### Получить все highloadblock ```php -getList(); print_r($arHL); ?> - ``` - +``` + ### Получить все элементы highloadblock ```php -getElementList($hlID); print_r($arHlElements); ?> @@ -190,7 +193,7 @@ ### Получить количество строк в highloadblock ```php -1]; @@ -198,11 +201,11 @@ print_r($totalElements); ?> ``` - + ### Добавить новый элемент в highloadblock ```php -значение @@ -210,7 +213,7 @@ 'UF_FIELD1' => 'VALUE' ... ]; - + $id = HLHelpers::getInstance()->addElement($hlID, $arFields); var_dump($id); // при false ошибка будет в HLHelpers::$LAST_ERROR @@ -220,7 +223,7 @@ ### Обновить элемент в highloadblock ```php - 'VALUE2' ... ]; - + $isUpd = HLHelpers::getInstance()->updateElement($hlID, $elID, $arFields); var_dump($isUpd); // при false ошибка будет в HLHelpers::$LAST_ERROR @@ -239,11 +242,11 @@ ### Удалить элемент из highloadblock ```php -deleteElement($hlID, $elID); var_dump($isDel); // при false ошибка будет в HLHelpers::$LAST_ERROR @@ -255,10 +258,10 @@ ### Получить все значения поля список у highloadblock ```php -getFieldValues($fieldName); print_r($arValues); ?> @@ -267,11 +270,11 @@ ### Получить значение списка из highloadblock ```php -getFieldValue($fieldName,$valID); print_r($arValue); ?> @@ -280,11 +283,11 @@ ### Получить значение списка по его XML_ID из highloadblock ```php -getFieldValueByCode($fieldName,$codeName); print_r($arValue); ?> @@ -293,10 +296,12 @@ ## Гибкость в работе с highloadblock Для обеспечения лучшей гибкости использовать: -* `getEntityTable($hlblockID)` -* `getElementsResource($hlblockID,$arFilter=[],$arOrder=["ID" => "ASC"],$arSelect=['*'],$arMoreParams=[])` + +- `getEntityTable($hlblockID)` +- `getElementsResource($hlblockID,$arFilter=[],$arOrder=["ID" => "ASC"],$arSelect=['*'],$arMoreParams=[])` ## Гибкость в работе с полем вида "список" у highloadblock Для обеспечения лучшей гибкости использовать: -* `getFieldValuesList($arSort=['SORT'=>'ASC'],$arFilter=[])` \ No newline at end of file + +- `getFieldValuesList($arSort=['SORT'=>'ASC'],$arFilter=[])`