L^(t^+xz9vl(euSxJyY6|HGq*c1=U-1_yDS(
z4$u_Ue>i6K&bBxYP9$qr{|MZZ{nJjb%vd5QGlI0Ozq2OowK#Pz
So+I#oh`@g)uNhYW8UO&mZ_JGV
literal 0
HcmV?d00001
From 537bd17224151ff314ba83e422fc920920e3e0f9 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Fri, 27 Mar 2009 15:59:25 -0700
Subject: [PATCH 09/35] Install a default template for friend manager view.
---
sbin/installFriendManager.pl | 56 +++++++++++++++++-
.../root_import_account_friendmanager.wgpkg | Bin 1464 -> 1425 bytes
2 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl
index d8c880b93..7fe2c77ac 100644
--- a/sbin/installFriendManager.pl
+++ b/sbin/installFriendManager.pl
@@ -89,15 +89,65 @@ sub finish {
my $session = shift;
## If your script is adding or changing content you need these lines, otherwise leave them commented
- #
- # my $versionTag = WebGUI::VersionTag->getWorking($session);
- # $versionTag->commit;
+ updateTemplates($session);
+ my $versionTag = WebGUI::VersionTag->getWorking($session);
+ $versionTag->commit;
##
$session->var->end;
$session->close;
}
+#-------------------------------------------------
+sub updateTemplates {
+ my $session = shift;
+ my $packageDir = "packages";
+ return undef unless (-d $packageDir);
+ print "\tUpdating packages.\n";
+ opendir(DIR,$packageDir);
+ my @files = readdir(DIR);
+ closedir(DIR);
+ my $newFolder = undef;
+ foreach my $file (@files) {
+ next unless ($file =~ /\.wgpkg$/);
+ # Fix the filename to include a path
+ $file = $packageDir . "/" . $file;
+ addPackage( $session, $file );
+ }
+}
+
+sub addPackage {
+ my $session = shift;
+ my $file = shift;
+
+ # Make a storage location for the package
+ my $storage = WebGUI::Storage->createTemp( $session );
+ $storage->addFileFromFilesystem( $file );
+
+ # Import the package into the import node
+ my $package = WebGUI::Asset->getImportNode($session)->importPackage( $storage );
+
+ # Make the package not a package anymore
+ $package->update({ isPackage => 0 });
+
+ # Set the default flag for templates added
+ my $assetIds
+ = $package->getLineage( ['self','descendants'], {
+ includeOnlyClasses => [ 'WebGUI::Asset::Template' ],
+ } );
+ for my $assetId ( @{ $assetIds } ) {
+ my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId );
+ if ( !$asset ) {
+ print "Couldn't instantiate asset with ID '$assetId'. Please check package '$file' for corruption.\n";
+ next;
+ }
+ $asset->update( { isDefault => 1 } );
+ }
+
+ return;
+}
+
+
__END__
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 7e2e57a433742971201b5f3f6779b3dd60d79c01..3ae43b1abf21e2da27a819b7bedd4560b8efd901 100644
GIT binary patch
literal 1425
zcmV;C1#bEuiwFP!00000|Ls_9Q`<%m=5v0*+*<`JpASReiUtQZ0O%+Xnunb
zeo=M#8$l2>8}%>(x
ziVNH)HPl9b{r!`9l?k2^p(v61ty!j5#)4o)l3yqKZLLu=i?txdQa%5aaRJhf*~9WQ
zt;En}%IL3Uc`v1MKoYx`k@0)V5pDD5k1*tX?!zp0|zj=9u*QRd>*!#XNm;
z(+8nm;j^v|-6Jz=isnF1O=$ZFqt6ItE*EX|RF9v8JVRg5Q%SIh2k4TEAuLF!%u+mQ
zBg&wM&59k*sD>^(XBH?-Bb8Xt4AsZemcPH<_|t#EJF*^ssK0w-*XANMm?1b<9vy1P
z@^BpUoGI^8P{NWSW`Ksm8&NX0`=~smNkZ5>NKttrxZ*k<^P;}sd3KaMPpC4Y&}vg;
z2uCY1aVMc86a$1x=q2c(O^pbf00>1xC|G)ta-Jch&^&6Gkr`&yHX}O5Ljrqt%#INj
z#RmO$7Xk;%^)|24XZ`})yVftt21HPGCej1JhbLGNR`~9~vd%?0E^71C!8hDtN+7IW
zb2{ya3B-HS`|a$g-R@`rY`449V9d^oy#Z$ZWy9t*Pv|9uF`@@iP;az?R@4fc)}o>+
zEvy}wtiCR?irzt1(W1pNS6XURMphG*I)fUq3u9ISdCHEt0!L!3C|{_JAz^uUJwNoM
z%!|Q=Gnm37cT$=5H8ar51UV^aHS3N`f{dtyu8}*s!p5XYpswc<9fRB&Z0YE_!4#zr!
zLV|LRi#T-3?w!fAXEIq86k)NLWa{JwI|}zp=(yUv`Vel57Z>4p`yd*eiR0ka+rIUP
z%F~I2&NT;i8p51&8b6m6LFE`ubW`mZD)qJCKvJOrOZW1|n;?35e1u1D&$3VZ7axy4
zjxRbj&DXv>`SMM4a9R7_5A!cv0voINe?4k0@c(+V`N;pjDWPj_T9^Nq6WL;#)0E%g
zx4{h7xg=sqt5tAvYZ76>LjuwGT_hz$cTV@LXogxi5nVwoG_V4r-^1~Mbm@@rynyIN
z(|3Sro`3{(Yt-dhtz&8k_!
zFusLHEE-sYIy72tR+rCzH~8z0`9`?ivZseyzIn{UJT**sMF~cZo(CP|x<@-{Ho!fi
zfYPOD@qZ2{R`)sTX9F}d>fao)X7^`t7QK}0wDCvezuY_SI!q)Jlo>{Psz0=*{k1%V
f@c-32@q{(U%H#6K2s}pMJBYx4-tTp{02%-QLod0N
literal 1464
zcmV;p1xNZHiwFP!00000|Ls^?Q`!V
zDlT`;^SpZ1cQ-c!e+_w_>%$K$dHO4r3Jcg;$YaW`7yC;k5pwacJ{(-;aOQW()E{Zc
z?An{XXD?iD<4SV&=Y@?Q%)ek+ky%qM*N__}@G-$r
z2lvdv%8u@A)EDIP*Ne(Ohk9K8Y{?wI3e&(fm;U_UQ~83*qshbe-VaY;BHJDEF}Tg@|rTZ^R0WblC+fo8B~1js^9a`qJKV4>qfRx^H+>`r+^X#}DP)RKx}|1n0`3
z0}WXY4nv+Yx-N=D^6DvxOt5jG1_RGta0xQ@r{P*3nQX+?(-Rc5GG
zT2o{IN6RsBC!#|X0)$HFCFr4bjR@-i2w6iYnEE;9JVC~wdDJi?6U>TbX6O_T2&~yL
zD~4EP3-sGv2pmk;%bdcV`3rpSmiwZtPXtxxB0ds)aE1k8+1@Q!*15>(qB1KTT%#Q(
z0;05QPNz3w0`ZA-U!S)cjiv^`Mx!$c#x!5-_c7}gWMg5xCYyIWqL&nC#1N5R-SUE3
z)elOKimEvCc4V^pF3T$V2w6q*9`ju3QDf4wM5WH4M(oU4=>zhVoN@&l39+Jlt~LgQ
zrJdFGp_wwxhzlpc!b6)WO`W&tzxhULp2ffk7C?y0!rN#Zciz37KRT6fd3Zeu^b~JX
zc|b048qd{$A@n>!#^?5Su)PiP-KrBohEzgS4kmT(-H|3}9~@p6`iJ?A8RwkU$aF_P%6(lJWvTfu>xLjUF4ORFEe;N-N0hrgXCHwT};
zw7!f!H!E7M-M+Yem>OKvzTZdrXL|x4%k;k=)aUfSUk{%3|HCr6+NxFcf6mAyrdeG%
z{cSJ<*FWaB!4%fnB4RL^(t^+xz9vl(euSxJyY6|HGq*c1=U-1_yDS(
z4$u_Ue>i6K&bBxYP9$qr{|MZZ{nJjb%vd5QGlI0Ozq2OowK#Pz
So+I#oh`@g)uNhYW8UO&mZ_JGV
From 3c7e7ab23101a869915b0d3e355274cf29a68af4 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Wed, 1 Apr 2009 14:43:50 -0700
Subject: [PATCH 10/35] Checkpoint. Too many changes to enumerate.
---
lib/WebGUI/Account.pm | 8 ++-
lib/WebGUI/Account/FriendManager.pm | 48 +++++++++++++++++-
sbin/installFriendManager.pl | 6 +--
.../root_import_account_friendmanager.wgpkg | Bin 1425 -> 1168 bytes
4 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/lib/WebGUI/Account.pm b/lib/WebGUI/Account.pm
index 2d62b3f1c..bae617837 100644
--- a/lib/WebGUI/Account.pm
+++ b/lib/WebGUI/Account.pm
@@ -34,7 +34,9 @@ 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: $self->store->{something} = "something"
-
+public bare => my %bare; #This flag indicates that neither the layout nor style template should be applied
+ #to the output of the method. Think JSON/XML, etc.
+
#-------------------------------------------------------------------
=head2 appendCommonVars ( var )
@@ -139,6 +141,9 @@ sub displayContent {
my $noStyle = shift;
my $session = $self->session;
+ ##Don't do any templating if we're sending back data like JSON or XML.
+ return $content if $self->bare;
+
#Wrap content into the layout
my $var = {};
$var->{content} = $content;
@@ -344,6 +349,7 @@ sub new {
$store { $id } = {};
$method { $id } = "view";
$uid { $id } = undef;
+ $bare { $id } = 0;
return $self;
}
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 4f42a0080..16e67b587 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -108,6 +108,52 @@ sub editSettingsFormSave {
#-------------------------------------------------------------------
+=head2 www_getFriendsAsJson ( )
+
+For each user in a group, count how many friends they have and return that data
+as JSON.
+
+=cut
+
+sub www_getFriendsAsJson {
+ my $self = shift;
+ my $session = $self->session;
+ return $session->privilege->insufficient
+ unless $session->user->isInGroup($session->setting->get('groupIdAdminFriends'));
+ my $form = $session->form;
+ my $groupId = $form->get('groupId');
+ if (! $groupId) {;
+ $session->log->warn("No groupId: >$groupId<");
+ return '{}';
+ }
+ my $group = WebGUI::Group->new($session, $groupId);
+ return '{}' if $group->getId eq 'new';
+ if ($group->getId eq 'new') {;
+ $session->log->warn("New group created");
+ return '{}';
+ }
+ my @records = ();
+ USER: foreach my $userId (@{ $group->getUsers} ) {
+ my $user = WebGUI::User->new($session, $userId);
+ next USER unless $user;
+ my $friendsCount = scalar $user->friends->getUsers();
+ push @records, {
+ userId => $userId,
+ username => $user->username,
+ friends => $friendsCount,
+ };
+ }
+ my %results;
+ $results{totalRecords} = scalar @records;
+ $results{records} = \@records;
+ #$results{'sort'} = undef;
+ $session->http->setMimeType('application/json');
+ my $json = JSON::to_json(\%results);
+ return $json;
+}
+
+#-------------------------------------------------------------------
+
=head2 www_view ( )
The main view page for editing the user's profile.
@@ -127,7 +173,7 @@ sub www_view {
next GROUP unless $group->getId || $group->getId eq 'new';
push @{ $var->{group_loop} }, {
groupId => $groupId,
- groupName => $group->getName,
+ groupName => $group->name,
};
}
diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl
index 7fe2c77ac..64d12fc76 100644
--- a/sbin/installFriendManager.pl
+++ b/sbin/installFriendManager.pl
@@ -43,9 +43,9 @@ finish($session);
sub installFriendManagerSettings {
my $session = shift;
print "Installing FriendManager into settings...";
- $session->setting->add('groupIdAdminFriends', '3');
- $session->setting->add('friendManagerViewTemplate', '64tqS80D53Z0JoAs2cX2VQ');
- $session->setting->add('groupsToManageFriends', '2');
+ $session->setting->add('groupIdAdminFriends', '3');
+ $session->setting->add('friendManagerViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
+ $session->setting->add('groupsToManageFriends', '2');
print "\tDone";
}
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 3ae43b1abf21e2da27a819b7bedd4560b8efd901..207e3e061cf76b193713b83e1df0a49fa1d76a34 100644
GIT binary patch
literal 1168
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
From 996e3a7053694bd7e762d168a18df8e3b74cbdfd Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Wed, 1 Apr 2009 15:34:06 -0700
Subject: [PATCH 11/35] Fix JSON, and ordering in the table.
---
lib/WebGUI/Account/FriendManager.pm | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 16e67b587..15c10eff7 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -143,10 +143,14 @@ sub www_getFriendsAsJson {
friends => $friendsCount,
};
}
+ @records = map { $_->[1] }
+ sort { $a->[0] cmp $b->[0] }
+ map { [ $_->{username}, $_ ] } @records;
my %results;
$results{totalRecords} = scalar @records;
$results{records} = \@records;
- #$results{'sort'} = undef;
+ $results{'sort'} = 'username';
+ $self->bare(1);
$session->http->setMimeType('application/json');
my $json = JSON::to_json(\%results);
return $json;
From f851a91b01c8f0fda5923dffea32ef7371e4bef6 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Wed, 1 Apr 2009 15:41:29 -0700
Subject: [PATCH 12/35] Update template and fix multiple errors.
---
.../root_import_account_friendmanager.wgpkg | Bin 1168 -> 1541 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 207e3e061cf76b193713b83e1df0a49fa1d76a34..c1d3027068cd6266ae4325a849ddb0f8ec73efda 100644
GIT binary patch
literal 1541
zcmV+g2KxCQiwFP!00000|Ls^?Z`(E$&U1f-;J$P~6G^^Ej++K>lcw>KbP4SAwrmA0
zF*XyKR7uLNSM(ykKgW#2Xj`wLNfhP7
zkY!TKuf$0|B4UWcVlBm!w}gglqJ=uefS6Ji3$iGVO(^DuB4cqakahNbYv-oK(tK?}?ffk99|!Zs2D1H8B;6z*tb=R^5MHU%1^0ig(d
zy$G5Q-5(Tm6#*x)v;+?f3m3{Jl0-y>lAS+6Wif1Qn(zjVQ7Z4MvcG4ikIJBb0isHk
zt!~YIyVZo(s7@i=4BCL>jFZ4?A7p)yl>lo?=5@T6Er#4!m&Oy^51
z5$BvqrVKMbG~g_WJK@WaNIg_9q)9vi)v}7d7m~3RKm!nv{gCzBs+Mg-DT4$C=Si6Q
zF=8yXv_So+^EpN|U#5p%qY+j~uUCu_PZy}Sst~|*wM>DL5Rm4kb;5mJFkoCu*Ch#_
zl$=n0T%2t^x1jM@Z*l+CWoPHe44$1cbc=hcJU>~E^K|)ZC~4FzS$3|w+LEodR@jix
zA?8G0^5}@O(K+Inrgk0gSV*o3G;G!K-D<7rRh_2SED$A;QHoZwqV)zM&{{;y;!2Hbk$xeG2o-J0
z@F`d^0x=c8W)e0MAW7Il9FH(fdiUFh;v`8*5l{?#XKZp3os(ViN462a<`sL15eMqA
z&b+PGaqsMOQFS6tS#UcubcrDmafq)`5~VTV7HFC}Wezf2(C`|D;W!=>0cJUzCFL?d
zL9V0VHjgI*V#p>PdIV)FHHU#tA&?;Tg47P}tkRVHY->;E0flM6r?EU=f+Nu&D|69@
z!JAhn?fCG7pHAN&Z{J>=y=%0K9TCx;3aBz#VIv{5o-_MZjD14nX!f}*b~I^SFplfg
zn}z^zDkR`+d(7qWXIhiZ_vh1-S8()e;EO>;G2^d~zHWkeeep-Y=f9fc{y6`Aix9c*`7h%%MWr<|=wEm?ELC8WhDFN@KwjkTOv8$jCV;B_!o#d_
zw7UnzP>Gxw7F|QmRJn(f+yM%PxJO2qC28ZRd5%#o=P8_9EkHFBowcZ}?w!9-j71lP
z{N@?*?!s9@oSxKXO?ofhpP>jvjV(FER@y+UjI8h3u|bT?hPUKH!yPD5q2yXJ^p^E+
zZ~(06h(*dTxp&paj3un6;Z+Ui%(I@EGKH8mMCb3&nMHtmFqoQeY<&$4F^#XA@9wU@
zyW8-qMii_d8)fsXBpcAx_1R%f$oU4jyc3=1o?dpwX9r2AcQ6?qo*sShPW;B8@Wd)Q
zp>nbv#Y5D`5{P9KrQfyYbFC{98<5i%P;*CLA$m0zH@T$x@Ra5
rb3!#Q?yB?SET2}J5Wc7X2ieNE=!icsepulDV}U;b)xV`-02}}S8_W2>
literal 1168
zcmV;B1aJEviwFP!00000|Ls;=bK*7>=6QdG#(CMDSuo}rNH#NcNgCP>lQd-03vEW&
z!e}v)BgqiDlmFf$8EkXev^#;BKHvvgqjPjF-?^!f+y7TA7VGtDE~o#siupSg_@m@2
z<{ZbVRqAC2IC98wiY55LmHmH_R9Jv%E)OUhe_LN9iICqWYv=O$$
z(I0=lH%Fo1ArXoasZR}?<_xe@=T9LQig+zUVo?y7E1K*If`RhGTwk)vRziR(Q%1fO
zMuULL5%E$YBeQ$TJU%nGiYYz?TGjJ?tB*b*jr3jRYBf=v#lCYr1@E
z&m(FNA{u!1kTWIYH9w)O;7a-KBxyj|jUWMtkZK+fFq5dhh15JGaHc@54Hx^?S)XlH
znCkN|c#H=Dv9Xi{RLe1Cu;PiGkQPSlMq!A3$}j|SQ(;2-K84_;bOj9+lETfPnmQRN
z8c>}hcCv%Uk>Hwz?F*jbSXzwUzev{Y$JUDpRz_wVsaHr&z_62DR>vzO>$plD3741<
z$Jm!W5
zA{eY(G|`csD;_yP&*(@JEZh+qaxno0kIFE>^CqGUYS?g`+D0@~S)ZldfX^5acQA)L
z-g*~Tx?g%zZZYv
zEm?AZEq%U8d8xb>TyYJ_dY_{5l6oFt>*v1UQP}a$J*o_;l1fu#0$wkA;;Bcc$c5f2
zq0FGX^14~%p;yGUqJZ@w;5YZ@b-Xiu*9N+gZfYNPT8^h4*0_yO^Z`NhM)zd!<6Wn4VUWIxkuF@}G3n_J_;$Od
z_uG%(oq&mU;CX*@y_L?nH1Q_~aT3!eV$clS60HVxn2`izZ!{Z=6)3nNA-^
znEBggmkEq^*TgXPwb^Xxw%%;^mT^o*ogR@_+@nJZGfs~|r&K&f7Erh^0oZI__O3o{`bXs_?v9snS$S
zl~~#)?n%ZF=8Ac!uD9q>*k81#y!%^s^s$a_rH^~<+3>!7Gwk}QMO5C-C3F?zZ^loE
zzj?21%K(GH5?U+cgL%iTgX7dI
Date: Wed, 1 Apr 2009 16:58:23 -0700
Subject: [PATCH 13/35] Stub in www_editFriends.
---
lib/WebGUI/Account/FriendManager.pm | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 15c10eff7..fc950a037 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -108,10 +108,30 @@ sub editSettingsFormSave {
#-------------------------------------------------------------------
+=head2 www_editFriends ( )
+
+Edit the friends for a user. Uses the form variable userId, to determine which user.
+
+=cut
+
+sub www_editFriends {
+ my $self = shift;
+ my $session = $self->session;
+ my $form = $session->form;
+ my $userId = $form->get('userId');
+
+ ##List users in my friends group. Each friend gets a delete link.
+ ##List users in all administrated groups. Friends are added one at a time.
+
+ return $self->processTemplate($var,$session->setting->get("friendManagerViewTemplateId"));
+}
+
+#-------------------------------------------------------------------
+
=head2 www_getFriendsAsJson ( )
For each user in a group, count how many friends they have and return that data
-as JSON.
+as JSON. Uses the form variable, groupId, to return users for that group.
=cut
@@ -143,6 +163,7 @@ sub www_getFriendsAsJson {
friends => $friendsCount,
};
}
+ ##Sort by username to make the datatable happy
@records = map { $_->[1] }
sort { $a->[0] cmp $b->[0] }
map { [ $_->{username}, $_ ] } @records;
From 100b900dd29085e73a94d3b69c44aefd43881315 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Mon, 6 Apr 2009 10:34:54 -0700
Subject: [PATCH 14/35] Beginning of edit user friend interface.
Change prefix of templates from friendManager to fm.
---
lib/WebGUI/Account/FriendManager.pm | 50 ++++++++++++++++--
.../i18n/English/Account_FriendManager.pm | 10 ++++
sbin/installFriendManager.pl | 3 +-
.../root_import_account_friendmanager.wgpkg | Bin 1541 -> 1609 bytes
4 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index fc950a037..d2c4b35cd 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -8,6 +8,7 @@ use WebGUI::Pluggable;
use WebGUI::Utility;
use base qw/WebGUI::Account/;
+use List::MoreUtils qw/uniq/;
use JSON qw(from_json to_json);
=head1 NAME
@@ -76,12 +77,19 @@ sub editSettingsForm {
defaultValue => [2,3],
);
$f->template(
- name => "friendManagerViewTemplateId",
- value => $self->session->setting->get("friendManagerViewTemplateId"),
+ name => "fmViewTemplateId",
+ value => $self->session->setting->get("fmViewTemplateId"),
namespace => "Account/FriendManager/View",
label => $i18n->get("view template label"),
hoverHelp => $i18n->get("view template hoverHelp"),
);
+ $f->template(
+ name => "fmEditTemplateId",
+ value => $self->session->setting->get("fmEditTemplateId"),
+ namespace => "Account/FriendManager/Edit",
+ label => $i18n->get("edit template label"),
+ hoverHelp => $i18n->get("edit template hoverHelp"),
+ );
return $f->printRowsOnly;
}
@@ -100,7 +108,8 @@ sub editSettingsFormSave {
my $setting = $session->setting;
my $form = $session->form;
- $setting->set("friendManagerViewTemplateId", $form->process("friendManagerViewTemplateId", "template"));
+ $setting->set("fmViewTemplateId", $form->process("fmViewTemplateId", "template"));
+ $setting->set("fmEditTemplateId", $form->process("fmEditTemplateId", "template"));
my $groupsToManageFriends = $form->process("groupsToManageFriends", "group");
$setting->set("groupsToManageFriends", $groupsToManageFriends);
$setting->set("groupIdAdminFriends", $form->process("groupIdAdminFriends", "group"));
@@ -111,6 +120,8 @@ sub editSettingsFormSave {
=head2 www_editFriends ( )
Edit the friends for a user. Uses the form variable userId, to determine which user.
+Only users in the managed groups are shown. Group inheritance is supported, but
+only for WebGUI defined groups.
=cut
@@ -119,11 +130,40 @@ sub www_editFriends {
my $session = $self->session;
my $form = $session->form;
my $userId = $form->get('userId');
+ my $user = WebGUI::User->new($session, $userId);
##List users in my friends group. Each friend gets a delete link.
+ my $friendsList = $user->friends->getUserList();
##List users in all administrated groups. Friends are added one at a time.
+ my @manageableUsers = ();
+ my $groupIds = $session->setting->get('groupsToManageFriends');
+ my @groupIds = split "\n", $groupIds;
+ foreach my $groupId (@groupIds) {
+ my $group = WebGUI::Group->new($session, $groupId);
+ next GROUP unless $group->getId || $group->getId eq 'new';
+ push @manageableUsers, @{ $group->getUsersNotIn($user->get('friendsGroup'), 'withoutExpired') };
+ }
+ @manageableUsers = uniq @manageableUsers;
+ my %usersToAdd = ();
+ my $manager = $session->user;
+ foreach my $userId (@manageableUsers) {
+ my $user = WebGUI::User->new($session, $userId);
+ ##We don't use acceptsFriendsRequests here because it's overkill.
+ ##No need to check invitations, since friends are managed.
+ ##Existing friends are already filtered out.
+ next unless $user->profileField('ableToBeFriend');
+ $usersToAdd{$userId} = $user->username;
+ }
- return $self->processTemplate($var,$session->setting->get("friendManagerViewTemplateId"));
+ my $var;
+ $var->{formHeader} = WebGUI::Form::header($session);
+ $var->{addUserForm} = WebGUI::Form::selectBox($session, {
+ name => 'userToAdd',
+ options => \%usersToAdd,
+ sortByValue => 1,
+ });
+ $var->{formFooter} = WebGUI::Form::footer($session);;
+ return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
#-------------------------------------------------------------------
@@ -202,7 +242,7 @@ sub www_view {
};
}
- return $self->processTemplate($var,$session->setting->get("friendManagerViewTemplateId"));
+ return $self->processTemplate($var,$session->setting->get("fmViewTemplateId"));
}
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index a61afe96c..32ce9a895 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -23,6 +23,16 @@ our $I18N = {
lastUpdated => 0,
},
+ 'edit template label' => {
+ message => q{Edit Friends Template},
+ lastUpdated => 0,
+ },
+
+ 'edit template hoverHelp' => {
+ message => q{This template renders the interface for adding or removing friends for a user.},
+ lastUpdated => 0,
+ },
+
'groupsToManageFriends label' => {
message => q{Groups to Manage as Friends},
lastUpdated => 0,
diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl
index 64d12fc76..c6d7e1ad4 100644
--- a/sbin/installFriendManager.pl
+++ b/sbin/installFriendManager.pl
@@ -44,7 +44,8 @@ sub installFriendManagerSettings {
my $session = shift;
print "Installing FriendManager into settings...";
$session->setting->add('groupIdAdminFriends', '3');
- $session->setting->add('friendManagerViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
+ $session->setting->add('fmViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
+ $session->setting->add('fmEditTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
$session->setting->add('groupsToManageFriends', '2');
print "\tDone";
}
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index c1d3027068cd6266ae4325a849ddb0f8ec73efda..7a5526b315059589fe7503b502e28653324f6f2c 100644
GIT binary patch
literal 1609
zcmV-P2DbShiwFP!00000|Ls{@bJI8!&NIJ46JFREQeRR#X(*iuy-}7znFh-4c9&6X
zHBswGUP(>~4F7$PWXG4p31uf`_JSWA)koH+bN}RSHSYhiZM)O)8V&vHZ<}9d8-7uK
z*$u~We9v=i+qWCYacrmEK=8`_Ux`#$z}5mDQFgN$FOfvZ)nct2Tt+$byJqS?Nn~~n
zW{1n%Jue+^T}#e3v{6{m&-`BJe}CI`7W}{M`d$NpHShnrFaK}d|JFBw@c98GVN)tD
z@Q5@~5B>K0WAi8$JSIX>BK1=2_n
z$TDTtZ^p?mqH;{aLdeMN1!W<>HE-F4K+YJCC0)iLACgPf@x|N6L_Wo
z*n(H#iM4mhYC#Lk5QElu7!eCgNdR8nPzHBAv2szqkxhZdctjZnhc1KWqVEYhOqAjk
zd*4}8Ft7{+jTMq2D7m$;aH42Lb&y*52rAdIW6SQl##5Xwd)eIEwbG$>=2x(EMYQzI
z#7`Yc8bh1Fn&C0$t&mSzWJ;K_7XHq4+yoYh$V6jgzbm!d1Xdn_Rz9l5+XR+QG077V
z5R+}`um){YSZSu`iCu$)DrMyF#$lRJP}X!_)uL=54qLZmILeDBb-K*bw>AN?3S`8MGu}RsNde-xW`n@XF>)?cPHVP56xvMxPNdKQ4Ocp(Z{dd4j&6
zhmv3sjL{Vr6POTE8Ao{5LzF?2F*BfS=%t}*T(Y8F@mog3TOf)j;bQ+wL}VTb&Xq+c
zx`A3a2zUaCmufi4^qo?2TP$fBN4A{5t^Pdk+6P|ySNjF;OE-A$zI#*5rSeR0#kFk~
z8!45~X&4f=_W7H)7?}ml&{WhIv-~w9dW9!MmtFJ56pQo){ZyA?n66*bU^E1zg=r_@o+;TNH>;c8
z03*Fls6H&uMo$rN3v@w-$8S%zj>>Vhb&7AuKsV<{^*E2~A46|p<)&ffy6Y`jdTWIZ
zDH{_()msrA2|hW)0_yCd3v@_j+^d;#@8UjZ8`ZHa;~{NK1CpxU>-9DH
z==BD3hvuYAletqK(klvVOcOT8ZFf66-L~%+h*^ld(_yLSbPAE8DoUX$rbT)#T84v|
ziC=LAZ~<17F9jo&Iu5l<(#;e=CJWB#r&Qp&_5!m^QVxh?V6D?KvxLT$48CobF&2=)
z>kQcIJs+IDT-J}umpr(c`=!E*sXQQ8IEhm4JB4Ote;Ul4ozBjV*KtcMSdb}|V6TID
zHrBZbk{<^*c_5V##{Bk#9YHBejZ^|>5GjyzL2A~1R*ovZw2a^Lh#@Qxvsj(g;3z!G
z>eThY!MpdbMxVk{wsU+n>3;Im;jmxqh|2Ssgz{qaE$IpVHz$j_2rxF7o3>ff!JIf2
zjpMs^*Y6gH;8V!FY(2jfr|m7A|J!~WJ_Fg`!;U}B|KD`}&$v)gQx{V)&(Tte{>n##4SyS0
z!@`z68&ryPnQN^m5_uuKGoLGpkOa>6T7+3|>7VZxq6$4LS#%Af(=7oG`TIB+lL4I&
zo}|5{?c1f2y2$Sww*WN^cHYIZ+IaR%(-~6~@|#~;?=FNUB!}Fzd~>8&6KtJQ*S-_k
z@Lnr&G`@L%{^Dia+II&^wofnmg(p^#4V{hsC?4Y>QNTx|DE(wviuEexD3!ByJY@wP
zsT!z4N6wxZcjf732BkEO1!aa5pX(FnJd;+N5dM?$KjkvtgD(8Q_+f$nk_G+(;VXe6
H03HAU*bf+_
literal 1541
zcmV+g2KxCQiwFP!00000|Ls^?Z`(E$&U1f-;J$P~6G^^Ej++K>lcw>KbP4SAwrmA0
zF*XyKR7uLNSM(ykKgW#2Xj`wLNfhP7
zkY!TKuf$0|B4UWcVlBm!w}gglqJ=uefS6Ji3$iGVO(^DuB4cqakahNbYv-oK(tK?}?ffk99|!Zs2D1H8B;6z*tb=R^5MHU%1^0ig(d
zy$G5Q-5(Tm6#*x)v;+?f3m3{Jl0-y>lAS+6Wif1Qn(zjVQ7Z4MvcG4ikIJBb0isHk
zt!~YIyVZo(s7@i=4BCL>jFZ4?A7p)yl>lo?=5@T6Er#4!m&Oy^51
z5$BvqrVKMbG~g_WJK@WaNIg_9q)9vi)v}7d7m~3RKm!nv{gCzBs+Mg-DT4$C=Si6Q
zF=8yXv_So+^EpN|U#5p%qY+j~uUCu_PZy}Sst~|*wM>DL5Rm4kb;5mJFkoCu*Ch#_
zl$=n0T%2t^x1jM@Z*l+CWoPHe44$1cbc=hcJU>~E^K|)ZC~4FzS$3|w+LEodR@jix
zA?8G0^5}@O(K+Inrgk0gSV*o3G;G!K-D<7rRh_2SED$A;QHoZwqV)zM&{{;y;!2Hbk$xeG2o-J0
z@F`d^0x=c8W)e0MAW7Il9FH(fdiUFh;v`8*5l{?#XKZp3os(ViN462a<`sL15eMqA
z&b+PGaqsMOQFS6tS#UcubcrDmafq)`5~VTV7HFC}Wezf2(C`|D;W!=>0cJUzCFL?d
zL9V0VHjgI*V#p>PdIV)FHHU#tA&?;Tg47P}tkRVHY->;E0flM6r?EU=f+Nu&D|69@
z!JAhn?fCG7pHAN&Z{J>=y=%0K9TCx;3aBz#VIv{5o-_MZjD14nX!f}*b~I^SFplfg
zn}z^zDkR`+d(7qWXIhiZ_vh1-S8()e;EO>;G2^d~zHWkeeep-Y=f9fc{y6`Aix9c*`7h%%MWr<|=wEm?ELC8WhDFN@KwjkTOv8$jCV;B_!o#d_
zw7UnzP>Gxw7F|QmRJn(f+yM%PxJO2qC28ZRd5%#o=P8_9EkHFBowcZ}?w!9-j71lP
z{N@?*?!s9@oSxKXO?ofhpP>jvjV(FER@y+UjI8h3u|bT?hPUKH!yPD5q2yXJ^p^E+
zZ~(06h(*dTxp&paj3un6;Z+Ui%(I@EGKH8mMCb3&nMHtmFqoQeY<&$4F^#XA@9wU@
zyW8-qMii_d8)fsXBpcAx_1R%f$oU4jyc3=1o?dpwX9r2AcQ6?qo*sShPW;B8@Wd)Q
zp>nbv#Y5D`5{P9KrQfyYbFC{98<5i%P;*CLA$m0zH@T$x@Ra5
rb3!#Q?yB?SET2}J5Wc7X2ieNE=!icsepulDV}U;b)xV`-02}}S8_W2>
From 98d7318d6421c6df557f647054117f7dcb1d6693 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Mon, 6 Apr 2009 15:32:13 -0700
Subject: [PATCH 15/35] Add a Select One label to WebGUI
---
lib/WebGUI/i18n/English/WebGUI.pm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm
index a8c37b59f..4dfdebdd9 100644
--- a/lib/WebGUI/i18n/English/WebGUI.pm
+++ b/lib/WebGUI/i18n/English/WebGUI.pm
@@ -4346,6 +4346,12 @@ Users may override this setting in their profile.
'recaptcha public key' => {
message => 'reCAPTCHA Public Key'
},
+
+ 'Select One' => {
+ message => q|Select One|,
+ context => q|Label in dropdown lists, indicating that the user should use the list to select 1 entry. It is implied that if nothing is chosen, that nothing will happen.|,
+ lastUpdated => 1239057119,
+ },
};
1;
From a67907308f4f5c8a61d2eb2ea2cf3c907411e469 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Mon, 6 Apr 2009 16:52:23 -0700
Subject: [PATCH 16/35] Edit friends interface.
New edit template with i18n and variables.
Edit with save, to add and remove friends.
---
lib/WebGUI/Account/FriendManager.pm | 81 +++++++++++++++---
sbin/installFriendManager.pl | 2 +-
.../root_import_account_friendmanager.wgpkg | Bin 1609 -> 1926 bytes
3 files changed, 72 insertions(+), 11 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index d2c4b35cd..4d737b0e3 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -129,11 +129,23 @@ sub www_editFriends {
my $self = shift;
my $session = $self->session;
my $form = $session->form;
- my $userId = $form->get('userId');
+ my $userId = shift || $form->get('userId', 'guid');
my $user = WebGUI::User->new($session, $userId);
##List users in my friends group. Each friend gets a delete link.
my $friendsList = $user->friends->getUserList();
+ my @friends_loop = ();
+ while (my ($userId, $username) = each %{ $friendsList }) {
+ push @friends_loop, {
+ userId => $userId,
+ username => $username,
+ checkForm => WebGUI::Form::checkbox($session, {
+ name => 'friendToAxe',
+ value => $userId,
+ }),
+ };
+ }
+
##List users in all administrated groups. Friends are added one at a time.
my @manageableUsers = ();
my $groupIds = $session->setting->get('groupsToManageFriends');
@@ -141,33 +153,82 @@ sub www_editFriends {
foreach my $groupId (@groupIds) {
my $group = WebGUI::Group->new($session, $groupId);
next GROUP unless $group->getId || $group->getId eq 'new';
- push @manageableUsers, @{ $group->getUsersNotIn($user->get('friendsGroup'), 'withoutExpired') };
+ push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') };
}
@manageableUsers = uniq @manageableUsers;
my %usersToAdd = ();
+ tie %usersToAdd, 'Tie::IxHash';
my $manager = $session->user;
- foreach my $userId (@manageableUsers) {
- my $user = WebGUI::User->new($session, $userId);
+ my $i18n = WebGUI::International->new($session);
+ $usersToAdd{0} = $i18n->get('Select One');
+ my @usersToAdd = ();
+ USERID: foreach my $newFriendId (@manageableUsers) {
+ next USERID if $newFriendId eq $userId;
+ my $user = WebGUI::User->new($session, $newFriendId);
##We don't use acceptsFriendsRequests here because it's overkill.
##No need to check invitations, since friends are managed.
##Existing friends are already filtered out.
- next unless $user->profileField('ableToBeFriend');
- $usersToAdd{$userId} = $user->username;
+ next USERID unless $user->profileField('ableToBeFriend');
+ push @usersToAdd, [ $newFriendId, $user->username ];
+ }
+
+ @usersToAdd = sort { $a->[1] cmp $b->[1] } @usersToAdd;
+ foreach my $newFriend (@usersToAdd) {
+ $usersToAdd{$newFriend->[0]} = $newFriend->[1];
}
my $var;
- $var->{formHeader} = WebGUI::Form::header($session);
+ $var->{formHeader} = WebGUI::Form::formHeader($session, {
+ action => $self->getUrl('module=friendManager;do=editFriendsSave'),
+ })
+ . WebGUI::Form::hidden($session, { name => 'userId', value => $userId } );
$var->{addUserForm} = WebGUI::Form::selectBox($session, {
name => 'userToAdd',
options => \%usersToAdd,
- sortByValue => 1,
});
- $var->{formFooter} = WebGUI::Form::footer($session);;
+ $var->{friends_loop} = \@friends_loop;
+ $var->{has_friends} = scalar @friends_loop;
+ $var->{submit} = WebGUI::Form::submit($session);
+ $var->{formFooter} = WebGUI::Form::formFooter($session);
+ $var->{username} = $user->username;
+ $var->{userId} = $user->userId;
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
#-------------------------------------------------------------------
+=head2 www_editFriendsSave ( )
+
+Handle adding and removing people from a user's friend group. The userId of
+the user to modify will be in the userId from variable. One userId to add will be
+in userToAdd.
+
+Users to delete will be listed in checkboxes with the name, friendToAxe
+
+=cut
+
+sub www_editFriendsSave () {
+ my $self = shift;
+ my $session = $self->session;
+ my $form = $session->form;
+ my $userId = $form->process('userId', 'guid');
+ my $user = WebGUI::User->new($session, $userId);
+ my $userToAdd = $form->process('userToAdd', 'guid');
+
+ if ($userToAdd) {
+ $user->friends->addUsers([$userToAdd]);
+ }
+
+ my @usersToRemove = $form->process('friendToAxe', 'checkList');
+ if (scalar @usersToRemove) {
+ $user->friends->deleteUsers(\@usersToRemove);
+ }
+
+ return $self->www_editFriends($userId);
+}
+
+#-------------------------------------------------------------------
+
=head2 www_getFriendsAsJson ( )
For each user in a group, count how many friends they have and return that data
@@ -196,7 +257,7 @@ sub www_getFriendsAsJson {
USER: foreach my $userId (@{ $group->getUsers} ) {
my $user = WebGUI::User->new($session, $userId);
next USER unless $user;
- my $friendsCount = scalar $user->friends->getUsers();
+ my $friendsCount = scalar @{ $user->friends->getUsers() };
push @records, {
userId => $userId,
username => $user->username,
diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl
index c6d7e1ad4..bc1f6e54b 100644
--- a/sbin/installFriendManager.pl
+++ b/sbin/installFriendManager.pl
@@ -45,7 +45,7 @@ sub installFriendManagerSettings {
print "Installing FriendManager into settings...";
$session->setting->add('groupIdAdminFriends', '3');
$session->setting->add('fmViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
- $session->setting->add('fmEditTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
+ $session->setting->add('fmEditTemplateId', 'lG2exkH9FeYvn4pA63idNg');
$session->setting->add('groupsToManageFriends', '2');
print "\tDone";
}
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 7a5526b315059589fe7503b502e28653324f6f2c..c4f2deba23ef66e3a4ef5e745945bef203f29eb3 100644
GIT binary patch
literal 1926
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
H03HAU*bf+_
From 8e2716f4aa28345cc3a09f84200bbcba9a8c5736 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 09:34:58 -0700
Subject: [PATCH 17/35] Template variable help for view screen.
---
lib/WebGUI/Help/Account_FriendManager.pm | 26 ++++++++++++++++
.../i18n/English/Account_FriendManager.pm | 30 +++++++++++++++++++
2 files changed, 56 insertions(+)
create mode 100644 lib/WebGUI/Help/Account_FriendManager.pm
diff --git a/lib/WebGUI/Help/Account_FriendManager.pm b/lib/WebGUI/Help/Account_FriendManager.pm
new file mode 100644
index 000000000..136fa518c
--- /dev/null
+++ b/lib/WebGUI/Help/Account_FriendManager.pm
@@ -0,0 +1,26 @@
+package WebGUI::Help::Account_FriendManager;
+
+use strict;
+
+our $HELP = {
+
+ 'view friend manager' => {
+ title => 'Friend Manager View Template',
+ body => '',
+ isa => [
+ ],
+ fields => [ ],
+ variables => [
+ { name => 'group_loop',
+ variables => [
+ { name => 'groupId', },
+ { name => 'groupName', },
+ ]
+ },
+ ],
+ related => [ ],
+ },
+};
+
+1;
+#vim:ft=perl
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index 32ce9a895..4aba25a1c 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -48,6 +48,36 @@ our $I18N = {
lastUpdated => 0,
},
+ 'remove friends' => {
+ message => q{Remove Friends},
+ lastUpdated => 0,
+ },
+
+ 'add new friends' => {
+ message => q{Add New Friends},
+ lastUpdated => 0,
+ },
+
+ 'Friend Manager View Template' => {
+ message => q{Friend Manager View Template},
+ lastUpdated => 0,
+ },
+
+ 'group_loop' => {
+ message => q{A loop containing 1 entry for each group that is set to be managed.},
+ lastUpdated => 0,
+ },
+
+ 'groupId' => {
+ message => q{The GUID of the group.},
+ lastUpdated => 0,
+ },
+
+ 'groupName' => {
+ message => q{The name of the group.},
+ lastUpdated => 0,
+ },
+
};
1;
From b5ccf765762901763457b50f651a9967b65807ed Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 09:35:23 -0700
Subject: [PATCH 18/35] Template fixes for edit screen.
---
.../root_import_account_friendmanager.wgpkg | Bin 1926 -> 1968 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index c4f2deba23ef66e3a4ef5e745945bef203f29eb3..ab0ddd050f5b3651e6678a59addca7627401794e 100644
GIT binary patch
literal 1968
zcmV;h2T%APiwFP!00000|Ls|AQ`$SBt{B^4O*Q&y=
zk$uW*mSs7P17ycpGc2oIt*jX^W%Zv(Dk5NMF85i`pD!c+#G!L=JfA^p+6Hz
zuiDDLYc>6BZ+?_KSkgj)qm$Tumi;S^kAfm{8}?D=L9(lcqrL4JANHd@fJez$eUaUy-|W3QsSMF
z?({?=B~{5J|G=g<{ll#meK!oM;jU9*-m7jdJrcfVE;v^v8{pnd;<`Kvl-UuC2Ht=K
zpf+JrkEwhflZVXnXfU}OCQk%cT#dq56NQa-1&_ibZy))fVyihfMF*juDsQ`I@3gdN
zX>_cp8_(VJKH9VxeRg&j2oansK{Qkj?p9XD&B;|*B%=hF4#~$y)1PG
zZ|Hyz>17Eiy~@sqqd*~d#dtvcM?zDLWcK=QtdgsEUB|IX9zTI~RJ1_S_NjglJKL(a
z^Gnc{AyDBF|4#6(mDew5`{3;nGQc6G%9rhP9;RZi@K3@Pck2PSR2OcKy8RYx8>f4E
zP?20vRZLA}n3_S#*Hr1kO;8RpiRr9^&*S>q^}Kn?BA#b}f2Yfyr!Cw|uB|tK
zViWNhT}JHzQ+iwJ6tr;*+!Sn_dkzbFR50~c_$|Q)Cq&R7_O62C!J$W!$S>umKv|y%
z=~<9-)E@E*yi7Z3Y^Y{)7h|f~JWCyQJm{bGNYI^^F^;*%It+3FI=y9Awk*5s*o|DG
zV#<%D#qMP!{$*gO81Xxq4^QIgoY6R!)N>M(I0bDQ3(G08&%#$+!9rZ^;+kI2(SQcg
z+1=KG=`PaQr$jdsreTo;-a0=TEi2%zl(r&YPcy|19TGvdz
z@;U90$d8S06*i7ZIkAtHxwTc_+N#y$@f#ErF(BoT8giI_ScX6{4-SBye+GDD6c-6W~k*q+tuh>i1;a_ivY#s1#;
z=o2_Y#)Qe!k%XK&X=J_6RDGqwI>B%Bu{O(d^l3P$oN~>oZxtL5Yzl#wo;lnS;Z0Cc
zjdv%bUk{+BtkKuq5+1o<9(-BGiGDX8b7J25f%TtLg<@~K{;yW7+I{_ZH%oro=>I|e
zSK3BoXY>T^KymY7AL~Q;$Q(t?Y)8!Z%nlEfjK4PqEZB6VeEj6H1R**75!44JQjL5H
zH7r#y4C^^~r=ajOVJf^a@ob(YG?(cS$i0|SOnn+i6AqyOzRAGMNZCS`B{U>m22~sv
z(?T=Sj}+RDl;UIhzV%K)!O|5hRE898!K}H4BgK4%_{GegAgN6owrIYOWJqGRP|j_e
z@go}ZE3yzQoA{;uXO@)Mla?WCM0%WWczm!yhj6Z#6aTY4E<+aeDHK1-On&F?ZW*#N
z4>Yrf1QuL{k_8waZaJMUERGy5${5d-N55&15T?L_GZA@&;TsM
z=1|`UMtZHFNeCV>w`O2AdyDxNhGVuxVa$W9J~8YFusr7F1Q2KG8Sg(lbu~TOc&f2?
z3{*GAu*K#v>C-bjfgjD5vp)MZ93TM6GttSVKz3<>ODkApIS9OfMplo&0lqYBC*Q*)
z0#5-rVr*j?hyE}G{*`sy0fF0gxp0yB?||Tq`c|Xj6wI_L2(GVEvJ`VG2rjR~(~E-|
z>5cmDpPe47(QD?v8Ou|*f#3y`+!caPDd(q#;NJ$^mNaV`|HC=Dw9ZewNRY9p|6|uH
zwF&$Wo?X7j|4TCQLN<5B|4G4T&n<
zSxy@37!@?Spksu$vVi2D5omUtu>s{#e7#$7%7xq8F(@OPda&w>F=5L!}p=#2-!uf53g&m80dkZV2
z3*P=nU1(agxQ`ae?22v7siwr&N}_ZdIhzGl(D!s3ashWJZz@hLpSPe*P*nR}x&aNx
zt~vI&*Us(+z_q(>WiD{GdZ8Jz(qaRnan}!fq)ip{eSAOeXcv5ayd&^E<;bLh#>$bC
zJ&g^saMKTkFbxF@^!>pp!pby~=Bp5H(*L=3!osuWo_Mc;dky?t8u%L!qb|DuC;$K?
CBHKLx
literal 1926
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
MUqP&=F90Y204
Date: Tue, 7 Apr 2009 10:01:48 -0700
Subject: [PATCH 19/35] Template variable help for edit screen.
---
lib/WebGUI/Help/Account_FriendManager.pm | 32 +++++++++
.../i18n/English/Account_FriendManager.pm | 70 +++++++++++++++++++
2 files changed, 102 insertions(+)
diff --git a/lib/WebGUI/Help/Account_FriendManager.pm b/lib/WebGUI/Help/Account_FriendManager.pm
index 136fa518c..6514ed285 100644
--- a/lib/WebGUI/Help/Account_FriendManager.pm
+++ b/lib/WebGUI/Help/Account_FriendManager.pm
@@ -20,6 +20,38 @@ our $HELP = {
],
related => [ ],
},
+
+ 'edit friend manager' => {
+ title => 'Friend Manager Edit Template',
+ body => '',
+ isa => [
+ ],
+ fields => [ ],
+ variables => [
+ { name => 'formHeader',
+ required => 1, },
+ { name => 'username', },
+ { name => 'userId', },
+ { name => 'manageUrl', },
+ { name => 'addUserForm', },
+ { name => 'hasFriends', },
+ { name => 'friend_loop',
+ variables=> [
+ { name => 'userId',
+ description => 'new userId', },
+ { name => 'username',
+ description => 'new username', },
+ { name => 'checkForm', },
+ ],
+ },
+ { name => 'submit',
+ required => 1, },
+ { name => 'formFooter',
+ required => 1, },
+ ],
+ related => [ ],
+ },
+
};
1;
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index 4aba25a1c..612c67bd3 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -78,6 +78,76 @@ our $I18N = {
lastUpdated => 0,
},
+ 'Friend Manager Edit Template' => {
+ message => q{Friend Manager Edit Template},
+ lastUpdated => 0,
+ },
+
+ 'formHeader' => {
+ message => q{HTML code to begin the form for editing a user's list of friends.},
+ lastUpdated => 0,
+ },
+
+ 'username' => {
+ message => q{The name of the user whose friends you are managing.},
+ lastUpdated => 0,
+ },
+
+ 'userId' => {
+ message => q{The GUID of the user whose friends you are managing.},
+ lastUpdated => 0,
+ },
+
+ 'manageUrl' => {
+ message => q{The GUID of the user whose friends you are managing.},
+ lastUpdated => 0,
+ },
+
+ 'back to friend manager' => {
+ message => q{Back to the Friend Manager.},
+ lastUpdated => 0,
+ },
+
+ 'addUserForm' => {
+ message => q{A dropdown box with a list of users who can be added to this user's Friends.},
+ lastUpdated => 0,
+ },
+
+ 'hasFriends' => {
+ message => q{A boolean which is true if the user currently has friends.},
+ lastUpdated => 0,
+ },
+
+ 'friend_loop' => {
+ message => q{A loop containing a list of the this user's current friends.},
+ lastUpdated => 0,
+ },
+
+ 'new userId' => {
+ message => q{The GUID of a user.},
+ lastUpdated => 0,
+ },
+
+ 'new username' => {
+ message => q{The username of a user.},
+ lastUpdated => 0,
+ },
+
+ 'checkForm' => {
+ message => q{A checkbox for this user. If set when the form is submitted, this user will be removed from the user's list of friends.},
+ lastUpdated => 0,
+ },
+
+ 'submit' => {
+ message => q{A button with internationalized label to submit the form.},
+ lastUpdated => 0,
+ },
+
+ 'formFooter' => {
+ message => q{HTML code to end the form.},
+ lastUpdated => 0,
+ },
+
};
1;
From 7682b6a3d6003315243be1940843a6bc26774649 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 10:29:04 -0700
Subject: [PATCH 20/35] Friends relationships are reciprocal.
Fix manageUrl to really work in edit screen.
---
lib/WebGUI/Account/FriendManager.pm | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 4d737b0e3..92f2f5b85 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -3,6 +3,7 @@ package WebGUI::Account::FriendManager;
use strict;
use WebGUI::Exception;
+use WebGUI::Friends;
use WebGUI::International;
use WebGUI::Pluggable;
use WebGUI::Utility;
@@ -192,6 +193,7 @@ sub www_editFriends {
$var->{formFooter} = WebGUI::Form::formFooter($session);
$var->{username} = $user->username;
$var->{userId} = $user->userId;
+ $var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
@@ -213,15 +215,16 @@ sub www_editFriendsSave () {
my $form = $session->form;
my $userId = $form->process('userId', 'guid');
my $user = WebGUI::User->new($session, $userId);
- my $userToAdd = $form->process('userToAdd', 'guid');
+ my $ufriend = WebGUI::Friends->new($session, $user);
+ my $userToAdd = $form->process('userToAdd', 'guid');
if ($userToAdd) {
- $user->friends->addUsers([$userToAdd]);
+ $ufriend->add([$userToAdd]);
}
my @usersToRemove = $form->process('friendToAxe', 'checkList');
if (scalar @usersToRemove) {
- $user->friends->deleteUsers(\@usersToRemove);
+ $ufriend->delete(\@usersToRemove);
}
return $self->www_editFriends($userId);
From 851912712fb2173a4467abf568c1c1ec43e1ea31 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 10:46:46 -0700
Subject: [PATCH 21/35] Adding JS for friendManager.
---
.../build/friendManager/friendManager.js | 112 ++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 www/extras/yui-webgui/build/friendManager/friendManager.js
diff --git a/www/extras/yui-webgui/build/friendManager/friendManager.js b/www/extras/yui-webgui/build/friendManager/friendManager.js
new file mode 100644
index 000000000..c318ac299
--- /dev/null
+++ b/www/extras/yui-webgui/build/friendManager/friendManager.js
@@ -0,0 +1,112 @@
+/*** The WebGUI Asset History Viewer
+ * Requires: YAHOO, Dom, Event
+ * With all due credit to Doug Bell, who wrote the AssetManager. FriendManager
+ * is a blatant copy/paste/modify of it.
+ */
+
+//Container for functions used by many datatables.
+if ( typeof WebGUI == "undefined" ) {
+ WebGUI = {};
+}
+if ( typeof WebGUI.FriendManager == "undefined" ) {
+ WebGUI.FriendManager = {};
+}
+
+/*---------------------------------------------------------------------------
+ WebGUI.FriendManager.initManager ( )
+ Initialize the i18n interface
+WebGUI.FriendManager.initManager = function (o) {
+ WebGUI.FriendManager.i18n
+ = new WebGUI.i18n( {
+ namespaces : {
+ 'WebGUI' : [
+ "50",
+ ],
+ 'Account_Friends' : [
+ "title",
+ ]
+ },
+ onpreload : {
+ fn : WebGUI.FriendManager.init
+ }
+ } );
+};
+*/
+
+/*---------------------------------------------------------------------------
+ Initialize objects that are shared across many datatables.
+*/
+WebGUI.FriendManager.responseSchema
+ = {
+ resultsList: 'records',
+ fields: [
+ { key: 'userId', parser: 'string' },
+ { key: 'username', parser: 'string' },
+ { key: 'friends', parser: 'number' },
+ ],
+ metaFields: {
+ totalRecords: "recordsReturned" // Access to value in the server response
+ }
+ };
+
+WebGUI.FriendManager.formatUsername = function ( el, oRecord, oColumn, oData ) {
+// var link = document.createElement('a');
+// var myId = YAHOO.util.Dom.generateId();
+// elCell.innerHTML = '';
+// var editButton = new YAHOO.widget.Button( myId,
+// {
+// type : "link",
+// href : "?op=account;module=friendManager;do=editFriends;uid="+oRecord.getData('userId'),
+// label : "EDIT",
+// }
+// );
+ var userId = oRecord.getData('userId');
+ el.innerHTML = 'edit ';
+ el.innerHTML += '' + oData + '';
+}
+
+WebGUI.FriendManager.ColumnDefs = [ // sortable:true enables sorting
+ //{key:"username", label:WebGUI.FriendManager.i18n.get('WebGUI', '50' ), sortable: true},
+ //{key:"friends", label:WebGUI.FriendManager.i18n.get('Account_Friends', 'title' ), sortable: true},
+ {key:"username", label:"username", sortable: true, formatter: WebGUI.FriendManager.formatUsername },
+ {key:"friends", label:"friends", sortable: true},
+ {key:"userId", label:"userId", sortable: true},
+];
+
+//Per object code
+
+WebGUI.FriendManager.MakeTable = function (groupId, containerId) {
+ var that = this;
+
+ // Initialize the data table
+ var myPaginator = new YAHOO.widget.Paginator({
+ containers : ['pagination'],
+ pageLinks : 7,
+ rowsPerPage : 15,
+ template : "{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink}"
+ });
+
+ that.DataSource
+ = new YAHOO.util.DataSource('?op=account;module=friendManager;do=getFriendsAsJson;groupId='+groupId+';',{connTimeout:30000} );
+ that.DataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+ that.DataSource.responseSchema = WebGUI.FriendManager.responseSchema;
+ that.DataTable = new YAHOO.widget.DataTable(
+ containerId,
+ WebGUI.FriendManager.ColumnDefs,
+ that.DataSource,
+ {
+ initialRequest : '',
+ paginator : myPaginator,
+ sortedBy : { "key" : "username", "dir" : YAHOO.widget.DataTable.CLASS_ASC },
+ }
+ );
+
+ that.DataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
+ oPayload.totalRecords = oResponse.meta.totalRecords;
+ return oPayload;
+ }
+
+ return that;
+
+};
+
From 7316f267fa9efa85b5b95513bb0183f392eaa41a Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 11:31:34 -0700
Subject: [PATCH 22/35] Allow UserAdmin to view another person's inbox.
---
lib/WebGUI/Account/Inbox.pm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/Inbox.pm b/lib/WebGUI/Account/Inbox.pm
index 57d6b5af1..8f44fe7b3 100644
--- a/lib/WebGUI/Account/Inbox.pm
+++ b/lib/WebGUI/Account/Inbox.pm
@@ -77,7 +77,9 @@ Returns whether or not the user can view the inbox tab
sub canView {
my $self = shift;
- return ($self->uid eq "");
+ my $session = $self->session;
+ return $self->uid eq ""
+ || $self->uid ne "" && $session->user->isInGroup($session->setting->get('groupIdAdminUser'));
}
#-------------------------------------------------------------------
From 263bb9bbdfb36969b7f1a73b039b01690b746110 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 13:00:53 -0700
Subject: [PATCH 23/35] Handle the uid parameter, easily.
Add the getUser method, to return the right user, based on the uid URL
parameter. Change appendCommonVars to use getUser so that it
always dispays the correct username.
---
lib/WebGUI/Account.pm | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account.pm b/lib/WebGUI/Account.pm
index bae617837..ee5ffd194 100644
--- a/lib/WebGUI/Account.pm
+++ b/lib/WebGUI/Account.pm
@@ -53,7 +53,7 @@ sub appendCommonVars {
my $self = shift;
my $var = shift;
my $session = $self->session;
- my $user = $session->user;
+ my $user = $self->getUser;
$var->{'user_full_name' } = $user->getWholeName;
$var->{'user_member_since'} = $user->dateCreated;
@@ -314,6 +314,25 @@ sub getUrl {
#-------------------------------------------------------------------
+=head2 getUser
+
+Gets the user, either specified by the uid URL parameter, or the
+session user.
+
+=cut
+
+sub getUser {
+ my $self = shift;
+ if ($self->uid) {
+ return WebGUI::User->new($self->session, $self->uid);
+ }
+ else {
+ return $self->session->user;
+ }
+}
+
+#-------------------------------------------------------------------
+
=head2 new ( session, module [,method ,uid] )
Constructor.
From 0b878fd288dffd1b93102ce9b139936769d7da8d Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 13:02:43 -0700
Subject: [PATCH 24/35] Overrides allow groupIdAdminUser to view Inbox.
Modified Account/Inbox, and Inbox->canRead. Anyone in
groupIdAdminUser can now read messages in any user's
inbox.
---
lib/WebGUI/Account/Inbox.pm | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/lib/WebGUI/Account/Inbox.pm b/lib/WebGUI/Account/Inbox.pm
index 8f44fe7b3..d880b458f 100644
--- a/lib/WebGUI/Account/Inbox.pm
+++ b/lib/WebGUI/Account/Inbox.pm
@@ -49,16 +49,16 @@ sub appendCommonVars {
my $session = $self->session;
my $var = shift;
my $inbox = shift || WebGUI::Inbox->new($session);
- my $user = $session->user;
+ my $user = $self->getUser;
my $method = $self->method;
$self->SUPER::appendCommonVars($var);
- $var->{'view_inbox_url' } = $self->getUrl("module=inbox;do=view");
+ $var->{'view_inbox_url' } = $self->getUrl("module=inbox;do=view", 'useUid');
$var->{'view_invitations_url' } = $self->getUrl("module=inbox;do=manageInvitations");
- $var->{'unread_message_count' } = $inbox->getUnreadMessageCount;
+ $var->{'unread_message_count' } = $inbox->getUnreadMessageCount($user->userId);
$var->{'invitation_count' } = $self->getInvitationCount;
- $var->{'invitations_enabled' } = $session->user->profileField('ableToBeFriend');
+ $var->{'invitations_enabled' } = $user->profileField('ableToBeFriend');
$var->{'user_invitations_enabled'} = $session->setting->get("inboxInviteUserEnabled");
$var->{'invite_friend_url' } = $self->getUrl("module=inbox;do=inviteUser");
@@ -1180,7 +1180,8 @@ The main view page for editing the user's profile.
sub www_view {
my $self = shift;
my $session = $self->session;
- my $user = $session->user;
+ my $user = $self->getUser;
+
my $var = {};
$self->store->{tab} = "inbox";
@@ -1198,7 +1199,7 @@ sub www_view {
my $rpp_url = ";rpp=$rpp";
#Cache the base url
- my $inboxUrl = $self->getUrl;
+ my $inboxUrl = $self->getUrl('', 'useUid');
#Create sortBy headers
$var->{'subject_url' } = $inboxUrl.";sortBy=subject".$sortDir_url.$rpp_url;
@@ -1209,7 +1210,7 @@ sub www_view {
#Create the paginator
my $inbox = WebGUI::Inbox->new($session);
- my $p = $inbox->getMessagesPaginator($session->user,{
+ my $p = $inbox->getMessagesPaginator($user,{
sortBy => $sortBy,
sortDir => $sortDir,
baseUrl => $inboxUrl.$sort_url.";sortDir=".$sortDir.$rpp_url,
@@ -1224,7 +1225,7 @@ sub www_view {
my $hash = {};
$hash->{'message_id' } = $message->getId;
- $hash->{'message_url' } = $self->getUrl("module=inbox;do=viewMessage;messageId=".$message->getId);
+ $hash->{'message_url' } = $self->getUrl("module=inbox;do=viewMessage;messageId=".$message->getId,'useUid');
$hash->{'subject' } = $message->get("subject");
$hash->{'status_class' } = $message->get("status");
$hash->{'status' } = $message->getStatus;
@@ -1261,7 +1262,7 @@ sub www_view {
});
$var->{'form_header'} = WebGUI::Form::formHeader($session,{
- action => $self->getUrl("module=inbox;do=deleteMessages")
+ action => $self->getUrl("module=inbox;do=deleteMessages"),
});
$var->{'form_footer'} = WebGUI::Form::formFooter($session);
@@ -1377,7 +1378,7 @@ The page on which users view their messages
sub www_viewMessage {
my $self = shift;
my $session = $self->session;
- my $user = $session->user;
+ my $user = $self->getUser;
my $var = {};
my $messageId = shift || $session->form->get("messageId");
From 9985f3768f3a0bd0420a0f9eb5ebd5c12a60bc3b Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 13:40:41 -0700
Subject: [PATCH 25/35] Allow groupIdAdminUser to view Inbox messages.
---
lib/WebGUI/Inbox.pm | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/WebGUI/Inbox.pm b/lib/WebGUI/Inbox.pm
index 4b7d322d0..765848a8a 100644
--- a/lib/WebGUI/Inbox.pm
+++ b/lib/WebGUI/Inbox.pm
@@ -98,18 +98,22 @@ WebGUI::User object to test against. Defaults to the current user.
sub canRead {
my $self = shift;
+ my $session = $self->session;
my $message = shift;
- my $user = shift || $self->session->user;
+ my $user = shift || $session->user;
unless (ref $message eq "WebGUI::Inbox::Message") {
- $self->session->log->warn("Message passed in was either empty or not a valid WebGUI::Inbox::Message. Got: ".(ref $message));
+ $session->log->warn("Message passed in was either empty or not a valid WebGUI::Inbox::Message. Got: ".(ref $message));
return 0
}
- my $userId = $message->get("userId");
+ my $userId = $message->get("userId");
my $groupId = $message->get("groupId");
- return ($user->userId eq $userId || (defined $groupId && $user->isInGroup($groupId)));
+ return ($user->userId eq $userId
+ || (defined $groupId && $user->isInGroup($groupId))
+ || ($user->isInGroup($session->setting->get('groupIdAdminUser')))
+ );
}
From 54a8167ea9a5aa4ebf5dd93ef555f76f1695fc96 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 13:56:21 -0700
Subject: [PATCH 26/35] Support for removing all users.
---
lib/WebGUI/Account/FriendManager.pm | 8 +++++++-
lib/WebGUI/Help/Account_FriendManager.pm | 1 +
.../i18n/English/Account_FriendManager.pm | 11 +++++++++++
.../root_import_account_friendmanager.wgpkg | Bin 1968 -> 2069 bytes
4 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 92f2f5b85..5bfc4e666 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -194,6 +194,7 @@ sub www_editFriends {
$var->{username} = $user->username;
$var->{userId} = $user->userId;
$var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
+ $var->{removeAll} = WebGUI::Form::checkbox($session, { name => 'removeAllFriends', value => 'all', });
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
@@ -222,8 +223,13 @@ sub www_editFriendsSave () {
$ufriend->add([$userToAdd]);
}
+ ##Remove all has priority, that way we don't delete friends twice.
+ my $removeAll = $form->process('removeAllFriends','checkbox');
my @usersToRemove = $form->process('friendToAxe', 'checkList');
- if (scalar @usersToRemove) {
+ if ($removeAll eq 'all') {
+ $ufriend->delete($user->friends->getUsers());
+ }
+ elsif (scalar @usersToRemove) {
$ufriend->delete(\@usersToRemove);
}
diff --git a/lib/WebGUI/Help/Account_FriendManager.pm b/lib/WebGUI/Help/Account_FriendManager.pm
index 6514ed285..3bece6aaf 100644
--- a/lib/WebGUI/Help/Account_FriendManager.pm
+++ b/lib/WebGUI/Help/Account_FriendManager.pm
@@ -44,6 +44,7 @@ our $HELP = {
{ name => 'checkForm', },
],
},
+ { name => 'removeAll', },
{ name => 'submit',
required => 1, },
{ name => 'formFooter',
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index 612c67bd3..56bac13fa 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -138,6 +138,17 @@ our $I18N = {
lastUpdated => 0,
},
+ 'removeAll' => {
+ message => q{A checkbox to remove all friends from this user.},
+ lastUpdated => 0,
+ },
+
+ 'remove all' => {
+ message => q{Remove all},
+ context => q{Template label. To remove all members of a set, to emtpy it.},
+ lastUpdated => 0,
+ },
+
'submit' => {
message => q{A button with internationalized label to submit the form.},
lastUpdated => 0,
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index ab0ddd050f5b3651e6678a59addca7627401794e..d8e25e82e6f340e75a5a3c8a2629d83284dcb609 100644
GIT binary patch
literal 2069
zcmV+w2vlR_AO2c<$aR~3XAi-a-9M>RSO97Pk0_h2hnGqsVF8
z&@yGtZzSn3qH;pQaxWt{A1Dj?jXAVgPRKdqiKMH?@f$|Odr-;Ka2XMDs|0>caCnKw
zW@F<>s(D0?uUJTD2cviphEI@veMe$GBk0o=)23(?ajg0%A|v(Gj>K4uDeI$la+{4L
zI1DKp_mOXgK3}mbcH~$9CEi#{qB7K?S01^YzV4lnpJ%L<3_3my-;B$(sff%K1n0`3
zv8JGdgMg<@IU_*{3uDZHIl>_!RpmY^U(+xoY?)?Mo(rzHnkSat6>^RRPm|N|r9MZq
zuT`F=NSs7Di;gDV@reN~(TEFlq+s%Th6U1Akl~mdA33lFuAUqpVKfnB^xajXTxKzT
zFQVhC#_?~bOzB;Ua)zVFLmW(z;>g|&WtV$0uvfmeaL??OzkPb-V1SiqPz4fzQmh$F
zL@`W9XoBUnJyYsoU@!_mC?y~^iY=o78JL;)%P0ve2HEcQsK8E*2Ob(}vIs?-C)r)(
zwfhm;y#F?>bXlK&+dmoAJ>w3
z32J^v2k5AgwRq5xeqSUlsM9*Sg03LY?VLR8foFuxr406I-8R(HurnMqT%&2g(jX#O
z^oLwco&xk@Ng*RL9mZ4{GUumiu{i-H1F&^==U#kHCr@{&nK9T*ICsw9?}s7d#P2{
z_57aecUyj^gs7;BEHtY;DAOLK6&=|zSuW44z>kzzd)qCisMK3D?=7%$Moww+hATiM
zFp6yED>RA;OE2$-hjt06wa_>LcQdQH1YIZA+*Sq41PhRkP2}zOUtga6uu5zy
zf8fD1C-j1YqVfe9;WV<`cPls7o-1RJf!XVId%bqotK43Y8I@q(UgQ?Ej!j^g!Soe^
zRDm$zH>XTXyQM}2xVE)2!GR@1ro4`2X~t#8nDauO2n)nKQRg*q6dq?j>0Qq|n09OL`zM8|{-%fxB6-EMD@r=WSc
z%jB*|ZkewRe?Fi8>lFmvZSr>9&~eGij@HcIGK{hAE9gXT+J3_H#d`>>!ZxTZk%jO0e<>5<&D~q7cYo
zh=OH0(uOewiH8GQVZ_mKM;*`-W{AP9Xlv;hPbVF4unazN>=aW4BHIF*V8~`L
zi>a>(beJl|7wCQGn*xDlAZVhH6ai2_XKP8}RMCj){M9Mmz^JV
zr0yYe^hY6hOE&W^G~A$Ji_mO}o=3h5zjF9@g{Nym3q&`z`xrek;x|SZeL_$a=Aw@t
z=_n~APtj-eNJ8EjOmtZ!h6N#&P&S$O5oJ0{)GP98kgg1s5w)@MS$NxNssCOaHea;;
zUz*?Zf%Jl(ydU3|YwunWn&}*_61DHHB2>-!!N%@uceM}R%BKEBkph|IvZ#YV>cUW7
zg)vh)G1j)VNYsl_NaFQ!ZEZC$8iG|{T6PL`lS;B*m}gy?3f1-MYV@6{KiDMvU?FWf
zIKxwNsXg%HdN@z&hrxkBMWO(m6-M#`jVV=BII^AULM74KeRTmcvqNt~bs;Y<==uR#
zO|idPb>Rzm+@reSdCf{8`>#=5IPCTg{Z55VyQ(gjGEre-?o?fnH_63^S8Y6*Pk(uS
zai->PY4mQvPTi%tP+`e^s|zc{0iHfo7i!bV)%+j)=+-)a79_yf)c^CketRkZ_dD%}
z{$DM>wmo>?{67nL%2IFDH~sZ`g9|0#YK#`ummmv6c;^_c3LeUMqJY8^xO#V5B#?mE?2~Tb1+V3D}kCKM()6~(DeM74$O>E
zC_Xxs^X}3v35ku4pyX?A3O&Lcift#V3CX$=d8a~m_^ODN75AD(^TuvWdCJB}=>s2r
zBmp#JPI#m_Qt(x`u~!-{UkZuxYm~=qh=Tq|C#3{%kMIVJX}NDh2gJ1Ke@CO^u;aBm
z-lEjjH#(rBV4BPugspp6;=0pdLu=z8N+x(n6!f&B$o@w|Mb;Oa9e*SoStigzICB2X
z*quV%%u7X06G54&A6)2+HP@u|B!vH@dgzpF+f6>4_dtQaB?bNu3i=k`04e|gJzx6Q
literal 1968
zcmV;h2T%APiwFP!00000|Ls|AQ`$SBt{B^4O*Q&y=
zk$uW*mSs7P17ycpGc2oIt*jX^W%Zv(Dk5NMF85i`pD!c+#G!L=JfA^p+6Hz
zuiDDLYc>6BZ+?_KSkgj)qm$Tumi;S^kAfm{8}?D=L9(lcqrL4JANHd@fJez$eUaUy-|W3QsSMF
z?({?=B~{5J|G=g<{ll#meK!oM;jU9*-m7jdJrcfVE;v^v8{pnd;<`Kvl-UuC2Ht=K
zpf+JrkEwhflZVXnXfU}OCQk%cT#dq56NQa-1&_ibZy))fVyihfMF*juDsQ`I@3gdN
zX>_cp8_(VJKH9VxeRg&j2oansK{Qkj?p9XD&B;|*B%=hF4#~$y)1PG
zZ|Hyz>17Eiy~@sqqd*~d#dtvcM?zDLWcK=QtdgsEUB|IX9zTI~RJ1_S_NjglJKL(a
z^Gnc{AyDBF|4#6(mDew5`{3;nGQc6G%9rhP9;RZi@K3@Pck2PSR2OcKy8RYx8>f4E
zP?20vRZLA}n3_S#*Hr1kO;8RpiRr9^&*S>q^}Kn?BA#b}f2Yfyr!Cw|uB|tK
zViWNhT}JHzQ+iwJ6tr;*+!Sn_dkzbFR50~c_$|Q)Cq&R7_O62C!J$W!$S>umKv|y%
z=~<9-)E@E*yi7Z3Y^Y{)7h|f~JWCyQJm{bGNYI^^F^;*%It+3FI=y9Awk*5s*o|DG
zV#<%D#qMP!{$*gO81Xxq4^QIgoY6R!)N>M(I0bDQ3(G08&%#$+!9rZ^;+kI2(SQcg
z+1=KG=`PaQr$jdsreTo;-a0=TEi2%zl(r&YPcy|19TGvdz
z@;U90$d8S06*i7ZIkAtHxwTc_+N#y$@f#ErF(BoT8giI_ScX6{4-SBye+GDD6c-6W~k*q+tuh>i1;a_ivY#s1#;
z=o2_Y#)Qe!k%XK&X=J_6RDGqwI>B%Bu{O(d^l3P$oN~>oZxtL5Yzl#wo;lnS;Z0Cc
zjdv%bUk{+BtkKuq5+1o<9(-BGiGDX8b7J25f%TtLg<@~K{;yW7+I{_ZH%oro=>I|e
zSK3BoXY>T^KymY7AL~Q;$Q(t?Y)8!Z%nlEfjK4PqEZB6VeEj6H1R**75!44JQjL5H
zH7r#y4C^^~r=ajOVJf^a@ob(YG?(cS$i0|SOnn+i6AqyOzRAGMNZCS`B{U>m22~sv
z(?T=Sj}+RDl;UIhzV%K)!O|5hRE898!K}H4BgK4%_{GegAgN6owrIYOWJqGRP|j_e
z@go}ZE3yzQoA{;uXO@)Mla?WCM0%WWczm!yhj6Z#6aTY4E<+aeDHK1-On&F?ZW*#N
z4>Yrf1QuL{k_8waZaJMUERGy5${5d-N55&15T?L_GZA@&;TsM
z=1|`UMtZHFNeCV>w`O2AdyDxNhGVuxVa$W9J~8YFusr7F1Q2KG8Sg(lbu~TOc&f2?
z3{*GAu*K#v>C-bjfgjD5vp)MZ93TM6GttSVKz3<>ODkApIS9OfMplo&0lqYBC*Q*)
z0#5-rVr*j?hyE}G{*`sy0fF0gxp0yB?||Tq`c|Xj6wI_L2(GVEvJ`VG2rjR~(~E-|
z>5cmDpPe47(QD?v8Ou|*f#3y`+!caPDd(q#;NJ$^mNaV`|HC=Dw9ZewNRY9p|6|uH
zwF&$Wo?X7j|4TCQLN<5B|4G4T&n<
zSxy@37!@?Spksu$vVi2D5omUtu>s{#e7#$7%7xq8F(@OPda&w>F=5L!}p=#2-!uf53g&m80dkZV2
z3*P=nU1(agxQ`ae?22v7siwr&N}_ZdIhzGl(D!s3ashWJZz@hLpSPe*P*nR}x&aNx
zt~vI&*Us(+z_q(>WiD{GdZ8Jz(qaRnan}!fq)ip{eSAOeXcv5ayd&^E<;bLh#>$bC
zJ&g^saMKTkFbxF@^!>pp!pby~=Bp5H(*L=3!osuWo_Mc;dky?t8u%L!qb|DuC;$K?
CBHKLx
From 03b777ee1ef9415d16ef624356c67c8e66796c32 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Tue, 7 Apr 2009 15:54:30 -0700
Subject: [PATCH 27/35] Add button to add all Friend Managers to friends.
Help, i18n, template and code.
---
lib/WebGUI/Account/FriendManager.pm | 6 ++++++
lib/WebGUI/Help/Account_FriendManager.pm | 3 ++-
.../i18n/English/Account_FriendManager.pm | 11 +++++++++++
.../root_import_account_friendmanager.wgpkg | Bin 2069 -> 2130 bytes
4 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 5bfc4e666..0270dbc34 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -195,6 +195,7 @@ sub www_editFriends {
$var->{userId} = $user->userId;
$var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
$var->{removeAll} = WebGUI::Form::checkbox($session, { name => 'removeAllFriends', value => 'all', });
+ $var->{addManagers} = WebGUI::Form::checkbox($session, { name => 'addManagers', value => 'addManagers', });
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
@@ -222,6 +223,11 @@ sub www_editFriendsSave () {
if ($userToAdd) {
$ufriend->add([$userToAdd]);
}
+ my $addManagers = $form->process('addManagers', 'checkbox');
+ if ($addManagers eq 'addManagers') {
+ my $managerGroup = WebGUI::Group->new($session, $session->setting->get('groupIdAdminFriends'));
+ $ufriend->add($managerGroup->getUsers());
+ }
##Remove all has priority, that way we don't delete friends twice.
my $removeAll = $form->process('removeAllFriends','checkbox');
diff --git a/lib/WebGUI/Help/Account_FriendManager.pm b/lib/WebGUI/Help/Account_FriendManager.pm
index 3bece6aaf..06bf30e89 100644
--- a/lib/WebGUI/Help/Account_FriendManager.pm
+++ b/lib/WebGUI/Help/Account_FriendManager.pm
@@ -44,7 +44,8 @@ our $HELP = {
{ name => 'checkForm', },
],
},
- { name => 'removeAll', },
+ { name => 'removeAll', },
+ { name => 'addManagers', },
{ name => 'submit',
required => 1, },
{ name => 'formFooter',
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index 56bac13fa..d80a6d8f7 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -149,6 +149,17 @@ our $I18N = {
lastUpdated => 0,
},
+ 'addManagers' => {
+ message => q{A checkbox to add all users in the Friend Manager group to this users's list of Friends.},
+ lastUpdated => 0,
+ },
+
+ 'Add Friend Managers' => {
+ message => q{Add Friend Managers},
+ context => q{Template label. To add all Friend Managers to this list of friends.},
+ lastUpdated => 0,
+ },
+
'submit' => {
message => q{A button with internationalized label to submit the form.},
lastUpdated => 0,
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index d8e25e82e6f340e75a5a3c8a2629d83284dcb609..6991502087cab747053dfe53e6107952c9707905 100644
GIT binary patch
literal 2130
zcmV-Y2(9-YiwFP!00000|Ls~^bKAHT_VfMSaBzXAX0~-G
z)jT3cmn@*Oy-7R@f@jD+{++~pM$p$wrsK^d;#dt)L?-IF9f`4+QZ_{W9klDmj>^r*rSv#0wgqNB^!(eI~B>9-W+3`bAL*uO@KBP$1#3F6tvis#DGeP_k<^YcRo1Fb}p
zDwqJ4Vy$~3ieWlIA(mHmPpOAN_s9opmB82}wl)CFz)a{avm~sAWN$aK0&i+Q@Yood
zWhml2$<89L^dDx4=x;7FoI!Wg!t%fft+z9-m=Bn032~r$Ws^vcTIalW^N4TvN=#UKaX&5-EWq&A32-=kbMfx&syL~9%l+$IFAGVL%9mt<)5vPSQ=Y7<
zPeb$IU~q8IA9O1gBFKzNh@3C;;9RFB$ORBp3qz_<2>Hz^(~e|?R3WazxJp(qVjw$A=}jG
z-;@<~7GPwMi?&rcgDE#wgyRl+u2)h7or34(S(SH0a?4z`|J&L8udkt|?~@PHmM(d|
z{q$`c71f_>kA|Sr`GNJn*Xwpx>;K+k{r@8@>Av-UV}XB1W3c7=e@*RO(;Dc`J}**#
zf2CUo`P7-G)ETEV3Y-aNO4{$;n6f=z%AXuzD?BS-`#f+-cChan1<=?Wai6cBdc
zRTyz}aZpFJq#0nyTsqb{CcQ}q@*{(996QBS!N|6VCKwtW487he(PHXH5*?>X@dbHr
zd{Pjw^aV{6lEMe+=V~n_oGKbo-M>1;69lzY#a7k#8PBlY)>MA>Q7iKfS{f{I^p~-p
zIx5zXwn1x-L(X>t9`BMFtfZN>9T@3qm)s`v^TT<~KzceMJBYb1_6ubd?m4=ja=HBB43-
zLk)|>uppokV3YX}QKnlty&?ySG-y;7p(e^_HK^B9U(Wa2FZ=F4+kfFB+4cX?{q;k+
zc60P-ru(v@K5v43)*wY2BSO`lA7bpTPFK5-t!(RGfE37VSl}SgUoe!TFlI{kr#iM4
z-E=Vuowi=Cqpc=J1BmKN%T56|sdVH;c-F{NpsrR|qhAdEV0+=ch2CcG9ljGXISp@Gv`AZ
z6F{qdaAr|;h(U9Ue-}7V*U8_($691y5mM-O+ZCkx&jA7K4-WQSuhQi{6a-)tS%jF4
zAb^<~y~X1*{x%e^)9|=|`X#(R8QlmG$uT?@UrW*E9h~S
zjf)$&uzrM*X?`VMXRm9jR4r+Tr#gQw!wbM>w^{>+8akv65=sYa3vK*_Fon%w!Xb`
zWLZE9<;dBwi93b6nTJaKoe0VdesHck*4&etMF{^%_5XXFvDMu8xY?rw{?{e&Ur0*T
I$p9(<0Qub*XaE2J
literal 2069
zcmV+w2vlR_AO2c<$aR~3XAi-a-9M>RSO97Pk0_h2hnGqsVF8
z&@yGtZzSn3qH;pQaxWt{A1Dj?jXAVgPRKdqiKMH?@f$|Odr-;Ka2XMDs|0>caCnKw
zW@F<>s(D0?uUJTD2cviphEI@veMe$GBk0o=)23(?ajg0%A|v(Gj>K4uDeI$la+{4L
zI1DKp_mOXgK3}mbcH~$9CEi#{qB7K?S01^YzV4lnpJ%L<3_3my-;B$(sff%K1n0`3
zv8JGdgMg<@IU_*{3uDZHIl>_!RpmY^U(+xoY?)?Mo(rzHnkSat6>^RRPm|N|r9MZq
zuT`F=NSs7Di;gDV@reN~(TEFlq+s%Th6U1Akl~mdA33lFuAUqpVKfnB^xajXTxKzT
zFQVhC#_?~bOzB;Ua)zVFLmW(z;>g|&WtV$0uvfmeaL??OzkPb-V1SiqPz4fzQmh$F
zL@`W9XoBUnJyYsoU@!_mC?y~^iY=o78JL;)%P0ve2HEcQsK8E*2Ob(}vIs?-C)r)(
zwfhm;y#F?>bXlK&+dmoAJ>w3
z32J^v2k5AgwRq5xeqSUlsM9*Sg03LY?VLR8foFuxr406I-8R(HurnMqT%&2g(jX#O
z^oLwco&xk@Ng*RL9mZ4{GUumiu{i-H1F&^==U#kHCr@{&nK9T*ICsw9?}s7d#P2{
z_57aecUyj^gs7;BEHtY;DAOLK6&=|zSuW44z>kzzd)qCisMK3D?=7%$Moww+hATiM
zFp6yED>RA;OE2$-hjt06wa_>LcQdQH1YIZA+*Sq41PhRkP2}zOUtga6uu5zy
zf8fD1C-j1YqVfe9;WV<`cPls7o-1RJf!XVId%bqotK43Y8I@q(UgQ?Ej!j^g!Soe^
zRDm$zH>XTXyQM}2xVE)2!GR@1ro4`2X~t#8nDauO2n)nKQRg*q6dq?j>0Qq|n09OL`zM8|{-%fxB6-EMD@r=WSc
z%jB*|ZkewRe?Fi8>lFmvZSr>9&~eGij@HcIGK{hAE9gXT+J3_H#d`>>!ZxTZk%jO0e<>5<&D~q7cYo
zh=OH0(uOewiH8GQVZ_mKM;*`-W{AP9Xlv;hPbVF4unazN>=aW4BHIF*V8~`L
zi>a>(beJl|7wCQGn*xDlAZVhH6ai2_XKP8}RMCj){M9Mmz^JV
zr0yYe^hY6hOE&W^G~A$Ji_mO}o=3h5zjF9@g{Nym3q&`z`xrek;x|SZeL_$a=Aw@t
z=_n~APtj-eNJ8EjOmtZ!h6N#&P&S$O5oJ0{)GP98kgg1s5w)@MS$NxNssCOaHea;;
zUz*?Zf%Jl(ydU3|YwunWn&}*_61DHHB2>-!!N%@uceM}R%BKEBkph|IvZ#YV>cUW7
zg)vh)G1j)VNYsl_NaFQ!ZEZC$8iG|{T6PL`lS;B*m}gy?3f1-MYV@6{KiDMvU?FWf
zIKxwNsXg%HdN@z&hrxkBMWO(m6-M#`jVV=BII^AULM74KeRTmcvqNt~bs;Y<==uR#
zO|idPb>Rzm+@reSdCf{8`>#=5IPCTg{Z55VyQ(gjGEre-?o?fnH_63^S8Y6*Pk(uS
zai->PY4mQvPTi%tP+`e^s|zc{0iHfo7i!bV)%+j)=+-)a79_yf)c^CketRkZ_dD%}
z{$DM>wmo>?{67nL%2IFDH~sZ`g9|0#YK#`ummmv6c;^_c3LeUMqJY8^xO#V5B#?mE?2~Tb1+V3D}kCKM()6~(DeM74$O>E
zC_Xxs^X}3v35ku4pyX?A3O&Lcift#V3CX$=d8a~m_^ODN75AD(^TuvWdCJB}=>s2r
zBmp#JPI#m_Qt(x`u~!-{UkZuxYm~=qh=Tq|C#3{%kMIVJX}NDh2gJ1Ke@CO^u;aBm
z-lEjjH#(rBV4BPugspp6;=0pdLu=z8N+x(n6!f&B$o@w|Mb;Oa9e*SoStigzICB2X
z*quV%%u7X06G54&A6)2+HP@u|B!vH@dgzpF+f6>4_dtQaB?bNu3i=k`04e|gJzx6Q
From d13d1bac8c51bb20714d418b7ae646998ec91e6d Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Thu, 9 Apr 2009 16:02:58 -0700
Subject: [PATCH 28/35] Group filters and list of names.
For each group, show all other managed groups. Also
provide an edit all link. Show list of names up to 45
characters, with no truncation.
---
lib/WebGUI/Account/FriendManager.pm | 32 ++++++++++++---
.../build/friendManager/friendManager.js | 40 ++++++++++---------
2 files changed, 49 insertions(+), 23 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 0270dbc34..b44658d19 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -182,7 +182,7 @@ sub www_editFriends {
$var->{formHeader} = WebGUI::Form::formHeader($session, {
action => $self->getUrl('module=friendManager;do=editFriendsSave'),
})
- . WebGUI::Form::hidden($session, { name => 'userId', value => $userId } );
+ . WebGUI::Form::hidden($session, { name => 'userId', value => $user->userId } );
$var->{addUserForm} = WebGUI::Form::selectBox($session, {
name => 'userToAdd',
options => \%usersToAdd,
@@ -269,14 +269,36 @@ sub www_getFriendsAsJson {
return '{}';
}
my @records = ();
+ my $groups = $session->setting->get('groupsToManageFriends');
+ my @groupIds = split "\n", $groups;
+ @groupIds = grep { $_ ne $groupId } @groupIds;
+ my $groupNames = join "\n",
+ map { $_->name }
+ map { WebGUI::Group->new($session, $_) }
+ @groupIds;
USER: foreach my $userId (@{ $group->getUsers} ) {
my $user = WebGUI::User->new($session, $userId);
next USER unless $user;
- my $friendsCount = scalar @{ $user->friends->getUsers() };
+ my $friendsList = $user->friends->getUserList();
+ my $friendsCount = scalar keys %{ $friendsList };
+ my $friends = '';
+ NAME: foreach my $name ( values %{ $friendsList }) {
+ if (length $friends + length $name < 45) {
+ if ($friends) {
+ $friends .= ', ';
+ }
+ $friends .= $name;
+ }
+ else {
+ last NAME;
+ }
+ }
push @records, {
- userId => $userId,
- username => $user->username,
- friends => $friendsCount,
+ userId => $userId,
+ username => $user->username,
+ friendsCount => $friendsCount,
+ friends => $friends,
+ groups => $groupNames,
};
}
##Sort by username to make the datatable happy
diff --git a/www/extras/yui-webgui/build/friendManager/friendManager.js b/www/extras/yui-webgui/build/friendManager/friendManager.js
index c318ac299..f439b51f7 100644
--- a/www/extras/yui-webgui/build/friendManager/friendManager.js
+++ b/www/extras/yui-webgui/build/friendManager/friendManager.js
@@ -40,9 +40,11 @@ WebGUI.FriendManager.responseSchema
= {
resultsList: 'records',
fields: [
- { key: 'userId', parser: 'string' },
- { key: 'username', parser: 'string' },
- { key: 'friends', parser: 'number' },
+ { key: 'userId', parser: 'string' },
+ { key: 'username', parser: 'string' },
+ { key: 'friendsCount', parser: 'number' },
+ { key: 'friends', parser: 'string' },
+ { key: 'groups', parser: 'string' },
],
metaFields: {
totalRecords: "recordsReturned" // Access to value in the server response
@@ -50,27 +52,29 @@ WebGUI.FriendManager.responseSchema
};
WebGUI.FriendManager.formatUsername = function ( el, oRecord, oColumn, oData ) {
-// var link = document.createElement('a');
-// var myId = YAHOO.util.Dom.generateId();
-// elCell.innerHTML = '';
-// var editButton = new YAHOO.widget.Button( myId,
-// {
-// type : "link",
-// href : "?op=account;module=friendManager;do=editFriends;uid="+oRecord.getData('userId'),
-// label : "EDIT",
-// }
-// );
var userId = oRecord.getData('userId');
- el.innerHTML = 'edit ';
- el.innerHTML += '' + oData + '';
+ el.innerHTML = '' + oData + '';
+}
+
+WebGUI.FriendManager.formatGroups = function ( el, oRecord, oColumn, oData ) {
+ var userId = oRecord.getData('userId');
+ el.innerHTML = 'Edit all';
+ var groups = oData.split("\n");
+ for (var idx=0; idx < groups.length; idx++) {
+ var group = groups[idx];
+ el.innerHTML += ' ';
+ el.innerHTML += ''+group+'';
+ }
}
WebGUI.FriendManager.ColumnDefs = [ // sortable:true enables sorting
//{key:"username", label:WebGUI.FriendManager.i18n.get('WebGUI', '50' ), sortable: true},
//{key:"friends", label:WebGUI.FriendManager.i18n.get('Account_Friends', 'title' ), sortable: true},
- {key:"username", label:"username", sortable: true, formatter: WebGUI.FriendManager.formatUsername },
- {key:"friends", label:"friends", sortable: true},
- {key:"userId", label:"userId", sortable: true},
+ {key:"groups", label:"groups", sortable: false, formatter: WebGUI.FriendManager.formatGroups },
+ {key:"username", label:"username", sortable: true, formatter: WebGUI.FriendManager.formatUsername },
+ {key:"friendsCount", label:"friendsCount", sortable: true},
+ {key:"friends", label:"friends", sortable: false},
+ {key:"userId", label:"userId", sortable: true},
];
//Per object code
From c6468321c159cef7f6da6f4a8aa5fce36d8d328e Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Thu, 9 Apr 2009 16:30:20 -0700
Subject: [PATCH 29/35] Pass groupName down to editFriends.
Do not display add managers if a groupname is passed.
---
lib/WebGUI/Account/FriendManager.pm | 24 +++++++++++++-----
.../root_import_account_friendmanager.wgpkg | Bin 2130 -> 2210 bytes
.../build/friendManager/friendManager.js | 5 ++--
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index b44658d19..ff37b33cb 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -133,6 +133,8 @@ sub www_editFriends {
my $userId = shift || $form->get('userId', 'guid');
my $user = WebGUI::User->new($session, $userId);
+ my $groupName = shift || $form->get('groupName');
+
##List users in my friends group. Each friend gets a delete link.
my $friendsList = $user->friends->getUserList();
my @friends_loop = ();
@@ -149,14 +151,20 @@ sub www_editFriends {
##List users in all administrated groups. Friends are added one at a time.
my @manageableUsers = ();
- my $groupIds = $session->setting->get('groupsToManageFriends');
- my @groupIds = split "\n", $groupIds;
- foreach my $groupId (@groupIds) {
- my $group = WebGUI::Group->new($session, $groupId);
- next GROUP unless $group->getId || $group->getId eq 'new';
+ if ($groupName) {
+ my $group = WebGUI::Group->find($session, $groupName);
push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') };
}
- @manageableUsers = uniq @manageableUsers;
+ else {
+ my $groupIds = $session->setting->get('groupsToManageFriends');
+ my @groupIds = split "\n", $groupIds;
+ foreach my $groupId (@groupIds) {
+ my $group = WebGUI::Group->new($session, $groupId);
+ next GROUP unless $group->getId || $group->getId eq 'new';
+ push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') };
+ }
+ @manageableUsers = uniq @manageableUsers;
+ }
my %usersToAdd = ();
tie %usersToAdd, 'Tie::IxHash';
my $manager = $session->user;
@@ -195,7 +203,9 @@ sub www_editFriends {
$var->{userId} = $user->userId;
$var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
$var->{removeAll} = WebGUI::Form::checkbox($session, { name => 'removeAllFriends', value => 'all', });
- $var->{addManagers} = WebGUI::Form::checkbox($session, { name => 'addManagers', value => 'addManagers', });
+ if (! $groupName) {
+ $var->{addManagers} = WebGUI::Form::checkbox($session, { name => 'addManagers', value => 'addManagers', });
+ }
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 6991502087cab747053dfe53e6107952c9707905..403432270ba96782b324d7e93c31f14246cb8bc7 100644
GIT binary patch
literal 2210
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
I$p9(<0Qub*XaE2J
diff --git a/www/extras/yui-webgui/build/friendManager/friendManager.js b/www/extras/yui-webgui/build/friendManager/friendManager.js
index f439b51f7..126d4adb0 100644
--- a/www/extras/yui-webgui/build/friendManager/friendManager.js
+++ b/www/extras/yui-webgui/build/friendManager/friendManager.js
@@ -61,9 +61,10 @@ WebGUI.FriendManager.formatGroups = function ( el, oRecord, oColumn, oData ) {
el.innerHTML = 'Edit all';
var groups = oData.split("\n");
for (var idx=0; idx < groups.length; idx++) {
- var group = groups[idx];
+ var group = groups[idx];
+ var groupUri = encodeURI(group);
el.innerHTML += ' ';
- el.innerHTML += ''+group+'';
+ el.innerHTML += ''+group+'';
}
}
From 1f5a83d0c6f38f44fa68a0a3423b2cda839ac87b Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Thu, 9 Apr 2009 16:43:41 -0700
Subject: [PATCH 30/35] Maintain group filter setting after saving.
---
lib/WebGUI/Account/FriendManager.pm | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index ff37b33cb..571a127fe 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -191,6 +191,9 @@ sub www_editFriends {
action => $self->getUrl('module=friendManager;do=editFriendsSave'),
})
. WebGUI::Form::hidden($session, { name => 'userId', value => $user->userId } );
+ if ($groupName) {
+ $var->{formHeader} .= WebGUI::Form::hidden($session, { name => 'groupName', value => $groupName });
+ }
$var->{addUserForm} = WebGUI::Form::selectBox($session, {
name => 'userToAdd',
options => \%usersToAdd,
@@ -249,7 +252,8 @@ sub www_editFriendsSave () {
$ufriend->delete(\@usersToRemove);
}
- return $self->www_editFriends($userId);
+ my $groupName = $form->process('groupName');
+ return $self->www_editFriends($userId, $groupName);
}
#-------------------------------------------------------------------
From a5c7e2b39b02088af11d8631724916b7bf5e6548 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Thu, 9 Apr 2009 17:22:07 -0700
Subject: [PATCH 31/35] Fix JS errors, add ableToBeFriend profile override.
---
lib/WebGUI/Account/FriendManager.pm | 14 +++++++++++---
.../i18n/English/Account_FriendManager.pm | 10 ++++++++++
sbin/installFriendManager.pl | 1 +
.../root_import_account_friendmanager.wgpkg | Bin 2210 -> 2126 bytes
.../build/friendManager/friendManager.js | 3 +++
5 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 571a127fe..809c52959 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -91,6 +91,12 @@ sub editSettingsForm {
label => $i18n->get("edit template label"),
hoverHelp => $i18n->get("edit template hoverHelp"),
);
+ $f->yesNo(
+ name => "overrideAbleToBeFriend",
+ value => $self->session->setting->get("overrideAbleToBeFriend"),
+ label => $i18n->get("override abletobefriend label"),
+ hoverHelp => $i18n->get("override abletobefriend hoverHelp"),
+ );
return $f->printRowsOnly;
}
@@ -112,8 +118,9 @@ sub editSettingsFormSave {
$setting->set("fmViewTemplateId", $form->process("fmViewTemplateId", "template"));
$setting->set("fmEditTemplateId", $form->process("fmEditTemplateId", "template"));
my $groupsToManageFriends = $form->process("groupsToManageFriends", "group");
- $setting->set("groupsToManageFriends", $groupsToManageFriends);
- $setting->set("groupIdAdminFriends", $form->process("groupIdAdminFriends", "group"));
+ $setting->set("groupsToManageFriends", $groupsToManageFriends);
+ $setting->set("groupIdAdminFriends", $form->process("groupIdAdminFriends", "group"));
+ $setting->set("overrideAbleToBeFriend", $form->process("overrideAbleToBeFriend", "yesNo"));
}
#-------------------------------------------------------------------
@@ -171,13 +178,14 @@ sub www_editFriends {
my $i18n = WebGUI::International->new($session);
$usersToAdd{0} = $i18n->get('Select One');
my @usersToAdd = ();
+ my $overrideProfile = $session->setting->get('overrideAbleToBeFriend');
USERID: foreach my $newFriendId (@manageableUsers) {
next USERID if $newFriendId eq $userId;
my $user = WebGUI::User->new($session, $newFriendId);
##We don't use acceptsFriendsRequests here because it's overkill.
##No need to check invitations, since friends are managed.
##Existing friends are already filtered out.
- next USERID unless $user->profileField('ableToBeFriend');
+ next USERID unless $user->profileField('ableToBeFriend') || $overrideProfile;
push @usersToAdd, [ $newFriendId, $user->username ];
}
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index d80a6d8f7..ead739a8b 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -43,6 +43,16 @@ our $I18N = {
lastUpdated => 0,
},
+ 'override abletobefriend label' => {
+ message => q{Override ableToBeFriend profile setting?},
+ lastUpdated => 0,
+ },
+
+ 'override abletobefriend hoverHelp' => {
+ message => q{If a user has set their ableToBeFriend profile option to 'No', then the Friend Manager will not display them as a friend to be added. If this option is set to Yes, then the Friend Manager will allow managing them.},
+ lastUpdated => 0,
+ },
+
'title' => {
message => q{Friend Manager},
lastUpdated => 0,
diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl
index bc1f6e54b..bdfb04dbe 100644
--- a/sbin/installFriendManager.pl
+++ b/sbin/installFriendManager.pl
@@ -47,6 +47,7 @@ sub installFriendManagerSettings {
$session->setting->add('fmViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ');
$session->setting->add('fmEditTemplateId', 'lG2exkH9FeYvn4pA63idNg');
$session->setting->add('groupsToManageFriends', '2');
+ $session->setting->add('overrideAbleToBeFriend', 0);
print "\tDone";
}
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index 403432270ba96782b324d7e93c31f14246cb8bc7..dd4d8d933a9e89e09f4d728b69cea3d79bae72bd 100644
GIT binary patch
literal 2126
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
Date: Thu, 9 Apr 2009 20:06:15 -0700
Subject: [PATCH 32/35] Add script for user priming.
---
sbin/addUsersForTesting.pl | 132 +++++++++++++++++++++++++++++++++++++
1 file changed, 132 insertions(+)
create mode 100644 sbin/addUsersForTesting.pl
diff --git a/sbin/addUsersForTesting.pl b/sbin/addUsersForTesting.pl
new file mode 100644
index 000000000..cf637f191
--- /dev/null
+++ b/sbin/addUsersForTesting.pl
@@ -0,0 +1,132 @@
+#!/usr/bin/env perl
+
+#-------------------------------------------------------------------
+# Copyright 2009 SDH Corporation.
+#-------------------------------------------------------------------
+
+$|++; # disable output buffering
+our ($webguiRoot, $configFile, $help, $man);
+
+BEGIN {
+ $webguiRoot = "..";
+ unshift (@INC, $webguiRoot."/lib");
+}
+
+use strict;
+use Pod::Usage;
+use Getopt::Long;
+use WebGUI::Session;
+use WebGUI::Utility;
+
+# Get parameters here, including $help
+GetOptions(
+ 'configFile=s' => \$configFile,
+ 'help' => \$help,
+ 'man' => \$man,
+);
+
+pod2usage( verbose => 1 ) if $help;
+pod2usage( verbose => 2 ) if $man;
+pod2usage( msg => "Must specify a config file!" ) unless $configFile;
+
+my $session = start( $webguiRoot, $configFile );
+
+my $inmates = WebGUI::Group->new($session, 'new');
+$inmates->name("Inmates");
+
+my $staff = WebGUI::Group->new($session, 'new');
+$staff->name("Corrections Staff");
+
+my @inmateNames = qw/Red Andy Bogs Brooks Tommy Heywood/;
+my @staffNames = qw/Norton Hadley Trout/;
+
+foreach my $con (@inmateNames) {
+ my $user = WebGUI::User->create($session);
+ $user->username($con);
+ $user->addToGroups([$inmates->getId]);
+}
+
+foreach my $guy (@staffNames) {
+ my $user = WebGUI::User->create($session);
+ $user->username($guy);
+ $user->addToGroups([$staff->getId]);
+}
+
+# Do your work here
+finish($session);
+
+#----------------------------------------------------------------------------
+sub start {
+ my $webguiRoot = shift;
+ my $configFile = shift;
+ my $session = WebGUI::Session->open($webguiRoot,$configFile);
+ $session->user({userId=>3});
+
+ ## If your script is adding or changing content you need these lines, otherwise leave them commented
+ #
+ # my $versionTag = WebGUI::VersionTag->getWorking($session);
+ # $versionTag->set({name => 'Name Your Tag'});
+ #
+ ##
+
+ return $session;
+}
+
+#----------------------------------------------------------------------------
+sub finish {
+ my $session = shift;
+
+ ## If your script is adding or changing content you need these lines, otherwise leave them commented
+ my $versionTag = WebGUI::VersionTag->getWorking($session);
+ $versionTag->commit;
+
+ $session->var->end;
+ $session->close;
+}
+
+__END__
+
+
+=head1 NAME
+
+utility - A template for WebGUI utility scripts
+
+=head1 SYNOPSIS
+
+ utility --configFile config.conf ...
+
+ utility --help
+
+=head1 DESCRIPTION
+
+This WebGUI utility script helps you...
+
+=head1 ARGUMENTS
+
+=head1 OPTIONS
+
+=over
+
+=item B<--configFile config.conf>
+
+The WebGUI config file to use. Only the file name needs to be specified,
+since it will be looked up inside WebGUI's configuration directory.
+This parameter is required.
+
+=item B<--help>
+
+Shows a short summary and usage
+
+=item B<--man>
+
+Shows this document
+
+=back
+
+=head1 AUTHOR
+
+Copyright 2001-2008 Plain Black Corporation.
+
+=cut
+
+#vim:ft=perl
From 8f5e9aac1fa58b65de329f6498cb211fd84da299 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Fri, 10 Apr 2009 10:04:43 -0700
Subject: [PATCH 33/35] Change display of groups on manage friends screen
If 1 group, display it. If more than 1, display all groups
but this one.
---
lib/WebGUI/Account/FriendManager.pm | 6 ++++--
www/extras/yui-webgui/build/friendManager/friendManager.js | 6 ++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 809c52959..2038b0b47 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -293,7 +293,9 @@ sub www_getFriendsAsJson {
my @records = ();
my $groups = $session->setting->get('groupsToManageFriends');
my @groupIds = split "\n", $groups;
- @groupIds = grep { $_ ne $groupId } @groupIds;
+ if (scalar @groupIds > 1) {
+ @groupIds = grep { $_ ne $groupId } @groupIds;
+ }
my $groupNames = join "\n",
map { $_->name }
map { WebGUI::Group->new($session, $_) }
@@ -341,7 +343,7 @@ sub www_getFriendsAsJson {
=head2 www_view ( )
-The main view page for editing the user's profile.
+The main view page for editing the user's friends.
=cut
diff --git a/www/extras/yui-webgui/build/friendManager/friendManager.js b/www/extras/yui-webgui/build/friendManager/friendManager.js
index 0aabf67e9..b44537dcb 100644
--- a/www/extras/yui-webgui/build/friendManager/friendManager.js
+++ b/www/extras/yui-webgui/build/friendManager/friendManager.js
@@ -61,12 +61,14 @@ WebGUI.FriendManager.formatUsername = function ( el, oRecord, oColumn, oData ) {
WebGUI.FriendManager.formatGroups = function ( el, oRecord, oColumn, oData ) {
var userId = oRecord.getData('userId');
- el.innerHTML = 'Edit all';
+ el.innerHTML = '';
var groups = oData.split("\n");
for (var idx=0; idx < groups.length; idx++) {
var group = groups[idx];
var groupUri = encodeURI(group);
- el.innerHTML += ' ';
+ if (el.innerHTML) {
+ el.innerHTML += ' ';
+ }
el.innerHTML += ''+group+'';
}
}
From ad025a26a1ad49a9dbce5330746032506b90e840 Mon Sep 17 00:00:00 2001
From: Colin Kuskie
Date: Fri, 10 Apr 2009 10:18:35 -0700
Subject: [PATCH 34/35] Move view all users filter into edit friends.
---
lib/WebGUI/Account/FriendManager.pm | 4 ++++
.../i18n/English/Account_FriendManager.pm | 5 +++++
.../root_import_account_friendmanager.wgpkg | Bin 2126 -> 2226 bytes
3 files changed, 9 insertions(+)
diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm
index 2038b0b47..44bcf36e9 100644
--- a/lib/WebGUI/Account/FriendManager.pm
+++ b/lib/WebGUI/Account/FriendManager.pm
@@ -217,6 +217,10 @@ sub www_editFriends {
if (! $groupName) {
$var->{addManagers} = WebGUI::Form::checkbox($session, { name => 'addManagers', value => 'addManagers', });
}
+ if ($groupName) {
+ $var->{groupName} = $groupName;
+ $var->{viewAllUrl} = $self->getUrl('module=friendManager;do=editFriends;userId='.$userId);
+ }
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
}
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index ead739a8b..fd54a01f8 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -180,6 +180,11 @@ our $I18N = {
lastUpdated => 0,
},
+ 'view users from all groups' => {
+ message => q{View users from all groups.},
+ lastUpdated => 0,
+ },
+
};
1;
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index dd4d8d933a9e89e09f4d728b69cea3d79bae72bd..f3015ae421e161e616eef7df537a677aa02ac2b4 100644
GIT binary patch
literal 2226
zcmV;j2u=4NiwFP!00000|Ls~?bKABS_H%y)MtMjwV~g5l$*yOV#j$(i)Qz3Ei`xuD
zLK0#UU;$9Jn#q5^2LM-zl$Vh^Z6|t=XaK}HIQw_t`qtxr8jVK3-`(2MzrBw6ZFb-n
zrJu%Dv)SzRd;NZ=(cePNW~0;CLh#DteS=vA_?W|)-!)7B
zNmGXFX7=6fn&(#iv*c_;jKYq+Snp-}?||Ny^xtW>dRqvj`S_p5(trK&S>FVOFW-R^
z)}-PBPe~08(Qm(Ro1swfkO)PI)T3sZUg=}0Uf+aVDB_LG6pMV{yrQRFK`_j`Sm>8(
z?OHkkUZ%|cwJ;j{RL+Q(O)_$QL7B&|&0CFZLM|8&C0(UMZj``B1bgRrYG!NuQZ0OP
zaLGJ6uTO%J=WQeV_?`rOPSBT2rsK`T=U5GqPbO;5js#dtDI210coUC=*z+ix4pG|-
zeZ6FtY~Qg2GUoU-BjN*ug=25|w2|=5klx83Tn|kl2*;*=31y@`xLMzvt*r+_Bo=4cSIH!U~;j#Bx
z)71LuWVC8k?vV@DDuJ;{U~K@Hftgu*nI&N@B!0V^6?jwgfyc(sEJHr$
zVSE<(N&jJ%SkAnIjA?g9+^a+29FC(rvnW5E6Re$el-a{Er(UzK<$dJ)`F)o}9-j|`
zqgIM}iE4622jr-kwS3TtelCg@JgrKu;6@01I}uMc@mR3h%0QFGOy6lM17hK_vdrxE
z1sT8jaQu94m^04oy*eth$~h(1AgFS))RV@%!Q=%G5D3dMBCFX>O*1c@)J);@IyxAg
zYqN<@2g9*-8#`S&AIK9~CqT)%Dh~38&u<$$OrEPmk6L#okbzscKEYx*=4!SF8r)Bo
zqz91EIH1ayYU2Oe^$sDZf$L?lgR&VBRDoO%L2{>95N6{`E+j#5MdA!o%c_lrsXUUJ
zBiqqriSxoQbn~O9Yow6{BF
zE1u}|mhxw0GaU{gH_!9=GaxKFzaN(&7GRr(g9-r-hezipZ&$@hmvgBny?P36dV9kJONI6lVPTm}y_LLdp@>
z`AUY^wPK9}pks9zdzfQVVrnsjxndEj(-JxgPviVNzj-@2z4&$Xx-%y?ql=FxKZX}k
zAwQojB&1by-rPAs|E7K_vj8K5M6|Ws8BATZBAn)+H^?mlor32j6
zIr=L#yrr0V7a6Ycup%`J(UYpJ@K-|ruJm-fs33F`yARM4V}4VF(H8_wVJ?Q~iLR17
zvWLE+ClWA|JJW5E02X*uLfd39M3iZSqgN!2BHc8~>QfWtOoXrT6PS5lN?Y@!?Q&&^+HKsH$EqSd%C*E)8Ene
zrY}+Y-U+@U=Q=Y#E2qC*J`9P4mF~BWkNPVJM21*>Mm_S9`%%E2J=M*iWACZn5`<#X
zoEA&57i8diPWhVw;W;>QPney@c&q*23J~6E^at4)mXUVs=SZV+w2DO6VD@T|T?)^0
z@T?3=-@=DJc_lV4g8Ejwkvs3d1%$U+?QX6Y@mL_-G+*uq!Y^8lAMnxQ1HV)`Ii_jmd<@UQvtKTEGWPx_2IVoJ>BvkBmqMDJV8xDP8k!K8Az?I$q^*0IGE^Et|
z3qJl#T(~Yc^>cSJcWT2wv;xrHIP$|89uoyOHNJ2EWg%zl8>R
literal 2126
zcmV-U2(kAciwFP!00000|Lq!SbK5r7pZhB?%7>&gu_%!`EXDPVV#kTQan@NoO|y0D
zfk;R~OaWW~l&xm+-}eFF0iBVvvZvXGA1E5vdwBQZ>dyT?wOXy+Ztm>p-&Vu?)*JAP
zil??yuh(1cX1&%3nmedould0af-U#|q*7r4sD(VH?0Pl4R1zUqPwUIUV=iZY*DU=j
zO&P4~<-6H5-+uL@|tpf
z7t^3+%A8+G(tb?kh(zUHMsD6y7V#T%Xsw)(Q^pfX7mwpNjEHxjk|)tTBIH&H{EFb{
z0uRl`%Dz<7m>gWPh)$}5aW9IVBK!F-GUgM4K3y_xiUu*qs*7SWP|xhh7>glgUDQl&
zvylWx5oNwOLocjJqw`38%s%4hFbj6C%4zHI>+S0gf)_0E1=PvVYxOHvAKfa
zTzPb?Dd^!aF=oIV;gN`{avzniXcQ4PPctgd1Xo;56H9N0oI}CWD0*npO3zy;b@FnKk>0%0OF)hT|uF99|>Ek-ZzrF88!&uY6_Up4uz__-x<904vd;3M2rf
zv1Tw4#V{S95tdi>OsR)~!6*cwlz`Y^Y#9y6z|1I^M@d*Q$ab$r1$JsYaNkIiMJVPx
z$?hVr^dDx4#Vk4~kq$>BygmlZ;W{cZi`;34uy)o{<_yo=dd;~O_g);k=gyHlyB`L9
zTuJ6RsQDc|prc0C;z0-cdzQ4IPOIn&x`IHrbMmYPo)I>eGT5he+fYjrT#o~XVK|cu
z!{KC}jerTV;)C*at3Y-gnRbuOM9sZzP62&uqvs${VN9^-_PH88gS+qNO9}~V8K0ed>+(b+@^3&x
zje@@?{g>}fy4{|(N8Rp4uH>_3`EZ2UaFtCzFY&eQ~8>Q*EykQ+#{7oWPsDya=-4}
zT>H(8K?Y{0)9!SdZQsF2kO`GwT#s`5ZP--rv^vf~;16=lRu9-gJkG<
zL@Ljx5**Szm(4wM^0~1G2#$$7mWhrDSiVFY;3;Tc?yz}XB)2S3dmqlG|9A;uf0Mi&
zR&-SK`G?Qj2)h14XRNR&^#_dqTg`T3G5&9TkN+P+O#T+}zs~IQAoY(IIzNz4ylG0k
zeoEuW8*rwieeaGbtA=Z&_p3A
zLZE)m){?@hqA}I^t5=dF1qNEj*=qs41GqABxHW!NS8&%uppum
z$|ln;qD<#$dPQCh(v_hy$~IO$3ou&^^`G;-+EFw3ckO51lYaQC|I6EQ?dBDsiO!;m
z;QKx+LT=6vHg;FLt6lI`HuW!x6v(7^MI8i^2Zr)0jG5A@skW^}s$7gh8m*UWYpa3L
z2(0?tvJipM(5;jj~CB){5$%|)FqbgJH^-JLVM;X%i%v=J`9e9
zEj@1?9@Qf-La`Eyxrd9OiGQl;C844^c|+
zgQinMo-ZY2dX99l04?Uz+bbnFw_a9C_yQhxC?)totyA*sTPY>@vuwJrQi7=o71nH{
zQi5o`4*dQuCWGTa^1;WuEWSE*OzCE&1c&{1FD2BPwN`V6r{7X3VKM&)Kf1NfpUq$a
z#=8EW--e#=Z2vcCHNN-%9wPnUxoiHP1w3W3)zO`Aus1kUgmq)IczF@9uudDtXr*P4
z(AoQ^fUcFPYxd3$%c+^j&7tU;UY;)bLMDHRp|Ny9$AqW0b{w>7PH8xEkwwR^?w3GK
z5hM4iS!jCpTnA>xC={=jbKWKmi-_2e1&XfbrqCnIq1bk!8j-m^jc&WRh?O<(C5`5_
z{gCpMwc*Qq-v3BKXo(#2SaYP{t8Qa|b<3kXW=&}Fzw|On0C$Kv0@ppQ=|Pwl{a3Ua
z_F8_k<T=X^i7j_jj*-%$~$fp0eo#UL2F|#PDZ#-6m*s1*#1X@BkNmhH!Kin
zrrmJ%+}NE$-OPuhriq};bH3`9!{-5?L9>gJj2lAZ)e
Date: Fri, 10 Apr 2009 15:05:14 -0700
Subject: [PATCH 35/35] I18n the javascript.
---
.../i18n/English/Account_FriendManager.pm | 5 ++
.../root_import_account_friendmanager.wgpkg | Bin 2226 -> 2295 bytes
.../build/friendManager/friendManager.js | 67 ++++++++++--------
3 files changed, 42 insertions(+), 30 deletions(-)
diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm
index fd54a01f8..4fbc13e42 100644
--- a/lib/WebGUI/i18n/English/Account_FriendManager.pm
+++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm
@@ -185,6 +185,11 @@ our $I18N = {
lastUpdated => 0,
},
+ 'friends count' => {
+ message => q{Friends Count},
+ lastUpdated => 0,
+ },
+
};
1;
diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg
index f3015ae421e161e616eef7df537a677aa02ac2b4..956a30869cd3e47b656fd7b0ce42e6501c02c9f7 100644
GIT binary patch
literal 2295
zcmVa{WyVP$&=W2VBs48;W-YDl
z4U$$zyE3>L{(HY~S2x?T3mu!D%)t+`tX=JQzq`D#{!gV+X}6mj8~EL7=4q3+3WvBo02BIQ_k3>;KY{
z#=4qan@xRRD}R;3UlF2kVk?$=k^CF&R(nSNje51VL4cd<|Ex>?<@KY!3JBkR03$3(
zB|@R2+ZK_ptU<_`?|9S);e-}*xXRw+@`yVQ^JjU+<#{NSP?Ny$JIBspD5Bul
zIlyyJe2wfh#k{~xM6@@m?H_8;k_<#h_7p6B8PkxU7xbye_V+B<1EdH0dz6eqHu&+n
zlx;H@e+=FI>(c%o$G*b16c;{qH~ZASAxaQK8;ObA>KT&17`P{f