Revision 379 (by ahitrov, 2013/08/21 12:49:37) Emails control for credentials
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;