Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) The CORE
package SQL::LinkTable;

use strict;
use base 'SQL::ProtoTable';

sub db_table
{
	return 'links';
}

sub available_filters {
	my @available_filters = qw(	
					_class_filter
					_status_filter
					_in_id_filter
					_id_filter
					_name_filter
					_class_excludes_filter
					_excludes_filter
					_datetime_filter
					_date_equal_filter
					_date_filter
		
					_dest_id_filter
					_source_id_filter
					_source_class_filter
					_dest_class_filter
				);
	return \@available_filters; 
}

# ----------------------------------------------------------------------------
# �������� ������ � ��������, ������ ��� ������� �����!
# ��� ����� �������� - ���������� ��� ���� ����������.
#
#   attr - ������������ ��������, �������� ��������;
#   type - ��� ���������, ��������� ��� ������������;
#   rusname - ������� ��������, ����� �� ��������� ��� �����������;
#   hidden - ����� 1, ����� 
#   readonly - ������������� ��� ������ ������ ��� ��������� � ����������
#   db_field - ���� � �������
#   default  - �������� �� ��������� (���� ������ ����� ��� ��������)
# ----------------------------------------------------------------------------
sub required_properties
{
	return (
		{							# ������������� ���������, �������� �� ���� �����...
			'attr'		=> 'id',
			'type'		=> 'integer',
			'rusname'	=> '������������� ���������',
			'hidden'	=> 1,
			'auto'		=> 1,
			'db_field'	=> 'id',
			'readonly'	=> 1,
			'db_type'	=> 'integer',
		},
		{							# ����� ���������...
			'attr'		=> 'class',
			'type'		=> 'string',
			'rusname'	=> '����� ���������',
			'hidden'	=> 1,
			'db_field'	=> 'class',
			'readonly'	=> 1,
			'db_type'	=> 'varchar(48)',
		},
		{						       # ��� ���������...
			'attr'		=> 'source_id',
			'type'		=> 'string',
			'rusname'	=> 'ID ���������',
			'db_field'	=> 'source_id',
			'db_type'	=> 'integer',
		},
		{						       # ��� ���������...
			'attr'		=> 'source_class',
			'type'		=> 'string',
			'rusname'	=> '����� ���������',
			'db_field'	=> 'source_class',
			'db_type'	=> 'varchar(48)',
		},
		{						       # ��� ���������...
			'attr'		=> 'dest_id',
			'type'		=> 'string',
			'rusname'	=> 'ID ����',
			'db_field'	=> 'dest_id',
			'db_type'	=> 'integer',
		},
		{							# ��� ���������...
			'attr'		=> 'dest_class',
			'type'		=> 'string',
			'rusname'	=> '����� ����',
			'db_field'	=> 'dest_class',
			'db_type'	=> 'varchar(48)',
		},
		{							# ����� �������� ���������, ��������� ����...
			'attr'		=> 'ctime',
			'type'		=> 'datetime',
			'rusname'	=> '����� ��������',
			'hidden'	=> 1,
			'auto'		=> 1,
			'db_field'	=> 'ctime',
			'readonly'	=> 1,
			'default'	=> 'CURRENT_TIMESTAMP',
			'db_type'	=> 'timestamp',
		},
		{							# ����� ����������� ���������, ��������� ����...
			'attr'		=> 'mtime',
			'type'		=> 'datetime',
			'rusname'	=> '����� �����������',
			'hidden'	=> 1,
			'auto'		=> 1,
			'db_field'	=> 'mtime',
			'default'	=> 'CURRENT_TIMESTAMP',
			'db_type'	=> 'timestamp',
		},
		{							# ���� ���� ������� �������� ����������...
			'attr'		=> 'status',
			'type'		=> 'status',
			'rusname'	=> '������',
			'db_field'	=> 'status',
			'db_type'	=> 'integer',
		},
	);
}


########### FILTERS DESCRIPTION ####################################################################################
sub _dest_id_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{dest_id}) );
	return &SQL::Common::_generic_int_filter('d.dest_id', $opts{dest_id});
}

sub _source_id_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{source_id}) );
	return &SQL::Common::_generic_int_filter('d.source_id', $opts{source_id});
}

sub _source_class_filter {
        my ($self, %opts)=@_;
        return undef unless ( exists($opts{source_class}) );
        return &SQL::Common::_generic_text_filter('d.source_class', $opts{source_class});
}

sub _dest_class_filter {
        my ($self, %opts)=@_;
        return undef unless ( exists($opts{dest_class}) );
        return &SQL::Common::_generic_text_filter('d.dest_class', $opts{dest_class});
}

1;

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

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

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

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

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