<& comps/header.msn &>
<div align="center">
<table width="435" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" align="left">
% if($ARGS{send_ok}) {
<table width="435" cellspacing="0" cellpadding="10" border="0">
<tr>
<td><img src="/i/escape/ok.jpg"></td>
<td align=center class="text">
Ваша анкета отправлена, спасибо за Ваше участие.
</td>
</tr>
</table>
% }
% if(keys(%errors) > 0) {
<table width="435" cellspacing="0" cellpadding="10" border="0">
<tr>
<td><img src="/i/escape/error.jpg"></td>
<td align=center class="text">
При заполнении анкеты произошли ошибки, неправильно заполненные поля выделены цветом.
</td>
</tr>
</table>
% }
% if(!$ARGS{posted} || ($ARGS{posted} && keys(%errors) > 0)) {
<form action="anket.html" method="post">
<input type="hidden" name="posted" value="1">
<table width="435" border="0" cellspacing="0" cellpadding="10">
% my $j = 0;
% foreach my $field (@fields) {
% my $fname = (keys(%$field))[0];
<tr bgcolor="<% color('#E9F6FE', '#ffffff') %>" <%exists($errors{$fname}) ? 'class=required' : ''%> title="<%$errors{$fname}%>">
<td valign="top" class="text" <% $j == 10 ? ' colspan=2 ' : undef %>><%$fname%>
% if($j != 10) {
</td><td valign="top" class="text">
% } else {
<br><div id="list"><ul>
%}
% my $index = 1;
% foreach my $fields (@{$field->{$fname}}) {
% if($fields->{type} eq 'textarea') {
<textarea name="<%$fields->{name}%>" rows="<%$fields->{rows}%>"><%$ARGS{$fields->{name}}%></textarea>
% } elsif($fields->{type} ne 'text') {
% my $label_id = int rand(999);
% my @options = ref($ARGS{$fields->{name}}) ? @{$ARGS{$fields->{name}}} : $ARGS{$fields->{name}};
% my $checked;
% for my $idx (@options) {
% if($index == $idx) { $checked = 'checked'; last }
% }
<% $j == 10 ? '<li>' : undef %><input id="l<%$label_id%>" type="<%$fields->{type}%>" name="<%$fields->{name}%>" value="<%$index%>" style="<%$fields->{style}%>" <%$checked%>><label for="l<%$label_id%>" > <%$fields->{text}%><br></label><% $j == 10 ? '</li>' : undef %>
% } else {
% my $value = $ARGS{$fields->{name}};
% if(!$value && $fields->{"check"} eq 'http') {
% $value = 'http://';
% }
<input type="<%$fields->{type}%>" name="<%$fields->{name}%>" value="<%$value%>" style="<%$fields->{style}%>"><%$fields->{text}%>
% }
% $index++;
% }
% if($j == 10) {
</ul></div>
% }
</td>
</tr>
% $j++;
% }
<tr>
<td align="right" class="text"><label>
<input type="submit" name="Submit" value="Отправить анкету">
</label></td>
<td valign="top" class="text"> </td>
</tr>
<tr>
<td valign="top" class="text"><font color="#CC0000">*</font> Если у тебя нет блога - заведи. Это обязательное
условие. </td>
<td valign="top" class="text"> </td>
</tr>
</table>
<br>
</form>
% }
</td>
</tr>
</table>
</div>
<& comps/footer.msn &>
<%once>
use Encode;
</%once>
<%init>
my @fields = $m->comp("subs/form-data.msn");
my %errors;
my %data;
my $ic = 'utf8';
my $cd = $ARGS{"Submit"};
for (qw(cp1251 koi8-r utf8)) {
next unless encode('utf8', decode($_, $cd||'')) eq "Отправить анкету";
$ic = $_;
last;
}
for(keys %ARGS)
{
$ARGS{$_} = encode("utf8", decode($ic, $ARGS{$_}));
}
if($ARGS{posted})
{
# die Dumper (\%ARGS);
foreach my $field (@fields)
{
my $fname = (keys(%$field))[0];
foreach my $fields (@{$field->{$fname}})
{
if(($fields->{type} eq 'radio') or ($fields->{type} eq 'checkbox'))
{
my @options = ref($ARGS{$fields->{name}}) ? @{$ARGS{$fields->{name}}} : $ARGS{$fields->{name}};
if($fname eq "Отметь страны/регионы, в которых ты был")
{
$data{$fname} = join ", ", map {$_->{text}} (@{$field->{$fname}})[ map {$_ - 1} @options ];
} else {
if(!$options[0])
{
$errors{$fname} = "Выберите вариант";
next;
}
else
{
$data{$fname} = join ", ", map {$_->{text}} (@{$field->{$fname}})[ map {$_ - 1} @options ];
}}
}
else
{
my $value = $ARGS{$fields->{name}};
$value =~ s/\s+$//;
$value =~ s/^\s+$//;
if($fields->{check} eq 'int')
{
$value =~ s/^0//;
if($value !~ /^\d+$/)
{
$errors{$fname} = "Поле может содержать только цифры";
next;
}
else { push @{$data{$fname}}, $value; }
}
elsif($fields->{"check"} eq 'http')
{
if($value !~ m!^http://\S{5,}$!)
{
$errors{$fname} = "Некорретная ссылка";
last;
} else { $data{$fname} = $value }
}
elsif($fields->{"check"} eq 'email')
{
if($value !~ m!^\S+@\S+\.\S+$!)
{
$errors{$fname} = "Неправильный адрес электронной почты";
last;
} else { $data{$fname} = $value }
}
else {
unless(length($value))
{
$errors{$fname} = "Поле не заполнено";
last;
} else
{
$data{$fname} = $value;
}
}
}
}
}
# Особая проверка на дату, кривовато, но что поделать...
my $key = "Дата рождения";
my $birth_time;
if(!$errors{$key})
{
my($day, $mon, $year) = @{$data{$key}};
$mon--;
eval qq{
\$birth_time = Time::Local::timelocal(0, 0, 0, \$day, \$mon, \$year);
};
if($@)
{
$errors{$key} = "Ошибочная дата рождения";
}
}
if(keys(%errors) == 0)
{
# проверки на непрохождение анкеты
# my $age = ((( time() - $birth_time) / 60) / 60) / 24;
# if( ($age < 7300 || $age > 10950) || # Возраст от 20 до 30 лет
# ($ARGS{education} == 1 or $ARGS{education} == 2) || # Образование: среднее, среднее специально
# ($ARGS{digital_photo} == 2) || # Цифровая фотография: нет
# ($ARGS{sickness} == 1) || # Хронические заболевания: да
# ($ARGS{ready_for_action} == 2) || # Рюкзак, 25 кг на собственном горбу: нет,
# ($ARGS{countries} >= 12)) # Страны "больше" австралии
# {
# # Посылка сообщения о том, что анкета не прошла по критериям
# my $msg = $m->comp("comps/sendmail-out-of-restrictions.msn",
# from => "escape\@rambler-co.ru",
# to => $data{"E-mail адрес"},
# data => \%data,
# fields => \@fields
# );
# $m->comp("subs/sendmail.msn",
# msg => $msg
# );
# }
my $msg = $m->comp("comps/sendmail.msn",
from => "escape\@rambler-co.ru",
to => "pobeg\@prt.ru",
data => \%data,
fields => \@fields
);
$m->comp("subs/sendmail.msn",
msg => $msg
);
$r->header_out('Location', "anket.html?send_ok=1");
$r->status(302);
$r->send_http_header;
$m->abort;
}
}
</%init>
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.