lots of changes
This commit is contained in:
parent
93df39d6f6
commit
615e0e3746
28 changed files with 2883 additions and 212 deletions
|
|
@ -35,7 +35,7 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsForm {
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
|
|
@ -61,7 +61,7 @@ sub editUserSettingsForm {
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsFormSave {
|
||||
sub editSettingsFormSave {
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package WebGUI::Account::Inbox;
|
|||
|
||||
use strict;
|
||||
|
||||
use WebGUI::Form;
|
||||
use WebGUI::Exception;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
|
|
@ -27,6 +28,51 @@ These subroutines are available from this package:
|
|||
=cut
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 appendCommonVars ( var, inbox )
|
||||
|
||||
Appends common template variables that all inbox templates use
|
||||
|
||||
=head3 var
|
||||
|
||||
The hash reference to append template variables to
|
||||
|
||||
=head3 inbox
|
||||
|
||||
The instance of the inbox currently being worked with.
|
||||
|
||||
=cut
|
||||
|
||||
sub appendCommonVars {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
my $inbox = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
$var->{'view_profile_url' } = $user->getProfileUrl;
|
||||
$var->{'view_inbox_url' } = $self->getUrl("module=inbox;do=view");
|
||||
$var->{'view_invitations_url'} = $self->getUrl("module=inbox;do=manageInvitations");
|
||||
$var->{'unread_message_count'} = $inbox->getUnreadMessageCount;
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 canView ( )
|
||||
|
||||
Returns whether or not the user can view the inbox tab
|
||||
|
||||
=cut
|
||||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
return ($self->session->form->get("uid") eq "");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 editSettingsForm ( )
|
||||
|
|
@ -35,20 +81,76 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsForm {
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
my $f = WebGUI::HTMLForm->new($session);
|
||||
|
||||
# $f->template(
|
||||
# name => "profileStyleTemplateId",
|
||||
# value => $self->getStyleTemplateId,
|
||||
# namespace => "style",
|
||||
# label => $i18n->get("profile style template label"),
|
||||
# hoverHelp => $i18n->get("profile style template hoverHelp")
|
||||
# );
|
||||
$f->template(
|
||||
name => "inboxStyleTemplateId",
|
||||
value => $self->getStyleTemplateId,
|
||||
namespace => "style",
|
||||
label => $i18n->get("inbox style template label"),
|
||||
hoverHelp => $i18n->get("inbox style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxLayoutTempalteId",
|
||||
value => $self->getLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("inbox layout template label"),
|
||||
hoverHelp => $i18n->get("inbox layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxViewTemplateId",
|
||||
value => $self->getViewTemplateId,
|
||||
namespace => "Account/Inbox/View",
|
||||
label => $i18n->get("inbox view template label"),
|
||||
hoverHelp => $i18n->get("inbox view template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxViewMessageTemplateId",
|
||||
value => $self->getViewMessageTemplateId,
|
||||
namespace => "Account/Inbox/ViewMessage",
|
||||
label => $i18n->get("inbox view message template label"),
|
||||
hoverHelp => $i18n->get("inbox view message template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxSendMessageTemplateId",
|
||||
value => $self->getSendMessageTemplateId,
|
||||
namespace => "Account/Inbox/SendMessage",
|
||||
label => $i18n->get("inbox send message template label"),
|
||||
hoverHelp => $i18n->get("inbox send message template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxMessageConfirmationTemplateId",
|
||||
value => $self->getMessageConfirmTemplateId,
|
||||
namespace => "Account/Inbox/Confirm",
|
||||
label => $i18n->get("inbox message confirm template label"),
|
||||
hoverHelp => $i18n->get("inbox message confirm template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxErrorTemplateId",
|
||||
value => $self->getInboxErrorTemplateId,
|
||||
namespace => "Account/Inbox/Error",
|
||||
label => $i18n->get("inbox error message template label"),
|
||||
hoverHelp => $i18n->get("inbox error message template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxManageInvitationsTemplateId",
|
||||
value => $self->getManageInvitationsTemplateId,
|
||||
namespace => "Account/Inbox/ManageInvitations",
|
||||
label => $i18n->get("inbox manage invitations template label"),
|
||||
hoverHelp => $i18n->get("inbox manage invitations template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxInvitationErrorTemplateId",
|
||||
value => $self->getInvitationErrorTemplateId,
|
||||
namespace => "Account/Inbox/Error",
|
||||
label => $i18n->get("invitation error message template label"),
|
||||
hoverHelp => $i18n->get("invitation error message template hoverHelp")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
|
@ -61,7 +163,50 @@ sub editUserSettingsForm {
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsFormSave {
|
||||
sub editSettingsFormSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $form = $session->form;
|
||||
|
||||
#Messages Settings
|
||||
$setting->set("inboxStyleTemplateId", $form->process("inboxStyleTemplateId","template"));
|
||||
$setting->set("inboxLayoutTempalteId", $form->process("inboxLayoutTempalteId","template"));
|
||||
$setting->set("inboxViewTemplateId", $form->process("inboxViewTemplateId","template"));
|
||||
$session->set("inboxViewMessageTemplateId",$form->process("inboxViewMessageTemplateId","template"));
|
||||
$session->set("inboxSendMessageTemplateId",$form->process("inboxSendMessageTemplateId","template"));
|
||||
$session->set("inboxMessageConfirmationTemplateId",$form->process("inboxMessageConfirmationTemplateId","template"));
|
||||
$session->set("inboxErrorTemplateId",$form->process("inboxErrorTemplateId","template"));
|
||||
#Invitations Settings
|
||||
$session->set("inboxManageInvitationsTemplateId",$form->process("inboxManageInvitationsTemplateId","template"));
|
||||
$session->set("inboxInvitationErrorTemplateId",$form->process("inboxInvitationErrorTemplateId","template"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getInboxErrorTemplateId ( )
|
||||
|
||||
This method returns the template ID for inbox errors.
|
||||
|
||||
=cut
|
||||
|
||||
sub getInboxErrorTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxErrorTemplateId") || "ErEzulFiEKDkaCDVmxUavw";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getInvitationErrorTemplateId ( )
|
||||
|
||||
This method returns the template ID for invitation errors.
|
||||
|
||||
=cut
|
||||
|
||||
sub getInvitationErrorTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxInvitationErrorTemplateId") || "5A8Hd9zXvByTDy4x-H28qw";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -77,6 +222,45 @@ sub getLayoutTemplateId {
|
|||
return $self->session->setting->get("inboxLayoutTempalteId") || $self->SUPER::getLayoutTemplateId;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getManageInvitationsTemplateId ( )
|
||||
|
||||
This method returns the template ID for the invitations manage screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub getManageInvitationsTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxManageInvitationsTemplateId") || "1Q4Je3hKCJzeo0ZBB5YB8g";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getMessageConfirmTemplateId ( )
|
||||
|
||||
This method returns the template ID for message confirmations.
|
||||
|
||||
=cut
|
||||
|
||||
sub getMessageConfirmTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxMessageConfirmationTemplateId") || "DUoxlTBXhVS-Zl3CFDpt9g";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getSendMessageTemplateId ( )
|
||||
|
||||
This method returns the template ID for the send message view.
|
||||
|
||||
=cut
|
||||
|
||||
sub getSendMessageTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxSendMessageTemplateId") || "6uQEULvXFgCYlRWnYzZsuA";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -93,6 +277,39 @@ sub getStyleTemplateId {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getUserProfileUrl ( userId )
|
||||
|
||||
This method stores a reference of user profile URLs to prevent us from having to instantiate
|
||||
the same users over and over as the nature of an inbox is to have multiple messages from the same user.
|
||||
|
||||
=cut
|
||||
|
||||
sub getUserProfileUrl {
|
||||
my $self = shift;
|
||||
my $userId = shift;
|
||||
|
||||
|
||||
unless ($self->store->{$userId}) {
|
||||
$self->store->{$userId} = WebGUI::User->new($self->session,$userId)->getProfileUrl;
|
||||
}
|
||||
return $self->store->{$userId};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewMessageTemplateId ( )
|
||||
|
||||
This method returns the id for the view message template.
|
||||
|
||||
=cut
|
||||
|
||||
sub getViewMessageTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxViewMessageTemplateId") || "0n4HtbXaWa_XJHkFjetnLQs";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewTemplateId ( )
|
||||
|
||||
This method returns the template ID for the main view.
|
||||
|
|
@ -101,9 +318,356 @@ This method returns the template ID for the main view.
|
|||
|
||||
sub getViewTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxViewTemplateId") || "defaultAssetId";
|
||||
return $self->session->setting->get("inboxViewTemplateId") || "c8xrwVuu5QE0XtF9DiVzLw";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_deleteMessage ( )
|
||||
|
||||
Deletes a single messages passed in
|
||||
|
||||
=cut
|
||||
|
||||
sub www_deleteMessage {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
my $messageId = $session->form->get("messageId");
|
||||
my $inbox = WebGUI::Inbox->new($session);
|
||||
my $message = $inbox->getMessage($messageId);
|
||||
|
||||
if (!(defined $message) || !$inbox->canRead($message)) {
|
||||
#View will handle displaying these errors
|
||||
return $self->www_viewMessage;
|
||||
}
|
||||
|
||||
#Get the next message to display
|
||||
my $displayMessage = $inbox->getNextMessage($message);
|
||||
unless (defined $displayMessage) {
|
||||
#No more messages - try to get the previous message
|
||||
$displayMessage = $inbox->getPreviousMessage($message);
|
||||
unless (defined $displayMessage) {
|
||||
#This is the last message in the inbox - delete it and return to inbox
|
||||
$message->delete;
|
||||
return $self->www_view();
|
||||
}
|
||||
}
|
||||
$message->delete;
|
||||
|
||||
return $self->www_viewMessage($displayMessage->getId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_deleteMessages ( )
|
||||
|
||||
Deletes a list of messages selected for the current user
|
||||
|
||||
=cut
|
||||
|
||||
sub www_deleteMessages {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
my @messages = $session->form->process("message","checkList");
|
||||
|
||||
foreach my $messageId (@messages) {
|
||||
my $message = WebGUI::Inbox::Message->new($session, $messageId);
|
||||
$message->delete;
|
||||
}
|
||||
|
||||
return $self->www_view();
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageInvitations ( )
|
||||
|
||||
The page on which users can manage their friends requests
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageInvitations {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
|
||||
my $var = {};
|
||||
|
||||
#Add common template variable for displaying the inbox
|
||||
my $inbox = WebGUI::Inbox->new($session);
|
||||
$self->appendCommonVars($var,$inbox);
|
||||
|
||||
return $self->processTemplate($var,$self->getManageInvitationsTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendMessage ( )
|
||||
|
||||
The page on which users send or reply to messages
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendMessage {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
my $fromUser = $session->user;
|
||||
my $displayError = shift;
|
||||
my $toUser = undef;
|
||||
my $var = {};
|
||||
|
||||
#Add any error passed in to be displayed if the form reloads
|
||||
$var->{'message_display_error'} = $displayError;
|
||||
|
||||
#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;
|
||||
my $backUrl = $session->env->get("HTTP_REFERER") || $var->{'view_inbox_url'};
|
||||
my $errorMsg = "";
|
||||
|
||||
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
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("message does not exist");
|
||||
}
|
||||
elsif (!$inbox->canRead($message)) {
|
||||
#User trying to reply to message that they have not been sent.
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no reply error");
|
||||
}
|
||||
elsif($message->get("status") eq "completed" || $message->get("status") eq "pending") {
|
||||
#User trying to reply to system message
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("system message error");
|
||||
}
|
||||
if($errorMsg) {
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
#Otherwise you should be able to reply to anyone who sent you a message
|
||||
$toUser = WebGUI::User->new($session,$message->get("sentBy"));
|
||||
$var->{'isReply' } = "true";
|
||||
$var->{'message_to' } = $toUser->getWholeName;
|
||||
$var->{'message_subject'} = $message->get("subject");
|
||||
}
|
||||
elsif($userId) {
|
||||
#This is a private message to a user - check user private message settings
|
||||
|
||||
#Handle Errors
|
||||
$toUser = WebGUI::User->new($session,$userId);
|
||||
if($toUser->isVisitor || !$toUser->acceptsPrivateMessages($fromUser->userId)) {
|
||||
#Trying to send messages to the visitor or a user that doesn't exist
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("blocked error");
|
||||
}
|
||||
elsif($toUser->userId eq $fromUser->userId) {
|
||||
#Trying to send a message to yourself
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no self error");
|
||||
}
|
||||
if($errorMsg) {
|
||||
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");
|
||||
my $activeFriendCount = 0;
|
||||
#Append this users friends to the template
|
||||
my @friendsLoop = ();
|
||||
foreach my $friendId (keys %{$friends}) {
|
||||
my $friend = WebGUI::User->new($session,$friendId);
|
||||
#This friend has private messages turned off
|
||||
my $disabled = "disabled";
|
||||
if($friend->acceptsPrivateMessages($fromUser->userId)) {
|
||||
$disabled = "";
|
||||
$activeFriendCount++;
|
||||
}
|
||||
my $fname = $friend->profileField("firstName");
|
||||
my $lname = $friend->profileField("lastName");
|
||||
my $wholeName = "";
|
||||
$wholeName = $fname." ".$lname if($fname && $lname);
|
||||
|
||||
my $isChecked = WebGUI::Utility::isIn($friendId,@friendsChecked);
|
||||
my $friendHash = {
|
||||
'friend_id' => $friendId,
|
||||
'friend_name' => $friends->{$friendId},
|
||||
'friend_wholeName' => $wholeName,
|
||||
};
|
||||
|
||||
push(@checkedFriends,$friendHash) if($isChecked);
|
||||
|
||||
$friendHash->{'friend_checkbox'} = WebGUI::Form::checkbox($session,{
|
||||
name => "friend",
|
||||
value => $friendId,
|
||||
checked => $isChecked,
|
||||
extras => q{id="friend_}.$friendId.qq{_id" $disabled},
|
||||
});
|
||||
|
||||
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');
|
||||
$errorMsg = $i18n->get("no friends error");
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
$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'};
|
||||
}
|
||||
|
||||
$var->{'form_subject' } = WebGUI::Form::text($session, {
|
||||
name => "subject",
|
||||
value => $subject,
|
||||
extras => q{ class="inbox_subject" }
|
||||
});
|
||||
|
||||
$var->{'message_body' } = $form->get('message');
|
||||
|
||||
$var->{'form_message_text'} = WebGUI::Form::textarea($session, {
|
||||
name =>"message",
|
||||
value =>$var->{'message_body'} || "",
|
||||
});
|
||||
|
||||
$var->{'form_message_rich'} = WebGUI::Form::HTMLArea($session, {
|
||||
name => "message",
|
||||
value => $var->{'message_body'} || "",
|
||||
width => "600",
|
||||
});
|
||||
|
||||
$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;
|
||||
|
||||
return $self->processTemplate($var,$self->getSendMessageTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendMessageSave ( )
|
||||
|
||||
Sends the message created by the user
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendMessageSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
my $fromUser = $session->user;
|
||||
my $var = {};
|
||||
my $errorMsg = "";
|
||||
my @toUsers = ();
|
||||
|
||||
#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");
|
||||
push (@friends, $userId) if ($userId);
|
||||
|
||||
my $hasError = 0;
|
||||
|
||||
my $subject = $form->get("subject");
|
||||
my $message = $form->get("message");
|
||||
|
||||
#Check for hacker errors / set who the message is going to
|
||||
if($messageId) {
|
||||
#This is a reply to a message - automate who the user is
|
||||
my $message = $inbox->getMessage($messageId);
|
||||
#Handle Errors
|
||||
if (!(defined $message)
|
||||
|| !$inbox->canRead($message)
|
||||
|| $message->get("status") eq "completed"
|
||||
|| $message->get("status") eq "pending") {
|
||||
$hasError = 1;
|
||||
}
|
||||
push(@toUsers,$message->get("sentBy"));
|
||||
$message->setStatus("replied");
|
||||
}
|
||||
elsif(scalar(@friends)) {
|
||||
#This is a private message to a user - check user private message settings
|
||||
foreach my $userId (@friends) {
|
||||
my $toUser = WebGUI::User->new($session,$userId);
|
||||
if($toUser->isVisitor
|
||||
|| !$toUser->acceptsPrivateMessages($fromUser->userId)
|
||||
|| $toUser->userId eq $fromUser->userId) {
|
||||
$hasError = 1;
|
||||
}
|
||||
push(@toUsers,$userId);
|
||||
}
|
||||
}
|
||||
|
||||
#Check for client errors
|
||||
if($subject eq "") {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no subject error");
|
||||
$hasError = 1;
|
||||
}
|
||||
elsif($message eq "") {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no message error");
|
||||
$hasError = 1;
|
||||
}
|
||||
elsif(scalar(@toUsers) == 0) {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no user error");
|
||||
$hasError = 1;
|
||||
}
|
||||
|
||||
#Let sendMessage deal with displaying errors
|
||||
return $self->www_sendMessage($errorMsg) if $hasError;
|
||||
|
||||
foreach my $uid (@toUsers) {
|
||||
$inbox->addMessage({
|
||||
message => $message,
|
||||
subject => $subject,
|
||||
userId => $uid,
|
||||
status => 'unread',
|
||||
sentBy => $fromUser->userId
|
||||
});
|
||||
}
|
||||
|
||||
$self->appendCommonVars($var,$inbox);
|
||||
|
||||
return $self->processTemplate($var,$self->getMessageConfirmTemplateId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_view ( )
|
||||
|
|
@ -115,10 +679,189 @@ The main view page for editing the user's profile.
|
|||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
my $var = {};
|
||||
|
||||
#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");
|
||||
|
||||
#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;
|
||||
|
||||
#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;
|
||||
|
||||
#Create the paginator
|
||||
my $inbox = WebGUI::Inbox->new($session);
|
||||
my $p = $inbox->getMessagesPaginator($session->user,{
|
||||
sortBy => $sortBy,
|
||||
sortDir => $sortDir,
|
||||
baseUrl => $inboxUrl.$sort_url.";sortDir=".$sortDir.$rpp_url,
|
||||
paginateAfter => $rpp
|
||||
});
|
||||
|
||||
#Export page to template
|
||||
my @msg = ();
|
||||
foreach my $row ( @{$p->getPageData} ) {
|
||||
my $message = $inbox->getMessage( $row->{messageId} );
|
||||
#next if($message->get('status') eq 'deleted');
|
||||
|
||||
my $hash = {};
|
||||
$hash->{'message_id' } = $message->getId;
|
||||
$hash->{'message_url' } = $self->getUrl("module=inbox;do=viewMessage;messageId=".$message->getId);
|
||||
$hash->{'subject' } = $message->get("subject");
|
||||
$hash->{'status_class' } = $message->get("status");
|
||||
$hash->{'status' } = $message->getStatus;
|
||||
$hash->{'isRead' } = $message->isRead;
|
||||
$hash->{'isReplied' } = $hash->{'status_class'} eq "replied";
|
||||
$hash->{'isPending' } = $hash->{'status_class'} eq "pending";
|
||||
$hash->{'isCompleted' } = $hash->{'status_class'} eq "completed";
|
||||
$hash->{'from_id' } = $message->get("sentBy");
|
||||
$hash->{'from_url' } = $self->getUserProfileUrl($hash->{'from_id'}); #Get the profile url of this user which may be cached.
|
||||
$hash->{'from' } = $row->{'fullName'};
|
||||
$hash->{'dateStamp' } = $message->get("dateStamp");
|
||||
$hash->{'dateStamp_formatted'} = $session->datetime->epochToHuman($hash->{'dateStamp'});
|
||||
$hash->{'inbox_form_delete' } = WebGUI::Form::checkbox($session,{
|
||||
name => "message",
|
||||
value => $message->getId
|
||||
});
|
||||
push(@msg,$hash);
|
||||
}
|
||||
my $msgCount = $p->getRowCount;
|
||||
|
||||
$var->{'message_loop' } = \@msg;
|
||||
$var->{'has_messages' } = $msgCount > 0;
|
||||
$var->{'message_total' } = $msgCount;
|
||||
$var->{'new_message_url' } = $self->getUrl("module=inbox;do=sendMessage");
|
||||
$var->{'canSendMessages' } = $user->hasFriends;
|
||||
|
||||
$var->{'inbox_form_start' } = WebGUI::Form::formHeader($session,{
|
||||
action => $self->getUrl("module=inbox;do=deleteMessages")
|
||||
});
|
||||
$var->{'inbox_form_end' } = WebGUI::Form::formFooter($session);
|
||||
|
||||
tie my %rpps, "Tie::IxHash";
|
||||
%rpps = (25 => "25", 50 => "50", 100=>"100");
|
||||
$var->{'message_rpp' } = WebGUI::Form::selectBox($session,{
|
||||
name =>"rpp",
|
||||
options => \%rpps,
|
||||
value => $session->form->get("rpp") || 25,
|
||||
extras => q{onchange="location.href='}.$var->{'rpp_url'}.q{;rpp='+this.options[this.selectedIndex].value"}
|
||||
});
|
||||
|
||||
#Append common vars
|
||||
$self->appendCommonVars($var,$inbox);
|
||||
#Append pagination vars
|
||||
$p->appendTemplateVars($var);
|
||||
return $self->processTemplate($var,$self->getViewTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewMessage ( )
|
||||
|
||||
The page on which users view their messages
|
||||
|
||||
=cut
|
||||
|
||||
sub www_viewMessage {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
|
||||
my $var = {};
|
||||
my $messageId = shift || $session->form->get("messageId");
|
||||
my $errorMsg = shift;
|
||||
|
||||
my $inbox = WebGUI::Inbox->new($session);
|
||||
my $message = $inbox->getMessage($messageId);
|
||||
|
||||
#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');
|
||||
$errorMsg = $i18n->get("message does not exist");
|
||||
}
|
||||
elsif (!$inbox->canRead($message)) {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no access");
|
||||
}
|
||||
|
||||
if($errorMsg) {
|
||||
my $backUrl = $var->{'view_inbox_url'};
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
$message->setStatus("read") unless ($message->isRead);
|
||||
|
||||
$var->{'message_id' } = $messageId;
|
||||
$var->{'message_subject' } = $message->get("subject");
|
||||
$var->{'message_dateStamp' } = $message->get("dateStamp");
|
||||
$var->{'message_dateStemp_human'} = $session->datetime->epochToHuman($var->{'message_dateStamp'});
|
||||
$var->{'message_status' } = $message->getStatus;
|
||||
$var->{'message_body' } = $message->get("message");
|
||||
|
||||
unless ($var->{'message_body'} =~ /\<a/ig) {
|
||||
$var->{'message_body'} =~ s/(http\S*)/\<a href=\"$1\"\>$1\<\/a\>/g;
|
||||
}
|
||||
unless ($var->{'message_body'} =~ /\<div/ig
|
||||
|| $var->{'message_body'} =~ /\<br/ig
|
||||
|| $var->{'message_body'} =~ /\<p/ig) {
|
||||
$var->{'message_body'} =~ s/\n/\<br \/\>\n/g;
|
||||
}
|
||||
|
||||
#Get the user the message was sent by
|
||||
my $sentBy = $message->get("sentBy");
|
||||
my $from = WebGUI::User->new($session,$sentBy);
|
||||
my $sentByVisitor = 0;
|
||||
if ($from->isVisitor) {
|
||||
$sentByVisitor = 1;
|
||||
$from = WebGUI::User->new($session,3);
|
||||
}
|
||||
$var->{'message_from_id' } = $from->userId;
|
||||
$var->{'message_from' } = $from->getWholeName;
|
||||
|
||||
#Build the action URLs
|
||||
$var->{'delete_url' } = $self->getUrl("module=inbox;do=deleteMessage;messageId=".$messageId);
|
||||
|
||||
my $status = $message->get("status");
|
||||
if($sentBy ne $user->userId
|
||||
&& !$sentByVisitor
|
||||
&& $status ne "pending"
|
||||
&& $status ne "completed" ) {
|
||||
$var->{'canReply' } = "true";
|
||||
$var->{'reply_url'} = $self->getUrl("module=inbox;do=sendMessage;messageId=".$messageId);
|
||||
}
|
||||
|
||||
my $nextMessage = $inbox->getNextMessage($message);
|
||||
if( defined $nextMessage ) {
|
||||
$var->{'hasNext' } = "true";
|
||||
$var->{'next_message_url'} = $self->getUrl("module=inbox;do=viewMessage;messageId=".$nextMessage->getId);
|
||||
}
|
||||
|
||||
my $prevMessage = $inbox->getPreviousMessage($message);
|
||||
if(defined $prevMessage) {
|
||||
$var->{'hasPrevious' } = "true";
|
||||
$var->{'prev_message_url'} = $self->getUrl("module=inbox;do=viewMessage;messageId=".$prevMessage->getId);
|
||||
}
|
||||
|
||||
return $self->processTemplate($var,$self->getViewMessageTemplateId);
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ use strict;
|
|||
use WebGUI::Exception;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
use WebGUI::ProfileCategory;
|
||||
use WebGUI::ProfileField;
|
||||
use WebGUI::Utility;
|
||||
use base qw/WebGUI::Account/;
|
||||
|
||||
|
|
@ -26,6 +28,31 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 appendCommonVars ( var )
|
||||
|
||||
Appends common template variables that all inbox templates use
|
||||
|
||||
=head3 var
|
||||
|
||||
The hash reference to append template variables to
|
||||
|
||||
=cut
|
||||
|
||||
sub appendCommonVars {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
my $pageUrl = $session->url->page;
|
||||
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
$var->{'view_profile_url' } = $user->getProfileUrl($pageUrl);
|
||||
$var->{'edit_profile_url' } = $self->getUrl("module=profile;do=edit");
|
||||
$var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -35,7 +62,7 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsForm {
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
|
|
@ -50,41 +77,121 @@ sub editUserSettingsForm {
|
|||
hoverHelp => $i18n->get("profile style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileLayoutTempalteId",
|
||||
name => "profileLayoutTemplateId",
|
||||
value => $self->getLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("profile layout template label"),
|
||||
hoverHelp => $i18n->get("profile layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileEditLayoutTemplateId",
|
||||
value => $self->getEditLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("profile edit layout template label"),
|
||||
hoverHelp => $i18n->get("profile edit layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileEditTemplateId",
|
||||
value => $self->getEditTemplateId,
|
||||
namespace => "Account/Profile/Edit",
|
||||
label => $i18n->get("profile edit template label"),
|
||||
hoverHelp => $i18n->get("profile edit template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileViewTemplateId",
|
||||
value => $self->getViewTemplateId,
|
||||
namespace => "Account/Profile/View",
|
||||
label => $i18n->get("profile view template label"),
|
||||
hoverHelp => $i18n->get("profile view template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileEditTemplateId",
|
||||
value => $setting->get("profileEditTemplateId"),
|
||||
namespace => "Account/Profile/Edit",
|
||||
label => $i18n->get("profile edit template label"),
|
||||
hoverHelp => $i18n->get("profile edit template hoverHelp")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getDisplayTemplateId ( )
|
||||
=head2 editSettingsFormSave ( )
|
||||
|
||||
Creates form elements for user settings page custom to this account module
|
||||
|
||||
=cut
|
||||
|
||||
sub editSettingsFormSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $form = $session->form;
|
||||
|
||||
$setting->set("profileStyleTemplateId", $form->process("profileStyleTemplateId","template"));
|
||||
$setting->set("profileLayoutTemplateId", $form->process("profileLayoutTemplateId","template"));
|
||||
$setting->set("profileDisplayLayoutTemplateId", $form->process("profileDisplayLayoutTemplateId","template"));
|
||||
$setting->set("profileEditTemplateId", $form->process("profileEditTemplateId","template"));
|
||||
$setting->set("profileViewTempalteId", $form->process("profileViewTemplateId","template"));
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getExtrasStyle ( field, fieldErrors, fieldValue )
|
||||
|
||||
This method returns the proper field to display for required fields.
|
||||
|
||||
=head3 field
|
||||
|
||||
field to check
|
||||
|
||||
=head3 fieldErrors
|
||||
|
||||
errors returned as a result of validation (see $self->validateProfileFields)
|
||||
|
||||
=head3 fieldValue
|
||||
|
||||
Value of the field to use when returning the style
|
||||
|
||||
=cut
|
||||
|
||||
sub getExtrasStyle {
|
||||
my $self = shift;
|
||||
my $field = shift;
|
||||
my $fieldErrors = shift;
|
||||
my $fieldValue = shift;
|
||||
|
||||
my $requiredStyleOff = q{class="profilefield_required_off"};
|
||||
my $requiredStyle = q{class="profilefield_required"};
|
||||
my $errorStyle = q{class="profilefield_error"}; #Required Field Not Filled In and Error Returend
|
||||
|
||||
return $errorStyle if(WebGUI::Utility::isIn($field->getId,@{$fieldErrors}));
|
||||
return "" unless ($field->isRequired);
|
||||
return $requiredStyle unless($self->session->user->profileField($field->getId) || $fieldValue);
|
||||
return $requiredStyleOff;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getDisplayLayoutTemplateId ( )
|
||||
|
||||
This method returns the template ID for the account layout.
|
||||
|
||||
=cut
|
||||
|
||||
sub getDisplayTemplateId {
|
||||
sub getEditLayoutTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("profileEditLayoutTemplateId") || "FJbUTvZ2nUTn65LpW6gjsA";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getEditTemplateId ( )
|
||||
|
||||
This method returns the template ID for the edit profile page.
|
||||
|
||||
=cut
|
||||
|
||||
sub getEditTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("profileDisplayTempalteId") || "defaultAssetId";
|
||||
return $self->session->setting->get("profileEditTemplateId") || "75CmQgpcCSkdsL-oawdn3Q";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -96,8 +203,13 @@ This method returns the template ID for the account layout.
|
|||
=cut
|
||||
|
||||
sub getLayoutTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("profileLayoutTempalteId") || $self->SUPER::getLayoutTemplateId;
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $method = $session->form->get("do");
|
||||
my $uid = $session->form->get("uid");
|
||||
|
||||
return $self->getEditLayoutTemplateId if($method eq "edit" || $uid eq "");
|
||||
return $session->setting->get("profileLayoutTemplateId") || $self->SUPER::getLayoutTemplateId;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -117,30 +229,342 @@ sub getStyleTemplateId {
|
|||
|
||||
=head2 getViewTemplateId ( )
|
||||
|
||||
This method returns the template ID for the main view.
|
||||
This method returns the template ID for the view profile page.
|
||||
|
||||
=cut
|
||||
|
||||
sub getViewTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("profileViewTemplateId") || "75CmQgpcCSkdsL-oawdn3Q";
|
||||
return $self->session->setting->get("profileViewTemplateId") || "2CS-BErrjMmESOtGT90qOg";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 saveProfileFields ( session, user, profile )
|
||||
|
||||
Saves profile data to a user's profile. Does not validate any of the data.
|
||||
|
||||
=head3 session
|
||||
|
||||
WebGUI session object
|
||||
|
||||
=head3 user
|
||||
|
||||
User object. Profile data will be placed in this user's profile.
|
||||
|
||||
=head3 profile
|
||||
|
||||
Hash ref of profile data to save.
|
||||
|
||||
=cut
|
||||
|
||||
sub saveProfileFields {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $u = shift;
|
||||
my $profile = shift;
|
||||
|
||||
foreach my $fieldName (keys %{$profile}) {
|
||||
$u->profileField($fieldName,${$profile}{$fieldName});
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 validateProfileFields ( session, fields )
|
||||
|
||||
Class method which validates profile data from the session form variables. Returns an data structure which contains the following
|
||||
|
||||
{
|
||||
profile => Hash reference containing all of the profile fields and their values
|
||||
errors => Array reference of error messages to be displayed
|
||||
errorCategory => Category in which the first error was thrown
|
||||
warnings => Array reference of warnings to be displayed
|
||||
errorFields => Array reference of the fieldIds that threw an error
|
||||
warningFields => Array reference of the fieldIds that threw a warning
|
||||
}
|
||||
|
||||
=head3 session
|
||||
|
||||
WebGUI session object
|
||||
|
||||
=head3 fields
|
||||
|
||||
An array reference of profile fields to validate.
|
||||
|
||||
=cut
|
||||
|
||||
sub validateProfileFields {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $fields = shift;
|
||||
|
||||
my $i18n = WebGUI::International->new($session, 'Account_Profile');
|
||||
|
||||
my $data = {};
|
||||
my $errors = [];
|
||||
my $warnings = [];
|
||||
my $errorCat = undef;
|
||||
my $errorFields = [];
|
||||
my $warnFields = [];
|
||||
|
||||
foreach my $field (@{$fields}) {
|
||||
my $fieldId = $field->getId;
|
||||
my $fieldLabel = $field->getLabel;
|
||||
my $fieldValue = $field->formProcess;
|
||||
my $isValid = $field->isValid($fieldValue);
|
||||
|
||||
$data->{$fieldId} = (ref $fieldValue eq "ARRAY") ? $fieldValue->[0] : $fieldValue;
|
||||
|
||||
if(!$isValid) {
|
||||
$errorCat = $field->get("profileCategoryId") unless (defined $errorCat);
|
||||
push (@{$errors}, sprintf($i18n->get("required error"),$fieldLabel));
|
||||
push(@{$errorFields},$fieldId);
|
||||
}
|
||||
#The language field is special and must be always be valid or WebGUI will croak
|
||||
elsif($fieldId eq "language" && !(exists $i18n->getLanguages()->{$data->{$fieldId}})) {
|
||||
$errorCat = $field->get("profileCategoryId") unless (defined $errorCat);
|
||||
$session->log->warn("language $fieldValue does not exist");
|
||||
push (@{$errors}, sprintf($i18n->get("language not installed error"),$data->{$fieldId}));
|
||||
push(@{$errorFields},$fieldId);
|
||||
}
|
||||
#Duplicate emails throw warnings
|
||||
elsif($fieldId eq "email" && $field->isDuplicate($fieldValue)) {
|
||||
$errorCat = $field->get("profileCategoryId") unless (defined $errorCat);
|
||||
push (@{$warnings},$i18n->get("email already in use error"));
|
||||
push(@{$warnFields},$fieldId);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
profile => $data,
|
||||
errors => $errors,
|
||||
warnings => $warnings,
|
||||
errorCategory => $errorCat,
|
||||
errorFields => $errorFields,
|
||||
warningFields => $warnFields,
|
||||
};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_edit ( )
|
||||
|
||||
The edit page for the user's profile.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_edit {
|
||||
my $self = shift;
|
||||
my $errors = shift || {};
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
my $selected = $errors->{errorCategory} || $session->form->get("selected"); #Allow users to template tabs or other category dividers
|
||||
my $var = {};
|
||||
|
||||
my $active = 0; #Whether or not a category is selected
|
||||
my $counter = 1; #Count the number of categories being displayed
|
||||
my $hasErrors = scalar(keys %{$errors});
|
||||
|
||||
my @errorFields = ();
|
||||
@errorFields = (@{$errors->{errorFields}},@{$errors->{warningFields}}) if($hasErrors);
|
||||
|
||||
my @categories = ();
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
next unless $category->isEditable;
|
||||
my @fields = ();
|
||||
foreach my $field (@{$category->getFields}) {
|
||||
next unless ($field->isEditable);
|
||||
next if $field->getId =~ m/contentPositions/; #This protects the contentPosition fields
|
||||
my $fieldId = $field->getId;
|
||||
my $fieldLabel = $field->getLabel;
|
||||
my $fieldForm = $field->formField({ extras=>$self->getExtrasStyle($field,\@errorFields,$user->profileField($fieldId)) });
|
||||
my $fieldSubtext = $field->isRequired ? "*" : undef;
|
||||
my $fieldExtras = $field->getExtras;
|
||||
#Create a seperate template var for each field
|
||||
$var->{'profile_field_'.$fieldId.'_form' } = $fieldForm;
|
||||
$var->{'profile_field_'.$fieldId.'_label' } = $fieldLabel;
|
||||
$var->{'profile_field_'.$fieldId.'_subtext'} = $fieldSubtext;
|
||||
$var->{'profile_field_'.$fieldId.'_extras' } = $fieldExtras;
|
||||
|
||||
push(@fields, {
|
||||
'profile_field_id' => $fieldId,
|
||||
'profile_field_form' => $fieldForm,
|
||||
'profile_field_label' => $fieldLabel,
|
||||
'profile_field_subtext' => $field->isRequired ? "*" : undef,
|
||||
'profile_field_extras' => $field->getExtras,
|
||||
});
|
||||
}
|
||||
my $categoryId = $category->getId;
|
||||
my $categoryLabel = $category->getLabel;
|
||||
my $shortCategoryLabel = $category->getShortLabel;
|
||||
my $isActive = $categoryId eq $selected;
|
||||
my $categoryIndex = $counter++;
|
||||
|
||||
$var->{'profile_category_'.$categoryId."_isActive" } = $isActive;
|
||||
$var->{'profile_category_'.$categoryId."_label" } = $categoryLabel;
|
||||
$var->{'profile_category_'.$categoryId."_shortLabel"} = $shortCategoryLabel;
|
||||
$var->{'profile_category_'.$categoryId."_fields" } = \@fields;
|
||||
$var->{'profile_category_'.$categoryId."_index" } = $categoryIndex;
|
||||
|
||||
push(@categories, {
|
||||
'profile_category_id' => $categoryId,
|
||||
'profile_category_isActive' => $isActive,
|
||||
'profile_category_is_'.$categoryId => "true", #Test so users can tell what category they are at in the loop
|
||||
'profile_category_label' => $categoryLabel,
|
||||
'profile_category_shortLabel' => $shortCategoryLabel,
|
||||
'profile_category_index' => $categoryIndex,
|
||||
'profile_fields_loop' => \@fields,
|
||||
});
|
||||
#This value will determine whether or not a valid category is active or not
|
||||
$active ||= $isActive;
|
||||
}
|
||||
|
||||
#If not category is selected, set the first category as the active one
|
||||
$categories[0]->{profile_category_isActive} = 1 unless($active);
|
||||
|
||||
$var->{'profile_category_loop'} = \@categories;
|
||||
|
||||
$var->{'profile_form_submit' } = WebGUI::Form::submit($session,{});
|
||||
$var->{'profile_form_header' } = WebGUI::Form::formHeader($session,{
|
||||
action => $self->getUrl("module=profile;do=editSave")
|
||||
});
|
||||
$var->{'profile_form_footer' } = WebGUI::Form::formFooter($session);
|
||||
|
||||
$var->{'profile_errors' } = [];
|
||||
map{ push(@{$var->{'profile_errors'}},{ error_message => $_ }) } @{$errors->{errors}} if($hasErrors);
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
return $self->processTemplate($var,$self->getEditTemplateId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_editSave ( )
|
||||
|
||||
The page which saves the user's profile and returns them to their profile view.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_editSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
my $fields = WebGUI::ProfileField->getEditableFields($session);
|
||||
my $retHash = $self->validateProfileFields($session,$fields);
|
||||
push (@{$retHash->{errors}},@{$retHash->{warnings}});
|
||||
|
||||
unless(scalar(@{$retHash->{errors}})) {
|
||||
foreach my $fieldName (keys %{$retHash->{profile}}) {
|
||||
$session->user->profileField($fieldName,$retHash->{profile}->{$fieldName});
|
||||
}
|
||||
}
|
||||
|
||||
return $self->www_edit($retHash);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_view ( )
|
||||
|
||||
The main view page for the user's profile.
|
||||
The display page of the .
|
||||
|
||||
=cut
|
||||
|
||||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new($session, 'Account_Profile');
|
||||
my $var = {};
|
||||
my $uid = $session->form->get("uid");
|
||||
my $selected = $session->form->get("selected"); #Allow users to template tabs or other category dividers
|
||||
|
||||
return $self->processTemplate($var,$session->setting->get("profileViewTemplateId"));
|
||||
my $active = 0; #Whether or not a category is selected
|
||||
my $counter = 1; #Count the number of categories being displayed
|
||||
|
||||
#Ensure uid is passed in if they want to view a profile. This controls the tab state.
|
||||
return $self->www_edit unless ($uid);
|
||||
|
||||
my $user = WebGUI::User->new($session,$uid);
|
||||
|
||||
#Check user privileges
|
||||
#return $session->style->userStyle($vars->{displayTitle}.'. '.$i18n->get(862)) if($u->profileField("publicProfile") < 1 && ($session->user->userId ne $session->form->process("uid") || $session->user->isAdmin));
|
||||
#return $session->privilege->insufficient() if(!$session->user->isRegistered);
|
||||
|
||||
if($user->isVisitor) {
|
||||
$var->{'restricted' } = "true";
|
||||
$var->{'error_message'} = $i18n->get("visitor profile restricted");
|
||||
}
|
||||
|
||||
my @categories = ();
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
next unless $category->isViewable;
|
||||
my @fields = ();
|
||||
foreach my $field (@{$category->getFields}) {
|
||||
next unless ($field->isViewable);
|
||||
next if $field->getId =~ m/contentPositions/; #This protects the contentPosition fields
|
||||
my $fieldId = $field->getId;
|
||||
my $fieldLabel = $field->getLabel;
|
||||
my $fieldValue = $field->formField(undef,2,$user);
|
||||
my $fieldRaw = $user->profileField($fieldId);;
|
||||
#Create a seperate template var for each field
|
||||
$var->{'profile_field_'.$fieldId.'_label' } = $fieldLabel;
|
||||
$var->{'profile_field_'.$fieldId.'_value' } = $fieldValue;
|
||||
$var->{'profile_field_'.$fieldId.'_raw' } = $fieldRaw;
|
||||
|
||||
push(@fields, {
|
||||
'profile_field_id' => $fieldId,
|
||||
'profile_field_is_'.$fieldId => "true",
|
||||
'profile_field_label' => $fieldLabel,
|
||||
'profile_field_value' => $fieldValue,
|
||||
'profile_field_raw' => $fieldRaw
|
||||
});
|
||||
}
|
||||
my $categoryId = $category->getId;
|
||||
my $categoryLabel = $category->getLabel;
|
||||
my $shortCategoryLabel = $category->getShortLabel;
|
||||
my $isActive = $categoryId eq $selected;
|
||||
my $categoryIndex = $counter++;
|
||||
|
||||
$var->{'profile_category_'.$categoryId."_isActive" } = $isActive;
|
||||
$var->{'profile_category_'.$categoryId."_label" } = $categoryLabel;
|
||||
$var->{'profile_category_'.$categoryId."_shortLabel"} = $shortCategoryLabel;
|
||||
$var->{'profile_category_'.$categoryId."_fields" } = \@fields;
|
||||
$var->{'profile_category_'.$categoryId."_index" } = $categoryIndex;
|
||||
|
||||
push(@categories, {
|
||||
'profile_category_id' => $categoryId,
|
||||
'profile_category_isActive' => $isActive,
|
||||
'profile_category_is_'.$categoryId => "true",
|
||||
'profile_category_label' => $categoryLabel,
|
||||
'profile_category_shortLabel' => $shortCategoryLabel,
|
||||
'profile_category_index' => $categoryIndex,
|
||||
'profile_fields_loop' => \@fields,
|
||||
});
|
||||
#This value will determine whether or not a valid category is active or not
|
||||
$active ||= $isActive;
|
||||
}
|
||||
|
||||
#If not category is selected, set the first category as the active one
|
||||
$categories[0]->{profile_category_isActive} = 1 unless($active);
|
||||
|
||||
$var->{'profile_category_loop' } = \@categories;
|
||||
$var->{'profile_user_id' } = $user->userId;
|
||||
$var->{'can_edit_profile' } = $uid eq $session->user->userId;
|
||||
$var->{'acceptsPrivateMessages'} = $user->acceptsPrivateMessages($session->user->userId);
|
||||
$var->{'acceptsFriendsRequests'} = $user->acceptsFriendsRequests($session->user);
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
#Overwrite these
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
|
||||
return $self->processTemplate($var,$self->getViewTemplateId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsForm {
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
|
|
@ -61,7 +61,7 @@ sub editUserSettingsForm {
|
|||
|
||||
=cut
|
||||
|
||||
sub editUserSettingsFormSave {
|
||||
sub editSettingsFormSave {
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue