Revision 758 (by ahitrov, 2018/12/04 09:22:10) Multiple "To" recipients

#!/usr/bin/perl

use strict;
use warnings "all";
use locale;

BEGIN { require 'inc.pl' };

use Contenido::Globals;
use Contenido::Init;
use ErrorTee;
use PidFile;
use Data::Dumper;

# begin
Contenido::Init->init();

my $keeper_module = $state->project.'::Keeper';
$keeper = $keeper_module->new($state);

#PidFile->new($keeper, compat=>1);                # db-based locking (run only on one host)
#PidFile->new($keeper, compat=>1, per_host=>1);   # db-based locking (run on whole cluster)

############################################
# please use:
#     $state->{log_dir} for logging
#     $state->{tmp_dir} for temporary files
###########################################
$keeper->t_connect() || die $keeper->error();
my $ids = $keeper->TSQL->selectall_arrayref("SELECT id FROM mailqueue WHERE status = 0 and dtime <= CURRENT_TIMESTAMP ORDER BY ctime LIMIT 5");
if ( ref $ids eq 'ARRAY' && @$ids ) {
	$keeper->TSQL->do("UPDATE mailqueue SET status = 2 WHERE ID IN (".join(',', ('?') x scalar @$ids).")", {}, map { $_->[0] } @$ids);
}
$keeper->t_finish();

my $now = Contenido::DateTime->new;
if ( @$ids ) {
	my $sendmail = Contenido::Mail->new();
	foreach my $row ( @$ids ) {
		my $mail = $keeper->get_document_by_id($row->[0], class => 'Contenido::Email');
		if ( ref $mail ) {
			my @to = split /,\s*/, $mail->name;
			my $data = {
				to	=> \@to,
				subject	=> $mail->subject,
				body	=> $mail->body_html,
			};
			if ( $mail->cc ) {
				$data->{cc} = [split /\n/, $mail->cc];
			}
			if ( $mail->body_text ) {
				$data->{text} = $mail->body_text;
			}
			if ( my $err = $sendmail->send({ email => $data }) ) {
				$mail->status( 3 );
				$mail->error( $err );
			} else {
				$mail->status( 1 );
				$mail->etime( $now->ymd('-').' '.$now->hms );
				$mail->error( undef );
			}
			$mail->store;
		}
	}
}

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.