Line # Revision Author
1 196 ahitrov package users::UserProfile;
2
3 use base "Contenido::Document";
4 use Digest::MD5;
5 use Contenido::Globals;
6
7 sub extra_properties
8 {
9 return (
10 { 'attr' => 'status', 'type' => 'status', 'rusname' => 'Статус пользователя',
11 'cases' => [
12 [0, 'Блокированный'],
13 [1, 'Активный'],
14 [2, 'Платный'],
15 [3, 'Свой/сотрудник'],
16 [4, 'VIP'],
17 [5, 'Временная активация'],
18 ],
19 },
20 { 'attr' => 'visibility', 'type' => 'status', 'rusname' => 'Область видимости',
21 'cases' => [
22 [0, 'Данные моего аккаунта видны только мне'],
23 [1, 'Данные моего аккаунта видны всем'],
24 [2, 'Данные моего аккаунта видны друзьям'],
25 [3, 'Данные моего аккаунта видны друзьям и членам клубов'],
26 ],
27 },
28 { 'attr' => 'country', 'type' => 'string', 'rusname' => 'Страна' },
29 { 'attr' => 'passwd', 'type' => 'password', 'rusname' => 'Пароль', 'rem' => '(<font color="red">Не отображается. Указывать при создании и для изменения</font>)' },
30 { 'attr' => 'confirm', 'type' => 'string', 'rusname' => 'Код подтверждения', hidden => 1 },
31 { 'attr' => 'secmail', 'type' => 'string', 'rusname' => 'E-mail (secondary)' },
32 { 'attr' => 'q1', 'type' => 'string', 'rusname' => 'Контрольный вопрос 1' },
33 { 'attr' => 'a1', 'type' => 'string', 'rusname' => 'Контрольный ответ 1' },
34 { 'attr' => 'q2', 'type' => 'string', 'rusname' => 'Контрольный вопрос 2' },
35 { 'attr' => 'a2', 'type' => 'string', 'rusname' => 'Контрольный ответ 2' },
36 { 'attr' => 'account', 'type' => 'string', 'rusname' => 'Сумма на счете' },
37 { 'attr' => 'interests', 'type' => 'text', 'rusname' => 'Жизненные интересы', rows => 10 },
38 { 'attr' => 'origin', 'type' => 'text', 'rusname' => 'Ориджин', rows => 4 },
39 { 'attr' => 'avatar', 'type' => 'image', 'rusname' => 'Аватар', preview => ['32x32','100x100','120x120','160x160'] },
40 )
41 }
42
43 sub class_name
44 {
45 return 'Профиль пользователя';
46 }
47
48 sub class_description
49 {
50 return 'Профиль пользователя';
51 }
52
53 sub search_fields
54 {
55 return ('email', 'name', 'login');
56 }
57
58 sub class_table
59 {
60 return 'users::SQL::UserProfile';
61 }
62
63 sub contenido_status_style
64 {
65 my $self = shift;
66 if ( $self->status == 2 ) {
67 return 'color:green;';
68 } elsif ( $self->status == 3 ) {
69 return 'color:olive;';
70 } elsif ( $self->status == 4 ) {
71 return 'color:green;';
72 } elsif ( $self->status == 5 ) {
73 return 'color:red;';
74 }
75 }
76
77 sub pre_store
78 {
79 my $self = shift;
80
81 my $up = $self->{keeper}->get_document_by_id ( $self->id,
82 class => $self->class,
83 );
84 if ( (ref $up && $self->passwd && $self->passwd ne $up->passwd) || (!ref $up && $self->passwd) ) {
85 warn "Pass = ".$self->passwd."\n" if $DEBUG;
86 my $pass = Digest::MD5::md5_hex($self->passwd);
87 warn "Pass_hex = $pass\n" if $DEBUG;
88 $self->passwd($pass);
89 } elsif ( ref $up && (!$self->passwd || $self->passwd eq $up->passwd ) ) {
90 $self->passwd($up->passwd);
91 }
92 $self->email(lc($self->email));
93 $self->login(lc($self->login));
94
95 my $default_section = $project->s_alias->{users} if ref $project->s_alias eq 'HASH' && exists $project->s_alias->{users};
96 if ( $default_section ) {
97 my $sections = $self->{sections};
98 if ( ref $sections eq 'ARRAY' && scalar @$sections ) {
99 my @new_sects = grep { $_ != $default_section } @$sections;
100 push @new_sects, $default_section;
101 $self->sections(@new_sects);
102 } elsif ( $sections && !ref $sections && $sections != $default_section ) {
103 my @new_sects = ($default_section, $sections);
104 $self->sections(@new_sects);
105 } else {
106 $self->sections($default_section);
107 }
108 }
109
110 return 1;
111 }
112 1;