Some more UserList search options and added (un)install methods.
This commit is contained in:
parent
012e1b3539
commit
e696d3287e
2 changed files with 258 additions and 49 deletions
|
|
@ -11,8 +11,9 @@ use WebGUI::Utility;
|
||||||
use WebGUI::Asset::Wobject;
|
use WebGUI::Asset::Wobject;
|
||||||
use WebGUI::Operation::Shared;
|
use WebGUI::Operation::Shared;
|
||||||
use WebGUI::International;
|
use WebGUI::International;
|
||||||
|
use WebGUI::Pluggable;
|
||||||
our @ISA = qw(WebGUI::Asset::Wobject);
|
use WebGUI::Form::Image;
|
||||||
|
use base 'WebGUI::Asset::Wobject';
|
||||||
|
|
||||||
=head1 LEGAL
|
=head1 LEGAL
|
||||||
|
|
||||||
|
|
@ -48,17 +49,16 @@ Returns an array ref that contains tmpl_vars for the Alphabet Search.
|
||||||
|
|
||||||
sub getAlphabetSearchLoop {
|
sub getAlphabetSearchLoop {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $fieldName = shift;
|
my $fieldName = shift || 'lastName';
|
||||||
my $alphabet = shift;
|
my $alphabet = shift;
|
||||||
my (@alphabet, @alphabetLoop);
|
my (@alphabet, @alphabetLoop);
|
||||||
$alphabet ||= "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
|
$alphabet ||= "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
|
||||||
@alphabet = split(/,/,$alphabet);
|
@alphabet = split(/,/,$alphabet);
|
||||||
foreach my $letter (@alphabet){
|
foreach my $letter (@alphabet){
|
||||||
my $htmlEncodedLetter = encode_entities($letter);
|
my $htmlEncodedLetter = encode_entities($letter);
|
||||||
#print "adding letter ".$letter.",htmlEncodedLetter: $htmlEncodedLetter<br>";
|
|
||||||
my $searchURL = "?searchExact_".$fieldName."=".$letter."%25";
|
my $searchURL = "?searchExact_".$fieldName."=".$letter."%25";
|
||||||
my $hasResults = $self->session->db->quickScalar("select if ("
|
my $hasResults = $self->session->db->quickScalar("select if ("
|
||||||
."(select count(*) from userProfileData where lastName like '".$letter."%')<>0, 1, 0)");
|
."(select count(*) from userProfileData where ".$fieldName." like '".$letter."%')<>0, 1, 0)");
|
||||||
push @alphabetLoop, {
|
push @alphabetLoop, {
|
||||||
alphabetSearch_loop_label => $htmlEncodedLetter || $letter,
|
alphabetSearch_loop_label => $htmlEncodedLetter || $letter,
|
||||||
alphabetSearch_loop_hasResults => $hasResults,
|
alphabetSearch_loop_hasResults => $hasResults,
|
||||||
|
|
@ -87,13 +87,13 @@ sub definition {
|
||||||
my %properties;
|
my %properties;
|
||||||
my $i18n = WebGUI::International->new($session, 'Asset_UserList');
|
my $i18n = WebGUI::International->new($session, 'Asset_UserList');
|
||||||
|
|
||||||
my %sortByOptions;
|
my %profileFields;
|
||||||
tie %sortByOptions, 'Tie::IxHash';
|
tie %profileFields, 'Tie::IxHash';
|
||||||
my $fields = $session->db->read("SELECT field.fieldName, field.label FROM userProfileField as field "
|
my $fields = $session->db->read("SELECT field.fieldName, field.label FROM userProfileField as field "
|
||||||
."left join userProfileCategory as cat USING(profileCategoryId) ORDER BY cat.sequenceNumber, field.sequenceNumber");
|
."left join userProfileCategory as cat USING(profileCategoryId) ORDER BY cat.sequenceNumber, field.sequenceNumber");
|
||||||
while (my $field = $fields->hashRef){
|
while (my $field = $fields->hashRef){
|
||||||
my $label = WebGUI::Operation::Shared::secureEval($session,$field->{label});
|
my $label = WebGUI::Operation::Shared::secureEval($session,$field->{label});
|
||||||
$sortByOptions{$field->{fieldName}} = $label;
|
$profileFields{$field->{fieldName}} = $label;
|
||||||
}
|
}
|
||||||
|
|
||||||
tie %properties, 'Tie::IxHash';
|
tie %properties, 'Tie::IxHash';
|
||||||
|
|
@ -128,11 +128,19 @@ sub definition {
|
||||||
},
|
},
|
||||||
alphabet=>{
|
alphabet=>{
|
||||||
fieldType=>"text",
|
fieldType=>"text",
|
||||||
defaultValue=>"",
|
defaultValue=>"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z",
|
||||||
tab=>"display",
|
tab=>"display",
|
||||||
label=>$i18n->get("alphabet label"),
|
label=>$i18n->get("alphabet label"),
|
||||||
hoverHelp=>$i18n->get('alphabet description'),
|
hoverHelp=>$i18n->get('alphabet description'),
|
||||||
},
|
},
|
||||||
|
alphabetSearchField=>{
|
||||||
|
fieldType=>"selectBox",
|
||||||
|
defaultValue=>"lastName",
|
||||||
|
tab=>"display",
|
||||||
|
options=>\%profileFields,
|
||||||
|
label=>$i18n->get("alphabetSearchField label"),
|
||||||
|
hoverHelp=>$i18n->get('alphabetSearchField description'),
|
||||||
|
},
|
||||||
showOnlyVisibleAsNamed=>{
|
showOnlyVisibleAsNamed=>{
|
||||||
fieldType=>"yesNo",
|
fieldType=>"yesNo",
|
||||||
defaultValue=>"0",
|
defaultValue=>"0",
|
||||||
|
|
@ -153,7 +161,7 @@ sub definition {
|
||||||
fieldType=>"selectBox",
|
fieldType=>"selectBox",
|
||||||
defaultValue=>'lastName',
|
defaultValue=>'lastName',
|
||||||
tab=>'display',
|
tab=>'display',
|
||||||
options=>\%sortByOptions,
|
options=>\%profileFields,
|
||||||
label=>$i18n->get('sort by'),
|
label=>$i18n->get('sort by'),
|
||||||
hoverHelp=>$i18n->get('sort by description'),
|
hoverHelp=>$i18n->get('sort by description'),
|
||||||
},
|
},
|
||||||
|
|
@ -251,38 +259,36 @@ sub view {
|
||||||
my $i18n = WebGUI::International->new($self->session, "Asset_UserList");
|
my $i18n = WebGUI::International->new($self->session, "Asset_UserList");
|
||||||
my (%var, @users, @profileField_loop, @profileFields);
|
my (%var, @users, @profileField_loop, @profileFields);
|
||||||
my ($defaultPublicProfile, $defaultPublicEmail, $user, $sth, $sql, $profileField);
|
my ($defaultPublicProfile, $defaultPublicEmail, $user, $sth, $sql, $profileField);
|
||||||
# my $error = $self->session->errorHandler;
|
|
||||||
# my $start_time = time();
|
|
||||||
|
|
||||||
my $currentUrlWithoutSort = $self->getUrl();
|
my $currentUrlWithoutSort = $self->getUrl();
|
||||||
foreach ($form->param) {
|
foreach ($form->param) {
|
||||||
unless (WebGUI::Utility::isIn($_,qw(orderBy orderType op func)) || $_ =~ /identifier/i || $_ =~ /password/i) {
|
unless (WebGUI::Utility::isIn($_,qw(sortBy sortOrder op func)) || $_ =~ /identifier/i || $_ =~ /password/i) {
|
||||||
$currentUrlWithoutSort = $url->append($currentUrlWithoutSort, $url->escape($_)
|
$currentUrlWithoutSort = $url->append($currentUrlWithoutSort, $url->escape($_)
|
||||||
.'='.$url->escape($form->process($_)));
|
.'='.$url->escape($form->process($_)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# $error->info("time :".(time() - $start_time));
|
$sth = $self->session->db->read(
|
||||||
|
"SELECT field.fieldName, field.label, field.sequenceNumber, field.visible, field.fieldType "
|
||||||
$sth = $self->session->db->read("SELECT field.fieldName, field.label, field.sequenceNumber, field.visible "
|
|
||||||
."FROM userProfileField as field "
|
."FROM userProfileField as field "
|
||||||
."left join userProfileCategory as category USING(profileCategoryId) "
|
."left join userProfileCategory as category USING(profileCategoryId) "
|
||||||
."ORDER BY category.sequenceNumber, field.sequenceNumber");
|
."ORDER BY category.sequenceNumber, field.sequenceNumber");
|
||||||
while ($profileField = $sth->hashRef){
|
while ($profileField = $sth->hashRef){
|
||||||
my $label = WebGUI::Operation::Shared::secureEval($self->session,$profileField->{label});
|
my $label = WebGUI::Operation::Shared::secureEval($self->session,$profileField->{label});
|
||||||
my $fieldName = $profileField->{fieldName};
|
my $fieldName = $profileField->{fieldName};
|
||||||
my $sortByURL = $url->append($currentUrlWithoutSort,'orderBy='.$url->escape($fieldName));
|
my $sortByURL = $url->append($currentUrlWithoutSort,'sortBy='.$url->escape($fieldName));
|
||||||
if ($form->process('orderType') eq 'asc' && $form->process('orderBy') eq $fieldName){
|
if ($form->process('sortOrder') eq 'asc' && $form->process('sortBy') eq $fieldName){
|
||||||
$sortByURL = $url->append($sortByURL,'orderType=desc');
|
$sortByURL = $url->append($sortByURL,'sortOrder=desc');
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$sortByURL = $url->append($sortByURL,'orderType=asc');
|
$sortByURL = $url->append($sortByURL,'sortOrder=asc');
|
||||||
}
|
}
|
||||||
push(@profileFields, {
|
push(@profileFields, {
|
||||||
"fieldName"=>$fieldName,
|
"fieldName"=>$fieldName,
|
||||||
"label"=>$label,
|
"label"=>$label,
|
||||||
"sequenceNumber"=>$profileField->{sequenceNumber},
|
"sequenceNumber"=>$profileField->{sequenceNumber},
|
||||||
"visible"=>$profileField->{visible},
|
"visible"=>$profileField->{visible},
|
||||||
|
"fieldType"=>$profileField->{fieldType},
|
||||||
});
|
});
|
||||||
push (@profileField_loop, {
|
push (@profileField_loop, {
|
||||||
"profileField_label"=>$label,
|
"profileField_label"=>$label,
|
||||||
|
|
@ -312,7 +318,6 @@ sub view {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
# $error->info("selected profile fields, time :".(time() - $start_time));
|
|
||||||
$sql = "select distinct users.userId, users.userName, userProfileData.publicProfile, userProfileData.publicEmail ";
|
$sql = "select distinct users.userId, users.userName, userProfileData.publicProfile, userProfileData.publicEmail ";
|
||||||
|
|
||||||
foreach my $profileField (@profileFields){
|
foreach my $profileField (@profileFields){
|
||||||
|
|
@ -321,14 +326,13 @@ sub view {
|
||||||
$sql .= " from users";
|
$sql .= " from users";
|
||||||
$sql .= " left join userProfileData using(userId) where users.userId != '1'";
|
$sql .= " left join userProfileData using(userId) where users.userId != '1'";
|
||||||
|
|
||||||
# $error->info("creating constraint, time :".(time() - $start_time));
|
|
||||||
my $constraint;
|
my $constraint;
|
||||||
my @profileSearchFields = ();
|
my @profileSearchFields = ();
|
||||||
my $searchType = $form->process('searchType') || 'or';
|
my $searchType = $form->process('searchType') || 'or';
|
||||||
if ($form->process('search')){
|
if ($form->process('search')){
|
||||||
# Normal search with one query takes precedence over other search options
|
# Normal search with one keyword takes precedence over other search options
|
||||||
if($form->process('limitSearch')){
|
if($form->process('limitSearch')){
|
||||||
# Normal search with one query in a limited number of fields
|
# Normal search with one keyword in a limited number of fields
|
||||||
foreach my $profileField (@profileFields){
|
foreach my $profileField (@profileFields){
|
||||||
if ($form->process('includeInSearch_'.$profileField->{fieldName})){
|
if ($form->process('includeInSearch_'.$profileField->{fieldName})){
|
||||||
push(@profileSearchFields,'userProfileData.'.$profileField->{fieldName}
|
push(@profileSearchFields,'userProfileData.'.$profileField->{fieldName}
|
||||||
|
|
@ -337,15 +341,15 @@ sub view {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
# Normal search with one query in all fields
|
# Normal search with one keyword in all fields
|
||||||
$constraint = "(".join(' or ', map {'userProfileData.'.$_->{fieldName}
|
$constraint = "(".join(' or ', map {'userProfileData.'.$_->{fieldName}
|
||||||
.' like "%'.$form->process('search').'%"'} @profileFields).")";
|
.' like "%'.$form->process('search').'%"'} @profileFields).")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($form->process('searchExact')){
|
elsif ($form->process('searchExact')){
|
||||||
# Exact search with one query
|
# Exact search with one keyword
|
||||||
if($form->process('limitSearch')){
|
if($form->process('limitSearch')){
|
||||||
# Exact search with one query in a limited number of fields
|
# Exact search with one keyword in a limited number of fields
|
||||||
foreach my $profileField (@profileFields){
|
foreach my $profileField (@profileFields){
|
||||||
if ($form->process('includeInSearch_'.$profileField->{fieldName})){
|
if ($form->process('includeInSearch_'.$profileField->{fieldName})){
|
||||||
push(@profileSearchFields,'userProfileData.'.$profileField->{fieldName}
|
push(@profileSearchFields,'userProfileData.'.$profileField->{fieldName}
|
||||||
|
|
@ -354,7 +358,7 @@ sub view {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
# Exact search with one query in all fields
|
# Exact search with one keyword in all fields
|
||||||
$constraint = "(".join(' or ', map {'userProfileData.'.$_->{fieldName}
|
$constraint = "(".join(' or ', map {'userProfileData.'.$_->{fieldName}
|
||||||
.' like "'.$form->process('searchExact').'"'} @profileFields).")";
|
.' like "'.$form->process('searchExact').'"'} @profileFields).")";
|
||||||
}
|
}
|
||||||
|
|
@ -378,16 +382,14 @@ sub view {
|
||||||
}
|
}
|
||||||
$sql .= " and ".$constraint if ($constraint);
|
$sql .= " and ".$constraint if ($constraint);
|
||||||
|
|
||||||
# $error->info("created constraint, time :".(time() - $start_time));
|
my $sortBy = $form->process('sortBy') || $self->get('sortBy') || 'users.username';
|
||||||
|
my $sortOrder = $form->process('sortOrder') || $self->get('sortOrder') || 'asc';
|
||||||
my $orderBy = $form->process('orderBy') || $self->get('sortBy') || 'users.username';
|
|
||||||
my $orderType = $form->process('orderType') || $self->get('sortOrder') || 'asc';
|
|
||||||
|
|
||||||
my @orderByUserProperties = ('dateCreated', 'lastUpdated', 'karma', 'userId');
|
my @sortByUserProperties = ('dateCreated', 'lastUpdated', 'karma', 'userId');
|
||||||
if(isIn($orderBy,@orderByUserProperties)){
|
if(isIn($sortBy,@sortByUserProperties)){
|
||||||
$orderBy = 'users.'.$orderBy;
|
$sortBy = 'users.'.$sortBy;
|
||||||
}
|
}
|
||||||
$sql .= " order by ".$orderBy." ".$orderType;
|
$sql .= " order by ".$sortBy." ".$sortOrder;
|
||||||
|
|
||||||
($defaultPublicProfile) = $self->session->db->quickArray("SELECT dataDefault FROM userProfileField WHERE fieldName='publicProfile'");
|
($defaultPublicProfile) = $self->session->db->quickArray("SELECT dataDefault FROM userProfileField WHERE fieldName='publicProfile'");
|
||||||
($defaultPublicEmail) = $self->session->db->quickArray("SELECT dataDefault FROM userProfileField WHERE fieldName='publicEmail'");
|
($defaultPublicEmail) = $self->session->db->quickArray("SELECT dataDefault FROM userProfileField WHERE fieldName='publicEmail'");
|
||||||
|
|
@ -403,9 +405,7 @@ sub view {
|
||||||
|
|
||||||
my $p = WebGUI::Paginator->new($self->session,$currentUrl,$self->getValue("usersPerPage"), undef, $paginatePage);
|
my $p = WebGUI::Paginator->new($self->session,$currentUrl,$self->getValue("usersPerPage"), undef, $paginatePage);
|
||||||
|
|
||||||
# $error->info("reading from database, time :".(time() - $start_time));
|
|
||||||
$sth = $self->session->db->read($sql);
|
$sth = $self->session->db->read($sql);
|
||||||
# $error->info("users read from database, time :".(time() - $start_time));
|
|
||||||
my @visibleUsers;
|
my @visibleUsers;
|
||||||
while (my $user = $sth->hashRef){
|
while (my $user = $sth->hashRef){
|
||||||
my $showGroupId = $self->get("showGroupId");
|
my $showGroupId = $self->get("showGroupId");
|
||||||
|
|
@ -415,10 +415,8 @@ sub view {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# $error->info("applied group constraints, time :".(time() - $start_time));
|
|
||||||
$p->setDataByArrayRef(\@visibleUsers);
|
$p->setDataByArrayRef(\@visibleUsers);
|
||||||
my $users = $p->getPageData($paginatePage);
|
my $users = $p->getPageData($paginatePage);
|
||||||
# $error->info("set data by page, time :".(time() - $start_time));
|
|
||||||
foreach my $user (@$users){
|
foreach my $user (@$users){
|
||||||
if ($user->{publicProfile} eq "1" || ($user->{publicProfile} eq "" && $defaultPublicProfile eq "1")){
|
if ($user->{publicProfile} eq "1" || ($user->{publicProfile} eq "" && $defaultPublicProfile eq "1")){
|
||||||
my (@profileFieldValues);
|
my (@profileFieldValues);
|
||||||
|
|
@ -432,16 +430,16 @@ sub view {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
push (@profileFieldValues, {
|
|
||||||
"profile_value"=>$user->{$profileField->{fieldName}},
|
|
||||||
});
|
|
||||||
my $profileFieldName = $profileField->{fieldName};
|
my $profileFieldName = $profileField->{fieldName};
|
||||||
$profileFieldName =~ s/ /_/g;
|
$profileFieldName =~ s/ /_/g;
|
||||||
$profileFieldName =~ s/\./_/g;
|
$profileFieldName =~ s/\./_/g;
|
||||||
|
my $value = $user->{$profileField->{fieldName}};
|
||||||
|
push (@profileFieldValues, {
|
||||||
|
"profile_value"=>$value,
|
||||||
|
});
|
||||||
unless($self->get("showOnlyVisibleAsNamed") && $profileField->{visible} != 1){
|
unless($self->get("showOnlyVisibleAsNamed") && $profileField->{visible} != 1){
|
||||||
$userProperties{'user_profile_'.$profileFieldName.'_value'} = $user->{$profileField->{fieldName}};
|
$userProperties{'user_profile_'.$profileFieldName.'_value'} = $value;
|
||||||
}
|
}
|
||||||
#$userProperties{"user.profile.".$profileFieldName.".value"} = $user->{$profileField->{fieldName}};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$userProperties{"user_profile_emailNotPublic"} = $emailNotPublic;
|
$userProperties{"user_profile_emailNotPublic"} = $emailNotPublic;
|
||||||
|
|
@ -457,14 +455,13 @@ sub view {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# $error->info("created tmpl vars for users, time :".(time() - $start_time));
|
|
||||||
$p->appendTemplateVars(\%var);
|
$p->appendTemplateVars(\%var);
|
||||||
|
|
||||||
$var{numberOfProfileFields} = scalar(@profileFields);
|
$var{numberOfProfileFields} = scalar(@profileFields);
|
||||||
|
|
||||||
$var{profileField_loop} = \@profileField_loop;
|
$var{profileField_loop} = \@profileField_loop;
|
||||||
$var{user_loop} = \@users;
|
$var{user_loop} = \@users;
|
||||||
$var{alphabetSearch_loop} = $self->getAlphabetSearchLoop("lastName",$self->get("alphabet"));
|
$var{alphabetSearch_loop} = $self->getAlphabetSearchLoop($self->get("alphabetSearchField"),$self->get("alphabet"));
|
||||||
|
|
||||||
$var{searchFormHeader} = WebGUI::Form::formHeader($self->session,{action => $self->getUrl});
|
$var{searchFormHeader} = WebGUI::Form::formHeader($self->session,{action => $self->getUrl});
|
||||||
$var{searchFormSubmit} = WebGUI::Form::submit($self->session,{value => $i18n->get('submit search label')});
|
$var{searchFormSubmit} = WebGUI::Form::submit($self->session,{value => $i18n->get('submit search label')});
|
||||||
|
|
@ -487,10 +484,207 @@ sub view {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
# $error->info("global tmpl_vars created, time :".(time() - $start_time));
|
|
||||||
my $out = $self->processTemplate(\%var,$self->get("templateId"));
|
my $out = $self->processTemplate(\%var,$self->get("templateId"));
|
||||||
# $error->info("done, going to return output, time :".(time() - $start_time));
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
# Everything below here is to make it easier to install your custom
|
||||||
|
# wobject, but has nothing to do with wobjects in general
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# cd /data/WebGUI/lib
|
||||||
|
# perl -MWebGUI::Asset::Wobject::NewWobject -e install www.example.com.conf [ /path/to/WebGUI ]
|
||||||
|
# - or -
|
||||||
|
# perl -MWebGUI::Asset::Wobject::NewWobject -e uninstall www.example.com.conf [ /path/to/WebGUI ]
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
use base 'Exporter';
|
||||||
|
our @EXPORT = qw(install uninstall);
|
||||||
|
use WebGUI::Session;
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
sub install {
|
||||||
|
my $config = $ARGV[0];
|
||||||
|
my $home = $ARGV[1] || "/data/WebGUI";
|
||||||
|
die "usage: perl -MWebGUI::Asset::Wobject::UserList -e install www.example.com.conf\n" unless ($home &&
|
||||||
|
$config);
|
||||||
|
print "Installing asset.\n";
|
||||||
|
my $session = WebGUI::Session->open($home, $config);
|
||||||
|
$session->config->addToArray("assets","WebGUI::Asset::Wobject::NewWobject");
|
||||||
|
$session->db->write("create table UserList (
|
||||||
|
assetId varchar(22) not null,
|
||||||
|
revisionDate bigint(20),
|
||||||
|
templateId varchar(22),
|
||||||
|
showGroupId varchar(22),
|
||||||
|
hideGroupId varchar(22),
|
||||||
|
usersPerPage int(11),
|
||||||
|
alphabet text,
|
||||||
|
alphabetSearchField varchar(128),
|
||||||
|
showOnlyVisibleAsNamed int(11),
|
||||||
|
sortBy varchar(128),
|
||||||
|
sortOrder varchar(4),
|
||||||
|
PRIMARY KEY (`assetId`,`revisionDate`)
|
||||||
|
)");
|
||||||
|
my $import = WebGUI::Asset->getImportNode($session);
|
||||||
|
|
||||||
|
$import->addChild({
|
||||||
|
|
||||||
|
className=>"WebGUI::Asset::Template",
|
||||||
|
|
||||||
|
template=>q|
|
||||||
|
<tmpl_if session.var.adminOn>
|
||||||
|
<p><tmpl_var controls></p>
|
||||||
|
</tmpl_if>
|
||||||
|
|
||||||
|
<tmpl_if displayTitle>
|
||||||
|
<h1><tmpl_var title></h1>
|
||||||
|
</tmpl_if>
|
||||||
|
<tmpl_if description>
|
||||||
|
<tmpl_var description><p />
|
||||||
|
</tmpl_if>
|
||||||
|
|
||||||
|
<tmpl_if alphabetSearch_loop>
|
||||||
|
<tmpl_loop alphabetSearch_loop>
|
||||||
|
<tmpl_if alphabetSearch_loop_hasResults>
|
||||||
|
<a href="<tmpl_var alphabetSearch_loop_searchURL>"><tmpl_var alphabetSearch_loop_label></a>
|
||||||
|
<tmpl_else>
|
||||||
|
<tmpl_var alphabetSearch_loop_label>
|
||||||
|
</tmpl_if><tmpl_unless __LAST__> | </tmpl_unless>
|
||||||
|
</tmpl_loop>
|
||||||
|
</tmpl_if><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
Search with one keyword in one or more fields that the user can select <br />
|
||||||
|
<tmpl_var searchFormHeader>
|
||||||
|
<tmpl_var limitSearch>
|
||||||
|
<tmpl_var searchFormQuery_form><br />
|
||||||
|
<tmpl_var includeInSearch_lastName_checkBox> <tmpl_var profileField_lastName_label> <br />
|
||||||
|
<tmpl_var includeInSearch_email_checkBox> <tmpl_var profileField_email_label> <br />
|
||||||
|
<tmpl_var searchFormSubmit>
|
||||||
|
<tmpl_var searchFormFooter><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
Search with one keyword in one or more fields that are defined by hidden form fields<br />
|
||||||
|
<tmpl_var searchFormHeader>
|
||||||
|
<tmpl_var searchFormQuery_form>
|
||||||
|
<tmpl_var limitSearch>
|
||||||
|
<tmpl_var includeInSearch_lastName_hidden>
|
||||||
|
<tmpl_var includeInSearch_email_hidden>
|
||||||
|
<tmpl_var searchFormSubmit>
|
||||||
|
<tmpl_var searchFormFooter><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
Search with multiple keywords<br />
|
||||||
|
<tmpl_var searchFormHeader>
|
||||||
|
^International('searchFormTypeSelect label','Asset_UserList');<tmpl_var searchFormTypeSelect><br />
|
||||||
|
<tmpl_var profileField_lastName_label>: <tmpl_var search_lastName_text><br />
|
||||||
|
<tmpl_var profileField_email_label> (exact): <tmpl_var searchExact_email_text><br />
|
||||||
|
<tmpl_var searchFormSubmit>
|
||||||
|
<tmpl_var searchFormFooter><br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<table cellpadding="1" cellspacing="1" border="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<tmpl_if session.var.adminOn>
|
||||||
|
<td class="tableData">Id</td>
|
||||||
|
</tmpl_if>
|
||||||
|
|
||||||
|
<td class="tableData">Username</td>
|
||||||
|
|
||||||
|
<td class="tableData">
|
||||||
|
<a href="<tmpl_var profileField_firstName_sortByURL>"><tmpl_var profileField_firstName_label></td>
|
||||||
|
<td class="tableData">
|
||||||
|
<a href="<tmpl_var profileField_lastName_sortByURL>"><tmpl_var profileField_lastName_label></td>
|
||||||
|
<td class="tableData">
|
||||||
|
<a href="<tmpl_var profileField_email_sortByURL>"><tmpl_var profileField_email_label></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tmpl_if user_loop>
|
||||||
|
<tmpl_loop user_loop>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<tmpl_if session.var.adminOn>
|
||||||
|
<td class="tableData"> <tmpl_var user_id></td>
|
||||||
|
</tmpl_if>
|
||||||
|
<td class="tableData"> <tmpl_var user_name></td>
|
||||||
|
|
||||||
|
<td class="tableData"> <tmpl_var user_profile_fistName_value></td>
|
||||||
|
<td class="tableData"> <tmpl_var user_profile_lastName_value></td>
|
||||||
|
|
||||||
|
<td class="tableData">
|
||||||
|
<tmpl_if profile_emailNotPublic>
|
||||||
|
^International('Email not public message','Asset_UserList');
|
||||||
|
<tmpl_else>
|
||||||
|
<tmpl_var user_profile_email_value>
|
||||||
|
</tmpl_if>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</tmpl_loop>
|
||||||
|
<tmpl_else>
|
||||||
|
<tr><td>^International('No users message','Asset_UserList');</td></tr>
|
||||||
|
</tmpl_if>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<tmpl_if multiplePages>
|
||||||
|
<div class="pagination">
|
||||||
|
<tmpl_var previousPage> · <tmpl_var pageList> · <tmpl_var nextPage>
|
||||||
|
</div>
|
||||||
|
</tmpl_if>
|
||||||
|
|,
|
||||||
|
|
||||||
|
ownerUserId=>'3',
|
||||||
|
|
||||||
|
groupIdView=>'7',
|
||||||
|
|
||||||
|
groupIdEdit=>'12',
|
||||||
|
|
||||||
|
title=>"Default UserList",
|
||||||
|
|
||||||
|
menuTitle=>"Default UserList",
|
||||||
|
|
||||||
|
url=>"templates/userlist",
|
||||||
|
|
||||||
|
namespace=>"UserList"
|
||||||
|
|
||||||
|
},'UserListTmpl0000001');
|
||||||
|
|
||||||
|
my $versionTag = WebGUI::VersionTag->getWorking($session);
|
||||||
|
$versionTag->set({name=>"Install UserList Template"});
|
||||||
|
$versionTag->commit;
|
||||||
|
|
||||||
|
$session->var->end;
|
||||||
|
$session->close;
|
||||||
|
print "Done. Please restart Apache.\n";
|
||||||
|
}
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
sub uninstall {
|
||||||
|
my $config = $ARGV[0];
|
||||||
|
my $home = $ARGV[1] || "/data/WebGUI";
|
||||||
|
die "usage: perl -MWebGUI::Asset::Wobject::UserList -e uninstall www.example.com.conf\n" unless ($home &&
|
||||||
|
$config);
|
||||||
|
print "Uninstalling asset.\n";
|
||||||
|
my $session = WebGUI::Session->open($home, $config);
|
||||||
|
$session->config->deleteFromArray("assets","WebGUI::Asset::Wobject::UserList");
|
||||||
|
my $rs = $session->db->read("select assetId from asset where
|
||||||
|
className='WebGUI::Asset::Wobject::UserList'");
|
||||||
|
while (my ($id) = $rs->array) {
|
||||||
|
my $asset = WebGUI::Asset->new($session, $id, "WebGUI::Asset::Wobject::UserList");
|
||||||
|
$asset->purge if defined $asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rs = $session->db->read("select distinct(assetId) from template where namespace='UserList'");
|
||||||
|
|
||||||
|
while (my ($id) = $rs->array) {
|
||||||
|
my $asset = WebGUI::Asset->new($session, $id, "WebGUI::Asset::Template");
|
||||||
|
$asset->purge if defined $asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
$session->db->write("drop table UserList");
|
||||||
|
$session->var->end;
|
||||||
|
$session->close;
|
||||||
|
print "Done. Please restart Apache.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,21 @@ seperated values|,
|
||||||
lastUpdated => 1081514049
|
lastUpdated => 1081514049
|
||||||
},
|
},
|
||||||
|
|
||||||
|
'alphabetSearchField' => {
|
||||||
|
message => q|The field in which the alphabet search will be done.|,
|
||||||
|
lastUpdated => 1081514049
|
||||||
|
},
|
||||||
|
|
||||||
|
'alphabetSearchField label' => {
|
||||||
|
message => q|Alphabet Search Field|,
|
||||||
|
lastUpdated => 1081514049
|
||||||
|
},
|
||||||
|
|
||||||
|
'alphabetSearchField description' => {
|
||||||
|
message => q|Select the profile field in which the alphabet search will be done.|,
|
||||||
|
lastUpdated => 1081514049
|
||||||
|
},
|
||||||
|
|
||||||
'Profile not public message' => {
|
'Profile not public message' => {
|
||||||
message => q|Profile not public|,
|
message => q|Profile not public|,
|
||||||
lastUpdated => 1081514049
|
lastUpdated => 1081514049
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue