#PidFile->new($keeper, compat=>1); # db-based locking (run only on one host)
22
#PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster)
23
24
############################################
25
# please use:
26
# $state->{log_dir} for logging
27
# $state->{tmp_dir} for temporary files
28
###########################################
29
$keeper->t_connect() || die $keeper->error();
30
my $ids = $keeper->TSQL->selectall_arrayref("SELECT id FROM mailqueue WHERE status = 0 and dtime <= CURRENT_TIMESTAMP ORDER BY ctime LIMIT 5");
31
if ( ref $ids eq 'ARRAY' && @$ids ) {
32
$keeper->TSQL->do("UPDATE mailqueue SET status = 2 WHERE ID IN (".join(',', '?' x scalar @$ids).")", {}, map { $_->[0] } @$ids);
33
}
34
$keeper->t_finish();
35
36
if ( @$ids ) {
37
my $sendmail = Contenido::Mail->new({password => 'g8$feds1'});
38
foreach my $row ( @$ids ) {
39
my $mail = $keeper->get_document_by_id($row->[0], class => 'Contenido::Email');
40
if ( ref $mail ) {
41
my $data = {
42
to => $mail->name,
43
subject => $mail->subject,
44
body => $mail->body_html,
45
};
46
if ( $mail->cc ) {
47
$data->{cc} = [split /\n/, $mail->cc];
48
}
49
if ( $mail->body_text ) {
50
$data->{text} = $mail->body_text;
51
}
52
if ( my $err = $sendmail->send({ email => $data }) ) {
53
$mail->status(3);
54
$mail->error( $err );
55
} else {
56
$mail->status(2);
57
}
58
$mail->store;
59
}
60
}
61
}
utf8/core/sql/TOAST/mailqueue.sql
15
15
subject text,
16
16
data text
17
17
);
18
create index mailqueue_sections on mailqueue (sections);
18
create index mailqueue_actual on mailqueue (status, dtime) WHERE status = 0;
19
19
create index mailqueue_dtime on mailqueue (dtime);
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.