package users::SQL::CredentialsTable;
use strict;
use base 'SQL::DocumentTable';
use Contenido::Globals;
sub db_table
{
return 'profile_credentials';
}
sub available_filters {
my @available_filters = qw(
_class_filter
_status_filter
_in_id_filter
_id_filter
_name_filter
_class_excludes_filter
_sfilter_filter
_datetime_filter
_date_equal_filter
_date_filter
_previous_days_filter
_s_filter
_excludes_filter
_link_filter
_uid_filter
_uid_not_filter
_ext_id_filter
_main_filter
);
return \@available_filters;
}
# ----------------------------------------------------------------------------
# Свойства храним в массивах, потому что порядок важен!
# Это общие свойства - одинаковые для всех документов.
#
# attr - обязательный параметр, название атрибута;
# type - тип аттрибута, требуется для отображдения;
# rusname - русское название, опять же требуется для отображения;
# hidden - равен 1, когда
# readonly - инициализации при записи только без изменения в дальнейшем
# db_field - поле в таблице
# default - значение по умолчанию (поле всегда имеет это значение)
# ----------------------------------------------------------------------------
sub required_properties
{
my $self = shift;
my @parent_properties = grep { $_->{attr} ne 'sections' && $_->{attr} ne 'dtime' } $self->SUPER::required_properties;
return (
@parent_properties,
{
'attr' => 'uid',
'type' => 'pickup',
'rusname' => 'Идентификатор пользователя',
'lookup_opts' => {
'class' => $state->{users}->profile_document_class,
'search_by' => 'name',
},
'db_field' => 'uid',
'db_type' => 'integer',
'db_opts' => "not null default 0",
},
{
'attr' => 'ext_id',
'type' => 'integer',
'rusname' => 'External ID',
'db_field' => 'ext_id',
'db_type' => 'integer',
'db_opts' => "not null default 0",
'default' => 0,
},
{
'attr' => 'opaque',
'type' => 'status',
'rusname' => 'Видимость',
'cases' => [
[0, 'не видно никому'],
[1, 'видно близким людям'],
[2, 'видно всем друзьям'],
[3, 'видно всем пользователям'],
[10, 'видно всем'],
],
'db_field' => 'opaque',
'db_type' => 'integer',
},
{
'attr' => 'confirm',
'type' => 'string',
'rusname' => 'Confirmation string',
'db_field' => 'confirm',
'db_type' => 'varchar(32)',
},
{
'attr' => 'main',
'type' => 'checkbox',
'rusname' => 'Main credential',
'db_field' => 'main',
'db_type' => 'integer',
},
{
'attr' => 'sections',
'type' => 'sections_list',
'rusname' => 'Секция',
'hidden' => 1,
'db_field' => 'sections',
'db_type' => 'integer',
},
);
}
sub _s_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{s} );
return &SQL::Common::_generic_int_filter('d.sections', $opts{s});
}
sub _uid_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{uid} );
return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
}
sub _uid_not_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{uid_not} );
return &SQL::Common::_generic_int_filter('d.uid', $opts{uid_not}, 1);
}
sub _main_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{main} );
return &SQL::Common::_generic_int_filter('d.main', $opts{main});
}
sub _ext_id_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{ext_id} );
return &SQL::Common::_generic_int_filter('d.ext_id', $opts{ext_id});
}
sub _name_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{name} );
if ( exists $opts{ext_id} ) {
return &SQL::Common::_generic_text_filter('d.name', $opts{name});
} else {
my ($w1, $v1) = &SQL::Common::_generic_text_filter('d.name', $opts{name});
my ($w2, $v2) = &SQL::Common::_generic_int_filter('d.ext_id', 0);
return " ($w1) AND ($w2) ", [@$v1, @$v2];
}
}
1;