Line # Revision Author
1 8 ahitrov@rambler.ru package SQL::UserTable;
2
3 use strict;
4 use base 'SQL::ProtoTable';
5 use vars qw($available_filters @required_properties);
6
7 sub db_table
8 {
9 return 'users';
10 }
11
12 $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 _groups_filter
25 _login_filter
26 )];
27
28 sub available_filters {
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 @required_properties = (
45 { # Идентификатор документа, сквозной по всем типам...
46 'attr' => 'id',
47 'type' => 'integer',
48 'rusname' => 'Идентификатор документа',
49 'hidden' => 1,
50 'auto' => 1,
51 'readonly' => 1,
52 'db_field' => 'id',
53 'db_type' => 'integer',
54 },
55 { # Идентификатор документа, сквозной по всем типам...
56 'attr' => 'login',
57 'type' => 'string',
58 'rusname' => 'Логин',
59 'db_field' => 'login',
60 'db_type' => 'varchar(255)',
61 },
62 { # Класс документа...
63 'attr' => 'class',
64 'type' => 'string',
65 'rusname' => 'Класс документа',
66 'hidden' => 1,
67 'readonly' => 1,
68 'db_field' => 'class',
69 'db_type' => 'varchar(48)',
70 },
71 { # Имя документа...
72 'attr' => 'name',
73 'type' => 'string',
74 'rusname' => 'ФИО',
75 'db_field' => 'name',
76 'db_type' => 'varchar(255)',
77 },
78 { # Время создания документа, служебное поле...
79 'attr' => 'ctime',
80 'type' => 'datetime',
81 'rusname' => 'Время создания',
82 'hidden' => 1,
83 'auto' => 1,
84 'readonly' => 1,
85 'db_field' => 'ctime',
86 'db_type' => 'timestamp',
87 'default' => 'CURRENT_TIMESTAMP',
88 },
89 { # Время модификации документа, служебное поле...
90 'attr' => 'mtime',
91 'type' => 'datetime',
92 'rusname' => 'Время модификации',
93 'hidden' => 1,
94 'auto' => 1,
95 'db_field' => 'mtime',
96 'db_type' => 'timestamp',
97 'default' => 'CURRENT_TIMESTAMP',
98 },
99 { # Одно поле статуса является встроенным...
100 'attr' => 'status',
101 'type' => 'status',
102 'rusname' => 'Статус',
103 'db_field' => 'status',
104 'db_type' => 'integer',
105 },
106 { # Пароль
107 'attr' => 'passwd',
108 'type' => 'string',
109 'rusname' => 'Пароль',
110 'db_field' => 'passwd',
111 'db_type' => 'varchar(255)',
112 },
113 { # Группы
114 'attr' => 'groups',
115 'type' => 'array of integer',
116 'rusname' => 'Группы',
117 'hidden' => 1,
118 'db_field' => 'groups',
119 'db_type' => 'integer[]',
120 }
121 );
122
123 sub required_properties {
124 return @required_properties;
125 }
126
127 ########### FILTERS DESCRIPTION ####################################################################################
128 sub _login_filter {
129 my ($self,%opts)=@_;
130 return undef unless ( exists($opts{login}) );
131 return &SQL::Common::_generic_text_filter('d.login', $opts{login});
132 }
133
134 sub _groups_filter {
135 my ($self,%opts)=@_;
136 return undef unless ( exists($opts{s}) );
137 return &SQL::Common::_generic_intarray_filter('d.groups', $opts{s});
138 }
139
140 1;