From 25482732199833ac1347492e73c69281c7281fbb Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 23 Feb 2009 12:28:13 -0800 Subject: [PATCH] Add UI for filtering based on sender. Adds a dropdown with JS on change for instant submit. Works with column sorting. --- lib/WebGUI/Account/Inbox.pm | 115 ++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 45 deletions(-) diff --git a/lib/WebGUI/Account/Inbox.pm b/lib/WebGUI/Account/Inbox.pm index 57d6b5af1..78ada8bca 100644 --- a/lib/WebGUI/Account/Inbox.pm +++ b/lib/WebGUI/Account/Inbox.pm @@ -223,7 +223,7 @@ sub editSettingsForm { label => $i18n->get("inbox rich editor label"), hoverHelp => $i18n->get("inbox rich editor description"), ); - + return $f->printRowsOnly; } @@ -575,7 +575,7 @@ sub www_deleteMessage { my $message = $inbox->getMessage($messageId); $self->store->{tab} = "inbox"; - + if (!(defined $message) || !$inbox->canRead($message)) { #View will handle displaying these errors return $self->www_viewMessage; @@ -593,7 +593,7 @@ sub www_deleteMessage { } } $message->delete; - + return $self->www_viewMessage($displayMessage->getId); } @@ -635,7 +635,7 @@ sub www_inviteUser { my $form = $session->form; my $setting = $session->setting; my $user = $session->user; - + my $displayError = shift; my $var = {}; @@ -644,11 +644,11 @@ sub www_inviteUser { #Add any error passed in to be displayed if the form reloads $var->{'message_display_error'} = $displayError; - + #Message From $var->{'message_from' } = $user->getWholeName; $var->{'message_from_id' } = $user->userId; - + #Message To $var->{'form_to' } = WebGUI::Form::email($session, { name => "to", @@ -699,7 +699,7 @@ sub www_inviteUser { action => $self->getUrl("module=inbox;do=inviteUserSave"), extras => q{name="inviteForm"} }); - + $var->{'submit_button' } = WebGUI::Form::submit($session,{}); $var->{'form_footer' } = WebGUI::Form::formFooter($session, {}); $var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_inbox_url'}; @@ -730,7 +730,7 @@ sub www_inviteUserSave { #Must have a person to send email to my $to = $form->get('to'); return $self->www_inviteUser($i18n->get('missing email')) unless $to; - + #Must have a subject my $defaultSubject = $setting->get("inboxInviteUserSubject"); WebGUI::Macro::process($session,\$defaultSubject); @@ -814,11 +814,11 @@ sub www_manageInvitations { my $i18n = WebGUI::International->new($session,'Account_Inbox'); $self->store->{tab} = "invitations"; - + #Deal with rows per page my $rpp = $session->form->get("rpp") || 25; my $rpp_url = ";rpp=$rpp"; - + #Cache the base url my $inboxUrl = $self->getUrl("op=account;module=inbox;do=manageInvitations"); @@ -830,15 +830,15 @@ sub www_manageInvitations { $rpp ); $p->setDataByQuery($sql,undef,undef,[$user->userId]); - + #Export page to template my @msg = (); foreach my $row ( @{$p->getPageData} ) { my $inviter = WebGUI::User->new($session,$row->{inviterId}); next if($inviter->isVisitor); # Inviter account got deleted - + my $epoch = WebGUI::DateTime->new(mysql => $row->{dateSent} )->epoch; - + my $hash = {}; $hash->{'invite_id' } = $row->{inviteId}; $hash->{'message_url' } = $self->getUrl("module=inbox;do=viewInvitation;inviteId=".$row->{inviteId}); @@ -854,7 +854,7 @@ sub www_manageInvitations { push(@msg,$hash); } my $msgCount = $p->getRowCount; - + $var->{'message_loop' } = \@msg; $var->{'has_messages' } = $msgCount > 0; $var->{'message_total' } = $msgCount; @@ -916,7 +916,7 @@ sub www_sendMessage { #Add common template variable for displaying the inbox my $inbox = WebGUI::Inbox->new($session); $self->appendCommonVars($var,$inbox); - + my $messageId = $form->get("messageId"); my $userId = $form->get("userId"); my $pageUrl = $session->url->page; @@ -926,7 +926,7 @@ sub www_sendMessage { if($messageId) { #This is a reply to a message - automate who the user is my $message = $inbox->getMessage($messageId); - + #Handle Errors if (!(defined $message)) { #Message doesn't exist @@ -973,14 +973,14 @@ sub www_sendMessage { $var->{'isInbox'} = "true"; return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId); } - + $var->{'isPrivateMessage'} = "true"; $var->{'message_to' } = $toUser->getWholeName; } else { #This is a new message $var->{'isNew' } = "true"; - + my $friends = $fromUser->friends->getUserList; my @checkedFriends = (); my @friendsChecked = $form->process("friend","checkList"); @@ -1018,7 +1018,7 @@ sub www_sendMessage { push (@friendsLoop, $friendHash); } - + #You can't send new messages if you don't have any friends to send to unless($activeFriendCount) { my $i18n = WebGUI::International->new($session,'Account_Inbox'); @@ -1030,9 +1030,9 @@ sub www_sendMessage { $var->{'friends_loop' } = \@friendsLoop; $var->{'checked_fiends_loop'} = \@checkedFriends; } - + $var->{'message_from' } = $fromUser->getWholeName; - + my $subject = $form->get("subject"); if($subject eq "" && $messageId) { $subject = "Re: ".$var->{'message_subject'}; @@ -1045,7 +1045,7 @@ sub www_sendMessage { }); $var->{'message_body' } = $form->get('message'); - + $var->{'form_message_text'} = WebGUI::Form::textarea($session, { name =>"message", value =>$var->{'message_body'} || "", @@ -1059,12 +1059,12 @@ sub www_sendMessage { width => "600", richEditId => $self->getRichEditorId, }); - + $var->{'form_header' } = WebGUI::Form::formHeader($session,{ action => $self->getUrl("module=inbox;do=sendMessageSave;messageId=$messageId;userId=$userId"), extras => q{name="messageForm"} }); - + $var->{'submit_button' } = WebGUI::Form::submit($session,{}); $var->{'form_footer' } = WebGUI::Form::formFooter($session, {}); $var->{'back_url' } = $backUrl; @@ -1093,7 +1093,7 @@ sub www_sendMessageSave { #Add common template variable for displaying the inbox my $inbox = WebGUI::Inbox->new($session); - + my $messageId = $form->get("messageId"); my $userId = $form->get("userId"); my @friends = $form->get("friend","checkList"); @@ -1182,11 +1182,11 @@ sub www_view { my $var = {}; $self->store->{tab} = "inbox"; - + #Deal with sort order my $sortBy = $session->form->get("sortBy") || undef; my $sort_url = ($sortBy)?";sortBy=$sortBy":""; - + #Deal with sort direction my $sortDir = $session->form->get("sortDir") || "desc"; my $sortDir_url = ";sortDir=".(($sortDir eq "desc")?"asc":"desc"); @@ -1194,26 +1194,37 @@ sub www_view { #Deal with rows per page my $rpp = $session->form->get("rpp") || 25; my $rpp_url = ";rpp=$rpp"; - + + #Deal with user filtering + my $userFilter = $session->form->get("userFilter") || 'all'; + my $userFilter_url = ";userFilter=$userFilter"; + #Cache the base url my $inboxUrl = $self->getUrl; + my $urlFrag = $sortDir_url . $rpp_url . $userFilter_url; + #Create sortBy headers - $var->{'subject_url' } = $inboxUrl.";sortBy=subject".$sortDir_url.$rpp_url; - $var->{'status_url' } = $inboxUrl.";sortBy=status".$sortDir_url.$rpp_url; - $var->{'from_url' } = $inboxUrl.";sortBy=sentBy".$sortDir_url.$rpp_url; - $var->{'dateStamp_url' } = $inboxUrl.";sortBy=dateStamp".$sortDir_url.$rpp_url; - $var->{'rpp_url' } = $inboxUrl.$sort_url.";sortDir=".$sortDir; - + $var->{'subject_url' } = $inboxUrl.";sortBy=subject" . $urlFrag; + $var->{'status_url' } = $inboxUrl.";sortBy=status" . $urlFrag; + $var->{'from_url' } = $inboxUrl.";sortBy=sentBy" . $urlFrag; + $var->{'dateStamp_url' } = $inboxUrl.";sortBy=dateStamp" . $urlFrag; + + $var->{'rpp_url' } = $inboxUrl.$sort_url.$sortDir_url.$userFilter_url; + #Create the paginator my $inbox = WebGUI::Inbox->new($session); - my $p = $inbox->getMessagesPaginator($session->user,{ + my $messageOptions = { sortBy => $sortBy, sortDir => $sortDir, - baseUrl => $inboxUrl.$sort_url.";sortDir=".$sortDir.$rpp_url, - paginateAfter => $rpp - }); - + baseUrl => $inboxUrl.$sort_url.$sortDir_url.$rpp_url.$userFilter_url, + paginateAfter => $rpp, + }; + if ($userFilter ne 'all') { + $messageOptions->{whereClause} = sprintf 'ibox.sentBy=%s', $session->db->quote($session->form->get('userFilter')); + } + my $p = $inbox->getMessagesPaginator($session->user, $messageOptions); + #Export page to template my @msg = (); foreach my $row ( @{$p->getPageData} ) { @@ -1242,7 +1253,7 @@ sub www_view { push(@msg,$hash); } my $msgCount = $p->getRowCount; - + $var->{'message_loop' } = \@msg; $var->{'has_messages' } = $msgCount > 0; $var->{'message_total' } = $msgCount; @@ -1258,6 +1269,20 @@ sub www_view { extras => q{onchange="location.href='}.$var->{'rpp_url'}.q{;rpp='+this.options[this.selectedIndex].value"} }); + my $userSql = $inbox->getMessageSql(undef, { 'select' => <new($session); + %userHash = ( 'all' => $i18n->echo('all users'), $session->db->buildHash($userSql) ); + $var->{'userFilter'} = WebGUI::Form::selectBox($session,{ + name => 'userFilter', + options => \%userHash, + value => $session->form->get('userFilter') || 'all', + extras => q{onchange="location.href='}.$inboxUrl.q{;userFilter='+this.options[this.selectedIndex].value"} + }); + $var->{'form_header'} = WebGUI::Form::formHeader($session,{ action => $self->getUrl("module=inbox;do=deleteMessages") }); @@ -1313,9 +1338,9 @@ sub www_viewInvitation { $var->{'isInvitation'} = "true"; return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId); } - + my $epoch = WebGUI::DateTime->new(mysql => $invitation->{dateSent} )->epoch; - + $var->{'invite_id' } = $inviteId; $var->{'message_from_id' } = $inviter->userId; $var->{'message_from' } = $inviter->getWholeName; @@ -1332,7 +1357,7 @@ sub www_viewInvitation { || $var->{'message_body'} =~ /\

{'message_body'} =~ s/\n/\
\n/g; } - + #Build the action URLs my $nextInvitation = $friends->getPreviousInvitation($invitation); #Messages sorted descending so next is actually previous if( $nextInvitation->{inviteId} ) { @@ -1388,7 +1413,7 @@ sub www_viewMessage { #Add common template variable for displaying the inbox $self->appendCommonVars($var,$inbox); - + #Handler Errors if (!(defined $message)) { my $i18n = WebGUI::International->new($session,'Account_Inbox'); @@ -1404,7 +1429,7 @@ sub www_viewMessage { $var->{'isInvitation'} = "true"; return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId); } - + $message->setStatus("read") unless ($message->isRead); $var->{'message_id' } = $messageId;