Your IP : 3.148.192.32


Current Path : /var/www/axolotl/data/www/msk.axolotls.ru/bitrix/modules/rpa/lib/model/
Upload File :
Current File : /var/www/axolotl/data/www/msk.axolotls.ru/bitrix/modules/rpa/lib/model/fieldtable.php

<?php

namespace Bitrix\Rpa\Model;

use Bitrix\Main\ORM;
use Bitrix\Main\Result;

class FieldTable extends ORM\Data\DataManager
{
	public const VISIBILITY_VISIBLE = 'visible';
	public const VISIBILITY_EDITABLE = 'editable';
	public const VISIBILITY_MANDATORY = 'mandatory';
	public const VISIBILITY_KANBAN = 'kanban';
	public const VISIBILITY_CREATE = 'create';

	public static function getTableName(): string
	{
		return 'b_rpa_field';
	}

	public static function getMap(): array
	{
		return [
			(new ORM\Fields\IntegerField('ID'))
				->configurePrimary()
				->configureAutocomplete(),
			(new ORM\Fields\IntegerField('TYPE_ID'))
				->configureRequired(),
			(new ORM\Fields\IntegerField('STAGE_ID'))
				->configureRequired(),
			(new ORM\Fields\Relations\Reference(
				'STAGE',
				StageTable::class,
				['=this.STAGE_ID' => 'ref.ID']
			)),
			(new ORM\Fields\StringField('FIELD'))
				->configureRequired(),
			(new ORM\Fields\EnumField('VISIBILITY'))
				->configureRequired()
				->configureValues(static::getVisibilityTypes()),
		];
	}

	public static function removeByTypeId(int $typeId): Result
	{
		$result = new Result();

		$list = static::getList([
			'filter' => [
				'=TYPE_ID' => $typeId,
			],
		]);

		while($item = $list->fetch())
		{
			$deleteResult = static::delete($item['ID']);
			if(!$deleteResult->isSuccess())
			{
				$result->addErrors($deleteResult->getErrors());
			}
		}

		return $result;
	}

	public static function deleteByStageId(int $stageId): Result
	{
		$result = new Result();

		$list = static::getList([
			'filter' => [
				'=STAGE_ID' => $stageId,
			],
		]);

		while($item = $list->fetch())
		{
			$deleteResult = static::delete($item['ID']);
			if(!$deleteResult->isSuccess())
			{
				$result->addErrors($deleteResult->getErrors());
			}
		}

		return $result;
	}

	public static function getGroupedList(int $typeId, int $stageId, bool $isFullInfo = false): array
	{
		$settings = [];
		$list = static::getList([
			'filter' => [
				'=STAGE_ID' => $stageId,
				'=TYPE_ID' => $typeId,
			]
		]);
		while($field = $list->fetch())
		{
			$settings[$field['VISIBILITY']][$field['FIELD']] = ($isFullInfo ? $field : true);
		}

		return $settings;
	}

	public static function mergeSettings(int $typeId, int $stageId, array $fields, string $visibilityType = null): Result
	{
		$result = new Result();

		$skipAdding = [];
		$currentSettings = static::getGroupedList($typeId, $stageId, true);
		foreach($currentSettings as $visibility => $settings)
		{
			if(!empty($visibilityType) && $visibility !== $visibilityType)
			{
				continue;
			}
			foreach($settings as $field => $setting)
			{
				if(!isset($fields[$visibility]) || !in_array($field, $fields[$visibility], true))
				{
					static::delete($setting['ID']);
				}
				else
				{
					$skipAdding[$visibility][$field] = $field;
				}
			}
		}
		foreach($fields as $visibility => $visibilityFields)
		{
			foreach($visibilityFields as $field)
			{
				if(!isset($skipAdding[$visibility][$field]))
				{
					$addResult = static::add([
						'TYPE_ID' => $typeId,
						'STAGE_ID' => $stageId,
						'FIELD' => $field,
						'VISIBILITY' => $visibility,
					]);
					if(!$addResult->isSuccess())
					{
						$result->addErrors($addResult->getErrors());
					}
				}
			}
		}

		return $result;
	}

	public static function getVisibilityTypes(): array
	{
		return [
			static::VISIBILITY_VISIBLE,
			static::VISIBILITY_EDITABLE,
			static::VISIBILITY_MANDATORY,
			static::VISIBILITY_KANBAN,
			static::VISIBILITY_CREATE,
		];
	}
}