Line #
Revision
Author
1
8
ahitrov@rambler.ru
package SQL::LinkTable;
2
3
use strict;
4
use base 'SQL::ProtoTable';
5
6
sub db_table
7
{
8
return 'links';
9
}
10
11
sub available_filters {
12
my @available_filters = qw(
13
_class_filter
14
_status_filter
15
_in_id_filter
16
_id_filter
17
_name_filter
18
_class_excludes_filter
19
_excludes_filter
20
_datetime_filter
21
_date_equal_filter
22
_date_filter
23
24
_dest_id_filter
25
_source_id_filter
26
_source_class_filter
27
_dest_class_filter
28
);
29
return \@available_filters;
30
}
31
32
# ----------------------------------------------------------------------------
33
# Свойства храним в массивах, потому что порядок важен!
34
# Это общие свойства - одинаковые для всех документов.
35
#
36
# attr - обязательный параметр, название атрибута;
37
# type - тип аттрибута, требуется для отображдения;
38
# rusname - русское название, опять же требуется для отображения;
39
# hidden - равен 1, когда
40
# readonly - инициализации при записи только без изменения в дальнейшем
41
# db_field - поле в таблице
42
# default - значение по умолчанию (поле всегда имеет это значение)
43
# ----------------------------------------------------------------------------
44
sub required_properties
45
{
46
return (
47
{ # Идентификатор документа, сквозной по всем типам...
48
'attr' => 'id',
49
'type' => 'integer',
50
'rusname' => 'Идентификатор документа',
51
'hidden' => 1,
52
'auto' => 1,
53
'db_field' => 'id',
54
'readonly' => 1,
55
'db_type' => 'integer',
56
},
57
{ # Класс документа...
58
'attr' => 'class',
59
'type' => 'string',
60
'rusname' => 'Класс документа',
61
'hidden' => 1,
62
'db_field' => 'class',
63
'readonly' => 1,
64
'db_type' => 'varchar(48)',
65
},
66
{ # Имя документа...
67
'attr' => 'source_id',
68
'type' => 'string',
69
'rusname' => 'ID Источника',
70
'db_field' => 'source_id',
71
'db_type' => 'integer',
72
},
73
{ # Имя документа...
74
'attr' => 'source_class',
75
'type' => 'string',
76
'rusname' => 'Класс источника',
77
'db_field' => 'source_class',
78
'db_type' => 'varchar(48)',
79
},
80
{ # Имя документа...
81
'attr' => 'dest_id',
82
'type' => 'string',
83
'rusname' => 'ID цели',
84
'db_field' => 'dest_id',
85
'db_type' => 'integer',
86
},
87
{ # Имя документа...
88
'attr' => 'dest_class',
89
'type' => 'string',
90
'rusname' => 'Класс цели',
91
'db_field' => 'dest_class',
92
'db_type' => 'varchar(48)',
93
},
94
{ # Время создания документа, служебное поле...
95
'attr' => 'ctime',
96
'type' => 'datetime',
97
'rusname' => 'Время создания',
98
'hidden' => 1,
99
'auto' => 1,
100
'db_field' => 'ctime',
101
'readonly' => 1,
102
'default' => 'CURRENT_TIMESTAMP',
103
'db_type' => 'timestamp',
104
},
105
{ # Время модификации документа, служебное поле...
106
'attr' => 'mtime',
107
'type' => 'datetime',
108
'rusname' => 'Время модификации',
109
'hidden' => 1,
110
'auto' => 1,
111
'db_field' => 'mtime',
112
'default' => 'CURRENT_TIMESTAMP',
113
'db_type' => 'timestamp',
114
},
115
{ # Одно поле статуса является встроенным...
116
'attr' => 'status',
117
'type' => 'status',
118
'rusname' => 'Статус',
119
'db_field' => 'status',
120
'db_type' => 'integer',
121
},
122
);
123
}
124
125
126
########### FILTERS DESCRIPTION ####################################################################################
127
sub _dest_id_filter {
128
my ($self,%opts)=@_;
129
return undef unless ( exists($opts{dest_id}) );
130
return &SQL::Common::_generic_int_filter('d.dest_id', $opts{dest_id});
131
}
132
133
sub _source_id_filter {
134
my ($self,%opts)=@_;
135
return undef unless ( exists($opts{source_id}) );
136
return &SQL::Common::_generic_int_filter('d.source_id', $opts{source_id});
137
}
138
139
sub _source_class_filter {
140
my ($self, %opts)=@_;
141
return undef unless ( exists($opts{source_class}) );
142
return &SQL::Common::_generic_text_filter('d.source_class', $opts{source_class});
143
}
144
145
sub _dest_class_filter {
146
my ($self, %opts)=@_;
147
return undef unless ( exists($opts{dest_class}) );
148
return &SQL::Common::_generic_text_filter('d.dest_class', $opts{dest_class});
149
}
150
151
1;
152
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.