-
Notifications
You must be signed in to change notification settings - Fork 0
/
QueueEmail.php
154 lines (119 loc) · 3.54 KB
/
QueueEmail.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?php
declare(strict_types=1);
/*
* This file is part of the QuidPHP package <https://quidphp.com>
* Author: Pierre-Philippe Emond <emondpph@gmail.com>
* License: https://github.com/quidphp/core/blob/master/LICENSE
*/
namespace Quid\Core\Row;
use Quid\Base;
use Quid\Core;
use Quid\Main;
// queueEmail
// class to deal with a row of the queueEmail table, stores the email to send
class QueueEmail extends Core\RowAlias implements Main\Contract\Queue
{
// trait
use _queue;
// config
protected static array $config = [
'panel'=>false,
'search'=>false,
'priority'=>960,
'parent'=>'system',
'cols'=>[
'context'=>['class'=>Core\Col\Context::class],
'status'=>['general'=>true,'relation'=>'queueEmailStatus']],
'permission'=>[
'*'=>['insert'=>true],
'nobody'=>['insert'=>true],
'admin'=>['update'=>false]]
];
// isUnsent
// retourne vrai si le email n'a pas été envoyé
final public function isUnsent():bool
{
return $this->cell('status')->isEqual(1);
}
// isInProgress
// retourne vrai si le email est en train d'être envoyé
final public function isInProgress():bool
{
return $this->cell('status')->isEqual(2);
}
// isError
// retourne vrai si l'envoie du email a échoué
final public function isError():bool
{
return $this->cell('status')->isEqual(3);
}
// isSent
// retourne vrai si le email a été envoyé
final public function isSent():bool
{
return $this->cell('status')->isEqual(4);
}
// sendEmail
// retourne le tableau message qui contient tout le nécessaire pour envoyer le courriel
final public function sendEmail():array
{
return $this->cell('json')->get();
}
// getMailerKey
// retourne la clé pour trouver l'objet mailer à utiliser pour envoyer le courriel
// envoie une exception si introuvable
final public function getMailerKey():string
{
$return = null;
$json = $this->cell('json')->get();
if(is_array($json) && array_key_exists('key',$json) && Base\Arr::isKey($json['key']))
$return = $json['key'];
else
static::throw('noMailerKeyFound');
return $return;
}
// unqueue
// unqueue la row et change le status
final public function unqueue():bool
{
$return = false;
$key = $this->getMailerKey();
$mailer = $this->mailer($key);
$status = $this->cell('status');
$status->set(2);
$save = $this->updateChanged();
$return = $mailer->send($this);
if($return === true)
$status->set(4);
else
$status->set(3);
$save = $this->updateChanged();
return $return;
}
// prepareQueueData
// crée le tableau d'insertion
final protected static function prepareQueueData(array $json):array
{
$return = [];
$return['status'] = 1;
$return['json'] = $json;
return $return;
}
// getQueued
// retourne un objet rows avec toutes les rows queued
// la plus ancienne est retourné en premier
final public static function getQueued(?int $limit=null):?Main\Map
{
$return = null;
$table = static::safeTableFromFqcn();
if(!empty($table))
{
$db = $table->db();
$return = $db->rows($table,['status'=>1],['id'=>'asc'],$limit);
}
return $return;
}
}
// init
QueueEmail::__init();
?>