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