Revision 195 (by ahitrov, 2012/03/15 18:26:13) Users plugin
package users::SQL::UserProfile;

use base 'SQL::DocumentTable';

sub db_table
{
        return 'profiles';
}

my $available_filters = [qw(

					_class_filter
					_status_filter
					_in_id_filter
					_id_filter
					_name_filter
					_class_excludes_filter
					_sfilter_filter
					_excludes_filter
					_datetime_filter
					_date_equal_filter
					_date_filter
					_previous_days_filter
					_s_filter

					_type_filter
					_login_filter
					_email_filter
					_nickname_filter
			)];

sub available_filters {
	return $available_filters;
}

my @required_properties = (
		{						       # ������������� ���������, �������� �� ���� �����...
			'attr'		=> 'id',
			'type'		=> 'integer',
			'rusname'	=> '������������� ���������',
			'hidden'	=> 1,
			'readonly'	=> 1,
			'auto'		=> 1,
			'db_field'	=> 'id',
			'db_type'	=> 'integer',
			'db_opts'	=> "not null default nextval('public.documents_id_seq'::text)",
		},
		{						       # ����� ���������...
			'attr'		=> 'class',
			'type'		=> 'string',
			'rusname'	=> '����� ���������',
			'hidden'	=> 1,
			'readonly'	=> 1,
			'db_field'	=> 'class',
			'db_type'	=> 'varchar(48)',
			'db_opts'	=> 'not null',
		},
		{						       # �.�.�....
			'attr'		=> 'name',
			'type'		=> 'string',
			'rusname'	=> '�.�.�.',
			'column'	=> 2,
			'db_field'	=> 'name',
			'db_type'	=> 'varchar(255)',
		},
		{						       # ����� �������� ���������, ��������� ����...
			'attr'		=> 'ctime',
			'type'		=> 'datetime',
			'rusname'       => '����� ��������',
			'readonly'      => 1,
			'auto'		=> 1,
			'hidden'	=> 1,
			'db_field'      => 'ctime',
			'db_type'       => 'timestamp',
			'db_opts'       => 'not null default now()',
			'default'       => 'CURRENT_TIMESTAMP',
		},
		{						       # ����� ����������� ���������, ��������� ����...
			'attr'		=> 'mtime',
			'type'		=> 'datetime',
			'rusname'       => '����� �����������',
			'hidden'	=> 1,
			'auto'		=> 1,
			'db_field'      => 'mtime',
			'db_type'       => 'timestamp',
			'db_opts'       => 'not null default now()',
			'default'       => 'CURRENT_TIMESTAMP',
		},
		{						       # ���� ��������
			'attr'		=> 'birth',
			'type'		=> 'date',
			'rusname'	=> '���� ��������',
			'db_field'      => 'dtime',
			'db_type'       => 'timestamp',
			'default'       => 'CURRENT_TIMESTAMP',
		},
		{						       # ���� � ����� ������...
			'attr'		=> 'lastlogin',
			'type'		=> 'datetime',
			'rusname'       => '���� � ����� ���������� ������<sup style="color:#888;">&nbsp;1)</sup>',
			'column'	=> 1,
			'db_field'      => 'lastlogin',
			'db_type'       => 'timestamp',
			'db_opts'       => 'not null default now()',
			'default'       => 'CURRENT_TIMESTAMP',
		},
		{						       # ������ ������, �������������� ����������� �������...
			'attr'		=> 'sections',
			'type'		=> 'sections_list',
			'rusname'       => '������',
			'hidden'	=> 1,
			'db_field'      => 'sections',
			'db_type'       => 'integer[]',
		},
		{						       # ���� ���� ������� �������� ����������...
			'attr'		=> 'status',
			'type'		=> 'status',
			'rusname'       => '������ ������������',
			'db_field'      => 'status',
			'db_type'       => 'integer',
		},
		{							# �������������� ���� �������
			'attr'		=> 'type',
			'type'		=> 'integer',
			'rusname'       => '��� ������������ (project-oriented)',
			'db_field'      => 'type',
			'db_type'       => 'integer',
		},
		{							# �������...
			'attr'		=> 'nickname',
			'type'		=> 'string',
			'rusname'	=> '���',
			'column'	=> 3,
			'db_field'	=> 'nickname',
			'db_type'	=> 'text',
		},
		{							# Login...
			'attr'		=> 'login',
			'type'		=> 'string',
			'rusname'	=> '�����',
			'column'	=> 4,
			'db_field'	=> 'login',
			'db_type'	=> 'text',
		},
		{							# Login method...
			'attr'		=> 'login_method',
			'type'		=> 'string',
			'rusname'	=> '����� �����',
			'db_field'	=> 'login_method',
			'db_type'	=> 'text',
		},
		{							# E-mail...
			'attr'		=> 'email',
			'type'		=> 'string',
			'rusname'	=> 'E-mail (primary)',
			'db_field'	=> 'email',
			'db_type'	=> 'text',
		},

);

# ----------------------------------------------------------------------------
# �������� ������ � ��������, ������ ��� ������� �����!
# ��� ����� �������� - ���������� ��� ���� ����������.
#
#   attr - ������������ ��������, �������� ��������;
#   type - ��� ���������, ��������� ��� ������������;
#   rusname - ������� ��������, ����� �� ��������� ��� �����������;
#   hidden - ����� 1, �����
#   readonly - ������������� ��� ������ ������ ��� ��������� � ����������
#   db_field - ���� � �������
#   default  - �������� �� ��������� (���� ������ ����� ��� ��������)
# ----------------------------------------------------------------------------
sub required_properties
{
	return @required_properties;
}

########### FILTERS DESCRIPTION ####################################################################################
sub _login_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{login}) );
	if (exists $opts{ilike} && $opts{ilike} == 1) {
		return &SQL::Common::_generic_name_filter('d.login', $opts{login}, 0, \%opts);
	}else{
		return &SQL::Common::_generic_text_filter('d.login', $opts{login});
	}
}

sub _email_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{email}) );
	if (exists $opts{ilike} && $opts{ilike} == 1) {
		return &SQL::Common::_generic_name_filter('d.email', $opts{email}, 0, \%opts);
	}else{
		return &SQL::Common::_generic_text_filter('d.email', $opts{email});
	}
}

sub _nickname_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{nickname}) );
	if (exists $opts{ilike} && $opts{ilike} == 1) {
		return &SQL::Common::_generic_name_filter('d.nickname', $opts{nickname}, 0, \%opts);
	}else{
		return &SQL::Common::_generic_text_filter('d.nickname', $opts{nickname});
	}
}

sub _type_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists $opts{type} );
	return &SQL::Common::_generic_int_filter('d.type', $opts{type});
}

sub _get_orders {
	my ($self, %opts) = @_;

	if ($opts{order_by}) {
		return ' order by '.$opts{order_by};
	} else {
		return ' order by name ';
	}
	return undef;
}


1;