& /Elements/Header, Title => loc("Achievements") &>
<& Elements/Tabs,
current_tab => "User/Achievements.html",
Title => loc("Achievements") &>
% 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 ('');
$m->out (''.$defsref->{$def}->[1].' ');
$m->out (''.$defsref->{$def}->[2].' ');
$m->out ('');
$m->out (' | ');
$m->out (' | ');
$m->out (''.$progress->[$def].'/'.$defsref->{$def}->[3].' | ');
$m->out (' ');
$m->out (" |
\n");
}
$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 ('');
if ($earned->[$def] > 1) {
$m->out ('x'.$earned->[$def].'');
}
$m->out (' | ');
$m->out (''.$defsref->{$def}->[1].' ');
$m->out (''.$defsref->{$def}->[2].'');
$m->out (" |
\n");
}
$m->out ("
\n") if (not $first);
$m->out ('No achievements earned.
') if ($none);
}
%INIT>
<%ARGS>
$ShowAllProgress => undef
$ShowAchievements => undef
%ARGS>