Merge commit 'tags/WebGUI_7.6.8-beta' into survey-rfe

* commit 'tags/WebGUI_7.6.8-beta': (96 commits)
  Release 7.6.8-beta
  preparing for 7.6.8 release
  convert to new storage format
  fixing photo comment test
  fixed: Syndicated Content corrupts wide characters
  Add the WikiPage to the list of contributions shown in the Account Contributions tab.
  added #!/usr/bin/env perl to all utility scripts
  Forward port i18n fix for Gallery Album RSS list.
  Fix some Survey i18n typos in the time limit hoverhelp.
  Large batch of Help and i18n.  Also, make sure that the
  Fix a typo in the i18n help for the ITransact Pay Driver.
  Correct dataform captcha variable name in the help.
  Forward porting expanded patch for handling deleted things.
  Have Thingy check for existance of table and column to prevent
  Fix linking to other things and autocreating the form field for it.
  Update test to match fixed code.
  Remove the warnings pragma
  Only resize photos if they are larger than the Gallery resolutions.
  Fix a syntax error made in the i18n of the search button.
  I18n'ed a submit button in the manage transactions screen.
  ...

Conflicts:

	lib/WebGUI/Asset/Wobject/Survey.pm
	lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm
	www/extras/wobject/Survey/editsurvey.js
	www/extras/wobject/Survey/editsurvey/object.js
This commit is contained in:
Patrick Donelan 2009-01-14 06:00:06 +00:00
commit b7520da07d
396 changed files with 2647 additions and 1186 deletions

View file

@ -176,6 +176,7 @@ sub www_view {
'WebGUI::Asset::Post',
'WebGUI::Asset::Wobject::GalleryAlbum',
'WebGUI::Asset::Event',
'WebGUI::Asset::WikiPage',
'WebGUI::Asset::Post::Thread',
],
whereClause => "asset.createdBy = '$userId' or assetData.ownerUserId = '$userId'",
@ -216,6 +217,12 @@ sub www_view {
$self->appendCommonVars($var);
$p->appendTemplateVars($var);
#Overwrite these
my $user = WebGUI::User->new($session,$userId);
$var->{'user_full_name' } = $user->getWholeName;
$var->{'user_member_since' } = $user->dateCreated;
return $self->processTemplate($var,$self->getViewTemplateId);
}

View file

@ -173,6 +173,7 @@ sub www_managePurchases {
my $url = $session->url;
my $var = {};
$var->{transactions} = [];
# build list
foreach my $id (@{WebGUI::Shop::Transaction->getTransactionIdsForUser($session)}) {

View file

@ -2573,7 +2573,9 @@ NOTE: Don't try to override or overload this method. It won't work. What you are
sub www_editSave {
my $self = shift;
return $self->session->privilege->locked() unless $self->canEditIfLocked;
##If this is a new asset (www_add), the parent may be locked. We should still be able to add a new asset.
my $isNewAsset = $self->session->form->process("assetId") eq "new" ? 1 : 0;
return $self->session->privilege->locked() if (!$self->canEditIfLocked and !$isNewAsset);
return $self->session->privilege->insufficient() unless $self->canEdit;
if ($self->session->config("maximumAssets")) {
my ($count) = $self->session->db->quickArray("select count(*) from asset");
@ -2581,7 +2583,7 @@ sub www_editSave {
return $self->session->style->userStyle($i18n->get("over max assets")) if ($self->session->config("maximumAssets") <= $count);
}
my $object;
if ($self->session->form->process("assetId") eq "new") {
if ($isNewAsset) {
$object = $self->addChild({className=>$self->session->form->process("class","className")});
return $self->www_view unless defined $object;
$object->{_parent} = $self;
@ -2626,7 +2628,12 @@ sub www_editSave {
# Handle "saveAndReturn" button
if ( $self->session->form->process( "saveAndReturn" ) ne "" ) {
return $self->www_edit;
if ($isNewAsset) {
return $object->www_edit;
}
else {
return $self->www_edit;
}
}
# Handle "proceed" form parameter

View file

@ -141,10 +141,11 @@ sub appendTemplateVarsCommentForm {
value => $comment->{ bodyText },
});
my $i18n = WebGUI::International->new($session, 'Asset_Photo');
$var->{ commentForm_submit }
= WebGUI::Form::submit( $session, {
name => "submit",
value => "Save Comment",
value => $i18n->get('form comment save comment'),
});
return $var;
@ -739,6 +740,21 @@ sub setComment {
);
}
####################################################################
=head2 update
Wrap update so that isHidden is always set to be a 1.
=cut
sub update {
my $self = shift;
my $properties = shift;
return $self->SUPER::update({%$properties, isHidden => 1});
}
#----------------------------------------------------------------------------
=head2 view ( )

View file

@ -22,6 +22,7 @@ use Image::ExifTool qw( :Public );
use JSON qw/ encode_json decode_json /;
use URI::Escape;
use Tie::IxHash;
use List::MoreUtils;
use WebGUI::DateTime;
use WebGUI::Friends;
@ -360,14 +361,19 @@ sub makeResolutions {
my $storage = $self->getStorageLocation;
$self->session->errorHandler->info(" Making resolutions for '" . $self->get("filename") . q{'});
for my $res ( @$resolutions ) {
my $filename = $self->get('filename');
RESOLUTION: for my $res ( @$resolutions ) {
# carp if resolution is bad
if ( $res !~ /^\d+$/ && $res !~ /^\d*x\d*/ ) {
carp "Geometry '$res' is invalid. Skipping.";
next;
next RESOLUTION;
}
##Only resize images if the image is too big!
my ($imageX, $imageY) = $storage->getSizeInPixels($filename);
my @resolutions = split /x/, $res;
next RESOLUTION if List::MoreUtils::any { $imageX < $_ && $imageY < $_ } @resolutions;
my $newFilename = $res . ".jpg";
$storage->copyFile( $self->get("filename"), $newFilename );
$storage->copyFile( $filename, $newFilename );
$storage->resize( $newFilename, $res, undef, $self->getGallery->get( 'imageDensity' ) );
}
}

View file

@ -955,6 +955,14 @@ sub postProcess {
my $self = shift;
my %data = ();
($data{synopsis}, $data{content}) = $self->getSynopsisAndContent($self->get("synopsis"), $self->get("content"));
my $spamStopWords = $self->session->config->get('spamStopWords');
if (ref $spamStopWords eq 'ARRAY') {
my $spamRegex = join('|',@{$spamStopWords});
if ($data{content} =~ m/$spamRegex/xmsi) {
$data{skipNotification} = 1;
$self->trash;
}
}
my $user = WebGUI::User->new($self->session, $self->get("ownerUserId"));
my $i18n = WebGUI::International->new($self->session, "Asset_Post");
if ($self->getThread->getParent->get("addEditStampToPosts")) {
@ -1428,7 +1436,7 @@ sub www_edit {
name=>"storageId",
value=>$self->get("storageId"),
maxAttachments=>$numberOfAttachments,
deleteFileUrl=>$self->getUrl("func=deleteFile;filename=")
##Removed deleteFileUrl, since it will go around the revision control system.
}) if ($numberOfAttachments);
$var{'contentType.form'} = WebGUI::Form::contentType($session, {

View file

@ -99,6 +99,14 @@ sub definition {
label => $i18n->get("template"),
hoverHelp => $i18n->get("template help"),
},
redeemSubscriptionCodeTemplateId => {
tab => "display",
fieldType => "template",
namespace => "Operation/RedeemSubscription",
defaultValue => 'PBtmpl0000000000000053',
label => $i18n->get("redeem subscription code template"),
hoverHelp => $i18n->get("redeem subscription code template help"),
},
thankYouMessage => {
tab => "properties",
defaultValue => $i18n->get("default thank you message"),
@ -980,7 +988,7 @@ sub www_redeemSubscriptionCode {
$f->submit;
$var->{ codeForm } = $f->print;
return $self->processStyle($self->processTemplate($var, 'PBtmpl0000000000000053'));
return $self->processStyle($self->processTemplate($var, $self->get('redeemSubscriptionCodeTemplateId')));
}
1;

View file

@ -584,26 +584,31 @@ sub getEditForm {
</script>
ENDJS
$tab->raw(<<'ENDHTML');
<label for="addFeed">Add a feed</label>
my $addFeed = $i18n->get('Add a feed');
my $add = $i18n->get('Add');
my $feedUrl = $i18n->get('Feed URL');
my $status = $i18n->get('434', 'WebGUI');
my $lastUpdated = $i18n->get('454', 'WebGUI');
$tab->raw(<<"ENDHTML");
<label for="addFeed">$addFeed</label>
<input type="text" size="60" id="addFeed" name="addFeed" value="" />
<input type="button" value="Add" onclick="FeedsManager.addFeed('feeds','new',{ 'url' : this.form.addFeed.value }); this.form.addFeed.value=''" />
<input type="button" value="$add" onclick="FeedsManager.addFeed('feeds','new',{ 'url' : this.form.addFeed.value }); this.form.addFeed.value=''" />
<table id="feeds" style="width: 100%;">
<thead>
<th style="width: 30px;">&nbsp;</th>
<th style="width: 50%;">Feed URL</th>
<th>Status</th>
<th>Last Updated</th>
<th style="width: 50%;">$feedUrl</th>
<th>$status</th>
<th>$lastUpdated</th>
<th>&nbsp;</th>
</thead>
</table>
ENDHTML
# Add the existing feeds
my $feeds = $self->getFeeds();
$tab->raw('<script type="text/javascript">'."\n");
@ -612,8 +617,8 @@ ENDHTML
$tab->raw("FeedsManager.addFeed('feeds','".$feedId."',".JSON->new->encode( \%row ).");\n");
}
$tab->raw('</script>');
$tab->raw("</td></tr>");
return $form;
}

View file

@ -1164,18 +1164,21 @@ sub www_editField {
#-------------------------------------------------------------------
sub www_editFieldSave {
my $self = shift;
return $self->session->privilege->insufficient
my $session = $self->session;
return $session->privilege->insufficient
unless $self->canEdit;
my $form = $self->session->form;
my $form = $session->form;
my $fieldName = $form->process('fieldName');
my $newName = $self->session->url->urlize($form->process('newName') || $form->process('label'));
my $newName = $session->url->urlize($form->process('newName') || $form->process('label'));
$newName =~ tr{-/}{};
# Make sure we don't rename special fields
my $isMailField = 0;
if ($fieldName) {
my $field = $self->getFieldConfig($fieldName);
if ($field->{isMailField}) {
$newName = $fieldName;
$isMailField = 1;
}
}
@ -1202,6 +1205,9 @@ sub www_editFieldSave {
vertical => $form->process("vertical", 'yesNo'),
extras => $form->process("extras"),
);
if ($isMailField) {
$field{isMailField} = 1;
}
my $newSelf = $self->addRevision;
if ($fieldName) {

View file

@ -346,7 +346,7 @@ sub DESTROY {
my $self = shift;
for my $key ( qw/ _nextAlbum _prevAlbum / ) {
my $asset = delete $self->{ $key };
$asset->DESTROY;
$asset->DESTROY if $asset;
}
}
@ -881,6 +881,8 @@ sub www_addArchive {
my $form = $self->session->form;
my $var = $self->getTemplateVars;
my $i18n = WebGUI::International->new($session);
$var->{ error } = $params->{ error };
$var->{ form_start }
@ -893,7 +895,7 @@ sub www_addArchive {
$var->{ form_submit }
= WebGUI::Form::submit( $session, {
name => "submit",
value => "Submit",
value => $i18n->get("submit",'WebGUI'),
});
$var->{ form_archive }

View file

@ -1021,6 +1021,7 @@ sub www_getCompareListData {
my $self = shift;
my @listingIds = @_;
my $session = $self->session;
my $i18n = WebGUI::International->new($session,'Asset_Matrix');
my (@results,@columnDefs);
unless (scalar(@listingIds)) {
@ -1034,10 +1035,16 @@ sub www_getCompareListData {
$listing->incrementCounter("compares");
my $listingId_safe = $listingId;
$listingId_safe =~ s/-/_____/g;
push(@columnDefs,{key=>$listingId_safe,label=>$listing->get('title'),formatter=>"formatColors",
url=>$listing->getUrl});
push(@columnDefs,{
key =>$listingId_safe,
label =>$listing->get('title').' '.$listing->get('version'),
formatter =>"formatColors",
url =>$listing->getUrl,
lastUpdated =>$session->datetime->epochToHuman( $listing->get('revisonDate'),"%z" ),
});
}
push(@results,{name=>$i18n->get('last updated label'),fieldType=>'lastUpdated'});
my $jsonOutput;
$jsonOutput->{ColumnDefs} = \@columnDefs;
@ -1061,10 +1068,16 @@ sub www_getCompareListData {
}
foreach my $result (@results){
if($result->{fieldType} eq 'category'){
# Row starting with a category label shows the listing name in each column
foreach my $columnDef (@columnDefs) {
$result->{$columnDef->{key}} = $columnDef->{label};
}
}
elsif($result->{fieldType} eq 'lastUpdated'){
foreach my $columnDef (@columnDefs) {
$result->{$columnDef->{key}} = $columnDef->{lastUpdated};
}
}
else{
foreach my $listingId (@listingIds) {
$result->{attributeId} =~ s/-/_____/g;

View file

@ -405,10 +405,6 @@ sub view {
my $previousPageData = undef;
my $eh = $self->session->errorHandler;
foreach my $asset (@{$assets}) {
# Set absoluteDepthOfFirstPage
if ( !defined $absoluteDepthOfFirstPage ) {
$absoluteDepthOfFirstPage = $asset->getLineageLength;
}
# skip pages we shouldn't see
my $pageLineage = $asset->get("lineage");
@ -426,6 +422,13 @@ sub view {
$lineageToSkip = $pageLineage unless ($pageLineage eq "000001");
next;
}
# Set absoluteDepthOfFirstPage after we have determined if the first page is viewable!
# Otherwise, the indent loop calculation below will be off by 1 (or more)
if ( !defined $absoluteDepthOfFirstPage ) {
$absoluteDepthOfFirstPage = $asset->getLineageLength;
}
my $pageData = {};
my $pageProperties = $asset->get;
while (my ($property, $propertyValue) = each %{ $pageProperties }) {

View file

@ -27,170 +27,196 @@ our @ISA = qw(WebGUI::Asset::Wobject);
#-------------------------------------------------------------------
sub definition {
my $class = shift;
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new($session,"Asset_SQLReport");
push(@{$definition}, {
assetName=>$i18n->get('assetName'),
uiLevel => 5,
icon=>'sqlReport.gif',
tableName=>'SQLReport',
className=>'WebGUI::Asset::Wobject::SQLReport',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000059'
},
cacheTimeout=>{
fieldType=>"interval",
defaultValue=>0
},
paginateAfter=>{
fieldType=>"integer",
defaultValue=>50
},
dbQuery1=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef,
},
prequeryStatements1=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
preprocessMacros1=>{
fieldType=>"yesNo",
defaultValue=>0
},
placeholderParams1=>{
fieldType=>"textarea",
defaultValue=>undef
},
databaseLinkId1=>{
fieldType=>"databaseLink",
defaultValue=>0
},
dbQuery2=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
prequeryStatements2=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
preprocessMacros2=>{
fieldType=>"yesNo",
defaultValue=>0
},
placeholderParams2=>{
fieldType=>"textarea",
defaultValue=>undef
},
databaseLinkId2=>{
fieldType=>"databaseLink",
defaultValue=>0
},
dbQuery3=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
prequeryStatements3=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
preprocessMacros3=>{
fieldType=>"yesNo",
defaultValue=>0
},
placeholderParams3=>{
fieldType=>"textarea",
defaultValue=>undef
},
databaseLinkId3=>{
fieldType=>"databaseLink",
defaultValue=>0
},
dbQuery4=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
prequeryStatements4=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
preprocessMacros4=>{
fieldType=>"yesNo",
defaultValue=>0
},
placeholderParams4=>{
fieldType=>"textarea",
defaultValue=>undef
},
databaseLinkId4=>{
fieldType=>"databaseLink",
defaultValue=>0
},
dbQuery5=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
prequeryStatements5=>{
fieldType=>"codearea",
syntax => "sql",
defaultValue=>undef
},
preprocessMacros5=>{
fieldType=>"yesNo",
defaultValue=>0
},
placeholderParams5=>{
fieldType=>"textarea",
defaultValue=>undef
},
databaseLinkId5=>{
fieldType=>"databaseLink",
defaultValue=>0
},
debugMode=>{
fieldType=>"yesNo",
defaultValue=>0
},
# download
downloadType=>{
fieldType=>"text",
defaultValue=>"none",
},
downloadFilename=>{
fieldType=>"text",
defaultValue=>"",
},
downloadTemplateId=>{
fieldType=>"template",
defaultValue=>'SQLReportDownload00001',
},
downloadMimeType=>{
fieldType=>"text",
defaultValue=>"text/html",
},
downloadUserGroup=>{
fieldType=>"group",
defaultValue=>"text/html",
},
}
});
return $class->SUPER::definition($session, $definition);
my $class = shift;
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new($session,"Asset_SQLReport");
my %properties;
tie %properties, 'Tie::IxHash';
%properties = (
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000059',
label=>$i18n->get(72),
},
cacheTimeout=>{
fieldType=>"interval",
defaultValue=>0,
label=>$i18n->get('cache timeout'),
},
paginateAfter=>{
fieldType=>"integer",
defaultValue=>50,
label=>$i18n->get(14),
},
dbQuery1=>{
fieldType=>"codearea",
defaultValue=>undef,
label=>$i18n->get(4) . ' 1',
},
prequeryStatements1=>{
fieldType=>"codearea",
defaultValue=>undef,
label => $i18n->get('Prequery statements') . ' 1',
},
preprocessMacros1=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(15) . ' 1',
},
placeholderParams1=>{
fieldType=>"textarea",
defaultValue=>undef,
label=>$i18n->get('Placeholder Parameters') . ' 1',
},
databaseLinkId1=>{
fieldType=>"databaseLink",
defaultValue=>0,
label=>$i18n->get("1075", 'WebGUI').' 1',
},
dbQuery2=>{
fieldType=>"codearea",
defaultValue=>undef,
label=>$i18n->get(4) . ' 2',
},
prequeryStatements2=>{
fieldType=>"codearea",
defaultValue=>undef,
label => $i18n->get('Prequery statements') . ' 2',
},
preprocessMacros2=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(15) . ' 2',
},
placeholderParams2=>{
fieldType=>"textarea",
defaultValue=>undef,
label=>$i18n->get('Placeholder Parameters') . ' 2',
},
databaseLinkId2=>{
fieldType=>"databaseLink",
defaultValue=>0,
label=>$i18n->get("1075", 'WebGUI').' 2',
},
dbQuery3=>{
fieldType=>"codearea",
defaultValue=>undef,
label=>$i18n->get(4) . ' 3',
},
prequeryStatements3=>{
fieldType=>"codearea",
defaultValue=>undef,
label => $i18n->get('Prequery statements') . ' 3',
},
preprocessMacros3=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(15) . ' 3',
},
placeholderParams3=>{
fieldType=>"textarea",
defaultValue=>undef,
label=>$i18n->get('Placeholder Parameters') . ' 3',
},
databaseLinkId3=>{
fieldType=>"databaseLink",
defaultValue=>0,
label=>$i18n->get("1075", 'WebGUI').' 3',
},
dbQuery4=>{
fieldType=>"codearea",
defaultValue=>undef,
label=>$i18n->get(4) . ' 4',
},
prequeryStatements4=>{
fieldType=>"codearea",
defaultValue=>undef,
label => $i18n->get('Prequery statements') . ' 4',
},
preprocessMacros4=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(15) . ' 4',
},
placeholderParams4=>{
fieldType=>"textarea",
defaultValue=>undef,
label=>$i18n->get('Placeholder Parameters') . ' 4',
},
databaseLinkId4=>{
fieldType=>"databaseLink",
defaultValue=>0,
label=>$i18n->get("1075", 'WebGUI').' 4',
},
dbQuery5=>{
fieldType=>"codearea",
defaultValue=>undef,
label=>$i18n->get(4) . ' 5',
},
prequeryStatements5=>{
fieldType=>"codearea",
defaultValue=>undef,
label => $i18n->get('Prequery statements') . ' 5',
},
preprocessMacros5=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(15) . '5',
},
placeholderParams5=>{
fieldType=>"textarea",
defaultValue=>undef,
label=>$i18n->get('Placeholder Parameters') . ' 5',
},
databaseLinkId5=>{
fieldType=>"databaseLink",
defaultValue=>0,
label=>$i18n->get("1075", 'WebGUI').' 5',
},
debugMode=>{
fieldType=>"yesNo",
defaultValue=>0,
label=>$i18n->get(16),
},
# download
downloadType=>{
fieldType=>"text",
defaultValue=>"none",
label=>$i18n->get("download type"),
},
downloadFilename=>{
fieldType=>"text",
defaultValue=>"",
label=>$i18n->get("download filename"),
},
downloadTemplateId=>{
fieldType=>"template",
defaultValue=>'SQLReportDownload00001',
label=>$i18n->get("download template"),
},
downloadMimeType=>{
fieldType=>"text",
defaultValue=>"text/html",
label=>$i18n->get("download mimetype"),
},
downloadUserGroup=>{
fieldType=>"group",
defaultValue=>"text/html",
label=>$i18n->get("download usergroup"),
},
);
push(@{$definition}, {
assetName=>$i18n->get('assetName'),
uiLevel => 5,
icon=>'sqlReport.gif',
tableName=>'SQLReport',
className=>'WebGUI::Asset::Wobject::SQLReport',
properties => \%properties,
autoGenerateForms => 0,
});
return $class->SUPER::definition($session, $definition);
}
#-------------------------------------------------------------------

View file

@ -39,23 +39,23 @@ sub definition {
label => "Template ID"
},
showProgress => {
fieldType => "yesNo",
fieldType => "yesNo",
defaultValue => 0,
tab => 'properties',
label => "Show user their progress"
tab => 'properties',
label => "Show user their progress"
},
showTimeLimit => {
fieldType => "yesNo",
fieldType => "yesNo",
defaultValue => 0,
tab => 'properties',
label => "Show user their time remaining"
tab => 'properties',
label => "Show user their time remaining"
},
timeLimit => {
fieldType => 'integer',
timeLimit => {
fieldType => 'integer',
defaultValue => 0,
tab => 'properties',
hoverHelp => $i18n->get('timelimit hoverHelp'),
label => $i18n->get('timelimit')
tab => 'properties',
hoverHelp => $i18n->get('timelimit hoverHelp'),
label => $i18n->get('timelimit')
},
groupToEditSurvey => {
fieldType => 'group',
@ -260,9 +260,9 @@ Loads the initial edit survey page. All other edit actions are JSON calls from
sub www_editSurvey {
my $self = shift;
return $self->session->privilege->insufficient()
unless ($self->session->user->isInGroup($self->get('groupToEditSurvey')));
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
my %var;
my $out = $self->processTemplate( \%var, $self->get("surveyEditTemplateId") );
@ -273,9 +273,9 @@ sub www_editSurvey {
#-------------------------------------------------------------------
sub www_submitObjectEdit {
my $self = shift;
return $self->session->privilege->insufficient()
unless ($self->session->user->isInGroup($self->get('groupToEditSurvey')));
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
# my $ref = @{from_json($self->session->form->process("data"))};
my $responses = $self->session->form->paramsHashRef();
@ -299,14 +299,14 @@ sub www_submitObjectEdit {
} ## end sub www_submitObjectEdit
#-------------------------------------------------------------------
=head2 Allow survey editors to "jump to" a particular section of question in a
=head2 Allow survey editors to "jump to" a particular section of question in a
Survey by tricking Survey into thinking they've completed the survey up to that
point. Useful for survey builders.
Note that calling this method will delete any existing survey responses for the
current user (although only survey builders can call this method so that shouldn't be
a problem
=cut
sub www_jumpTo {
my $self = shift;
@ -314,7 +314,7 @@ sub www_jumpTo {
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
my $data = $self->session->form->paramsHashRef();
$self->session->log->debug("jumpTo to $data->{id}");
# Remove existing responses for current user
@ -387,10 +387,10 @@ sub deleteObject {
#-------------------------------------------------------------------
sub www_newObject {
my $self = shift;
return $self->session->privilege->insufficient()
unless ($self->session->user->isInGroup($self->get('groupToEditSurvey')));
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
my $ref;
my $ids = $self->session->form->process("data");
@ -411,11 +411,11 @@ sub www_newObject {
#-------------------------------------------------------------------
sub www_dragDrop {
my $self = shift;
return $self->session->privilege->insufficient()
unless ($self->session->user->isInGroup($self->get('groupToEditSurvey')));
my $p = from_json( $self->session->form->process("data") );
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
my $p = from_json( $self->session->form->process("data") );
my @tid = split /-/, $p->{target}->{id};
my @bid = split /-/, $p->{before}->{id};
@ -463,6 +463,7 @@ sub www_dragDrop {
$self->survey->insertObject( $target, [ $bid[0], $bid[1], $bid[2] ] );
}
else {
#else put it back where it was
$self->survey->insertObject( $target, \@tid );
}
@ -476,13 +477,19 @@ sub www_dragDrop {
#-------------------------------------------------------------------
sub www_loadSurvey {
my ( $self, $options ) = @_;
my $editflag = 1;
$self->loadSurveyJSON();
my $address = defined $options->{address} ? $options->{address} : undef;
if ( !defined $address ) {
if ( my $inAddress = $self->session->form->process("data") ) {
$address = [ split /-/, $inAddress ];
if( $inAddress eq '-' ) {
$editflag = 0;
$address = [ 0 ];
} else {
$address = [ split /-/, $inAddress ];
}
}
else {
$address = [0];
@ -504,7 +511,7 @@ sub www_loadSurvey {
elsif ( $var->{type} eq 'answer' ) {
$editHtml = $self->processTemplate( $var, $self->get("answerEditTemplateId") );
}
# Generate the list of valid goto targets
my @gotoTargets = $self->survey->getGotoTargets;
@ -559,9 +566,10 @@ sub www_loadSurvey {
#ids is a list of all ids passed in which are draggable (for adding events)
#type is the object type
my $return = {
"address", $address, "buttons", \%buttons, "edithtml", $editHtml,
"ddhtml", $html, "ids", \@ids, "type", $var->{type},
gotoTargets => \@gotoTargets,
"address", $address, "buttons", \%buttons,
"edithtml", $editflag ? $editHtml : '',
"ddhtml", $html, "ids", \@ids, "type", $var->{type}
,gotoTargets => \@gotoTargets,
};
$self->session->http->setMimeType('application/json');
return to_json($return);
@ -631,19 +639,90 @@ sub view {
my $self = shift;
my %var;
$var{'edit_survey_url'} = $self->getUrl('func=editSurvey');
$var{'take_survey_url'} = $self->getUrl('func=takeSurvey');
$var{'view_simple_results_url'} = $self->getUrl('func=exportSimpleResults');
$var{'view_transposed_results_url'} = $self->getUrl('func=exportTransposedResults');
$var{'view_statistical_overview_url'} = $self->getUrl('func=viewStatisticalOverview');
$var{'view_grade_book_url'} = $self->getUrl('func=viewGradeBook');
$var{'user_canTakeSurvey'} = $self->session->user->isInGroup( $self->get("groupToTakeSurvey") );
$var{'user_canViewReports'} = $self->session->user->isInGroup( $self->get("groupToViewReports") );
$var{'user_canEditSurvey'} = $self->session->user->isInGroup( $self->get("groupToEditSurvey") );
$var{'edit_survey_url'} = $self->getUrl('func=editSurvey');
$var{'take_survey_url'} = $self->getUrl('func=takeSurvey');
$var{'view_simple_results_url'} = $self->getUrl('func=exportSimpleResults');
$var{'view_transposed_results_url'} = $self->getUrl('func=exportTransposedResults');
$var{'view_statistical_overview_url'} = $self->getUrl('func=viewStatisticalOverview');
$var{'view_grade_book_url'} = $self->getUrl('func=viewGradeBook');
$var{'user_canTakeSurvey'} = $self->session->user->isInGroup( $self->get("groupToTakeSurvey") );
$var{'user_canViewReports'} = $self->session->user->isInGroup( $self->get("groupToViewReports") );
$var{'user_canEditSurvey'} = $self->session->user->isInGroup( $self->get("groupToEditSurvey") );
$var{'user_canEditSurvey'} = $self->session->user->isInGroup( $self->get("groupToEditSurvey") );
my ( $code, $overTakeLimit ) = $self->getResponseInfoForView();
$var{'lastResponseCompleted'} = $code;
$var{'lastResponseTimedOut'} = $code > 1 ? 1 : 0;
$var{'maxResponsesSubmitted'} = $overTakeLimit;
my $out = $self->processTemplate( \%var, undef, $self->{_viewTemplate} );
return $out;
}
} ## end sub view
#-------------------------------------------------------------------
=head2 getResponseInfoForView ( )
Looks to see if this user has a response, looks at the last one to see if it was completed or timed out.
Then it checks to see if the user has reached the max number of responses.
=cut
sub getResponseInfoForView {
my $self = shift;
my ( $code, $taken );
my $maxTakes = $self->getValue("maxResponsesPerUser");
my $id = $self->session->user->userId();
my $anonId
= $self->session->form->process("userid")
|| $self->session->http->getCookies->{"Survey2AnonId"}
|| undef;
$self->session->http->setCookie( "Survey2AnonId", $anonId ) if ($anonId);
my $ip = $self->session->env->getIp;
my $string;
#if there is an anonid or id is for a WG user
if ( $anonId or $id != 1 ) {
$string = 'userId';
if ($anonId) {
$string = 'anonId';
$id = $anonId;
}
my $responseId
= $self->session->db->quickScalar(
"select Survey_responseId from Survey_response where $string = ? and assetId = ? and isComplete = 0",
[ $id, $self->getId() ] );
if ( !$responseId ) {
$code = $self->session->db->quickScalar(
"select isComplete from Survey_response where $string = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1",
[ $id, $self->getId() ]
);
}
$taken
= $self->session->db->quickScalar(
"select count(*) from Survey_response where $string = ? and assetId = ? and isComplete > 0",
[ $id, $self->getId() ] );
} ## end if ( $anonId or $id !=...
elsif ( $id == 1 ) {
my $responseId = $self->session->db->quickScalar(
"select Survey_responseId from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete = 0",
[ $id, $ip, $self->getId() ]
);
if ( !$responseId ) {
$code = $self->session->db->quickScalar(
"select isComplete from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1",
[ $id, $ip, $self->getId() ]
);
}
$taken = $self->session->db->quickScalar(
"select count(*) from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0",
[ $id, $ip, $self->getId() ]
);
} ## end elsif ( $id == 1 )
return ( $code, $taken >= $maxTakes );
} ## end sub getResponseInfoForView
#-------------------------------------------------------------------
@ -667,24 +746,26 @@ sub www_takeSurvey {
my $responseId = $self->getResponseId();
if ( !$responseId ) {
$self->session->log->debug('No responseId, surveyEnd');
# return $self->surveyEnd(); # disabled. let the js handle the exitUrl redirection
} else {
# return $self->surveyEnd(); # disabled. let the js handle the exitUrl redirection
}
else {
$self->session->log->debug("ResponseId: $responseId");
}
};
my $out = $self->processTemplate( \%var, $self->get("surveyTakeTemplateId") );
return $self->session->style->process($out,$self->get("styleTemplateId"));
}
return $self->session->style->process( $out, $self->get("styleTemplateId") );
} ## end sub www_takeSurvey
#-------------------------------------------------------------------
sub www_deleteResponses {
my $self = shift;
return $self->session->privilege->insufficient()
unless ($self->session->user->isInGroup($self->get('groupToEditSurvey')));
$self->session->db->write('delete from Survey_response where assetId = ?',[$self->getId]);
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) );
$self->session->db->write( 'delete from Survey_response where assetId = ?', [ $self->getId ] );
return;
}
@ -702,7 +783,7 @@ sub www_submitQuestions {
my $responseId = $self->getResponseId();
if ( !$responseId ) {
$self->session->log->debug('No response id, surveyEnd');
return $self->surveyEnd();
return $self->surveyEnd();
}
my $responses = $self->session->form->paramsHashRef();
@ -712,7 +793,7 @@ sub www_submitQuestions {
$self->loadBothJSON();
my $termInfo = $self->response->recordResponses($self->session, $responses);
my $termInfo = $self->response->recordResponses( $self->session, $responses );
$self->saveResponseJSON();
@ -770,9 +851,9 @@ sub www_loadQuestions {
$self->session->log->debug('No responseId, surveyEnd');
return $self->surveyEnd();
}
if($self->response->hasTimedOut($self->get('timeLimit'))){
if ( $self->response->hasTimedOut( $self->get('timeLimit') ) ) {
$self->session->log->debug('Response hasTimedOut, surveyEnd');
return $self->surveyEnd();
return $self->surveyEnd( undef, 2 );
}
if ( $self->response->surveyEnd() ) {
@ -792,19 +873,41 @@ sub www_loadQuestions {
} ## end sub www_loadQuestions
#-------------------------------------------------------------------
#called when the survey is over.
=head2 surveyEnd ( [ $url ], [ $completeCode ] )
Marks the survey completed with either 1 or the $completeCode and then sends the url to the site home or if defined, $url.
=head3 $url
An optional url to send the user to upon survey completion.
=head3 $completeCode
An optional code (defaults to 1) to say how the user completed the survey.
1 is normal completion.
2 is timed out.
=cut
sub surveyEnd {
my $self = shift;
my $url = shift;
if (my $responseId = $self->getResponseId()) { #also loads the survey and response
# $self->session->db->write("update Survey_response set endDate = ? and isComplete = 1 where Survey_responseId = ?",[WebGUI::DateTime->now->toDatabase,$responseId]);
my $self = shift;
my $url = shift;
my $completeCode = shift;
$completeCode = defined $completeCode ? $completeCode : 1;
if ( my $responseId = $self->getResponseId() ) { #also loads the survey and response
# $self->session->db->write("update Survey_response set endDate = ? and isComplete > 0 where Survey_responseId = ?",[WebGUI::DateTime->now->toDatabase,$responseId]);
$self->session->db->setRow(
"Survey_response",
"Survey_responseId", {
Survey_responseId => $responseId,
endDate => time(),#WebGUI::DateTime->now->toDatabase,
isComplete => 1
endDate => time(), #WebGUI::DateTime->now->toDatabase,
isComplete => $completeCode
}
);
}
@ -819,8 +922,9 @@ sub surveyEnd {
$url = "/";
}
}
# $self->session->http->setRedirect($url);
return to_json({ "type", "forward", "url", $url });
# $self->session->http->setRedirect($url);
return to_json( { "type", "forward", "url", $url } );
} ## end sub surveyEnd
#-------------------------------------------------------------------
@ -867,12 +971,13 @@ sub prepareShowSurveyTemplate {
$$q{'verte'} = "</p>";
}
} ## end foreach my $q (@$questions)
$section->{'questions'} = $questions;
$section->{'questions'} = $questions;
$section->{'questionsAnswered'} = $self->response->{questionsAnswered};
$section->{'totalQuestions'} = @{$self->response->surveyOrder};
$section->{'showProgress'} = $self->get('showProgress');
$section->{'showTimeLimit'} = $self->get('showTimeLimit');
$section->{'minutesLeft'} = int((($self->response->startTime() + (60 * $self->get('timeLimit'))) - time())/60);
$section->{'totalQuestions'} = @{ $self->response->surveyOrder };
$section->{'showProgress'} = $self->get('showProgress');
$section->{'showTimeLimit'} = $self->get('showTimeLimit');
$section->{'minutesLeft'}
= int( ( ( $self->response->startTime() + ( 60 * $self->get('timeLimit') ) ) - time() ) / 60 );
if(scalar @$questions == ($section->{'totalQuestions'} - $section->{'questionsAnswered'})){
$section->{isLastPage} = 1
@ -1000,8 +1105,8 @@ sub getResponseId {
userId => $id,
ipAddress => $ip,
username => $self->session->user->username,
startDate => $time,#WebGUI::DateTime->now->toDatabase,
endDate => 0,#WebGUI::DateTime->now->toDatabase,
startDate => $time, #WebGUI::DateTime->now->toDatabase,
endDate => 0, #WebGUI::DateTime->now->toDatabase,
assetId => $self->getId(),
anonId => $anonId
}
@ -1010,7 +1115,7 @@ sub getResponseId {
$self->response->createSurveyOrder();
$self->{responseId} = $responseId;
$self->saveResponseJSON();
} ## end if ( $haveTaken < $allowedTakes)
else {
$self->session->log->debug("haveTaken ($haveTaken) >= allowedTakes ($allowedTakes)");
@ -1041,14 +1146,14 @@ sub canTakeSurvey {
if ( $id == 1 ) {
$takenCount = $self->session->db->quickScalar(
"select count(*) from Survey_response where userId = ? and ipAddress = ? and assetId = ?
and isComplete = ?", [ $id, $ip, $self->getId(), 1 ]
and isComplete > ?", [ $id, $ip, $self->getId(), 0 ]
);
}
else {
$takenCount
= $self->session->db->quickScalar(
"select count(*) from Survey_response where userId = ? and assetId = ? and isComplete = ?",
[ $id, $self->getId(), 1 ] );
"select count(*) from Survey_response where userId = ? and assetId = ? and isComplete > ?",
[ $id, $self->getId(), 0 ] );
}
if ( $takenCount >= $maxTakes ) {
@ -1060,32 +1165,36 @@ sub canTakeSurvey {
return $self->{canTake};
} ## end sub canTakeSurvey
#-------------------------------------------------------------------
sub www_viewGradeBook{
sub www_viewGradeBook {
my $self = shift;
return $self->session->privilege->insufficient()
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) );
$self->loadTempReportTable();
my @peoples = $self->session->db->quickArray("SELECT UNIQUE(Survey_responseId) from Survey_tempReport where assetId = ?",[$self->getId()]);
for my $people(@peoples){
my @peoples
= $self->session->db->quickArray( "SELECT UNIQUE(Survey_responseId) from Survey_tempReport where assetId = ?",
[ $self->getId() ] );
for my $people (@peoples) {
#my $
}
}
} ## end sub www_viewGradeBook
#-------------------------------------------------------------------
sub www_exportSimpleResults{
sub www_exportSimpleResults {
my $self = shift;
return $self->session->privilege->insufficient()
return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) );
$self->loadTempReportTable();
my $filename = $self->session->url->escape( $self->get("title") . "_results.tab" );
my $content
= $self->session->db->quickTab(

View file

@ -856,7 +856,7 @@ Logs an error to the webgui log file, using the session logger.
sub log {
my ( $self, $message) = @_;
if ( defined $self->{log} ) {
$self->{log}->error($message);
$self->{log}->debug($message);
}
}

View file

@ -320,10 +320,10 @@ sub getSectionEditVars {
sub getGotoTargets {
my $self = shift;
my @section_vars = map {$_->{variable}} @{$self->sections};
my @question_vars = map {$_->{variable}} @{$self->questions};
return grep {$_ ne ''} (@section_vars, @question_vars);
return grep {$_ ne ''} (@section_vars, @question_vars);
}
=head2 getQuestionEditVars ( $address )

View file

@ -143,10 +143,14 @@ sub generateFeed {
my $cache = WebGUI::Cache->new($self->session, $url, "RSS");
my $value = $cache->get;
unless ($value) {
$value = $cache->setByHTTP($url, $self->get("cacheTimeout"));
$value = $cache->setByHTTP($url, $self->get("cacheTimeout"));
$newlyCached = 1;
}
eval { $feed->merge($value) };
utf8::downgrade($value);
eval {
my $singleFeed = XML::FeedPP->new($value, utf8_flag => 1);
$feed->merge($singleFeed);
};
if (my $e = WebGUI::Error->caught()) {
$log->error("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$e->message);
}

View file

@ -19,6 +19,7 @@ use WebGUI::Text;
use WebGUI::Form::File;
use WebGUI::DateTime;
use base 'WebGUI::Asset::Wobject';
use Data::Dumper;
#-------------------------------------------------------------------
@ -200,6 +201,38 @@ sub canViewThing {
#-------------------------------------------------------------------
=head2 badOtherThing ( tableName, fieldName )
Checks that the table and field for the other Thing are okay. Returns 0 if okay,
otherwise, returns an i18n message appropriate for the type of error, like the
table or the field in the table not existing.
=head3 tableName
The table name for the other thing.
=head3 fieldName
The field in the other thing to check for.
=cut
sub badOtherThing {
my ($self, $tableName, $fieldName) = @_;
my $session = $self->session;
my $db = $session->db;
my $i18n = WebGUI::International->new($session, 'Asset_Thingy');
my ($otherThingTableExists) = $db->quickArray('show tables like ?',[$tableName]);
return $i18n->get('other thing missing message') unless $otherThingTableExists;
my ($otherThingFieldExists) = $db->quickArray(
sprintf('show columns from %s like ?', $db->dbh->quote_identifier($tableName)),
[$fieldName]);
return $i18n->get('other thing field missing message') unless $otherThingFieldExists;
return undef;
}
#-------------------------------------------------------------------
=head2 definition ( )
defines wobject properties for Thingy instances. If you choose to "autoGenerateForms", the
@ -803,10 +836,11 @@ sub getFieldValue {
my $otherThingId = $field->{fieldType};
$otherThingId =~ s/^otherThing_//x;
my $tableName = 'Thingy_'.$otherThingId;
my ($otherThingTableExists) = $self->session->db->quickArray('show tables like ?',[$tableName]);
if ($otherThingTableExists){
my $fieldName = 'field_'.$field->{fieldInOtherThingId};
my $badThing = $self->badOtherThing($tableName, $fieldName);
if (! $badThing){
($processedValue) = $self->session->db->quickArray('select '
.$dbh->quote_identifier('field_'.$field->{fieldInOtherThingId})
.$dbh->quote_identifier($fieldName)
.' from '.$dbh->quote_identifier($tableName)
.' where thingDataId = ?',[$value]);
}
@ -840,9 +874,10 @@ sub getFormElement {
my $self = shift;
my $data = shift;
my %param;
my $db = $self->session->db;
my $session = $self->session;
my $db = $session->db;
my $dbh = $db->dbh;
my $i18n = WebGUI::International->new($self->session,"Asset_Thingy");
my $i18n = WebGUI::International->new($session,"Asset_Thingy");
$param{name} = "field_".$data->{fieldId};
my $name = $param{name};
@ -865,7 +900,7 @@ sub getFormElement {
if (WebGUI::Utility::isIn($data->{fieldType},qw(SelectList CheckList SelectBox Attachments))) {
my @defaultValues;
if ($self->session->form->param($name)) {
@defaultValues = $self->session->form->selectList($name);
@defaultValues = $session->form->selectList($name);
}
else {
foreach (split(/\n/x, $data->{value})) {
@ -881,7 +916,7 @@ sub getFormElement {
if ($class->isa('WebGUI::Form::List')) {
delete $param{size};
my $values = WebGUI::Operation::Shared::secureEval($self->session,$data->{possibleValues});
my $values = WebGUI::Operation::Shared::secureEval($session,$data->{possibleValues});
if (ref $values eq 'HASH') {
$param{options} = $values;
}
@ -909,30 +944,30 @@ sub getFormElement {
my $otherThingId = $data->{fieldType};
$otherThingId =~ s/^otherThing_(.*)/$1/x;
$param{fieldType} = "SelectList";
$class = 'WebGUI::Form::'. $param{fieldType};
my $options = ();
my $tableName = 'Thingy_'.$otherThingId;
my ($otherThingTableExists) = $db->quickArray('show tables like ?',[$tableName]);
if ($otherThingTableExists){
$options = $db->buildHashRef('select thingDataId, '
.$dbh->quote_identifier('field_'.$data->{fieldInOtherThingId})
.' from '.$dbh->quote_identifier($tableName));
my $value = $data->{value} || $data->{defaultValue};
($param{value}) = $db->quickArray('select '
.$dbh->quote_identifier('field_'.$data->{fieldInOtherThingId})
.' from '.$dbh->quote_identifier($tableName)
.' where thingDataId = ?',[$value]);
}
else{
return $i18n->get('other thing missing message');
}
my $fieldName = 'field_'.$data->{fieldInOtherThingId};
my $errorMessage = $self->badOtherThing($tableName, $fieldName);
return $errorMessage if $errorMessage;
$options = $db->buildHashRef('select thingDataId, '
.$dbh->quote_identifier($fieldName)
.' from '.$dbh->quote_identifier($tableName));
my $value = $data->{value} || $data->{defaultValue};
($param{value}) = $db->quickArray('select '
.$dbh->quote_identifier($fieldName)
.' from '.$dbh->quote_identifier($tableName)
.' where thingDataId = ?',[$value]);
$param{size} = 1;
$param{multiple} = 0;
$param{options} = $options;
$param{value} = $data->{value} || $data->{defaultValue};
}
my $formElement = eval { WebGUI::Pluggable::instanciate($class, "new", [$self->session, \%param ])};
my $formElement = eval { WebGUI::Pluggable::instanciate($class, "new", [$session, \%param ])};
return $formElement->toHtml();
}
@ -1048,6 +1083,10 @@ sub getViewThingVars {
"label" => $field{label},
"isHidden" => $hidden,
"url" => $otherThingUrl,
"isVisible" => ($field{status} eq "visible" && !$hidden),
"isRequired" => ($field{status} eq "required" && !$hidden),
"pretext" => $field{pretext},
"subtext" => $field{subtext},
);
push(@viewScreenTitleFields,$value) if ($field{viewScreenTitle});
push(@field_loop, { map {("field_".$_ => $fieldProperties{$_})} keys(%fieldProperties) });
@ -1657,6 +1696,9 @@ sub www_editThing {
if ($field->{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>";
}
if ($field->{fieldType} eq "Image"){
$formElement = "<input type='file' name='image'>";
}
else{
$formElement = $self->getFormElement($field);
}
@ -1672,9 +1714,9 @@ sub www_editThing {
." <td style='width:100px;' valign='top' class='formDescription'>".$field->{label}."</td>\n"
." <td style='width:370px;'>".$formElement."</td>\n"
." <td style='width:120px;' valign='top'> <input onClick=\"editListItem('".$self->session->url->page()
."?func=editField;fieldId=".$field->{fieldId}.";thingId=".$thingId."','".$field->{fieldId}."')\" value='Edit' type='button'>"
."?func=editField;fieldId=".$field->{fieldId}.";thingId=".$thingId."','".$field->{fieldId}."')\" value='".$i18n->get('Edit','Icon')."' type='button'>"
."<input onClick=\"deleteListItem('".$self->session->url->page()."','".$field->{fieldId}."','".$thingId."')\" "
."value='Delete' type='button'></td>\n</tr>\n</table>\n</li>\n";
."value='".$i18n->get('Delete','Icon')."' type='button'></td>\n</tr>\n</table>\n</li>\n";
$fieldsViewScreen .= "<tr id='view_tr_".$field->{fieldId}."'>"
."<td class='formDescription' style='width:180px;' id='view_label_".$field->{fieldId}."'>".$field->{label}
@ -2088,6 +2130,9 @@ sub www_editFieldSave {
if ($properties{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>";
}
elsif ($properties{fieldType} eq "Image"){
$formElement = "<input type='file' name='image'>";
}
else{
$formElement = $self->getFormElement(\%properties);
}
@ -2101,9 +2146,9 @@ sub www_editFieldSave {
$listItemHTML = "<table>\n<tr>\n<td style='width:100px;' valign='top' class='formDescription'>".$label."</td>\n"
."<td style='width:370px;'>".$formElement."</td>\n"
."<td style='width:120px;' valign='top'> <input onClick=\"editListItem('".$self->session->url->page()
."?func=editField;fieldId=".$newFieldId.";thingId=".$properties{thingId}."','".$newFieldId."')\" value='Edit' type='button'>"
."?func=editField;fieldId=".$newFieldId.";thingId=".$properties{thingId}."','".$newFieldId."')\" value='".$i18n->get('Edit','Icon')."' type='button'>"
."<input onClick=\"deleteListItem('".$self->session->url->page()."','".$newFieldId
."','".$properties{thingId}."')\" value='Delete' type='button'></td>\n</tr>\n</table>";
."','".$properties{thingId}."')\" value='".$i18n->get('Delete','Icon')."' type='button'></td>\n</tr>\n</table>";
$session->output->print($newFieldId.$listItemHTML);
return "chunked";

View file

@ -11,7 +11,6 @@ package WebGUI::Asset::Wobject::UserList;
#-------------------------------------------------------------------
use strict;
use warnings;
use HTML::Entities;
use Tie::CPHash;
use Tie::IxHash;

View file

@ -43,8 +43,9 @@ sub _isValidLDAPUser {
my $self = shift;
my ($error, $ldap, $search, $auth, $connectDN);
my $i18n = WebGUI::International->new($self->session);
my $connection = $self->getLDAPConnection;
return 0 unless $connection;
#Check to see that the LDAP Link is valid
my $ldapLink = $self->getLDAPLink;
@ -52,12 +53,19 @@ sub _isValidLDAPUser {
$self->error('<li>'.$i18n->get(2,'AuthLDAP').'</li>');
return 0;
}
my $username = $self->session->form->get("authLDAP_ldapId") || $self->session->form->get("username");
my $password = $self->session->form->get("authLDAP_identifier") || $self->session->form->get("identifier");
my $uri = URI->new($connection->{ldapUrl}) or $error = '<li>'.$i18n->get(2,'AuthLDAP').'</li>';
if($error ne ""){
$self->error($error);
return 0;
}
my $username = $self->session->form->get("authLDAP_ldapId") || $self->session->form->get("username");
my $password = $self->session->form->get("authLDAP_identifier") || $self->session->form->get("identifier");
# Create an LDAP object
if ($ldap = $ldapLink->connectToLDAP) {
if ($ldap = Net::LDAP->new($uri->host, (port=>$uri->port))) {
my $uri = $ldapLink->getURI;
# Bind as a proxy user to search for the user trying to login
if($connection->{connectDn}) {
@ -85,7 +93,7 @@ sub _isValidLDAPUser {
# Remember the users DN so we can use it later.
$self->setConnectDN($connectDN);
$ldap->unbind;
# Create a new LDAP object
$ldap = $ldapLink->connectToLDAP or $error .= $i18n->get(2,'AuthLDAP');
@ -117,7 +125,7 @@ sub _isValidLDAPUser {
$error = '<li>'.$i18n->get(2,'AuthLDAP').'</li>';
$self->session->errorHandler->error("Couldn't create LDAP object: ".$connection->{ldapUrl});
}
$self->error($error);
# Return 1 on successful authentication
@ -148,7 +156,7 @@ sub authenticate {
my $userId = $self->userId;
my $identifier = $_[1];
my $userData = $self->getParams;
$error .= '<li>'.$i18n->get(12,'AuthLDAP').'</li>' if ($userData->{ldapUrl} eq "");
$error .= '<li>'.$i18n->get(11,'AuthLDAP').'</li>' if ($userData->{connectDN} eq "");
$self->error($error);
@ -157,7 +165,7 @@ sub authenticate {
$self->user(WebGUI::User->new($self->session,1));
return 0 ;
}
if($uri = URI->new($userData->{ldapUrl})) {
# Create an LDAP object
@ -179,14 +187,14 @@ sub authenticate {
$error .= '<li>LDAP error "'.$self->ldapStatusCode($auth->code).'" occured.'.$i18n->get(69).'</li>';
$self->session->errorHandler->error("LDAP error: ".$self->ldapStatusCode($auth->code));
}
$ldap->unbind;
}
else {
$error .= '<li>'.$i18n->get(13,'AuthLDAP').'</li>';
$self->session->errorHandler->error("Could not process this LDAP URL: ".$userData->{ldapUrl});
}
if($error ne ""){
$self->error($error);
$self->user(WebGUI::User->new($self->session,1));
@ -208,8 +216,9 @@ sub connectToLDAP {
my $self = shift;
my $connectionId = $self->session->form->process("connection") || $self->session->setting->get("ldapConnection");
my $ldapLink = WebGUI::LDAPLink->new($self->session,$connectionId);
return undef unless defined $ldapLink;
my $connection = $ldapLink->get;
$self->{'_ldapLink' } = $ldapLink;
$self->{'_connection'} = $connection;
return $connection;
@ -227,13 +236,17 @@ sub createAccount {
elsif (!$self->session->setting->get("anonymousRegistration") && !$self->session->setting->get('inboxInviteUserEnabled')) {
return $self->displayLogin;
}
my $connection = $self->getLDAPConnection;
if (! $connection) {
$self->session->log->error('Unable to create LDAP account as there is no LDAP connection defined');
return $self->displayLogin;
}
$vars->{'create.message'} = $message if ($message);
my $i18n = WebGUI::International->new($self->session,"AuthLDAP");
$vars->{'create.form.ldapConnection.label'} = $i18n->get("ldapConnection");
my $url = $self->session->url->page("op=auth;method=createAccount;connection=");
$vars->{'create.form.ldapConnection'} = WebGUI::Form::selectBox($self->session, {
name=>"ldapConnection",
@ -256,30 +269,31 @@ sub createAccount {
extras => $self->getExtrasStyle($ldapPwd)
});
$vars->{'create.form.password.label'} = $connection->{ldapPasswordName};
$vars->{'create.form.hidden'} = WebGUI::Form::hidden($self->session,{"name"=>"confirm","value"=>$confirm});
return $self->SUPER::createAccount("createAccountSave",$vars);
}
#-------------------------------------------------------------------
sub createAccountSave {
my $self = shift;
my $username = $self->session->form->process('authLDAP_ldapId');
my $password = $self->session->form->process('authLDAP_identifier');
my $error = "";
my $i18n = WebGUI::International->new($self->session);
#Validate user in LDAP
if(!$self->_isValidLDAPUser()){
return $self->createAccount("<h1>".$i18n->get(70)."</h1>".$self->error);
}
my $connection = $self->getLDAPConnection;
my $ldapLink = $self->getLDAPLink;
my $self = shift;
my $username = $self->session->form->process('authLDAP_ldapId');
my $password = $self->session->form->process('authLDAP_identifier');
my $error = "";
my $i18n = WebGUI::International->new($self->session);
#Get connectDN from settings
my $ldap = $ldapLink->connectToLDAP;
my $uri = $ldapLink->getURI;
#Validate user in LDAP
if(!$self->_isValidLDAPUser()){
return $self->createAccount("<h1>".$i18n->get(70)."</h1>".$self->error);
}
my $connection = $self->getLDAPConnection;
if (! $connection) {
return $self->createAccount("<h1>".$i18n->get('no ldap link for auth')."</h1>".$self->error);
}
#Get connectDN from settings
my $uri = URI->new($connection->{ldapUrl});
my $ldap = Net::LDAP->new($uri->host, (port=>$uri->port));
my $auth;
if($connection->{connectDn}) {
$auth = $ldap->bind(dn=>$connection->{connectDn}, password=>$connection->{identifier});
@ -299,28 +313,19 @@ sub createAccountSave {
}
}
$ldap->unbind;
#Check that username is valid and not a duplicate in the system.
$error .= $self->error if(!$self->validUsername($username));
#Validate profile data.
my $fields = WebGUI::ProfileField->getEditableFields($self->session);
my $retHash = $self->user->validateProfileDataFromForm($fields);
my $profile = $retHash->{profile};
my $temp = "";
my $warning = "";
my $format = "<li>%s</li>";
map { $warning .= sprintf($format,$_) } @{$retHash->{warnings}};
map { $temp .= sprintf($format,$_) } @{$retHash->{errors}};
my ($profile, $temp, $warning) = WebGUI::Operation::Profile::validateProfileData($self->session);
$error .= $temp;
return $self->createAccount("<li>".$error."</li>") unless ($error eq "");
return $self->createAccount("<li>".$error."</li1>") unless ($error eq "");
#If Email address is not unique, a warning is displayed
if($warning ne "" && !$self->session->form->process("confirm")){
return $self->createAccount('<li>'.$i18n->get(1078).'</li>', 1);
}
my $properties;
$properties->{connectDN} = $connectDN;
$properties->{ldapUrl} = $connection->{ldapUrl};
@ -331,9 +336,9 @@ sub createAccountSave {
#-------------------------------------------------------------------
sub deactivateAccount {
my $self = shift;
return $self->displayLogin if($self->isVisitor);
return $self->SUPER::deactivateAccount("deactivateAccountConfirm");
my $self = shift;
return $self->displayLogin if($self->userId eq '1');
return $self->SUPER::deactivateAccount("deactivateAccountConfirm");
}
#-------------------------------------------------------------------
@ -388,9 +393,10 @@ sub displayLogin {
=cut
sub editUserForm {
my $self = shift;
my $self = shift;
my $userData = $self->getParams;
my $connection = $self->getLDAPConnection;
return '' unless $connection;
my $ldapUrl = $self->session->form->process('authLDAP_ldapUrl') || $userData->{ldapUrl} || $connection->{ldapUrl};
my $connectDN = $self->session->form->process('authLDAP_connectDN') || $userData->{connectDN};
my $ldapConnection = $self->session->form->process('authLDAP_ldapConnection') || $userData->{ldapConnection};
@ -490,6 +496,8 @@ sub editUserSettingsFormSave {
#-------------------------------------------------------------------
sub getAccountTemplateId {
my $self = shift;
my $ldapConnect = $self->getLDAPConnection;
return "PBtmpl0000000000000004" unless $ldapConnect;
return ($self->getLDAPConnection->{ldapAccountTemplate} || "PBtmpl0000000000000004");
}
@ -502,13 +510,15 @@ sub getConnectDN {
#-------------------------------------------------------------------
sub getCreateAccountTemplateId {
my $self = shift;
my $ldapConnect = $self->getLDAPConnection;
return "PBtmpl0000000000000005" unless $ldapConnect;
return ($self->getLDAPConnection->{ldapCreateAccountTemplate} || "PBtmpl0000000000000005");
}
#-------------------------------------------------------------------
sub getLDAPConnection {
my $self = shift;
return $self->{_connection} if $self->{_connection};
return $self->connectToLDAP;
}
@ -523,34 +533,41 @@ sub getLDAPLink {
#-------------------------------------------------------------------
sub getLoginTemplateId {
my $self = shift;
my $ldapConnect = $self->getLDAPConnection;
return "PBtmpl0000000000000006" unless $ldapConnect;
return ($self->getLDAPConnection->{ldapLoginTemplate} || "PBtmpl0000000000000006");
}
#-------------------------------------------------------------------
sub login {
my $self = shift;
my $i18n = WebGUI::International->new($self->session);
my $username = $self->session->form->process("username");
my $identifier = $self->session->form->process("identifier");
my $autoRegistration = $self->session->setting->get("automaticLDAPRegistration");
my $hasAuthenticated = 0;
$hasAuthenticated = 1 if ( $self->authenticate($username,$identifier) );
my $self = shift;
my $i18n = WebGUI::International->new($self->session);
my $username = $self->session->form->process("username");
my $identifier = $self->session->form->process("identifier");
my $autoRegistration = $self->session->setting->get("automaticLDAPRegistration");
my $hasAuthenticated = 0;
$hasAuthenticated = 1 if ( $self->authenticate($username,$identifier) );
my $connection = $self->getLDAPConnection;
if (! $connection) {
return $self->displayLogin("<h1>".$i18n->get('no ldap logins')."</h1>".$self->error);
}
# Autoregistration is on and they didn't authenticate yet
if ($autoRegistration && !$hasAuthenticated) {
# See if they are in LDAP and if so that they can bind with the password given.
if($self->_isValidLDAPUser()) {
# Create a WebGUI Account
if ($self->validUsername($username)) {
$self->SUPER::createAccountSave($username, {
connectDN => $self->getConnectDN,
ldapUrl => $self->getLDAPConnection->{ldapUrl},
ldapConnection => $self->getLDAPConnection->{ldapLinkId},
connectDN => $self->getConnectDN,
ldapUrl => $connection->{ldapUrl},
ldapConnection => $connection->{ldapLinkId},
},$identifier);
$hasAuthenticated = 1;
# Pull the users profile from LDAP to WebGUI
WebGUI::Workflow::Instance->create($self->session, {
workflowId=>'AuthLDAPworkflow000001',
@ -579,7 +596,7 @@ sub new {
#my $connection = $session->scratch->get("ldapConnection") || $session->setting->get("ldapConnection");
#my $ldaplink = WebGUI::LDAPLink->new($session,$connection);
#$self->{_connection} = $ldaplink->get if $ldaplink;
my $i18n = WebGUI::International->new($session, "AuthLDAP");
my %ldapStatusCode = map { $_ => $i18n->get("LDAPLink_".$_) }
(0..21, 32,33,34,36, 48..54, 64..71, 80);
@ -600,4 +617,4 @@ sub setConnectDN {
}
1;
1;

View file

@ -900,7 +900,7 @@ sub profileRecoverPasswordFinish {
my $username;
if ($self->getSetting('passwordRecoveryRequireUsername')) {
$username = $self->session->form->process('authWebGUI.username');
return $self->recoverPassword($i18n2->get('password recovery no username')) unless defined $username;
return $self->recoverPassword($i18n->get('password recovery no username', 'AuthWebGUI')) unless defined $username;
}
my @fields = @{WebGUI::ProfileField->getPasswordRecoveryFields($self->session)};
@ -1011,7 +1011,6 @@ sub emailRecoverPasswordFinish {
return $self->displayLogin unless ($self->session->setting->get('webguiPasswordRecovery') ne '') and $self->isVisitor;
my $i18n = WebGUI::International->new($self->session);
my $i18n2 = WebGUI::International->new($self->session, 'AuthWebGUI');
my $session = $self->session;
my ($form) = $session->quick(qw/form/);
my $email = $form->param('email');
@ -1032,7 +1031,7 @@ sub emailRecoverPasswordFinish {
# Make sure the user is Active
if ( $user->status ne "Active" ) {
return $self->recoverPassword( $i18n2->get( 'password recovery disabled' ) );
return $self->recoverPassword( $i18n->get( 'password recovery disabled', 'AuthWebGUI' ) );
}
# generate information necessry to proceed
@ -1041,6 +1040,10 @@ sub emailRecoverPasswordFinish {
my $userId = $user->userId; #get the user guid
$email = $user->profileField('email');
if ( ! $email ) {
return $self->recoverPassword( $i18n->get( 'no email address', 'AuthWebGUI' ) );
}
my $authsettings = $self->getParams($userId);
$authsettings->{emailRecoverPasswordVerificationNumber} = $recoveryGuid;
@ -1208,13 +1211,17 @@ sub resetExpiredPasswordSave {
#-------------------------------------------------------------------
sub validateEmail {
my $self = shift;
my ($userId) = $self->session->db->quickArray("select userId from authentication where fieldData=? and fieldName='emailValidationKey' and authMethod='WebGUI'", [$self->session->form->process("key")]);
my $session = $self->session;
my ($userId) = $session->db->quickArray("select userId from authentication where fieldData=? and fieldName='emailValidationKey' and authMethod='WebGUI'", [$session->form->process("key")]);
my $i18n = WebGUI::International->new($session, 'AuthWebGUI');
my $message = '';
if (defined $userId) {
my $u = WebGUI::User->new($self->session,$userId);
my $u = WebGUI::User->new($session,$userId);
$u->status("Active");
$self->session->db->write("DELETE FROM authentication WHERE userId = ? AND fieldName = 'emailValidationKey'", [$userId]);
$message = $i18n->get('email validation confirmed','AuthWebGUI');
}
return $self->displayLogin;
return $self->displayLogin($message);
}

View file

@ -64,6 +64,24 @@ These subroutines are available from this package:
#-------------------------------------------------------------------
=head2 clearCache ( )
Clear the cache of in-memory configuration files. This is required by the upgrade script, which
forks to run each upgrade. When the child is reaped, the original is untouched, so that the
next script in the line recieves an old, in-memory config, essentially undoing any config
changes in the first upgrade script.
This is a class method.
=cut
sub clearCache {
my $class = shift;
%config = ();
}
#-------------------------------------------------------------------
=head2 getCookieName ( )
Returns the cookie name defined in the config file. Returns "wgSession" if one isn't defined.

View file

@ -553,10 +553,11 @@ Search assets underneath this asset.
=cut
sub www_search {
my $session = shift;
my $ac = WebGUI::AdminConsole->new( $session, "assets" );
my $i18n = WebGUI::International->new( $session, "Asset" );
my $output = '<div id="assetSearch">' . getHeader( $session );
my $session = shift;
my $ac = WebGUI::AdminConsole->new( $session, "assets" );
my $i18n = WebGUI::International->new( $session, "Asset" );
my $currentAsset = getCurrentAsset($session);
my $output = '<div id="assetSearch">' . getHeader( $session );
$session->style->setLink( $session->url->extras( 'yui-webgui/build/assetManager/assetManager.css' ), { rel => "stylesheet", type => 'text/css' } );
$session->style->setScript( $session->url->extras( 'yui/build/yahoo-dom-event/yahoo-dom-event.js' ) );
@ -564,20 +565,20 @@ sub www_search {
$session->style->setScript( $session->url->extras( 'yui-webgui/build/form/form.js' ) );
### Show the form
$output .= q{<form><p>}
$output .= q{<form method="post" enctype="multipart/form-data" action="} . $currentAsset->getUrl . q{"><p>}
. q{<input type="hidden" name="op" value="assetManager" />}
. q{<input type="hidden" name="method" value="search" />}
. q{<input type="text" size="45" name="keywords" value="} . $session->form->get('keywords') . q{" />}
. getClassSelectBox( $session )
. q{<button name="action" value="search">} . $i18n->get( "search" ) . q{</button>}
. q{<input type="submit" name="action" value="}.$i18n->get( "search" ).q{" />}
. q{</p></form>}
;
### Actions
if ( my $action = $session->form->get( 'action' ) ) {
my @assetIds = $session->form->get( 'assetId' );
if ( my $action = lc $session->form->get( 'action' ) ) {
my @assetIds = $session->form->get( 'assetId' );
if ( $action eq "trash" ) {
if ( $action eq "delete" ) { ##aka trash
for my $assetId ( @assetIds ) {
my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId );
next unless $asset;
@ -725,9 +726,9 @@ sub www_search {
$output .= q{</tbody>}
. q{</table>}
. q{<p class="actions">} . $i18n->get( 'with selected' )
. q{<button name="action" value="trash">} . $i18n->get( 'delete' ) . q{</button>}
. q{<button name="action" value="cut">} . $i18n->get( "cut" ) . q{</button>}
. q{<button name="action" value="copy">} . $i18n->get( "copy" ) . q{</button>}
. q{<input type="submit" name="action" value="}.$i18n->get( 'delete' ) . q{" />}
. q{<input type="submit" name="action" value="}.$i18n->get( "cut" ) . q{" />}
. q{<input type="submit" name="action" value="}.$i18n->get( "copy" ) .q{" />}
. q{</p>}
. q{</form>}
;

View file

@ -219,12 +219,14 @@ sub www_show {
$style->setLink($url->extras("/AttachmentsControl/AttachmentsControl.css"),
{type=>"text/css", rel=>"stylesheet"});
my $uploadControl = '';
my $i18n = WebGUI::International->new($session, "Control_Attachments");
my $i18n = WebGUI::International->new($session);
my $maxFiles = $form->param('maxAttachments') - scalar(@assetIds) ;
my $attachmentForms = '';
foreach my $assetId (@assetIds) {
$attachmentForms .= '<input type="hidden" name="attachments" value="'.$assetId.'" />';
}
my $upload = $i18n->get('Upload','Operation_FormHelpers');
my $uploadAttachment = $i18n->get('Upload an attachment','WebGUI');
if ($maxFiles > 0) {
$uploadControl = '<div id="uploadForm">
<a href="#" onclick="WebguiAttachmentUploadForm.hide();" id="uploadFormCloser">X</a>
@ -237,8 +239,8 @@ sub www_show {
<input type="hidden" name="class" value="Attachments" />
<input type="hidden" name="sub" value="upload" /> '. $attachmentForms
.'<input type="file" name="attachment" />
<input type="submit" value="Upload" /> </form> </div>
<a id="upload" href="#" onclick="WebguiAttachmentUploadForm.show();">Upload an attachment.</a>
<input type="submit" value="'.$upload.'" /> </form> </div>
<a id="upload" href="#" onclick="WebguiAttachmentUploadForm.show();">'.$uploadAttachment. '</a>
';
}
my $attachments = '';
@ -265,12 +267,13 @@ sub www_show {
$attachments .= '</div>';
}
}
my $instructions = $i18n->get('Upload attachments here. Copy and paste attachments into the editor.','WebGUI');
my $output = '<html><head> '.$style->generateAdditionalHeadTags.'
<script type="text/javascript">
parent.document.getElementById("'.$form->get("name").'_formId").innerHTML = \''.$attachmentForms.'\';
</script>
</head> <body>
'.$uploadControl.' <div id="instructions">Upload attachments here. Copy and paste attachments into the editor.</div>
'.$uploadControl.' <div id="instructions">'.$instructions.'</div>
<div id="attachments">'.$attachments.' </div> </body> </html> ';
return $output;
}

View file

@ -20,7 +20,7 @@ use Tie::IxHash;
use WebGUI::International;
use WebGUI::Pluggable;
use WebGUI::Utility;
use Module::Find qw(findsubmod);
use Module::Find qw(findallmod);
=head1 NAME
@ -113,7 +113,7 @@ sub getTypes {
my $self = shift;
my @types = @{$self->get('types')};
unless (scalar(@types)) {
my @classes = findsubmod 'WebGUI::Form';
my @classes = findallmod 'WebGUI::Form';
for my $class (@classes) {
if ($class =~ /^WebGUI::Form::(.*)/) {
my $type = $1;
@ -141,7 +141,7 @@ Returns either what's posted or if nothing comes back it returns "text".
sub getValue {
my $self = shift;
my $fieldType = $self->SUPER::getValue(@_);
$fieldType =~ s/[^\w]//g;
$fieldType =~ s/[^\w:]//g;
return $fieldType || "text";
}

View file

@ -15,7 +15,6 @@ package WebGUI::Form::Interval;
=cut
use strict;
use warnings;
use base qw(WebGUI::Form::Control);
use Tie::IxHash;
use WebGUI::Form::SelectBox;
@ -119,6 +118,19 @@ sub getValue {
#-------------------------------------------------------------------
=head2 getValueAsHtml ( )
Returns the interval formatted as quantity and units.
=cut
sub getValueAsHtml {
my $self = shift;
return join ' ', $self->session->datetime->secondsToInterval($self->getOriginalValue);
}
#-------------------------------------------------------------------
=head2 isDynamicCompatible ( )
A class method that returns a boolean indicating whether this control is compatible with the DynamicField control.
@ -138,35 +150,38 @@ Renders an interval control.
=cut
sub toHtml {
my $self = shift;
my %units;
tie %units, 'Tie::IxHash';
my $i18n = WebGUI::International->new($self->session);
%units = ('seconds'=>$i18n->get(704),
'minutes'=>$i18n->get(705),
'hours'=>$i18n->get(706),
'days'=>$i18n->get(700),
'weeks'=>$i18n->get(701),
'months'=>$i18n->get(702),
'years'=>$i18n->get(703));
my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getOriginalValue);
# not sure why, but these things need to be defined like this or
# they fail under some circumstnaces
my $cmd = "WebGUI::Form::Integer";
my $out = $cmd->new($self->session,
name=>$self->get("name")."_interval",
value=>$interval,
extras=>$self->get("extras"),
id=>$self->get('id')."_interval",
)->toHtml;
$cmd = "WebGUI::Form::SelectBox";
$out .= $cmd->new($self->session,
options=>\%units,
name=>$self->get("name")."_units",
id=>$self->get('id')."_units",
value=>$units
)->toHtml;
return $out;
my $self = shift;
my %units;
tie %units, 'Tie::IxHash';
my $i18n = WebGUI::International->new($self->session);
%units = (seconds => $i18n->get(704),
minutes => $i18n->get(705),
hours => $i18n->get(706),
days => $i18n->get(700),
weeks => $i18n->get(701),
months => $i18n->get(702),
years => $i18n->get(703),
);
my %reverseUnits = reverse %units;
my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getOriginalValue);
# not sure why, but these things need to be defined like this or
# they fail under some circumstnaces
my $cmd = "WebGUI::Form::Integer";
my $out = $cmd->new($self->session,
name => $self->get("name")."_interval",
value => $interval,
extras => $self->get("extras"),
id => $self->get('id')."_interval",
)->toHtml;
$cmd = "WebGUI::Form::SelectBox";
my $key = $reverseUnits{$units};
$out .= $cmd->new($self->session,
options => \%units,
name => $self->get("name")."_units",
id => $self->get('id')."_units",
value => $key,
)->toHtml;
return $out;
}

View file

@ -168,18 +168,22 @@ Renders the form field to HTML as a table row complete with labels, subtext, hov
=cut
sub toHtmlWithWrapper {
my $self = shift;
my $template = WebGUI::Asset::Template->new($self->session,$self->getOriginalValue());
my $self = shift;
my $session = $self->session;
my $template = WebGUI::Asset::Template->new($session,$self->getOriginalValue());
if (defined $template && $template->canEdit) {
my $returnUrl;
if (defined $self->session->asset && ref $self->session->asset ne "WebGUI::Asset::Template") {
$returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
}
my $buttons = $self->session->icon->edit("func=edit".$returnUrl,$template->get("url"));
$buttons .= $self->session->icon->manage("op=assetManager",$template->getParent->get("url"));
$self->set("subtext",$buttons . $self->get("subtext"));
}
return $self->SUPER::toHtmlWithWrapper;
my $returnUrl;
if (defined $session->asset && ref $session->asset ne "WebGUI::Asset::Template") {
$returnUrl = ";proceed=goBackToPage;returnUrl=".$session->url->escape($self->session->asset->getUrl);
}
my $buttons = $session->icon->edit("func=edit".$returnUrl,$template->get("url"));
my $parent = $template->getParent();
if (defined $parent) {
$buttons .= $session->icon->manage("op=assetManager",$template->getParent->get("url"));
}
$self->set("subtext",$buttons . $self->get("subtext"));
}
return $self->SUPER::toHtmlWithWrapper;
}
1;

View file

@ -0,0 +1,70 @@
package WebGUI::Help::Account;
use strict;
our $HELP = {
'layout template' => {
title => 'account layout template',
body => '',
isa => [
{
tag => 'common vars',
namespace => 'Account',
},
{
tag => "template variables",
namespace => "Asset_Template",
},
],
fields => [ ],
variables => [
{
name => "account_loop",
variables => [
{
name => "title",
description => "account title",
},
{
name => "identifier",
description => "account identifier",
},
{
name => "className",
description => "account className",
},
{
name => "is_[[IDENTIFIER]]",
},
{
name => "account url",
},
{
name => "is_method_[[METHOD]]",
},
],
},
],
related => [ ],
},
'common vars' => {
title => 'common account variables',
body => '',
private => 1,
isa => [ ],
fields => [ ],
variables => [
{ name => "user_full_name", },
{ name => "user_member_since", },
{ name => "view_profile_url", },
{ name => "root_url", },
{ name => "back_url", },
],
related => [ ],
},
};
1;
#vim:ft=perl

View file

@ -0,0 +1,72 @@
package WebGUI::Help::Account_Contributions;
use strict;
our $HELP = {
'layout template' => {
title => 'account contributions layout template',
body => '',
isa => [
{
tag => 'template variables',
namespace => 'Asset_Template',
},
{
tag => 'pagination template variables',
namespace => 'WebGUI',
},
],
fields => [ ],
variables => [
{
name => 'title_url',
},
{
name => 'type_url',
},
{
name => 'dateStamp_url',
},
{
name => 'rpp_url',
},
{
name => 'has_contributions',
},
{
name => 'contributions_total',
},
{
name => 'user_full_name',
},
{
name => 'user_member_since',
},
{
name => 'view_profile_url',
namespace => 'Account',
},
{
name => 'root_url',
namespace => 'Account',
},
{
name => 'back_url',
namespace => 'Account',
},
{
name => 'contributions_loop',
variables => [
{
name => 'contributions_variables',
},
],
},
],
related => [ ],
},
};
1;
#vim:ft=perl

View file

@ -0,0 +1,33 @@
package WebGUI::Help::Account_Inbox;
use strict;
our $HELP = {
'common vars' => {
title => 'common account variables',
body => '',
private => 1,
isa => [
{
tag => 'common vars',
namespace => 'Account',
},
],
fields => [ ],
variables => [
{ name => 'view_inbox_url', },
{ name => 'view_invitations_url', },
{ name => 'unread_message_count', },
{ name => 'invitation_count', },
{ name => 'invitations_enabled', },
{ name => 'user_invitations_enabled', },
{ name => 'invite_friend_url', },
],
related => [ ],
},
};
1;
#vim:ft=perl

View file

@ -0,0 +1,28 @@
package WebGUI::Help::Account_Shop;
use strict;
our $HELP = {
'common vars' => {
title => 'common account variables',
body => '',
private => 1,
isa => [
{
tag => 'common vars',
namespace => 'Account',
},
],
fields => [ ],
variables => [
{ name => "manage_purchases_url", },
{ name => "managePurchasesIsActive", },
],
related => [ ],
},
};
1;
#vim:ft=perl

View file

@ -0,0 +1,24 @@
package WebGUI::Help::Account_User;
use strict;
our $HELP = {
'layout template' => {
title => 'user layout template title',
body => 'user layout template body',
isa => [
],
fields => [ ],
variables => [ ],
related => [
{
tag => 'display account template',
namespace => 'Auth',
},
],
},
};
1;
#vim:ft=perl

View file

@ -1,9 +1,6 @@
package WebGUI::Help::Asset_Calendar;
use strict;
use strict;;
use warnings;
our $HELP = {
'view calendar template' => {

View file

@ -118,7 +118,7 @@ our $HELP = {
description => 'helpvar useCaptcha',
},
{
name => 'form.captcha',
name => 'form_captcha',
required => 1,
description => 'helpvar form.captcha',
},

View file

@ -4,22 +4,28 @@ use strict;
our $HELP = {
'search template' => {
title => 'search template help title',
body => '',
title => 'search template help title',
body => '',
isa => [
{ namespace => "Asset_Matrix",
tag => "matrix asset template variables",
},
{ namespace => "Asset_Template",
tag => "template variables",
},
],
variables => [
{ 'name' => 'CATEGORY_NAME_loop',
{ 'name' => 'compareForm', },
{ 'name' => 'category_loop',
'variables' => [
{ 'name' => 'name',
'description' => 'listing name'
{ 'name' => 'categoryLabel' },
{ 'name' => 'attribute_loop',
'variables' => [
{ 'name' => 'label' },
{ 'name' => 'description' },
{ 'name' => 'form' },
],
},
{ 'name' => 'fieldType' },
{ 'name' => 'label',
'description' => 'listing label'
},
{ 'name' => 'description',
'description' => 'search field description'
},
{ 'name' => 'form' }
],
}
],
@ -31,27 +37,24 @@ our $HELP = {
namespace => 'Asset_Matrix'
},
{ tag => 'listing detail template',
namespace => 'Asset_Matrix'
namespace => 'Asset_MatrixListing'
},
],
},
'compare template' => {
title => 'comparison template help title',
body => '',
variables => [
{ 'name' => 'isTooMany' },
{ 'name' => 'isTooFew' },
{ 'name' => 'lastupdated_loop',
'variables' => [ { 'name' => 'lastUpdated' } ]
title => 'comparison template help title',
body => 'comparison template help body',
isa => [
{ namespace => "Asset_Matrix",
tag => "matrix asset template variables",
},
{ 'name' => 'category_loop',
'variables' => [
{ 'name' => 'category',
'description' => 'tmplVar category'
},
]
}
{ namespace => "Asset_Template",
tag => "template variables",
},
],
variables => [
{ 'name' => 'javascript' },
],
related => [
{ tag => 'search template',
@ -60,20 +63,24 @@ our $HELP = {
{ tag => 'main template',
namespace => 'Asset_Matrix'
},
{ tag => 'listing detail template',
namespace => 'Asset_Matrix'
},
],
},
'main template' => {
title => 'matrix template help title',
body => '',
title => 'matrix template help title',
body => '',
isa => [
{ namespace => "Asset_Matrix",
tag => "matrix asset template variables",
},
{ namespace => "Asset_Template",
tag => "template variables",
},
],
variables => [
{ 'name' => 'compare.form', },
{ 'name' => 'search.url' },
{ 'name' => 'compareForm', },
{ 'name' => 'isLoggedIn' },
{ 'name' => 'field.list.url' },
{ 'name' => 'listAttributes_url' },
{ 'name' => 'addMatrixListing_url' },
{ 'name' => 'bestViews_url' },
{ 'name' => 'bestViews_count' },
@ -86,15 +93,9 @@ our $HELP = {
{ 'name' => 'bestClicks_name' },
{ 'name' => 'best_rating_loop',
'variables' => [
{ 'name' => 'url',
'description' => 'tmplVar best.url'
},
{ 'name' => 'category',
'description' => 'tmplVar best.category'
},
{ 'name' => 'name',
'description' => 'tmplVar best.name'
},
{ 'name' => 'url' },
{ 'name' => 'category' },
{ 'name' => 'name' },
{ 'name' => 'mean' },
{ 'name' => 'median' },
{ 'name' => 'count' }
@ -102,48 +103,26 @@ our $HELP = {
},
{ 'name' => 'worst_rating_loop',
'variables' => [
{ 'name' => 'url',
'description' => 'tmplVar worst.url'
},
{ 'name' => 'category',
'description' => 'tmplVar worst.category'
},
{ 'name' => 'name',
'description' => 'tmplVar worst.name'
},
{ 'name' => 'mean',
'description' => 'tmplVar worst.mean'
},
{ 'name' => 'median',
'description' => 'tmplVar worst.median'
},
{ 'name' => 'count',
'description' => 'tmplVar worst.count'
}
{ 'name' => 'url' },
{ 'name' => 'category' },
{ 'name' => 'name' },
{ 'name' => 'mean' },
{ 'name' => 'median' },
{ 'name' => 'count' }
]
},
{ 'name' => 'last_update_loop',
{ 'name' => 'last_updated_loop',
'variables' => [
{ 'name' => 'url',
'description' => 'tmplVar last.url'
},
{ 'name' => 'name',
'description' => 'tmplVar last.name'
},
{ 'name' => 'lastUpdated',
'description' => 'tmplVar last.lastUpdated'
}
{ 'name' => 'url' },
{ 'name' => 'name' },
{ 'name' => 'lastUpdated' },
]
},
{ 'name' => 'listingCount' },
{ 'name' => 'pending_loop',
'variables' => [
{ 'name' => 'url',
'description' => 'tmplVar pending.url'
},
{ 'name' => 'name',
'description' => 'tmplVar pending.name'
}
{ 'name' => 'url' },
{ 'name' => 'name' },
]
}
],
@ -154,69 +133,26 @@ our $HELP = {
{ tag => 'compare template',
namespace => 'Asset_Matrix'
},
{ tag => 'listing detail template',
namespace => 'Asset_Matrix'
},
],
},
'listing detail template' => {
title => 'detail template help title',
body => '',
variables => [
{ 'name' => 'discussion' },
{ 'name' => 'screenshot',
'description' => 'tmplVar screenshot'
'matrix asset template variables' => {
private => 1,
title => 'matrix asset template variables title',
body => '',
isa => [
{ namespace => "Asset_Wobject",
tag => "wobject template variables",
},
{ 'name' => 'thumbnail' },
{ 'name' => 'emailForm' },
{ 'name' => 'emailSent' },
{ 'name' => 'isPending' },
{ 'name' => 'lastUpdated_epoch' },
{ 'name' => 'lastUpdated_date' },
{ 'name' => 'id' },
{ 'name' => 'description',
'description' => 'listing description'
},
{ 'name' => 'productName' },
{ 'name' => 'productUrl' },
{ 'name' => 'productUrl_click' },
{ 'name' => 'manufacturerName' },
{ 'name' => 'manufacturerUrl' },
{ 'name' => 'manufacturerUrl_click' },
{ 'name' => 'versionNumber' },
{ 'name' => 'views' },
{ 'name' => 'compares' },
{ 'name' => 'clicks' },
{ 'name' => 'ratings' },
{ 'name' => 'CATEGORY_NAME_loop',
'variables' => [
{ 'name' => 'value', },
{ 'name' => 'name',
'description' => 'tmplVar name'
},
{ 'name' => 'label' },
{ 'name' => 'description',
'description' => 'category listing description'
},
{ 'name' => 'category',
'description' => 'tmplVar category'
},
{ 'name' => 'class',
'description' => 'tmplVar class'
}
]
}
],
fields => [],
variables => [],
related => [
{ tag => 'search template',
namespace => 'Asset_Matrix'
{ tag => 'listing detail template',
namespace => 'Asset_MatrixListing'
},
{ tag => 'compare template',
namespace => 'Asset_Matrix'
},
{ tag => 'main template',
namespace => 'Asset_Matrix'
{ tag => 'edit listing template',
namespace => 'Asset_MatrixListing'
},
],
},

View file

@ -0,0 +1,95 @@
package WebGUI::Help::Asset_MatrixListing;
use strict;
our $HELP = {
'listing detail template' => {
title => 'detail template help title',
body => '',
isa => [
{ namespace => "Asset_Template",
tag => "template variables",
},
{ tag => 'asset template asset variables',
namespace => 'Asset'
},
],
variables => [
{ 'name' => 'screenshots' },
{ 'name' => 'emailForm' },
{ 'name' => 'emailSent' },
{ 'name' => 'lastUpdated_epoch' },
{ 'name' => 'lastUpdated_date' },
{ 'name' => 'description' },
{ 'name' => 'productName' },
{ 'name' => 'productUrl' },
{ 'name' => 'productUrl_click' },
{ 'name' => 'manufacturerName',
description => 'manufacturerName description'
},
{ 'name' => 'manufacturerUrl' },
{ 'name' => 'manufacturerUrl_click' },
{ 'name' => 'version' },
{ 'name' => 'views' },
{ 'name' => 'compares' },
{ 'name' => 'clicks' },
{ 'name' => 'ratings' },
{ 'name' => 'CATEGORY_NAME_loop',
'variables' => [
{ 'name' => 'categoryLabel' },
{ 'name' => 'attribute_loop',
'variables' => [
{ 'name' => 'label' },
{ 'name' => 'value' },
{ 'name' => 'fieldType' },
]
}
]
}
],
related => [
{ tag => 'search template',
namespace => 'Asset_Matrix'
},
{ tag => 'compare template',
namespace => 'Asset_Matrix'
},
{ tag => 'main template',
namespace => 'Asset_Matrix'
},
{ tag => 'edit listing template',
namespace => 'Asset_MatrixListing'
},
],
},
'edit listing template' => {
title => 'edit listing template help title',
body => '',
isa => [
{ namespace => "Asset_Template",
tag => "template variables",
},
{ tag => 'asset template asset variables',
namespace => 'Asset'
},
],
variables => [
{ 'name' => 'form', }
],
related => [
{ tag => 'search template',
namespace => 'Asset_Matrix'
},
{ tag => 'compare template',
namespace => 'Asset_Matrix'
},
{ tag => 'main template',
namespace => 'Asset_Matrix'
},
{ tag => 'listing detail template',
namespace => 'Asset_MatrixListing'
},
],
},
};

View file

@ -4,8 +4,8 @@ use strict;
our $HELP = {
'template' => {
'template' => {
title => 'subscription template',
body => '',
isa => [
@ -32,6 +32,20 @@ our $HELP = {
],
},
'redeem subscription template' => {
title => 'help redeem code template title',
body => '',
isa => [ ],
fields => [ ],
variables => [
{ name => 'batchDescription' , required=>1},
{ name => 'message' , required=>1 },
{ name => 'codeForm' , required=>1 },
],
related => [
],
},
};
1;

View file

@ -138,11 +138,15 @@ our $HELP = {
{ 'name' => 'field_loop',
'variables' => [
{ 'name' => 'field_isHidden' },
{ 'name' => 'field_isRequired' },
{ 'name' => 'field_isVisible' },
{ 'name' => 'field_label' },
{ 'name' => 'field_value' },
{ 'name' => 'field_name' },
{ 'name' => 'field_id' },
{ 'name' => 'field_url' },
{ 'name' => 'field_subtext' },
{ 'name' => 'field_pretext' },
],
},
],

View file

@ -1,4 +1,4 @@
package WebGUI::Help::Shop::PayDriver::ITransact;
package WebGUI::Help::PayDriver_ITransact;
use strict;
@ -70,7 +70,7 @@ our $HELP = {
},
{
name => "emailField",
description => "emailNumberField help",
description => "emailField help",
required => 1,
},
{
@ -80,12 +80,12 @@ our $HELP = {
},
{
name => "monthYearField",
description => "monthYearNumberField help",
description => "monthYearField help",
required => 1,
},
{
name => "cvv2Field",
description => "cvv2NumberField help",
description => "cvv2Field help",
required => 1,
},
{

View file

@ -86,7 +86,7 @@ A string that specifies the language that the user should see. Defaults to the
=cut
my $safeRe = qr/[^\.:\w\d\s\/\^\;\?%><]/;
my $safeRe = qr/[^\.:\w\d\s\/\^\;\?%><\]\[]/;
sub get {
my ($self, $id, $namespace, $language) = @_;

View file

@ -371,7 +371,7 @@ sub _getTemplateVars {
#-------------------------------------------------------------------
=head2 _viewHelpIndex ( $session )
=head2 www_viewHelpIndex ( $session )
Display the index of all help entries in all namespaces.

View file

@ -158,7 +158,14 @@ Deletes the requested LDAP Link in the form variable C<llid>. Returns the user
sub www_deleteLDAPLink {
my $session = shift;
return $session->privilege->insufficient unless canView($session);
$session->db->write("delete from ldapLink where ldapLinkId=".$session->db->quote($session->form->process("llid")));
my $llid = $session->form->process("llid");
if ($llid) {
$session->db->write("delete from ldapLink where ldapLinkId=?", [$llid]);
}
if ($llid eq $session->setting->get('ldapConnection')) {
$session->log->warn(sprintf 'user %s deleted the LDAP connection used for user authentication', $session->user->username);
$session->setting->set('ldapConnection', '');
}
return www_listLDAPLinks($session);
}

View file

@ -59,7 +59,7 @@ sub www_viewLoginHistory {
$data{username} = $i18n->get('unknown user') if ($data{userId} eq "0");
$row[$i] = '<tr class="tableData"><td>'.$data{username}.' ('.$data{userId}.')</td>';
$row[$i] .= '<td>'.$data{status}.'</td>';
$row[$i] .= '<td>'.$session->datetime->epochToHuman($data{timeStamp},"%H:%n%p %M/%D/%y").'</td>';
$row[$i] .= '<td>'.$session->datetime->epochToHuman($data{timeStamp}).'</td>';
$row[$i] .= '<td>'.$data{ipAddress}.'</td>';
$row[$i] .= '<td>'.$data{userAgent}.'</td>';
$row[$i] .= '<td>'.$data{sessionId}.'</td>';

View file

@ -385,9 +385,11 @@ sub www_editUser {
-value=>$u->authMethod,
);
foreach (@{$session->config->get("authMethods")}) {
$tabform->getTab("account")->fieldSetStart($_);
my $authInstance = WebGUI::Operation::Auth::getInstance($session,$_,$u->userId);
$tabform->getTab("account")->raw($authInstance->editUserForm);
my $editUserForm = $authInstance->editUserForm;
next unless $editUserForm;
$tabform->getTab("account")->fieldSetStart($_);
$tabform->getTab("account")->raw($editUserForm);
$tabform->getTab("account")->fieldSetEnd;
}
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {

View file

@ -642,7 +642,8 @@ sub www_manageRevisionsInTag {
$ac->addSubmenuItem($session->url->page('op=manageVersions'), $i18n->get("manage versions"));
# Process any actions
if ( $session->form->get('action') eq "purge" ) {
my $action = lc $session->form->get('action');
if ( $action eq "purge" ) {
# Purge these revisions
my @assetInfo = $session->form->get('assetInfo');
for my $assetInfo ( @assetInfo ) {
@ -657,7 +658,7 @@ sub www_manageRevisionsInTag {
return www_manageVersions( $session );
}
}
elsif ( $session->form->get('action') eq "move" ) {
elsif ( $action eq "move to:" ) {
# Get the new version tag
my $moveToTagId = $session->form->get('moveToTagId');
my $moveToTag;
@ -685,7 +686,7 @@ sub www_manageRevisionsInTag {
return www_manageVersions( $session );
}
}
elsif ( $session->form->get('action') eq "update" ) {
elsif ( $action eq "update version tag" ) {
my $startTime = WebGUI::DateTime->new($session,$session->form->process("startTime","dateTime"))->toDatabase;
my $endTime = WebGUI::DateTime->new($session,$session->form->process("endTime","dateTime"))->toDatabase;
@ -746,6 +747,10 @@ sub www_manageRevisionsInTag {
( getVersionTagOptions( $session ) ),
);
##Setup valid times for the datetime range form
my $filterStartTime = defined $tag->get('startTime') ? $tag->get('startTime') : '1970-01-17 05:00:00';
my $filterEndTime = defined $tag->get('endTime') ? $tag->get('endTime') : time();
# Output the revisions
### FIXME: Users who only pass canApproveVersionTag() and not canViewVersionTag() should
# probably not be allowed to see the Actions or modify the Start and End dates
@ -759,23 +764,23 @@ sub www_manageRevisionsInTag {
. $i18n->get('startTime label').':&nbsp;'
. WebGUI::Form::dateTime($session, {
name =>"startTime",
value => WebGUI::DateTime->new($session,$tag->get("startTime"))->epoch,
value => WebGUI::DateTime->new($session,$filterStartTime)->epoch,
})
. '<br />'.$i18n->get('endTime label').':&nbsp;'
. WebGUI::Form::dateTime($session,{
name =>"endTime",
value => WebGUI::DateTime->new($session,$tag->get("endTime"))->epoch,
value => WebGUI::DateTime->new($session,$filterEndTime)->epoch,
})
. '<br />'
. '<button name="action" value="update">' . $i18n->get('manageRevisionsInTag update') . '</button>'
. '<input type="submit" name="action" value="'. $i18n->get('manageRevisionsInTag update') . '" />'
. '</td>'
. '</tr>'
. '<tr><td colspan="5">&nbsp;</td></tr>'
. '<tr>'
. '<td colspan="5">'
. $i18n->get("manageRevisionsInTag with selected")
. '<button name="action" value="purge" class="red">' . $i18n->get('manageRevisionsInTag purge') . '</button>'
. '<button name="action" value="move">' . $i18n->get("manageRevisionsInTag move") . '</button>'
. '<input type="submit" name="action" value="'. $i18n->get('manageRevisionsInTag purge') . '" class="red" />'
. '<input type="submit" name="action" value="'. $i18n->get("manageRevisionsInTag move") . '" />'
. WebGUI::Form::SelectBox( $session, {
name => 'moveToTagId',
options => \%moveToTagOptions,

View file

@ -505,7 +505,7 @@ sub getPasswordRecoveryFields {
#-------------------------------------------------------------------
=head2 isDuplicate( fieldValue )
=head2 isDuplicate( fieldValue, userId )
Checks the value of the field to see if it is duplicated in the system. Returns true of false.
@ -513,6 +513,10 @@ Checks the value of the field to see if it is duplicated in the system. Returns
value to check for duplicates against
=head3 userId
userId to check for duplicates againts
=cut
sub isDuplicate {
@ -520,9 +524,10 @@ sub isDuplicate {
my $session = $self->session;
my $fieldId = $self->getId;
my $value = shift;
my $userId = shift || $session->user->userId;
my $sql = qq{select count(*) from userProfileData where $fieldId = ? and userId <> ?};
my $duplicate = $session->db->quickScalar($sql,[$value, $session->user->userId]);
my $duplicate = $session->db->quickScalar($sql,[$value, $userId]);
return ($duplicate > 0);
}

View file

@ -810,7 +810,7 @@ sub new {
=head2 secondsToInterval ( seconds )
Returns an interval and units derived the number of seconds.
Returns an interval and internationalized units derived the number of seconds.
=head3 seconds
@ -825,31 +825,31 @@ sub secondsToInterval {
my ($interval, $units);
if ($seconds >= 31536000) {
$interval = round($seconds/31536000);
$units = $i18n->get("years");
$units = $i18n->get("703");
}
elsif ($seconds >= 2592000) {
$interval = round($seconds/2592000);
$units = $i18n->get("months");
$units = $i18n->get("702");
}
elsif ($seconds >= 604800) {
$interval = round($seconds/604800);
$units = $i18n->get("weeks");
$units = $i18n->get("701");
}
elsif ($seconds >= 86400) {
$interval = round($seconds/86400);
$units = $i18n->get("days");
$units = $i18n->get("700");
}
elsif ($seconds >= 3600) {
$interval = round($seconds/3600);
$units = $i18n->get("hours");
$units = $i18n->get("706");
}
elsif ($seconds >= 60) {
$interval = round($seconds/60);
$units = $i18n->get("minutes");
$units = $i18n->get("705");
}
else {
$interval = $seconds;
$units = $i18n->get("seconds");
$units = $i18n->get("704");
}
return ($interval, $units);
}

View file

@ -368,10 +368,11 @@ sub definition {
hoverHelp => $i18n->get('use cvv2 help'),
},
credentialsTemplateId => {
fieldType => 'template',
label => $i18n->get('credentials template'),
hoverHelp => $i18n->get('credentials template help'),
namespace => 'Shop/Credentials',
fieldType => 'template',
label => $i18n->get('credentials template'),
hoverHelp => $i18n->get('credentials template help'),
namespace => 'Shop/Credentials',
defaultValue => 'itransact_credentials1',
},
emailMessage => {
fieldType => 'textarea',

View file

@ -744,7 +744,7 @@ sub www_manage {
my $output = q|
<div class=" yui-skin-sam">
<div id="search"><form id="keywordSearchForm"><input type="text" name="keywords" id="keywordsField" /><input type="submit" value="Search" /></form></div>
<div id="search"><form id="keywordSearchForm"><input type="text" name="keywords" id="keywordsField" /><input type="submit" value="|.$i18n->get(364,'WebGUI').q|" /></form></div>
<div id="paging"></div>
<div id="dt"></div>
</div>

View file

@ -15,7 +15,6 @@ package WebGUI::Storage;
=cut
use strict;
use warnings;
use Archive::Tar;
use Carp qw( croak );
use Cwd ();
@ -157,7 +156,7 @@ sub _changeOwner {
=head2 addFileFromCaptcha ( )
Generates a captcha image (125px x 26px) and returns the filename and challenge string (6 random characters). For more information about captcha, consult the Wikipedia here: http://en.wikipedia.org/wiki/Captcha
Generates a captcha image (200x x 50px) and returns the filename and challenge string (6 random characters). For more information about captcha, consult the Wikipedia here: http://en.wikipedia.org/wiki/Captcha
=cut
@ -165,10 +164,10 @@ sub addFileFromCaptcha {
my $self = shift;
my $error = "";
my $challenge;
$challenge.= ('A'..'Z')[rand(26)] foreach (1..6);
$challenge .= ('A'..'Z')[rand(26)] foreach (1..6);
my $filename = "captcha.".$self->session->id->generate().".gif";
my $image = Image::Magick->new();
$error = $image->Set(size=>'125x26');
$error = $image->Set(size=>'200x50');
if($error) {
$self->session->errorHandler->warn("Error setting captcha image size: $error");
}
@ -181,12 +180,11 @@ sub addFileFromCaptcha {
$self->session->errorHandler->warn("Error adding noise: $error");
}
# AddNoise generates a different average color depending on library. This is ugly, but the best I can see for now
my $textColor = '#222222';
$error = $image->Annotate(font=>$self->session->config->getWebguiRoot."/lib/default.ttf", pointsize=>30, skewY=>0, skewX=>0, gravity=>'center', fill=>$textColor, antialias=>'true', text=>$challenge);
$error = $image->Annotate(font=>$self->session->config->getWebguiRoot."/lib/default.ttf", pointsize=>40, skewY=>0, skewX=>0, gravity=>'center', fill=>'#ffffff', antialias=>'true', text=>$challenge);
if($error) {
$self->session->errorHandler->warn("Error Annotating image: $error");
}
$error = $image->Draw(primitive=>"line", points=>"0,5 105,21", stroke=>$textColor, antialias=>'true', strokewidth=>2);
$error = $image->Draw(primitive=>"line", points=>"5,5 195,45", stroke=>'#ffffff', antialias=>'true', strokewidth=>2);
if($error) {
$self->session->errorHandler->warn("Error drawing line: $error");
}

View file

@ -16,7 +16,6 @@ package WebGUI::Text;
use strict;
#use warnings;
use Text::CSV_XS;
use base 'Exporter';

View file

@ -1190,7 +1190,7 @@ sub validateProfileDataFromForm {
push(@{$errorFields},$fieldId);
}
#Duplicate emails throw warnings
elsif($fieldId eq "email" && $field->isDuplicate($fieldValue)) {
elsif($fieldId eq "email" && $field->isDuplicate($fieldValue,$self->userId)) {
$errorCat = $field->get("profileCategoryId") unless (defined $errorCat);
push (@{$warnings},$i18n->get(1072));
push(@{$warnFields},$fieldId);

View file

@ -16,7 +16,6 @@ package WebGUI::Workflow::Activity::CalendarUpdateFeeds;
=cut
use strict;
use warnings;
use base 'WebGUI::Workflow::Activity';
use WebGUI::Asset::Wobject::Calendar;

View file

@ -142,6 +142,7 @@ sub execute {
$currentLinkId = $rowLinkId;
$link = WebGUI::LDAPLink->new($self->session, $rowLinkId);
next unless $link;
$ldapUrl = $link->get->{ldapUrl};
$ldap = $link->bind;

View file

@ -310,6 +310,8 @@ Executes the next iteration in this workflow. Returns a status code based upon w
complete The activity completed successfully, you may run the next one.
waiting The activity is waiting on an external event such as user input.
B>NOTE:> You should normally never run this method. The workflow engine will use it instead. When you're ready to kick off a workflow you've created, use start() instead.
=cut
sub run {

View file

@ -9,6 +9,96 @@ our $I18N = {
context => q{Error message in Account.pm},
},
'account layout template' => {
message => q{Account Layout Template},
context => q{Help title},
lastUpdated => 1230844137,
},
'common account variables' => {
message => q{Common Account Variables},
context => q{Help title},
lastUpdated => 1230844137,
},
'user_full_name' => {
message => q{The full name of the user},
context => q{template variable},
lastUpdated => 1230844137,
},
'user_member_since' => {
message => q{The date this user created their account on the site, in epoch format. Use the Date macro to change the format.},
context => q{template variable},
lastUpdated => 1230844137,
},
'view_profile_url' => {
message => q{A URL to view the user's profile.},
context => q{template variable},
lastUpdated => 1230844137,
},
'root_url' => {
message => q{The URL to go back to the Account main screen.},
context => q{template variable},
lastUpdated => 1230844137,
},
'back_url' => {
message => q{A URL to leave the Account screen and go back to the website.},
context => q{template variable},
lastUpdated => 1230844137,
},
'account_loop' => {
message => q{A loop containing information about account plugins},
context => q{template variable},
lastUpdated => 1230844137,
},
'account title' => {
message => q{The title of this account plugin, from the config file. Macros in the title will be expanded.},
context => q{template variable},
lastUpdated => 1230844137,
},
'account identifier' => {
message => q{The identifier for this plugin, from the config file. Default identifiers are profile, inbox, friends, contributions, shop and user.},
context => q{template variable. Note that the list of default identifiers should not be translated!},
lastUpdated => 1230844137,
},
'account className' => {
message => q{The perl class name for this plugin.},
context => q{template variable},
lastUpdated => 1230844137,
},
'is_[[IDENTIFIER]]' => {
message => q{[[IDENTIFIER]] is replaced with the identifier from the plugin, for example, is_profile. The resulting boolean will be true for this plugin.},
context => q{template variable},
lastUpdated => 1230844137,
},
'account url' => {
message => q{The URL to activate this plugin.},
context => q{template variable},
lastUpdated => 1230845481,
},
'is_method_[[METHOD]]' => {
message => q{[[METHOD]] is replaced with the name of the default method for this plugin. The default name for this method is view.},
context => q{template variable},
lastUpdated => 1230844137,
},
'is_active' => {
message => q{This variable will be true if this plugin is currently being viewed.},
context => q{template variable},
lastUpdated => 1230844137,
},
};
1;

View file

@ -23,7 +23,7 @@ our $I18N = {
message => q|Layout Template|,
lastUpdated => 1119068809
},
'contrib layout template hoverHelp' => {
message => q{Choose a layout template in which to enclose the content from the various methods within the contributions tab},
lastUpdated => 1119068809
@ -33,7 +33,7 @@ our $I18N = {
message => q|View Contributions Template|,
lastUpdated => 1119068809
},
'contrib view template hoverHelp' => {
message => q{Choose the template for displaying user contributions},
lastUpdated => 1119068809
@ -63,7 +63,62 @@ our $I18N = {
message => q{total contributions},
lastUpdated => 1119068809
},
'account contributions layout template' => {
message => q{Account Contributions Layout Template},
lastUpdated => 1230848105,
},
'title_url' => {
message => q{URL to sort contributions by title. Note that this URL also toggles the state of the sorting direction, ascending or descending.},
lastUpdated => 1230848105,
},
'type_url' => {
message => q{URL to sort contributions by type of contribution. Note that this URL also toggles the state of the sorting direction, ascending or descending.},
lastUpdated => 1230848105,
},
'dateStamp_url' => {
message => q{URL to sort contributions by date it was created. Note that this URL also toggles the state of the sorting direction, ascending or descending.},
lastUpdated => 1230848105,
},
'rpp_url' => {
message => q{URL to change the number of results per page.},
lastUpdated => 1230848105,
},
'has_contributions' => {
message => q{A boolean which will be true if the user has made contributions to the site.},
lastUpdated => 1230848105,
},
'contributions_total' => {
message => q{The total number of contributions made by the user.},
lastUpdated => 1230848105,
},
'user_full_name' => {
message => q{The name of the user whose contributions are being viewed.},
lastUpdated => 1230848105,
},
'user_member_since' => {
message => q{The date, as an epoch, that the user whose contributions are being viewed created an account on this site.},
lastUpdated => 1230848105,
},
'contributions_loop' => {
message => q{A loop containing information about all contributions made by this user.},
lastUpdated => 1230848105,
},
'contributions_variables' => {
message => q{Every Asset variable that the asset provides will be in this loop, by name. The more common, useful ones will be title, url, menutitle, dateCreated, synopsis, lastModified, and so on.},
lastUpdated => 1230866082,
},
};
1;

View file

@ -485,6 +485,46 @@ our $I18N = {
lastUpdated => 1181410226,
},
'common account variables' => {
message => q|Common Account, Inbox Plugin, Template Variables.|,
lastUpdated => 1230867391,
},
'view_inbox_url' => {
message => q|URL to view the Inbox screen.|,
lastUpdated => 1230867391,
},
'view_invitations_url' => {
message => q|URL to view the Invitations screen.|,
lastUpdated => 1230867391,
},
'unread_message_count' => {
message => q|The number of unread messages in the Inbox.|,
lastUpdated => 1230867391,
},
'invitation_count' => {
message => q|The number of Invitations this user has received.|,
lastUpdated => 1230867391,
},
'invitations_enabled' => {
message => q|A boolean that is true if the user is willing to receive invitations to join Friends Networks on this site.|,
lastUpdated => 1230867391,
},
'user_invitations_enabled' => {
message => q|A boolean that is true if this site is configured to send invitations to users outside of the site.|,
lastUpdated => 1230867391,
},
'invite_friend_url' => {
message => q|The URL to invite this user to be join your Friend Network.|,
lastUpdated => 1230867391,
},
};
1;

View file

@ -11,30 +11,44 @@ our $I18N = {
'shop style template label' => {
message => q|Style Template|,
lastUpdated => 1119068809
lastUpdated => 1119068809,
},
'shop style template hoverHelp' => {
message => q|Select a style template from the list to enclose the shop tab in.|,
lastUpdated => 1119068809
lastUpdated => 1119068809,
},
'shop layout template label' => {
message => q|Layout Template|,
lastUpdated => 1119068809
lastUpdated => 1119068809,
},
'shop layout template hoverHelp' => {
message => q{Choose a layout template in which to enclose the content from the various methods within the shop tab},
lastUpdated => 1119068809
lastUpdated => 1119068809,
},
'manage purchases label' => {
message => q{Manage Purchases},
lastUpdated => 1119068809
lastUpdated => 1119068809,
},
'manage_purchases_url' => {
message => q{The URL to the manage purchases screen.},
lastUpdated => 1119068809,
},
'managePurchasesIsActive' => {
message => q{A boolean that is true if the current screen is view, managePurchases or viewTransaction.},
lastUpdated => 1119068809,
},
'common account variables' => {
message => q{Common Account, Shop Plugin, Template Variables.},
lastUpdated => 1230867169,
},
};
1;

View file

@ -34,6 +34,17 @@ our $I18N = {
lastUpdated => 1119068809
},
'user layout template title' => {
message => q{Account User Layout Template},
lastUpdated => 1230846973,
},
'user layout template body' => {
message => q{This Account plugin is only a wrapper for the WebGUI Auth system. Please see
the display account templates for information about styling this screen.},
lastUpdated => 1230846978,
},
};

View file

@ -904,6 +904,55 @@ our $I18N = {
message => q{<h1>Error!</h1><p>You need to commit this calendar before you can create a new event</p>},
lastUpdated => 1166848379,
},
'New Year' => {
message => q{New Year},
context => q{template label, In a list of events, used to indicate that the year has changed},
lastUpdated => 1229310924,
},
'New Month' => {
message => q{New Month},
context => q{template label, In a list of events, used to indicate that the month has changed},
lastUpdated => 1229310924,
},
'New Day' => {
message => q{New Day},
context => q{template label, In a list of events, used to indicate that the day has changed},
lastUpdated => 1229311001,
},
'UP' => {
message => q{UP},
context => q{template label, referring to the previous week, up. Should be an abbreviation with 2 characters},
lastUpdated => 1230356830,
},
'DN' => {
message => q{DN},
context => q{template label, referring to the next week, down. Should be an abbreviation with 2 characters},
lastUpdated => 1230356830,
},
'Add a feed' => {
message => q{Add a feed},
context => q{feed refers to an iCalendar/iCal feed},
lastUpdated => 1230931579,
},
'Add' => {
message => q{Add},
context => q{to add, or append to a list},
lastUpdated => 1230931579,
},
'Feed URL' => {
message => q{Feed URL},
context => q{},
lastUpdated => 1230931579,
},
};
1;

View file

@ -541,6 +541,12 @@ our $I18N = {
lastUpdated => 1109696029,
},
'date posted' => {
message => q|Date Posted|,
lastUpdated => 1229907194,
context => q|i18n lable for Collaboration template|,
},
'location' => {
message => q|Location|,
lastUpdated => 1109696029,
@ -1665,11 +1671,36 @@ the Collaboration Asset, the user will be notified.|,
message => q|Post received template|,
lastUpdated => 1221247761,
},
'post received template hoverHelp' => {
message => q|The template for the message received when a user makes a post.|,
lastUpdated => 1221247761,
},
'Link Description' => {
message => q|Link Description|,
context => q|i18n label for the link list collaboration template.|,
lastUpdated => 1221247761,
},
'Link URL' => {
message => q|Link URL|,
context => q|i18n label for the link list collaboration template.|,
lastUpdated => 1221247761,
},
'List All Links' => {
message => q|List All Links|,
context => q|i18n label for the link list collaboration template.|,
lastUpdated => 1221247761,
},
'has posted to one of your subscriptions' => {
message => q|has posted to one of your subscriptions|,
context => q|i18n label for the notification template. "user" has posted..|,
lastUpdated => 1229910435,
},
};
1;

View file

@ -1,57 +1,62 @@
package WebGUI::i18n::English::Asset_Dashboard;
package WebGUI::i18n::English::Asset_Dashboard;
use strict;
our $I18N = {
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'dashboard template description' => {
message => q|Choose a Dashboard/Portal Layout template. The default is the <b>Three Column Layout</b>.|,
lastUpdated => 1133619940
},
'assetName' => {
message => q|Dashboard (beta)|,
lastUpdated => 1133619940
},
'dashboard adminsGroupId description' => {
message => q|Which group may administer this Dashboard: Add/Edit/Remove Available Dashlets, Preferences, and Templates|,
lastUpdated => 1133619940
},
'dashboard adminsGroupId field label' => {
message => q|Who can manage?|,
lastUpdated => 1133619940
},
'dashboard usersGroupId field label' => {
message => q|Who can personalize?|,
lastUpdated => 1133619940
},
'dashboard usersGroupId description' => {
message => q|The group whose users may save their personalizations/preferences to the site. If someone is in the "Who can view?" group but not in this group, they can personalize the arrangement of the Dashlets (whose positions will be saved in cookies), but they will not be able to edit the preferences of any particular Dashlet.|,
lastUpdated => 1133619940
},
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'assets to hide' => {
message => q|Assets To Hide.|,
lastUpdated => 1118942468
},
'assets to hide description' => {
message => q|This list contains one checkbox for each child Asset of the Page Layout. Select the
checkbox for any Asset that you do not want displayed in the Page Layout Asset.
|,
lastUpdated => 1119410080,
},
};
1;
our $I18N = {
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'dashboard template description' => {
message => q|Choose a Dashboard/Portal Layout template. The default is the <b>Three Column Layout</b>.|,
lastUpdated => 1133619940
},
'assetName' => {
message => q|Dashboard (beta)|,
lastUpdated => 1133619940
},
'dashboard adminsGroupId description' => {
message => q|Which group may administer this Dashboard: Add/Edit/Remove Available Dashlets, Preferences, and Templates|,
lastUpdated => 1133619940
},
'dashboard adminsGroupId field label' => {
message => q|Who can manage?|,
lastUpdated => 1133619940
},
'dashboard usersGroupId field label' => {
message => q|Who can personalize?|,
lastUpdated => 1133619940
},
'dashboard usersGroupId description' => {
message => q|The group whose users may save their personalizations/preferences to the site. If someone is in the "Who can view?" group but not in this group, they can personalize the arrangement of the Dashlets (whose positions will be saved in cookies), but they will not be able to edit the preferences of any particular Dashlet.|,
lastUpdated => 1133619940
},
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'dashboard template field label' => {
message => q|Dashboard Template|,
lastUpdated => 1133619940
},
'assets to hide' => {
message => q|Assets To Hide.|,
lastUpdated => 1118942468
},
'assets to hide description' => {
message => q|This list contains one checkbox for each child Asset of the Page Layout. Select the
checkbox for any Asset that you do not want displayed in the Page Layout Asset.
|,
lastUpdated => 1119410080,
},
'hide new content list' => {
message => q|Hide New Content List|,
lastUpdated => 1230356526,
},
};
1;

View file

@ -1013,6 +1013,19 @@ be useful, others may not.|,
lastUpdated => 0,
context => q{Description of asset property},
},
'Entry ID' => {
message => q{Entry ID},
lastUpdated => 1229910550,
context => q{Unique identifier for this entry. i18n label for template},
},
'Submission Date' => {
message => q{Submission Date},
lastUpdated => 1229910550,
context => q{The date that this entry was submitted to the site. i18n label for template},
},
};
1;

View file

@ -480,8 +480,8 @@ our $I18N = {
},
'helpvar albums rss' => {
message => 'This is the loop over the albums being currently displayed.',
lastUpdated => 0,
message => 'A loop containing an RSS feed for albums in the gallery.',
lastUpdated => 1231287030,
},
'helpvar rssDate' => {
@ -671,11 +671,17 @@ our $I18N = {
},
'template listFilesForUser albums title' => {
message => q{Albums},
lastUpdated => 0,
message => q{My Albums},
lastUpdated => 1230576660,
context => q{Title for list of user's Albums},
},
'template listFilesForUser pictures title' => {
message => q{My Pictures},
lastUpdated => 1230576660,
context => q{Title for list of user's Pictures},
},
'template listFilesForUser albums files' => {
message => q{files},
lastUpdated => 0,

View file

@ -366,15 +366,15 @@ our $I18N = {
},
'template add' => {
message => "Add",
lastUpdated => 0,
context => 'Verb shown in title when adding a new Album',
message => "Add Album",
lastUpdated => 1230581051,
context => 'To add a new album',
},
'template edit' => {
message => "Edit",
lastUpdated => 0,
context => 'Verb shown in title when editing an existing Album',
message => "Edit Album",
lastUpdated => 1230581053,
context => 'To edit an existing album',
},
'template assetName' => {
@ -562,6 +562,12 @@ our $I18N = {
context => q{Description of asset property to allow people besides the owner to add files to the album},
},
'template use as thumbnail' => {
message => q{Use as Album Thumbnail},
lastUpdated => 0,
context => q{template label in the Edit Album template. To pick a thumbnail to use to represent the Album.},
},
};
1;

View file

@ -266,12 +266,12 @@ be useful, others may not.|,
context => q|Translator note: the "%s" tokens in the message should not be translated.|,
lastUpdated => 1168994613
},
'url pattern filter label' => {
message => q|Url Pattern Filter|,
lastUpdated => 1168994613,
},
'url pattern filter hover help' => {
message => q|Enter patterns one per line (Perl regular expressions are valid) that should be filtered when re-writing urls
<br /><br />
@ -279,7 +279,25 @@ be useful, others may not.|,
/bms/documents/document_\\d+\\.pdf
|,
lastUpdated => 1168994613,
}
},
'not found in content' => {
message => q|not found in content|,
lastUpdated => 1230159074,
context => q|i18n fragment used in default HTTP Proxy template|,
},
'Error: Search string' => {
message => q|Error: search string|,
lastUpdated => 1230159074,
context => q|i18n fragment used in default HTTP Proxy template|,
},
'Warning: Ending search point' => {
message => q|Error search point|,
lastUpdated => 1230159074,
context => q|i18n fragment used in default HTTP Proxy template|,
},
};

View file

@ -15,18 +15,26 @@ our $I18N = {
'category_loop' => {
message => q|A loop containing all of the categories in this Matrix.|,
lastUpdated => 0,
context => q|Description of the category_loop tmpl_var for the template help.|,
},
'attribute_loop' => {
message => q|A loop containing all of the attributes in a category of this Matrix.|,
lastUpdated => 0,
context => q|Description of the attribute_loop tmpl_var for the template help.|,
},
'categoryLabel' => {
message => q|The label of a category.|,
lastUpdated => 1149783768,
lastUpdated => 0,
context => q|Description of the categoryLabel tmpl_var for the template help.|,
},
'tmplVar category' => {
message => q|The name of the current category.|,
lastUpdated => 1149783768,
},
'compareForm' => {
message => q|The compare box form. The list of matrix listings in this form is a yui datatable. See the <a href='http://developer.yahoo.com/yui/examples/datatable/dt_skinning.html'>yui docs</a> for information about skinning yui datatables.|,
lastUpdated => 0,
context => q|Description of the compareForm tmpl_var for the template help.|,
},
'value' => {
message => q|The value of this field.|,
@ -38,80 +46,18 @@ our $I18N = {
lastUpdated => 1184949083,
},
'comments' => {
message => q|The comments attached to this listing.|,
lastUpdated => 0,
},
'comparison template help body' => {
message => q|Both the compare box form and the comparison list on the matrix compare page are dynamically
generated yui datatables. See the <a href='http://developer.yahoo.com/yui/examples/datatable/dt_skinning.html'>yui
docs</a> for information about skinning yui datatables.|,
lastUpdated => 0,
},
'emailForm' => {
message => q|A form to use to send an email to the listing maintainer.|,
lastUpdated => 0,
},
'emailSent' => {
message => q|A condition indicating whether or not an email message was sent.|,
lastUpdated => 0,
},
'isPending' => {
message => q|A conditional indicating whether or not this listing has been approved or not.|,
lastUpdated => 1167186037,
},
'lastUpdated_epoch' => {
message => q|The epoch date of when this listing was last updated.|,
lastUpdated => 0,
},
'lastUpdated_date' => {
message => q|A human readable date of when this listing was last updated.|,
lastUpdated => 0,
},
'description' => {
message => q|The description of this listing.|,
lastUpdated => 0,
},
'productName' => {
message => q|The name of this listing. This is the same as this matrix listing's asset title.|,
lastUpdated => 0,
},
'productUrl' => {
message => q|The manufacturer's URL for this listing.|,
lastUpdated => 0,
},
'productUrl_click' => {
message => q|The product URL to use if you want to register the click count for this listing.|,
lastUpdated => 0,
},
'manufacturerUrl' => {
message => q|The manufacturer's URL.|,
lastUpdated => 0,
},
'manufacturerUrl_click' => {
message => q|The manufacturer URL to use if you want to register the click count for this listing.|,
lastUpdated => 0,
},
'views' => {
message => q|The total number of views this listing has received.|,
lastUpdated => 0,
},
'compares' => {
message => q|The total number of compares this listing has received.|,
lastUpdated => 0,
},
'clicks' => {
message => q|The total number of clicks this listing has received.|,
lastUpdated => 0,
},
'javascript' => {
message => q|The inline javascript for this template.|,
lastUpdated => 0,
context => q|Description of the javascript tmpl_var for the template help.|,
},
'views label' => {
message => q|Views|,
@ -128,51 +74,6 @@ our $I18N = {
lastUpdated => 0,
},
'ratings' => {
message => q|The ratings form (or results) for this listing.|,
lastUpdated => 1149784175,
},
'CATEGORY_NAME_loop' => {
message => q|A loop containting attributes and values for those attributes is created for each category in this matrix. The name of the loop is the category name with spaces replaced with hyphens and a _loop added to the end. So if you have a category called "Bells and Whistles" then the loop would be called "bells-and-whistles_loop".|,
lastUpdated => 0,
},
'attribute_loop' => {
message => q|A loop containing attributes and values for those attributes.|,
lastUpdated => 0,
},
'tmplVar name' => {
message => q|The name of this field.|,
lastUpdated => 1149784175,
},
'label' => {
message => q|The label of this field.|,
lastUpdated => 1149784175,
},
'category listing description' => {
message => q|The description that tells the user what this field represents.|,
lastUpdated => 1149784175,
},
'tmplVar category' => {
message => q|The name of the category this field is in.|,
lastUpdated => 1149784175,
},
'tmplVar class' => {
message => q|The stylesheet class name for this field. The class is the field value with spaces replaced with underscores and all non alphanumeric characters removed.|,
lastUpdated => 1149784175,
},
'detail template help title' => {
lastUpdated => 0,
message => q|Matrix Listing Detail Template Variables|
},
'search_url' => {
message => q|The URL to the matrix search page.|,
lastUpdated => 0,
@ -268,6 +169,7 @@ listing,|,
'listAttributes_url' => {
message => q|The URL to the page where you configure new listing attributes for this matrix.|,
lastUpdated => 0,
context => q|Description of the listAttributes_url tmpl_var for the template help.|,
},
'list attributes label' => {
@ -288,178 +190,135 @@ listing,|,
'addMatrixListing_url' => {
message => q|The URL to the page where a user can add a new listing to the matrix.|,
lastUpdated => 0,
context => q|Description of the addMatrixListing_url tmpl_var for the template help.|,
},
'bestViews_url' => {
message => q|The URL to the listing that has the most views.|,
lastUpdated => 0,
context => q|Description of the bestViews_url tmpl_var for the template help.|,
},
'bestViews_count' => {
message => q|The total number of views of the listing that has the most views.|,
lastUpdated => 0,
context => q|Description of the bestViews_count tmpl_var for the template help.|,
},
'bestViews_name' => {
message => q|The name of the listing that has the most views.|,
lastUpdated => 0,
context => q|Description of the bestViews_name tmpl_var for the template help.|,
},
'bestCompares_url' => {
message => q|The URL to the listing that has the most compares.|,
lastUpdated => 0,
context => q|Description of the tmpl_var for the template help.|,
},
'bestCompares_count' => {
message => q|The number of compares of the listing that has the most compares.|,
lastUpdated => 0,
context => q|Description of the bestCompares_count tmpl_var for the template help.|,
},
'bestCompares_name' => {
message => q|The name of the listing that has the most compares.|,
lastUpdated => 0,
context => q|Description of the bestCompares_name tmpl_var for the template help.|,
},
'bestClicks_url' => {
message => q|The URL of the listing that has the most clicks.|,
lastUpdated => 0,
context => q|Description of the bestClicks_url tmpl_var for the template help.|,
},
'bestClicks_count' => {
message => q|The number of clicks of the listing that has the most clicks.|,
lastUpdated => 0,
context => q|Description of the bestClicks_count tmpl_var for the template help.|,
},
'bestClicks_name' => {
message => q|The name of the listing that has the most clicks.|,
lastUpdated => 0,
context => q|Description of the bestClicks_name tmpl_var for the template help.|,
},
'best_rating_loop' => {
message => q|A loop containing all of the categories for this matrix and their best ratings.|,
message => q|A loop containing the best rated listings for each categories of this matrix.|,
lastUpdated => 0,
context => q|Description of the best_rating_loop tmpl_loop for the template help.|,
},
'tmplVar best.url' => {
message => q|The URL of the listing that has the best rating for this category.|,
'url' => {
message => q|The URL of the listing.|,
lastUpdated => 0,
context => q|Description of the url tmpl_var for the template help.|,
},
'tmplVar best.category' => {
message => q|The name of this category.|,
'category' => {
message => q|The category of the listing.|,
lastUpdated => 0,
context => q|Description of the category tmpl_var for the template help.|,
},
'tmplVar best.name' => {
message => q|The name of the listing that has the best rating for this category.|,
'name' => {
message => q|The name of the listing.|,
lastUpdated => 0,
context => q|Description of the name tmpl_var for the template help.|,
},
'mean' => {
message => q|The mean (or average) rating of the best listing in this category.|,
message => q|The mean (or average) rating of the best/worst listing in this category.|,
lastUpdated => 0,
context => q|Description of the mean tmpl_var for the template help.|,
},
'median' => {
message => q|The median (or middle) rating of the best listing in this category.|,
message => q|The median (or middle) rating of the best/worst listing in this category.|,
lastUpdated => 0,
context => q|Description of the median tmpl_var for the template help.|,
},
'count' => {
message => q|The sum of all the votes of the best listing in this category.|,
message => q|The sum of all the votes of the best/worst listing in this category.|,
lastUpdated => 0,
context => q|Description of the count tmpl_var for the template help.|,
},
'worst_rating_loop' => {
message => q|A loop containing all of the categories for this matrix and their worst ratings.|,
message => q|A loop containing the worst rated listings for each categories of this matrix.|,
lastUpdated => 0,
},
'tmplVar worst.url' => {
message => q|The URL of the listing that has the worst rating for this category.|,
lastUpdated => 0,
},
'tmplVar worst.category' => {
message => q|The name of this category.|,
lastUpdated => 0,
},
'tmplVar worst.name' => {
message => q|The name of the listing that has the worst rating for this category.|,
lastUpdated => 0,
},
'tmplVar worst.mean' => {
message => q|The mean (or average) rating of the worst listing in this category.|,
lastUpdated => 0,
},
'tmplVar worst.median' => {
message => q|The median (or middle) rating of the worst listing in this category.|,
lastUpdated => 0,
},
'tmplVar worst.count' => {
message => q|The sum of all the votes of the worst listing in this category.|,
lastUpdated => 0,
},
'ratings.details.url' => {
message => q|The URL to the ratings details page.|,
lastUpdated => 1149795214,
},
'best.posts.url' => {
message => q|The URL to the listing that has the most forum posts.|,
lastUpdated => 1149795214,
context => q|Description of the worst_rating_loop tmpl_loop for the template help.|,
},
'last_updated_loop' => {
message => q|A loop containing the 20 most recently updated listings.|,
lastUpdated => 0,
context => q|Description of the last_updated_loop tmpl_loop for the template help.|,
},
'tmplVar last.url' => {
message => q|The URL to view this listing.|,
lastUpdated => 1149795214,
},
'tmplVar last.name' => {
message => q|The name of the product.|,
lastUpdated => 1149795214,
},
'tmplVar last.lastUpdated' => {
'lastUpdated' => {
message => q|The date this listing was updated.|,
lastUpdated => 1149795214,
context => q|Description of lastUpdated the tmpl_var for the template help.|,
},
'listingCount' => {
message => q|The number of listings in this matrix.|,
lastUpdated => 0,
context => q|Description of listingCount the tmpl_var for the template help.|,
},
'pending_loop' => {
message => q|A loop containing the list of pending listing.|,
lastUpdated => 0,
context => q|Description of the pending_loop tmpl_loop for the template help.|,
},
'tmplVar pending.url' => {
message => q|The URL to the pending listing.|,
lastUpdated => 0,
},
'tmplVar pending.name' => {
message => q|The product title of the pending listing.|,
lastUpdated => 0,
},
'narrow the matrix label' => {
message => q|Narrow The Matrix|,
lastUpdated => 0,
},
'expand the matrix label' => {
message => q|Expand The Matrix|,
lastUpdated => 0,
@ -470,34 +329,27 @@ listing,|,
lastUpdated => 1184949132,
},
'ratings detail template help title' => {
lastUpdated => 1230,
message => q|Matrix Ratings Detail Template Variables|
},
'listing name' => {
message => q|The name of this listing.|,
lastUpdated => 1149996259,
},
'fieldType' => {
message => q|The type of field specified for this matrix field.|,
lastUpdated => 1149996685,
},
'listing label' => {
message => q|The label given to this field that describes what the field represents.|,
lastUpdated => 1149996685,
'label' => {
message => q|The label given to this attribute that describes what the attribtute represents.|,
lastUpdated => 0,
context => q|Description of the listing label tmpl_var inside the attribute loop in the search screen.|,
},
'search field description' => {
message => q|A description of the field that gives more detail about the field and is used in the hover over tool tips.|,
lastUpdated => 1149996685,
'description' => {
message => q|A description of the attribute that gives more detail about the attribute and is used in the hover over tool tips.|,
lastUpdated => 0,
context => q|Description of the description tmpl_var inside the attribute loop in the search screen.|,
},
'form' => {
message => q|The form element representing this field.|,
lastUpdated => 1149996685,
message => q|The form element representing this attribute.|,
lastUpdated => 0,
context => q|Description of the form tmpl_var inside the attribute loop in the search screen.|,
},
'search template help title' => {
@ -506,13 +358,13 @@ listing,|,
},
'categories description' => {
message => q|Specify one category per line here to define the categories for this matrix. Categories are used to subdivide fields and also represent the things users can rate each listing on.|,
lastUpdated => 0,
message => q|Specify one category per line here to define the categories for this matrix. Categories are used to subdivide fields and also represent the things users can rate each listing on.|,
lastUpdated => 0,
},
'categories default value' => {
message => qq|Features\nBenefits|,
lastUpdated => 0,
message => qq|Features\nBenefits|,
lastUpdated => 0,
},
'submission approval workflow description' => {
@ -764,11 +616,6 @@ listing,|,
message => q|Name|,
lastUpdated => 0,
},
# 'field label' => {
# message => q|Field Label|,
# lastUpdated => 1136499282,
# },
'fieldType label' => {
message => q|Field Type|,
@ -790,11 +637,6 @@ listing,|,
lastUpdated => 0,
},
'no copy' => {
message => q|This asset may not be copied.|,
lastUpdated => 1133758944,
},
'no edit rights' => {
message => q|You don't have the rights to edit this listing.|,
lastUpdated => 1133758944,
@ -820,31 +662,6 @@ listing,|,
message => q|Edit/Add Attribute|
},
'good bad' => {
lastUpdated => 1135279558,
message => q|Good Bad|
},
'text' => {
lastUpdated => 1135279558,
message => q|Text|
},
'url' => {
lastUpdated => 1135279558,
message => q|URL|
},
'text area' => {
lastUpdated => 1135279558,
message => q|Text Area|,
},
'combo' => {
lastUpdated => 1135279558,
message => q|Combo|,
},
'delete listing confirmation' => {
lastUpdated => 1135289632,
message => q|<h1>Confirm Delete</h1>
@ -880,11 +697,6 @@ listing,|,
message => q|The name of the attribute that you are creating. It is case sensitive and must be unique.|
},
# 'field label description' => {
# lastUpdated => 1135279558,
# message => q|The name of the field that you are creating. It is case sensitive and must be unique.|
# },
'fieldType description' => {
lastUpdated => 0,
message => q|<p>The field type of attribute you are creating. Please select the field type from the options in the drop-down list.</p>|
@ -927,10 +739,22 @@ selectBox.</p>|
message => q|Compare|,
},
'last updated label' => {
lastUpdated => 0,
message => q|Last Updated|,
context => q|The label of the last updated field in the comparison table on the compare screen.|,
},
'hide stickied button label' => {
lastUpdated => 0,
message => q|Hide/show stickied|,
},
'matrix asset template variables title' => {
lastUpdated => 0,
message => q|Matrix Asset Template Variables|,
},
};
1;

View file

@ -13,7 +13,6 @@ our $I18N = {
lastUpdated => 0,
},
'template description' => {
message => q|Select a template to be used to display the default view of the Matrix.|,
lastUpdated => 0,
@ -194,7 +193,6 @@ it would be best to make sure the names are the same.|,
lastUpdated => 0,
},
'show ratings' => {
message => q|Show Ratings|,
lastUpdated => 0,
@ -205,6 +203,187 @@ it would be best to make sure the names are the same.|,
lastUpdated => 0,
},
'detail template help title' => {
lastUpdated => 0,
message => q|Matrix Listing Detail Template Variables|,
context => q|The title of the help page for the matrix listing detail template.|,
},
'edit listing template help title' => {
lastUpdated => 0,
message => q|Edit Matrix Listing Template Variables|,
context => q|The title of the help page for the edit listing template.|,
},
'form' => {
message => q|The complete edit form.|,
lastUpdated => 0,
context => q|Description of the form tmpl_var for the template help.|,
},
'screenshots' => {
message => q|This listings screenshots displayed using the ukplayer.|,
lastUpdated => 0,
context => q|Description of the screenshots tmpl_var for the template help.|,
},
'comments' => {
message => q|The comments attached to this listing.|,
lastUpdated => 0,
context => q|Description of the comments tmpl_var for the template help.|,
},
'emailForm' => {
message => q|A form to use to send an email to the listing maintainer.|,
lastUpdated => 0,
context => q|Description of the emailForm tmpl_var for the template help.|,
},
'emailSent' => {
message => q|A condition indicating whether or not an email message was sent.|,
lastUpdated => 0,
context => q|Description of the emailSent tmpl_var for the template help.|,
},
'isPending' => {
message => q|A conditional indicating whether or not this listing has been approved or not.|,
lastUpdated => 1167186037,
context => q|Description of the CATEGORY_NAME_loop tmpl_var for the template help.|,
},
'lastUpdated_epoch' => {
message => q|The epoch date of when this listing was last updated.|,
lastUpdated => 0,
context => q|Description of the CATEGORY_NAME_loop tmpl_var for the template help.|,
},
'lastUpdated_date' => {
message => q|A human readable date of when this listing was last updated.|,
lastUpdated => 0,
context => q|Description of the CATEGORY_NAME_loop tmpl_var for the template help.|,
},
'description' => {
message => q|The description of this listing.|,
lastUpdated => 0,
context => q|Description of the description tmpl_var for the template help.|,
},
'productName' => {
message => q|The name of this listing. This is the same as this matrix listing's asset title.|,
lastUpdated => 0,
context => q|Description of the productName tmpl_var for the template help.|,
},
'productUrl' => {
message => q|The manufacturer's URL for this listing.|,
lastUpdated => 0,
context => q|Description of the productUrl tmpl_var for the template help.|,
},
'productUrl_click' => {
message => q|The product URL to use if you want to register the click count for this listing.|,
lastUpdated => 0,
context => q|Description of the productUrl_click tmpl_var for the template help.|,
},
'manufacturerUrl' => {
message => q|The manufacturer's URL.|,
lastUpdated => 0,
context => q|Description of the manufacturerUrl tmpl_var for the template help.|,
},
'manufacturerUrl_click' => {
message => q|The manufacturer URL to use if you want to register the click count for this listing.|,
lastUpdated => 0,
context => q|Description of the manufacturerUrl_click tmpl_var for the template help.|,
},
'views' => {
message => q|The total number of views this listing has received.|,
lastUpdated => 0,
context => q|Description of the views tmpl_var for the template help.|,
},
'compares' => {
message => q|The total number of compares this listing has received.|,
lastUpdated => 0,
context => q|Description of the compares tmpl_var for the template help.|,
},
'clicks' => {
message => q|The total number of clicks this listing has received.|,
lastUpdated => 0,
context => q|Description of the clicks tmpl_var for the template help.|,
},
'version' => {
message => q|The version of this listing.|,
lastUpdated => 0,
context => q|Description of the version tmpl_var for the template help.|,
},
'ratings' => {
message => q|An overview of the ratings this listing has received and a form to rate this listing if the user hasn't rated it already.|,
lastUpdated => 0,
context => q|Description of the ratings tmpl_var for the template help.|,
},
'CATEGORY_NAME_loop' => {
message => q|A loop containting attributes and values for those attributes is created for each category in this matrix. The name of the loop is the category name with spaces replaced with hyphens and a _loop added to the end. So if you have a category called "Bells and Whistles" then the loop would be called "bells-and-whistles_loop".|,
lastUpdated => 0,
context => q|Description of the CATEGORY_NAME_loop tmpl_var for the template help.|,
},
'categoryLabel' => {
message => q|The label of this category.|,
lastUpdated => 0,
context => q|Description of the categoryLabel tmpl_var in the CATEGORY_NAME_loop for the template help.|,
},
'attribute_loop' => {
message => q|A loop containing matrix attributes.|,
lastUpdated => 0,
context => q|Description of the attribute_loop tmpl_var for the template help.|,
},
'value' => {
message => q|The value of this attribute.|,
lastUpdated => 0,
context => q|Description of the value tmpl_var in the attribute_loop for the template help.|,
},
'label' => {
message => q|The label of this attribute.|,
lastUpdated => 0,
context => q|Description of the label tmpl_var in the attribute_loop for the template help.|,
},
'fieldType' => {
message => q|The fieldType of this attribute.|,
lastUpdated => 0,
context => q|Description of the fieldType tmpl_var in the attribute_loop for the template help.|,
},
'Edit this listing.' => {
message => q|Edit this listing.|,
lastUpdated => 1230269571,
context => q|i18n label for template.|,
},
'Approve this listing.' => {
message => q|Approve this listing.|,
lastUpdated => 1230269571,
context => q|i18n label for template.|,
},
'Delete this listing.' => {
message => q|Delete this listing.|,
lastUpdated => 1230269571,
context => q|i18n label for template.|,
},
};
1;

View file

@ -73,31 +73,6 @@ our $I18N = {
lastUpdated => 0
},
'' => {
message => '',
lastUpdated => 0
},
'' => {
message => '',
lastUpdated => 0
},
'' => {
message => '',
lastUpdated => 0
},
'' => {
message => '',
lastUpdated => 0
},
'' => {
message => '',
lastUpdated => 0
},
'32' => {
message => q|Show unprivileged pages|,
lastUpdated => 1077080845
@ -614,6 +589,12 @@ be useful, others may not.|,
lastUpdated => 1164841201,
},
'Where do you want to go?' => {
message => q|Where do you want to go?|,
context => q|i18n label for the drop down nav, asking the user which link they want to visit.|,
lastUpdated => 1229580897,
},
};
1;

View file

@ -312,7 +312,31 @@ our $I18N = {
lastUpdated => 0,
context => 'The title of the default view of Photo assets',
},
'template view details' => {
message => 'Details',
lastUpdated => 0,
context => 'List of information about the photo',
},
'more details' => {
message => 'More Details',
lastUpdated => 0,
context => 'List of more information about the photo',
},
'hide' => {
message => 'Hide',
lastUpdated => 0,
context => 'To make hidden',
},
'template view available resolutions' => {
message => 'Available Resolutions',
lastUpdated => 0,
context => 'List of resolutions, in pixels, that this photo is available in',
},
'template url_edit' => {
message => 'Edit Photo',
lastUpdated => 0,
@ -510,7 +534,7 @@ our $I18N = {
lastUpdated => 0,
context => q{Error message for Photo comments},
},
'helpvar keywords' => {
message => q{A loop over the keywords associated with this photo},
lastUpdated => 0,
@ -667,6 +691,18 @@ our $I18N = {
context => q{Title for the edit comment screen.},
},
'template comment edit comment' => {
message => q{Edit Comment},
lastUpdated => 0,
context => q{Title for the edit comment screen.},
},
'form comment save comment' => {
message => q{Save Comment.},
lastUpdated => 0,
context => q{Title for the edit comment screen.},
},
};
1;

View file

@ -345,6 +345,12 @@ will always be false for query5.|,
lastUpdated => 0,
},
'Download this data' => {
message => "Download this data",
context => "Link label to download data form the report",
lastUpdated => 1229907351,
},
'sql report asset template variables title' => {
message => q|SQL Report Asset Template Variables|,
lastUpdated => 1168887204

View file

@ -144,6 +144,21 @@ our $I18N = { ##hashref of hashes
lastUpdated => 1170549116,
},
'resultsFeedback' => {
message => q|Search results for|,
lastUpdated => 1230678996,
},
'page' => {
message => q|Page|,
lastUpdated => 1230678996,
},
'of' => {
message => q|of|,
lastUpdated => 1230678996,
},
'no results' => {
message => q|No results were found.|,
lastUpdated => 1170549113,

View file

@ -170,6 +170,12 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Last Trade' => {
message => q|Last Trade|,
context => q|i18n template label. The date and time when the stock was last traded.|,
lastUpdated => 1229493951,
},
'stocks.loop' => {
message => q|Loop containing all default or personalized stocks|,
lastUpdated => 1149565312,
@ -195,11 +201,23 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Day High' => {
message => q|Day High|,
context => q|i18n template label. Refers to the highest price of the stock during the day.|,
lastUpdated => 1149565312,
},
'stocks.low' => {
message => q|Lowest trade today|,
lastUpdated => 1149565312,
},
'Day Low' => {
message => q|Day Low|,
context => q|i18n template label. the lowest price of the stock today|,
lastUpdated => 1229494373,
},
'stocks.date' => {
message => q|Last Trade Date (MM/DD/YY format)|,
lastUpdated => 1149565312,
@ -245,6 +263,12 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Volume' => {
message => q|Volume|,
context => q|i18n template label. Referring to a quantity of stock.|,
lastUpdated => 1229494073,
},
'stocks.volume.millions' => {
message => q|Day's Volume In Millions|,
lastUpdated => 1149565312,
@ -258,11 +282,13 @@ our $I18N = {
'stocks.bid' => {
message => q|Bid|,
lastUpdated => 1149565312,
context => q|Help doc, and i18n template label. Refers to the price that people are bidding or asking for a stock.|,
},
'stocks.ask' => {
message => q|Ask|,
lastUpdated => 1149565312,
context => q|template help and i18n template label. The price people are asking for the stock.|,
lastUpdated => 1229494441,
},
'stocks.close' => {
@ -270,11 +296,23 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Prev Close' => {
message => q|Prev Close|,
context => q|i18n template label. Short for Previous Close, the price of the stock from yesterday.|,
lastUpdated => 1229494287,
},
'stocks.open' => {
message => q|Today's Open|,
lastUpdated => 1149565312,
},
'Open' => {
message => q|Open|,
context => q|template label. Refers to the price of the stock when trading opened.|,
lastUpdated => 1229493038,
},
'stocks.day_range' => {
message => q|Day's Range|,
lastUpdated => 1149565312,
@ -290,6 +328,18 @@ our $I18N = {
lastUpdated => 1149565312,
},
'52 Wk High' => {
message => q|52 Wk High|,
context => q|i18n template label. The highest price of the stock in 52 weeks.|,
lastUpdated => 1229493392,
},
'52 Wk Low' => {
message => q|52 Wk Low|,
context => q|i18n template label. The lowest price of the stock in 52 weeks.|,
lastUpdated => 1229493392,
},
'stocks.year_low' => {
message => q|52-Week Low|,
lastUpdated => 1149565312,
@ -300,9 +350,16 @@ our $I18N = {
lastUpdated => 1149565312,
},
'EPS' => {
message => q|E.P.S.|,
context => q|i18n template label. Abbreviated from Earnings Per Share.|,
lastUpdated => 1229493466,
},
'stocks.pe' => {
message => q|P/E Ratio|,
lastUpdated => 1149565312,
context => q|template help and i18n label. Short for Price to Earnings Ratio.|,
lastUpdated => 1229494503,
},
'stocks.div_date' => {
@ -325,9 +382,23 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Market Cap' => {
message => q|Market Cap|,
lastUpdated => 1229492783,
context => q|Template label, short for market capitalization|,
},
'stocks.ex_div' => {
message => q|Ex-Dividend Date.|,
lastUpdated => 1149565312,
message => q|Ex-Dividend Date|,
lastUpdated => 1229493538,
context => q|template help and i18n label. The date that a stock must be owned to receive a dividend.|,
},
'Dividend' => {
message => q|Dividend|,
context => q|i18n template label. The amount you are paid just for owning a share of stock.|,
lastUpdated => 1229494596,
context => q|template help and i18n label. The date that a stock must be owned to receive a dividend.|,
},
'stocks.nav' => {
@ -340,11 +411,23 @@ our $I18N = {
lastUpdated => 1149565312,
},
'Yield' => {
message => q|Yield|,
context => q|i18n template label. ratio of divided to share price averaged over the last 30 days|,
lastUpdated => 1229493670,
},
'stocks.exchange' => {
message => q|The exchange the information was obtained from.|,
lastUpdated => 1149565312,
},
'Exchange' => {
message => q|Exchange|,
context => q|The place where the stock is traded.|,
lastUpdated => 1229494639,
},
'stocks.success' => {
message => q|Did the stock successfully return information? (true/false)|,
lastUpdated => 1149565312,
@ -395,6 +478,42 @@ our $I18N = {
lastUpdated => 1168646986
},
'Stock Watch' => {
message => q|Stock Watch|,
context => q|i18n header for the Stock List Template, probably meaning a set of stocks that are watched.|,
lastUpdated => 1229314732,
},
'Last Update' => {
message => q|Last Update|,
context => q|i18n label for the Stock List Template, the time something was last changed.|,
lastUpdated => 1229314732,
},
'delayed 20 minutes' => {
message => q|delayed 20 minutes|,
context => q|i18n label for the Stock List Template.|,
lastUpdated => 1229314732,
},
'Change' => {
message => q|Change|,
context => q|i18n label for the Stock List Template. Refers to how much the stock changed in price today.|,
lastUpdated => 1229314732,
},
'% Change' => {
message => q|% Change|,
context => q|i18n label for the Stock List Template. Refers to how the percentage change in the price of the stock today.|,
lastUpdated => 1229314732,
},
'Close' => {
message => q|Close|,
context => q|i18n label for the Stock List Template. Used to close the window in the browser.|,
lastUpdated => 1229493261,
},
};
1;

View file

@ -358,20 +358,23 @@ characters long.</p>|,
context => q|Shows up in the selection part of listSubscriptionCodes.|
},
'help redeem code template body' => {
message => q|The following template variables are available through this template:<br />
<br />
<b>batchDescription</b><br />
The description of the batch tied to the subscription code.<br />
<br />
<b>message</b><br />
The message that gives the result of your action. Depending on what you've done it says that you can enter a code, you've entered the wrong code, or you've successfully redeemed your code.<br />
<br />
<b>codeForm</b><br />
The form in which the user can enter his subscription code.<br />|,
lastUpdated => 1215618652,
context => q|The body of the help page of the code redemption template.|
},
'batchDescription' => {
message => q|The description of the batch tied to the subscription code.|,
context => q|Template variable in the redeem subscription code template|,
lastUpdated => 0,
},
'message' => {
message => q|The message that gives the result of your action. Depending on what you've done it says that you can enter a code, you've entered the wrong code, or you've successfully redeemed your code.|,
context => q|Template variable in the redeem subscription code template|,
lastUpdated => 0,
},
'codeForm' => {
message => q|The form in which the user can enter his subscription code.|,
context => q|Template variable in the redeem subscription code template|,
lastUpdated => 0,
},
'help redeem code template title' => {
message => q|Redeem subscription code template|,
@ -431,6 +434,18 @@ The form in which the user can enter his subscription code.<br />|,
context => q|Asset property hover help|,
},
'redeem subscription code template' => {
message => q|Redeem Subscription template|,
lastUpdated => 0,
context => q|Asset property|,
},
'redeem subscription code template help' => {
message => q|Choose the template that is used to display the screen where users redeem subscription codes.|,
lastUpdated => 0,
context => q|Asset property hover help|,
},
'batch name' => {
message => q|Batch Name|,
lastUpdated => 0,
@ -508,7 +523,7 @@ The form in which the user can enter his subscription code.<br />|,
lastUpdated => 0,
context => q|Label for swith to set subscription to be recurring or not.|
},
'recurring subscription description' => {
message => q|If set to yes, the customer will be charged after each term for a new one and the subscription
will be renewed for an extra term. If set to no, the customer will be charged for the first term only, and after one

View file

@ -244,8 +244,8 @@ our $I18N = {
lastUpdated => 1224686319
},
'timelimit hoverHelp' => {
message => q|How many minutes the user has to finish the server from the moment they start. 0 means unlimited time.|,
lastUpdated => 1224686319
message => q|How many minutes the user has to finish the survey from the moment they start. 0 means unlimited time.|,
lastUpdated => 1231193335,
},
};

View file

@ -984,8 +984,8 @@ search has been done.|,
},
'other thing missing message' => {
message => q|The Thing to which this field refers does not exist or has no table.|,
lastUpdated => 1104630516,
message => q|The Thing to which this field refers does not exist or has no table, or the field in it has been deleted.|,
lastUpdated => 1231178860,
},
'no permission to edit' => {
@ -1012,6 +1012,12 @@ search has been done.|,
message => q|The URL that will take the user back to the Thingy default view.|,
lastUpdated => 1227737813,
},
'other thing field missing message' => {
message => q|The field from the other Thing does not exist.|,
lastUpdated => 1231180362,
},
};
1;

View file

@ -464,6 +464,18 @@ our $I18N = {
lastUpdated => 1168038164,
},
'next week' => {
message => q|Next Week|,
context => q|Template label for the week following the current week.|,
lastUpdated => 1229311274,
},
'last week' => {
message => q|Last Week.|,
context => q|Template label for the week preceeding the current week.|,
lastUpdated => 1229311309,
},
};
1;

View file

@ -107,6 +107,12 @@ our $I18N = {
lastUpdated => 1078852836
},
'email validation confirmed' => {
message => q|Thank you for activating your account. You may now log in with your username and password.|,
context => q|Message displayed to the user after they validate their email address.|,
lastUpdated => 1230588145,
},
'display account template title' => {
message => q|WebGUI Authentication Display Account Template|,
lastUpdated => 1078852836
@ -724,6 +730,13 @@ our $I18N = {
lastUpdated => 0,
context => q{Error message when a user tries to recover password for a disabled account},
},
'no email address' => {
message => q{There is no email address registered for this account. Password recovery via email is not possible.},
lastUpdated => 1229391388,
context => q{Error message when a user tries to recover password and they don't have an email address},
},
};
1;

View file

@ -159,8 +159,8 @@ our $I18N = {
},
'emailField help' => {
message => q|A single text field for the user to enter in their street address.|,
lastUpdated => 0,
message => q|A single text field for the user to enter in their email address.|,
lastUpdated => 1231192368,
context => q|Template variable help.|
},

View file

@ -374,7 +374,7 @@ our $I18N = {
},
'manageRevisionsInTag update' => {
message => q{Update},
message => q{Update Version Tag},
lastUpdated => 0,
context => q{Label for button to update revisions},
},
@ -476,6 +476,7 @@ our $I18N = {
lastUpdated => 0,
context => q{Explanation of Permission Denied message},
},
};
1;

View file

@ -3471,6 +3471,18 @@ LongTruncOk=1</p>
lastUpdated => 0,
},
'no ldap link for auth' => {
message => q|Unable to create your account because no LDAP connection has been defined for this site.|,
context => 'Error message in createAccount screen when no LDAP connection is defined.',
lastUpdated => 1229376071,
},
'no ldap logins' => {
message => q|Unable to log you in because no LDAP link has been defined for this site.|,
context => 'Error message for login when no LDAP connection is defined.',
lastUpdated => 1229376071,
},
'Select State' => {
message => q|Select State|,
lastUpdated => 1161388472,
@ -4278,48 +4290,6 @@ Users may override this setting in their profile.
context => q{i18n label for YUI paginator},
},
'years' => {
message => q{years},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'months' => {
message => q{months},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'weeks' => {
message => q{weeks},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'days' => {
message => q{days},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'hours' => {
message => q{hours},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'minutes' => {
message => q{minutes},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'seconds' => {
message => q{seconds},
lastUpdated => 1226706547,
context => q{i18n label for time duration in WebGUI::DateTime},
},
'profile privacy settings' => {
message => q{Privacy Settings},
lastUpdated => 1226706547,
@ -4332,6 +4302,29 @@ Users may override this setting in their profile.
context => q|Template label. Used to indicate that a shortened version of the content is currently displayed and that more can be read by clicking a link.|
},
'For' => {
message => q|For|,
lastUpdated => 1230269893,
},
'rss' => {
message => q|RSS|,
lastUpdated => 1230584702,
context => q|Abbreviation for Really Simple Syndication, and other similar terms.|,
},
'Upload an attachment' => {
message => q|Upload an attachment|,
context => q|Label in the Attachments form control.|,
lastUpdated => 1230930518,
},
'Upload attachments here. Copy and paste attachments into the editor.' => {
message => q|Upload attachments here. Copy and paste attachments into the editor.|,
context => q|Label in the Attachments form control.|,
lastUpdated => 1230930518,
},
};
1;