Passed
Push — developer ( 6b5868...bed0f9 )
by Radosław
22:42 queued 03:39
created

OSSMailScanner_Verification_Cron   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 13
eloc 34
c 1
b 0
f 0
dl 0
loc 47
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
C process() 0 44 13
1
<?php
2
/**
3
 * Cron for scheduled import.
4
 *
5
 * @package   Cron
6
 *
7
 * @copyright YetiForce S.A.
8
 * @license   YetiForce Public License 6.5 (licenses/LicenseEN.txt or yetiforce.com)
9
 * @author    Tomasz Kur <[email protected]>
10
 * @author    Mariusz Krzaczkowski <[email protected]>
11
 */
12
13
/**
14
 * OSSMailScanner_Verification_Cron class.
15
 */
16
class OSSMailScanner_Verification_Cron extends \App\CronHandler
17
{
18
	/** {@inheritdoc} */
19
	public function process()
20
	{
21
		$config = OSSMailScanner_Record_Model::getConfig('cron');
22
		$duration = $config['time'] ?? 0;
23
		$email = $config['email'] ?? '';
24
		$dbCommand = App\Db::getInstance()->createCommand();
25
		$dataReader = (new App\Db\Query())->from('vtiger_ossmails_logs')->where(['status' => 1])->createCommand()->query();
26
		while ($row = $dataReader->read()) {
27
			$startTime = strtotime($row['start_time']);
28
			if ($duration && $email
29
			&& strtotime('now') > $startTime + ($duration * 60)
30
			&& !(new \App\Db\Query())->from('vtiger_ossmailscanner_log_cron')->where(['laststart' => $startTime])->exists()) {
31
				$dbCommand->insert('vtiger_ossmailscanner_log_cron', ['laststart' => $startTime, 'status' => 0, 'created_time' => date('Y-m-d H:i:s')])->execute();
32
				$url = \App\Config::main('site_URL');
33
				$mailStatus = \App\Mailer::addMail([
34
					'to' => $email,
35
					'subject' => App\Language::translate('Email_FromName', 'OSSMailScanner'),
36
					'content' => App\Language::translate('Email_Body', 'OSSMailScanner') . "\r\n<br><a href='{$url}'>{$url}</a>",
37
				]);
38
				$dbCommand->update('vtiger_ossmailscanner_log_cron', ['status' => (int) $mailStatus], ['laststart' => $startTime])->execute();
39
			}
40
		}
41
		$dataReader->close();
42
43
		$hours = OSSMailScanner_Record_Model::getConfig('cron')['blockCheckHours'] ?? '';
44
		$hours = $hours ? explode(',', $hours) : [];
45
		$query = (new \App\Db\Query())->from('roundcube_users')->where(['crm_status' => \OSSMail_Record_Model::MAIL_BOX_STATUS_BLOCKED_TEMP]);
46
		$dataReader = $query->createCommand()->query();
47
		while ($account = $dataReader->read()) {
48
			if (empty($account['actions'])) {
49
				continue;
50
			}
51
			$check = true;
52
			if (!empty($account['failed_login'])) {
53
				$check = date('Y-m-d G', strtotime($account['failed_login'])) !== date('Y-m-d G');
54
				if ($hours && $check) {
55
					$check = \in_array(date('G'), $hours);
56
				}
57
			}
58
			if ($check) {
59
				\OSSMail_Record_Model::imapConnect($account['username'], \App\Encryption::getInstance()->decrypt($account['password']), $account['mail_host'], '', false, [], $account);
60
			}
61
		}
62
		$dataReader->close();
63
	}
64
}
65