Line # Revision Author
1 8 ahitrov@rambler.ru package SQL::DocumentTable;
2
3 use strict;
4 use base 'SQL::ProtoTable';
5
6 sub db_table
7 {
8 return 'documents';
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 _sfilter_filter
20 _datetime_filter
21 _date_equal_filter
22 _date_filter
23 _previous_days_filter
24 _prev_to_filter
25 _next_to_filter
26 _s_filter
27
28 _excludes_filter
29 _link_filter
30 );
31 return \@available_filters;
32 }
33
34 # ----------------------------------------------------------------------------
35 # Свойства храним в массивах, потому что порядок важен!
36 # Это общие свойства - одинаковые для всех документов.
37 #
38 # attr - обязательный параметр, название атрибута;
39 # type - тип аттрибута, требуется для отображдения;
40 # rusname - русское название, опять же требуется для отображения;
41 # hidden - равен 1, когда
42 # readonly - инициализации при записи только без изменения в дальнейшем
43 # db_field - поле в таблице
44 # default - значение по умолчанию (поле всегда имеет это значение)
45 # ----------------------------------------------------------------------------
46 sub required_properties
47 {
48 388 ahitrov my $self = shift;
49 my $id_sequence = $self->db_id_sequence();
50 8 ahitrov@rambler.ru return (
51 { # Идентификатор документа, сквозной по всем типам...
52 'attr' => 'id',
53 'type' => 'integer',
54 'rusname' => 'Идентификатор документа',
55 'hidden' => 1,
56 'readonly' => 1,
57 'auto' => 1,
58 'db_field' => 'id',
59 'db_type' => 'integer',
60 388 ahitrov 'db_opts' => "not null default nextval('public.$id_sequence'::text)",
61 8 ahitrov@rambler.ru },
62 { # Класс документа...
63 'attr' => 'class',
64 'type' => 'string',
65 'rusname' => 'Класс документа',
66 'column' => 3,
67 'hidden' => 1,
68 'readonly' => 1,
69 'db_field' => 'class',
70 'db_type' => 'varchar(48)',
71 'db_opts' => 'not null',
72 },
73 { # Имя документа...
74 'attr' => 'name',
75 'type' => 'string',
76 'rusname' => 'Название',
77 'column' => 2,
78 'db_field' => 'name',
79 'db_type' => 'varchar(255)',
80 },
81 { # Время создания документа, служебное поле...
82 'attr' => 'ctime',
83 'type' => 'datetime',
84 'rusname' => 'Время создания',
85 'readonly' => 1,
86 'auto' => 1,
87 'hidden' => 1,
88 'db_field' => 'ctime',
89 'db_type' => 'timestamp',
90 'db_opts' => 'not null default now()',
91 'default' => 'CURRENT_TIMESTAMP',
92 },
93 { # Время модификации документа, служебное поле...
94 'attr' => 'mtime',
95 'type' => 'datetime',
96 'rusname' => 'Время модификации',
97 'hidden' => 1,
98 'auto' => 1,
99 'db_field' => 'mtime',
100 'db_type' => 'timestamp',
101 'db_opts' => 'not null default now()',
102 'default' => 'CURRENT_TIMESTAMP',
103 },
104 { # Дата и время документа...
105 'attr' => 'dtime',
106 'type' => 'datetime',
107 'rusname' => 'Дата и время документа<sup style="color:#888;">&nbsp;1)</sup>',
108 'column' => 1,
109 'db_field' => 'dtime',
110 'db_type' => 'timestamp',
111 'db_opts' => 'not null default now()',
112 'default' => 'CURRENT_TIMESTAMP',
113 },
114 { # Массив секций, обрабатывается специальным образом...
115 'attr' => 'sections',
116 'type' => 'sections_list',
117 'rusname' => 'Секции',
118 'hidden' => 1,
119 'db_field' => 'sections',
120 'db_type' => 'integer[]',
121 },
122 { # Одно поле статуса является встроенным...
123 'attr' => 'status',
124 'type' => 'status',
125 'rusname' => 'Статус',
126 'db_field' => 'status',
127 'db_type' => 'integer',
128 },
129 );
130 }
131
132 1;
133