%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 13.58.230.203
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/webdebug.antirutin/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/webdebug.antirutin/lib/profile.php
<?
namespace WD\Antirutin;

use
	\Bitrix\Main\Entity,
	\WD\Antirutin\Cli,
	\WD\Antirutin\Helper,
	\WD\Antirutin\ProfileActionTable as ProfileAction;

Helper::loadMessages(__FILE__);

/**
 * Class ProfileTable
 * @package WD\Antirutin\Helper
 */

class ProfileTable extends Entity\DataManager {
	
	const LANG = 'WDA_PROFILE_';
	
	/**
	 * Returns DB table name for entity.
	 *
	 * @return string
	 */
	public static function getTableName(){
		return 'wd_antirutin_profile';
	}

	/**
	 * Returns entity map definition.
	 *
	 * @return array
	 */
	public static function getMap() {
		return [
			'ID' => new Entity\IntegerField('ID', [
				'primary' => true,
				'autocomplete' => true,
				'title' => Helper::getMessage(static::LANG.'FIELD_ID'),
			]),
			'ACTIVE' => new Entity\StringField('ACTIVE', [
				'title' => Helper::getMessage(static::LANG.'FIELD_ACTIVE'),
			]),
			'NAME' => new Entity\StringField('NAME', [
				'title' => Helper::getMessage(static::LANG.'FIELD_NAME'),
				'required' => true,
			]),
			'CODE' => new Entity\StringField('CODE', [
				'title' => Helper::getMessage(static::LANG.'FIELD_CODE'),
			]),
			'DESCRIPTION' => new Entity\TextField('DESCRIPTION', [
				'title' => Helper::getMessage(static::LANG.'FIELD_DESCRIPTION'),
			]),
			'SORT' => new Entity\IntegerField('SORT', [
				'title' => Helper::getMessage(static::LANG.'FIELD_SORT'),
			]),
			'ENTITY_TYPE' => new Entity\StringField('ENTITY_TYPE', [
				'title' => Helper::getMessage(static::LANG.'FIELD_ENTITY_TYPE'),
				'required' => true,
			]),
			'IBLOCK_ID' => new Entity\IntegerField('IBLOCK_ID', [
				'title' => Helper::getMessage(static::LANG.'FIELD_IBLOCK_ID'),
				'required' => true,
			]),
			'SELECT_SECTIONS' => new Entity\StringField('SELECT_SECTIONS', [
				'title' => Helper::getMessage(static::LANG.'FIELD_SELECT_SECTIONS'),
			]),
			'MAX_DEPTH' => new Entity\IntegerField('MAX_DEPTH', [
				'title' => Helper::getMessage(static::LANG.'FIELD_MAX_DEPTH'),
			]),
			'SECTIONS_ID' => new Entity\TextField('SECTIONS_ID', [
				'title' => Helper::getMessage(static::LANG.'FIELD_SECTIONS_ID'),
			]),
			'INCLUDE_SUBSECTIONS' => new Entity\StringField('INCLUDE_SUBSECTIONS', [
				'title' => Helper::getMessage(static::LANG.'FIELD_INCLUDE_SUBSECTIONS'),
			]),
			'FILTER' => new Entity\TextField('FILTER', [
				'title' => Helper::getMessage(static::LANG.'FIELD_FILTER'),
			]),
			'SETTINGS' => new Entity\TextField('SETTINGS', [
				'title' => Helper::getMessage(static::LANG.'FIELD_SETTINGS'),
			]),
			'EMAIL' => new Entity\TextField('EMAIL', [
				'title' => Helper::getMessage(static::LANG.'FIELD_EMAIL'),
			]),
			'LOCKED' => new Entity\StringField('LOCKED', [
				'title' => Helper::getMessage(static::LANG.'FIELD_LOCKED'),
			]),
			'DATE_CREATE' => new Entity\DatetimeField('DATE_CREATE', [
				'title' => Helper::getMessage(static::LANG.'FIELD_DATE_CREATE'),
			]),
			'DATE_MODIFIED' => new Entity\DatetimeField('DATE_MODIFIED', [
				'title' => Helper::getMessage(static::LANG.'FIELD_DATE_MODIFIED'),
			]),
			'DATE_START' => new Entity\DatetimeField('DATE_START', [
				'title' => Helper::getMessage(static::LANG.'FIELD_DATE_START'),
			]),
			'DATE_FINISH' => new Entity\DatetimeField('DATE_FINISH', [
				'title' => Helper::getMessage(static::LANG.'FIELD_DATE_FINISH'),
			]),
		];
	}
	
	/**
	 *	Add item
	 */
	public static function add(array $data){
		if(!isset($data['DATE_CREATE'])){
			$data['DATE_CREATE'] = new \Bitrix\Main\Type\DateTime();
		}
		if(!isset($data['DATE_MODIFIED'])){
			$data['DATE_MODIFIED'] = new \Bitrix\Main\Type\DateTime();
		}
		if(strlen($data['CODE']) && !static::isCodeUnique($data['CODE'])){
			$obResult = new \Bitrix\Main\ORM\Data\AddResult();
			$obResult->addError(new \Bitrix\Main\Error(Helper::getMessage(static::LANG.'ERROR_CODE_NOT_UNIQUE')));
			return $obResult;
		}
		$actions = $data['ACTIONS'];
		unset($data['ACTIONS']);
		if(!is_array($actions) || empty($actions)) {
			$obResult = new \Bitrix\Main\ORM\Data\AddResult();
			$obResult->addError(new \Bitrix\Main\Error(Helper::getMessage(static::LANG.'ERROR_NO_ACTIONS')));
			return $obResult;
		}
		$obResult = parent::add($data);
		if($obResult->isSuccess()){
			$primary = $obResult->getId();
			static::setProfileActions($primary, $actions);
		}
		return $obResult;
	}
	
	/**
	 *	Update item
	 */
	public static function update($primary, array $data) {
		if(!isset($data['DATE_MODIFIED'])){
			$data['DATE_MODIFIED'] = new \Bitrix\Main\Type\DateTime();
		}
		if(strlen($data['CODE']) && !static::isCodeUnique($data['CODE'], $primary)){
			$obResult = new \Bitrix\Main\ORM\Data\AddResult();
			$obResult->setId($primary);
			$obResult->addError(new \Bitrix\Main\Error(Helper::getMessage(static::LANG.'ERROR_CODE_NOT_UNIQUE')));
			return $obResult;
		}
		$bSetActions = false;
		if(isset($data['ACTIONS'])){
			$bSetActions = true;
			$actions = $data['ACTIONS'];
			unset($data['ACTIONS']);
			if(!is_array($actions) || empty($actions)) {
				$obResult = new \Bitrix\Main\ORM\Data\AddResult();
				$obResult->addError(new \Bitrix\Main\Error(Helper::getMessage(static::LANG.'ERROR_NO_ACTIONS')));
				return $obResult;
			}
		}
		$obResult = parent::update($primary, $data);
		if($obResult->isSuccess() && $bSetActions){
			static::setProfileActions($primary, $actions);
		}
		return $obResult;
	}
	
	/**
	 *	Delete item
	 */
	public static function delete($primary) {
		$obResult = parent::delete($primary);
		if($obResult->isSuccess()){
			static::setProfileActions($primary, []);
			Cli::setProfileCronTasks($primary, []);
		}
		return $obResult;
	}
	
	/**
	 *	Is code unique
	 */
	public static function isCodeUnique($code, $primary=null){
		if(strlen($code)){
			$code = trim($code);
		}
		if(!strlen($code)){
			return true;
		}
		$arFilter = [
			'=CODE' => $code,
		];
		if(!is_null($primary)){
			$arFilter['!ID'] = $primary;
		}
		$arResult = static::getList([
			'filter' => $arFilter,
			'select' => ['CNT'],
			'runtime' => [
				new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
			],
		])->fetch();
		return !$arResult['CNT'];
	}
	
	/**
	 *	Get all actions for profile
	 */
	public static function getProfileActions($primary){
		$arResult = [];
		$resCurrentPluginActions = ProfileAction::getList([
			'order' => ['SORT' => 'ASC'],
			'filter' => ['PROFILE_ID' => $primary],
		]);
		while($arCurrentPluginAction = $resCurrentPluginActions->fetch()){
			$arCurrentPluginAction['~PARAMS'] = $arCurrentPluginAction['PARAMS'];
			$arCurrentPluginAction['PARAMS'] = unserialize($arCurrentPluginAction['PARAMS']);
			if(!is_array($arCurrentPluginAction) || !strlen($arCurrentPluginAction['HASH'])){
				continue;
			}
			$arCurrentPluginAction['PARAMS'] = array_merge([
				'_plugin' => $arCurrentPluginAction['PLUGIN'],
				'_title' => $arCurrentPluginAction['TITLE'],
				'_collapsed' => $arCurrentPluginAction['COLLAPSED'] == 'Y' ? 'Y' : 'N',
				'_sort' => $arCurrentPluginAction['SORT'],
			], $arCurrentPluginAction['PARAMS']);
			$arResult[$arCurrentPluginAction['HASH']] = $arCurrentPluginAction;
		}
		return $arResult;
	}
	
	/**
	 *	Update actions (for both add and update)
	 */
	protected static function setProfileActions($primary, array $actions){
		$bResult = true;
		# Prepare, transform rand_id_***
		foreach($actions as $strActionHash => $arAction){
			$actions[$strActionHash] = Helper::replaceActionRandInputValues($arAction);
		}
		# Save
		$arCurrentPluginActions = [];
		$resCurrentPluginActions = ProfileAction::getList([
			'order' => ['ID' => 'ASC'],
			'filter' => ['PROFILE_ID' => $primary],
			'select' => ['ID', 'HASH'],
		]);
		while($arCurrentPluginAction = $resCurrentPluginActions->fetch()){
			$arCurrentPluginActions[$arCurrentPluginAction['HASH']] = $arCurrentPluginAction;
		}
		$obConnection = \Bitrix\Main\Application::getConnection();
		$obConnection->startTransaction();
		foreach($arCurrentPluginActions as $strHash => $arAction){
			if(!empty($actions[$strHash])){
				$arNewAction = static::prepareActionArray($primary, $strHash, $actions[$strHash]);
				$obResult = ProfileAction::update($arAction['ID'], $arNewAction);
				unset($actions[$strHash]);
				if(!$obResult->isSuccess()){
					$bResult = false;
					break;
				}
			}
			else{
				$obResult = ProfileAction::delete($arAction['ID']);
				if(!$obResult->isSuccess()){
					$bResult = false;
					break;
				}
			}
		}
		foreach($actions as $strHash => $arAction){
			if(is_array($arAction) && !empty($arAction)){
				$arNewAction = static::prepareActionArray($primary, $strHash, $arAction);
				$obResult = ProfileAction::add($arNewAction);
				if(!$obResult->isSuccess()){
					$bResult = false;
					break;
				}
			}
		}
		if($bResult){
			$obConnection->commitTransaction();
		}
		else{
			$obConnection->rollbackTransaction();
		}
		return $bResult;
	}
	
	/**
	 *	Prepare action for save
	 */
	protected static function prepareActionArray($primary, $strHash, $arAction){
		$strPlugin = $arAction['_plugin']; unset($arAction['_plugin']);
		$strTitle = $arAction['_title']; unset($arAction['_title']);
		$strCollapsed = $arAction['_collapsed']; unset($arAction['_collapsed']);
		$strSort = $arAction['_sort']; unset($arAction['_sort']);
		$arResult = [
			'PROFILE_ID' => $primary,
			'HASH' => $strHash,
			'SORT' => $strSort,
			'PLUGIN' => $strPlugin,
			'TITLE' => $strTitle,
			'PARAMS' => serialize($arAction),
			'COLLAPSED' => $strCollapsed == 'Y' ? 'Y' : 'N',
		];
		if(!is_numeric($arResult['SORT']) || $arResult['SORT'] <= 0){
			unset($arResult['SORT']);
		}
		return $arResult;
	}

	/**
	 * Save DATE_START for profile
	 */
	public static function setDateStart($primary){
		return static::update($primary, ['DATE_START' => new \Bitrix\Main\Type\DateTime()])->isSuccess();
	}

	/**
	 * Save DATE_FINISH for profile
	 */
	public static function setDateFinish($primary){
		return static::update($primary, ['DATE_FINISH' => new \Bitrix\Main\Type\Datetime])->isSuccess();
	}

	/**
	 * Lock profile
	 */
	public static function lock($primary){
		$bResult = false;
		if(!is_file($strFilename = static::getProfileLockFilePath($primary))){
			if(!is_dir($strDir = pathinfo($strFilename, PATHINFO_DIRNAME))){
				mkdir($strDir, BX_DIR_PERMISSIONS, true);
			}
			touch($strFilename);
		}
		if(is_file($strFilename)){
			$resLockFile = fopen($strFilename, 'a');
			$bResult = flock($resLockFile, LOCK_EX|LOCK_NB);
		}
		return $bResult;
	}

	/**
	 * Unlock profile
	 */
	public static function unlock($primary){
		$bResult = true;
		$strFilename = static::getProfileLockFilePath($primary);
		if(is_file($strFilename)){
			$resLockFile = fopen($strFilename, 'a');
			flock($resLockFile, LOCK_UN);
			fclose($resLockFile);
			#unlink($resLockFile);
		}
		return $bResult;
	}

	/**
	 * Get filename for profile lock
	 */
	public static function getProfileLockFilePath($primary){
		return sprintf('%s%s/%s', Helper::root(), static::getLockDir(), static::getProfileLockFileName($primary));
	}

	/**
	 * Get filename for profile lock
	 */
	public static function getProfileLockFileName($primary){
		return sprintf('profile_%03d.lock', $primary);
	}

	/**
	 * Get dir with lock
	 */
	public static function getLockDir(){
		return sprintf('/upload/%s/lock', WDA_MODULE);
	}
	
}
?>

Youez - 2016 - github.com/yon3zu
LinuXploit