diff --git a/docs/upgrades/upgrade_3.7.0-3.8.0.sql b/docs/upgrades/upgrade_3.7.0-3.8.0.sql index f21d72ee5..ffbc791b8 100644 --- a/docs/upgrades/upgrade_3.7.0-3.8.0.sql +++ b/docs/upgrades/upgrade_3.7.0-3.8.0.sql @@ -89,8 +89,15 @@ insert into wobject (wobjectId, pageId, title, displayTitle, processMacros, desc delete from widget where namespace='SyndicatedContent'; alter table SyndicatedContent change widgetId wobjectId int not null; +insert into wobject (wobjectId, pageId, title, displayTitle, processMacros, description, dateAdded, addedBy, namespace, lastEdited, editedBy, templatePosition, sequenceNumber, startDate, endDate) select widgetId, pageId, title, displayTitle, processMacros, description, dateAdded, addedBy, namespace, lastEdited, editedBy, templatePosition, sequenceNumber, dateAdded, 1336444487 from widget where namespace='UserSubmission'; +delete from widget where namespace='UserSubmission'; +delete from international where internationalId=36 and namespace='UserSubmission'; +alter table UserSubmission change widgetId wobjectId int not null; +alter table UserSubmission_submission change widgetId wobjectId int not null; + +INSERT INTO international VALUES (38,'UserSubmission','English','(Select \"No\" if you\'re writing a HTML/Rich Edit submission.)'); update international set message='Select \"Yes\" to change all the pages under this page to this style.' where internationalId='106' and namespace='WebGUI' and language='English'; update international set message='Select \"Yes\" to change the privileges of all pages under this page to these privileges.' where internationalId='116' and namespace='WebGUI' and language='English'; INSERT INTO international VALUES (500,'WebGUI','English','Page ID'); diff --git a/lib/WebGUI/Widget/UserSubmission.pm b/lib/WebGUI/Widget/UserSubmission.pm deleted file mode 100644 index 25a76c174..000000000 --- a/lib/WebGUI/Widget/UserSubmission.pm +++ /dev/null @@ -1,501 +0,0 @@ -package WebGUI::Widget::UserSubmission; - -our $namespace = "UserSubmission"; - -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2002 Plain Black Software. -#------------------------------------------------------------------- -# Please read the legal notices (docs/legal.txt) and the license -# (docs/license.txt) that came with this distribution before using -# this software. -#------------------------------------------------------------------- -# http://www.plainblack.com info@plainblack.com -#------------------------------------------------------------------- - -use strict; -use Tie::CPHash; -use WebGUI::Attachment; -use WebGUI::DateTime; -use WebGUI::HTML; -use WebGUI::International; -use WebGUI::Macro; -use WebGUI::MessageLog; -use WebGUI::Operation; -use WebGUI::Paginator; -use WebGUI::Privilege; -use WebGUI::Session; -use WebGUI::Shortcut; -use WebGUI::SQL; -use WebGUI::URL; -use WebGUI::Utility; -use WebGUI::Widget; - -#------------------------------------------------------------------- -sub duplicate { - my ($sth, $file, %data, $newWidgetId, @row, $newSubmissionId, $pageId); - tie %data, 'Tie::CPHash'; - %data = getProperties($namespace,$_[0]); - $pageId = $_[1] || $data{pageId}; - $newWidgetId = create($pageId,$namespace,$data{title},$data{displayTitle}, - $data{description},$data{processMacros},$data{templatePosition}); - WebGUI::SQL->write("insert into UserSubmission values ($newWidgetId, $data{groupToContribute}, '$data{submissionsPerPage}', '$data{defaultStatus}', $data{groupToApprove})"); - $sth = WebGUI::SQL->read("select * from UserSubmission_submission where widgetId=$_[0]"); - while (@row = $sth->array) { - $newSubmissionId = getNextId("submissionId"); - $file = WebGUI::Attachment->new($row[8],$_[0],$row[1]); - $file->copy($newWidgetId,$newSubmissionId); - WebGUI::SQL->write("insert into UserSubmission_submission values ($newWidgetId, $newSubmissionId, ". - quote($row[2]).", $row[3], ".quote($row[4]).", '$row[5]', ".quote($row[6]).", ". - quote($row[7]).", ".quote($row[8]).", '$row[9]', '$row[10]')"); - } - $sth->finish; -} - -#------------------------------------------------------------------- -sub purge { - WebGUI::SQL->write("delete from UserSubmission_submission where widgetId=$_[0]",$_[1]); - purgeWidget($_[0],$_[1],$namespace); -} - -#------------------------------------------------------------------- -sub widgetName { - return WebGUI::International::get(29,$namespace); -} - -#------------------------------------------------------------------- -sub www_add { - my ($output, %hash, @array); - tie %hash, "Tie::IxHash"; - if (WebGUI::Privilege::canEditPage()) { - $output = helpLink(1,$namespace); - $output .= '

'.WebGUI::International::get(30,$namespace).'

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("widget",$namespace); - $output .= WebGUI::Form::hidden("func","addSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,'User Submission System')); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,1)); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1)); - %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); - $output .= tableFormRow(WebGUI::International::get(1,$namespace), - WebGUI::Form::groupList("groupToApprove",4)); - $output .= tableFormRow(WebGUI::International::get(2,$namespace), - WebGUI::Form::groupList("groupToContribute",2)); - $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("submissionsPerPage",20,2,50)); - %hash = ("Approved"=>WebGUI::International::get(7,$namespace),"Denied"=>WebGUI::International::get(8,$namespace),"Pending"=>WebGUI::International::get(9,$namespace)); - $output .= tableFormRow(WebGUI::International::get(10,$namespace),WebGUI::Form::selectList("defaultStatus",\%hash,'',1)); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_addSave { - my ($widgetId); - if (WebGUI::Privilege::canEditPage()) { - $widgetId = create($session{page}{pageId},$session{form}{widget},$session{form}{title}, - $session{form}{displayTitle},$session{form}{description},$session{form}{processMacros}, - $session{form}{templatePosition}); - WebGUI::SQL->write("insert into UserSubmission values ($widgetId, $session{form}{groupToContribute}, '$session{form}{submissionsPerPage}', '$session{form}{defaultStatus}', $session{form}{groupToApprove})"); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_addSubmission { - my ($output, $groupToContribute, @submission, $sth); - ($groupToContribute) = WebGUI::SQL->quickArray("select groupToContribute from UserSubmission where widgetId=$session{form}{wid}"); - if (WebGUI::Privilege::isInGroup($groupToContribute,$session{user}{userId})) { - $output = '

'.WebGUI::International::get(11,$namespace).'

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("func","addSubmissionSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(35,$namespace),WebGUI::Form::text("title",20,128)); - $output .= tableFormRow(WebGUI::International::get(31,$namespace),WebGUI::Form::textArea("content",'',50,10,1)); - $output .= tableFormRow(WebGUI::International::get(32,$namespace),WebGUI::Form::file("image")); - $output .= tableFormRow(WebGUI::International::get(33,$namespace),WebGUI::Form::file("attachment")); - $output .= tableFormRow(WebGUI::International::get(34,$namespace),WebGUI::Form::checkbox("convertCarriageReturns",1,1).' '.WebGUI::International::get(12,$namespace).''); - $output .= formSave(); - $output .= '
'; - $output .= ''; - $output .= ''; - $sth = WebGUI::SQL->read("select title,submissionId,dateSubmitted,status from UserSubmission_submission where widgetId='$session{form}{wid}' and userId=$session{user}{userId} order by dateSubmitted desc"); - while (@submission = $sth->array) { - $submission[0] = WebGUI::HTML::filter($submission[0],'all'); - $output .= ''; - } - $sth->finish; - $output .= '
'.WebGUI::International::get(15,$namespace).''.WebGUI::International::get(99).''.WebGUI::International::get(13,$namespace).''.WebGUI::International::get(14,$namespace).'
'.$submission[0].''. - epochToHuman($submission[2],"%M/%D/%y").''. - $submission[3].'
'; - } else { - $output = WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_addSubmissionSave { - my ($title, $submissionId, $image, $attachment, %userSubmission); - tie %userSubmission, 'Tie::CPHash'; - %userSubmission = getProperties($namespace,$session{form}{wid}); - if (WebGUI::Privilege::isInGroup($userSubmission{groupToContribute},$session{user}{userId})) { - $submissionId = getNextId("submissionId"); - $image = WebGUI::Attachment->new("",$session{form}{wid},$submissionId); - $image->save("image"); - $attachment = WebGUI::Attachment->new("",$session{form}{wid},$submissionId); - $attachment->save("attachment"); - if ($session{form}{title} ne "") { - $title = $session{form}{title}; - } else { - $title = WebGUI::International::get(16,$namespace); - } - WebGUI::SQL->write("insert into UserSubmission_submission values ($session{form}{wid}, $submissionId, " - .quote($title).", ".time().", ".quote($session{user}{username}). - ", '$session{user}{userId}', ".quote($session{form}{content}).", ". - quote($image->getFilename).", ". - quote($attachment->getFilename). - ", '$userSubmission{defaultStatus}', '$session{form}{convertCarriageReturns}')"); - if ($userSubmission{defaultStatus} ne "Approved") { - WebGUI::MessageLog::addEntry('',$userSubmission{groupToApprove}, - WebGUI::URL::page('func=viewSubmission&wid='.$session{form}{wid}. - '&sid='.$submissionId),3,$namespace); - } - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_approveSubmission { - my (%submission, %userSubmission); - tie %submission, 'Tie::CPHash'; - tie %userSubmission, 'Tie::CPHash'; - if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { - %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); - %userSubmission = getProperties($namespace,$session{form}{wid});; - WebGUI::SQL->write("update UserSubmission_submission set status='Approved' where submissionId=$session{form}{sid}"); - WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. - $session{form}{wid}.'&sid='.$session{form}{sid}),4,$namespace); - WebGUI::MessageLog::completeEntry($session{form}{mlog}); - return WebGUI::Operation::www_viewMessageLog(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_copy { - if (WebGUI::Privilege::canEditPage()) { - duplicate($session{form}{wid}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteAttachment { - my ($owner); - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - WebGUI::SQL->write("update UserSubmission_submission set attachment='' where submissionId=$session{form}{sid}"); - return www_editSubmission(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteImage { - my ($owner); - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - WebGUI::SQL->write("update UserSubmission_submission set image='' where submissionId=$session{form}{sid}"); - return www_editSubmission(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteSubmission { - my ($output, $owner); - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - $output = '

'.WebGUI::International::get(42).'

'; - $output .= WebGUI::International::get(17,$namespace).'

'; - $output .= '

'.WebGUI::International::get(44).''; - $output .= '   '.WebGUI::International::get(45).'
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteSubmissionConfirm { - my ($output, $owner, $file); - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - WebGUI::SQL->write("delete from UserSubmission_submission where submissionId=$session{form}{sid}"); - $file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); - $file->deleteNode; - return www_addSubmission(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_denySubmission { - my (%submission, %userSubmission); - tie %submission, 'Tie::CPHash'; - tie %userSubmission, 'Tie::CPHash'; - if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { - %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); - %userSubmission = getProperties($namespace,$session{form}{wid}); - WebGUI::SQL->write("update UserSubmission_submission set status='Denied' where submissionId=$session{form}{sid}"); - WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. - $session{form}{wid}.'&sid='.$session{form}{sid}),5,$namespace); - WebGUI::MessageLog::completeEntry($session{form}{mlog}); - return WebGUI::Operation::www_viewMessageLog(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_edit { - my ($output, %data, @array, $sth, %hash); - tie %data, 'Tie::CPHash'; - tie %hash, 'Tie::IxHash'; - if (WebGUI::Privilege::canEditPage()) { - %data = getProperties($namespace,$session{form}{wid}); - $output = helpLink(1,$namespace); - $output .= '

'.WebGUI::International::get(18,$namespace).'

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("func","editSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,$data{title})); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle","1",$data{displayTitle})); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros","1",$data{processMacros})); - %hash = WebGUI::Widget::getPositions(); - $array[0] = $data{templatePosition}; - $output .= tableFormRow(WebGUI::International::get(363),WebGUI::Form::selectList("templatePosition",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",$data{description})); - $output .= tableFormRow(WebGUI::International::get(1,$namespace), - WebGUI::Form::groupList("groupToApprove",$data{groupToApprove})); - $output .= tableFormRow(WebGUI::International::get(2,$namespace), - WebGUI::Form::groupList("groupToContribute",$data{groupToContribute})); - $output .= tableFormRow(WebGUI::International::get(6,$namespace),WebGUI::Form::text("submissionsPerPage",20,2,$data{submissionsPerPage})); - %hash = ("Approved"=>WebGUI::International::get(7,$namespace),"Denied"=>WebGUI::International::get(8,$namespace),"Pending"=>WebGUI::International::get(9,$namespace)); - $array[0] = $data{defaultStatus}; - $output .= tableFormRow(WebGUI::International::get(10,$namespace),WebGUI::Form::selectList("defaultStatus",\%hash,\@array,1)); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_editSave { - if (WebGUI::Privilege::canEditPage()) { - update(); - WebGUI::SQL->write("update UserSubmission set groupToContribute=$session{form}{groupToContribute}, groupToApprove=$session{form}{groupToApprove}, submissionsPerPage=$session{form}{submissionsPerPage}, defaultStatus='$session{form}{defaultStatus}' where widgetId=$session{form}{wid}"); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_editSubmission { - my ($output, %submission, $owner); - tie %submission, 'Tie::CPHash'; - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId='$session{form}{sid}'"); - $output = '

'.WebGUI::International::get(19,$namespace).'

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("sid",$session{form}{sid}); - $output .= WebGUI::Form::hidden("func","editSubmissionSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(35,$namespace),WebGUI::Form::text("title",20,128,$submission{title})); - $output .= tableFormRow(WebGUI::International::get(31,$namespace),WebGUI::Form::textArea("content",$submission{content},50,10,1)); - if ($submission{image} ne "") { - $output .= tableFormRow(WebGUI::International::get(32,$namespace),''.WebGUI::International::get(36,$namespace).''); - } else { - $output .= tableFormRow(WebGUI::International::get(32,$namespace),WebGUI::Form::file("image")); - } - if ($submission{attachment} ne "") { - $output .= tableFormRow(WebGUI::International::get(33,$namespace),''.WebGUI::International::get(36,$namespace).''); - } else { - $output .= tableFormRow(WebGUI::International::get(33,$namespace),WebGUI::Form::file("attachment")); - } - $output .= tableFormRow(WebGUI::International::get(34,$namespace),WebGUI::Form::checkbox("convertCarriageReturns",1,$submission{convertCarriageReturns}).' (uncheck if you\'re writing an HTML submission)'); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_editSubmissionSave { - my ($sqlAdd,$owner,%userSubmission,$image,$attachment,$title); - ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); - if ($owner == $session{user}{userId}) { - %userSubmission = getProperties($namespace,$session{form}{wid}); - $image = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); - $image->save("image"); - if ($image->getFilename ne "") { - $sqlAdd = 'image='.quote($image->getFilename).', '; - } - $attachment = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); - $attachment->save("attachment"); - if ($attachment->getFilename ne "") { - $sqlAdd .= 'attachment='.quote($attachment->getFilename).', '; - } - if ($session{form}{title} ne "") { - $title = $session{form}{title}; - } else { - $title = WebGUI::International::get(16,$namespace); - } - WebGUI::SQL->write("update UserSubmission_submission set dateSubmitted=".time(). - ", convertCarriageReturns='$session{form}{convertCarriageReturns}', title=".quote($title). - ", content=".quote($session{form}{content}).", ".$sqlAdd. - " status='$userSubmission{defaultStatus}' where submissionId=$session{form}{sid}"); - if ($userSubmission{defaultStatus} ne "Approved") { - WebGUI::MessageLog::addEntry('',$userSubmission{groupToApprove}, - WebGUI::URL::page('func=viewSubmission&wid='.$session{form}{wid}.'&sid='. - $session{form}{sid}),3,$namespace); - } - return www_viewSubmission(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_view { - my (%data, @submission, $output, $sth, @row, $i, $p); - tie %data, 'Tie::CPHash'; - %data = getProperties($namespace,$_[0]); - if (%data) { - if ($data{displayTitle} == 1) { - $output = "

".$data{title}."

"; - } - if ($data{description} ne "") { - $output .= $data{description}.'

'; - } - if ($data{processMacros}) { - $output = WebGUI::Macro::process($output); - } - $sth = WebGUI::SQL->read("select title,submissionId,dateSubmitted,username,userId from UserSubmission_submission where widgetId='$_[0]' and status='Approved' order by dateSubmitted desc"); - while (@submission = $sth->array) { - $submission[0] = WebGUI::HTML::filter($submission[0],'all'); - $row[$i] = ''.$submission[0]. - ''.epochToHuman($submission[2],"%M/%D/%y"). - ''.$submission[3].''; - $i++; - } - $sth->finish; - $output .= ''. - '
'.WebGUI::International::get(20,$namespace).'
'; - $p = WebGUI::Paginator->new(WebGUI::URL::page(),\@row,$data{submissionsPerPage}); - $output .= ''; - $output .= ''; - $output .= $p->getPage($session{form}{pn}); - $output .= '
'.WebGUI::International::get(99). - ''.WebGUI::International::get(13,$namespace). - ''.WebGUI::International::get(21,$namespace).'
'; - $output .= $p->getBarTraditional($session{form}{pn}); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_viewSubmission { - my ($output, %submission, $file); - tie %submission, 'Tie::CPHash'; - %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); - $submission{title} = WebGUI::HTML::filter($submission{title},'all'); - $submission{content} = WebGUI::HTML::filter($submission{content},$session{setting}{filterContributedHTML}); - $output = "

".$submission{title}."

"; - $output .= ''; - $output .= '
'; - #---header - $output .= ''.WebGUI::International::get(22,$namespace).' '.$submission{username}.'
'; - $output .= ''.WebGUI::International::get(23,$namespace).' '.epochToHuman($submission{dateSubmitted},"%w, %c %D, %y at %H:%n%p"); - $output .= '
'; - #---menu - $output .= ''.WebGUI::International::get(28,$namespace).'
'; - if ($submission{userId} == $session{user}{userId}) { - $output .= ''.WebGUI::International::get(37,$namespace).'
'; - $output .= ''.WebGUI::International::get(27,$namespace).'
'; - } - if ($submission{status} eq "Pending" && (WebGUI::Privilege::isInGroup(3,$session{user}{userId}) || WebGUI::Privilege::isInGroup(4,$session{user}{userId}))) { - $output .= ''. - WebGUI::International::get(24,$namespace).'
'; - $output .= ''. - WebGUI::International::get(25,$namespace).'
'; - $output .= ''. - WebGUI::International::get(26,$namespace).'
'; - } - $output .= '
'; - #---content - if ($submission{image} ne "") { - $file = WebGUI::Attachment->new($submission{image},$session{form}{wid},$session{form}{sid}); - $output .= '

'; - } - if ($submission{convertCarriageReturns}) { - $submission{content} =~ s/\n/\/g; - } - $output .= $submission{content}.'

'; - if ($submission{attachment} ne "") { - $output .= attachmentBox($submission{attachment},$session{form}{wid},$session{form}{sid}); - } - $output .= '

'; - return $output; -} - - - -1; - diff --git a/lib/WebGUI/Wobject/UserSubmission.pm b/lib/WebGUI/Wobject/UserSubmission.pm new file mode 100644 index 000000000..b4c1fa5f0 --- /dev/null +++ b/lib/WebGUI/Wobject/UserSubmission.pm @@ -0,0 +1,386 @@ +package WebGUI::Wobject::UserSubmission; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use Tie::CPHash; +use WebGUI::Attachment; +use WebGUI::DateTime; +use WebGUI::HTML; +use WebGUI::HTMLForm; +use WebGUI::Icon; +use WebGUI::International; +use WebGUI::MessageLog; +use WebGUI::Operation; +use WebGUI::Paginator; +use WebGUI::Privilege; +use WebGUI::Session; +use WebGUI::SQL; +use WebGUI::URL; +use WebGUI::Utility; +use WebGUI::Wobject; + +our @ISA = qw(WebGUI::Wobject); +our $namespace = "UserSubmission"; +our $name = WebGUI::International::get(29,$namespace); + +#------------------------------------------------------------------- +sub duplicate { + my ($sth, $file, @row, $newSubmissionId, $w); + $w = $_[0]->SUPER::duplicate($_[1]); + $w = WebGUI::Wobject::DownloadManager->new({wobjectId=>$w,namespace=>$namespace}); + $w->set({ + groupToContribute=>$_[0]->get("groupToContribute"), + submissionsPerPage=>$_[0]->get("submissionsPerPage"), + defaultStatus=>$_[0]->get("defaultStatus"), + groupToApprove=>$_[0]->get("groupToApprove") + }); + $sth = WebGUI::SQL->read("select * from UserSubmission_submission where wobjectId=".$_[0]->get("wobjectId")); + while (@row = $sth->array) { + $newSubmissionId = getNextId("submissionId"); + $file = WebGUI::Attachment->new($row[8],$_[0]->get("wobjectId"),$row[1]); + $file->copy($w->get("wobjectId"),$newSubmissionId); + WebGUI::SQL->write("insert into UserSubmission_submission values (".$w->get("wobjectId").", $newSubmissionId, ". + quote($row[2]).", $row[3], ".quote($row[4]).", '$row[5]', ".quote($row[6]).", ". + quote($row[7]).", ".quote($row[8]).", '$row[9]', '$row[10]')"); + } + $sth->finish; +} + +#------------------------------------------------------------------- +sub new { + my ($self, $class, $property); + $class = shift; + $property = shift; + $self = WebGUI::Wobject->new($property); + bless $self, $class; +} + +#------------------------------------------------------------------- +sub purge { + WebGUI::SQL->write("delete from UserSubmission_submission where wobjectId=".$_[0]->get("wobjectId")); + $_[0]->SUPER::purge(); +} + +#------------------------------------------------------------------- +sub set { + $_[0]->SUPER::set($_[1],[qw(submissionsPerPage groupToContribute groupToApprove defaultStatus)]); +} + +#------------------------------------------------------------------- +sub www_approveSubmission { + my (%submission); + tie %submission, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { + %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); + WebGUI::SQL->write("update UserSubmission_submission set status='Approved' where submissionId=$session{form}{sid}"); + WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. + $session{form}{wid}.'&sid='.$session{form}{sid}),4,$namespace); + WebGUI::MessageLog::completeEntry($session{form}{mlog}); + return WebGUI::Operation::www_viewMessageLog(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_copy { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->duplicate; + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteAttachment { + my ($owner); + ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); + if ($owner == $session{user}{userId}) { + WebGUI::SQL->write("update UserSubmission_submission set attachment='' where submissionId=$session{form}{sid}"); + return $_[0]->www_editSubmission(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteImage { + my ($owner); + ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); + if ($owner == $session{user}{userId}) { + WebGUI::SQL->write("update UserSubmission_submission set image='' where submissionId=$session{form}{sid}"); + return $_[0]->www_editSubmission(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteSubmission { + my ($output, $owner); + ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); + if ($owner == $session{user}{userId}) { + $output = '

'.WebGUI::International::get(42).'

'; + $output .= WebGUI::International::get(17,$namespace).'

'; + $output .= '

'.WebGUI::International::get(44).''; + $output .= '   '.WebGUI::International::get(45).'
'; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteSubmissionConfirm { + my ($output, $owner, $file); + ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId=$session{form}{sid}"); + if ($owner == $session{user}{userId}) { + WebGUI::SQL->write("delete from UserSubmission_submission where submissionId=$session{form}{sid}"); + $file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); + $file->deleteNode; + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_denySubmission { + my (%submission); + tie %submission, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4,$session{user}{userId}) || WebGUI::Privilege::isInGroup(3,$session{user}{userId})) { + %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); + WebGUI::SQL->write("update UserSubmission_submission set status='Denied' where submissionId=$session{form}{sid}"); + WebGUI::MessageLog::addEntry($submission{userId},'',WebGUI::URL::page('func=viewSubmission&wid='. + $session{form}{wid}.'&sid='.$session{form}{sid}),5,$namespace); + WebGUI::MessageLog::completeEntry($session{form}{mlog}); + return WebGUI::Operation::www_viewMessageLog(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_edit { + my ($output, %hash, $f, $defaultStatus, $submissionsPerPage, $groupToApprove); + tie %hash, 'Tie::IxHash'; + $groupToApprove = $_[0]->get("groupToApprove") || 4; + $submissionsPerPage = $_[0]->get("submissionsPerPage") || 50; + $defaultStatus = $_[0]->get("defaultStatus") || "Approved"; + if (WebGUI::Privilege::canEditPage()) { + $output = helpIcon(1,$namespace); + $output .= '

'.WebGUI::International::get(18,$namespace).'

'; + $f = WebGUI::HTMLForm->new; + $f->group("groupToApprove",WebGUI::International::get(1,$namespace),[$groupToApprove]); + $f->group("groupToContribute",WebGUI::International::get(2,$namespace),[$_[0]->get("groupToContribute")]); + $f->integer("submissionsPerPage",WebGUI::International::get(6,$namespace),$submissionsPerPage); + %hash = ("Approved"=>WebGUI::International::get(7,$namespace), + "Denied"=>WebGUI::International::get(8,$namespace), + "Pending"=>WebGUI::International::get(9,$namespace)); + $f->select("defaultStatus",\%hash,WebGUI::International::get(10,$namespace),[$defaultStatus]); + $output .= $_[0]->SUPER::www_edit($f->printRowsOnly); + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editSave { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->SUPER::www_editSave(); + $_[0]->set({ + submissionsPerPage=>$session{form}{submissionsPerPage}, + groupToContribute=>$session{form}{groupToContribute}, + groupToApprove=>$session{form}{groupToApprove}, + defaultStatus=>$session{form}{defaultStatus} + }); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editSubmission { + my ($output, %submission, $f, @submission, $sth); + tie %submission, 'Tie::CPHash'; + %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId='$session{form}{sid}'"); + if ($session{form}{sid} eq "new") { + $submission{convertCarriageReturns} = 1; + $submission{userId} = $session{user}{userId}; + } + if ($submission{userId} == $session{user}{userId}) { + $output = '

'.WebGUI::International::get(19,$namespace).'

'; + $f = WebGUI::HTMLForm->new; + $f->hidden("wid",$session{form}{wid}); + $f->hidden("sid",$session{form}{sid}); + $f->hidden("func","editSubmissionSave"); + $f->text("title",WebGUI::International::get(35,$namespace),$submission{title}); + $f->HTMLArea("content",WebGUI::International::get(31,$namespace),$submission{content}); + if ($submission{image} ne "") { + $f->readOnly('' + .WebGUI::International::get(391).'',WebGUI::International::get(32,$namespace)); + } else { + $f->file("image",WebGUI::International::get(32,$namespace)); + } + if ($submission{attachment} ne "") { + $f->readOnly('' + .WebGUI::International::get(391).'',WebGUI::International::get(33,$namespace)); + } else { + $f->file("attachment",WebGUI::International::get(33,$namespace)); + } + $f->yesNo("convertCarriageReturns",WebGUI::International::get(34,$namespace),$submission{convertCarriageReturns}, + '','   '.WebGUI::International::get(38,$namespace)); + $f->submit; + $output .= $f->print; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } + return $output; +} + +#------------------------------------------------------------------- +sub www_editSubmissionSave { + my ($sqlAdd,$owner,$image,$attachment,$title); + ($owner) = WebGUI::SQL->quickArray("select userId from UserSubmission_submission where submissionId='$session{form}{sid}'"); + if ($owner == $session{user}{userId} || $session{form}{sid} eq "new") { + if ($session{form}{sid} eq "new") { + $session{form}{sid} = getNextId("submissionId"); + WebGUI::SQL->write("insert into UserSubmission_submission (wobjectId,submissionId,userId,username) + values (".$_[0]->get("wobjectId").",$session{form}{sid},$session{user}{userId},".quote($session{user}{username}).")"); + } + $image = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); + $image->save("image"); + if ($image->getFilename ne "") { + $sqlAdd = 'image='.quote($image->getFilename).', '; + } + $attachment = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{sid}); + $attachment->save("attachment"); + if ($attachment->getFilename ne "") { + $sqlAdd .= 'attachment='.quote($attachment->getFilename).', '; + } + if ($session{form}{title} ne "") { + $title = $session{form}{title}; + } else { + $title = WebGUI::International::get(16,$namespace); + } + WebGUI::SQL->write("update UserSubmission_submission set + dateSubmitted=".time().", + convertCarriageReturns=$session{form}{convertCarriageReturns}, + title=".quote($title).", + content=".quote($session{form}{content}).", + ".$sqlAdd." + status='".$_[0]->get("defaultStatus")."' + where submissionId=$session{form}{sid}"); + if ($_[0]->get("defaultStatus") ne "Approved") { + WebGUI::MessageLog::addEntry('',$_[0]->get("groupToApprove"), + WebGUI::URL::page('func=viewSubmission&wid='.$_[0]->get("wobjectId").'&sid='. + $session{form}{sid}),3,$namespace); + } + return $_[0]->www_viewSubmission(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_view { + my (@submission, $output, $sth, @row, $i, $p); + $output = $_[0]->displayTitle; + $output .= $_[0]->description; + $output .= $_[0]->processMacros($output); + $sth = WebGUI::SQL->read("select title,submissionId,dateSubmitted,username,userId from UserSubmission_submission + where wobjectId=".$_[0]->get("wobjectId")." and status='Approved' order by dateSubmitted desc"); + while (@submission = $sth->array) { + $submission[0] = WebGUI::HTML::filter($submission[0],'all'); + $row[$i] = ''.$submission[0]. + ''.epochToHuman($submission[2],"%z"). + ''.$submission[3].''; + $i++; + } + $sth->finish; + $output .= ''. + '
'.WebGUI::International::get(20,$namespace).'
'; + $p = WebGUI::Paginator->new(WebGUI::URL::page(),\@row,$_[0]->get("submissionsPerPage")); + $output .= ''; + $output .= ''; + $output .= $p->getPage($session{form}{pn}); + $output .= '
'.WebGUI::International::get(99). + ''.WebGUI::International::get(13,$namespace). + ''.WebGUI::International::get(21,$namespace).'
'; + $output .= $p->getBarTraditional($session{form}{pn}); + return $output; +} + +#------------------------------------------------------------------- +sub www_viewSubmission { + my ($output, %submission, $file); + tie %submission, 'Tie::CPHash'; + %submission = WebGUI::SQL->quickHash("select * from UserSubmission_submission where submissionId=$session{form}{sid}"); + $submission{title} = WebGUI::HTML::filter($submission{title},'all'); + $submission{content} = WebGUI::HTML::filter($submission{content},$session{setting}{filterContributedHTML}); + $output = "

".$submission{title}."

"; + $output .= ''; + $output .= '
'; + #---header + $output .= ''.WebGUI::International::get(22,$namespace).' '.$submission{username}.'
'; + $output .= ''.WebGUI::International::get(23,$namespace).' '.epochToHuman($submission{dateSubmitted},"%z %Z")."
"; + $output .= ''.WebGUI::International::get(14,$namespace).': '.$submission{status}; + $output .= '
'; + #---menu + $output .= ''.WebGUI::International::get(28,$namespace).'
'; + if ($submission{userId} == $session{user}{userId}) { + $output .= ''.WebGUI::International::get(37,$namespace).'
'; + $output .= ''.WebGUI::International::get(27,$namespace).'
'; + } + if ($submission{status} eq "Pending" && WebGUI::Privilege::isInGroup($_[0]->get("groupToApprove"),$session{user}{userId})) { + $output .= ''. + WebGUI::International::get(24,$namespace).'
'; + $output .= ''. + WebGUI::International::get(25,$namespace).'
'; + $output .= ''. + WebGUI::International::get(26,$namespace).'
'; + } + $output .= '
'; + #---content + if ($submission{image} ne "") { + $file = WebGUI::Attachment->new($submission{image},$session{form}{wid},$session{form}{sid}); + $output .= '

'; + } + if ($submission{convertCarriageReturns}) { + $submission{content} =~ s/\n/\/g; + } + $output .= $submission{content}.'

'; + if ($submission{attachment} ne "") { + $file = WebGUI::Attachment->new($submission{attachment},$session{form}{wid},$session{form}{sid}); + $output .= $file->box; + } + $output .= '

'; + return $output; +} + + + +1; +