Revision 371 (by ahitrov, 2013/07/24 17:13:31) Some links bug fixes
<%ARGS>

        $id	=> undef
	$class	=> undef
	$source_class	=> undef
	$dest_class	=> undef
	$update	=> undef
	$parent_url	=> undef

</%ARGS>


<%init>
	if ($id) {
		my $document = $keeper->get_document_by_id($id, class=>$class);

		if ( $update ) {

			my %updated;
			while ( my ($field, $value) = each %ARGS ) {
				if ( $field =~ /^update_(\d+)_(\w+)$/ ) {
					my $oid = $1;
					my $attr = $2;
					$updated{$oid}{$attr} = $value;
				}
			}
			my %classes = map { $_->{class} => 1 } values %updated;
			foreach my $update_class ( keys %classes ) {
				my @ids;
				while ( my ($oid, $attr) = each %updated) {
					push @ids, $oid		if $attr->{class} eq $update_class;
				}
				my @objects = $keeper->get_links (
						id      => \@ids,
						class   => $update_class
					)			if @ids;
				foreach my $object ( @objects ) {
					my $fields = $updated{$object->id};
					my @props = grep { exists $_->{inline} && $_->{inline} } $object->structure;
					if ( ref $fields eq 'HASH' ) {
						foreach my $prop ( @props ) {
							my $attr = $prop->{attr};
							my $value = ref $fields && exists $fields->{$attr} ? $fields->{$attr} : undef;
							if ( $prop->{db_type} eq 'float' ) {
								for ( $value ) {
									s/\,/\./;
									s/^\s+//;
									s/\s+$//;
								}
							}
							if ( $prop->{type} eq 'checkbox' ) {
								$value = $value ? 1 : undef;
							}

							$object->$attr($value);
						}
						$object->store;
					}
				}
			}

		} else {
			my @link_args = ();
			if ( exists $ARGS{links} && ref $ARGS{links} eq 'ARRAY' ) {
				@link_args = @{ $ARGS{links} }
			} elsif ( exists $ARGS{links} ) {
				@link_args = ( $ARGS{links} );
			}

			my %nlinks = ();
			foreach my $name (@link_args)
			{
				if ($name =~ /^link_(\d+)_(\d+)_(.*)$/)
				{
					my ($id, $dest_id, $lclass) = ($1, $2, $3);
					if ( $id && $lclass ) {
						my $link = $keeper->get_link_by_id ($id,
							class   => $lclass,
						);
						$link->delete		if ref $link;
					}
				}
			}
		}

		$parent_url = URI::Escape::uri_escape( $parent_url )	if $parent_url;
		# ������� �� ���������� ���������...
		if ( $source_class ) {
			$m->redirect ("document_links.html?id=$id&class=$class&source_class=$source_class&parent_url=$parent_url");
		} elsif ( $dest_class ) {
			$m->redirect ("document_links.html?id=$id&class=$class&dest_class=$dest_class&parent_url=$parent_url");
		} else {
			$m->redirect ("document_links.html?id=$id&class=$class&parent_url=$parent_url");
		}
	}

</%init>

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

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

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

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

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