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/perfmon/classes/general/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/perfmon/classes/general/table.php
<?php

class CPerfomanceTableList extends CDBResult
{
	protected $dbName = '';

	public static function GetList($bFull = true, $connection = null)
	{
		$connection ??= \Bitrix\Main\Application::getConnection();

		return \Bitrix\Perfmon\BaseDatabase::createFromConnection($connection)->getTables($bFull);
	}
}

class CPerfomanceTable
{
	public $TABLE_NAME = '';
	protected $connection = null;
	protected $database = null;

	public function Init($TABLE_NAME, $connection = null)
	{
		$this->connection = $connection ?? \Bitrix\Main\Application::getConnection();
		$this->database = \Bitrix\Perfmon\BaseDatabase::createFromConnection($this->connection);
		$this->TABLE_NAME = trim($TABLE_NAME, '`');
	}

	public function IsExists($TABLE_NAME = false)
	{
		if ($TABLE_NAME === false)
		{
			$TABLE_NAME = $this->TABLE_NAME;
		}

		$TABLE_NAME = trim($TABLE_NAME, '`');
		if ($TABLE_NAME === '')
		{
			return false;
		}

		return $this->connection->isTableExists($TABLE_NAME);
	}

	public function GetIndexes($TABLE_NAME = false)
	{
		if ($TABLE_NAME === false)
		{
			$TABLE_NAME = $this->TABLE_NAME;
		}

		$TABLE_NAME = trim($TABLE_NAME, '`');
		if ($TABLE_NAME === '')
		{
			return [];
		}

		return $this->database->getIndexes($TABLE_NAME);
	}

	public function GetUniqueIndexes($TABLE_NAME = false)
	{
		if ($TABLE_NAME === false)
		{
			$TABLE_NAME = $this->TABLE_NAME;
		}

		$TABLE_NAME = trim($TABLE_NAME, '`');
		if ($TABLE_NAME === '')
		{
			return [];
		}

		return $this->database->getUniqueIndexes($TABLE_NAME);
	}

	public function GetFullTextIndexes($TABLE_NAME = false)
	{
		if ($TABLE_NAME === false)
		{
			$TABLE_NAME = $this->TABLE_NAME;
		}

		$TABLE_NAME = trim($TABLE_NAME, '`');
		if ($TABLE_NAME === '')
		{
			return [];
		}

		return $this->database->getFullTextIndexes($TABLE_NAME);
	}

	public function GetList($arSelect, $arFilter, $arOrder = [], $arNavParams = false)
	{
		$context = \Bitrix\Main\Context::getCurrent();
		$culture = $context->getCulture();
		$sqlHelper = $this->connection->getSqlHelper();

		$arFields = $this->GetTableFields();

		if (!is_array($arSelect))
		{
			$arSelect = [];
		}
		if (count($arSelect) < 1)
		{
			$arSelect = array_keys($arFields);
		}

		if (!is_array($arOrder))
		{
			$arOrder = [];
		}

		$arQueryOrder = [];
		foreach ($arOrder as $strColumn => $strDirection)
		{
			$strDirection = mb_strtoupper($strDirection) === 'ASC' ? 'ASC' : 'DESC';
			if (array_key_exists($strColumn, $arFields))
			{
				$arSelect[] = $strColumn;
				if ($arFields[$strColumn] === 'datetime' || $arFields[$strColumn] === 'date')
				{
					$arQueryOrder[$strColumn] = $sqlHelper->quote('TMP_' . $strColumn) . ' ' . $strDirection;
				}
				else
				{
					$arQueryOrder[$strColumn] = $sqlHelper->quote($strColumn) . ' ' . $strDirection;
				}
			}
		}

		$arQuerySelect = [];
		foreach ($arSelect as $strColumn)
		{
			if (array_key_exists($strColumn, $arFields))
			{
				if ($arFields[$strColumn] === 'datetime' || $arFields[$strColumn] === 'date')
				{
					$arQuerySelect['TMP_' . $strColumn] = 't.' . $sqlHelper->quote($strColumn) . ' TMP_' . $strColumn;
					$arQuerySelect[$strColumn] = $sqlHelper->formatDate($culture->getFormatDate(), 't.' . $sqlHelper->quote($strColumn)) . ' ' . $sqlHelper->quote($strColumn);
					$arQuerySelect['FULL_' . $strColumn] = $sqlHelper->formatDate($culture->getFormatDatetime(), 't.' . $sqlHelper->quote($strColumn)) . ' FULL_' . $strColumn;
					$arQuerySelect['SHORT_' . $strColumn] = $sqlHelper->formatDate($culture->getFormatDate(), 't.' . $sqlHelper->quote($strColumn)) . ' SHORT_' . $strColumn;
				}
				else
				{
					$arQuerySelect[$strColumn] = 't.' . $sqlHelper->quote($strColumn);
				}
			}
		}

		foreach ($arFields as $FIELD_NAME => $FIELD_TYPE)
		{
			$arFields[$FIELD_NAME] = [
				'TABLE_ALIAS' => 't',
				'FIELD_NAME' => 't.' . $sqlHelper->quote($FIELD_NAME),
				'FIELD_TYPE' => $FIELD_TYPE,
				'JOIN' => false,
				//"LEFT_JOIN" => "lt",
			];
		}
		$obQueryWhere = new CSQLWhere;
		$obQueryWhere->SetFields($arFields);

		if (count($arQuerySelect) < 1)
		{
			$arQuerySelect = ['*' => 't.*'];
		}

		$strSelect = 'SELECT ' . implode(', ', $arQuerySelect) . "\n";

		$strSql = 'FROM ' /*. $sqlHelper->quote($this->connection->getDatabase()) . '.'*/ . $sqlHelper->quote($this->TABLE_NAME) . " t\n";
		$strQueryWhere = $obQueryWhere->GetQuery($arFilter);
		if ($strQueryWhere)
		{
			$strSql .= 'WHERE ' . $strQueryWhere . "\n";
		}
		$strOrder = $arQueryOrder ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '';

		if (!is_array($arNavParams))
		{
			$dbr = $this->connection->query($strSelect . $strSql . $strOrder);
		}
		elseif (isset($arNavParams['bOnlyCount']) && $arNavParams['bOnlyCount'] === true)
		{
			$res_cnt = $this->connection->query("SELECT count('x') CNT " . $strSql);
			$ar_cnt = $res_cnt->fetch();

			return $ar_cnt['CNT'];
		}
		elseif ($arNavParams['nTopCount'] > 0)
		{
			$strSql = $sqlHelper->getTopSql($strSelect . $strSql . $strOrder, $arNavParams['nTopCount'], $arNavParams['nOffset']);
			$dbr = $this->connection->query($strSql);
		}
		else
		{
			$dbr = $this->connection->query($strSelect . $strSql . $strOrder);
		}

		$dbr->is_filtered = ($strQueryWhere !== '');

		return $dbr;
	}

	public function GetTableFields($TABLE_NAME = false, $bExtended = false)
	{
		static $cache = [];

		if ($TABLE_NAME === false)
		{
			$TABLE_NAME = $this->TABLE_NAME;
		}

		$TABLE_NAME = trim($TABLE_NAME, '`');
		if ($TABLE_NAME === '')
		{
			return false;
		}

		if (!array_key_exists($TABLE_NAME, $cache))
		{
			$cache[$TABLE_NAME] = $this->database->getTableFields($TABLE_NAME);
		}

		if ($bExtended)
		{
			return $cache[$TABLE_NAME][1];
		}
		else
		{
			return $cache[$TABLE_NAME][0];
		}
	}

	public function getCreateIndexDDL($TABLE_NAME, $INDEX_NAME, $INDEX_COLUMNS)
	{
		$tableFields = $this->GetTableFields($TABLE_NAME, true);
		foreach ($INDEX_COLUMNS as $i => $field)
		{
			if ($tableFields[trim($field, '`[]"')]['orm_type'] === 'text')
			{
				$INDEX_COLUMNS[$i] = $field . '(100)';
			}
		}

		return 'CREATE INDEX ' . $INDEX_NAME . ' ON ' . $TABLE_NAME . ' (' . implode(', ', $INDEX_COLUMNS) . ')';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit