Your IP : 3.139.61.71


Current Path : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/tasks/lib/item/
Upload File :
Current File : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/tasks/lib/item/systemlog.php

<?
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage tasks
 * @copyright 2001-2016 Bitrix
 */

namespace Bitrix\Tasks\Item;

use Bitrix\Tasks\Internals\SystemLogTable;
use Bitrix\Tasks\UI;
use Bitrix\Tasks\Util\Type;
use Bitrix\Tasks\Util\Error;
use Bitrix\Main\Type\DateTime;
use Bitrix\Tasks\Util\User;

final class SystemLog extends \Bitrix\Tasks\Item
{
	const TYPE_NOTICE = 1;
	const TYPE_WARNING = 2;
	const TYPE_ERROR = 3;

	public static function getDataSourceClass()
	{
		return SystemLogTable::getClass();
	}

	protected static function generateMap(array $parameters = array())
	{
		$map = parent::generateMap(array(
			'EXCLUDE' => array(
				// will be overwritten below
				'ERROR' => true,
			)
		));

		$map->placeFields(array(
			// override some tablet fields
			'ERROR' => new Field\Collection\Error(array(
				'NAME' => 'ERROR',

				'SOURCE' => Field\Scalar::SOURCE_TABLET,
				'DB_READABLE' => true,
				'DB_WRITABLE' => true,
			))
		));

		return $map;
	}

	public function prepareData($result)
	{
		$id = $this->getId();
		if(!$id)
		{
			$now = new \Bitrix\Main\Type\DateTime();

			if(!$this->isFieldModified('CREATED_DATE')) // created date was not set manually
			{
				$this['CREATED_DATE'] = $now;
			}
			if(!$this->isFieldModified('TYPE')) // set type from error collection contents
			{
				$this['TYPE'] = static::TYPE_NOTICE;
				if(!$this['ERROR']->isEmpty())
				{
					$this['TYPE'] = $this['ERROR']->filter(array('TYPE' => Error::TYPE_FATAL))->isEmpty() ? static::TYPE_WARNING : static::TYPE_ERROR;
				}
			}
		}

		return $result;
	}

	/**
	 * Rotate log, remove records that are older than month ago
	 *
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Exception
	 */
	public static function rotate()
	{
		foreach(SystemLogTable::getList(array(
			'filter' => array(
				'<CREATED_DATE' => UI::formatDateTime(User::getTime() - 8640000), // 100 days
			)
		))->fetchAll() as $record)
		{
			SystemLogTable::delete($record['ID']);
		}
	}

	public static function deleteByEntity($entityId, $entityType)
	{
		$match = static::find(array(
			'filter' => array(
				'=ENTITY_ID' => $entityId,
				'=ENTITY_TYPE' => $entityType
			),
			'select' => array(
				'ID'
			)
		));
		foreach($match as $item)
		{
			$item->delete();
		}
	}
}