Your IP : 3.128.24.183


Current Path : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/disk/lib/internals/
Upload File :
Current File : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/disk/lib/internals/sharing.php

<?php
namespace Bitrix\Disk\Internals;

use Bitrix\Main\Entity;
use Bitrix\Main\Entity\Result;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);

/**
 * Class SharingTable
 * 
 * Fields:
 * <ul>
 * <li> ID int mandatory
 * <li> PARENT_ID int
 * <li> CREATED_BY int
 * <li> FROM_ENTITY string
 * <li> TO_ENTITY string
 * <li> LINK_STORAGE_ID int
 * <li> LINK_OBJECT_ID int
 * <li> REAL_OBJECT_ID int mandatory
 * <li> REAL_STORAGE_ID int mandatory
 * <li> DESCRIPTION string optional
 * <li> CAN_FORWARD int optional
 * <li> TYPE int mandatory
 * <li> STATUS int mandatory
 * <li> TASK_NAME string mandatory
 * </ul>
 *
 * @package Bitrix\Disk
 **/

final class SharingTable extends DataManager
{
	const STATUS_IS_UNREPLIED = 2;
	const STATUS_IS_APPROVED  = 3;
	const STATUS_IS_DECLINED  = 4;

	const TYPE_TO_USER       = 2;
	const TYPE_TO_GROUP      = 3;
	const TYPE_TO_DEPARTMENT = 4;

	public static function checkFields(Result $result, $primary, array $data)
	{
		parent::checkFields($result, $primary, $data);

		if(!$result->isSuccess())
		{
			return;
		}

		$query = new Entity\Query(static::getEntity());
		$res = $query
			->setSelect(array('ID', 'STATUS'))
			->setFilter(array(
				'=TO_ENTITY' => $data['TO_ENTITY'],
				'=REAL_OBJECT_ID' => $data['REAL_OBJECT_ID'],
			))
			->setLimit(2)
			->exec()
		;
		while ($existing = $res->fetch())
		{
			if(!isset($primary) || $primary != $existing['ID'])
			{
				if($existing['STATUS'] == self::STATUS_IS_DECLINED)
				{
					static::delete($existing['ID']);
				}
				else
				{
					$result->addError(new Entity\EntityError(
						Loc::getMessage("DISK_SHARING_ENTITY_ERROR_NON_UNIQUE")
					));
				}
			}
		}
	}

	public static function getTableName()
	{
		return 'b_disk_sharing';
	}

	public static function getMap()
	{
		return array(
			'ID' => array(
				'data_type' => 'integer',
				'primary' => true,
				'autocomplete' => true,
			),
			'CREATED_BY' => array(
				'data_type' => 'integer',
			),
			'CREATE_USER' => array(
				'data_type' => 'Bitrix\Main\UserTable',
				'reference' => array(
					'=this.CREATED_BY' => 'ref.ID'
				),
			),
			'TO_ENTITY' => array(
				'data_type' => 'string',
				'required' => true,
			),
			'FROM_ENTITY' => array(
				'data_type' => 'string',
				'required' => true,
			),
			'PARENT_ID' => array(
				'data_type' => 'integer',
			),
			'LINK_OBJECT_ID' => array(
				'data_type' => 'integer',
			),
			'LINK_STORAGE_ID' => array(
				'data_type' => 'integer',
			),
			'LINK_STORAGE' => array(
				'data_type' => 'Bitrix\Disk\Internals\StorageTable',
				'reference' => array(
					'=this.LINK_STORAGE_ID' => 'ref.ID'
				),
			),
			'LINK_OBJECT' => array(
				'data_type' => 'Bitrix\Disk\Internals\ObjectTable',
				'reference' => array(
					'=this.LINK_OBJECT_ID' => 'ref.ID'
				),
			),
			'REAL_STORAGE_ID' => array(
				'data_type' => 'integer',
				'required' => true,
			),
			'REAL_STORAGE' => array(
				'data_type' => 'Bitrix\Disk\Internals\StorageTable',
				'reference' => array(
					'=this.REAL_STORAGE_ID' => 'ref.ID'
				),
			),
			'REAL_OBJECT_ID' => array(
				'data_type' => 'integer',
				'required' => true,
			),
			'REAL_OBJECT' => array(
				'data_type' => 'Bitrix\Disk\Internals\ObjectTable',
				'reference' => array(
					'=this.REAL_OBJECT_ID' => 'ref.ID'
				),
			),
			'DESCRIPTION' => array(
				'data_type' => 'text',
			),
			'CAN_FORWARD' => array(
				'data_type' => 'boolean',
				'values' => array(0, 1),
				'default_value' => 0,
			),
			'TYPE' => array(
				'data_type' => 'enum',
				'required' => true,
				'values' => self::getListOfTypeValues(),
			),
			'STATUS' => array(
				'data_type' => 'enum',
				'values' => self::getListOfStatusValues(),
				'default_value' => self::STATUS_IS_UNREPLIED,
			),
			'TASK_NAME' => array(
				'data_type' => 'string',
				'required' => true,
			),
			'PATH_PARENT_REAL_OBJECT' => array(
				'data_type' => '\Bitrix\Disk\Internals\ObjectPathTable',
				'reference' => array(
					'=this.REAL_OBJECT_ID' => 'ref.PARENT_ID'
				),
				'join_type' => 'INNER',
			),
			'PATH_CHILD_REAL_OBJECT' => array(
				'data_type' => '\Bitrix\Disk\Internals\ObjectPathTable',
				'reference' => array(
					'=this.REAL_OBJECT_ID' => 'ref.OBJECT_ID'
				),
				'join_type' => 'LEFT',
			),
			'PATH_CHILD_REAL_OBJECT_SOFT' => array(
				'data_type' => '\Bitrix\Disk\Internals\ObjectPathTable',
				'reference' => array(
					'=this.REAL_OBJECT_ID' => 'ref.OBJECT_ID'
				),
			),
			'PATH_PARENT_LINK_OBJECT' => array(
				'data_type' => '\Bitrix\Disk\Internals\ObjectPathTable',
				'reference' => array(
					'=this.LINK_OBJECT_ID' => 'ref.PARENT_ID'
				),
				'join_type' => 'INNER',
			),
			'PATH_CHILD_LINK_OBJECT' => array(
				'data_type' => '\Bitrix\Disk\Internals\ObjectPathTable',
				'reference' => array(
					'=this.LINK_OBJECT_ID' => 'ref.OBJECT_ID'
				),
				'join_type' => 'INNER',
			),
		);
	}

	public static function getListOfStatusValues()
	{
		return array(self::STATUS_IS_DECLINED, self::STATUS_IS_APPROVED, self::STATUS_IS_UNREPLIED);
	}

	public static function getListOfTypeValues()
	{
		return array(self::TYPE_TO_DEPARTMENT, self::TYPE_TO_GROUP, self::TYPE_TO_USER);
	}

	/**
	 * @inheritdoc
	 */
	public static function updateBatch(array $fields, array $filter)
	{
		parent::updateBatch($fields, $filter);
	}

}