Your IP : 3.144.6.159


Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/documentgenerator/lib/model/
Upload File :
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/documentgenerator/lib/model/document.php

<?php

namespace Bitrix\DocumentGenerator\Model;

use Bitrix\DocumentGenerator\DataProvider;
use Bitrix\DocumentGenerator\DataProviderManager;
use Bitrix\DocumentGenerator\Integration\Bitrix24Manager;
use Bitrix\Main;
use Bitrix\Main\Entity\Event;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

class DocumentTable extends FileModel
{
	protected static $fileFieldNames = [
		'FILE_ID', 'IMAGE_ID', 'PDF_ID',
	];

	/**
	 * Returns DB table name for entity.
	 *
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_documentgenerator_document';
	}

	/**
	 * Returns entity map definition.
	 *
	 * @return array
	 */
	public static function getMap()
	{
		return [
			new Main\Entity\IntegerField('ID', [
				'primary' => true,
				'autocomplete' => true,
			]),
			new Main\Entity\StringField('TITLE', [
				'required' => true,
			]),
			new Main\Entity\StringField('NUMBER', [
				'required' => true,
			]),
			new Main\Entity\IntegerField('TEMPLATE_ID', [
				'required' => true,
			]),
			new Main\Entity\StringField('PROVIDER', [
				'validation' => function()
				{
					return [
						function($value)
						{
							if(DataProviderManager::checkProviderName($value) || empty($value))
							{
								return true;
							}
							else
							{
								return Loc::getMessage('DOCUMENTGENERATOR_MODEL_TEMPLATE_CLASS_VALIDATION', ['#CLASSNAME#' => $value, '#PARENT#' => DataProvider::class]);
							}
						},
					];
				},
			]),
			new Main\Entity\StringField('VALUE', [
				'required' => true,
			]),
			new Main\Entity\IntegerField('FILE_ID', [
				'required' => true,
			]),
			new Main\Entity\IntegerField('IMAGE_ID'),
			new Main\Entity\IntegerField('PDF_ID'),
			new Main\Entity\DatetimeField('CREATE_TIME', [
				'required' => true,
				'default_value' => function(){return new Main\Type\DateTime();},
			]),
			new Main\Entity\DatetimeField('UPDATE_TIME', [
				'required' => true,
				'default_value' => function(){return new Main\Type\DateTime();},
			]),
			new Main\Entity\TextField('VALUES', [
				'serialized' => true
			]),
			new Main\Entity\IntegerField('CREATED_BY'),
			new Main\Entity\IntegerField('UPDATED_BY'),
			new Main\Entity\ReferenceField(
				'TEMPLATE',
				'\Bitrix\DocumentGenerator\Model\Template',
				['=this.TEMPLATE_ID' => 'ref.ID']
			),
		];
	}

	public static function onAfterDelete(Event $event)
	{
		$eventData = $event->getParameters();
		ExternalLinkTable::deleteByDocumentId($eventData['primary']['ID']);
		return parent::onAfterDelete($event);
	}

	public static function onAfterAdd(Event $event)
	{
		Bitrix24Manager::increaseDocumentsCount();
	}

	/**
	 * @param $oldProvider
	 * @param $oldValue
	 * @param $newProvider
	 * @param $newValue
	 */
	public static function transferOwnership($oldProvider, $oldValue, $newProvider, $newValue)
	{
		if(!DataProviderManager::checkProviderName($oldProvider) || !DataProviderManager::checkProviderName($newProvider))
		{
			return;
		}

		$filter = [
			'=PROVIDER' => $oldProvider,
			'=VALUE' => $oldValue,
		];

		$entity = static::getEntity();
		$connection = $entity->getConnection();

		$connection->query(sprintf(
			'UPDATE %s SET %s WHERE %s',
			$connection->getSqlHelper()->quote($entity->getDbTableName()),
			$connection->getSqlHelper()->prepareUpdate($entity->getDbTableName(), [
				'PROVIDER' => mb_strtolower($newProvider),
				'VALUE' => $newValue,
			])[0],
			Main\ORM\Query\Query::buildFilterSql($entity, $filter)
		));
	}

	/**
	 * @internal
	 * @param array $filter
	 * @return Main\Result
	 */
	public static function deleteList(array $filter)
	{
		$result = new Main\Result();
		$documents = static::getList(['select' => ['ID'], 'filter' => $filter]);
		while($document = $documents->fetch())
		{
			$deleteResult = static::delete($document['ID']);
			if(!$deleteResult->isSuccess())
			{
				$result->addErrors($deleteResult->getErrors());
			}
		}

		return $result;
	}
}