Your IP : 3.147.28.158


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

<?php

namespace Bitrix\Disk\Internals;

use Bitrix\Main;
use Bitrix\Disk\TypeFile;
use Bitrix\Disk\Volume;

/**
 * Class VolumeTable
 *
 * Fields:
 * <ul>
 * <li> ID int mandatory
 * <li> INDICATOR_TYPE string(255) mandatory
 * <li> OWNER_ID int mandatory
 * <li> CREATE_TIME datetime optional
 * <li> TITLE string(255) optional
 * <li> FILE_SIZE float optional
 * <li> FILE_COUNT float optional
 * <li> VERSION_COUNT float optional
 * <li> PREVIEW_SIZE float optional
 * <li> PREVIEW_COUNT float optional
 * <li> ATTACHED_COUNT float optional
 * <li> LINK_COUNT float optional
 * <li> SHARING_COUNT float optional
 * <li> UNNECESSARY_VERSION_SIZE float optional
 * <li> UNNECESSARY_VERSION_COUNT float optional
 * <li> STORAGE_ID int optional
 * <li> MODULE_ID int optional
 * <li> FOLDER_ID int optional
 * <li> PARENT_ID int optional
 * <li> USER_ID int optional
 * <li> GROUP_ID int optional
 * <li> TYPE_FILE int optional
 * <li> ENTITY_TYPE string(100) optional
 * <li> ENTITY_ID string(12) optional
 * <li> IBLOCK_ID int optional
 * <li> DATA_PREPARED int optional
 * <li> COLLECTED int optional
 * <li> DATA text optional
 * <li> AGENT_LOCK int optional
 * <li> DROP_UNNECESSARY_VERSION int optional
 * <li> DROP_TRASHCAN int optional
 * <li> DROP_FOLDER int optional
 * <li> EMPTY_FOLDER int optional
 * <li> DROPPED_FILE_COUNT float optional
 * <li> DROPPED_VERSION_COUNT float optional
 * <li> DROPPED_FOLDER_COUNT float optional
 * <li> LAST_FILE_ID int optional
 * <li> FAIL_COUNT int optional
 * <li> LAST_ERROR string(255) optional
 * </ul>
 *
 * @package Bitrix\Disk
 **/


final class VolumeTable extends DataManager
{
	/**
	 * Returns DB table name for entity
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_disk_volume';
	}

	/**
	 * Returns entity map definition.
	 * @return array
	 */
	public static function getMap()
	{
		return array(
			'ID' => array(
				'data_type' => 'integer',
				'primary' => true,
				'autocomplete' => true,
			),
			'INDICATOR_TYPE' => array(
				'data_type' => 'string',
			),
			'OWNER_ID' => array(
				'data_type' => 'integer',
				'default_value' => \Bitrix\Disk\SystemUser::SYSTEM_USER_ID,
			),
			'CREATE_TIME' => array(
				'data_type' => 'datetime',
				'default_value' => function() {
					return new Main\Type\DateTime();
				},
			),
			'TITLE' => array(
				'data_type' => 'string',
			),
			'FILE_SIZE' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'FILE_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'DISK_SIZE' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'DISK_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'VERSION_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'PREVIEW_SIZE' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'PREVIEW_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'ATTACHED_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'LINK_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'SHARING_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'UNNECESSARY_VERSION_SIZE' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'UNNECESSARY_VERSION_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'PERCENT' => array(
				'data_type' => 'float',
				'default_value' => 0,
			),
			'STORAGE_ID' => array(
				'data_type' => 'integer',
			),
			'STORAGE' => array(
				'data_type' => '\Bitrix\Disk\Internals\StorageTable',
				'reference' => array(
					'=this.STORAGE_ID' => 'ref.ID'
				),
				'join_type' => 'OUTER',
			),
			'MODULE_ID' => array(
				'data_type' => 'string',
			),
			'FOLDER_ID' => array(
				'data_type' => 'integer',
			),
			'FOLDER' => array(
				'data_type' => '\Bitrix\Disk\Internals\FolderTable',
				'reference' => array(
					'=this.FOLDER_ID' => 'ref.ID'
				),
				'join_type' => 'OUTER',
			),
			'PARENT_ID' => array(
				'data_type' => 'integer',
			),
			'USER_ID' => array(
				'data_type' => 'integer',
			),
			'GROUP_ID' => array(
				'data_type' => 'integer',
			),
			'ENTITY_TYPE' => array(
				'data_type' => 'string',
			),
			'ENTITY_ID' => array(
				'data_type' => 'string',
			),
			'TYPE_FILE' => array(
				'data_type' => 'enum',
				'values' => TypeFile::getListOfValues(),
			),
			'IBLOCK_ID' => array(
				'data_type' => 'integer',
			),
			'COLLECTED' => array(
				'data_type' => 'enum',
				'values' => array(0, 1),
				'default_value' => 0,
			),
			'DATA' => array(
				'data_type' => 'text',
			),
			'AGENT_LOCK' => array(
				'data_type' => 'enum',
				'values' => array(
					Volume\Task::TASK_STATUS_NONE,
					Volume\Task::TASK_STATUS_WAIT,
					Volume\Task::TASK_STATUS_RUNNING,
					Volume\Task::TASK_STATUS_DONE,
					Volume\Task::TASK_STATUS_CANCEL,
				),
				'default_value' => Volume\Task::TASK_STATUS_NONE,
			),
			'DROP_UNNECESSARY_VERSION' => array(
				'data_type' => 'enum',
				'values' => array(
					Volume\Task::TASK_STATUS_NONE,
					Volume\Task::TASK_STATUS_WAIT,
					Volume\Task::TASK_STATUS_RUNNING,
					Volume\Task::TASK_STATUS_DONE,
					Volume\Task::TASK_STATUS_CANCEL,
				),
				'default_value' => Volume\Task::TASK_STATUS_NONE,
			),
			'DROP_TRASHCAN' => array(
				'data_type' => 'enum',
				'values' => array(
					Volume\Task::TASK_STATUS_NONE,
					Volume\Task::TASK_STATUS_WAIT,
					Volume\Task::TASK_STATUS_RUNNING,
					Volume\Task::TASK_STATUS_DONE,
					Volume\Task::TASK_STATUS_CANCEL,
				),
				'default_value' => Volume\Task::TASK_STATUS_NONE,
			),
			'DROP_FOLDER' => array(
				'data_type' => 'enum',
				'values' => array(
					Volume\Task::TASK_STATUS_NONE,
					Volume\Task::TASK_STATUS_WAIT,
					Volume\Task::TASK_STATUS_RUNNING,
					Volume\Task::TASK_STATUS_DONE,
					Volume\Task::TASK_STATUS_CANCEL,
				),
				'default_value' => Volume\Task::TASK_STATUS_NONE,
			),
			'EMPTY_FOLDER' => array(
				'data_type' => 'enum',
				'values' => array(
					Volume\Task::TASK_STATUS_NONE,
					Volume\Task::TASK_STATUS_WAIT,
					Volume\Task::TASK_STATUS_RUNNING,
					Volume\Task::TASK_STATUS_DONE,
					Volume\Task::TASK_STATUS_CANCEL,
				),
				'default_value' => Volume\Task::TASK_STATUS_NONE,
			),
			'DROPPED_FILE_COUNT' => array(
				'data_type' => 'integer',
			),
			'DROPPED_VERSION_COUNT' => array(
				'data_type' => 'integer',
			),
			'DROPPED_FOLDER_COUNT' => array(
				'data_type' => 'integer',
			),
			'LAST_FILE_ID' => array(
				'data_type' => 'integer',
			),
			'FAIL_COUNT' => array(
				'data_type' => 'integer',
				'default_value' => 0,
			),
			'LAST_ERROR' => array(
				'data_type' => 'string',
			),
		);
	}

	/**
	 * Delete storage event handler.
	 * @param int $storageId Storage id.
	 * @param int $deletedBy Dropped by id.
	 * @internal
	 * @return void
	 */
	public static function onStorageDelete($storageId, $deletedBy = \Bitrix\Disk\SystemUser::SYSTEM_USER_ID)
	{
		try
		{
			if ($storageId > 0)
			{
				// remove all data relative to storage
				static::deleteBatch(array('STORAGE_ID' => $storageId));
			}
		}
		catch(\Exception $e)
		{
		}
	}

	/**
	 * Delete user event handler.
	 * @param int $userId User id.
	 * @internal
	 * @return void
	 */
	public static function onUserDelete($userId)
	{
		try
		{
			if ($userId > 0)
			{
				// remove all user data
				static::deleteBatch(array('OWNER_ID' => $userId));
			}
		}
		catch(\Exception $e)
		{
		}
	}

		/**
	 * Deletes rows by filter.
	 * @param array $filter Filter does not look like filter in getList. It depends by current implementation.
	 * @internal
	 * @return void
	 */
	public static function deleteBatch(array $filter)
	{
		$connection = Main\Application::getConnection();
		$tableName = static::getTableName();

		$filterSql = array();
		$fieldList = static::getMap();
		foreach ($filter as $key => $val)
		{
			if (isset($fieldList[$key]))
			{
				if ($fieldList[$key]['data_type'] === 'integer' || $fieldList[$key]['data_type'] === 'enum')
				{
					$val = (int)$val;
					$filterSql[] = "{$key} = {$val}";
				}
				elseif ($fieldList[$key]['data_type'] === 'string')
				{
					$val = $connection->getSqlHelper()->forSql($val);
					$filterSql[] = "{$key} = '{$val}''";
				}
			}
		}
		if (count($filterSql) > 0)
		{
			$connection->queryExecute("DELETE FROM {$tableName} WHERE ".implode(' AND ', $filterSql));
		}
		else
		{
			$connection->truncateTable($tableName);
		}
	}

	/**
	 * Removes all data
	 * @return void
	 */
	public static function purify()
	{
		Main\Application::getConnection()->truncateTable(static::getTableName());
	}

	/**
	 * Returns temporally table name.
	 * @return string
	 */
	public static function getTemporallyName()
	{
		return 'b_disk_volume_tmp';
	}

	/**
	 * Drops Temporally table
	 * @return void
	 */
	public static function dropTemporally()
	{
		$connection = Main\Application::getConnection();
		$tableName = static::getTemporallyName();
		if ($connection->isTableExists($tableName))
		{
			$connection->query("DROP TABLE {$tableName}");
		}
	}

	/**
	 * Creates database structure
	 * @return void
	 */
	public static function createTemporally()
	{
		$tableName = static::getTemporallyName();
		$sourceTableName = static::getTableName();
		Main\Application::getConnection()->query("CREATE TEMPORARY TABLE IF NOT EXISTS {$tableName} LIKE {$sourceTableName}");
	}

	/**
	 * Checks data base structure
	 * @return bool
	 */
	public static function checkTemporally()
	{
		return Main\Application::getConnection()->isTableExists(static::getTemporallyName());
	}

	/**
	 * Removes all data
	 * @return void
	 */
	public static function clearTemporally()
	{
		Main\Application::getConnection()->truncateTable(static::getTemporallyName());
	}
}