Skip to content

Commit 113304a

Browse files
authored
Added a new method miniShop2::shootEmail
Отправка писем вынесена в отдельный метод `miniShop2::shootEmail`, где либо подключается планировщик, либо письмо отправляется сразу.
1 parent 3815eb3 commit 113304a

File tree

1 file changed

+66
-67
lines changed

1 file changed

+66
-67
lines changed

core/components/minishop2/model/minishop2/minishop2.class.php

Lines changed: 66 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -905,27 +905,6 @@ public function changeOrderStatus($order_id, $status_id)
905905
}
906906
}
907907

908-
$useScheduler = $this->modx->getOption('ms2_use_scheduler', null, false);
909-
$task = null;
910-
if ($useScheduler) {
911-
/** @var Scheduler $scheduler */
912-
$path = $this->modx->getOption(
913-
'scheduler.core_path',
914-
null,
915-
$this->modx->getOption('core_path') . 'components/scheduler/'
916-
);
917-
$scheduler = $this->modx->getService('scheduler', 'Scheduler', $path . 'model/scheduler/');
918-
if ($scheduler) {
919-
$task = $scheduler->getTask('minishop2', 'ms2_send_email');
920-
if (!$task) {
921-
$task = $this->createEmailTask();
922-
}
923-
} else {
924-
$useScheduler = false;
925-
$this->modx->log(1, 'not found Scheduler extra');
926-
}
927-
}
928-
929908
if ($status->get('email_manager')) {
930909
$subject = $this->pdoTools->getChunk('@INLINE ' . $status->get('subject_manager'), $pls);
931910
$tpl = '';
@@ -940,21 +919,7 @@ public function changeOrderStatus($order_id, $status_id)
940919
$this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender'))
941920
)
942921
);
943-
if (!empty($subject)) {
944-
foreach ($emails as $email) {
945-
if (preg_match('#.*?@#', $email)) {
946-
if ($useScheduler && $task instanceof sTask) {
947-
$task->schedule('+1 second', [
948-
'email' => $email,
949-
'subject' => $subject,
950-
'body' => $body
951-
]);
952-
} else {
953-
$this->sendEmail($email, $subject, $body);
954-
}
955-
}
956-
}
957-
}
922+
$this->shootEmail($emails, $subject, $body);
958923
}
959924

960925
if ($status->get('email_user')) {
@@ -966,24 +931,78 @@ public function changeOrderStatus($order_id, $status_id)
966931
}
967932
$body = $this->modx->runSnippet('msGetOrder', array_merge($pls, ['tpl' => $tpl]));
968933
$email = $profile->get('email');
969-
if (!empty($subject) && preg_match('#.*?@#', $email)) {
970-
if ($useScheduler && $task instanceof sTask) {
971-
$task->schedule('+1 second', [
972-
'email' => $email,
973-
'subject' => $subject,
974-
'body' => $body
975-
]);
976-
} else {
977-
$this->sendEmail($email, $subject, $body);
978-
}
979-
}
934+
$this->shootEmail($email, $subject, $body);
980935
}
981936
}
982937
}
983938

984939
return true;
985940
}
986941

942+
/**
943+
* Method of sending email depends on the settings
944+
*
945+
* @param array|string $emails
946+
* @param string $subject
947+
* @param string $body
948+
* @param bool $force
949+
*
950+
* @return bool
951+
*/
952+
public function shootEmail($emails, $subject, $body = '', $force = false)
953+
{
954+
if (empty($subject) || empty($emails)) {
955+
return false;
956+
}
957+
if (is_string($emails)) {
958+
$emails = [$emails];
959+
}
960+
961+
$sTask = null;
962+
if ($force === false && $this->modx->getOption('ms2_use_scheduler', null, false)) {
963+
/** @var Scheduler $scheduler */
964+
$scheduler = $this->modx->getService('scheduler', 'Scheduler',
965+
$this->modx->getOption('scheduler.core_path', null, MODX_CORE_PATH . 'components/scheduler/') . 'model/scheduler/'
966+
);
967+
if ($scheduler) {
968+
$sTask = $scheduler->getTask('minishop2', 'ms2_send_email');
969+
if (empty($sTask)) {
970+
$sTask = $this->modx->newObject('sFileTask');
971+
$sTask->fromArray([
972+
'class_key' => 'sFileTask',
973+
'content' => '/tasks/sendEmail.php',
974+
'namespace' => 'minishop2',
975+
'reference' => 'ms2_send_email',
976+
'description' => 'MiniShop2 Email'
977+
]);
978+
if (!$sTask->save()) {
979+
$sTask = null;
980+
}
981+
}
982+
} else {
983+
$this->modx->log(1, 'Not found Scheduler extra');
984+
}
985+
}
986+
987+
$result = false;
988+
foreach ($emails as $email) {
989+
if (preg_match('#.*?@#', $email)) {
990+
if ($sTask instanceof sTask) {
991+
$sTask->schedule('+1 second', [
992+
'email' => $email,
993+
'subject' => $subject,
994+
'body' => $body
995+
]);
996+
$result = true;
997+
} else {
998+
$result = $this->sendEmail($email, $subject, $body);
999+
}
1000+
}
1001+
}
1002+
1003+
return $result;
1004+
}
1005+
9871006
/**
9881007
* Function for sending email
9891008
*
@@ -1307,24 +1326,4 @@ protected function updateSetting($key, $value)
13071326
$setting->set('value', json_encode($value));
13081327
$setting->save();
13091328
}
1310-
1311-
/**
1312-
* Creating Sheduler's task for sending email
1313-
* @return false|object|null
1314-
*/
1315-
private function createEmailTask()
1316-
{
1317-
$task = $this->modx->newObject('sFileTask');
1318-
$task->fromArray([
1319-
'class_key' => 'sFileTask',
1320-
'content' => '/tasks/sendEmail.php',
1321-
'namespace' => 'minishop2',
1322-
'reference' => 'ms2_send_email',
1323-
'description' => 'MiniShop2 Email'
1324-
]);
1325-
if (!$task->save()) {
1326-
return false;
1327-
}
1328-
return $task;
1329-
}
13301329
}

0 commit comments

Comments
 (0)