Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) The CORE
package SQL::UserTable;

use strict;
use base 'SQL::ProtoTable';
use vars qw($available_filters @required_properties);

sub db_table
{
	return 'users';
}

$available_filters = [qw(	
					_class_filter
					_status_filter
					_in_id_filter
					_id_filter
					_name_filter
					_class_excludes_filter
					_excludes_filter
					_datetime_filter
					_date_equal_filter
					_date_filter

					_groups_filter
					_login_filter
			)];

sub available_filters {
	return $available_filters;
}

# ----------------------------------------------------------------------------
# �������� ������ � ��������, ������ ��� ������� �����!
# ��� ����� �������� - ���������� ��� ���� ����������.
#
#   attr - ������������ ��������, �������� ��������;
#   type - ��� ���������, ��������� ��� ������������;
#   rusname - ������� ��������, ����� �� ��������� ��� �����������;
#   hidden - ����� 1, ����� 
#   readonly - ������������� ��� ������ ������ ��� ��������� � ����������
#   db_field - ���� � �������
#   default  - �������� �� ��������� (���� ������ ����� ��� ��������)
# ----------------------------------------------------------------------------
@required_properties = (
		{						       # ������������� ���������, �������� �� ���� �����...
			'attr'	  => 'id',
			'type'	  => 'integer',
			'rusname'       => '������������� ���������',
			'hidden'	=> 1,
			'auto'		=> 1,
			'readonly'      => 1,
			'db_field'      => 'id',
			'db_type'       => 'integer',
		},
		{							# ������������� ���������, �������� �� ���� �����...
			'attr'		=> 'login',
			'type'		=> 'string',
			'rusname'	=> '�����',
			'db_field'	=> 'login',
			'db_type'	=> 'varchar(255)',
		},
		{							# ����� ���������...
			'attr'		=> 'class',
			'type'		=> 'string',
			'rusname'	=> '����� ���������',
			'hidden' 	=> 1,
			'readonly'      => 1,
			'db_field'	=> 'class',
			'db_type'       => 'varchar(48)',
		},
		{							# ��� ���������...
			'attr'		=> 'name',
			'type'		=> 'string',
			'rusname'	=> '���',
			'db_field'	=> 'name',
			'db_type'       => 'varchar(255)',
		},
		{							# ����� �������� ���������, ��������� ����...
			'attr'    	=> 'ctime',
			'type'    	=> 'datetime',
			'rusname' 	=> '����� ��������',
			'hidden'   	=> 1,
			'auto'		=> 1,
			'readonly'      => 1,
			'db_field'	=> 'ctime',
			'db_type'       => 'timestamp',
			'default' 	=> 'CURRENT_TIMESTAMP',
		},
		{							# ����� ����������� ���������, ��������� ����...
			'attr'    	=> 'mtime',
			'type'    	=> 'datetime',
			'rusname' 	=> '����� �����������',
			'hidden'   	=> 1,
			'auto'		=> 1,
			'db_field'	=> 'mtime',
			'db_type'       => 'timestamp',
			'default' 	=> 'CURRENT_TIMESTAMP',
		},
		{							# ���� ���� ������� �������� ����������...
			'attr'		=> 'status',
			'type'		=> 'status',
			'rusname'	=> '������',
			'db_field'	=> 'status',
			'db_type'       => 'integer',
		},
		{						       # ������
			'attr'		=> 'passwd',
			'type'		=> 'string',
			'rusname'	=> '������',
			'db_field'	=> 'passwd',
			'db_type'       => 'varchar(255)',
		},
		{						       # ������
			'attr'		=> 'groups',
			'type'		=> 'array of integer',
			'rusname'	=> '������',
			'hidden' 	=> 1,
			'db_field'	=> 'groups',
			'db_type'       => 'integer[]',
		}
);

sub required_properties {
	return @required_properties;
}

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

sub _groups_filter {
	my ($self,%opts)=@_;
	return undef unless ( exists($opts{s}) );
	return &SQL::Common::_generic_intarray_filter('d.groups', $opts{s});
}

1;