diff --git a/lib/WebGUI/Asset/Wobject/UserList.pm b/lib/WebGUI/Asset/Wobject/UserList.pm index e9716312e..60a1a62c4 100644 --- a/lib/WebGUI/Asset/Wobject/UserList.pm +++ b/lib/WebGUI/Asset/Wobject/UserList.pm @@ -93,6 +93,16 @@ sub definition { my $definition = shift; my %properties; my $i18n = WebGUI::International->new($session, 'Asset_UserList'); + + my %sortByOptions; + tie %sortByOptions, 'Tie::IxHash'; + my $fields = $session->db->read("SELECT field.fieldName, field.label FROM userProfileField as field " + ."left join userProfileCategory as cat USING(profileCategoryId) ORDER BY cat.sequenceNumber, field.sequenceNumber"); + while (my $field = $fields->hashRef){ + my $label = WebGUI::Operation::Shared::secureEval($session,$field->{label}); + $sortByOptions{$field->{fieldName}} = $label; + } + tie %properties, 'Tie::IxHash'; %properties = ( templateId =>{ @@ -137,6 +147,23 @@ sub definition { label=>$i18n->get("showOnlyVisibleAsNamed label"), hoverHelp=>$i18n->get('showOnlyVisibleAsNamed description'), }, + sortOrder =>{ + fieldType=>"selectBox", + defaultValue=>'asc', + tab=>'display', + options=>{ asc => $i18n->get('ascending'), + desc => $i18n->get('descending') }, + label=>$i18n->get('sort order'), + hoverHelp=>$i18n->get('sort order description'), + }, + sortBy =>{ + fieldType=>"selectBox", + defaultValue=>'lastName', + tab=>'display', + options=>\%sortByOptions, + label=>$i18n->get('sort by'), + hoverHelp=>$i18n->get('sort by description'), + }, ); push(@{$definition}, { @@ -294,18 +321,13 @@ sub view { # $error->info("created constraint, time :".(time() - $start_time)); - my $formOrderBy = $self->session->form->process('orderBy'); - my $orderBy = 'userName'; - my $orderType = $self->session->form->process('orderType') || 'asc'; + my $orderBy = $self->session->form->process('orderBy') || $self->get('sortBy') || 'users.username'; + my $orderType = $self->session->form->process('orderType') || $self->get('sortOrder') || 'asc'; - my @orderByUserProperties = ('dateCreated', 'lastUpdated', 'karma', 'userId'); - if ($formOrderBy){ - if(isIn($formOrderBy,@profileFieldNames)){ - $orderBy = $formOrderBy; - }elsif(isIn($formOrderBy,@orderByUserProperties)){ - $orderBy = 'users.'.$formOrderBy; - } - } + my @orderByUserProperties = ('dateCreated', 'lastUpdated', 'karma', 'userId'); + if(isIn($orderBy,@orderByUserProperties)){ + $orderBy = 'users.'.$orderBy; + } $sql .= " order by ".$orderBy." ".$orderType; ($defaultPublicProfile) = $self->session->db->quickArray("SELECT dataDefault FROM userProfileField WHERE fieldName='publicProfile'"); diff --git a/lib/WebGUI/i18n/English/Asset_UserList.pm b/lib/WebGUI/i18n/English/Asset_UserList.pm index 1c4483533..a795676e1 100644 --- a/lib/WebGUI/i18n/English/Asset_UserList.pm +++ b/lib/WebGUI/i18n/English/Asset_UserList.pm @@ -249,6 +249,37 @@ true for the 'email' profile field.|, lastUpdated => 1081514049 }, + 'sort by' => { + message => q|Sort By|, + lastUpdated => 1109698614, + }, + + 'sort order' => { + message => q|Sort Order|, + lastUpdated => 1109698614, + }, + + 'sort by description' => { + message => q|By default, all users are displayed in a sorted order. Use this +field to choose by what field they are sorted.|, + lastUpdated => 1119070429, + }, + + 'sort order description' => { + message => q|Sort in ascending or descending order.|, + lastUpdated => 1119070429, + }, + + 'ascending' => { + message => q|Ascending|, + lastUpdated => 1113673328, + }, + + 'descending' => { + message => q|Descending|, + lastUpdated => 1113673330, + }, + };