Account release candidate - final changes before merge
This commit is contained in:
parent
aec93573f0
commit
11d18075fa
45 changed files with 3379 additions and 1325 deletions
|
|
@ -80,6 +80,11 @@ sub upgradeAccount {
|
|||
title => "^International(title,Account_Friends);",
|
||||
className => "WebGUI::Account::Friends"
|
||||
},
|
||||
{
|
||||
identifier => "shop",
|
||||
title => "^International(title,Account_Shop);",
|
||||
className => "WebGUI::Account::Shop"
|
||||
},
|
||||
{
|
||||
identifier => "user",
|
||||
title => "^International(title,Account_User);",
|
||||
|
|
@ -100,23 +105,44 @@ sub upgradeAccount {
|
|||
$session->config->set( "contentHandlers", \@newHandlers );
|
||||
}
|
||||
|
||||
#Add the settings for the profile
|
||||
#Add the settings for the profile module
|
||||
$setting->add("profileStyleTemplateId",""); #Use the userStyle by default
|
||||
$setting->add("profileLayoutTemplateId","N716tpSna0iIQTKxS4gTWA");
|
||||
$setting->add("profileEditLayoutTemplateId","FJbUTvZ2nUTn65LpW6gjsA");
|
||||
$setting->add("profileEditTemplateId","75CmQgpcCSkdsL-oawdn3Q");
|
||||
$setting->add("profileViewTempalteId","2CS-BErrjMmESOtGT90qOg");
|
||||
$setting->add("profileErrorTempalteId","MBmWlA_YEA2I6D29OMGtRg");
|
||||
|
||||
#Add the settings for the inbox
|
||||
#Add the settings for the inbox module
|
||||
$setting->add("inboxStyleTemplateId",""); #Use the userStyle by default
|
||||
$setting->add("inboxLayoutTempalteId","N716tpSna0iIQTKxS4gTWA");
|
||||
$setting->add("inboxViewTemplateId","c8xrwVuu5QE0XtF9DiVzLw");
|
||||
$setting->add("inboxViewMessageTemplateId","0n4HtbXaWa_XJHkFjetnLQ");
|
||||
$setting->add("inboxSendMessageTemplateId","6uQEULvXFgCYlRWnYzZsuA");
|
||||
$setting->add("inboxErrorTemplateId","ErEzulFiEKDkaCDVmxUavw");
|
||||
$setting->add("inboxInvitationErrorTemplateId","5A8Hd9zXvByTDy4x-H28qw");
|
||||
$setting->add("inboxMessageConfirmationTemplateId","DUoxlTBXhVS-Zl3CFDpt9g");
|
||||
#Invitations
|
||||
$setting->add("inboxManageInvitationsTemplateId","1Q4Je3hKCJzeo0ZBB5YB8g");
|
||||
$setting->add("inboxViewInvitationTemplateId","VBkY05f-E3WJS50WpdKd1Q");
|
||||
$setting->add("inboxInvitationConfirmTemplateId","5A8Hd9zXvByTDy4x-H28qw");
|
||||
|
||||
#Add the settings for the friends module
|
||||
$setting->add("friendsStyleTemplateId",""); #Use the userStyle by default
|
||||
$setting->add("friendsLayoutTempalteId","N716tpSna0iIQTKxS4gTWA");
|
||||
$setting->add("friendsViewTemplateId","1Yn_zE_dSiNuaBGNLPbxtw");
|
||||
$setting->add("friendsEditTemplateId","AZFU33p0jpPJ-E6qLSWZng");
|
||||
$setting->add("friendsSendRequestTemplateId","AGJBGviWGAwjnwziiPjvDg");
|
||||
$setting->add("friendsErrorTemplateId","7Ijdd8SW32lVgg2H8R-Aqw");
|
||||
$setting->add("friendsConfirmTemplateId","K8F0j_cq_jgo8dvWY_26Ag");
|
||||
$setting->add("friendsRemoveConfirmTemplateId","G5V6neXIDiFXN05oL-U3AQ");
|
||||
|
||||
#Add the settings for the user module
|
||||
$setting->add("userAccountStyleTemplateId",""); #Use the userStyle by default
|
||||
$setting->add("userAccountLayoutTemplateId","9ThW278DWLV0-Svf68ljFQ");
|
||||
|
||||
#Add the settings for the shop module
|
||||
$setting->add("shopStyleTemplateId",""); #Use the userStyle by default
|
||||
$setting->add("shopLayoutTemplateId","aUDsJ-vB9RgP-AYvPOy8FQ");
|
||||
|
||||
#Add inbox changes
|
||||
$session->db->write(q{
|
||||
|
|
@ -179,6 +205,33 @@ sub upgradeAccount {
|
|||
$session->db->write(q{update userProfileCategory set shortLabel='WebGUI::International::get("work info short","WebGUI");' where profileCategoryId='6'});
|
||||
$session->db->write(q{update userProfileCategory set shortLabel='WebGUI::International::get("demographic info short","WebGUI");' where profileCategoryId='7'});
|
||||
|
||||
$session->db->write(q{alter table userProfileData modify publicProfile char(10) default 'none'});
|
||||
$session->db->write(q{update userProfileData set publicProfile='none' where publicProfile='0' || publicProfile is NULL || publicProfile=''});
|
||||
$session->db->write(q{update userProfileData set publicProfile='all' where publicProfile='1'});
|
||||
$session->db->write(q{REPLACE INTO `userProfileField` VALUES ('publicProfile','WebGUI::International::get(861)',1,0,'RadioList','{ all=>WebGUI::International::get(\'public label\',\'Account_Profile\'), friends=>WebGUI::International::get(\'friends only label\',\'Account_Profile\'), none=>WebGUI::International::get(\'private label\',\'Account_Profile\')}','[\"none\"]',8,'4',1,1,0,0,0,'')})
|
||||
|
||||
|
||||
#Clean up old templates and settings
|
||||
my $oldtemplates = {
|
||||
editUserProfileTemplate => 'Operation/Profile/Edit',
|
||||
viewUserProfileTemplate => 'Operation/Profile/View',
|
||||
manageFriendsTemplateId => 'friends/manage',
|
||||
sendPrivateMessageTemplateId => 'Inbox/SendPrivateMessage',
|
||||
viewInboxTemplateId => 'Inbox',
|
||||
viewInboxMessageTemplateId => 'Inbox/Message',
|
||||
};
|
||||
|
||||
foreach my $setting (keys %{$oldtemplates}) {
|
||||
#Remove the setting
|
||||
$session->db->write("delete from settings where name=?",[$setting]);
|
||||
#Remove all the templates with the related namespace
|
||||
my $assets = $session->db->buildArrayRef("select distinct assetId from template where namespace=?",[$oldtemplates->{$setting}]);
|
||||
#Purge the template
|
||||
foreach my $assetId (@{$assets}) {
|
||||
WebGUI::Asset->newByDynamicClass($session,$assetId)->purge;
|
||||
}
|
||||
}
|
||||
|
||||
print "DONE!\n" unless $quiet;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ use strict;
|
|||
|
||||
use Class::InsideOut qw{ :std };
|
||||
use WebGUI::Exception;
|
||||
use Carp qw(croak);
|
||||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
use WebGUI::Utility;
|
||||
|
|
@ -29,7 +30,254 @@ These subroutines are available from this package:
|
|||
=cut
|
||||
|
||||
readonly session => my %session;
|
||||
public store => my %store; #This is an all purpose hash to store stuff in: $store{id $self}->{something} = "something"
|
||||
readonly module => my %module;
|
||||
public method => my %method;
|
||||
public uid => my %uid;
|
||||
public store => my %store; #This is an all purpose hash to store stuff in: $store{id $self}->{something} = "something"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 appendAccountLinks ( session , var)
|
||||
|
||||
Class method which appends common links to preform various account tasks
|
||||
|
||||
=head3 session
|
||||
|
||||
WebGUI::Session object
|
||||
|
||||
=head3 var
|
||||
|
||||
hash ref to append template variables to
|
||||
|
||||
=cut
|
||||
|
||||
sub appendAccountLinks {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $var = shift;
|
||||
|
||||
return unless $var;
|
||||
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $format = q{<a href="%s">%s</a>};
|
||||
my @array = ();
|
||||
|
||||
#Turn Admin On
|
||||
if ($session->user->isInGroup(12)) {
|
||||
if ($session->var->isAdminOn) {
|
||||
$var->{'admin_mode_url' } = $session->url->page('op=switchOffAdmin');
|
||||
$var->{'admin_mode_text'} = $i18n->get(12);
|
||||
}
|
||||
else {
|
||||
$var->{'admin_mode_url' } = $session->url->page('op=switchOnAdmin');
|
||||
$var->{'admin_mode_text'} = $i18n->get(63);
|
||||
}
|
||||
push(@array,{
|
||||
'options.display' => sprintf($format,$var->{'admin_mode_url'},$var->{'admin_mode_text'})
|
||||
});
|
||||
}
|
||||
|
||||
#Pluggin - delete eventually
|
||||
push(@array, {'options.display' => '<a href="'.$session->url->page('shop=transaction;method=manageMy').'">'.$i18n->get('my purchases', 'Shop').'</a>'});
|
||||
|
||||
#Pluggin - delete eventually
|
||||
if ($session->setting->get('userInvitationsEnabled')) {
|
||||
push @array, {
|
||||
'options.display' => sprintf('<a href=%s>%s</a>', $session->url->page('op=inviteUser'), $i18n->get('invite a friend')),
|
||||
};
|
||||
}
|
||||
|
||||
#Logout
|
||||
$var->{'logout_url' } = $session->url->page('op=auth;method=logout');
|
||||
$var->{'logout_text'} = $i18n->get(64);
|
||||
push(@array,{
|
||||
'options.display' => sprintf($format,$var->{'logout_url'},$var->{'logout_text'})
|
||||
});
|
||||
|
||||
#Deactivate Account
|
||||
if ($session->setting->get("selfDeactivation") && !$session->user->isAdmin){
|
||||
$var->{'self_deactivation_url' } = $session->url->page('op=auth;method=deactivateAccount');
|
||||
$var->{'self_deactivation_text'} = $i18n->get(65);
|
||||
push(@array,{
|
||||
'options.display' => sprintf($format,$var->{'self_deactivation_url' },$var->{'self_deactivation_text'})
|
||||
});
|
||||
}
|
||||
|
||||
#Return to site
|
||||
$var->{'return_to_site_url' } = $session->url->getBackToSiteURL;
|
||||
$var->{'return_to_site_link'} = $i18n->get(493);
|
||||
push(@array,{
|
||||
'options.display' => sprintf($format,$var->{'return_to_site_url'},$var->{'return_to_site_link'})
|
||||
});
|
||||
|
||||
$var->{'account.options'} = \@array;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 appendCommonVars ( var )
|
||||
|
||||
Appends common template variables that all most templates will 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;
|
||||
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
$var->{'view_profile_url' } = $user->getProfileUrl;
|
||||
$var->{'gateway_url' } = $session->url->page("op=account");
|
||||
$var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 callMethod ( [ method, args, uid ] )
|
||||
|
||||
Calls the method passed in
|
||||
|
||||
=method
|
||||
|
||||
Method to call. If no method is passed in, the view method is called
|
||||
|
||||
=args
|
||||
|
||||
array reference of arguments to pass to the method being called.
|
||||
|
||||
=uid
|
||||
|
||||
uid to set in the object.
|
||||
|
||||
=cut
|
||||
|
||||
sub callMethod {
|
||||
my $self = shift;
|
||||
my $method = shift || "view";
|
||||
my $args = shift;
|
||||
my $uid = shift;
|
||||
|
||||
my $module = $self->module;
|
||||
|
||||
$method = "www_".$method;
|
||||
|
||||
unless ($self->can($method)) {
|
||||
WebGUI::Error::MethodNotFound->throw(
|
||||
error => qq{Could not locate method $method in the $module module of the account system},
|
||||
method => $method
|
||||
);
|
||||
return undef;
|
||||
}
|
||||
|
||||
#Set the method in the object
|
||||
$self->method($method);
|
||||
#Set the uid in the object
|
||||
$self->uid($uid);
|
||||
|
||||
#Try to call the method
|
||||
my $output = eval { $self->$method(@{$args}) };
|
||||
|
||||
#Croak on error
|
||||
if($@) {
|
||||
croak "Unable to run $method on $module: $@";
|
||||
return undef;
|
||||
}
|
||||
|
||||
#Return the output from the method call
|
||||
return $output;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 displayContent ( content[, withoutStyle] )
|
||||
|
||||
Wraps the content in the style and layout of the account pluggin
|
||||
|
||||
=content
|
||||
|
||||
Content to wrap in the pluggin style and layout
|
||||
|
||||
=withoutStyle
|
||||
|
||||
Return the layout without the style wrapper
|
||||
|
||||
=cut
|
||||
|
||||
sub displayContent {
|
||||
my $self = shift;
|
||||
my $content = shift;
|
||||
my $noStyle = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
#Wrap content into the layout
|
||||
my $var = {};
|
||||
$var->{content} = $content;
|
||||
|
||||
my $configs = $session->config->get("account");
|
||||
my $method = $self->method || "view";
|
||||
|
||||
# Get fieldsets for avaiable account methods in the order they exist in the config file and append them to the template
|
||||
my @pluggins = ();
|
||||
foreach my $account (@{$configs}) {
|
||||
#Instantiate the pluggin
|
||||
my $instance = undef;
|
||||
my $identifier = $account->{identifier};
|
||||
#Use the currently instantiated pluggin if we are checking this pluggin
|
||||
if($account->{identifier} eq $self->module) {
|
||||
$instance = $self;
|
||||
}
|
||||
else {
|
||||
#Eval it as we don't want to fail if there's a problem with another method in the config file
|
||||
$instance = eval { WebGUI::Content::Account->createInstance($session,$identifier) };
|
||||
if (my $e = WebGUI::Error->caught) {
|
||||
$session->log->warn("Couldn't instantiate Account Pluggin ".$account->{className}." ... skipping");
|
||||
next;
|
||||
}
|
||||
elsif(!$instance->isa('WebGUI::Account')) {
|
||||
$session->log->warn((ref $instance)." is not a subclass of WebGUI::Account ... skipping");
|
||||
next;
|
||||
}
|
||||
#Set the current uid state in the instance
|
||||
$instance->uid($self->uid);
|
||||
}
|
||||
|
||||
#Skip this module if the user can't view it
|
||||
next unless ($instance->canView);
|
||||
|
||||
#Push the tab variables onto the template
|
||||
my %hash = %{$account};
|
||||
my $identifier = $account->{identifier};
|
||||
|
||||
$hash{'is_'.$identifier } = "true";
|
||||
$hash{'is_method_'.$self->method } = "true";
|
||||
$hash{'url' } = $instance->getUrl("module=$identifier",1);
|
||||
$hash{'isActive' } = "true" if($identifier eq $self->module);
|
||||
WebGUI::Macro::process(\$hash{'title'});
|
||||
push(@pluggins,\%hash);
|
||||
|
||||
#Append common display variables to the main template
|
||||
$instance->appendCommonVars($var);
|
||||
}
|
||||
$var->{'account_loop'} = \@pluggins;
|
||||
|
||||
#Process the layout template
|
||||
my $output = $self->processTemplate($var,$self->getLayoutTemplateId);
|
||||
|
||||
return $output if($noStyle);
|
||||
#Wrap the layout in the user style
|
||||
$session->http->setCacheControl("none");
|
||||
return $session->style->process($output,$self->getStyleTemplateId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -130,10 +378,10 @@ sub getUrl {
|
|||
}
|
||||
}
|
||||
else {
|
||||
$pairs = q{op=account;module=}.$form->get("module").q{;do=}.$form->get("do");
|
||||
$pairs = q{op=account;module=}.$self->module.q{;do=}.$self->method;
|
||||
}
|
||||
|
||||
my $uid = $form->get("uid");
|
||||
my $uid = $self->uid;
|
||||
$pairs .= ";uid=".$uid if($appendUID && $uid);
|
||||
|
||||
return $session->url->page($pairs);
|
||||
|
|
@ -141,7 +389,7 @@ sub getUrl {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 new ( $session )
|
||||
=head2 new ( session, module [,method ,uid] )
|
||||
|
||||
Constructor.
|
||||
|
||||
|
|
@ -149,11 +397,16 @@ Constructor.
|
|||
|
||||
A WebGUI::Session object.
|
||||
|
||||
=head3 module
|
||||
|
||||
The module being called
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $module = shift;
|
||||
|
||||
unless (ref $session eq 'WebGUI::Session') {
|
||||
WebGUI::Error::InvalidObject->throw(
|
||||
|
|
@ -165,8 +418,13 @@ sub new {
|
|||
|
||||
my $self = register $class;
|
||||
my $id = id $self;
|
||||
|
||||
$session { $id } = $session;
|
||||
$module { $id } = $module;
|
||||
$store { $id } = {};
|
||||
$method { $id } = "view";
|
||||
$uid { $id } = undef;
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,52 @@ 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' } = $session->url->page("op=account");
|
||||
$var->{'back_url' } = $session->env->get("HTTP_REFERER") || $var->{'view_profile_url'}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 canView ( )
|
||||
|
||||
Whether or not the current user can view this user's friends
|
||||
|
||||
=cut
|
||||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $uid = $self->uid;
|
||||
|
||||
return 1 if (($session->user->userId eq $uid || $uid eq "") && $session->user->profileField('ableToBeFriend'));
|
||||
|
||||
my $user = WebGUI::User->new($session,$uid);
|
||||
return 0 if($user->isVisitor); #This should never happen but let's make sure
|
||||
return 0 unless ($user->profileField('ableToBeFriend')); #User doesn't have friends enabled
|
||||
return WebGUI::User->new($session,$uid)->profileIsViewable($session->user); #User's profile isn't viewable by this user
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -38,17 +84,68 @@ These subroutines are available from this package:
|
|||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $i18n = WebGUI::International->new($session,'Account_Friends');
|
||||
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 => "friendsStyleTemplateId",
|
||||
value => $self->getStyleTemplateId,
|
||||
namespace => "style",
|
||||
label => $i18n->get("friends style template label"),
|
||||
hoverHelp => $i18n->get("friends style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "friendsLayoutTempalteId",
|
||||
value => $self->getLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("friends layout template label"),
|
||||
hoverHelp => $i18n->get("friends layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "friendsViewTemplateId",
|
||||
value => $self->getViewTemplateId,
|
||||
namespace => "Account/Friends/View",
|
||||
label => $i18n->get("friends view template label"),
|
||||
hoverHelp => $i18n->get("friends view template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "friendsEditTemplateId",
|
||||
value => $self->getEditTemplateId,
|
||||
namespace => "Account/Friends/Edit",
|
||||
label => $i18n->get("friends edit template label"),
|
||||
hoverHelp => $i18n->get("friends edit template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "friendsSendRequestTemplateId",
|
||||
value => $self->getSendRequestTemplateId,
|
||||
namespace => "Account/Friends/SendRequest",
|
||||
label => $i18n->get("friends send request template label"),
|
||||
hoverHelp => $i18n->get("friends send request template hoverHelp")
|
||||
);
|
||||
|
||||
$f->template(
|
||||
name => "friendsErrorTemplateId",
|
||||
value => $self->getErrorTemplateId,
|
||||
namespace => "Account/Friends/Error",
|
||||
label => $i18n->get("friends error template label"),
|
||||
hoverHelp => $i18n->get("friends error template hoverHelp")
|
||||
);
|
||||
|
||||
$f->template(
|
||||
name => "friendsConfirmTemplateId",
|
||||
value => $self->getConfirmTemplateId,
|
||||
namespace => "Account/Friends/Confirm",
|
||||
label => $i18n->get("friends confirm template label"),
|
||||
hoverHelp => $i18n->get("friends confirm template hoverHelp")
|
||||
);
|
||||
|
||||
$f->template(
|
||||
name => "friendsRemoveConfirmTemplateId",
|
||||
value => $self->getRemoveConfirmTemplateId,
|
||||
namespace => "Account/Friends/Confirm",
|
||||
label => $i18n->get("friends remove confirm template label"),
|
||||
hoverHelp => $i18n->get("friends remove confirm template hoverHelp")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
|
@ -62,19 +159,60 @@ sub editSettingsForm {
|
|||
=cut
|
||||
|
||||
sub editSettingsFormSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $form = $session->form;
|
||||
|
||||
$setting->set("friendsStyleTemplateId", $form->process("friendsStyleTemplateId","template"));
|
||||
$setting->set("friendsLayoutTempalteId", $form->process("friendsLayoutTempalteId","template"));
|
||||
$setting->set("friendsViewTemplateId", $form->process("friendsViewTemplateId","template"));
|
||||
$session->set("friendsEditTemplateId",$form->process("friendsEditTemplateId","template"));
|
||||
$session->set("friendsSendRequestTemplateId",$form->process("friendsSendRequestTemplateId","template"));
|
||||
$session->set("friendsErrorTemplateId",$form->process("friendsErrorTemplateId","template"));
|
||||
$session->set("friendsConfirmTemplateId",$form->process("friendsConfirmTemplateId","template"));
|
||||
$session->set("friendsRemoveConfirmTemplateId",$form->process("friendsRemoveConfirmTemplateId","template"));
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getDisplayTemplateId ( )
|
||||
=head2 getConfirmTemplateId ( )
|
||||
|
||||
This method returns the template ID for the account layout.
|
||||
This method returns the template ID for the confirmation screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub getDisplayTemplateId {
|
||||
sub getConfirmTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsDisplayTempalteId") || "defaultAssetId";
|
||||
return $self->session->setting->get("friendsConfirmTemplateId") || "K8F0j_cq_jgo8dvWY_26Ag";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getEditTemplateId ( )
|
||||
|
||||
This method returns the template ID for editing friends.
|
||||
|
||||
=cut
|
||||
|
||||
sub getEditTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsEditTemplateId") || "AZFU33p0jpPJ-E6qLSWZng";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getErrorTemplateId ( )
|
||||
|
||||
This method returns the template ID for displaying errors.
|
||||
|
||||
=cut
|
||||
|
||||
sub getErrorTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsErrorTemplateId") || "7Ijdd8SW32lVgg2H8R-Aqw";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -91,6 +229,33 @@ sub getLayoutTemplateId {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getConfirmTemplateId ( )
|
||||
|
||||
This method returns the template ID for the confirmation screen.
|
||||
|
||||
=cut
|
||||
|
||||
sub getRemoveConfirmTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsRemoveConfirmTemplateId") || "G5V6neXIDiFXN05oL-U3AQ";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getSendRequestTemplateId ( )
|
||||
|
||||
This method returns the template ID for the send request page.
|
||||
|
||||
=cut
|
||||
|
||||
sub getSendRequestTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsSendRequestTemplateId") || "AGJBGviWGAwjnwziiPjvDg";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getStyleTemplateId ( )
|
||||
|
|
@ -114,40 +279,310 @@ This method returns the template ID for the main view.
|
|||
|
||||
sub getViewTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("friendsViewTemplateId") || "defaultAssetId";
|
||||
return $self->session->setting->get("friendsViewTemplateId") || "1Yn_zE_dSiNuaBGNLPbxtw";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_removeFriend ( )
|
||||
|
||||
This is a confirmation page of whether or not the user wishes to remove the selected user from friend
|
||||
|
||||
=cut
|
||||
|
||||
sub www_removeFriend {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $friendId = $session->form->get("friendId");
|
||||
my $var = {};
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
my $friend = WebGUI::Friends->new($session);
|
||||
|
||||
my $errorMsg = "";
|
||||
if (!$friendId) {
|
||||
my $i18n = WebGUI::International->new($session,"Account_Friends");
|
||||
$errorMsg = $i18n->get("no friend selected");
|
||||
}
|
||||
elsif(!$friend->isFriend($friendId)){
|
||||
my $i18n = WebGUI::International->new($session,"Account_Friends");
|
||||
$errorMsg = $i18n->get("not a friend error");
|
||||
}
|
||||
|
||||
if($errorMsg ne "") {
|
||||
my $backUrl = $self->getUrl("module=friends");
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getErrorTemplateId);
|
||||
}
|
||||
|
||||
my $user = WebGUI::User->new($session,$friendId);
|
||||
$var->{'user_full_name'} = $user->getWholeName;
|
||||
|
||||
$var->{'yes_url' } = $self->getUrl("module=friends;do=removeFriendConfirm;friendId=".$friendId);
|
||||
$var->{'no_url' } = $self->getUrl("module=friends");
|
||||
|
||||
return $self->processTemplate($var,$self->getRemoveConfirmTemplateId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_removeFriend ( )
|
||||
|
||||
This is a confirmation page of whether or not the user wishes to remove the selected user from friend
|
||||
|
||||
=cut
|
||||
|
||||
sub www_removeFriendConfirm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $friendId = $session->form->get("friendId");
|
||||
my $var = {};
|
||||
my $i18n = WebGUI::International->new($session,"Account_Friends");
|
||||
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
my $friend = WebGUI::Friends->new($session);
|
||||
|
||||
my $errorMsg = "";
|
||||
if (!$friendId) {
|
||||
$errorMsg = $i18n->get("no friend selected");
|
||||
}
|
||||
elsif(!$friend->isFriend($friendId)){
|
||||
$errorMsg = $i18n->get("not a friend error");
|
||||
}
|
||||
|
||||
if($errorMsg ne "") {
|
||||
my $backUrl = $self->getUrl("module=friends");
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getErrorTemplateId);
|
||||
}
|
||||
|
||||
my $user = WebGUI::User->new($session,$friendId);
|
||||
my $msg = sprintf($i18n->get("friend removed"),$user->getWholeName);
|
||||
|
||||
$friend->delete([$friendId]);
|
||||
|
||||
return $self->www_view($msg);
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_display ( )
|
||||
=head2 www_sendFriendsRequest ( )
|
||||
|
||||
The main view page for displaying the user's profile.
|
||||
The page which allows users to submit friends requests.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_display {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
sub www_sendFriendsRequest {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
my $uid = $self->uid;
|
||||
|
||||
my $user = WebGUI::User->new($session,$uid);
|
||||
my $i18n = WebGUI::International->new($session,'Account_Friends');
|
||||
|
||||
unless ($user->acceptsFriendsRequests($session->user)) {
|
||||
my $errorMsg = $i18n->get('does not want to be a friend');
|
||||
my $friend = WebGUI::Friends->new($session);
|
||||
if($friend->isFriend($uid)) {
|
||||
$errorMsg = $i18n->get("error user is already friend");
|
||||
}
|
||||
elsif($friend->isInvited($uid)) {
|
||||
$errorMsg = $i18n->get("error user is already invited");
|
||||
}
|
||||
return $self->showError($var,$errorMsg,$session->user->getProfileUrl,$self->getErrorTemplateId);
|
||||
}
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
#Overwrite these
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
|
||||
my $defaultComment = sprintf(
|
||||
$i18n->get('default friend comments'),
|
||||
$user->getFirstName,
|
||||
$session->user->getFirstName
|
||||
);
|
||||
$var->{'form_message_text'} = WebGUI::Form::textarea($session, {
|
||||
name =>"message",
|
||||
value =>$defaultComment,
|
||||
width =>600,
|
||||
height =>200
|
||||
});
|
||||
|
||||
$var->{'form_message_rich'} = WebGUI::Form::HTMLArea($session, {
|
||||
name => "message",
|
||||
value => $defaultComment,
|
||||
width => "600",
|
||||
});
|
||||
|
||||
$var->{'form_header' } = WebGUI::Form::formHeader($session,{
|
||||
action => $self->getUrl("module=friends;do=sendFriendsRequestSave;uid=$uid"),
|
||||
extras => q{name="messageForm"}
|
||||
});
|
||||
|
||||
$var->{'submit_button' } = WebGUI::Form::submit($session,{});
|
||||
$var->{'form_footer' } = WebGUI::Form::formFooter($session, {});
|
||||
|
||||
$var->{'cancel_url' } = $user->getProfileUrl;
|
||||
|
||||
return $self->processTemplate($var,$self->getSendRequestTemplateId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendFriendsRequestSave ( )
|
||||
|
||||
This method allows users to save friends requests
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendFriendsRequestSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
my $uid = $self->uid;
|
||||
|
||||
my $user = WebGUI::User->new($session,$uid);
|
||||
|
||||
#Errors fall through to the view page.
|
||||
unless ($user->acceptsFriendsRequests($session->user)) {
|
||||
return $self->www_sendFriendsRequest;
|
||||
}
|
||||
|
||||
my $inboxUrl = WebGUI::Account::Inbox->getViewInvitationUrl($session);
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
$friends->sendAddRequest($uid, $session->form->get('message'),$inboxUrl);
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
#Overwrite this
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_profile_url' } = $user->getProfileUrl;
|
||||
|
||||
return $self->processTemplate($var,$self->getConfirmTemplateId);
|
||||
|
||||
return $self->processTemplate($var,$self->getDisplayTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_view ( )
|
||||
|
||||
The main view page for editing the user's profile.
|
||||
The main view page for editing your friends.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
my $self = shift;
|
||||
my $msg = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
|
||||
return $self->processTemplate($var,$self->getViewTemplateId);
|
||||
my $uid = $self->uid;
|
||||
my $user = ($uid) ? WebGUI::User->new($session,$uid) : $session->user;
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
my $displayView = $uid ne "";
|
||||
$var->{'can_edit' } = $session->user->userId eq $user->userId;
|
||||
$var->{'display_message'} = $msg;
|
||||
|
||||
#Override these
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
|
||||
unless ($user->profileField('ableToBeFriend') && $user->profileIsViewable($session->user)) {
|
||||
my $i18n = WebGUI::International->new($session,"Account_Friends");
|
||||
my $errorMsg = "";
|
||||
if($var->{'can_edit'}) {
|
||||
$errorMsg = $i18n->get("friends is off");
|
||||
}
|
||||
else {
|
||||
$errorMsg = $i18n->get("no access");
|
||||
}
|
||||
my $backUrl = $self->getUrl("op=account");
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getErrorTemplateId);
|
||||
}
|
||||
|
||||
#Deal with rows per page
|
||||
my $rpp = $session->form->get("rpp") || 25;
|
||||
my $rpp_url = ";rpp=$rpp";
|
||||
|
||||
#Cache the base url
|
||||
my $friendsUrl = $self->getUrl("op=account;module=friends;do=view");
|
||||
|
||||
#Note for anyone who attempts to sort this list by the user's whole name:
|
||||
#You can do this, but the only way to do it efficiently is to join
|
||||
#the users, userProfileData, and groupings table. This will break if the groups API
|
||||
#changes in WebGUI 8, so we decided to leave it sorted by username only.
|
||||
|
||||
#Create the paginator
|
||||
my $friends = $user->friends->getUserList(1);
|
||||
my @friendIds = keys %{$friends};
|
||||
my $p = WebGUI::Paginator->new(
|
||||
$session,
|
||||
$friendsUrl.$rpp_url,
|
||||
$rpp
|
||||
);
|
||||
$p->setDataByArrayRef(\@friendIds);
|
||||
|
||||
#Export page to template
|
||||
my @friends = ();
|
||||
foreach my $friendId ( @{$p->getPageData} ) {
|
||||
my $friend = WebGUI::User->new($session,$friendId);
|
||||
next if($friend->isVisitor);
|
||||
#If you have friends turned off you shouldn't show up when other people view your friends friends
|
||||
next if($displayView && !$friend->profileField('ableToBeFriend'));
|
||||
|
||||
my $hash = {};
|
||||
$hash->{'friend_full_name' } = $friend->getWholeName;
|
||||
$hash->{'isViewable' } = $friend->profileIsViewable;
|
||||
$hash->{'friend_id' } = $friend->userId;
|
||||
$hash->{'friend_member_since' } = $friend->dateCreated;
|
||||
$hash->{'friend_member_since_human'} = $session->datetime->epochToHuman($friend->dateCreated);
|
||||
$hash->{'friend_isOnline' } = $friend->isOnline;
|
||||
if($hash->{'isViewable'}) {
|
||||
$hash->{'friend_profile_url'} = $friend->getProfileUrl;
|
||||
if($friend->profileField("photo")) {
|
||||
my $store = WebGUI::Storage::Image->get($session,$friend->profileField("photo"));
|
||||
my $file = $store->getFiles->[0];
|
||||
$hash->{'friend_photo_url' } = $store->getUrl($file);
|
||||
$hash->{'friend_photo_url_thumb'} = $store->getThumbnailUrl($file);
|
||||
}
|
||||
}
|
||||
|
||||
$hash->{'acceptsPrivateMessages'} = $friend->acceptsPrivateMessages($session->user->userId);
|
||||
if ($displayView) {
|
||||
if($friend->acceptsFriendsRequests($session->user)) {
|
||||
$hash->{'friend_request_url'} = $self->getUrl("module=friends;do=sendFriendsRequest;uid=".$friend->userId);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$hash->{'remove_url'} = $self->getUrl("module=friends;do=removeFriend;friendId=".$friend->userId);
|
||||
}
|
||||
push(@friends,$hash);
|
||||
}
|
||||
my $friendCount = $p->getRowCount;
|
||||
|
||||
$var->{'friends_loop' } = \@friends;
|
||||
$var->{'has_friends' } = $friendCount > 0;
|
||||
$var->{'friends_total' } = $friendCount;
|
||||
|
||||
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='}.$friendsUrl.q{;rpp='+this.options[this.selectedIndex].value"}
|
||||
});
|
||||
|
||||
my $templateId = ($displayView) ? $self->getViewTemplateId : $self->getEditTemplateId;
|
||||
return $self->processTemplate($var,$templateId);
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -46,17 +46,18 @@ These subroutines are available from this package:
|
|||
|
||||
sub appendCommonVars {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
my $inbox = shift;
|
||||
my $session = $self->session;
|
||||
my $var = shift;
|
||||
my $inbox = shift || WebGUI::Inbox->new($session);
|
||||
my $user = $session->user;
|
||||
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
$var->{'view_profile_url' } = $user->getProfileUrl;
|
||||
$self->SUPER::appendCommonVars($var);
|
||||
|
||||
$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;
|
||||
$var->{'invitation_count' } = $self->getInvitationCount;
|
||||
$var->{'invitations_enabled' } = $session->user->profileField('ableToBeFriend');
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +71,7 @@ sub appendCommonVars {
|
|||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
return ($self->session->form->get("uid") eq "");
|
||||
return ($self->uid eq "");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -145,11 +146,18 @@ sub editSettingsForm {
|
|||
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")
|
||||
name => "inboxViewInvitationTemplateId",
|
||||
value => $self->getViewInvitationTemplateId,
|
||||
namespace => "Account/Inbox/ViewInvitation",
|
||||
label => $i18n->get("inbox view invitation template label"),
|
||||
hoverHelp => $i18n->get("inbox view invitation template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "inboxInvitationConfirmTemplateId",
|
||||
value => $self->getInvitationConfirmTemplateId,
|
||||
namespace => "Account/Inbox/Confirm",
|
||||
label => $i18n->get("invitation confirm message template label"),
|
||||
hoverHelp => $i18n->get("invitation confirm message template hoverHelp")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
|
|
@ -179,7 +187,8 @@ sub editSettingsFormSave {
|
|||
$session->set("inboxErrorTemplateId",$form->process("inboxErrorTemplateId","template"));
|
||||
#Invitations Settings
|
||||
$session->set("inboxManageInvitationsTemplateId",$form->process("inboxManageInvitationsTemplateId","template"));
|
||||
$session->set("inboxInvitationErrorTemplateId",$form->process("inboxInvitationErrorTemplateId","template"));
|
||||
$session->set("inboxViewInvitationTemplateId",$form->process("inboxViewInvitationTemplateId","template"));
|
||||
$session->set("inboxInvitationConfirmTemplateId",$form->process("inboxInvitationConfirmTemplateId","template"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -195,20 +204,37 @@ sub getInboxErrorTemplateId {
|
|||
return $self->session->setting->get("inboxErrorTemplateId") || "ErEzulFiEKDkaCDVmxUavw";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getInvitationCount ( )
|
||||
|
||||
This method returns the total number of invitations in the invitation box.
|
||||
|
||||
=cut
|
||||
|
||||
sub getInvitationCount {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
return $session->db->quickScalar(
|
||||
q{select count(*) from friendInvitations where friendId=?},
|
||||
[$session->user->userId]
|
||||
);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getInvitationErrorTemplateId ( )
|
||||
=head2 getInvitationConfirmTemplateId ( )
|
||||
|
||||
This method returns the template ID for invitation errors.
|
||||
|
||||
=cut
|
||||
|
||||
sub getInvitationErrorTemplateId {
|
||||
sub getInvitationConfirmTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxInvitationErrorTemplateId") || "5A8Hd9zXvByTDy4x-H28qw";
|
||||
return $self->session->setting->get("inboxInvitationConfirmTemplateId") || "5A8Hd9zXvByTDy4x-H28qw";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getLayoutTemplateId ( )
|
||||
|
|
@ -222,6 +248,7 @@ sub getLayoutTemplateId {
|
|||
return $self->session->setting->get("inboxLayoutTempalteId") || $self->SUPER::getLayoutTemplateId;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getManageInvitationsTemplateId ( )
|
||||
|
|
@ -295,6 +322,40 @@ sub getUserProfileUrl {
|
|||
return $self->store->{$userId};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewInvitationTemplateId ( )
|
||||
|
||||
This method returns the id for the view message template.
|
||||
|
||||
=cut
|
||||
|
||||
sub getViewInvitationTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("inboxViewInvitationTemplateId") || "VBkY05f-E3WJS50WpdKd1Q";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewInvitationUrl ( session )
|
||||
|
||||
Class method which returns the base url for viewing invitations
|
||||
|
||||
=head3 session
|
||||
|
||||
session object
|
||||
|
||||
=cut
|
||||
|
||||
sub getViewInvitationUrl {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $url = $session->url;
|
||||
|
||||
return $url->append($url->getSiteURL,"op=account;module=inbox;do=viewInvitation");
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewMessageTemplateId ( )
|
||||
|
|
@ -323,6 +384,54 @@ sub getViewTemplateId {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_approveDenyInvitations ( )
|
||||
|
||||
Approves or denies invitations passed in.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_approveDenyInvitations {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
|
||||
my @messages = $form->process("inviteId","checkList");
|
||||
my $approve = $form->get("accept");
|
||||
my $deny = $form->get("deny");
|
||||
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
|
||||
my @users = ();
|
||||
|
||||
foreach my $inviteId (@messages) {
|
||||
my $invite = $friends->getAddRequest($inviteId);
|
||||
my $inviter = WebGUI::User->new($session, $invite->{inviterId});
|
||||
next unless ($invite->{inviterId}); #Not sure how this could ever happen, but check for it
|
||||
next unless ($session->user->userId eq $invite->{friendId}); #Protect against malicious stuff
|
||||
if($deny) {
|
||||
$friends->rejectAddRequest($inviteId);
|
||||
}
|
||||
elsif($approve) {
|
||||
$friends->approveAddRequest($inviteId);
|
||||
}
|
||||
push (@users, {
|
||||
'friend_name' => $inviter->getWholeName,
|
||||
'is_denied' => ($deny ne ""),
|
||||
'is_approved' => ($approve ne ""),
|
||||
});
|
||||
}
|
||||
my $var = {};
|
||||
$var->{'friends_loop'} = \@users;
|
||||
|
||||
#Append common vars
|
||||
$self->appendCommonVars($var,WebGUI::Inbox->new($session));
|
||||
|
||||
#Return a confirm message
|
||||
return $self->processTemplate($var,$self->getInvitationConfirmTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_deleteMessage ( )
|
||||
|
||||
Deletes a single messages passed in
|
||||
|
|
@ -389,15 +498,84 @@ 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 $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
my $var = {};
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
|
||||
#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");
|
||||
|
||||
my $var = {};
|
||||
#Create the paginator
|
||||
my $sql = q{ select * from friendInvitations where friendId=? order by dateSent desc };
|
||||
my $p = WebGUI::Paginator->new(
|
||||
$session,
|
||||
$inboxUrl.$rpp_url,
|
||||
$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});
|
||||
$hash->{'from_id' } = $row->{inviterId};
|
||||
$hash->{'from_url' } = $inviter->getProfileUrl; #Get the profile url of this user which may be cached.
|
||||
$hash->{'from' } = $inviter->getWholeName;
|
||||
$hash->{'dateStamp' } = $epoch;
|
||||
$hash->{'dateStamp_formatted'} = $session->datetime->epochToHuman($epoch);
|
||||
$hash->{'form_checkbox' } = WebGUI::Form::checkbox($session,{
|
||||
name => "inviteId",
|
||||
value => $row->{inviteId}
|
||||
});
|
||||
push(@msg,$hash);
|
||||
}
|
||||
my $msgCount = $p->getRowCount;
|
||||
|
||||
$var->{'message_loop' } = \@msg;
|
||||
$var->{'has_messages' } = $msgCount > 0;
|
||||
$var->{'message_total' } = $msgCount;
|
||||
|
||||
#Add common template variable for displaying the inbox
|
||||
my $inbox = WebGUI::Inbox->new($session);
|
||||
$self->appendCommonVars($var,$inbox);
|
||||
$var->{'form_start' } = WebGUI::Form::formHeader($session,{
|
||||
action => $self->getUrl("module=inbox;do=approveDenyInvitations")
|
||||
});
|
||||
$var->{'form_end' } = WebGUI::Form::formFooter($session);
|
||||
|
||||
$var->{'form_accept' } = WebGUI::Form::submit($session,{
|
||||
name =>"accept",
|
||||
value =>$i18n->get("accept button label")
|
||||
});
|
||||
|
||||
$var->{'form_deny' } = WebGUI::Form::submit($session,{
|
||||
name =>"deny",
|
||||
value =>$i18n->get("deny button label")
|
||||
});
|
||||
|
||||
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='}.$inboxUrl.q{;rpp='+this.options[this.selectedIndex].value"}
|
||||
});
|
||||
|
||||
#Append common vars
|
||||
$self->appendCommonVars($var,WebGUI::Inbox->new($session));
|
||||
#Append pagination vars
|
||||
$p->appendTemplateVars($var);
|
||||
|
||||
return $self->processTemplate($var,$self->getManageInvitationsTemplateId);
|
||||
}
|
||||
|
|
@ -453,6 +631,7 @@ sub www_sendMessage {
|
|||
$errorMsg = $i18n->get("system message error");
|
||||
}
|
||||
if($errorMsg) {
|
||||
$var->{'isInbox'} = "true";
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
|
|
@ -478,6 +657,7 @@ sub www_sendMessage {
|
|||
$errorMsg = $i18n->get("no self error");
|
||||
}
|
||||
if($errorMsg) {
|
||||
$var->{'isInbox'} = "true";
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
|
|
@ -530,6 +710,7 @@ sub www_sendMessage {
|
|||
unless($activeFriendCount) {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
$errorMsg = $i18n->get("no friends error");
|
||||
$var->{'isInbox'} = "true";
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
|
|
@ -553,8 +734,10 @@ sub www_sendMessage {
|
|||
$var->{'message_body' } = $form->get('message');
|
||||
|
||||
$var->{'form_message_text'} = WebGUI::Form::textarea($session, {
|
||||
name =>"message",
|
||||
value =>$var->{'message_body'} || "",
|
||||
name =>"message",
|
||||
value =>$var->{'message_body'} || "",
|
||||
width =>600,
|
||||
height =>200
|
||||
});
|
||||
|
||||
$var->{'form_message_rich'} = WebGUI::Form::HTMLArea($session, {
|
||||
|
|
@ -771,6 +954,99 @@ sub www_view {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewInvitation ( )
|
||||
|
||||
The page on which users view their messages
|
||||
|
||||
=cut
|
||||
|
||||
sub www_viewInvitation {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
|
||||
my $var = {};
|
||||
my $inviteId = shift || $session->form->get("inviteId");
|
||||
my $errorMsg = shift;
|
||||
my $i18n = WebGUI::International->new($session,'Account_Inbox');
|
||||
|
||||
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
my $invitation = $friends->getAddRequest($inviteId);
|
||||
my $inviter = WebGUI::User->new($session,$invitation->{inviterId});
|
||||
|
||||
#Add common template variable for displaying the inbox
|
||||
$self->appendCommonVars($var,WebGUI::Inbox->new($session));
|
||||
|
||||
#Handle Errors
|
||||
if (!($invitation->{inviteId})) { #Invitation is invalid
|
||||
$errorMsg = $i18n->get("invitation does not exist");
|
||||
}
|
||||
elsif ($inviter->isVisitor) { #Inviter user account was deleted
|
||||
$errorMsg = $i18n->get("inviter no longer exists");
|
||||
}
|
||||
elsif ($session->user->userId ne $invitation->{friendId}) { #User trying to view someone else's invitation
|
||||
$errorMsg = $i18n->get("no access to invitation");
|
||||
}
|
||||
|
||||
if($errorMsg) {
|
||||
my $backUrl = $var->{'view_invitations_url'};
|
||||
$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;
|
||||
$var->{'message_from_url' } = $inviter->getProfileUrl;
|
||||
$var->{'message_dateStamp' } = $epoch;
|
||||
$var->{'message_dateStamp_human'} = $session->datetime->epochToHuman($epoch);
|
||||
$var->{'message_body' } = $invitation->{comments};
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
#Build the action URLs
|
||||
my $nextInvitation = $friends->getPreviousInvitation($invitation); #Messages sorted descending so next is actually previous
|
||||
if( $nextInvitation->{inviteId} ) {
|
||||
$var->{'hasNext' } = "true";
|
||||
$var->{'next_message_url'} = $self->getUrl("module=inbox;do=viewInvitation;inviteId=".$nextInvitation->{inviteId});
|
||||
}
|
||||
|
||||
my $prevInvitation = $friends->getNextInvitation($invitation); #Messages sorted descending so previous is actually next
|
||||
if( $prevInvitation->{inviteId} ) {
|
||||
$var->{'hasPrevious' } = "true";
|
||||
$var->{'prev_message_url'} = $self->getUrl("module=inbox;do=viewInvitation;inviteId=".$prevInvitation->{inviteId});
|
||||
}
|
||||
|
||||
$var->{'form_header' } = WebGUI::Form::formHeader($session,{
|
||||
action => $self->getUrl("module=inbox;do=approveDenyInvitations;inviteId=".$inviteId)
|
||||
});
|
||||
$var->{'form_footer' } = WebGUI::Form::formFooter($session);
|
||||
|
||||
$var->{'form_accept' } = WebGUI::Form::submit($session,{
|
||||
name =>"accept",
|
||||
value =>$i18n->get("accept button label")
|
||||
});
|
||||
|
||||
$var->{'form_deny' } = WebGUI::Form::submit($session,{
|
||||
name =>"deny",
|
||||
value =>$i18n->get("deny button label")
|
||||
});
|
||||
|
||||
return $self->processTemplate($var,$self->getViewInvitationTemplateId);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewMessage ( )
|
||||
|
||||
The page on which users view their messages
|
||||
|
|
@ -804,6 +1080,7 @@ sub www_viewMessage {
|
|||
|
||||
if($errorMsg) {
|
||||
my $backUrl = $var->{'view_inbox_url'};
|
||||
$var->{'isInvitation'} = "true";
|
||||
return $self->showError($var,$errorMsg,$backUrl,$self->getInboxErrorTemplateId);
|
||||
}
|
||||
|
||||
|
|
@ -812,7 +1089,7 @@ sub www_viewMessage {
|
|||
$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_dateStamp_human'} = $session->datetime->epochToHuman($var->{'message_dateStamp'});
|
||||
$var->{'message_status' } = $message->getStatus;
|
||||
$var->{'message_body' } = $message->get("message");
|
||||
|
||||
|
|
@ -848,13 +1125,13 @@ sub www_viewMessage {
|
|||
$var->{'reply_url'} = $self->getUrl("module=inbox;do=sendMessage;messageId=".$messageId);
|
||||
}
|
||||
|
||||
my $nextMessage = $inbox->getNextMessage($message);
|
||||
my $nextMessage = $inbox->getPreviousMessage($message); #Message are displayed in descending order so next is actually previous
|
||||
if( defined $nextMessage ) {
|
||||
$var->{'hasNext' } = "true";
|
||||
$var->{'next_message_url'} = $self->getUrl("module=inbox;do=viewMessage;messageId=".$nextMessage->getId);
|
||||
}
|
||||
|
||||
my $prevMessage = $inbox->getPreviousMessage($message);
|
||||
my $prevMessage = $inbox->getNextMessage($message); #Messages are displayed in descending order so previous is actually next
|
||||
if(defined $prevMessage) {
|
||||
$var->{'hasPrevious' } = "true";
|
||||
$var->{'prev_message_url'} = $self->getUrl("module=inbox;do=viewMessage;messageId=".$prevMessage->getId);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ These subroutines are available from this package:
|
|||
|
||||
=head2 appendCommonVars ( var )
|
||||
|
||||
Appends common template variables that all inbox templates use
|
||||
Appends common template variables that all profile templates use
|
||||
|
||||
=head3 var
|
||||
|
||||
|
|
@ -47,11 +47,12 @@ sub appendCommonVars {
|
|||
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'}
|
||||
$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'};
|
||||
$var->{'invitations_enabled' } = $session->user->profileField('ableToBeFriend');
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -104,6 +105,14 @@ sub editSettingsForm {
|
|||
label => $i18n->get("profile view template label"),
|
||||
hoverHelp => $i18n->get("profile view template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "profileErrorTemplateId",
|
||||
value => $self->getErrorTemplateId,
|
||||
namespace => "Account/Profile/Error",
|
||||
label => $i18n->get("profile error template label"),
|
||||
hoverHelp => $i18n->get("profile error template hoverHelp")
|
||||
);
|
||||
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
|
@ -128,6 +137,7 @@ sub editSettingsFormSave {
|
|||
$setting->set("profileDisplayLayoutTemplateId", $form->process("profileDisplayLayoutTemplateId","template"));
|
||||
$setting->set("profileEditTemplateId", $form->process("profileEditTemplateId","template"));
|
||||
$setting->set("profileViewTempalteId", $form->process("profileViewTemplateId","template"));
|
||||
$setting->set("profileErrorTemplateId",$form->process("profileErrorTemplateId","template"));
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -194,6 +204,20 @@ sub getEditTemplateId {
|
|||
return $self->session->setting->get("profileEditTemplateId") || "75CmQgpcCSkdsL-oawdn3Q";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getErrorTemplateId ( )
|
||||
|
||||
This method returns the template ID used to display the error page.
|
||||
|
||||
=cut
|
||||
|
||||
sub getErrorTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("profileErrorTemplateId") || "MBmWlA_YEA2I6D29OMGtRg";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getLayoutTemplateId ( )
|
||||
|
|
@ -205,9 +229,9 @@ This method returns the template ID for the account layout.
|
|||
sub getLayoutTemplateId {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $method = $session->form->get("do");
|
||||
my $uid = $session->form->get("uid");
|
||||
|
||||
my $method = $self->method;
|
||||
my $uid = $self->uid;
|
||||
|
||||
return $self->getEditLayoutTemplateId if($method eq "edit" || $uid eq "");
|
||||
return $session->setting->get("profileLayoutTemplateId") || $self->SUPER::getLayoutTemplateId;
|
||||
}
|
||||
|
|
@ -240,114 +264,6 @@ sub getViewTemplateId {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=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.
|
||||
|
|
@ -369,6 +285,10 @@ sub www_edit {
|
|||
my @errorFields = ();
|
||||
@errorFields = (@{$errors->{errorFields}},@{$errors->{warningFields}}) if($hasErrors);
|
||||
|
||||
$var->{'profile_errors' } = [];
|
||||
map{ push(@{$var->{'profile_errors'}},{ error_message => $_ }) } @{$errors->{errors}} if($hasErrors);
|
||||
$var->{'hasErrors' } = scalar(@{$var->{'profile_errors'}}) > 0;
|
||||
|
||||
my @categories = ();
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
next unless $category->isEditable;
|
||||
|
|
@ -415,6 +335,7 @@ sub www_edit {
|
|||
'profile_category_shortLabel' => $shortCategoryLabel,
|
||||
'profile_category_index' => $categoryIndex,
|
||||
'profile_fields_loop' => \@fields,
|
||||
'profile_errors' => $var->{'profile_errors'},
|
||||
});
|
||||
#This value will determine whether or not a valid category is active or not
|
||||
$active ||= $isActive;
|
||||
|
|
@ -431,11 +352,8 @@ sub www_edit {
|
|||
});
|
||||
$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);
|
||||
}
|
||||
|
||||
|
|
@ -453,7 +371,7 @@ sub www_editSave {
|
|||
my $session = $self->session;
|
||||
|
||||
my $fields = WebGUI::ProfileField->getEditableFields($session);
|
||||
my $retHash = $self->validateProfileFields($session,$fields);
|
||||
my $retHash = $session->user->validateProfileDataFromForm($fields);
|
||||
push (@{$retHash->{errors}},@{$retHash->{warnings}});
|
||||
|
||||
unless(scalar(@{$retHash->{errors}})) {
|
||||
|
|
@ -476,9 +394,8 @@ The display page of the .
|
|||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new($session, 'Account_Profile');
|
||||
my $var = {};
|
||||
my $uid = $session->form->get("uid");
|
||||
my $uid = $self->uid;
|
||||
my $selected = $session->form->get("selected"); #Allow users to template tabs or other category dividers
|
||||
|
||||
my $active = 0; #Whether or not a category is selected
|
||||
|
|
@ -487,15 +404,23 @@ sub www_view {
|
|||
#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);
|
||||
my $user = WebGUI::User->new($session,$uid);
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
#Overwrite these
|
||||
$var->{'user_full_name' } = $user->getWholeName;
|
||||
$var->{'user_member_since' } = $user->dateCreated;
|
||||
|
||||
#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");
|
||||
unless ($user->profileIsViewable($session->user)) {
|
||||
my $i18n = WebGUI::International->new($session,'Account_Profile');
|
||||
return $self->showError(
|
||||
$var,
|
||||
$i18n->get("profile not public error"),
|
||||
$var->{'back_url'},
|
||||
$self->getErrorTemplateId
|
||||
);
|
||||
}
|
||||
|
||||
my @categories = ();
|
||||
|
|
@ -549,6 +474,8 @@ sub www_view {
|
|||
|
||||
#If not category is selected, set the first category as the active one
|
||||
$categories[0]->{profile_category_isActive} = 1 unless($active);
|
||||
my $privacySetting = $user->profileField("publicProfile") || "none";
|
||||
$var->{'profile_privacy_'.$privacySetting } = "true";
|
||||
|
||||
$var->{'profile_category_loop' } = \@categories;
|
||||
$var->{'profile_user_id' } = $user->userId;
|
||||
|
|
@ -556,12 +483,6 @@ sub www_view {
|
|||
$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);
|
||||
}
|
||||
|
||||
|
|
|
|||
297
lib/WebGUI/Account/Shop.pm
Normal file
297
lib/WebGUI/Account/Shop.pm
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
package WebGUI::Account::Shop;
|
||||
|
||||
use strict;
|
||||
|
||||
use WebGUI::Exception;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
use WebGUI::Utility;
|
||||
use base qw/WebGUI::Account/;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Package WebGUI::Account::Shop
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Shop Features built into the Account system
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use WebGUI::Account::Shop;
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
These methods are available from this class:
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 appendCommonVars ( var )
|
||||
|
||||
Appends common template variables that shop templates will use
|
||||
|
||||
=head3 var
|
||||
|
||||
The hash reference to append template variables to
|
||||
|
||||
=cut
|
||||
|
||||
sub appendCommonVars {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
|
||||
$self->SUPER::appendCommonVars($var);
|
||||
|
||||
my $session = $self->session;
|
||||
my $user = $session->user;
|
||||
my $method = $session->form->get("do");
|
||||
|
||||
$var->{'manage_purchases_url' } = $self->getUrl("module=shop;do=managePurchases");
|
||||
$var->{'managesPurchasesIsActive'} = WebGUI::Utility::isIn($method,("","managePurchases","view","viewTransaction"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 canView ( )
|
||||
|
||||
Returns whether or not the user can view the the tab for this module
|
||||
|
||||
=cut
|
||||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
return ($self->uid eq "");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 editSettingsForm ( )
|
||||
|
||||
Creates form elements for user settings page custom to this account module
|
||||
|
||||
=cut
|
||||
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new($session,'Account_Shop');
|
||||
my $shopi18n = WebGUI::International->new($session,'Shop');
|
||||
my $f = WebGUI::HTMLForm->new($session);
|
||||
|
||||
$f->template(
|
||||
name => "shopStyleTemplateId",
|
||||
value => $self->getStyleTemplateId,
|
||||
namespace => "style",
|
||||
label => $i18n->get("shop style template label"),
|
||||
hoverHelp => $i18n->get("shop style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "shopLayoutTemplateId",
|
||||
value => $self->getLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("shop layout template label"),
|
||||
hoverHelp => $i18n->get("shop layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "shopMyPurchasesTemplateId",
|
||||
value => $self->session->setting->get("shopMyPurchasesTemplateId"),
|
||||
namespace => "Shop/MyPurchases",
|
||||
label => $shopi18n->get("my purchases template"),
|
||||
hoverHelp => $shopi18n->get("my purchases template help")
|
||||
);
|
||||
$f->template(
|
||||
name => "shopMyPurchasesDetailTemplateId",
|
||||
value => $self->session->setting->get("shopMyPurchasesDetailTemplateId"),
|
||||
namespace => "Shop/MyPurchasesDetail",
|
||||
label => $shopi18n->get("my purchases detail template"),
|
||||
hoverHelp => $shopi18n->get("my purchases detail template help")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 editSettingsFormSave ( )
|
||||
|
||||
Creates form elements for the 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("shopStyleTemplateId", $form->process("shopStyleTemplateId","template"));
|
||||
$setting->set("shopLayoutTemplateId", $form->process("shopLayoutTemplateId","template"));
|
||||
$setting->set("shopMyPurchasesTemplateId", $form->process("shopMyPurchasesTemplateId","template"));
|
||||
$setting->set("shopMyPurchasesDetailTemplateId", $form->process("shopMyPurchasesDetailTemplateId","template"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getLayoutTemplateId ( )
|
||||
|
||||
This method returns the templateId for the layout of your new module.
|
||||
|
||||
=cut
|
||||
|
||||
sub getLayoutTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("shopLayoutTemplateId") || "aUDsJ-vB9RgP-AYvPOy8FQ";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getStyleTemplateId ( )
|
||||
|
||||
This method returns the template ID for the main style.
|
||||
|
||||
=cut
|
||||
|
||||
sub getStyleTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("shopStyleTemplateId") || $self->SUPER::getStyleTemplateId;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_managePurchases ( )
|
||||
|
||||
The main view page for editing the user's profile.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_managePurchases {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $url = $session->url;
|
||||
|
||||
my $var = {};
|
||||
|
||||
# build list
|
||||
foreach my $id (@{WebGUI::Shop::Transaction->getTransactionIdsForUser($session)}) {
|
||||
my $transaction = WebGUI::Shop::Transaction->new($session, $id);
|
||||
push @{$var->{transactions}}, {
|
||||
%{$transaction->get},
|
||||
viewDetailUrl => $self->getUrl('op=account;module=shop;do=viewTransaction;transactionId='.$id),
|
||||
amount => sprintf("%.2f", $transaction->get('amount')),
|
||||
};
|
||||
}
|
||||
|
||||
$self->appendCommonVars($var);
|
||||
|
||||
return $self->processTemplate($var,$session->setting->get("shopMyPurchasesTemplateId"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_view ( )
|
||||
|
||||
The main view page for editing the user's profile.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_view {
|
||||
my $self = shift;
|
||||
|
||||
#Use the view class as the driver for now. This will likely grow
|
||||
return $self->www_managePurchases();
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewTransaction ( )
|
||||
|
||||
The main view page for editing the user's profile.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_viewTransaction {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
my $transactionId = $session->form->get('transactionId');
|
||||
my $transaction = shift || WebGUI::Shop::Transaction->new($session,$transactionId);
|
||||
my $notice = shift;
|
||||
|
||||
return $session->insufficient unless ($transaction->get('userId') eq $session->user->userId);
|
||||
|
||||
my $i18n = WebGUI::International->new($session, 'Shop');
|
||||
my $i18n = WebGUI::International->new($session, 'Shop');
|
||||
my ($style, $url) = $session->quick(qw(style url));
|
||||
|
||||
my %var = (
|
||||
%{$transaction->get},
|
||||
notice => $notice,
|
||||
cancelRecurringUrl => $url->page('shop=transaction;method=cancelRecurring;transactionId='.$transaction->getId),
|
||||
amount => sprintf("%.2f", $transaction->get('amount')),
|
||||
inShopCreditDeduction => sprintf("%.2f", $transaction->get('inShopCreditDeduction')),
|
||||
taxes => sprintf("%.2f", $transaction->get('taxes')),
|
||||
shippingPrice => sprintf("%.2f", $transaction->get('shippingPrice')),
|
||||
shippingAddress => $transaction->formatAddress({
|
||||
name => $transaction->get('shippingAddressName'),
|
||||
address1 => $transaction->get('shippingAddress1'),
|
||||
address2 => $transaction->get('shippingAddress2'),
|
||||
address3 => $transaction->get('shippingAddress3'),
|
||||
city => $transaction->get('shippingCity'),
|
||||
state => $transaction->get('shippingState'),
|
||||
code => $transaction->get('shippingCode'),
|
||||
country => $transaction->get('shippingCountry'),
|
||||
phoneNumber => $transaction->get('shippingPhoneNumber'),
|
||||
}),
|
||||
paymentAddress => $transaction->formatAddress({
|
||||
name => $transaction->get('paymentAddressName'),
|
||||
address1 => $transaction->get('paymentAddress1'),
|
||||
address2 => $transaction->get('paymentAddress2'),
|
||||
address3 => $transaction->get('paymentAddress3'),
|
||||
city => $transaction->get('paymentCity'),
|
||||
state => $transaction->get('paymentState'),
|
||||
code => $transaction->get('paymentCode'),
|
||||
country => $transaction->get('paymentCountry'),
|
||||
phoneNumber => $transaction->get('paymentPhoneNumber'),
|
||||
}),
|
||||
);
|
||||
|
||||
# items
|
||||
my @items = ();
|
||||
foreach my $item (@{$transaction->getItems}) {
|
||||
my $address = '';
|
||||
if ($transaction->get('shippingAddressId') ne $item->get('shippingAddressId')) {
|
||||
$address = $transaction->formatAddress({
|
||||
name => $item->get('shippingAddressName'),
|
||||
address1 => $item->get('shippingAddress1'),
|
||||
address2 => $item->get('shippingAddress2'),
|
||||
address3 => $item->get('shippingAddress3'),
|
||||
city => $item->get('shippingCity'),
|
||||
state => $item->get('shippingState'),
|
||||
code => $item->get('shippingCode'),
|
||||
country => $item->get('shippingCountry'),
|
||||
phoneNumber => $item->get('shippingPhoneNumber'),
|
||||
});
|
||||
}
|
||||
push @items, {
|
||||
%{$item->get},
|
||||
viewItemUrl => $url->page('shop=transaction;method=viewItem;transactionId='.$transaction->getId.';itemId='.$item->getId),
|
||||
price => sprintf("%.2f", $item->get('price')),
|
||||
itemShippingAddress => $address,
|
||||
orderStatus => $i18n->get($item->get('orderStatus')),
|
||||
};
|
||||
}
|
||||
$var{items} = \@items;
|
||||
|
||||
$self->appendCommonVars(\%var);
|
||||
|
||||
# render
|
||||
return $self->processTemplate(\%var,$session->setting->get("shopMyPurchasesDetailTemplateId"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
|
@ -6,6 +6,8 @@ use WebGUI::Exception;
|
|||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
use WebGUI::Utility;
|
||||
use WebGUI::Operation::Auth;
|
||||
|
||||
use base qw/WebGUI::Account/;
|
||||
|
||||
=head1 NAME
|
||||
|
|
@ -26,6 +28,18 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 canView ( )
|
||||
|
||||
Returns whether or not the user can view the inbox tab
|
||||
|
||||
=cut
|
||||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
return ($self->uid eq "");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -42,13 +56,24 @@ sub editSettingsForm {
|
|||
my $i18n = WebGUI::International->new($session,'Account_User');
|
||||
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 => "userAccountStyleTemplateId",
|
||||
value => $self->session->setting->get("userAccountStyleTemplateId"),
|
||||
namespace => "style",
|
||||
label => $i18n->get("user style template label"),
|
||||
hoverHelp => $i18n->get("user style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "userAccountLayoutTemplateId",
|
||||
value => $self->session->setting->get("userAccountLayoutTemplateId"),
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("layout template label"),
|
||||
hoverHelp => $i18n->get("layout template hoverHelp")
|
||||
);
|
||||
$f->raw(q{<tr><td class="formDescription" colspan="2"> </td></tr>});
|
||||
$f->readOnly (
|
||||
value => $i18n->get("templates in auth method message"),
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
|
@ -62,6 +87,13 @@ sub editSettingsForm {
|
|||
=cut
|
||||
|
||||
sub editSettingsFormSave {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
my $form = $session->form;
|
||||
|
||||
$setting->set("userAccountStyleTemplateId", $form->process("userAccountStyleTemplateId","template"));
|
||||
$setting->set("userAccountLayoutTemplateId", $form->process("userAccountLayoutTemplateId","template"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -74,7 +106,7 @@ This method returns the template ID for the account layout.
|
|||
|
||||
sub getLayoutTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("userLayoutTempalteId") || $self->SUPER::getLayoutTemplateId;
|
||||
return $self->session->setting->get("userAccountLayoutTemplateId") || "9ThW278DWLV0-Svf68ljFQ";
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -88,21 +120,9 @@ This method returns the template ID for the main style.
|
|||
|
||||
sub getStyleTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("userStyleTemplateId") || $self->SUPER::getStyleTemplateId;
|
||||
return $self->session->setting->get("userAccountStyleTemplateId") || $self->SUPER::getStyleTemplateId;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getViewTemplateId ( )
|
||||
|
||||
This method returns the template ID for the main view.
|
||||
|
||||
=cut
|
||||
|
||||
sub getViewTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("userViewTemplateId") || "defaultAssetId";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -115,9 +135,10 @@ The main view page for editing the user's profile.
|
|||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
|
||||
return $self->processTemplate($var,$self->getViewTemplateId);
|
||||
my $auth = WebGUI::Operation::Auth::getInstance($session);
|
||||
|
||||
return $auth->displayAccount;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
145
lib/WebGUI/Account/_NewModule.skeleton
Normal file
145
lib/WebGUI/Account/_NewModule.skeleton
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
package WebGUI::Account::NewModule;
|
||||
|
||||
use strict;
|
||||
|
||||
use WebGUI::Exception;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Pluggable;
|
||||
use WebGUI::Utility;
|
||||
use base qw/WebGUI::Account/;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Package WebGUI::Account::NewAsset
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Describe your New Account Module's functionality and features here.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use WebGUI::Account::NewModule;
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
These methods are available from this class:
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 canView ( )
|
||||
|
||||
Returns whether or not the user can view the the tab for this module
|
||||
|
||||
=cut
|
||||
|
||||
sub canView {
|
||||
my $self = shift;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 editSettingsForm ( )
|
||||
|
||||
Creates form elements for user settings page custom to this account module
|
||||
|
||||
=cut
|
||||
|
||||
sub editSettingsForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new($session,'Account_NewModule');
|
||||
my $f = WebGUI::HTMLForm->new($session);
|
||||
|
||||
$f->template(
|
||||
name => "moduleStyleTemplateId",
|
||||
value => $self->getStyleTemplateId,
|
||||
namespace => "style",
|
||||
label => $i18n->get("style template label"),
|
||||
hoverHelp => $i18n->get("style template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "moduleLayoutTemplateId",
|
||||
value => $self->getLayoutTemplateId,
|
||||
namespace => "Account/Layout",
|
||||
label => $i18n->get("layout template label"),
|
||||
hoverHelp => $i18n->get("layout template hoverHelp")
|
||||
);
|
||||
$f->template(
|
||||
name => "moduleViewTemplateId",
|
||||
value => $self->session->setting->get("moduleViewTemplateId"),
|
||||
namespace => "Account/NewModule/View",
|
||||
label => $i18n->get("view template label"),
|
||||
hoverHelp => $i18n->get("view template hoverHelp")
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 editSettingsFormSave ( )
|
||||
|
||||
Creates form elements for the 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("moduleStyleTemplateId", $form->process("moduleStyleTemplateId","template"));
|
||||
$setting->set("moduleLayoutTemplateId", $form->process("moduleLayoutTemplateId","template"));
|
||||
$setting->set("moduleViewTemplateId", $form->process("moduleViewTemplateId","template"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getLayoutTemplateId ( )
|
||||
|
||||
This method returns the templateId for the layout of your new module.
|
||||
|
||||
=cut
|
||||
|
||||
sub getLayoutTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("moduleLayoutTempalteId") || $self->SUPER::getLayoutTemplateId;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getStyleTemplateId ( )
|
||||
|
||||
This method returns the template ID for the main style.
|
||||
|
||||
=cut
|
||||
|
||||
sub getStyleTemplateId {
|
||||
my $self = shift;
|
||||
return $self->session->setting->get("moduleStyleTemplateId") || $self->SUPER::getStyleTemplateId;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_view ( )
|
||||
|
||||
The main view page for editing the user's profile.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_view {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $var = {};
|
||||
|
||||
return $self->processTemplate($var,$session->setting->get("moduleViewTemplateId"));
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
|
@ -424,7 +424,7 @@ Formats the url to view a users profile.
|
|||
|
||||
sub getPosterProfileUrl {
|
||||
my $self = shift;
|
||||
return $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId"));
|
||||
return WebGUI::User->new($self->session,$self->get("ownerUserId"))->getProfileUrl;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -534,7 +534,7 @@ sub getTemplateVars {
|
|||
$var{"userId"} = $self->get("ownerUserId");
|
||||
$var{"user.isPoster"} = $self->isPoster;
|
||||
$var{"avatar.url"} = $self->getAvatarUrl;
|
||||
$var{"userProfile.url"} = $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId"));
|
||||
$var{"userProfile.url"} = $self->getPosterProfileUrl;
|
||||
$var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("creationDate"));
|
||||
$var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("revisionDate"));
|
||||
$var{'title.short'} = $self->chopTitle;
|
||||
|
|
|
|||
|
|
@ -847,7 +847,7 @@ sub www_saveUserPrefs {
|
|||
my $field = WebGUI::ProfileField->new($self->session,$fieldId);
|
||||
next unless $field;
|
||||
$data{$field->getId} = $field->formProcess;
|
||||
if ($field->getId eq 'email' && WebGUI::Operation::Profile::isDuplicateEmail($self->session,$data{$field->getId})) {
|
||||
if ($field->getId eq 'email' && $field->isDuplicate($data{$field->getId})) {
|
||||
return '<li>'.$i18n->get(1072).'</li>';
|
||||
}
|
||||
if ($field->isRequired && !$data{$field->getId}) {
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ use WebGUI::Operation::Shared;
|
|||
use WebGUI::Operation::Profile;
|
||||
use WebGUI::Workflow::Instance;
|
||||
use WebGUI::Inbox;
|
||||
use WebGUI::Exception;
|
||||
|
||||
# Profile field name for the number of times the showMessageOnLogin has been
|
||||
# seen.
|
||||
|
|
@ -270,7 +271,7 @@ Password entered by the user. This is only used in for sending the user a notif
|
|||
|
||||
=head3 profile
|
||||
|
||||
Hashref of profile values returned by the function WebGUI::Operation::Profile::validateProfileData($self->session)
|
||||
Hashref of profile values returned by the function WebGUI::User::validateProfileDataFromForm($fields);
|
||||
|
||||
=cut
|
||||
|
||||
|
|
@ -290,7 +291,7 @@ sub createAccountSave {
|
|||
$u->username($username);
|
||||
$u->authMethod($self->authMethod);
|
||||
$u->karma($self->session->setting->get("karmaPerLogin"),"Login","Just for logging in.") if ($self->session->setting->get("useKarma"));
|
||||
WebGUI::Operation::Profile::saveProfileFields($self->session,$u,$profile) if($profile);
|
||||
$u->updateProfileFields($profile) if ($profile);
|
||||
$self->saveParams($userId,$self->authMethod,$properties);
|
||||
|
||||
if ($self->getSetting("sendWelcomeMessage")){
|
||||
|
|
@ -460,10 +461,10 @@ Array ref of template vars from subclass
|
|||
=cut
|
||||
|
||||
sub displayAccount {
|
||||
my $self = shift;
|
||||
my $method = $_[0];
|
||||
my $vars = $_[1];
|
||||
|
||||
my $self = shift;
|
||||
my $method = shift;
|
||||
my $vars = shift;
|
||||
|
||||
my $i18n = WebGUI::International->new($self->session);
|
||||
$vars->{title} = $i18n->get(61);
|
||||
|
||||
|
|
@ -477,8 +478,21 @@ sub displayAccount {
|
|||
$vars->{'account.form.submit'} = WebGUI::Form::submit($self->session,{});
|
||||
$vars->{'account.form.footer'} = WebGUI::Form::formFooter($self->session,);
|
||||
|
||||
$vars->{'account.options'} = WebGUI::Operation::Shared::accountOptions($self->session);
|
||||
return WebGUI::Asset::Template->new($self->session,$self->getAccountTemplateId)->process($vars);
|
||||
#Appends 'account.options' loop along with some new links
|
||||
WebGUI::Account->appendAccountLinks($self->session,$vars);
|
||||
|
||||
########### ACCOUNT SHUNT
|
||||
#The following is a shunt which allows the displayAccount page to be displayed in the
|
||||
#Account system. This shunt will be replaced in WebGUI 8 when the API can be broken
|
||||
my $output = WebGUI::Asset::Template->new($self->session,$self->getAccountTemplateId)->process($vars);
|
||||
#If the account system is calling this method, just return the template
|
||||
my $op = $self->session->form->get("op");
|
||||
if($op eq "account") {
|
||||
return $output;
|
||||
}
|
||||
#Otherwise wrap the template into the account layout
|
||||
my $instance = WebGUI::Content::Account->createInstance($self->session,"user");
|
||||
return $instance->displayContent($output,1);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -304,9 +304,18 @@ sub createAccountSave {
|
|||
#Check that username is valid and not a duplicate in the system.
|
||||
$error .= $self->error if(!$self->validUsername($username));
|
||||
#Validate profile data.
|
||||
my ($profile, $temp, $warning) = WebGUI::Operation::Profile::validateProfileData($self->session);
|
||||
my $fields = WebGUI::ProfileField->getEditableFields($self->session);
|
||||
my $retHash = $self->user->validateProfileDataFromForm($fields);
|
||||
my $profile = $retHash->{profile};
|
||||
my $temp = "";
|
||||
my $warning = "";
|
||||
|
||||
my $format = "<li>%s</li>";
|
||||
map { $warning .= sprintf($format,$_) } @{$retHash->{warnings}};
|
||||
map { $temp .= sprintf($format,$_) } @{$retHash->{errors}};
|
||||
|
||||
$error .= $temp;
|
||||
return $self->createAccount("<li>".$error."</li1>") unless ($error eq "");
|
||||
return $self->createAccount("<li>".$error."</li>") unless ($error eq "");
|
||||
#If Email address is not unique, a warning is displayed
|
||||
if($warning ne "" && !$self->session->form->process("confirm")){
|
||||
return $self->createAccount('<li>'.$i18n->get(1078).'</li>', 1);
|
||||
|
|
@ -336,18 +345,30 @@ sub deactivateAccountConfirm {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
sub displayAccount {
|
||||
my $self = shift;
|
||||
my $vars;
|
||||
return $self->displayLogin($_[0]) if ($self->isVisitor);
|
||||
my $self = shift;
|
||||
my $vars;
|
||||
return $self->displayLogin($_[0]) if ($self->isVisitor);
|
||||
my $i18n = WebGUI::International->new($self->session);
|
||||
$vars->{displayTitle} = '<h1>'.$i18n->get(61).'</h1>';
|
||||
$vars->{'account.message'} = $i18n->get(856);
|
||||
if($self->session->setting->get("useKarma")){
|
||||
$vars->{'account.form.karma'} = $self->session->user->profileField("karma");
|
||||
$vars->{'account.form.karma.label'} = $i18n->get(537);
|
||||
}
|
||||
$vars->{'account.options'} = WebGUI::Operation::Shared::accountOptions($self->session);
|
||||
return WebGUI::Asset::Template->new($self->session,$self->getAccountTemplateId)->process($vars);
|
||||
$vars->{displayTitle} = '<h1>'.$i18n->get(61).'</h1>';
|
||||
$vars->{'account.message'} = $i18n->get(856);
|
||||
if($self->session->setting->get("useKarma")){
|
||||
$vars->{'account.form.karma'} = $self->session->user->profileField("karma");
|
||||
$vars->{'account.form.karma.label'} = $i18n->get(537);
|
||||
}
|
||||
WebGUI::Account->appendAccountLinks($self->session,$vars);
|
||||
|
||||
########### ACCOUNT SHUNT
|
||||
#The following is a shunt which allows the displayAccount page to be displayed in the
|
||||
#Account system. This shunt will be replaced in WebGUI 8 when the API can be broken
|
||||
my $output = WebGUI::Asset::Template->new($self->session,$self->getAccountTemplateId)->process($vars);
|
||||
#If the account system is calling this method, just return the template
|
||||
my $op = $self->session->form->get("op");
|
||||
if($op eq "account") {
|
||||
return $output;
|
||||
}
|
||||
#Otherwise wrap the template into the account layout
|
||||
my $instance = WebGUI::Content::Account->createInstance($self->session,"user");
|
||||
return $instance->displayContent($output,1);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -229,7 +229,18 @@ sub createAccountSave {
|
|||
}
|
||||
}
|
||||
$error .= $self->error unless($self->_isValidPassword($password,$passConfirm));
|
||||
my ($profile, $temp, $warning) = WebGUI::Operation::Profile::validateProfileData($self->session, {regOnly => 1});
|
||||
|
||||
my $fields = WebGUI::ProfileField->getRegistrationFields($session);
|
||||
my $retHash = $self->user->validateProfileDataFromForm($fields);
|
||||
my $profile = $retHash->{profile};
|
||||
my $temp = "";
|
||||
my $warning = "";
|
||||
|
||||
my $format = "<li>%s</li>";
|
||||
map { $warning .= sprintf($format,$_) } @{$retHash->{warnings}};
|
||||
map { $temp .= sprintf($format,$_) } @{$retHash->{errors}};
|
||||
|
||||
|
||||
$error .= $temp;
|
||||
|
||||
unless ($error eq "") {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ package WebGUI::Content::Account;
|
|||
|
||||
use strict;
|
||||
use WebGUI::Session;
|
||||
use WebGUI::Exception::Account;
|
||||
use WebGUI::Exception;
|
||||
use Carp qw(croak);
|
||||
|
||||
=head1 NAME
|
||||
|
|
@ -56,6 +56,65 @@ These subroutines are available from this package:
|
|||
|
||||
=cut
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 createInstance ( session, module )
|
||||
|
||||
Creates an instance of an account pluggin
|
||||
|
||||
=session
|
||||
|
||||
WebGUI::Session object
|
||||
|
||||
=module
|
||||
|
||||
Module the method is in. Defaults to the profileModuleIdentifier in the config file
|
||||
|
||||
=cut
|
||||
|
||||
sub createInstance {
|
||||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $module = shift || $session->config->get("profileModuleIdentifier");
|
||||
|
||||
#Get the account config to work with
|
||||
my $configs = $session->config->get("account");
|
||||
my $config = __PACKAGE__->getAccountConfig($session,$module,$configs);
|
||||
|
||||
#Throw an error if the config file isn't found
|
||||
unless (defined $config) {
|
||||
WebGUI::Error->throw( error => qq{Could not locate module $module in the account system});
|
||||
return undef;
|
||||
}
|
||||
|
||||
#Visitor cannot access the acccount system
|
||||
return $session->privilege->insufficient if($session->user->isVisitor);
|
||||
|
||||
#Create Pluggin Object
|
||||
#Don't eval this as pluggable will croak and we want the calling module to handle the exception
|
||||
my $pluggin = WebGUI::Pluggable::instanciate(
|
||||
$config->{className},
|
||||
"new",
|
||||
[ $session, $module ]
|
||||
);
|
||||
|
||||
#Check to make sure pluggin is a subclass of WebGUI::Account
|
||||
unless($pluggin->isa('WebGUI::Account')) {
|
||||
my $plugginType = ref $pluggin;
|
||||
WebGUI::Error::InvalidObject->throw(
|
||||
expected => 'WebGUI::Account',
|
||||
got => $plugginType,
|
||||
error => '$plugginType is not a subclass of WebGUI::Accout'
|
||||
);
|
||||
return undef;
|
||||
}
|
||||
|
||||
return $pluggin;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getAccountConfig ( op, configs )
|
||||
|
|
@ -99,97 +158,21 @@ sub handler {
|
|||
my $form = $session->form;
|
||||
my $setting = $session->setting;
|
||||
|
||||
my $op = $form->get("op");
|
||||
return undef unless ($op eq "account");
|
||||
#Pass through if it's not the account op
|
||||
return undef unless ($form->get("op") eq "account");
|
||||
|
||||
my $output = undef;
|
||||
my $module = $form->get("module");
|
||||
my $method = $form->get("do");
|
||||
my $uid = $form->get("uid");
|
||||
|
||||
my $module = $form->get("module") || $session->config->get("profileModuleIdentifier");
|
||||
my $instance = __PACKAGE__->createInstance($session,$module);
|
||||
|
||||
#Let the content handler handle trapping errors
|
||||
my $output = $instance->callMethod($method,[],$uid);
|
||||
return undef unless (defined $output);
|
||||
|
||||
return $instance->displayContent($output);
|
||||
|
||||
my $configs = $session->config->get("account");
|
||||
my $config = __PACKAGE__->getAccountConfig($session,$module,$configs);
|
||||
|
||||
if (defined $config) {
|
||||
#Visitor cannot do anything to the profile.
|
||||
return $session->privilege->insufficient if($session->user->isVisitor);
|
||||
|
||||
#Create Pluggin Object
|
||||
#Don't eval this as pluggable will croak and we want WebGUI::URL::Content to handle the exception
|
||||
my $pluggin = WebGUI::Pluggable::instanciate($config->{className}, "new", [ $session ] );
|
||||
|
||||
#Check to make sure pluggin is a subclass of WebGUI::Account
|
||||
unless($pluggin->isa('WebGUI::Account')) {
|
||||
my $plugginType = ref $pluggin;
|
||||
WebGUI::Error::InvalidObject->throw(
|
||||
expected => 'WebGUI::Account',
|
||||
got => $plugginType,
|
||||
error => '$plugginType is not a subclass of WebGUI::Accout'
|
||||
);
|
||||
}
|
||||
|
||||
#Check to see if the user has permission to see what they are calling
|
||||
return $session->privilege->insufficient unless ($pluggin->canView);
|
||||
|
||||
#Process the method call
|
||||
my $method = $form->get("do") || "view";
|
||||
$method = "www_".$method;
|
||||
|
||||
if($pluggin->can($method)) {
|
||||
$output = $pluggin->$method;
|
||||
}
|
||||
else {
|
||||
WebGUI::Error::MethodNotFound->throw(
|
||||
error => "Couldn't call non-existant method $method",
|
||||
method => $method
|
||||
);
|
||||
}
|
||||
|
||||
#Wrap content returned from method call into the layout
|
||||
my $var = {};
|
||||
$var->{content} = $output;
|
||||
|
||||
# Get fieldsets for avaiable account methods in the order they exist in the config file
|
||||
my @pluggins = ();
|
||||
foreach my $account (@{$configs}) {
|
||||
#Instantiate the pluggin
|
||||
#Use the currently instantiated pluggin if we are checking this pluggin
|
||||
my $instance = undef;
|
||||
if($account->{identifier} eq $module) {
|
||||
$instance = $pluggin;
|
||||
}
|
||||
else {
|
||||
$instance = eval { WebGUI::Pluggable::instanciate($account->{className}, "new", [ $session ] ) };
|
||||
if (my $e = WebGUI::Error->caught) {
|
||||
$session->log->warn("Couldn't instantiate Account Pluggin ".$account->{className}." ... skipping");
|
||||
next;
|
||||
}
|
||||
elsif(!$pluggin->isa('WebGUI::Account')) {
|
||||
$session->log->warn((ref $instance)." is not a subclass of WebGUI::Account ... skipping");
|
||||
next;
|
||||
}
|
||||
}
|
||||
#Skip this module if the user can't view this
|
||||
next unless ($instance->canView);
|
||||
|
||||
#Push the tab variables onto the template
|
||||
my %hash = %{$account};
|
||||
my $identifier = $account->{identifier};
|
||||
$hash{'is_'.$identifier} = "true";
|
||||
$hash{'url' } = $instance->getUrl("module=$identifier",1);
|
||||
$hash{'isActive' } = "true" if($identifier eq $module);
|
||||
WebGUI::Macro::process(\$hash{'title'});
|
||||
push(@pluggins,\%hash);
|
||||
}
|
||||
$var->{'account_loop'} = \@pluggins;
|
||||
|
||||
my $layoutId = $pluggin->getLayoutTemplateId;
|
||||
#Process the layout template
|
||||
$output = $pluggin->processTemplate($var,$layoutId);
|
||||
#Wrap the layout in the user style
|
||||
$output = $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -174,11 +174,6 @@ deleting the file if it was specified.
|
|||
sub getValue {
|
||||
my $self = shift;
|
||||
my $value = $self->get("value");
|
||||
my $log = $self->session->log;
|
||||
$log->warn("file is: ".$self->session->form->get($self->get("name")."_file"));
|
||||
$log->warn("value is: ".$value);
|
||||
$log->warn("action is: ".$self->session->form->param($self->privateName('action')));
|
||||
|
||||
my $storage = WebGUI::Storage->get($self->session,$value);
|
||||
if (defined $storage) {
|
||||
foreach my $file (@{$storage->getFiles}) {
|
||||
|
|
@ -200,8 +195,6 @@ sub getValue {
|
|||
}
|
||||
$storage->addFileFromFormPost($self->get("name")."_file",1000);
|
||||
my @files = @{ $storage->getFiles };
|
||||
$log->warn("storageId: ".$storage->getId);
|
||||
$log->warn("number of files: ".scalar(@files));
|
||||
if (scalar(@files) < 1) {
|
||||
$storage->delete;
|
||||
return undef;
|
||||
|
|
@ -212,7 +205,6 @@ sub getValue {
|
|||
return $id;
|
||||
}
|
||||
}
|
||||
$log->warn("returning: ".$value);
|
||||
return $value;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,6 +149,61 @@ sub getAllPendingAddRequests {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getNextInvitation ( invitation )
|
||||
|
||||
Returns the invitation that was sent to the user just after the invitation passed in.
|
||||
|
||||
=cut
|
||||
|
||||
sub getNextInvitation {
|
||||
my $self = shift;
|
||||
my $invitation = shift;
|
||||
|
||||
my $sql = q{
|
||||
select
|
||||
*
|
||||
from
|
||||
friendInvitations
|
||||
where
|
||||
friendId = ?
|
||||
and dateSent > ?
|
||||
order by dateSent asc
|
||||
limit 1
|
||||
};
|
||||
my $bindvars = [$self->user->userId,$invitation->{dateSent}];
|
||||
return $self->session->db->quickHashRef($sql,$bindvars);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getPreviousInvitation ( invitation )
|
||||
|
||||
Returns the invitation that was sent to the user just before the invitation passed in.
|
||||
|
||||
=cut
|
||||
|
||||
sub getPreviousInvitation {
|
||||
my $self = shift;
|
||||
my $invitation = shift;
|
||||
|
||||
my $sql = q{
|
||||
select
|
||||
*
|
||||
from
|
||||
friendInvitations
|
||||
where
|
||||
friendId = ?
|
||||
and dateSent < ?
|
||||
order by dateSent desc
|
||||
limit 1
|
||||
};
|
||||
my $bindvars = [$self->user->userId,$invitation->{dateSent}];
|
||||
return $self->session->db->quickHashRef($sql,$bindvars);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 isFriend ( userId )
|
||||
|
|
@ -193,7 +248,7 @@ sub isInvited {
|
|||
inviterId = ?
|
||||
and friendId = ?
|
||||
},
|
||||
[$session->user->userId,$userId]);
|
||||
[$self->user->userId,$userId]);
|
||||
|
||||
return $isInvited;
|
||||
}
|
||||
|
|
@ -268,12 +323,19 @@ The user to invite to be a friend.
|
|||
|
||||
The message to lure them to accept.
|
||||
|
||||
=head inviteUrl
|
||||
|
||||
The url to view the friend request
|
||||
|
||||
=cut
|
||||
|
||||
sub sendAddRequest {
|
||||
my $self = shift;
|
||||
my $userId = shift;
|
||||
my $comments = shift;
|
||||
my $self = shift;
|
||||
my $userId = shift;
|
||||
my $comments = shift;
|
||||
my $url = $self->session->url;
|
||||
my $inviteUrl = shift || $url->append($url->getSiteURL,'op=account');
|
||||
|
||||
my $i18n = WebGUI::International->new($self->session, "Friends");
|
||||
|
||||
# No sneaky attack paths...
|
||||
|
|
@ -281,7 +343,9 @@ sub sendAddRequest {
|
|||
|
||||
# Create the invitation url.
|
||||
my $inviteId = $self->session->id->generate();
|
||||
my $inviteUrl = $self->session->url->append($self->session->url->getSiteURL, 'op=friendRequest;inviteId='.$inviteId);
|
||||
|
||||
$inviteUrl = $url->append($inviteUrl,'inviteId='.$inviteId);
|
||||
|
||||
# Build the message
|
||||
my $messageText = sprintf $i18n->get("invitation approval email"), $self->user->getWholeName, $self->session->url->getSiteURL, $comments, $inviteUrl;
|
||||
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ sub getMessage {
|
|||
|
||||
=head2 getNextMessage ( message [, userId] )
|
||||
|
||||
Returns the next message for the user
|
||||
Returns the message that was send after the message passed in for the user
|
||||
|
||||
=head3 message
|
||||
|
||||
|
|
@ -167,15 +167,15 @@ The WebGUI::User object of the user to retrieve the message for. Defaults to th
|
|||
=cut
|
||||
|
||||
sub getNextMessage {
|
||||
my $self = shift;
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $message = shift;
|
||||
my $user = shift || $session->user;
|
||||
|
||||
my $sql = $self->getMessageSql($user,{
|
||||
whereClause => "ibox.dateStamp < ".$message->get("dateStamp"),
|
||||
|
||||
my $sql = $self->getMessageSql($user,{
|
||||
whereClause => "ibox.dateStamp > ".$message->get("dateStamp"),
|
||||
sortBy => "ibox.dateStamp",
|
||||
sortDir => "desc",
|
||||
sortDir => "asc",
|
||||
limit => 1
|
||||
});
|
||||
|
||||
|
|
@ -188,7 +188,7 @@ sub getNextMessage {
|
|||
|
||||
=head2 getPreviousMessage ( message [, userId] )
|
||||
|
||||
Returns the previous message for the user
|
||||
Returns the message that was sent before the message passed in for the user
|
||||
|
||||
=head3 message
|
||||
|
||||
|
|
@ -205,11 +205,11 @@ sub getPreviousMessage {
|
|||
my $session = $self->session;
|
||||
my $message = shift;
|
||||
my $user = shift || $session->user;
|
||||
|
||||
my $sql = $self->getMessageSql($user,{
|
||||
whereClause => "ibox.dateStamp > ".$message->get("dateStamp"),
|
||||
|
||||
my $sql = $self->getMessageSql($user,{
|
||||
whereClause => "ibox.dateStamp < ".$message->get("dateStamp"),
|
||||
sortBy => "ibox.dateStamp",
|
||||
sortDir => "asc",
|
||||
sortDir => "desc",
|
||||
limit => 1
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -378,9 +378,12 @@ The id of the user that completed this task. Defaults to the current user.
|
|||
sub setCompleted {
|
||||
my $self = shift;
|
||||
my $userId = shift || $self->session->user->userId;
|
||||
$self->{_properties}{status} = "completed";
|
||||
$self->{_properties}{status} = "completed";
|
||||
$self->{_properties}{completedBy} = $userId;
|
||||
$self->{_properties}{completedOn} = time();
|
||||
$self->{_inbox}{status} = "completed";
|
||||
$self->{_inbox}{completedBy} = $userId;
|
||||
$self->{_inbox}{completedOn} = time();
|
||||
$self->session->db->setRow("inbox","messageId",$self->{_inbox});
|
||||
#Completed messages should also be marked read
|
||||
$self->setRead($userId);
|
||||
|
|
@ -498,7 +501,12 @@ sub setStatus {
|
|||
$self->setReplied($userId);
|
||||
}
|
||||
|
||||
$self->{_properties}{status} = ( $status ne "pending") ? "active" : "pending";
|
||||
#Only let completed stuff go back to pending
|
||||
if ( $status eq "pending" && $self->{_properties}{status} eq "completed") {
|
||||
$self->{_properties}{status} = "pending";
|
||||
$self->{_inbox}{status} = "pending"
|
||||
}
|
||||
|
||||
$self->session->db->setRow("inbox","messageId",$self->{_inbox});
|
||||
return undef;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,10 @@ the asset and simply return the url of the first file it finds
|
|||
If id is passed in and the isStorageId flag is set, you may pass in filename
|
||||
to specify the name of the file you'd like returned.
|
||||
|
||||
head3 isImage
|
||||
|
||||
If id is passed in and the isImage flag is set, the first image will be returned
|
||||
|
||||
=cut
|
||||
|
||||
sub process {
|
||||
|
|
@ -60,11 +64,18 @@ sub process {
|
|||
my $id = shift;
|
||||
my $isStorageId = shift;
|
||||
my $filename = shift;
|
||||
my $isImage = shift;
|
||||
my $i18n = WebGUI::International->new($session, 'Macro_FileUrl');
|
||||
|
||||
#Handle storageId case
|
||||
if($isStorageId && $id) {
|
||||
my $store = WebGUI::Storage->get($session,$id);
|
||||
my $store = undef;
|
||||
if($isImage) {
|
||||
$store = WebGUI::Storage::Image->get($session,$id);
|
||||
}
|
||||
else {
|
||||
$store = WebGUI::Storage->get($session,$id);
|
||||
}
|
||||
$filename = $store->getFiles->[0] unless ($filename);
|
||||
return "" unless ($filename);
|
||||
return $store->getUrl($filename);
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ sub _createURL {
|
|||
my $session = shift;
|
||||
my $text = shift;
|
||||
my $class = shift;
|
||||
my $url = '<a href="'.$session->url->page("op=viewInbox").'"';
|
||||
my $url = '<a href="'.$session->url->page("op=account;module=inbox").'"';
|
||||
$url .= ' class="'.$class.'"' if($class);
|
||||
$url .= '>'.$text.'</a>';
|
||||
return $url;
|
||||
|
|
|
|||
|
|
@ -18,19 +18,34 @@ Package WebGUI::Macro::User
|
|||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Macro for displaying information from the current User's profile.
|
||||
Macro for displaying information from the a User's profile.
|
||||
|
||||
=head2 process( field )
|
||||
=head2 process( field [, userId] )
|
||||
|
||||
process takes a single parameter, the name of a field in the current user's User Profile from
|
||||
the data stored in $session . If the field does not exist, undef is returned.
|
||||
This macro tries to return the profile field passed in for the user
|
||||
passed in. If not user is passed in, the current user in session
|
||||
will be used.
|
||||
|
||||
=head3 field
|
||||
|
||||
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub process {
|
||||
my $session = shift;
|
||||
return $session->user->profileField(shift);
|
||||
my $session = shift;
|
||||
my $field = shift;
|
||||
my $userId = shift;
|
||||
|
||||
return undef unless ($field);
|
||||
|
||||
my $user = ($userId)
|
||||
? WebGUI::User->new($session,$userId)
|
||||
: $session->user
|
||||
;
|
||||
|
||||
return $user->profileField($field);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -135,20 +135,14 @@ sub getOperations {
|
|||
'viewInbox' => 'Inbox',
|
||||
'viewInboxMessage' => 'Inbox',
|
||||
'sendPrivateMessage' => 'Inbox',
|
||||
'sendPrivateMessageSave' => 'Inbox',
|
||||
'deletePrivateMessage' => 'Inbox',
|
||||
|
||||
'inviteUser' => 'Invite',
|
||||
'inviteUserSave' => 'Invite',
|
||||
'acceptInvite' => 'Invite',
|
||||
|
||||
'addFriend' => 'Friends',
|
||||
'addFriendSave' => 'Friends',
|
||||
'friendRequest' => 'Friends',
|
||||
'friendRequestSave' => 'Friends',
|
||||
'manageFriends' => 'Friends',
|
||||
'removeFriends' => 'Friends',
|
||||
'sendMessageToFriends' => 'Friends',
|
||||
|
||||
'copyLDAPLink' => 'LDAPLink',
|
||||
'deleteLDAPLink' => 'LDAPLink',
|
||||
|
|
@ -159,7 +153,6 @@ sub getOperations {
|
|||
'viewLoginHistory' => 'LoginHistory',
|
||||
|
||||
'editProfile' => 'Profile',
|
||||
'editProfileSave' => 'Profile',
|
||||
'viewProfile' => 'Profile',
|
||||
|
||||
'deleteProfileCategory' => 'ProfileSettings',
|
||||
|
|
|
|||
|
|
@ -25,373 +25,53 @@ Package WebGUI::Operation::Friends
|
|||
|
||||
Operation handler for handling the friends network.
|
||||
|
||||
DEPRECATED - Do not use this package in new code.
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_addFriend ( )
|
||||
|
||||
Form for inviting a user to become your friend.
|
||||
DEPRECATED - See WebGUI::Account::Friends::sendFriendsRequest
|
||||
|
||||
=cut
|
||||
|
||||
sub www_addFriend {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
my $friendId = $session->form->get('userId');
|
||||
my $protoFriend = WebGUI::User->new($session, $friendId);
|
||||
|
||||
my $i18n = WebGUI::International->new($session, 'Friends');
|
||||
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
if($friends->isFriend($friendId)) {
|
||||
my $returnToProfile = sprintf($i18n->get('add to friends profile'),$protoFriend->getFirstName);
|
||||
my $backUrl = $session->url->append($session->url->getRequestedUrl, 'op=viewProfile;uid='.$friendId);
|
||||
return $session->style->userStyle(
|
||||
sprintf($i18n->get("error user is already friend"),$backUrl,$returnToProfile)
|
||||
);
|
||||
}
|
||||
elsif($friends->isInvited($friendId)) {
|
||||
my $returnToProfile = sprintf($i18n->get('add to friends profile'),$protoFriend->getFirstName);
|
||||
my $backUrl = $session->url->append($session->url->getRequestedUrl, 'op=viewProfile;uid='.$friendId);
|
||||
return $session->style->userStyle(
|
||||
sprintf($i18n->get("error user is already invited"),$backUrl,$returnToProfile)
|
||||
);
|
||||
}
|
||||
|
||||
# Check for non-existant user id.
|
||||
if ((!$protoFriend->username) || (!$protoFriend->profileField('ableToBeFriend'))) {
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('add to friends'),
|
||||
$i18n->get('does not want to be a friend'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
my $output = join '',
|
||||
sprintf("<h1>%s</h1>\n", $i18n->get('add to friends')),
|
||||
'<p>',
|
||||
sprintf($i18n->get('add to friends description'),
|
||||
$protoFriend->getWholeName),
|
||||
'</p>',
|
||||
WebGUI::Form::formHeader($session),
|
||||
WebGUI::Form::hidden($session,
|
||||
{
|
||||
name => 'op',
|
||||
value => 'addFriendSave',
|
||||
}
|
||||
),
|
||||
WebGUI::Form::hidden($session,
|
||||
{
|
||||
name => 'userId',
|
||||
value => $friendId,
|
||||
}
|
||||
),
|
||||
WebGUI::Form::textarea($session,
|
||||
{
|
||||
name => 'comments',
|
||||
value => sprintf($i18n->get('default friend comments'), $protoFriend->getFirstName, $session->user->getFirstName),
|
||||
}
|
||||
),
|
||||
WebGUI::Form::Submit($session,
|
||||
{
|
||||
value => $i18n->get('add')
|
||||
}
|
||||
),
|
||||
WebGUI::Form::Button($session,
|
||||
{
|
||||
value => $i18n->get('cancel', 'WebGUI'),
|
||||
extras => q|onclick="history.go(-1);" class="backwardButton"|,
|
||||
}
|
||||
),
|
||||
WebGUI::Form::formFooter($session),
|
||||
;
|
||||
return $session->style->userStyle($output);
|
||||
my $uid = $session->form->process("userId");
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"friends");
|
||||
return $instance->displayContent($instance->callMethod("sendFriendsRequest",[],$uid));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_addFriendSave ( )
|
||||
|
||||
Post process the form, check for required fields, handle inviting users who are already
|
||||
members (determined by email address) and send the email.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_addFriendSave {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $friendId = $session->form->get('userId');
|
||||
my $protoFriend = WebGUI::User->new($session, $friendId);
|
||||
my $i18n = WebGUI::International->new($session, 'Friends');
|
||||
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
if($friends->isFriend($friendId) || $friends->isInvited($friendId)) {
|
||||
return www_addFriend($session);
|
||||
}
|
||||
|
||||
# Check for non-existant user id.
|
||||
if ((!$protoFriend->username) || (!$protoFriend->profileField('ableToBeFriend'))) {
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('add to friends'),
|
||||
$i18n->get('does not want to be a friend'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
$friends->sendAddRequest($friendId, $session->form->get('comments'));
|
||||
|
||||
# display result
|
||||
my $output = sprintf(
|
||||
q!<h1>%s</h1><p>%s</p><p><a href="%s">%s</a></p><p><a href="%s">%s</a></p>!,
|
||||
$i18n->get('add to friends'),
|
||||
sprintf($i18n->get('add to friends confirmation'), $protoFriend->getWholeName),
|
||||
$session->url->append($session->url->getRequestedUrl, 'op=viewProfile;uid='.$friendId),
|
||||
sprintf($i18n->get('add to friends profile'), $protoFriend->getFirstName),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI'),
|
||||
);
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_friendRequest ( )
|
||||
|
||||
Form for the friend to accept or deny the request.
|
||||
DEPRECATED - See WebGUI::Account::Inbox::viewInvitation
|
||||
|
||||
=cut
|
||||
|
||||
sub www_friendRequest {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $i18n = WebGUI::International->new($session, 'Friends');
|
||||
|
||||
my $inviteId = $session->form->get('inviteId');
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
|
||||
my $invitation = $friends->getAddRequest($inviteId);
|
||||
|
||||
##Invalid invite ID
|
||||
unless (exists $invitation->{friendId}) { ##No userId corresponds to the inviteId
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('invalid invite code'),
|
||||
$i18n->get('invalid invite code message'),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
##Already a friend (check friendId already in the group)
|
||||
if ($friends->isFriend($invitation->{inviterId})) {
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('invalid invite code'),
|
||||
$i18n->get('already a friend'),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
##Someone else's invite (check friendId vs current userId).
|
||||
if ($session->user->userId ne $invitation->{friendId}) { ##This isn't your invitation, dude.
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('invalid invite code'),
|
||||
$i18n->get('not the right user'),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
##Everything looks good. Make the form!
|
||||
my $inviter = WebGUI::User->new($session, $invitation->{inviterId});
|
||||
my $output = join '',
|
||||
sprintf("<h1>%s</h1>\n", $i18n->get('friend request')),
|
||||
'<p>',
|
||||
sprintf($i18n->get('friend request description'),
|
||||
$inviter->getWholeName),
|
||||
'</p>',
|
||||
WebGUI::Form::formHeader($session),
|
||||
WebGUI::Form::hidden($session,
|
||||
{
|
||||
name => 'op',
|
||||
value => 'friendRequestSave',
|
||||
}
|
||||
),
|
||||
WebGUI::Form::hidden($session,
|
||||
{
|
||||
name => 'inviteId',
|
||||
value => $inviteId,
|
||||
}
|
||||
),
|
||||
WebGUI::Form::textarea($session,
|
||||
{
|
||||
name => 'comments',
|
||||
value => $invitation->{comments},
|
||||
extras => 'disabled=disabled',
|
||||
}
|
||||
),
|
||||
WebGUI::Form::Submit($session, ##Approve
|
||||
{
|
||||
name => 'doWhat',
|
||||
value => $i18n->get('572', 'WebGUI'),
|
||||
}
|
||||
),
|
||||
WebGUI::Form::Submit($session, ##Deny
|
||||
{
|
||||
name => 'doWhat',
|
||||
value => $i18n->get('574', 'WebGUI'),
|
||||
}
|
||||
),
|
||||
WebGUI::Form::formFooter($session),
|
||||
;
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_friendRequestSave ( )
|
||||
|
||||
Handle form data from the friend's response to the invitation
|
||||
|
||||
=cut
|
||||
|
||||
sub www_friendRequestSave {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $i18n = WebGUI::International->new($session, 'Friends');
|
||||
my $doWhat = $session->form->get('doWhat');
|
||||
my $inviteId = $session->form->get('inviteId');
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
my $invite = $friends->getAddRequest($inviteId);
|
||||
my $inviter = WebGUI::User->new($session, $invite->{inviterId});
|
||||
##Invalid invite ID
|
||||
if (!$invite->{inviterId}) { ##No userId corresponds to the inviteId
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('invalid invite code'),
|
||||
$i18n->get('invalid invite code message'),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
##If deny, change the status of the request to denied.
|
||||
if ($doWhat ne $i18n->get('572', 'WebGUI')) { ##request denied
|
||||
$friends->rejectAddRequest($inviteId);
|
||||
##Return screen that says they denied the request.
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('friend request'),
|
||||
sprintf($i18n->get('you have not been added'), $inviter->getWholeName),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
}
|
||||
|
||||
##If accepted,
|
||||
# set the status to accepted.
|
||||
$friends->approveAddRequest($inviteId);
|
||||
|
||||
# Return screen that says they accepted the request.
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('friend request'),
|
||||
sprintf($i18n->get('you have been added'), $inviter->getWholeName),
|
||||
$session->url->page("op=viewInbox"),
|
||||
$i18n->get('354', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"inbox");
|
||||
return $instance->displayContent($instance->callMethod("viewInvitation"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageFriends ( )
|
||||
|
||||
Display the list of friends and allow the user to remove friends or
|
||||
send private messages to a subset of them.
|
||||
|
||||
DEPRECATED - See WebGUI::Account::Friends::view
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageFriends {
|
||||
my $session = shift;
|
||||
my ($user, $url, $style) = $session->quick(qw(user url style));
|
||||
return $session->privilege->insufficient() unless ($user->isRegistered);
|
||||
my $i18n = WebGUI::International->new($session, 'Friends');
|
||||
|
||||
##You have no friends!
|
||||
my $friends = $user->friends->getUsers;
|
||||
unless (scalar(@{$friends})) {
|
||||
my $output = sprintf qq!<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('my friends'),
|
||||
$i18n->get('no friends'),
|
||||
$url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $style->userStyle($output);
|
||||
}
|
||||
|
||||
# show the friend manager
|
||||
my %var = (
|
||||
"account.options" => WebGUI::Operation::Shared::accountOptions($session),
|
||||
formHeader => WebGUI::Form::formHeader($session)
|
||||
. WebGUI::Form::hidden($session, { name => 'op', value => 'sendMessageToFriends', }),
|
||||
removeFriendButton => WebGUI::Form::button($session, { value => $i18n->get('remove'), extras => q|onclick="confirmRemovalOfFriends(form);"|, }),
|
||||
subjectForm => WebGUI::Form::text($session, { name=>"subject" }),
|
||||
sendMessageButton => WebGUI::Form::Submit($session, { value => $i18n->get('send message'), }),
|
||||
messageForm => WebGUI::Form::textarea($session, { name=>"message" }),
|
||||
formFooter => WebGUI::Form::formFooter($session),
|
||||
);
|
||||
foreach my $userId (@{ $friends}) {
|
||||
my $friend = WebGUI::User->new($session, $userId);
|
||||
push(@{$var{friends}}, {
|
||||
name => $friend->getWholeName,
|
||||
profileUrl => $url->append($url->getRequestedUrl, 'op=viewProfile;uid='.$userId),
|
||||
status => ($friend->isOnline ? $i18n->get('online') : $i18n->get('offline')),
|
||||
checkboxForm => WebGUI::Form::checkbox($session, { name => 'userId', value => $userId, }),
|
||||
});
|
||||
}
|
||||
my $template = WebGUI::Asset->new(
|
||||
$session,
|
||||
$session->setting->get("manageFriendsTemplateId"),
|
||||
"WebGUI::Asset::Template",
|
||||
);
|
||||
return $style->userStyle($template->process(\%var));
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_removeFriends ()
|
||||
|
||||
Removes friends from the current user's friends list.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_removeFriends {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
my @users = $session->form->param("userId");
|
||||
WebGUI::Friends->new($session)->delete(\@users);
|
||||
return www_manageFriends($session);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendMessageToFriends ()
|
||||
|
||||
Sends a message to selected friends.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendMessageToFriends {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
my @users = $session->form->param("userId");
|
||||
my $friends = WebGUI::Friends->new($session);
|
||||
$friends->sendMessage($session->form->process("subject", "text"), $session->form->process("message","textarea"), \@users);
|
||||
return www_manageFriends($session);
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"friends");
|
||||
return $instance->displayContent($instance->callMethod("view"));
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -79,18 +79,23 @@ sub _appendPrivateMessageForm {
|
|||
name=>"message",
|
||||
value=>$form->get("message") || "",
|
||||
});
|
||||
|
||||
my $messageId = $form->get("messageId") || $message->getId;
|
||||
|
||||
my $messageId = "";
|
||||
if($form->get("messageId")) {
|
||||
$messageId = $form->get("messageId");
|
||||
}
|
||||
elsif(defined $message) {
|
||||
$messageId = $message->getId;
|
||||
}
|
||||
|
||||
$vars->{'form_header' } = WebGUI::Form::formHeader($session,{
|
||||
action => $session->url->page->("op=account;module=inbox;do=sendMessageSave;messageId=$messageId;userId=$userTo->userId"),
|
||||
action => $session->url->page("op=account;module=inbox;do=sendMessageSave;messageId=$messageId;userId=".$userTo->userId),
|
||||
extras => q{name="messageForm"}
|
||||
});
|
||||
|
||||
$vars->{ submit_button } = WebGUI::Form::submit($session,{});
|
||||
$vars->{ submit_label } = $i18n->get("private message submit label");
|
||||
$vars->{ form_footer } = WebGUI::Form::formFooter($session, {});
|
||||
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -99,263 +104,42 @@ sub _appendPrivateMessageForm {
|
|||
|
||||
returns a hashref with internationalized values for message status.
|
||||
|
||||
DEPRECATED: Use WebGUI::Inbox::Message->statusCodes
|
||||
DEPRECATED: Do not use this method in new code. Use WebGUI::Inbox::Message->statusCodes
|
||||
|
||||
=cut
|
||||
|
||||
sub _status {
|
||||
my $session = shift;
|
||||
return WebGUI::Inbox::Message->statusCodes($session);
|
||||
#my $i18n = WebGUI::International->new($session);
|
||||
#return {
|
||||
# "pending" =>$i18n->get(552),
|
||||
# "completed" =>$i18n->get(350),
|
||||
# "unread" =>$i18n->get("private message status unread"),
|
||||
# "read" =>$i18n->get("private message status read"),
|
||||
# "replied" =>$i18n->get("private message status replied"),
|
||||
#};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendPrivateMessage ( )
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Inbox
|
||||
|
||||
Form for sending private messages
|
||||
DEPRECATED: See WebGUI::Account::Inbox::sendMessage
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendPrivateMessage {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $form = $session->form;
|
||||
my $user = $session->user;
|
||||
my $style = $session->style;
|
||||
my $settings = $session->setting;
|
||||
|
||||
my $templateId = $settings->get("sendPrivateMessageTemplateId");
|
||||
my $uid = $form->get("uid");
|
||||
my $userTo = WebGUI::User->new($session,$uid);
|
||||
|
||||
my $vars = {};
|
||||
$vars->{title} = $i18n->get('private message title');
|
||||
|
||||
if($uid eq "") {
|
||||
$vars->{'error_msg'} = $i18n->get('private message no user');
|
||||
return $style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
|
||||
}
|
||||
elsif($uid eq $user->userId) {
|
||||
$vars->{'error_msg'} = $i18n->get('private message no self error');
|
||||
return $style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
}
|
||||
|
||||
unless($userTo->acceptsPrivateMessages($user->userId)) {
|
||||
$vars->{'error_msg'} = $i18n->get('private message blocked error');
|
||||
return $style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
}
|
||||
|
||||
_appendPrivateMessageForm($session,$vars,$userTo);
|
||||
|
||||
$vars->{ accountOptions } = WebGUI::Operation::Shared::accountOptions($session);
|
||||
|
||||
return $style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
my $session = shift;
|
||||
my $uid = $session->form->get("uid");
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"inbox");
|
||||
return $instance->displayContent($instance->callMethod("sendMessage",[],$uid));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_sendPrivateMessageSave ( )
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Inbox
|
||||
|
||||
Post process the form, check for required fields, handle inviting users who are already
|
||||
members (determined by email address) and send the email.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_sendPrivateMessageSave {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $form = $session->form;
|
||||
my $user = $session->user;
|
||||
my $style = $session->style;
|
||||
|
||||
my $uid = $form->get("uid");
|
||||
my $userTo = WebGUI::User->new($session,$uid);
|
||||
|
||||
if($uid eq "") {
|
||||
my $output = sprintf qq|<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>|,
|
||||
$i18n->get('private message error'),
|
||||
$i18n->get('private message no user'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $style->userStyle($output);
|
||||
} elsif($uid eq $user->userId) {
|
||||
my $output = sprintf qq|<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>|,
|
||||
$i18n->get('private message error'),
|
||||
$i18n->get('private message no self error'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $style->userStyle($output);
|
||||
}
|
||||
|
||||
my $isReply = 0;
|
||||
if($form->get("messageId")) {
|
||||
my $message = WebGUI::Inbox->new($session)->getMessage($form->get("messageId"));
|
||||
# Ensure that the user sending the message was sent by the user being replied to
|
||||
# and that the user reponding is the user the message was sent to
|
||||
if($message->get("sentBy") eq $uid && $message->get("userId") eq $user->userId) {
|
||||
$isReply = 1;
|
||||
$message->setStatus("replied");
|
||||
}
|
||||
}
|
||||
|
||||
my $message = WebGUI::Inbox->new($session)->addPrivateMessage({
|
||||
message => $form->get("message"),
|
||||
subject => $form->get("subject"),
|
||||
userId => $uid,
|
||||
status => 'unread',
|
||||
sentBy => $user->userId
|
||||
},$isReply);
|
||||
|
||||
unless(defined $message) {
|
||||
my $output = sprintf qq|<h1>%s</h1>\n<p>%s</p><a href="%s">%s</a>|,
|
||||
$i18n->get('private message error'),
|
||||
$i18n->get('private message blocked error'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $style->userStyle($output);
|
||||
}
|
||||
|
||||
|
||||
my $output = sprintf qq!<p>%s</p><a href="%s">%s</a>!,
|
||||
$i18n->get('private message sent'),
|
||||
$session->url->getBackToSiteURL(),
|
||||
$i18n->get('493', 'WebGUI');
|
||||
return $session->style->userStyle($output);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewInbox ( )
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Inbox
|
||||
|
||||
Templated display all messages for the current user.
|
||||
DEPRECATED: See WebGUI::Account::Inbox::view
|
||||
|
||||
=cut
|
||||
|
||||
sub www_viewInbox {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $vars = {};
|
||||
my @msg = ();
|
||||
my $rpp = 50;
|
||||
|
||||
#Deal with page number
|
||||
my $pn = $session->form->get("pn") || 1;
|
||||
my $pn_url = "";
|
||||
$pn_url = ";pn=$pn";
|
||||
|
||||
#Deal with sort order
|
||||
my $sortBy = $session->form->get("sortBy");
|
||||
my $sort_url = "";
|
||||
$sort_url = ";sortBy=$sortBy" if($sortBy);
|
||||
|
||||
#Cache the base url
|
||||
my $inboxUrl = $session->url->page('op=viewInbox');
|
||||
|
||||
$vars->{ title } = $i18n->get(159);
|
||||
$vars->{'subject_label' } = $i18n->get(351);
|
||||
$vars->{'subject_url' } = $inboxUrl.$pn_url.";sortBy=subject";
|
||||
|
||||
$vars->{'status_label' } = $i18n->get(553);
|
||||
$vars->{'status_url' } = $inboxUrl.$pn_url.";sortBy=status";
|
||||
|
||||
$vars->{'from_label' } = $i18n->get("private message from label");
|
||||
$vars->{'from_url' } = $inboxUrl.$pn_url.";sortBy=sentBy";
|
||||
|
||||
$vars->{'dateStamp_label'} = $i18n->get(352);
|
||||
$vars->{'dateStamp_url' } = $inboxUrl.$pn_url.";sortBy=dateStamp";
|
||||
|
||||
my $adminUser = WebGUI::User->new($session,3)->username;
|
||||
my $messages = WebGUI::Inbox->new($session)->getMessagesForUser($session->user,$rpp,$pn,$sortBy);
|
||||
foreach my $message (@$messages) {
|
||||
next if($message->get('status') eq 'deleted');
|
||||
|
||||
my $hash = {};
|
||||
$hash->{ message_url } = $session->url->page('op=viewInboxMessage;messageId='.$message->getId);
|
||||
$hash->{ subject } = $message->get("subject");
|
||||
$hash->{ status_class } = $message->get("status");
|
||||
$hash->{ status } = _status($session)->{$hash->{ status_class }};
|
||||
|
||||
#Get the username of the person who sent the message
|
||||
my $sentBy = $message->get("sentBy");
|
||||
#Assume it's the admin user for speed purposes - admin user is cached above the loop
|
||||
my $from = $adminUser;
|
||||
#If it wasn't the admin user, get the username of the person who sent it
|
||||
if($sentBy ne "3") {
|
||||
my $u = WebGUI::User->new($session,$sentBy);
|
||||
#If the user that sent the message is valid, get the username
|
||||
#This case would happen if the user was deleted after sending a private message
|
||||
if($u->isRegistered) {
|
||||
$from = $u->username;
|
||||
}
|
||||
}
|
||||
|
||||
$hash->{ from } = $from;
|
||||
$hash->{ dateStamp } = $session->datetime->epochToHuman($message->get("dateStamp"));
|
||||
push(@msg,$hash);
|
||||
}
|
||||
my $msgCount = scalar(@{$messages});
|
||||
|
||||
#Pagination has to exist on every page regardless if there are more messages or not.
|
||||
if($pn > 1 ) {
|
||||
$vars->{'prev_url' } = $inboxUrl.';pn='.($pn-1).$sort_url;
|
||||
$vars->{'prev_label' } = $i18n->get("private message prev label");
|
||||
}
|
||||
if (scalar(@msg) >= $rpp) {
|
||||
$vars->{'next_url' } = $inboxUrl.';pn='.($pn+1).$sort_url;
|
||||
$vars->{'next_label' } = $i18n->get("private message next label");
|
||||
}
|
||||
|
||||
$vars->{'messages' } = \@msg;
|
||||
$vars->{'noresults' } = $i18n->get(353) unless ($msgCount > 0);
|
||||
$vars->{'accountOptions'} = WebGUI::Operation::Shared::accountOptions($session);
|
||||
my $templateId = $session->setting->get("viewInboxTemplateId");
|
||||
return $session->style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_deletePrivateMessage ( )
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Inbox
|
||||
|
||||
Mark a private message in the inbox as deleted.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_deletePrivateMessage {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
#Get the message
|
||||
my $message = WebGUI::Inbox->new($session)->getMessage($session->form->param("messageId"));
|
||||
if(defined $message) {
|
||||
# set the message status to 'deleted'
|
||||
$message->setStatus("deleted");
|
||||
}
|
||||
return www_viewInbox($session);
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"inbox");
|
||||
return $instance->displayContent($instance->callMethod("view"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -370,68 +154,8 @@ Templated display of a single message for the user.
|
|||
|
||||
sub www_viewInboxMessage {
|
||||
my $session = shift;
|
||||
return $session->privilege->insufficient() unless ($session->user->isRegistered);
|
||||
|
||||
#Get the message
|
||||
my $message = WebGUI::Inbox->new($session)->getMessage($session->form->param("messageId"));
|
||||
|
||||
#Make sure users can only read their own messages
|
||||
my $userId = $message->get("userId");
|
||||
my $groupId = $message->get("groupId");
|
||||
return $session->privilege->insufficient() unless (
|
||||
$session->user->userId eq $userId
|
||||
|| (defined $groupId && $session->user->isInGroup($groupId))
|
||||
);
|
||||
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $vars = {};
|
||||
$vars->{ title } = $i18n->get("private message reply title");
|
||||
$vars->{ from_label } = $i18n->get("private message from label");
|
||||
$vars->{ date_label } = $i18n->get("private message date label");
|
||||
|
||||
|
||||
if (defined $message) {
|
||||
my $origStatus = $message->get("status");
|
||||
$message->setStatus("read") if($origStatus eq "unread");
|
||||
$vars->{'message_subject' } = $message->get("subject");
|
||||
$vars->{'dateStamp'} =$session->datetime->epochToHuman($message->get("dateStamp"));
|
||||
$vars->{'status' } = _status($session)->{$message->get("status")};
|
||||
$vars->{ message } = $message->get("message");
|
||||
$vars->{ delete_text } = $i18n->get("private message delete text");
|
||||
$vars->{ delete_url } = '?op=deletePrivateMessage;messageId=' . $message->getId;
|
||||
unless ($vars->{message} =~ /\<a/ig) {
|
||||
$vars->{message} =~ s/(http\S*)/\<a href=\"$1\"\>$1\<\/a\>/g;
|
||||
}
|
||||
unless ($vars->{message} =~ /\<div/ig || $vars->{message} =~ /\<br/ig || $vars->{message} =~ /\<p/ig) {
|
||||
$vars->{message} =~ s/\n/\<br \/\>\n/g;
|
||||
}
|
||||
|
||||
#Get the username of the person who sent the message
|
||||
my $sentBy = $message->get("sentBy");
|
||||
#Assume it's the admin user who sent the message
|
||||
my $from = WebGUI::User->new($session,3)->username;
|
||||
#If the user actually exists, get the username
|
||||
if($sentBy ne "1" && $sentBy ne "3") {
|
||||
$from = WebGUI::User->new($session,$sentBy)->username;
|
||||
}
|
||||
|
||||
$vars->{ from } = $from;
|
||||
|
||||
|
||||
#If the person didn't send the message to themselves (for admin only) and the user still exsists (check visitor case)
|
||||
if($sentBy ne $session->user->userId &&
|
||||
$sentBy ne "1" &&
|
||||
$origStatus ne "pending" &&
|
||||
$origStatus ne "completed") {
|
||||
my $u = WebGUI::User->new($session,$sentBy);
|
||||
$vars->{'canReply'} = "true";
|
||||
_appendPrivateMessageForm($session,$vars,$u,$message);
|
||||
}
|
||||
|
||||
}
|
||||
$vars->{'accountOptions'} = WebGUI::Operation::Shared::accountOptions($session);
|
||||
my $templateId = $session->setting->get("viewInboxMessageTemplateId");
|
||||
return $session->style->userStyle(WebGUI::Asset::Template->new($session,$templateId)->process($vars));
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"inbox");
|
||||
return $instance->displayContent($instance->callMethod("viewMessage"));
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ use WebGUI::ProfileField;
|
|||
use WebGUI::ProfileCategory;
|
||||
use WebGUI::Operation::Shared;
|
||||
use WebGUI::Operation::Friends;
|
||||
use WebGUI::Account::Profile;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
|
@ -92,12 +93,9 @@ email address to check for duplication
|
|||
sub isDuplicateEmail {
|
||||
my $session = shift;
|
||||
my $email = shift;
|
||||
my ($otherEmail)
|
||||
= $session->db->quickArray(
|
||||
'select count(*) from userProfileData where email = ? and userId <> ?',
|
||||
[$email, $session->user->userId]
|
||||
);
|
||||
return ($otherEmail > 0);
|
||||
|
||||
my $field = WebGUI::ProfileField->new($session,'email');
|
||||
return $field->isDuplicate($email);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -107,7 +105,7 @@ sub isDuplicateEmail {
|
|||
Saves profile data to a user's profile. Does not validate any of the data.
|
||||
|
||||
DEPRECATED - This method is deprecated, and should not be used in new code. Use
|
||||
the saveProfileFields method from WebGUI::Account::Profile instead
|
||||
the updateProfileFields method in WebGUI::User
|
||||
|
||||
=head3 session
|
||||
|
||||
|
|
@ -127,8 +125,7 @@ sub saveProfileFields {
|
|||
my $session = shift;
|
||||
my $u = shift;
|
||||
my $profile = shift;
|
||||
|
||||
WebGUI::Account::Profile->saveProfileFields($session,$u,$profile);
|
||||
$u->updateProfileFields($profile);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -139,7 +136,7 @@ Validates profile data from the session form variables. Returns processed data,
|
|||
and errors.
|
||||
|
||||
DEPRECATED - This method is deprecated, and should not be used in new code. Use
|
||||
the validateProfileData method from WebGUI::Account::Profile instead
|
||||
the validateProfileDataFromForm method from WebGUI::User instead
|
||||
|
||||
There are two levels of validation:
|
||||
|
||||
|
|
@ -159,48 +156,38 @@ warning if it is a duplicate.
|
|||
=cut
|
||||
|
||||
sub validateProfileData {
|
||||
my $session = shift;
|
||||
my $opts = shift || {};
|
||||
my $regOnly = $opts->{regOnly};
|
||||
my %data = ();
|
||||
my $error = "";
|
||||
my $warning = "";
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $fields = $regOnly ? WebGUI::ProfileField->getRegistrationFields($session)
|
||||
my $session = shift;
|
||||
my $opts = shift || {};
|
||||
my $regOnly = $opts->{regOnly};
|
||||
|
||||
my $error = "";
|
||||
my $warning = "";
|
||||
my $fields = $regOnly ? WebGUI::ProfileField->getRegistrationFields($session)
|
||||
: WebGUI::ProfileField->getEditableFields($session);
|
||||
foreach my $field (@$fields) {
|
||||
my $fieldValue = $field->formProcess;
|
||||
if (ref $fieldValue eq "ARRAY") {
|
||||
$data{$field->getId} = $$fieldValue[0];
|
||||
} else {
|
||||
$data{$field->getId} = $fieldValue;
|
||||
}
|
||||
if ($field->isRequired && $data{$field->getId} eq "") {
|
||||
$error .= '<li>'.$field->getLabel.' '.$i18n->get(451).'</li>';
|
||||
} elsif ($field->getId eq "email" && isDuplicateEmail($session,$data{$field->getId}) && WebGUI::ProfileField->new($session, "email")->isRequired() ) {
|
||||
$warning .= '<li>'.$i18n->get(1072).'</li>';
|
||||
}
|
||||
if ($field->getId eq "language" && $fieldValue ne "") {
|
||||
unless (exists $i18n->getLanguages()->{$fieldValue}) {
|
||||
$error .= '<li>'.$field->getLabel.' '.$i18n->get(451).'</li>';
|
||||
}
|
||||
}
|
||||
}
|
||||
return (\%data, $error, $warning);
|
||||
|
||||
my $retHash = $session->user->validateProfileDataFromForm($fields);
|
||||
|
||||
use Data::Dumper;
|
||||
print Dumper($retHash)."\n\n\n";
|
||||
|
||||
my $warnings = $retHash->{warnings};
|
||||
my $errors = $retHash->{errors};
|
||||
|
||||
my $format = "<li>%s</li>";
|
||||
my $warning = "";
|
||||
my $error = "";
|
||||
map { $warning .= sprintf($format,$_) }@{$warnings};
|
||||
map { $error .= sprintf($format,$_) }@{$errors};
|
||||
|
||||
return ($retHash->{profile},$error,$warning);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_editProfile ( session )
|
||||
|
||||
Provide a form where user profile data can be entered or edited. The subroutine
|
||||
makes a large set of template variables which are passed to a template for presentation
|
||||
and styling. The default template is PBtmpl0000000000000051 and is not user
|
||||
selectable.
|
||||
|
||||
DEPRECATED - Use WebGUI::Account::Profile::www_edit
|
||||
|
||||
Calls www_editProfileSave on submission.
|
||||
DEPRECATED - This method is deprecated, and should not be used in new code.
|
||||
Use WebGUI::Account::Profile::www_edit
|
||||
|
||||
=head3 session
|
||||
|
||||
|
|
@ -209,91 +196,18 @@ A reference to the current session.
|
|||
=cut
|
||||
|
||||
sub www_editProfile {
|
||||
my $session = shift;
|
||||
return WebGUI::Operation::Auth::www_auth($session,"init") if($session->user->isVisitor);
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $vars = {};
|
||||
$vars->{displayTitle} .= $i18n->get(338);
|
||||
$vars->{'profile.message'} = $_[0] if($_[0]);
|
||||
$vars->{'profile.form.header'} = "\n\n".WebGUI::Form::formHeader($session,{});
|
||||
$vars->{'profile.form.footer'} = WebGUI::Form::formFooter($session,);
|
||||
|
||||
$vars->{'profile.form.hidden'} = WebGUI::Form::hidden($session,{"name"=>"op","value"=>"editProfileSave"});
|
||||
$vars->{'profile.form.hidden'} .= WebGUI::Form::hidden($session,{"name"=>"uid","value"=>$session->user->userId});
|
||||
my @array = ();
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
next unless $category->isEditable;
|
||||
my @temp = ();
|
||||
foreach my $field (@{$category->getFields}) {
|
||||
next unless ($field->isEditable);
|
||||
next if $field->getId =~ /contentPositions/;
|
||||
push(@temp, {
|
||||
'profile.form.element' => $field->formField,
|
||||
'profile.form.element.label' => $field->getLabel,
|
||||
'profile.form.element.subtext' => $field->isRequired ? "*" : undef,
|
||||
'profile.form.element.extras' => $field->getExtras,
|
||||
});
|
||||
}
|
||||
push(@array, {
|
||||
'profile.form.category' => $category->getLabel,
|
||||
'profile.form.category.loop' => \@temp
|
||||
});
|
||||
}
|
||||
$vars->{'profile.form.elements'} = \@array;
|
||||
$vars->{'profile.form.submit'} = WebGUI::Form::submit($session,{});
|
||||
$vars->{'profile.form.cancel'} = WebGUI::Form::button($session,{
|
||||
value => $i18n->get('cancel'),
|
||||
extras=>q|onclick="history.go(-1);" class="backwardButton"|,
|
||||
});
|
||||
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions($session);
|
||||
return $session->style->userStyle(WebGUI::Asset::Template->new($session, $session->setting->get('editUserProfileTemplate'))->process($vars));
|
||||
my $session = shift;
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"profile");
|
||||
return $instance->displayContent($instance->callMethod("edit"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_editProfileSave ( session )
|
||||
|
||||
Validates all data submitted by www_editProfile. If errors or warnings are present,
|
||||
they are concatenated and sent back to www_editProfile for display and to let the user
|
||||
correct their mistakes.
|
||||
|
||||
If no mistakes are present, saves the data to the user's profile, updates the session user
|
||||
object.
|
||||
|
||||
Returns the user to WebGUI::Operation::Auth::www_auth when done.
|
||||
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Profile::www_editSave
|
||||
|
||||
=head3 session
|
||||
|
||||
A reference to the current session.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_editProfileSave {
|
||||
my $session = shift;
|
||||
my ($profile, $error, $warning);
|
||||
return WebGUI::Operation::Auth::www_auth($session, "init") if ($session->user->isVisitor);
|
||||
($profile, $error, $warning) = validateProfileData($session);
|
||||
$error .= $warning;
|
||||
return www_editProfile($session, '<ul>'.$error.'</ul>') if($error ne "");
|
||||
foreach my $fieldName (keys %{$profile}) {
|
||||
$session->user->profileField($fieldName,$profile->{$fieldName});
|
||||
}
|
||||
return WebGUI::Operation::Auth::www_auth($session);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_viewProfile ( session )
|
||||
|
||||
View the profile data for a user by the userId specified by the form variable C<uid>.
|
||||
Validates that the user requesting the profile data is allowed to see it.
|
||||
Similarly to www_editProfile, this method is templated. The default template
|
||||
is PBtmpl0000000000000052. The template is not user selectable.
|
||||
|
||||
DEPRECATED: Use WebGUI::Account::Profile::www_view
|
||||
DEPRECATED: This method is deprecated, and should not be used in new code.
|
||||
Use WebGUI::Account::Profile::www_view
|
||||
|
||||
=head3 session
|
||||
|
||||
|
|
@ -302,46 +216,10 @@ A reference to the current session.
|
|||
=cut
|
||||
|
||||
sub www_viewProfile {
|
||||
my $session = shift;
|
||||
my $u = WebGUI::User->new($session,$session->form->process("uid"));
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my $vars = {};
|
||||
$vars->{displayTitle} = $i18n->get(347).' '.$u->username;
|
||||
|
||||
return $session->privilege->notMember() if($u->username eq "");
|
||||
|
||||
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);
|
||||
|
||||
my @array = ();
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
next unless ($category->get("visible"));
|
||||
push(@array, {'profile.category' => $category->getLabel});
|
||||
foreach my $field (@{$category->getFields}) {
|
||||
next unless ($field->get("visible"));
|
||||
next if ($field->get("fieldName") eq "email" && !$u->profileField("publicEmail"));
|
||||
push @array, {
|
||||
'profile.label' => $field->getLabel,
|
||||
'profile.value' => $field->formField(undef,2,$u),
|
||||
'profile.extras' => $field->getExtras,
|
||||
};
|
||||
}
|
||||
}
|
||||
$vars->{'profile.elements'} = \@array;
|
||||
|
||||
if ($session->user->userId eq $session->form->process("uid")) {
|
||||
$vars->{'profile.accountOptions'} = WebGUI::Operation::Shared::accountOptions($session);
|
||||
}
|
||||
else {
|
||||
## TODO: Make this more legible code, maybe refactor into a method
|
||||
push @{$vars->{'profile.accountOptions'}}, {
|
||||
'options.display' => '<a href="'.$session->url->page("op=addFriend;userId=".$u->userId).'">'.$i18n->get('add to friends list', 'Friends').'</a>',
|
||||
}, {
|
||||
'options.display' => '<a href="'.$session->url->page('op=sendPrivateMessage;uid='.$session->form->process("uid")).'">'.$i18n->get('send private message').'</a>',
|
||||
};
|
||||
}
|
||||
|
||||
return $session->style->userStyle(WebGUI::Asset::Template->new($session, $session->setting->get('viewUserProfileTemplate'))->process($vars));
|
||||
my $session = shift;
|
||||
my $uid = $session->form->process("uid");
|
||||
my $instance = WebGUI::Content::Account->createInstance($session,"profile");
|
||||
return $instance->displayContent($instance->callMethod("view",[],$uid));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -226,34 +226,7 @@ sub definition {
|
|||
namespace=>"AdminConsole",
|
||||
defaultValue=>$setting->get("AdminConsoleTemplate")
|
||||
});
|
||||
# messaging settings
|
||||
push(@fields, {
|
||||
tab=>"messaging",
|
||||
fieldType=>"template",
|
||||
name=>"viewInboxTemplateId",
|
||||
label=>$i18n->get('view inbox template'),
|
||||
hoverHelp=>$i18n->get('view inbox template description'),
|
||||
namespace=>"Inbox",
|
||||
defaultValue=>$setting->get("viewInboxTemplateId"),
|
||||
});
|
||||
push(@fields, {
|
||||
tab=>"messaging",
|
||||
fieldType=>"template",
|
||||
name=>"viewInboxMessageTemplateId",
|
||||
label=>$i18n->get('view inbox message template'),
|
||||
hoverHelp=>$i18n->get('view inbox message template description'),
|
||||
namespace=>"Inbox/Message",
|
||||
defaultValue=>$setting->get("viewInboxMessageTemplateId"),
|
||||
});
|
||||
push(@fields, {
|
||||
tab=>"messaging",
|
||||
fieldType=>"template",
|
||||
name=>"sendPrivateMessageTemplateId",
|
||||
label=>$i18n->get('send private message template'),
|
||||
hoverHelp=>$i18n->get('send private message template description'),
|
||||
namespace=>"Inbox/SendPrivateMessage",
|
||||
defaultValue=>$setting->get("sendPrivateMessageTemplateId"),
|
||||
});
|
||||
# messaging settings
|
||||
push(@fields, {
|
||||
tab=>"messaging",
|
||||
fieldType=>"text",
|
||||
|
|
@ -444,15 +417,6 @@ sub definition {
|
|||
namespace=>"userInvite/Email",
|
||||
defaultValue=>$setting->get("userInvitationsEmailTemplateId"),
|
||||
});
|
||||
push(@fields, {
|
||||
tab => "user",
|
||||
fieldType => "template",
|
||||
defaultValue => "managefriends_________",
|
||||
namespace => "friends/manage",
|
||||
name => "manageFriendsTemplateId",
|
||||
label => $i18n->get("manage friends template", "Friends"),
|
||||
hoverHelp => $i18n->get("manage friends template help", "Friends"),
|
||||
});
|
||||
push @fields, {
|
||||
tab => "user",
|
||||
name => "showMessageOnLogin",
|
||||
|
|
@ -485,24 +449,7 @@ sub definition {
|
|||
hoverHelp => $i18n->get( 'showMessageOnLoginBody description' ),
|
||||
defaultValue => $setting->get('showMessageOnLoginBody'),
|
||||
};
|
||||
push @fields, {
|
||||
tab => "user",
|
||||
name => 'viewUserProfileTemplate',
|
||||
fieldType => 'template',
|
||||
namespace => 'Operation/Profile/View',
|
||||
label => $i18n->get( 'user profile view template' ),
|
||||
hoverHelp => $i18n->get( 'user profile view template description' ),
|
||||
defaultValue => $setting->get('viewUserProfileTemplate'),
|
||||
};
|
||||
push @fields, {
|
||||
tab => "user",
|
||||
name => 'editUserProfileTemplate',
|
||||
fieldType => 'template',
|
||||
namespace => 'Operation/Profile/Edit',
|
||||
label => $i18n->get( 'user profile edit template' ),
|
||||
hoverHelp => $i18n->get( 'user profile edit template description' ),
|
||||
defaultValue => $setting->get('editUserProfileTemplate'),
|
||||
};
|
||||
|
||||
# auth settings
|
||||
my $options;
|
||||
foreach (@{$session->config->get("authMethods")}) {
|
||||
|
|
@ -638,14 +585,18 @@ sub www_editSettings {
|
|||
#Create the instance
|
||||
my $className = $account->{className};
|
||||
my $instance = eval { WebGUI::Pluggable::instanciate($className,"new",[ $session ]) };
|
||||
|
||||
if ( my $e = WebGUI::Error->caught ) {
|
||||
if ( $@ ) {
|
||||
$session->log->warn("Could not instantiate account pluggin $className...skipping");
|
||||
next;
|
||||
}
|
||||
|
||||
#Get the content of the settings form from the instance
|
||||
my $settingsForm = $instance->editSettingsForm;
|
||||
my $settingsForm = eval { $instance->editSettingsForm };
|
||||
if( $@ ) {
|
||||
$session->log->warn("Error calling editSettingsForm in $className...skipping : ".$@);
|
||||
next;
|
||||
}
|
||||
|
||||
#If editUserSettingsForm is empty, skip it
|
||||
next if $settingsForm eq "";
|
||||
|
||||
|
|
@ -710,7 +661,12 @@ sub www_saveSettings {
|
|||
next;
|
||||
}
|
||||
#Save the settings
|
||||
$instance->editSettingsFormSave;
|
||||
eval { $instance->editSettingsFormSave };
|
||||
|
||||
if( my $e = WebGUI::Error->caught ) {
|
||||
$session->log->warn("Error calling editSettingsFormSave in $className...skipping : ".$e->error);
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,71 +27,18 @@ Shared routines for WebGUI Operations.
|
|||
|
||||
TODO: DOCUMENT ME
|
||||
|
||||
DEPRECATED - USE WebGUI::Account::User->appendAccountOptions
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub accountOptions {
|
||||
my $session = shift;
|
||||
my $i18n = WebGUI::International->new($session);
|
||||
my @array;
|
||||
my $op = $session->form->process("op");
|
||||
|
||||
if ($session->user->isInGroup(12)) {
|
||||
my %hash;
|
||||
if ($session->var->isAdminOn) {
|
||||
$hash{'options.display'} .= '<a href="'.$session->url->page('op=switchOffAdmin').'">'.$i18n->get(12).'</a>';
|
||||
} else {
|
||||
$hash{'options.display'} .= '<a href="'.$session->url->page('op=switchOnAdmin').'">'.$i18n->get(63).'</a>';
|
||||
}
|
||||
push(@array,\%hash);
|
||||
}
|
||||
unless ($op eq "displayAccount"){
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->page('op=auth;method=init').'">'.$i18n->get(342).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
unless ($op eq "editProfile"){
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->page('op=editProfile').'">'.$i18n->get(341).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
unless ($op eq "viewProfile"){
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->page('op=viewProfile;uid='.$session->user->userId).'">'.$i18n->get(343).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
unless ($op eq "viewInbox"){
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->page('op=viewInbox').'">'.$i18n->get(354).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
push(@array, {'options.display' => '<a href="'.$session->url->page('shop=transaction;method=manageMy').'">'.$i18n->get('my purchases', 'Shop').'</a>'});
|
||||
|
||||
if ($session->setting->get('userInvitationsEnabled')) {
|
||||
push @array, {
|
||||
'options.display' => sprintf('<a href=%s>%s</a>', $session->url->page('op=inviteUser'), $i18n->get('invite a friend')),
|
||||
};
|
||||
}
|
||||
unless ($op eq "manageFriends") {
|
||||
push @array, {
|
||||
'options.display' => sprintf('<a href=%s>%s</a>', $session->url->page('op=manageFriends'), $i18n->get('see my friends', 'Friends')),
|
||||
};
|
||||
}
|
||||
my %logout;
|
||||
$logout{'options.display'} = '<a href="'.$session->url->page('op=auth;method=logout').'">'.$i18n->get(64).'</a>';
|
||||
push(@array,\%logout);
|
||||
if ($session->setting->get("selfDeactivation") && !$session->user->isAdmin){
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->page('op=auth;method=deactivateAccount').'">'.$i18n->get(65).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
{ ##Return to site link
|
||||
my %hash;
|
||||
$hash{'options.display'} = '<a href="'.$session->url->getBackToSiteURL.'">'.$i18n->get(493).'</a>';
|
||||
push(@array,\%hash);
|
||||
}
|
||||
|
||||
return \@array;
|
||||
my $vars = {};
|
||||
WebGUI::Account->appendAccountLinks($session,$vars);
|
||||
|
||||
return $vars->{'account.options'};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -484,15 +484,13 @@ value to check for duplicates against
|
|||
=cut
|
||||
|
||||
sub isDuplicate {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
my $fieldId = $self->getId;
|
||||
my $value = shift;
|
||||
|
||||
my $sql = qq{select count(*) from userProfileData where $fieldId = ? and userId <> ?};
|
||||
my ($duplicate) = $session->db->quickArray($sql,[$value, $session->user->userId]);
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $fieldId = $self->getId;
|
||||
my $value = shift;
|
||||
|
||||
my $sql = qq{select count(*) from userProfileData where $fieldId = ? and userId <> ?};
|
||||
my $duplicate = $session->db->quickScalar($sql,[$value, $session->user->userId]);
|
||||
return ($duplicate > 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -519,7 +519,12 @@ Displays the default thank you page.
|
|||
sub thankYou {
|
||||
my ($self) = @_;
|
||||
my $i18n = WebGUI::International->new($self->session,'Shop');
|
||||
return $self->www_viewMy($self->session, $self, $i18n->get('thank you message'));
|
||||
#return $self->www_viewMy($self->session, $self, $i18n->get('thank you message'));
|
||||
|
||||
#Otherwise wrap the template into the account layout
|
||||
my $args = [$self,$i18n->get('thank you message')];
|
||||
my $instance = WebGUI::Content::Account->createInstance($self->session,"shop");
|
||||
return $instance->displayContent($instance->callMethod("viewTransaction",$args));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -821,6 +826,8 @@ STOP
|
|||
Display a quick list of the user's transactions, with links for more detailed information about
|
||||
each one in the list.
|
||||
|
||||
DEPRECATED - Use WebGUI::Account::Shop
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageMy {
|
||||
|
|
|
|||
|
|
@ -226,13 +226,10 @@ sub addFileFromFormPost {
|
|||
require Apache2::Upload;
|
||||
my $filename;
|
||||
my $attachmentCount = 1;
|
||||
$self->session->log->warn("trying to uplaod: ".$formVariableName);
|
||||
foreach my $upload ($self->session->request->upload($formVariableName)) {
|
||||
$self->session->errorHandler->warn("Trying to get " . $upload->filename);
|
||||
$self->session->errorHandler->info("Trying to get " . $upload->filename);
|
||||
return $filename if $attachmentCount > $attachmentLimit;
|
||||
my $tempFilename = $upload->filename();
|
||||
$self->session->log->warn("templFile is: ".$tempFilename);
|
||||
|
||||
next unless $tempFilename;
|
||||
next unless $upload->size > 0;
|
||||
next if ($upload->size > 1024 * $self->session->setting->get("maxAttachmentSize"));
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ sub acceptsPrivateMessages {
|
|||
return $sentBy->isInGroup($friendsGroup->getId);
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -145,16 +145,19 @@ WebGUI::User object to check to see if user will accept requests from.
|
|||
=cut
|
||||
|
||||
sub acceptsFriendsRequests {
|
||||
my $self = shift;
|
||||
my $user = shift;
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $user = shift;
|
||||
|
||||
return 0 unless ($user && ref $user eq "WebGUI::User"); #Sanity checks
|
||||
return 0 if($self->isVisitor); #Visitors can't have friends
|
||||
return 0 if($self->userId eq $user->userId); #Can't be your own friend (why would you want to be?)
|
||||
|
||||
my $friends = WebGUI::Friends->new($self->session,$self);
|
||||
return 0 if ($friends->isFriend($user->userId)); #Already a friend
|
||||
return 0 if ($friends->isInvited($user->userId)); #Invitation already sent
|
||||
my $me = WebGUI::Friends->new($session,$self);
|
||||
my $friend = WebGUI::Friends->new($session,$user);
|
||||
|
||||
return 0 if ($me->isFriend($user->userId)); #Already a friend
|
||||
return 0 if ($me->isInvited($user->userId) || $friend->isInvited($self->userId)); #Invitation sent by one or the other
|
||||
|
||||
return $self->profileField('ableToBeFriend'); #Return profile setting
|
||||
}
|
||||
|
|
@ -802,6 +805,37 @@ sub profileField {
|
|||
return $self->{_profile}{$fieldName};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 profileIsViewable ( user )
|
||||
|
||||
Returns whether or not the user's profile is viewable by the user passed in
|
||||
|
||||
=head3 user
|
||||
|
||||
The user to test to see if the profile is viewable for. If no user is passed in,
|
||||
the current user in session will be tested
|
||||
|
||||
=cut
|
||||
|
||||
sub profileIsViewable {
|
||||
my $self = shift;
|
||||
my $user = shift || $self->session->user;
|
||||
my $userId = $user->userId;
|
||||
|
||||
return 0 if ($self->isVisitor); #Can't view visitor's profile
|
||||
return 1 if ($self->userId eq $userId); #Users can always view their own profile
|
||||
|
||||
my $profileSetting = $self->profileField('publicProfile');
|
||||
|
||||
return 0 if ($profileSetting eq "none");
|
||||
return 1 if ($profileSetting eq "all");
|
||||
|
||||
my $friendsGroup = $self->friends;
|
||||
return $user->isInGroup($friendsGroup->getId);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 referringAffiliate ( [ value ] )
|
||||
|
|
@ -890,6 +924,28 @@ sub uncache {
|
|||
$cache->delete;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 updateProfileFields ( profile )
|
||||
|
||||
Saves profile data to a user's profile. Does not validate any of the data.
|
||||
|
||||
=head3 profile
|
||||
|
||||
Hash ref of key/value pairs of data in the users's profile to update.
|
||||
|
||||
=cut
|
||||
|
||||
sub updateProfileFields {
|
||||
my $self = shift;
|
||||
my $profile = shift;
|
||||
|
||||
foreach my $fieldName (keys %{$profile}) {
|
||||
$self->profileField($fieldName,$profile->{$fieldName});
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 username ( [ value ] )
|
||||
|
|
@ -929,6 +985,78 @@ sub userId {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 validateProfileDataFromForm ( fields )
|
||||
|
||||
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 fields
|
||||
|
||||
An array reference of profile field Ids to validate.
|
||||
|
||||
=cut
|
||||
|
||||
sub validateProfileDataFromForm {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $fields = shift;
|
||||
|
||||
my $i18n = my $i18n = WebGUI::International->new($session);
|
||||
|
||||
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);
|
||||
push (@{$errors}, sprintf($i18n->get("language not available 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(1072));
|
||||
push(@{$warnFields},$fieldId);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
profile => $data,
|
||||
errors => $errors,
|
||||
warnings => $warnings,
|
||||
errorCategory => $errorCat,
|
||||
errorFields => $errorFields,
|
||||
warningFields => $warnFields,
|
||||
};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 validUserId ( userId )
|
||||
|
||||
Returns true if the userId exists in the users table.
|
||||
|
|
|
|||
|
|
@ -9,6 +9,244 @@ our $I18N = {
|
|||
context => q{Tab label for Friends Account pluggin},
|
||||
},
|
||||
|
||||
'friends style template label' => {
|
||||
message => q|Style Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends style template hoverHelp' => {
|
||||
message => q|Select a style template from the list to enclose friends in.|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends layout template label' => {
|
||||
message => q|Edit Layout Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends layout template hoverHelp' => {
|
||||
message => q{Choose a layout from the list to display the various account pluggins that are editable by the current user as well as the contents of the one currently chosen},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends view template label' => {
|
||||
message => q|View Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends view template hoverHelp' => {
|
||||
message => q|Choose the main template for viewing friends|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends edit template label' => {
|
||||
message => q|Edit Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends edit template hoverHelp' => {
|
||||
message => q|Choose the template for editing friends|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends send request template label' => {
|
||||
message => q|Send Friends Request Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends send request template hoverHelp' => {
|
||||
message => q|Choose the template for sending friends requests|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends confirm template label' => {
|
||||
message => q|Friends Request Confirm Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends confirm template hoverHelp' => {
|
||||
message => q|Choose the template for displaying confirmation that a friends request has been sent|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends remove confirm template label' => {
|
||||
message => q|Friends Removal Confirm Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends remove confirm template hoverHelp' => {
|
||||
message => q|Choose the template for displaying confirmation that you wish to remove a friend|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends error template label' => {
|
||||
message => q|Error Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'friends error template hoverHelp' => {
|
||||
message => q|Choose the template for displaying friends errors|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'back label' => {
|
||||
message => q{back to site},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'edit my profile' => {
|
||||
message => q|edit my profile|,
|
||||
lastUpdated => 1068703399
|
||||
},
|
||||
|
||||
'profile as others label' => {
|
||||
message => q{view my profile as others see it},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'error label' => {
|
||||
message => q{Error},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'member since' => {
|
||||
message => q{Member Since },
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'add to network label' => {
|
||||
message => q{Add to Network},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'back to profile label' => {
|
||||
message => q{back to profile},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'adding user message' => {
|
||||
message => q{You are adding <strong>%s</strong> to your network.},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'sending to message' => {
|
||||
message => q{The following message will be sent along with your invitation:},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'default friend comments' => {
|
||||
message => q{%s,
|
||||
I'd like you to be a part of my friends network.
|
||||
|
||||
Thanks,
|
||||
%s},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'send invite button label' => {
|
||||
message => q{Send Invitation},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'cancel button label' => {
|
||||
message => q{Cancel},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'error user is already friend' => {
|
||||
message => q{This user is already a member of your friends network},
|
||||
lastUpdated => 1181493546,
|
||||
},
|
||||
|
||||
'error user is already invited' => {
|
||||
message => q{You have already sent an invitation for this user to join your friends network},
|
||||
lastUpdated => 1181493546,
|
||||
},
|
||||
|
||||
'does not want to be a friend' => {
|
||||
message => q{This user prefers not to be added as a friend.},
|
||||
lastUpdated => 1186264488,
|
||||
},
|
||||
|
||||
'' => {
|
||||
message => q{},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'back to user profile' => {
|
||||
message => q{back to users profile},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'message sent label' => {
|
||||
message => q{Friends Request Sent},
|
||||
lastUpdated => 1181019679,
|
||||
},
|
||||
|
||||
'add to friends confirmation' => {
|
||||
message => q{An email has been sent to %s for your request to be added to your friends network.},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'send private message label' => {
|
||||
message => q{Send Private Message},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'send private message label' => {
|
||||
message => q{Send Private Message},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'remove from friends label' => {
|
||||
message => q{Remove From Friends},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'no friend selected' =>{
|
||||
message => q{You have not selected friend to be removed from your friends list},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'not a friend error' =>{
|
||||
message => q{The user you have selected to remove is not in your friends list.},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'remove confirm label' =>{
|
||||
message => q{Remove Friend Confirmation},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'remove confirm message' =>{
|
||||
message => q{Are you sure you want remove %s from your friends list?},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'remove confirm yes' =>{
|
||||
message => q{yes, remove this user},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'remove confirm no' =>{
|
||||
message => q{no, I made a mistake},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'friend removed' =>{
|
||||
message => q{%s was removed from your friends list},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'no access' =>{
|
||||
message => q{You do not have permission to view this user's friends list},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
'friends is off' =>{
|
||||
message => q{You do not have friends enabled. In order to see this page you must edit your profile and enable the friends setting.},
|
||||
lastUpdated => 1186030776,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -79,13 +79,23 @@ our $I18N = {
|
|||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'invitation error message template label' => {
|
||||
message => q|Inbox Error Message Template|,
|
||||
'invitation confirm message template label' => {
|
||||
message => q|Invitation Confirmation Message Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'invitation error message template hoverHelp' => {
|
||||
message => q|Choose the template for viewing inbox errors|,
|
||||
'invitation confirm message template hoverHelp' => {
|
||||
message => q|Choose the template for viewing invitation confirmations|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'inbox view invitation template label' => {
|
||||
message => q|View Invitation Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'inbox view invitation template hoverHelp' => {
|
||||
message => q|Choose the template for viewing an invitation|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
|
|
@ -279,6 +289,72 @@ our $I18N = {
|
|||
lastUpdated => 1181019679,
|
||||
},
|
||||
|
||||
'error label' => {
|
||||
message => q{Error},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation label' => {
|
||||
message => q{Invitation},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation count' => {
|
||||
message => q{invitations},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation message' => {
|
||||
message => q{%s has invited you to join their friends newtork},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'no invitations' => {
|
||||
message => q{You have no outstanding friends invitations},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'accept button label' => {
|
||||
message => q{Accept},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'deny button label' => {
|
||||
message => q{Deny},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation confirm label' => {
|
||||
message => q{Invitation Notices Sent},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation confirm message' => {
|
||||
message => q{The following users were notified:},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitations back label' => {
|
||||
message => q{back to invitations},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'invitation does not exist' => {
|
||||
message => q{The invitation you are trying to view has already been approved or denied.},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'no access to invitation' => {
|
||||
message => q{You do not have permission to view this invitation.},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'inviter no longer exists' => {
|
||||
message => q{The user who sent this invitation is no longer a member of the site.},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -59,20 +59,16 @@ our $I18N = {
|
|||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'required error' => {
|
||||
message => q|%s is required.|,
|
||||
lastUpdated => 1031514049
|
||||
},
|
||||
'profile error template label' => {
|
||||
message => q|Error Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'language not installed error' => {
|
||||
message => q|%s is not installed. Please select another language|,
|
||||
lastUpdated => 1031514049
|
||||
},
|
||||
'profile error template hoverHelp' => {
|
||||
message => q|Choose the template to use for displaying profile errors to the user|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'email already in use error' => {
|
||||
message => q|The email address is already in use. Please use a different email address.|,
|
||||
lastUpdated => 1068703399
|
||||
},
|
||||
|
||||
'visitor profile restricted' => {
|
||||
message => q|The visitor profile is restricted|,
|
||||
|
|
@ -110,9 +106,56 @@ our $I18N = {
|
|||
},
|
||||
|
||||
'back label' => {
|
||||
message => q{go back},
|
||||
message => q{back to site},
|
||||
lastUpdated => 1119068809
|
||||
}
|
||||
},
|
||||
|
||||
'profile not public error' => {
|
||||
message => q|This user's profile is not public.|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'friends only' => {
|
||||
message => q|Your profile is viewable to Friends|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'private profile' => {
|
||||
message => q|Your profile is Private|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'public profile' => {
|
||||
message => q|Your profile is Public|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'private label' => {
|
||||
message => q|Private|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'public label' => {
|
||||
message => q|Public|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'friends only label' => {
|
||||
message => q|Friends Only|,
|
||||
lastUpdated => 1043881275
|
||||
},
|
||||
|
||||
'error label' => {
|
||||
message => q{Error},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
'back to profile label' => {
|
||||
message => q{back to profile},
|
||||
lastUpdated => 1225724810,
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
40
lib/WebGUI/i18n/English/Account_Shop.pm
Normal file
40
lib/WebGUI/i18n/English/Account_Shop.pm
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
package WebGUI::i18n::English::Account_Shop;
|
||||
use strict;
|
||||
|
||||
our $I18N = {
|
||||
|
||||
'title' => {
|
||||
message => q{Shop},
|
||||
lastUpdated => 1225724810,
|
||||
context => q{Tab label for User Account pluggin},
|
||||
},
|
||||
|
||||
'shop style template label' => {
|
||||
message => q|Style Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'shop style template hoverHelp' => {
|
||||
message => q|Select a style template from the list to enclose the shop tab in.|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'shop layout template label' => {
|
||||
message => q|Layout Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'shop layout template hoverHelp' => {
|
||||
message => q{Choose a layout template in which to enclose the content from the various methods within the shop tab},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'manage purchases label' => {
|
||||
message => q{Manage Purchases},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
@ -4,11 +4,36 @@ use strict;
|
|||
our $I18N = {
|
||||
|
||||
'title' => {
|
||||
message => q{User},
|
||||
message => q{Account},
|
||||
lastUpdated => 1225724810,
|
||||
context => q{Tab label for User Account pluggin},
|
||||
},
|
||||
|
||||
'user style template label' => {
|
||||
message => q|Style Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'user style template hoverHelp' => {
|
||||
message => q|Select a style template from the list to enclose the account tab in.|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'user layout template label' => {
|
||||
message => q|Layout Template|,
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'user layout template hoverHelp' => {
|
||||
message => q{Choose a layout template in which to enclose the content from the various methods within the account tab},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
'templates in auth method message' => {
|
||||
message => q{<strong>The display templates for this module can be found in the settings <br />for the authentications modules you have installed on your site. </strong>},
|
||||
lastUpdated => 1119068809
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -254,6 +254,16 @@ our $I18N = {
|
|||
lastUpdated => 1031514049
|
||||
},
|
||||
|
||||
'required error' => {
|
||||
message => q{%s is required.},
|
||||
lastUpdated => 1031514049
|
||||
},
|
||||
|
||||
'language not available error' => {
|
||||
message => q|%s is not available. Please select another language|,
|
||||
lastUpdated => 1031514049
|
||||
},
|
||||
|
||||
'454' => {
|
||||
message => q|Last Updated|,
|
||||
lastUpdated => 1031514049
|
||||
|
|
@ -330,7 +340,7 @@ our $I18N = {
|
|||
},
|
||||
|
||||
'861' => {
|
||||
message => q|Make profile public?|,
|
||||
message => q|Profile Privacy Setting|,
|
||||
lastUpdated => 1043879954
|
||||
},
|
||||
|
||||
|
|
|
|||
724
www/extras/account/account.css
Normal file
724
www/extras/account/account.css
Normal file
|
|
@ -0,0 +1,724 @@
|
|||
|
||||
/* general */
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
padding:0;
|
||||
font: 11px Verdana;
|
||||
}
|
||||
a {
|
||||
cursor: pointer;
|
||||
}
|
||||
button {
|
||||
cursor: pointer;
|
||||
}
|
||||
img {
|
||||
border: none;
|
||||
}
|
||||
.button {
|
||||
float:right;
|
||||
padding-right:10px;
|
||||
}
|
||||
.centered {
|
||||
text-align: center;
|
||||
}
|
||||
.account_message {
|
||||
width: 600px;
|
||||
height: 300px;
|
||||
border: solid #BECEF8 1px;
|
||||
margin-left: 50px;
|
||||
margin-bottom: 20px;
|
||||
overflow:-moz-scrollbars-vertical;
|
||||
overflow-x:hidden;
|
||||
overflow-y:scroll;
|
||||
background-color: white;
|
||||
text-align: left;
|
||||
}
|
||||
.profileMember {
|
||||
text-align:right;
|
||||
margin-right:20px;
|
||||
font-size:9px;
|
||||
}
|
||||
.member {
|
||||
font: 9px Verdana, Arial, Helvetica, sans-serif;
|
||||
color:#000000;
|
||||
text-align:center;
|
||||
}
|
||||
.photostyle {
|
||||
border:solid #9BB4F4 2px;
|
||||
margin-bottom:5px;
|
||||
margin-top:5px
|
||||
}
|
||||
#rightalign {
|
||||
float: right;
|
||||
}
|
||||
/*.send {
|
||||
padding-right: 75px;
|
||||
}*/
|
||||
|
||||
.Profile_registration {
|
||||
|
||||
}
|
||||
.Profile_registration td {
|
||||
font-size:9pt;
|
||||
font-family:arial;
|
||||
}
|
||||
.Profile_registration .tabs a {
|
||||
text-decoration:none;
|
||||
background-color:#FEEBC7;
|
||||
margin-right:10px;
|
||||
padding:0px 10px 1px 10px;
|
||||
color:#FDC55B;
|
||||
font-weight:bold;
|
||||
border:solid #FDBA42 1px;
|
||||
}
|
||||
.Profile_registration .tabs a.active {
|
||||
background:#FDBA42;
|
||||
color:black;
|
||||
}
|
||||
.Profile_registration .header {
|
||||
font-size:10px;
|
||||
font-weight:bold;
|
||||
text-align:left;
|
||||
color:#fff;
|
||||
background-color:#818997;
|
||||
border-top:solid #FE9515 3px;
|
||||
text-align:right;
|
||||
}
|
||||
.Profile_registration .header a {
|
||||
color:white;
|
||||
text-decoration:none;
|
||||
}
|
||||
.Profile_registration .help a {
|
||||
font-weight:bold;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.Profile_registration .inputText {
|
||||
font-size:10px;
|
||||
margin-right:1px;
|
||||
}
|
||||
.Profile_registration .label {
|
||||
font-weight:bold;
|
||||
font-size:9pt;
|
||||
text-align:right;
|
||||
white-space:nowrap;
|
||||
width:1%;
|
||||
}
|
||||
.Profile_registration .labelLeft {
|
||||
font-weight:bold;
|
||||
font-size:9pt;
|
||||
text-align:right;
|
||||
white-space:nowrap;
|
||||
width:1%;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
.Profile_registration .smallLabel {
|
||||
font-size:8px;
|
||||
text-align:center;
|
||||
}
|
||||
.Profile_registration .smallText {
|
||||
font-size:9px;
|
||||
}
|
||||
.Profile_registration .yourselfBG {
|
||||
border:solid #CEDBF8 1px;
|
||||
background-color:#EEF2FD;
|
||||
color:black;
|
||||
padding: 2px;
|
||||
}
|
||||
/*.Profile_registration .yourselfBG a {
|
||||
font-weight:bold;
|
||||
color:#0054ff;
|
||||
text-decoration:none;
|
||||
}*/
|
||||
.Profile_registration .bar {
|
||||
background-color:#DDE6FB;
|
||||
border:solid #BECEF8 1px;
|
||||
text-align:center;
|
||||
color:#0B2259;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.Profile_registration .bar a {
|
||||
color:#0B2259;
|
||||
font-size:10px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/* profile errors */
|
||||
|
||||
#profileErrors {
|
||||
background-color: #ff0000;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.profilefield_required_off {
|
||||
}
|
||||
.profilefield_required {
|
||||
background-color: #ffffbb;
|
||||
}
|
||||
.profilefield_error {
|
||||
background-color: #FF9494;
|
||||
}
|
||||
|
||||
/* bio, addtonetwork, network */
|
||||
|
||||
.bordered {
|
||||
border-bottom: dashed #BECEF8 2px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.friendpic {
|
||||
border: solid #BECEF8 1px;
|
||||
}
|
||||
.invitemsg {
|
||||
width: 600px;
|
||||
height: 150px;
|
||||
}
|
||||
ol.Profile_interests {
|
||||
font-size:15px;
|
||||
font-weight:bold;
|
||||
color:#0B2259;
|
||||
list-style-type:none;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
padding:5px 5px;
|
||||
}
|
||||
ol.Profile_interests li {
|
||||
margin-bottom:15px;
|
||||
}
|
||||
ol.Profile_interests span {
|
||||
font-weight:normal;
|
||||
font-size:12px;
|
||||
color:black;
|
||||
}
|
||||
.pBio {
|
||||
border-bottom:solid #DDE6FB 1px;
|
||||
margin:0px;
|
||||
margin-bottom:5px;
|
||||
padding-bottom:5px;
|
||||
}
|
||||
.pBio div {
|
||||
background-color:#DDE6FB;
|
||||
padding:2px 5px;
|
||||
margin-bottom:2px;
|
||||
}
|
||||
.program {
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
/* edit box */
|
||||
|
||||
.editBox {
|
||||
font-size:9px;
|
||||
font-weight:bold;
|
||||
background:white url(images/edit_box_bg.jpg) no-repeat bottom left;
|
||||
border:solid #8DABF1 2px;
|
||||
padding:5px;
|
||||
width:590px;
|
||||
-moz-box-sizing:border-box;
|
||||
font-family:verdana;
|
||||
z-index:100;
|
||||
position:absolute;
|
||||
top:100px;
|
||||
left:100px;
|
||||
display:block;
|
||||
}
|
||||
.editBox input, .editBox select {
|
||||
font-size:9px;
|
||||
}
|
||||
|
||||
/* inbox */
|
||||
|
||||
.Profile_registration .inboxTitle {
|
||||
background-color:#DDE6FB;
|
||||
border:solid #BECEF8 1px;
|
||||
text-align:center;
|
||||
font-size:10px;
|
||||
font-weight:bold;
|
||||
color:#0B2259;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* inbox threads */
|
||||
|
||||
.evenThread {
|
||||
background-color: #e1e8fb;
|
||||
border-bottom: 1px solid #bfcef9;
|
||||
padding: 4px;
|
||||
text-align:center;
|
||||
}
|
||||
.oddThread {
|
||||
background-color: #eef2fd;
|
||||
border-bottom: 1px solid #bfcef9;
|
||||
padding: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
/* inbox forms */
|
||||
|
||||
.inbox_from {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.inbox_subject {
|
||||
width: 530px;
|
||||
}
|
||||
|
||||
.inbox_messageTo {
|
||||
width: 530px;
|
||||
height: 50px;
|
||||
border: solid #BECEF8 1px;
|
||||
overflow:-moz-scrollbars-vertical;
|
||||
overflow-x:hidden;
|
||||
overflow-y:scroll;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
/* inbox contacts */
|
||||
.datacells {
|
||||
border-bottom: dashed #BECEF8 1px;
|
||||
}
|
||||
.inbox_contactsTbl {
|
||||
font-size:9pt;
|
||||
font-family:arial;
|
||||
background-color:#EEF2FD;
|
||||
}
|
||||
#contacts {
|
||||
height: 275px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* pagination */
|
||||
.Profile_pagination {
|
||||
text-align:right;
|
||||
font-size:10px;
|
||||
}
|
||||
.Profile_pagination a {
|
||||
font-weight:bold;
|
||||
font-size:10px;
|
||||
border:solid #BECEF8 1px;
|
||||
padding:1px 5px;
|
||||
text-decoration:none;
|
||||
background-color:#EEF2FD;
|
||||
}
|
||||
|
||||
.Profile_pagination a:hover {
|
||||
background-color:#FE9515;
|
||||
color:white;
|
||||
}
|
||||
|
||||
.Profile_pagination .prevNext {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.Profile_pagination .prevNext:hover {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.Profile_pagination .active {
|
||||
font-weight:bold;
|
||||
font-size:10px;
|
||||
border:solid #BECEF8 1px;
|
||||
padding:1px 5px;
|
||||
text-decoration:none;
|
||||
background-color:#FE9515;
|
||||
color:white;
|
||||
}
|
||||
|
||||
/* TABS - outer */
|
||||
|
||||
.bottombutton {
|
||||
border: none;
|
||||
float:right;
|
||||
padding-right:2px;
|
||||
padding-top: 2px;
|
||||
position: relative;
|
||||
}
|
||||
.content {
|
||||
padding:10px;
|
||||
|
||||
}
|
||||
.subContent {
|
||||
border: solid #ffa700 6px;
|
||||
}
|
||||
.topbutton {
|
||||
border: none;
|
||||
float:right;
|
||||
clear:both;
|
||||
padding-right:2px;
|
||||
padding-top: 2px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.topTabs,
|
||||
ul.topTabs li {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
list-style-type:none;
|
||||
position:relative;zoom:1;
|
||||
width:auto;
|
||||
|
||||
Xposition:relative;
|
||||
}
|
||||
ul.topTabs li {
|
||||
display:block;
|
||||
float:left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
ul.topTabs li b {
|
||||
display:block;
|
||||
position:relative;
|
||||
top:-1px;
|
||||
border-top:solid #ffa700 1px;
|
||||
background-color: #faee9a;
|
||||
padding:4px 8px;
|
||||
}
|
||||
ul.topTabs a {
|
||||
display:block;
|
||||
color:#ffa700;
|
||||
font-size:12px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-decoration:none;
|
||||
background-color:#faee9a;
|
||||
border-left: solid #ffa700 1px;
|
||||
border-right: solid #ffa700 1px;
|
||||
}
|
||||
ul.topTabs a:hover,
|
||||
ul.topTabs a:hover b,
|
||||
ul.topTabs a.selected,
|
||||
ul.topTabs a.selected b {
|
||||
background-color:#ffa700;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
/* TABS - YUI */
|
||||
|
||||
.cleardiv {
|
||||
clear: both;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.view {
|
||||
border: none;
|
||||
font: bold 10px Verdana;
|
||||
color: #0b2258;
|
||||
text-decoration:none;
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
top:4px;
|
||||
}
|
||||
|
||||
.profile_displayView {
|
||||
-x-system-font:none;
|
||||
border:medium none;
|
||||
color:#0B2258;
|
||||
display:inline;
|
||||
float:right;
|
||||
font-family:Verdana;
|
||||
font-size:10px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:bold;
|
||||
line-height:normal;
|
||||
padding-right:8px;
|
||||
padding-top:3px;
|
||||
}
|
||||
|
||||
.profile_displaySubContent {
|
||||
border: solid #ffa700 6px;
|
||||
border-top: solid #ffa700 18px;
|
||||
}
|
||||
|
||||
/* view profile */
|
||||
|
||||
.profile_fieldLabel {
|
||||
background: #DDE6FB;
|
||||
border: 1px solid white;
|
||||
}
|
||||
.profile_fieldData {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/*
|
||||
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 2.6.0
|
||||
*/
|
||||
/* .yui-navset defaults to .yui-navset-top */
|
||||
.yui-skin-sam .yui-navset .yui-nav,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav { /* protect nested tabviews from other orientations */
|
||||
border:solid #eef2fd; /* color between tab list and content */
|
||||
border-width:0 0 5px;
|
||||
Xposition:relative;
|
||||
zoom:1;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav li,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li {
|
||||
margin:0 0.3em 0 0; /* space between tabs */
|
||||
padding:5px 0 0; /* gecko: make room for overflow */
|
||||
zoom:1;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected {
|
||||
margin:0 0.3em -1px 0; /* for overlap */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav a,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a {
|
||||
background:#9bb4f4; /* tab background */
|
||||
border:solid #eef2fd;
|
||||
border-width:0 1px;
|
||||
color:#eef2fd;
|
||||
position:relative;
|
||||
text-decoration:none;
|
||||
font-size:12px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav a em,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em {
|
||||
border:solid #eef2fd;
|
||||
border-width:1px 0 0;
|
||||
cursor:hand;
|
||||
padding:0.25em .75em;
|
||||
left:0; right: 0; bottom: 0; /* protect from other orientations */
|
||||
top:-1px; /* for 1px rounded corners */
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a,
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a:focus, /* no focus effect for selected */
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a:hover { /* no hover effect for selected */
|
||||
background:#eef2fd; /* selected tab background */
|
||||
color:#0a2359;
|
||||
font-size:12px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-decoration:none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav a:hover,
|
||||
.yui-skin-sam .yui-navset .yui-nav a:focus {
|
||||
background:#eef2fd; /* selected tab background */
|
||||
color:#0a2359;
|
||||
outline:0;
|
||||
font-size:12px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-decoration:none;
|
||||
font-weight: bold;
|
||||
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a,
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a em {
|
||||
border-color:#eef2fd; /* selected tab border color */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-content {
|
||||
background:#edf5ff; /* content background color */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-content,
|
||||
.yui-skin-sam .yui-navset .yui-navset-top .yui-content {
|
||||
border:5px solid #eef2fd; /* content border */
|
||||
padding:0.75em 1em; /* content padding */
|
||||
}
|
||||
|
||||
/* left and right orientations */
|
||||
.yui-skin-sam .yui-navset-left .yui-nav,
|
||||
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,
|
||||
.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav {
|
||||
border-width:0 5px 0 0;
|
||||
Xposition:absolute; /* from tabview-core; have to reiterate for skin-sam due to pos:rel on skin-sam yui-nav */
|
||||
top:0; bottom:0; /* stretch to fill content height */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav {
|
||||
border-width:0 0 0 5px;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav li,
|
||||
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav li,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav li {
|
||||
margin:0 0 0.3em; /* space between tabs */
|
||||
padding:0 0 0 1px; /* gecko: make room for overflow */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-right .yui-nav li {
|
||||
padding:0 1px 0 0; /* gecko: make room for overflow */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav .selected,
|
||||
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected {
|
||||
margin:0 -1px 0.16em 0;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-right .yui-nav .selected {
|
||||
margin:0 0 0.16em -1px;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a {
|
||||
border-width:1px 0;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a em,
|
||||
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a em {
|
||||
border-width:0 0 0 1px;
|
||||
padding:0.2em .75em;
|
||||
top:auto;
|
||||
left:-1px; /* for 1px rounded corners */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a em {
|
||||
border-width:0 1px 0 0;
|
||||
left:auto;
|
||||
right:-1px; /* for 1px rounded corners */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a,
|
||||
.yui-skin-sam .yui-navset-left .yui-nav .selected a,
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a:hover,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav .selected a,
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a:hover,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav a,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav a:hover {
|
||||
background-image:none; /* no left-right or bottom-top gradient */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-content {
|
||||
border:1px solid #eef2fd; /* content border */
|
||||
}
|
||||
|
||||
/* bottom orientation */
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav,
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav {
|
||||
border-width:5px 0 0; /* color between tab list and content */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav .selected {
|
||||
margin:-1px 0.3em 0 0; /* for overlap */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav li {
|
||||
padding:0 0 1px 0; /* gecko: make room for overflow */
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li a,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav li a {
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,
|
||||
.yui-skin-sam .yui-navset-bottom .yui-nav a em {
|
||||
border-width:0 0 1px;
|
||||
top:auto;
|
||||
bottom:-1px; /* for 1px rounded corners */
|
||||
}
|
||||
|
||||
.yui-skin-sam .yui-navset-bottom .yui-content,
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content {
|
||||
border:1px solid #eef2fd; /* content border */
|
||||
}
|
||||
|
||||
|
||||
.yui-skin-sam {
|
||||
background-color: #ffa700;
|
||||
padding: 10px 5 5 5px;
|
||||
display:block;
|
||||
}
|
||||
|
||||
/*
|
||||
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 2.6.0
|
||||
*/
|
||||
.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 0.5em 0 0;}
|
||||
|
||||
.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 0.5em;}
|
||||
|
||||
.yui-navset .yui-content .yui-hidden{display:none;}
|
||||
|
||||
.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}
|
||||
|
||||
.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}
|
||||
|
||||
.yui-navset-right {padding:0 6em 0 0;}
|
||||
|
||||
.yui-navset-top,.yui-navset-bottom{padding:auto;}
|
||||
|
||||
.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}
|
||||
|
||||
.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}
|
||||
|
||||
.yui-navset .yui-content{zoom:1;}
|
||||
|
||||
.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1;}
|
||||
|
||||
.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}
|
||||
|
||||
.yui-navset .yui-nav a{position:relative;}
|
||||
|
||||
.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}
|
||||
|
||||
.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}
|
||||
|
||||
.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}
|
||||
|
||||
.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}
|
||||
|
||||
.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}
|
||||
|
||||
.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}
|
||||
|
||||
.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}
|
||||
|
||||
.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto;}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:0.35em 0.75em;}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px;}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 0.16em;padding:0 0 0 1px;}
|
||||
|
||||
.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:0.2em .75em;top:auto;left:-1px;}
|
||||
|
||||
.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}
|
||||
|
||||
.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px 0.16em 0 0;}
|
||||
|
||||
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}
|
||||
|
||||
|
||||
BIN
www/extras/account/images/new.png
Normal file
BIN
www/extras/account/images/new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 452 B |
BIN
www/extras/account/images/next.gif
Normal file
BIN
www/extras/account/images/next.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 857 B |
BIN
www/extras/account/images/no_photo.gif
Normal file
BIN
www/extras/account/images/no_photo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 390 B |
BIN
www/extras/account/images/old.png
Normal file
BIN
www/extras/account/images/old.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 536 B |
BIN
www/extras/account/images/prev.gif
Normal file
BIN
www/extras/account/images/prev.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 170 B |
BIN
www/extras/account/images/save_changes.gif
Normal file
BIN
www/extras/account/images/save_changes.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
64
www/extras/account/inbox.js
Normal file
64
www/extras/account/inbox.js
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
YAHOO.util.Event.onDOMReady(function() {
|
||||
if(YAHOO.util.Dom.inDocument("friends")) {
|
||||
|
||||
var isUserCheckBox = function ( element ) {
|
||||
if(element.name == "friend") return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
var removeUser = function (evt, obj) {
|
||||
YAHOO.util.Event.stopEvent(evt);
|
||||
var userId = obj.userId;
|
||||
var checkBox = YAHOO.util.Dom.get("friend_"+userId+"_id");
|
||||
checkBox.checked = false;
|
||||
updateUsers(evt,obj.dialog);
|
||||
}
|
||||
|
||||
var updateUsers = function ( evt , dialog ) {
|
||||
YAHOO.util.Event.stopEvent(evt);
|
||||
var toElement = YAHOO.util.Dom.get("messageTo");
|
||||
toElement.innerHTML = ""; // Clear the current stuff
|
||||
YAHOO.util.Dom.removeClass(toElement,"inbox_messageTo");
|
||||
|
||||
var checkBoxes = YAHOO.util.Dom.getElementsBy(isUserCheckBox,"INPUT","contacts");
|
||||
for (var i = 0; i < checkBoxes.length; i++) {
|
||||
if(checkBoxes[i].checked) {
|
||||
var friendName = YAHOO.util.Dom.get("friend_"+checkBoxes[i].value+"_name").innerHTML;
|
||||
var firstPart = document.createTextNode(friendName + " ( ");
|
||||
var link = document.createElement("A");
|
||||
link.setAttribute('href', '#');
|
||||
link.innerHTML = removeText;
|
||||
YAHOO.util.Event.addListener(link,"click",removeUser,{ userId: checkBoxes[i].value, dialog: dialog });
|
||||
var lastPart = document.createTextNode(" ); ");
|
||||
toElement.appendChild(firstPart);
|
||||
toElement.appendChild(link);
|
||||
toElement.appendChild(lastPart);
|
||||
}
|
||||
}
|
||||
YAHOO.util.Dom.addClass(toElement,"inbox_messageTo");
|
||||
dialog.hide();
|
||||
}
|
||||
|
||||
var showUsers = function (evt, dialog) {
|
||||
YAHOO.util.Event.stopEvent(evt);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
// Instantiate the Dialog
|
||||
var dialog1 = new YAHOO.widget.Dialog("friends", {
|
||||
width : "340px",
|
||||
fixedcenter : true,
|
||||
visible : false,
|
||||
constraintoviewport : false
|
||||
});
|
||||
|
||||
// Render the Dialog
|
||||
dialog1.render();
|
||||
|
||||
YAHOO.util.Event.addListener("show_friends", "click", showUsers, dialog1);
|
||||
YAHOO.util.Event.addListener("cancel_top", "click", dialog1.hide, dialog1, true);
|
||||
YAHOO.util.Event.addListener("cancel_bottom", "click", dialog1.hide, dialog1, true);
|
||||
YAHOO.util.Event.addListener("update_top", "click", updateUsers, dialog1);
|
||||
YAHOO.util.Event.addListener("update_bottom", "click", updateUsers, dialog1);
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue