<& /Elements/Header, Title => loc("Achievements") &> <& Elements/Tabs, current_tab => "User/Achievements.html", Title => loc("Achievements") &>
<&| /Widgets/TitleBox, title => loc('Settings'), id => "user-prefs-settings" &>
<&|/l&>Show Achievements:
<& /Elements/Callback, _CallbackName => 'FormEnd', UserObj => $UserObj, %ARGS &> <& /Elements/Submit, Label => loc('Save Preferences') &>
% if ($ShowAchievements) { % # if achievements enabled

Your Achievements

% show_achievements($session{'CurrentUser'}->Id, \%defs, 1, @deflist); % # Show users in any user defined groups this user is a member of % my %userlist = (); % my $groups = RT::GroupMembers->new($RT::SystemUser); % my $g_alias = $groups->Join( % TYPE => 'left', % ALIAS1 => 'main', % FIELD1 => 'GroupId', % TABLE2 => 'Groups', % FIELD2 => 'id' % ); % $groups->Limit( % ALIAS => $g_alias, % FIELD => 'Domain', % OPERATOR => '=', % VALUE => 'UserDefined', % ); % my %seengroup = (); % while (my $group_member = $groups->Next) { % my $u_group = RT::Group->new($session{'CurrentUser'}); % $u_group->Load($group_member->GroupId) or next; % next if ($u_group->Domain ne 'UserDefined'); % next if (not $u_group->HasMemberRecursively ($session{'CurrentUser'}->PrincipalObj)); % next if ($seengroup{$u_group->Id}); % $seengroup{$u_group->Id} = 1; % my $members = $u_group->UserMembersObj; % while (my $user = $members->Next) { % # Hide users who aren't sharing their achievements % if (not $ShowAllProgress) { % my $x = $user->Preferences ('RT-Show-Achievements', { 'Value' => 0 }); % next if (not $x->{'Value'}); % next if ($x->{'Value'} < 2); #> % } % my $name = $user->RealName; % my $sortas = lc ($name); % $sortas = $2.$1 if ($sortas =~ /^\s*(\S.*?)\s+(\S+)\s*$/); % $userlist{$user->id} = [ $name, $sortas ]; % } % } % foreach (sort { $userlist{$a}->[1] cmp $userlist{$b}->[1] } keys %userlist) { % next if ($_ == $session{'CurrentUser'}->Id);

<%$userlist{$_}->[0]%>

% show_achievements($_, \%defs, $ShowAllProgress, @deflist); % } % # end if achievements enabled % } <%INIT> my $UserObj = $session{'CurrentUser'}->UserObj; my $x = $UserObj->Preferences ('RT-Show-Achievements', { 'Value' => 0 }); $ShowAchievements = $x->{'Value'} if (not defined $ShowAchievements); $UserObj->SetPreferences('RT-Show-Achievements', { 'Value' => $ShowAchievements }); my ($defsth, $defref, %defs, @deflist) = (undef, undef, (), ()); $defsth = $RT::Handle->dbh->prepare ('SELECT `Achievement`,`Name`,`Description`,`Target`,`Clear`,`Code` FROM `AchievementsDef` ORDER BY `Order`'); $defsth->execute (); while ($defref = $defsth->fetchrow_arrayref ()) { push @deflist, $defref->[0]; $defs{$defref->[0]} = [ @$defref ]; } $defsth->finish (); sub show_achievements { my ($userid, $defsref, $showprogress, @deflist) = @_; my ($def, $earned, $progress, $sth, $ref, $first, $none); $sth = $RT::Handle->dbh->prepare ('SELECT `Achievement`,COUNT(*) FROM `AchievementsEarned` WHERE `UserId`=? GROUP BY `Achievement`'); $sth->execute ($userid); while ($ref = $sth->fetchrow_arrayref ()) { $earned->[$ref->[0]] = $ref->[1]; } $sth->finish (); if ($showprogress) { $sth = $RT::Handle->dbh->prepare ('SELECT `Achievement`,SUM(`Count`) FROM `AchievementsProgress` WHERE `UserId`=? GROUP BY `Achievement`'); $sth->execute ($userid); while ($ref = $sth->fetchrow_arrayref ()) { $progress->[$ref->[0]] = $ref->[1]; } $sth->finish (); } $none = 1; $first = 1; foreach $def (@deflist) { next if (defined $earned->[$def]); next if (not defined $progress->[$def]); next if (int(10*$progress->[$def]/$defsref->{$def}->[3]) < 2); #> if ($first) { $m->out ('

In Progress

'."\n"); $m->out (''); $first = 0; $none = 0; } $m->out (''); $m->out ('\n"); } $m->out ("
'); $m->out (''.$defsref->{$def}->[1].'
'); $m->out (''.$defsref->{$def}->[2].'
'); $m->out (''); $m->out (''); $m->out (''); $m->out (''); $m->out ('
  '.$progress->[$def].'/'.$defsref->{$def}->[3].'
'); $m->out ("
\n") if (not $first); $first = 1; foreach $def (@deflist) { next if (not defined $earned->[$def]); if ($first) { $m->out ('

Earned

'."\n") if ($showprogress); $m->out (''); $first = 0; $none = 0; } $m->out (''); $m->out ('\n"); } $m->out ("
'); if ($earned->[$def] > 1) { $m->out ('x'.$earned->[$def].''); } $m->out (''); $m->out (''.$defsref->{$def}->[1].'
'); $m->out (''.$defsref->{$def}->[2].''); $m->out ("
\n") if (not $first); $m->out ('

No achievements earned.

') if ($none); } <%ARGS> $ShowAllProgress => undef $ShowAchievements => undef