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:
commit
b7520da07d
396 changed files with 2647 additions and 1186 deletions
|
|
@ -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;"> </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> </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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 }) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ package WebGUI::Asset::Wobject::UserList;
|
|||
#-------------------------------------------------------------------
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use HTML::Entities;
|
||||
use Tie::CPHash;
|
||||
use Tie::IxHash;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue