• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/helper/mailbox/imap.php
  • Класс: BitrixMailHelperMailboxImap
  • Вызов: Imap::syncFirstDay
public function syncFirstDay()
{
	$mailboxID = $this->mailbox['ID'];
	$directoryHelper = new MailHelperMailboxDirectoryHelper($mailboxID);
	$syncDirs = $directoryHelper->getSyncDirs();

	$numberOfUnSynchronizedDirs = count($syncDirs);

	foreach ($syncDirs as $dir)
	{
		$dirPath = $dir->getPath();
		$dirId = $dir->getId();

		$internalDate = BitrixMailHelper::getStartInternalDateForDir($mailboxID,$dirPath);

		$keyRow = [
			'MAILBOX_ID' => $mailboxID,
			'ENTITY_TYPE' => 'DIR',
			'ENTITY_ID' => $dirId,
			'PROPERTY_NAME' => 'SYNC_FIRST_DAY',
		];

		$filter = [
			'=MAILBOX_ID' => $keyRow['MAILBOX_ID'],
			'=ENTITY_TYPE' => $keyRow['ENTITY_TYPE'],
			'=ENTITY_ID' => $keyRow['ENTITY_ID'],
			'=PROPERTY_NAME' => $keyRow['PROPERTY_NAME'],
		];

		$startValue = 'started_for_date_'.$internalDate;

		if(MailInternalsMailEntityOptionsTable::getCount($filter))
		{
			if(MailInternalsMailEntityOptionsTable::getList([
					'select' => [
						'VALUE',
					],
					'filter' => $filter,
				])->fetchAll()[0]['VALUE'] !== 'completed')
			{
				MailInternalsMailEntityOptionsTable::update(
					$keyRow,
					['VALUE' => $startValue]
				);

				CTimeZone::Disable();
				$synchronizationSuccess = $this->syncDirForSpecificDay($dirPath,$internalDate);
				CTimeZone::Enable();

				if($synchronizationSuccess)
				{
					MailInternalsMailEntityOptionsTable::update(
						$keyRow,
						['VALUE' => 'completed']
					);
					$numberOfUnSynchronizedDirs--;
				}
			}
			else
			{
				$numberOfUnSynchronizedDirs--;
			}
		}
		else
		{
			$fields = $keyRow;
			$fields['VALUE'] = $startValue;
			MailInternalsMailEntityOptionsTable::add(
				$fields
			);

			CTimeZone::Disable();
			$synchronizationSuccess = $this->syncDirForSpecificDay($dirPath,$internalDate);
			CTimeZone::Enable();

			if($synchronizationSuccess)
			{
				BitrixMailInternalsMailEntityOptionsTable::update(
					$keyRow,
					['VALUE' => 'completed']
				);
				$numberOfUnSynchronizedDirs--;
			}
		}
	}

	if($numberOfUnSynchronizedDirs === 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}