Revision 121 (by ahitrov, 2011/08/22 16:08:07)
Admin Interface redesign
New image control
New AI image attachment function - url saving
%# vim:syn=mason:
% index_tree( $sect->{$root}, 0, \$line, $level, $mode, $profile, $width_limit, $root );
<%args>
$root => 1
$level => 3
$mode => 1
$width_limit => undef
$avail_classes => undef
</%args>
<%init>
my $profile = $m->comp('/contenido/components/context.msn', name => 'profile');
sub index_tree
{
my ($sect, $offset, $line_ref, $count_offset, $viewmode, $profile, $width_limit, $root) = @_;
my $section_access = $user->section_accesses($user, $sect->{id});
my $spacer = '';
for(my $c=1; $c<$offset; $c++)
{
$spacer = $spacer.(($c == $offset-1) ? ' » ' : ' ');
}
if( ref $sect && $sect->id && ($sect->id != 1) && ($offset != 0) && $section_access > 0)
{
$$line_ref++;
my $href = 'sections.html?id='.$sect->id;
my $sname = $sect->name();
$sname =~ s/<\/?.+?>//g;
$sname = substr($sname, 0, $width_limit - $offset).' ...' if defined $width_limit && $offset + length($sname) > $width_limit;
my $statstyle = $sect->contenido_status_style ? ' style="' . $sect->contenido_status_style . '"' : '';
my @properties = $sect->structure();
my ($statprop) = grep { $_->{attr} eq 'status' } @properties;
my ($statcase) = grep { $_->[0] == $sect->status } @{$statprop->{cases}} if exists $statprop->{cases} && ref $statprop->{cases} eq 'ARRAY';
my $statname = $statcase->[1] if ref $statcase;
my $html_sect = '<span'.($statstyle).(!$sect->status ? ' class="hiddensect"' : '').'>'.($section_access ? '<a href="'.$href.'"'.$statstyle.'>' : '').$sname.' ' . ($section_access ? '</a>' : '') . ' '.($sect->status != 1 && $statname ? ' <span style="font-size:12px;">('.$statname.')</span>' : '').'</span>';
my $style = ($offset == 1) ? ($viewmode ? ' style="font-size:16px;font-weight:bold;"':' style="font-size:14px;"') : ' style="font-size:12px;"';
$m->out(<<EOT);
<tr>
<td align="right"> ${$line_ref} <a href="section.html?id=$sect->{id}&move=up&ret=$root"><img src="/contenido/i/ico-up-9x10.gif" border=0 alt="����������� ������ �� ��� �����"></a> <a href="section.html?id=$sect->{id}&move=down&ret=$root"><img src="/contenido/i/ico-down-9x10.gif" border=0 alt="����������� ������ �� ��� ����"></a></td>
<td><table cellpadding="0" cellspacing="0" border="0">
<tr valign="top">
<td width="10"> </td>
<td>$spacer</td>
<td nowrap $style>$html_sect</td>
</tr>
</table>
</td>
EOT
if ($viewmode)
{
my $fhref = '/contenido/?set_context=filter-'.$sect->id();
my $new_doc_class = $sect->default_document_class;
$m->out(qq^\n<td align="center" nowrap>^);
$m->out(qq^<a href="section.html?id=$sect->{id}" title="������������� ��������� ������"><img src="/contenido/i/actions/edit.gif" width="15" height="17" align="absmiddle" border="0"></a> ^);
$m->out(qq^<a href="$fhref">������</a>^);
$m->out(qq^ <a href="document.html?sect_id=$sect->{id}&class=$new_doc_class">���.�����</a>^) if $section_access == 2 and $new_doc_class;
$m->out("</td>");
}
$m->out('</tr>');
}
my $childs = $sect->{children} || [];
if( ref($childs) && @$childs && $offset < $count_offset )
{
$offset++;
foreach my $child (@$childs)
{
next if (! $request->{cCLASSES}->{$child->class()});
index_tree( $child, $offset, $line_ref, $count_offset, $viewmode, $profile, $width_limit, $root );
}
$offset--;
}
}
$request->{cCLASSES} = {};
my @avail_classes;
if ( ref $avail_classes eq 'ARRAY' && @$avail_classes ) {
map { $request->{cCLASSES}->{$_} = 1 } @$avail_classes;
@avail_classes = @$avail_classes;
} elsif (ref($request->{tab}->{sections})) {
map { $request->{cCLASSES}->{$_} = 1 } (@{ $request->{tab}->{sections} });
return undef if (scalar(keys(%{ $request->{cCLASSES} })) == 0);
@avail_classes = keys( %{ $request->{cCLASSES} } );
}
push @avail_classes, 'Contenido::Section' unless exists $request->{cCLASSES}{'Contenido::Section'};
my $sect = $keeper->get_section_tree(root=>$root, class => \@avail_classes);
return undef unless ref $sect && exists $sect->{$root};
$user->get_accesses();
my $line = 0;
</%init>
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.