Line # Revision Author
1 196 ahitrov package users::SQL::UserProfile;
2
3 use base 'SQL::DocumentTable';
4
5 sub db_table
6 {
7 return 'profiles';
8 }
9
10 my $available_filters = [qw(
11
12 _class_filter
13 _status_filter
14 _in_id_filter
15 _id_filter
16 _name_filter
17 _class_excludes_filter
18 _sfilter_filter
19 _excludes_filter
20 _datetime_filter
21 _date_equal_filter
22 _date_filter
23 _previous_days_filter
24 _s_filter
25
26 _login_filter
27 _email_filter
28 _nickname_filter
29 )];
30
31 sub available_filters {
32 return $available_filters;
33 }
34
35 my @required_properties = (
36 { # Идентификатор документа, сквозной по всем типам...
37 'attr' => 'id',
38 'type' => 'integer',
39 'rusname' => 'Идентификатор документа',
40 'hidden' => 1,
41 'readonly' => 1,
42 'auto' => 1,
43 'db_field' => 'id',
44 'db_type' => 'integer',
45 'db_opts' => "not null default nextval('public.documents_id_seq'::text)",
46 },
47 { # Класс документа...
48 'attr' => 'class',
49 'type' => 'string',
50 'rusname' => 'Класс документа',
51 'hidden' => 1,
52 'readonly' => 1,
53 'db_field' => 'class',
54 'db_type' => 'varchar(48)',
55 'db_opts' => 'not null',
56 },
57 { # Ф.И.О....
58 'attr' => 'name',
59 'type' => 'string',
60 'rusname' => 'Ф.И.О.',
61 'column' => 2,
62 'db_field' => 'name',
63 'db_type' => 'varchar(255)',
64 },
65 { # Время создания документа, служебное поле...
66 'attr' => 'ctime',
67 'type' => 'datetime',
68 'rusname' => 'Время создания',
69 'readonly' => 1,
70 'auto' => 1,
71 'hidden' => 1,
72 'db_field' => 'ctime',
73 'db_type' => 'timestamp',
74 'db_opts' => 'not null default now()',
75 'default' => 'CURRENT_TIMESTAMP',
76 },
77 { # Время модификации документа, служебное поле...
78 'attr' => 'mtime',
79 'type' => 'datetime',
80 'rusname' => 'Время модификации',
81 'hidden' => 1,
82 'auto' => 1,
83 'db_field' => 'mtime',
84 'db_type' => 'timestamp',
85 'db_opts' => 'not null default now()',
86 'default' => 'CURRENT_TIMESTAMP',
87 },
88 { # Дата рождения
89 'attr' => 'dtime',
90 'type' => 'date',
91 'rusname' => 'Дата рождения',
92 'db_field' => 'dtime',
93 'db_type' => 'timestamp',
94 'default' => 'CURRENT_TIMESTAMP',
95 },
96 { # Дата и время логина...
97 'attr' => 'lastlogin',
98 'type' => 'datetime',
99 'rusname' => 'Дата и время последнего логина<sup style="color:#888;">&nbsp;1)</sup>',
100 'column' => 1,
101 'db_field' => 'lastlogin',
102 'db_type' => 'timestamp',
103 'db_opts' => 'not null default now()',
104 'default' => 'CURRENT_TIMESTAMP',
105 },
106 { # Массив секций, обрабатывается специальным образом...
107 'attr' => 'sections',
108 'type' => 'sections_list',
109 'rusname' => 'Секции',
110 'hidden' => 1,
111 'db_field' => 'sections',
112 'db_type' => 'integer[]',
113 },
114 { # Одно поле статуса является встроенным...
115 'attr' => 'status',
116 'type' => 'status',
117 'rusname' => 'Статус',
118 'db_field' => 'status',
119 'db_type' => 'integer',
120 },
121 { # Дополнительное поле статуса
122 'attr' => 'type',
123 'type' => 'integer',
124 'rusname' => 'Тип пользователя (project-oriented)',
125 'db_field' => 'type',
126 'db_type' => 'integer',
127 },
128 { # Никнейм...
129 'attr' => 'nickname',
130 'type' => 'string',
131 'rusname' => 'Ник',
132 'column' => 3,
133 'db_field' => 'nickname',
134 'db_type' => 'text',
135 },
136 { # Login...
137 'attr' => 'login',
138 'type' => 'string',
139 'rusname' => 'Логин',
140 'column' => 4,
141 'db_field' => 'login',
142 'db_type' => 'text',
143 },
144 { # Login method...
145 'attr' => 'login_method',
146 'type' => 'string',
147 'rusname' => 'Метод входа',
148 'db_field' => 'login_method',
149 'db_type' => 'text',
150 },
151 { # E-mail...
152 'attr' => 'email',
153 'type' => 'string',
154 'rusname' => 'E-mail (primary)',
155 'db_field' => 'email',
156 'db_type' => 'text',
157 },
158
159 );
160
161 # ----------------------------------------------------------------------------
162 # Свойства храним в массивах, потому что порядок важен!
163 # Это общие свойства - одинаковые для всех документов.
164 #
165 # attr - обязательный параметр, название атрибута;
166 # type - тип аттрибута, требуется для отображдения;
167 # rusname - русское название, опять же требуется для отображения;
168 # hidden - равен 1, когда
169 # readonly - инициализации при записи только без изменения в дальнейшем
170 # db_field - поле в таблице
171 # default - значение по умолчанию (поле всегда имеет это значение)
172 # ----------------------------------------------------------------------------
173 sub required_properties
174 {
175 return @required_properties;
176 }
177
178 ########### FILTERS DESCRIPTION ####################################################################################
179 sub _login_filter {
180 my ($self,%opts)=@_;
181 return undef unless ( exists($opts{login}) );
182 if (exists $opts{ilike} && $opts{ilike} == 1) {
183 return &SQL::Common::_generic_name_filter('d.login', $opts{login}, 0, \%opts);
184 }else{
185 return &SQL::Common::_generic_text_filter('d.login', $opts{login});
186 }
187 }
188
189 sub _email_filter {
190 my ($self,%opts)=@_;
191 return undef unless ( exists($opts{email}) );
192 if (exists $opts{ilike} && $opts{ilike} == 1) {
193 return &SQL::Common::_generic_name_filter('d.email', $opts{email}, 0, \%opts);
194 }else{
195 return &SQL::Common::_generic_text_filter('d.email', $opts{email});
196 }
197 }
198
199 sub _nickname_filter {
200 my ($self,%opts)=@_;
201 return undef unless ( exists($opts{nickname}) );
202 if (exists $opts{ilike} && $opts{ilike} == 1) {
203 return &SQL::Common::_generic_name_filter('d.nickname', $opts{nickname}, 0, \%opts);
204 }else{
205 return &SQL::Common::_generic_text_filter('d.nickname', $opts{nickname});
206 }
207 }
208
209 1;