package WebGUI::Wobject; =head1 LEGAL ------------------------------------------------------------------- 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 ------------------------------------------------------------------- =cut use CGI::Carp qw(fatalsToBrowser); use DBI; use strict qw(subs vars); use Tie::IxHash; use WebGUI::DateTime; use WebGUI::HTML; use WebGUI::HTMLForm; use WebGUI::Icon; use WebGUI::International; use WebGUI::Macro; use WebGUI::Node; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Template; use WebGUI::URL; use WebGUI::Utility; =head1 NAME Package WebGUI::Wobject =head1 SYNOPSIS use WebGUI::Wobject; our @ISA = qw(WebGUI::Wobject); See the subclasses in lib/WebGUI/Wobjects for details. =head1 DESCRIPTION An abstract class for all other wobjects to extend. =head1 METHODS These methods are available from this class: =cut #------------------------------------------------------------------- sub _reorderWobjects { my ($sth, $i, $wid); $sth = WebGUI::SQL->read("select wobjectId from wobject where pageId=$_[0] order by templatePosition,sequenceNumber"); while (($wid) = $sth->array) { $i++; WebGUI::SQL->write("update wobject set sequenceNumber='$i' where wobjectId=$wid"); } $sth->finish; } #------------------------------------------------------------------- sub _getNextSequenceNumber { my ($sequenceNumber); ($sequenceNumber) = WebGUI::SQL->quickArray("select max(sequenceNumber) from wobject where pageId='$_[0]'"); return ($sequenceNumber+1); } #------------------------------------------------------------------- =head2 description ( ) Returns this instance's description if it exists. =cut sub description { if ($_[0]->get("description")) { return $_[0]->get("description").'
'; } } #------------------------------------------------------------------- =head2 displayTitle ( ) Returns this instance's title if displayTitle is set to yes. =cut sub displayTitle { if ($_[0]->get("displayTitle")) { return "
'; $output .= '
'; return $output; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_deleteConfirm ( ) Moves this instance to the trash. =cut sub www_deleteConfirm { if (WebGUI::Privilege::canEditPage()) { $_[0]->set({pageId=>3}); _reorderWobjects($_[0]->get("pageId")); return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_edit ( formRows ) Displays the common properties of any/all wobjects. NOTE: This method should be extended by all wobjects. =item formRows The custom form rows from the wobject subclass edit page. =cut sub www_edit { my ($f, $displayTitle, $title, $templatePosition, $endDate); if ($_[0]->get("wobjectId") eq "new") { $displayTitle = 1; } else { $displayTitle = $_[0]->get("displayTitle"); } $title = $_[0]->get("title") || $_[0]->get("namespace"); $templatePosition = $_[0]->get("templatePosition") || '0'; $endDate = $_[0]->get("endDate") || (time()+315360000); $f = WebGUI::HTMLForm->new; $f->hidden("wid",$_[0]->get("wobjectId")); $f->hidden("namespace",$_[0]->get("namespace")) if ($_[0]->get("wobjectId") eq "new"); $f->hidden("func","editSave"); $f->submit if ($_[0]->get("wobjectId") ne "new"); $f->readOnly($_[0]->get("wobjectId"),WebGUI::International::get(499)); $f->text("title",WebGUI::International::get(99),$title); $f->yesNo("displayTitle",WebGUI::International::get(174),$displayTitle); $f->yesNo("processMacros",WebGUI::International::get(175),$_[0]->get("processMacros")); $f->select("templatePosition",WebGUI::Template::getPositions($session{page}{templateId}),WebGUI::International::get(363),[$templatePosition]); $f->date("startDate",WebGUI::International::get(497),$_[0]->get("startDate")); $f->date("endDate",WebGUI::International::get(498),$endDate); $f->HTMLArea("description",WebGUI::International::get(85),$_[0]->get("description")); $f->raw($_[1]); $f->submit; return $f->print; } #------------------------------------------------------------------- =head2 www_editSave ( ) Saves the default properties of any/all wobjects. NOTE: This method should be extended by all subclasses. =cut sub www_editSave { my ($title, $templatePosition, $startDate, $endDate); $title = $session{form}{title} || $_[0]->get("namespace"); $templatePosition = $session{form}{templatePosition} || '0'; $startDate = setToEpoch($session{form}{startDate}) || setToEpoch(time()); $endDate = setToEpoch($session{form}{endDate}) || setToEpoch(time()+315360000); $session{form}{description} = WebGUI::HTML::cleanSegment($session{form}{description}); $_[0]->set({ title=>$title, displayTitle=>$session{form}{displayTitle}, processMacros=>$session{form}{processMacros}, templatePosition=>$templatePosition, startDate=>$startDate, endDate=>$endDate, description=>$session{form}{description} }); return ""; } #------------------------------------------------------------------- =head2 www_moveBottom ( ) Moves this instance to the bottom of the page. =cut sub www_moveBottom { if (WebGUI::Privilege::canEditPage()) { $_[0]->set({sequenceNumber=>99999}); _reorderWobjects($_[0]->get("pageId")); return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_moveDown ( ) Moves this instance down one spot on the page. =cut sub www_moveDown { my ($wid, $thisSeq); if (WebGUI::Privilege::canEditPage()) { ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from wobject where wobjectId=".$_[0]->get("wobjectId")); ($wid) = WebGUI::SQL->quickArray("select wobjectId from wobject where pageId=".$_[0]->get("pageId") ." and sequenceNumber=".($thisSeq+1)); if ($wid ne "") { WebGUI::SQL->write("update wobject set sequenceNumber=sequenceNumber+1 where wobjectId=".$_[0]->get("wobjectId")); WebGUI::SQL->write("update wobject set sequenceNumber=sequenceNumber-1 where wobjectId=$wid"); _reorderWobjects($_[0]->get("pageId")); } return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_moveTop ( ) Moves this instance to the top of the page. =cut sub www_moveTop { if (WebGUI::Privilege::canEditPage()) { $_[0]->set({sequenceNumber=>0}); _reorderWobjects($_[0]->get("pageId")); return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_moveUp ( ) Moves this instance up one spot on the page. =cut sub www_moveUp { my ($wid, $thisSeq); if (WebGUI::Privilege::canEditPage()) { ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from wobject where wobjectId=".$_[0]->get("wobjectId")); ($wid) = WebGUI::SQL->quickArray("select wobjectId from wobject where pageId=".$_[0]->get("pageId") ." and sequenceNumber=".($thisSeq-1)); if ($wid ne "") { WebGUI::SQL->write("update wobject set sequenceNumber=sequenceNumber-1 where wobjectId=".$_[0]->get("wobjectId")); WebGUI::SQL->write("update wobject set sequenceNumber=sequenceNumber+1 where wobjectId=$wid"); _reorderWobjects($_[0]->get("pageId")); } return ""; } else { return WebGUI::Privilege::insufficient(); } } #------------------------------------------------------------------- =head2 www_paste ( ) Moves this instance from the clipboard to the current page. =cut sub www_paste { my ($output, $nextSeq); if (WebGUI::Privilege::canEditPage()) { ($nextSeq) = WebGUI::SQL->quickArray("select max(sequenceNumber) from wobject where pageId=$session{page}{pageId}"); $nextSeq += 1; $_[0]->set({sequenceNumber=>$nextSeq, pageId=>$session{page}{pageId}}); return ""; } else { return WebGUI::Privilege::insufficient(); } } 1;