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

use strict;
use warnings 'all';
use base qw(Contenido::Keeper);

use Digest::MD5;
use Contenido::Globals;
use Data::Dumper;

# ----------------------------------------------------------------------------
# �������:
# ----------------------------------------------------------------------------
# check_login: ������� ������������ � �������
#
#	login	=> login ������������
#	email	=> email ������������
# ----------------------------------------------------------------------------
sub check_login {

  my $self = shift;
  my %opts = @_;

  return	if !$opts{login} && !$opts{email};
  my $class = $self->state->profile_document_class;
  my $res = $keeper->get_documents (
		class	=> $class,
		$opts{login} ? (login => $opts{login}) : (),
		$opts{email} ? (email => lc($opts{email})) : (),
		count	=> 1,
	);
  return int($res);
}



# ----------------------------------------------------------------------------
# login: ����������� ������������
#
#	login	=> login ������������
#	email	=> e-mail ������������
#	passwd	=> ������ ������������
# ----------------------------------------------------------------------------
sub login {

  my $self = shift;
  my %opts = @_;

  return	if !($opts{login} || $opts{email}) && !$opts{passwd};
  my $passmd5 = Digest::MD5::md5_hex($opts{passwd});
  my $class = $self->state->profile_document_class;
  my $res = $keeper->get_documents (
		class		=> $class,
		$opts{login} ? (login => $opts{login}) : (),
		$opts{email} ? (email => lc($opts{email})) : (),
		status		=> [1,2,3,4,5],
		return_mode	=> 'array_ref',
	);
  $res = ref $res eq 'ARRAY' ? $res->[0] : undef;
  return	unless ref $res;
#  warn "Password = ".$opts{passwd}."; Pass MD5 = $passmd5; user MD5 = ".$res->passwd."\n"	if $DEBUG;
  if ($res->passwd eq $passmd5 ) {
	my $lastlogin = Contenido::DateTime->new ( postgres => $res->lastlogin );
	my $now = Contenido::DateTime->new;
	my $then = $now->clone;
	$then->subtract( hours => 2 );
	if ( DateTime->compare($then, $lastlogin) == 1 ) {
		$res->lastlogin( $now->ymd('-').' '.$now->hms );
		$res->passwd(undef);
		$res->store;
		$res->lastlogin( $lastlogin->ymd('-').' '.$lastlogin->hms );
	}
	return $res;
  }else{
	return;
  }
  
}



# ----------------------------------------------------------------------------
# confirm: ������������� ��������������
#
#	login	=> login ������������
#	email	=> e-mail ������������
#	md5	=> MD5 ������ ������������
# ----------------------------------------------------------------------------
sub confirm {

  my $self = shift;
  my %opts = @_;

  return	if !($opts{login} || $opts{email}) && !$opts{md5};
  my $class = $self->state->profile_document_class;
  my $res = $keeper->get_documents (
		class		=> $class,
		$opts{login} ? (login => $opts{login}) : (),
		$opts{email} ? (email => lc($opts{email})) : (),
		return_mode	=> 'array_ref',
	);
  $res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
  return	unless ref $res;
  warn "MD5 = ".$opts{md5}."; user MD5 = ".$res->passwd."\n"	if $DEBUG;
  if ($res->passwd eq $opts{md5} ) {
	my $now = localtime;
	$res->lastlogin( $now );
	$res->passwd(undef);
	$res->status(1);
	$res->store;
	return $res;
  }else{
	return;
  }
  
}



# ----------------------------------------------------------------------------
# get_profile: �������� ������� ������������
#
#	id	=> �� ID
#	login	=> �� login
#	email	=> �� e-mail
#	nickname=> �� ��������
#	status	=> ������ �� �������
# ----------------------------------------------------------------------------
sub get_profile {

  my $self = shift;
  my %opts = @_;

  return	if !$opts{login} && !$opts{id} && !$opts{email} && !$opts{nickname};
  my $class = $self->state->profile_document_class;
  my $res = $keeper->get_documents (
		class		=> $class,
		%opts,
		return_mode	=> 'array_ref',
	);
  $res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
  return $res;
}

1;