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/mail/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/mail/lib/mailboxdirectory.php
<?php

namespace Bitrix\Mail;

use Bitrix\Mail\Helper\Mailbox;
use Bitrix\Mail\Internals\MailboxDirectoryTable;
use Bitrix\Main\Entity\ExpressionField;
use Bitrix\Main\Entity\Query;
use Bitrix\Main\Result;

class MailboxDirectory
{
	public static function fetchAllDirsTypes($mailboxId)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'LOGIC'       => 'AND',
				'=MAILBOX_ID' => $mailboxId,
				[
					'LOGIC'       => 'OR',
					'=IS_OUTCOME' => MailboxDirectoryTable::ACTIVE,
					'=IS_TRASH'   => MailboxDirectoryTable::ACTIVE,
					'=IS_SPAM'    => MailboxDirectoryTable::ACTIVE,
				]
			],
			'select' => ['*'],
			'order'  => ['LEVEL' => 'ASC']
		])->fetchCollection();
	}

	public static function fetchOneLevelByParentId($mailboxId, $id, $level)
	{
		$query = MailboxDirectoryTable::getList([
			'filter' => [
				'LOGIC'       => 'AND',
				'=MAILBOX_ID' => $mailboxId,
				'=PARENT_ID'  => $id,
				'=LEVEL'      => $level,
			],
			'select' => ['*']
		]);

		$result = [];

		while ($row = $query->fetchObject())
		{
			$result[$row->getPath()] = $row;
		}

		return $result;
	}

	public static function fetchAllLevelByParentId($mailboxId, $path, $level)
	{
		$query = MailboxDirectoryTable::getList([
			'filter' => [
				'LOGIC'       => 'AND',
				'=MAILBOX_ID' => $mailboxId,
				'%=PATH'      => $path,
				'>=LEVEL'     => $level,
			],
			'select' => ['*'],
			'order'  => ['LEVEL' => 'ASC']
		]);

		$result = [];

		while ($row = $query->fetchObject())
		{
			$result[$row->getPath()] = $row;
		}

		return $result;
	}

	public static function fetchOneByMailboxIdAndHash($mailboxId, $hash)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=MAILBOX_ID' => $mailboxId,
				'=DIR_MD5'    => $hash
			]
		])->fetchObject();
	}

	public static function fetchOneOutcome($mailboxId)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=MAILBOX_ID' => $mailboxId,
				'=IS_OUTCOME' => MailboxDirectoryTable::ACTIVE
			]
		])->fetchObject();
	}

	public static function fetchTrashAndSpamHash($mailboxId)
	{
		$query = MailboxDirectoryTable::getList([
			'filter' => [
				'LOGIC'       => 'AND',
				'=MAILBOX_ID' => $mailboxId,
				[
					'LOGIC'     => 'OR',
					'=IS_TRASH' => MailboxDirectoryTable::ACTIVE,
					'=IS_SPAM'  => MailboxDirectoryTable::ACTIVE,
				]
			]
		]);

		$result = [];

		while ($row = $query->fetch())
		{
			$result[] = $row['DIR_MD5'];
		}

		return $result;
	}

	public static function fetchOneById($id)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=ID' => $id
			]
		])->fetchObject();
	}

	public static function fetchOneByHash($mailboxId, $hash)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=MAILBOX_ID' => $mailboxId,
				'=DIR_MD5'    => $hash
			]
		])->fetchObject();
	}

	public static function updateSync($id, $val)
	{
		return MailboxDirectoryTable::update(
			$id,
			[
				'IS_SYNC' => $val
			]
		);
	}

	public static function resetDirsTypes($mailboxId, $type)
	{
		$entity = MailboxDirectoryTable::getEntity();
		$connection = $entity->getConnection();

		$query = sprintf(
			'UPDATE %s SET %s WHERE %s',
			$connection->getSqlHelper()->quote($entity->getDbTableName()),
			$connection->getSqlHelper()->prepareUpdate($entity->getDbTableName(), [
				$type => MailboxDirectoryTable::INACTIVE,
			])[0],
			Query::buildFilterSql(
				$entity,
				[
					'MAILBOX_ID' => $mailboxId,
					$type        => MailboxDirectoryTable::ACTIVE,
				]
			)
		);

		return $connection->query($query);
	}

	public static function update($id, $data)
	{
		return MailboxDirectoryTable::update($id, $data);
	}

	public static function add(array $data)
	{
		return MailboxDirectoryTable::add($data);
	}

	public static function addMulti($rows, $ignoreEvents = false)
	{
		return MailboxDirectoryTable::addMulti($rows, $ignoreEvents);
	}

	public static function deleteList(array $filter)
	{
		$entity = MailboxDirectoryTable::getEntity();
		$connection = $entity->getConnection();

		return $connection->query(sprintf(
			'DELETE FROM %s WHERE %s',
			$connection->getSqlHelper()->quote($entity->getDbTableName()),
			Query::buildFilterSql($entity, $filter)
		));
	}

	public static function updateSyncDirs(array $values, $val, $mailboxId)
	{
		$entity = MailboxDirectoryTable::getEntity();
		$connection = $entity->getConnection();

		$totalValues = count($values);
		$batchSize = 100;
		$offset = 0;

		while ($offset < $totalValues)
		{
			$batchValues = array_slice($values, $offset, $batchSize);
			$offset += $batchSize;

			$result = $connection->query(sprintf(
				"UPDATE %s SET %s WHERE %s",
				$connection->getSqlHelper()->quote($entity->getDbTableName()),
				$connection->getSqlHelper()->prepareUpdate($entity->getDbTableName(), [
					'IS_SYNC' => $val,
				])[0],
				Query::buildFilterSql(
					$entity,
					[
						'=MAILBOX_ID' => $mailboxId,
						'@DIR_MD5'    => $batchValues,
						'IS_DISABLED' => MailboxDirectoryTable::INACTIVE,
					]
				)
			));
		}

		return $result ?? new Result();
	}

	public static function fetchAll(int $mailboxId)
	{
		static $mailboxDirs = [];

		if (!isset($mailboxDirs[$mailboxId]))
		{
			$query = MailboxDirectoryTable::getList([
				'filter' => [
					'=MAILBOX_ID' => $mailboxId
				],
				'select' => ['*'],
				/*
					When assembling directories, we look for their parents.
					Sorting ensures that for a directories that parents are processed first,
					and for children, matching parents are always found from those processed.
				 */
				'order'  => ['LEVEL' => 'ASC']
			]);

			$result = [];

			while ($row = $query->fetchObject())
			{
				$result[$row->getPath()] = $row;
			}

			$mailboxDirs[$mailboxId] = $result;
		}

		return $mailboxDirs[$mailboxId];
	}

	public static function fetchAllSyncDirs($mailboxId)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=MAILBOX_ID'  => $mailboxId,
				'=IS_SYNC'     => MailboxDirectoryTable::ACTIVE,
				'=IS_DISABLED' => MailboxDirectoryTable::INACTIVE
			],
			'select' => ['*'],
			'order'  => ['LEVEL' => 'ASC']
		])->fetchCollection();
	}

	public static function fetchAllDisabledDirs($mailboxId)
	{
		return MailboxDirectoryTable::getList([
			'filter' => [
				'=MAILBOX_ID'  => $mailboxId,
				'=IS_DISABLED' => MailboxDirectoryTable::ACTIVE
			],
			'select' => ['*'],
			'order'  => ['ID' => 'ASC']
		])->fetchCollection();
	}

	public static function countMessagesSyncDirs($mailboxId)
	{
		$counter = MailboxDirectoryTable::getList([
			'filter'  => [
				'=MAILBOX_ID'  => $mailboxId,
				'=IS_SYNC'     => MailboxDirectoryTable::ACTIVE,
				'=IS_DISABLED' => MailboxDirectoryTable::INACTIVE
			],
			'select'  => ['CNT'],
			'runtime' => [
				new ExpressionField('CNT', 'SUM(%s)', 'MESSAGE_COUNT'),
			]
		])->fetch();

		return (int)$counter['CNT'];
	}

	public static function getMinSyncTime($mailboxId)
	{
		$res = MailboxDirectoryTable::getList([
			'filter'  => [
				'=MAILBOX_ID' => $mailboxId,
				'=IS_SYNC'    => MailboxDirectoryTable::ACTIVE,
			],
			'select'  => ['MIN_SYNC_TIME'],
			'runtime' => [
				new ExpressionField('MIN_SYNC_TIME', 'MIN(COALESCE(%s, 0))', 'SYNC_TIME'),
			]
		])->fetch();

		return (int)$res['MIN_SYNC_TIME'];
	}

	public static function countSyncDirs($mailboxId)
	{
		$counter = MailboxDirectoryTable::getList([
			'filter'  => [
				'=MAILBOX_ID'  => $mailboxId,
				'=IS_SYNC'     => MailboxDirectoryTable::ACTIVE,
				'=IS_DISABLED' => MailboxDirectoryTable::INACTIVE
			],
			'select'  => ['CNT'],
			'runtime' => [
				new ExpressionField('CNT', 'COUNT(*)'),
			]
		])->fetch();

		return (int)$counter['CNT'];
	}

	public static function updateMessageCount($id, $val)
	{
		return MailboxDirectoryTable::update(
			$id,
			[
				'MESSAGE_COUNT' => $val
			]
		);
	}

	public static function updateFlags($id, $flags)
	{
		return MailboxDirectoryTable::update(
			$id,
			[
				'FLAGS' => $flags
			]
		);
	}

	public static function updateSyncTime($id, $val)
	{
		return MailboxDirectoryTable::update(
			$id,
			[
				'SYNC_TIME' => $val
			]
		);
	}

	public static function setSyncLock(int $id, int $time)
	{
		$entity = MailboxDirectoryTable::getEntity();
		$connection = $entity->getConnection();

		$query = sprintf(
			"UPDATE %s SET %s WHERE %s",
			$connection->getSqlHelper()->quote($entity->getDbTableName()),
			$connection->getSqlHelper()->prepareUpdate($entity->getDbTableName(), [
				'SYNC_LOCK' => $time,
			])[0],
			Query::buildFilterSql(
				$entity,
				[
					'=ID' => $id,
					[
						'LOGIC'      => 'OR',
						'=SYNC_LOCK' => 'IS NULL',
						'<SYNC_LOCK' => time() - Mailbox::getTimeout(),
					]
				]
			)
		);

		$connection->query($query);
		$count = $connection->getAffectedRowsCount();

		return $count;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit