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=[])`