Line # Revision Author
1 741 ahitrov package SQL::MailQueueTable;
2
3 use strict;
4 use base 'SQL::ProtoTable';
5
6 sub db_table
7 {
8 return 'mailqueue';
9 }
10
11 sub db_id_sequence {
12 return 'mailqueue_id_seq';
13 }
14
15 sub available_filters {
16 my @available_filters = qw(
17 _class_filter
18 _status_filter
19 _in_id_filter
20 _id_filter
21 _name_filter
22 _class_excludes_filter
23 _sfilter_filter
24 _datetime_filter
25 _date_equal_filter
26 _date_filter
27 _previous_days_filter
28 _prev_to_filter
29 _next_to_filter
30 _s_filter
31
32 _excludes_filter
33 _link_filter
34 );
35 return \@available_filters;
36 }
37
38 # ----------------------------------------------------------------------------
39 # Свойства храним в массивах, потому что порядок важен!
40 # Это общие свойства - одинаковые для всех документов.
41 #
42 # attr - обязательный параметр, название атрибута;
43 # type - тип аттрибута, требуется для отображдения;
44 # rusname - русское название, опять же требуется для отображения;
45 # hidden - равен 1, когда
46 # readonly - инициализации при записи только без изменения в дальнейшем
47 # db_field - поле в таблице
48 # default - значение по умолчанию (поле всегда имеет это значение)
49 # ----------------------------------------------------------------------------
50 sub required_properties
51 {
52 my $self = shift;
53 my $id_sequence = $self->db_id_sequence();
54 return (
55 { # Идентификатор документа, сквозной по всем типам...
56 'attr' => 'id',
57 'type' => 'integer',
58 'rusname' => 'Идентификатор документа',
59 'hidden' => 1,
60 'readonly' => 1,
61 'auto' => 1,
62 'db_field' => 'id',
63 'db_type' => 'integer',
64 'db_opts' => "not null default nextval('public.$id_sequence'::text)",
65 },
66 { # Класс документа...
67 'attr' => 'class',
68 'type' => 'string',
69 'rusname' => 'Класс документа',
70 'column' => 3,
71 'hidden' => 1,
72 'readonly' => 1,
73 'db_field' => 'class',
74 'db_type' => 'varchar(48)',
75 'db_opts' => 'not null',
76 },
77 {
78 'attr' => 'name',
79 'type' => 'string',
80 'rusname' => 'Получатель',
81 'column' => 3,
82 'db_field' => 'name',
83 'db_type' => 'varchar(255)',
84 },
85 {
86 'attr' => 'subject',
87 'type' => 'string',
88 'rusname' => 'Тема',
89 'column' => 4,
90 'db_field' => 'subject',
91 'db_type' => 'varchar(255)',
92 },
93 { # Время создания документа, служебное поле...
94 'attr' => 'ctime',
95 'type' => 'datetime',
96 'rusname' => 'Время создания',
97 'readonly' => 1,
98 'auto' => 1,
99 'hidden' => 1,
100 'db_field' => 'ctime',
101 'db_type' => 'timestamp',
102 'db_opts' => 'not null default now()',
103 'default' => 'CURRENT_TIMESTAMP',
104 },
105 { # Время модификации документа, служебное поле...
106 'attr' => 'mtime',
107 'type' => 'datetime',
108 'rusname' => 'Время модификации',
109 'hidden' => 1,
110 'auto' => 1,
111 'db_field' => 'mtime',
112 'db_type' => 'timestamp',
113 'db_opts' => 'not null default now()',
114 'default' => 'CURRENT_TIMESTAMP',
115 },
116 { # Дата и время отправки...
117 'attr' => 'dtime',
118 'type' => 'datetime',
119 'rusname' => 'Отправить',
120 'column' => 1,
121 'db_field' => 'dtime',
122 'db_type' => 'timestamp',
123 'db_opts' => 'not null default now()',
124 'default' => 'CURRENT_TIMESTAMP',
125 },
126 {
127 'attr' => 'etime',
128 'type' => 'datetime',
129 'rusname' => 'Отправлено',
130 'column' => 2,
131 'allow_null' => 1,
132 'db_field' => 'etime',
133 'db_type' => 'timestamp',
134 },
135 { # Массив секций, обрабатывается специальным образом...
136 'attr' => 'sections',
137 'type' => 'sections_list',
138 'rusname' => 'Секции',
139 'hidden' => 1,
140 'db_field' => 'sections',
141 'db_type' => 'integer',
142 },
143 {
144 'attr' => 'status',
145 'type' => 'status',
146 'rusname' => 'Статус',
147 'db_field' => 'status',
148 'db_type' => 'integer',
149 },
150 );
151 }
152
153 752 ahitrov
154 sub _s_filter {
155 my ($self, %opts)=@_;
156 return undef unless ( exists $opts{s} );
157 return &SQL::Common::_generic_int_filter('d.sections', $opts{s});
158 }
159
160 741 ahitrov 1;