Revision 196 (by ahitrov, 2012/03/15 18:28:32) Users plugin
package users::UserProfile;

use base "Contenido::Document";
use Digest::MD5;
use Contenido::Globals;

sub extra_properties
{
        return (
		{ 'attr' => 'status',   'type' => 'status',     'rusname' => 'Статус пользователя',
			'cases' => [
					[0, 'Блокированный'],
					[1, 'Активный'],
					[2, 'Платный'],
					[3, 'Свой/сотрудник'],
					[4, 'VIP'],
					[5, 'Временная активация'],
				],
		},
		{ 'attr' => 'visibility',   'type' => 'status',     'rusname' => 'Область видимости',
			'cases' => [
					[0, 'Данные моего аккаунта видны только мне'],
					[1, 'Данные моего аккаунта видны всем'],
					[2, 'Данные моего аккаунта видны друзьям'],
					[3, 'Данные моего аккаунта видны друзьям и членам клубов'],
				],
		},
		{ 'attr' => 'country',	'type' => 'string',	'rusname' => 'Страна' },
		{ 'attr' => 'passwd',	'type' => 'password',	'rusname' => 'Пароль', 'rem' => '(<font color="red">Не отображается. Указывать при создании и для изменения</font>)' },
		{ 'attr' => 'confirm',	'type' => 'string',	'rusname' => 'Код подтверждения', hidden => 1 },
		{ 'attr' => 'secmail',	'type' => 'string',	'rusname' => 'E-mail (secondary)' },
		{ 'attr' => 'q1',	'type' => 'string',	'rusname' => 'Контрольный вопрос 1' },
		{ 'attr' => 'a1',	'type' => 'string',	'rusname' => 'Контрольный ответ 1' },
		{ 'attr' => 'q2',	'type' => 'string',	'rusname' => 'Контрольный вопрос 2' },
		{ 'attr' => 'a2',	'type' => 'string',	'rusname' => 'Контрольный ответ 2' },
		{ 'attr' => 'account',	'type' => 'string',	'rusname' => 'Сумма на счете' },
		{ 'attr' => 'interests',	'type' => 'text',	'rusname' => 'Жизненные интересы', rows => 10 },
		{ 'attr' => 'origin',		'type' => 'text',	'rusname' => 'Ориджин',	rows => 4 },
		{ 'attr' => 'avatar',		'type' => 'image',	'rusname' => 'Аватар', preview => ['32x32','100x100','120x120','160x160'] },
        )
}

sub class_name
{
	return 'Профиль пользователя';
}

sub class_description
{
	return 'Профиль пользователя';
}

sub search_fields
{
	return ('email', 'name', 'login');
}

sub class_table
{
	return 'users::SQL::UserProfile';
}

sub contenido_status_style
{
	my $self = shift;
	if ( $self->status == 2 ) {
		return 'color:green;';
	} elsif ( $self->status == 3 ) {
		return 'color:olive;';
	} elsif ( $self->status == 4 ) {
		return 'color:green;';
	} elsif ( $self->status == 5 ) {
		return 'color:red;';
	}
}

sub pre_store
{
	my $self = shift;

	my $up = $self->{keeper}->get_document_by_id ( $self->id,
			class	=> $self->class,
		);
	if ( (ref $up && $self->passwd && $self->passwd ne $up->passwd) || (!ref $up && $self->passwd) ) {
		warn "Pass = ".$self->passwd."\n"			if $DEBUG;
		my $pass = Digest::MD5::md5_hex($self->passwd);
		warn "Pass_hex = $pass\n"				if $DEBUG;
		$self->passwd($pass);
	} elsif ( ref $up && (!$self->passwd || $self->passwd eq $up->passwd ) ) {
		$self->passwd($up->passwd);
	}
	$self->email(lc($self->email));
	$self->login(lc($self->login));

	my $default_section = $project->s_alias->{users}	if ref $project->s_alias eq 'HASH' && exists $project->s_alias->{users};
	if ( $default_section ) {
		my $sections = $self->{sections};
		if ( ref $sections eq 'ARRAY' && scalar @$sections ) {
			my @new_sects = grep { $_ != $default_section } @$sections;
			push @new_sects, $default_section;
			$self->sections(@new_sects);
		} elsif ( $sections && !ref $sections && $sections != $default_section ) {
			my @new_sects = ($default_section, $sections);
			$self->sections(@new_sects);
		} else {
			$self->sections($default_section);
		}
	}

	return 1;
}
1;