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 return (
49 { # Идентификатор документа, сквозной по всем типам...
50 'attr' => 'id',
51 'type' => 'integer',
52 'rusname' => 'Идентификатор документа',
53 'hidden' => 1,
54 'readonly' => 1,
55 'auto' => 1,
56 'db_field' => 'id',
57 'db_type' => 'integer',
58 'db_opts' => "not null default nextval('public.documents_id_seq'::text)",
59 },
60 { # Класс документа...
61 'attr' => 'class',
62 'type' => 'string',
63 'rusname' => 'Класс документа',
64 'column' => 3,
65 'hidden' => 1,
66 'readonly' => 1,
67 'db_field' => 'class',
68 'db_type' => 'varchar(48)',
69 'db_opts' => 'not null',
70 },
71 { # Имя документа...
72 'attr' => 'name',
73 'type' => 'string',
74 'rusname' => 'Название',
75 'column' => 2,
76 'db_field' => 'name',
77 'db_type' => 'varchar(255)',
78 },
79 { # Время создания документа, служебное поле...
80 'attr' => 'ctime',
81 'type' => 'datetime',
82 'rusname' => 'Время создания',
83 'readonly' => 1,
84 'auto' => 1,
85 'hidden' => 1,
86 'db_field' => 'ctime',
87 'db_type' => 'timestamp',
88 'db_opts' => 'not null default now()',
89 'default' => 'CURRENT_TIMESTAMP',
90 },
91 { # Время модификации документа, служебное поле...
92 'attr' => 'mtime',
93 'type' => 'datetime',
94 'rusname' => 'Время модификации',
95 'hidden' => 1,
96 'auto' => 1,
97 'db_field' => 'mtime',
98 'db_type' => 'timestamp',
99 'db_opts' => 'not null default now()',
100 'default' => 'CURRENT_TIMESTAMP',
101 },
102 { # Дата и время документа...
103 'attr' => 'dtime',
104 'type' => 'datetime',
105 'rusname' => 'Дата и время документа<sup style="color:#888;">&nbsp;1)</sup>',
106 'column' => 1,
107 'db_field' => 'dtime',
108 'db_type' => 'timestamp',
109 'db_opts' => 'not null default now()',
110 'default' => 'CURRENT_TIMESTAMP',
111 },
112 { # Массив секций, обрабатывается специальным образом...
113 'attr' => 'sections',
114 'type' => 'sections_list',
115 'rusname' => 'Секции',
116 'hidden' => 1,
117 'db_field' => 'sections',
118 'db_type' => 'integer[]',
119 },
120 { # Одно поле статуса является встроенным...
121 'attr' => 'status',
122 'type' => 'status',
123 'rusname' => 'Статус',
124 'db_field' => 'status',
125 'db_type' => 'integer',
126 },
127 );
128 }
129
130 1;
131