Line # Revision Author
1 305 ahitrov package users::SQL::CredentialsTable;
2
3 use strict;
4 use base 'SQL::DocumentTable';
5 341 ahitrov use Contenido::Globals;
6 305 ahitrov
7 sub db_table
8 {
9 return 'profile_credentials';
10 }
11
12 sub available_filters {
13 my @available_filters = qw(
14 _class_filter
15 _status_filter
16 _in_id_filter
17 _id_filter
18 _name_filter
19 _class_excludes_filter
20 _sfilter_filter
21 _datetime_filter
22 _date_equal_filter
23 _date_filter
24 _previous_days_filter
25 _s_filter
26
27 _excludes_filter
28 _link_filter
29 _uid_filter
30 379 ahitrov _uid_not_filter
31 305 ahitrov _ext_id_filter
32 _main_filter
33 );
34 return \@available_filters;
35 }
36
37 # ----------------------------------------------------------------------------
38 # Свойства храним в массивах, потому что порядок важен!
39 # Это общие свойства - одинаковые для всех документов.
40 #
41 # attr - обязательный параметр, название атрибута;
42 # type - тип аттрибута, требуется для отображдения;
43 # rusname - русское название, опять же требуется для отображения;
44 # hidden - равен 1, когда
45 # readonly - инициализации при записи только без изменения в дальнейшем
46 # db_field - поле в таблице
47 # default - значение по умолчанию (поле всегда имеет это значение)
48 # ----------------------------------------------------------------------------
49 sub required_properties
50 {
51 my $self = shift;
52
53 my @parent_properties = grep { $_->{attr} ne 'sections' && $_->{attr} ne 'dtime' } $self->SUPER::required_properties;
54 return (
55 @parent_properties,
56 {
57 'attr' => 'uid',
58 'type' => 'pickup',
59 'rusname' => 'Идентификатор пользователя',
60 'lookup_opts' => {
61 340 ahitrov 'class' => $state->{users}->profile_document_class,
62 305 ahitrov 'search_by' => 'name',
63 },
64 'db_field' => 'uid',
65 'db_type' => 'integer',
66 'db_opts' => "not null default 0",
67 },
68 {
69 'attr' => 'ext_id',
70 'type' => 'integer',
71 'rusname' => 'External ID',
72 'db_field' => 'ext_id',
73 'db_type' => 'integer',
74 'db_opts' => "not null default 0",
75 'default' => 0,
76 },
77 {
78 'attr' => 'opaque',
79 'type' => 'status',
80 'rusname' => 'Видимость',
81 'cases' => [
82 [0, 'не видно никому'],
83 [1, 'видно близким людям'],
84 [2, 'видно всем друзьям'],
85 [3, 'видно всем пользователям'],
86 [10, 'видно всем'],
87 ],
88 'db_field' => 'opaque',
89 'db_type' => 'integer',
90 },
91 {
92 'attr' => 'confirm',
93 'type' => 'string',
94 'rusname' => 'Confirmation string',
95 'db_field' => 'confirm',
96 'db_type' => 'varchar(32)',
97 },
98 {
99 'attr' => 'main',
100 'type' => 'checkbox',
101 'rusname' => 'Main credential',
102 'db_field' => 'main',
103 'db_type' => 'integer',
104 },
105 {
106 'attr' => 'sections',
107 'type' => 'sections_list',
108 'rusname' => 'Секция',
109 'hidden' => 1,
110 'db_field' => 'sections',
111 'db_type' => 'integer',
112 },
113
114 );
115 }
116
117
118 sub _s_filter {
119 my ($self,%opts)=@_;
120 return undef unless ( exists $opts{s} );
121 return &SQL::Common::_generic_int_filter('d.sections', $opts{s});
122 }
123
124 sub _uid_filter {
125 my ($self,%opts)=@_;
126 return undef unless ( exists $opts{uid} );
127 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
128 }
129
130 379 ahitrov sub _uid_not_filter {
131 my ($self,%opts)=@_;
132 return undef unless ( exists $opts{uid_not} );
133 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid_not}, 1);
134 }
135
136 305 ahitrov sub _main_filter {
137 my ($self,%opts)=@_;
138 return undef unless ( exists $opts{main} );
139 return &SQL::Common::_generic_int_filter('d.main', $opts{main});
140 }
141
142 sub _ext_id_filter {
143 my ($self,%opts)=@_;
144 return undef unless ( exists $opts{ext_id} );
145 return &SQL::Common::_generic_int_filter('d.ext_id', $opts{ext_id});
146 }
147
148 sub _name_filter {
149 my ($self,%opts)=@_;
150 return undef unless ( exists $opts{name} );
151 if ( exists $opts{ext_id} ) {
152 return &SQL::Common::_generic_text_filter('d.name', $opts{name});
153 } else {
154 my ($w1, $v1) = &SQL::Common::_generic_text_filter('d.name', $opts{name});
155 my ($w2, $v2) = &SQL::Common::_generic_int_filter('d.ext_id', 0);
156 return " ($w1) AND ($w2) ", [@$v1, @$v2];
157 }
158 }
159
160 1;