%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/mail/lib/helper/mailbox/ |
Current File : //home/bitrix/www/bitrix/modules/mail/lib/helper/mailbox/mailboxsyncmanager.php |
<?php namespace Bitrix\Mail\Helper\Mailbox; use COption; use CUserOptions; class MailboxSyncManager { private $userId; private $mailCheckInterval; private $syncOptionCategory = 'global'; private $syncOptionName = 'user_mailboxes_sync_info'; public function __construct($userId) { $this->userId = $userId; $this->mailCheckInterval = COption::getOptionString('intranet', 'mail_check_period', 10) * 60; } public function getFailedToSyncMailboxes() { $mailboxes = []; $mailboxesSyncInfo = $this->getMailboxesSyncInfo(); foreach ($mailboxesSyncInfo as $mailboxId => $lastMailCheckData) { if (!$lastMailCheckData['isSuccess']) { $mailboxes[$mailboxId] = $lastMailCheckData; } } return $mailboxes; } public function getSuccessSyncedMailboxes() { $mailboxesToSync = []; $mailboxesSyncInfo = $this->getMailboxesSyncInfo(); foreach ($mailboxesSyncInfo as $mailboxId => $lastMailCheckData) { if ($lastMailCheckData['isSuccess']) { $mailboxesToSync[$mailboxId] = $lastMailCheckData; } } return $mailboxesToSync; } public function getNeedToBeSyncedMailboxes() { $mailboxesSyncData = $this->getSuccessSyncedMailboxes(); $mailboxesToSync = []; foreach ($mailboxesSyncData as $mailboxId => $lastMailCheckData) { if ($lastMailCheckData['timeStarted'] >= 0 && (time() - intval($lastMailCheckData['timeStarted']) >= $this->mailCheckInterval)) { $mailboxesToSync[$mailboxId] = $lastMailCheckData; } } return $mailboxesToSync; } public function getMailCheckInterval() { return $this->mailCheckInterval; } public function deleteSyncData($mailboxId) { $mailboxesOptions = $this->getMailboxesSyncInfo(); if (empty($mailboxesOptions)) { return; } unset($mailboxesOptions[$mailboxId]); if (empty($mailboxesOptions)) { CUserOptions::deleteOption($this->syncOptionCategory, $this->syncOptionName, false, $this->userId); } else { $this->setOption($mailboxesOptions); } } public function setDefaultSyncData($mailboxId) { $mailboxesOptions = $this->getMailboxesSyncInfo(); $mailboxesOptions[$mailboxId] = ['isSuccess' => true, 'timeStarted' => 0]; $this->setOption($mailboxesOptions); } public function setSyncStartedData($mailboxId, $time = null) { $mailboxesOptions = $this->getMailboxesSyncInfo(); $mailboxesOptions[$mailboxId] = ['isSuccess' => true, 'timeStarted' => $time !== null && (int)$time >= 0 ? (int)$time : time()]; $this->setOption($mailboxesOptions); } public function setSyncStatus($mailboxId, $isSuccess, $time = null) { $mailboxesOptions = $this->getMailboxesSyncInfo(); $mailboxesOptions[$mailboxId] = ['isSuccess' => $isSuccess, 'timeStarted' => $time !== null && (int)$time >= 0 ? (int)$time : time()]; $this->setOption($mailboxesOptions); } private function setOption($mailboxesSyncInfo) { CUserOptions::setOption($this->syncOptionCategory, $this->syncOptionName, $mailboxesSyncInfo, false, $this->userId); } /** * @return mixed */ private function getMailboxesSyncInfo() { return CUserOptions::getOption($this->syncOptionCategory, $this->syncOptionName, [], $this->userId); } public function getNextTimeToSync($lastMailCheckData) { return intval($lastMailCheckData['timeStarted']) + $this->mailCheckInterval - time(); } /** * @return null|int */ public function getFirstFailedToSyncMailboxId() { $mailboxesIdsFailedToSync = array_keys($this->getFailedToSyncMailboxes()); return !empty($mailboxesIdsFailedToSync) && count($mailboxesIdsFailedToSync) > 0 ? (int)$mailboxesIdsFailedToSync[0] : null; } public function getLastMailboxSyncIsSuccessStatus($mailboxId) { $mailboxesOptions = $this->getMailboxesSyncInfo(); if (!(isset($mailboxesOptions[$mailboxId]) && array_key_exists('isSuccess', $mailboxesOptions[$mailboxId]))) { return null; } return $mailboxesOptions[$mailboxId]['isSuccess']; } public function getLastMailboxSyncTime($mailboxId) { $mailboxesOptions = $this->getMailboxesSyncInfo(); if (!(isset($mailboxesOptions[$mailboxId]) && array_key_exists('timeStarted', $mailboxesOptions[$mailboxId]))) { return null; } return $mailboxesOptions[$mailboxId]['timeStarted']; } }