+
+sub set_default_user_attrs {
+ my ($forum,$userinfo) = @_;
+ while (my($key,$val) = each %$forum) {
+ next unless $key =~ /^default_(.*)$/;
+ $userinfo->{$1} = $val;
+ }
+}
+
+sub show_user_page {
+ my ($cgi,$forum) = @_;
+ my $rights;
+ $rights=getrights($cgi,$forum) if ($forum->{authenticated});
+ my %base;
+ my $tree;
+ dbmopen %base,datafile($forum,"passwd"),0664;
+ if ($path_translated eq $forum->{userdir}) {
+ # показать список пользователей
+ $tree = gettemplate($forum,"userlist");
+ my $usertpl = $tree->look_down(class=>"userinfo");
+ my $userlist = $usertpl->parent;
+ $usertpl->detach;
+ for my $user (sort keys %base) {
+ my $block = $usertpl->clone;
+ $userlist->push_content($block);
+ my $userinfo =thaw($base{$user});
+ $userinfo->{"user"} = $user;
+ substitute_user_info($block,$forum,$userinfo);
+ profile_links($block,$user,$rights,$forum);
+ }
+ $usertpl->delete;
+ } else {
+ my $user = substr($path_translated,length($forum->{userdir})+1);
+ if (!$base{$user}) {
+ print $cgi->header(-status=>"404 NOT FOUND");
+ exit;
+ }
+ my $userinfo = thaw($base{$user});
+ $userinfo->{"user"} = $user;
+ $tree = gettemplate($forum,"user");
+ substinfo($tree,[_tag=>"title"],_content=>"Stilllife user: $user");
+ substitute_user_info($tree,$forum,$userinfo);
+ profile_links($tree,$user,$rights,$forum);
+ unless ($userinfo->{openiduser}) {
+ for my $userlink ($tree->look_down(_tag => "a",class=>"author")) {
+ $userlink->attr("href",undef);
+ $userlink->tag("span");
+ }
+ }
+ }
+ my $page =
+ $tree->as_HTML("<>&");
+ my $length = do {use bytes; length($page);};
+ print $cgi->header(-type=>"text/html",-content_length=>$length,
+ -charset=>"utf-8",($forum->{cookies}?(-cookie=>$forum->{cookies}):())),
+ $page;
+}
+sub profile_links {
+ my ($tree,$user,$rights,$forum)=@_;
+ foreach my $profile_link ($tree->look_down(_tag=>"a",
+ href=>qr/profile=/)) {
+ if ((defined $rights && $rights eq "admin")||
+ (defined $forum->{autheticated}{user} &&
+ $forum->{authenticated}{user} eq $user)) {
+
+ $profile_link->attr("href",
+ $cgi->url(-absolute=>1,-path_info=>0).$forum->{userurl}.
+ "/".$user."?profile=1");
+ } else {
+ $profile_link->delete();
+ }
+ }
+}