From 842a0eb9db5f36082e4f48ba0095b5d20046e3c8 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 13 May 2002 23:20:16 +0000 Subject: [PATCH] Added the wobject superclass and the first wobject "Item". --- lib/WebGUI/Attachment.pm | 1 + lib/WebGUI/HTMLForm.pm | 2 +- lib/WebGUI/Icon.pm | 2 +- lib/WebGUI/Operation/Page.pm | 12 +- lib/WebGUI/Operation/Search.pm | 6 +- lib/WebGUI/Operation/Statistics.pm | 2 +- lib/WebGUI/Operation/Trash.pm | 17 +- lib/WebGUI/SQL.pm | 27 +- lib/WebGUI/Widget/Item.pm | 201 --------------- lib/WebGUI/Wobject.pm | 389 +++++++++++++++++++++++++++++ lib/WebGUI/Wobject/Item.pm | 148 +++++++++++ 11 files changed, 585 insertions(+), 222 deletions(-) delete mode 100644 lib/WebGUI/Widget/Item.pm create mode 100644 lib/WebGUI/Wobject.pm create mode 100644 lib/WebGUI/Wobject/Item.pm diff --git a/lib/WebGUI/Attachment.pm b/lib/WebGUI/Attachment.pm index ef88db152..9892879d9 100644 --- a/lib/WebGUI/Attachment.pm +++ b/lib/WebGUI/Attachment.pm @@ -103,6 +103,7 @@ sub _createThumbnail { sub copy { my ($a, $b, $newNode); $newNode = WebGUI::Node->new($_[1],$_[2]); + $newNode->create; $a = FileHandle->new($_[0]->getPath,"r"); $b = FileHandle->new(">".$newNode->getPath.'/'.$_[0]->getFilename); if (defined $a) { diff --git a/lib/WebGUI/HTMLForm.pm b/lib/WebGUI/HTMLForm.pm index 3bd0a6896..863b671ac 100644 --- a/lib/WebGUI/HTMLForm.pm +++ b/lib/WebGUI/HTMLForm.pm @@ -1123,7 +1123,7 @@ sub url { $extras = shift; $subtext = shift; $size = shift || $session{setting}{textBoxSize} || 30; - $output = ''; $output .= ''; diff --git a/lib/WebGUI/Icon.pm b/lib/WebGUI/Icon.pm index 2fda5f5c9..61af04992 100644 --- a/lib/WebGUI/Icon.pm +++ b/lib/WebGUI/Icon.pm @@ -21,7 +21,7 @@ use WebGUI::URL; our @ISA = qw(Exporter); our @EXPORT = qw(&helpIcon &becomeIcon &cutIcon ©Icon &deleteIcon &editIcon &moveUpIcon &moveDownIcon - &moveTopIcon &moveBottomIcon &viewIcon); + &pageIcon &moveTopIcon &moveBottomIcon &viewIcon); =head1 NAME diff --git a/lib/WebGUI/Operation/Page.pm b/lib/WebGUI/Operation/Page.pm index fc9c58686..394a3be04 100644 --- a/lib/WebGUI/Operation/Page.pm +++ b/lib/WebGUI/Operation/Page.pm @@ -60,9 +60,9 @@ sub _reorderPages { #------------------------------------------------------------------- sub _traversePageTree { - my ($a, $b, %page, %widget, $output, $depth, $i, $spacer); + my ($a, $b, %page, %wobject, $output, $depth, $i, $spacer); tie %page, 'Tie::CPHash'; - tie %widget, 'Tie::CPHash'; + tie %wobject, 'Tie::CPHash'; $spacer = ''; for ($i=1;$i<=$_[1];$i++) { $depth .= $spacer; @@ -71,11 +71,11 @@ sub _traversePageTree { while (%page = $a->hash) { $output .= $depth.''. ' '.$page{title}.'
'; - $b = WebGUI::SQL->read("select * from widget where pageId=$page{pageId}"); - while (%widget = $b->hash) { + $b = WebGUI::SQL->read("select * from wobject where pageId=$page{pageId}"); + while (%wobject = $b->hash) { $output .= $depth.$spacer. - ' '. - $widget{title}.'
'; + ' '. + $wobject{title}.'
'; } $b->finish; $output .= _traversePageTree($page{pageId},$_[1]+1); diff --git a/lib/WebGUI/Operation/Search.pm b/lib/WebGUI/Operation/Search.pm index ba7d89fe2..e6127abd5 100644 --- a/lib/WebGUI/Operation/Search.pm +++ b/lib/WebGUI/Operation/Search.pm @@ -47,17 +47,17 @@ sub www_search { $result{$data[0]} += 1; } $sth->finish; - $sth = WebGUI::SQL->read("select pageId from widget where title like '%".$term."%' and pageId > 25"); + $sth = WebGUI::SQL->read("select pageId from wobject where title like '%".$term."%' and pageId > 25"); while (@data = $sth->array) { $result{$data[0]} += 5; } $sth->finish; - $sth = WebGUI::SQL->read("select pageId from widget where description like '%".$term."%' and pageId > 25"); + $sth = WebGUI::SQL->read("select pageId from wobject where description like '%".$term."%' and pageId > 25"); while (@data = $sth->array) { $result{$data[0]} += 2; } $sth->finish; - $sth = WebGUI::SQL->read("select widget.pageId from Article,widget where Article.widgetId=widget.widgetId and Article.body like '%".$term."%'"); + $sth = WebGUI::SQL->read("select wobject.pageId from Article,wobject where Article.wobjectId=wobject.wobjectId and Article.body like '%".$term."%'"); while (@data = $sth->array) { $result{$data[0]} += 2; } diff --git a/lib/WebGUI/Operation/Statistics.pm b/lib/WebGUI/Operation/Statistics.pm index aff5e4456..4c292d57b 100644 --- a/lib/WebGUI/Operation/Statistics.pm +++ b/lib/WebGUI/Operation/Statistics.pm @@ -127,7 +127,7 @@ sub www_viewStatistics { ($data) = WebGUI::SQL->quickArray("select count(*) from page where parentId>25"); $data++; $output .= ''.WebGUI::International::get(147).''.$data.''; - ($data) = WebGUI::SQL->quickArray("select count(*) from widget"); + ($data) = WebGUI::SQL->quickArray("select count(*) from wobject"); $data--; $output .= ''.WebGUI::International::get(148).''.$data.''; ($data) = WebGUI::SQL->quickArray("select count(*) from style where styleId>25"); diff --git a/lib/WebGUI/Operation/Trash.pm b/lib/WebGUI/Operation/Trash.pm index f0bf279d4..11e7bbb9d 100644 --- a/lib/WebGUI/Operation/Trash.pm +++ b/lib/WebGUI/Operation/Trash.pm @@ -22,12 +22,13 @@ our @ISA = qw(Exporter); our @EXPORT = qw(&www_purgeTrash &www_purgeTrashConfirm); #------------------------------------------------------------------- -sub _purgeWidgets { - my ($b, $widgetId, $widgetType, $func); - $b = WebGUI::SQL->read("select widgetId, namespace from widget where pageId=$_[0]"); - while (($widgetId,$widgetType) = $b->array) { - $func = "WebGUI::Widget::".$widgetType."::purge"; - &$func($widgetId); +sub _purgeWobjects { + my ($b, $wobjectId, $namespace, $w, $cmd); + $b = WebGUI::SQL->read("select wobjectId, namespace from wobject where pageId=$_[0]"); + while (($wobjectId,$namespace) = $b->array) { + $cmd = "WebGUI::Wobject::".$namespace; + $w = $cmd->new({wobjectId=>$wobjectId,namespace=>$namespace}); + $w->purge; } $b->finish; } @@ -38,7 +39,7 @@ sub _recursePageTree { $a = WebGUI::SQL->read("select pageId from page where parentId=$_[0]"); while (($pageId) = $a->array) { _recursePageTree($pageId); - _purgeWidgets($pageId); + _purgeWobjects($pageId); WebGUI::SQL->write("delete from page where pageId=$pageId"); } $a->finish; @@ -65,7 +66,7 @@ sub www_purgeTrash { sub www_purgeTrashConfirm { if (WebGUI::Privilege::isInGroup(3)) { _recursePageTree(3); - _purgeWidgets(3); + _purgeWobjects(3); return ""; } else { return WebGUI::Privilege::adminOnly(); diff --git a/lib/WebGUI/SQL.pm b/lib/WebGUI/SQL.pm index cc2e557c2..e6aa0168b 100644 --- a/lib/WebGUI/SQL.pm +++ b/lib/WebGUI/SQL.pm @@ -47,10 +47,11 @@ our @EXPORT = qw("e &getNextId); $hashRef = WebGUI::SQL->buildHashRef($sql); @arr = WebGUI::SQL->quickArray($sql); %hash = WebGUI::SQL->quickHash($sql); + $hashRef = WebGUI::SQL->quickHashRef($sql); WebGUI::SQL->write($sql); - $id = getNextId("widgetId"); + $id = getNextId("wobjectId"); $string = quote($string); =head1 DESCRIPTION @@ -355,6 +356,30 @@ sub quickHash { } } +#------------------------------------------------------------------- + +=head2 quickHashRef ( sql [, dbh ] ) + + Executes a query and returns a single row of data as a hash + reference. + +=item sql + + An SQL query. + +=item dbh + + By default this method uses the WebGUI database handler. However, + you may choose to pass in your own if you wish. + +=cut + +sub quickHashRef { + my ($sth, %hash); + tie %hash, "Tie::CPHash"; + %hash = $_[0]->quickHash($_[1],$_[2]); + return \%hash; +} #------------------------------------------------------------------- diff --git a/lib/WebGUI/Widget/Item.pm b/lib/WebGUI/Widget/Item.pm deleted file mode 100644 index f26d3489e..000000000 --- a/lib/WebGUI/Widget/Item.pm +++ /dev/null @@ -1,201 +0,0 @@ -package WebGUI::Widget::Item; - -our $namespace = "Item"; - -#------------------------------------------------------------------- -# 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::Form; -use WebGUI::International; -use WebGUI::Privilege; -use WebGUI::Session; -use WebGUI::Shortcut; -use WebGUI::SQL; -use WebGUI::URL; -use WebGUI::Widget; - -#------------------------------------------------------------------- -sub duplicate { - my (%data, $newWidgetId, $pageId, $file); - 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}); - $file = WebGUI::Attachment->new($data{attachment},$_[0]); - $file->copy($newWidgetId); - WebGUI::SQL->write("insert into Item values ($newWidgetId, ". - quote($data{description}).", ".quote($data{linkURL}).", ".quote($data{attachment}).")"); -} - -#------------------------------------------------------------------- -sub purge { - purgeWidget($_[0],$_[1],$namespace); -} - -#------------------------------------------------------------------- -sub widgetName { - return WebGUI::International::get(4,$namespace); -} - -#------------------------------------------------------------------- -sub www_add { - my ($output, %hash); - tie %hash,'Tie::IxHash'; - if (WebGUI::Privilege::canEditPage()) { - $output = helpLink(1,$namespace); - $output .= '

'.WebGUI::International::get(4,$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,30,widgetName())); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1,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",'')); - $output .= tableFormRow(WebGUI::International::get(1,$namespace),WebGUI::Form::text("linkURL",20,2048)); - $output .= tableFormRow(WebGUI::International::get(2,$namespace),WebGUI::Form::file("attachment")); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_addSave { - my ($widgetId, $attachment); - 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}); - $attachment = WebGUI::Attachment->new("",$widgetId); - $attachment->save("attachment"); - WebGUI::SQL->write("insert into Item values ($widgetId, ".quote($session{form}{description}).", ".quote($session{form}{linkURL}).", ".quote($attachment->getFilename).")"); - return ""; - } 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 { - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update Item set attachment='' where widgetId=$session{form}{wid}"); - return www_edit(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_edit { - my ($output, %data, %hash, @array); - 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(4,$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,30,$data{title})); - $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::text("linkURL",20,2048,$data{linkURL})); - if ($data{attachment} ne "") { - $output .= tableFormRow(WebGUI::International::get(2,$namespace),''.WebGUI::International::get(3,$namespace).''); - } else { - $output .= tableFormRow(WebGUI::International::get(2,$namespace), - WebGUI::Form::file("attachment")); - } - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_editSave { - my ($attachment, $sqlAdd); - if (WebGUI::Privilege::canEditPage()) { - update(); - $attachment = WebGUI::Attachment->new("",$session{form}{wid}); - $attachment->save("attachment"); - if ($attachment->getFilename ne "") { - $sqlAdd = ', attachment='.quote($attachment->getFilename); - } - WebGUI::SQL->write("update Item set description=".quote($session{form}{description}). - ", linkURL=".quote($session{form}{linkURL}). - $sqlAdd." where widgetId=$session{form}{wid}"); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_view { - my (%data, @test, $output, $file); - tie %data, 'Tie::CPHash'; - %data = getProperties($namespace,$_[0]); - if (defined %data) { - if ($data{linkURL} ne "") { - $output .= ''.$data{title}.''; - } else { - $output .= ''.$data{title}.''; - } - if ($data{attachment} ne "") { - $file = WebGUI::Attachment->new($data{attachment},$_[0]); - $output .= ' - '.
-				$data{attachment}.''; - } - if ($data{description} ne "") { - $output .= ' - '.$data{description}; - } - } - if ($data{processMacros} == 1) { - $output = WebGUI::Macro::process($output); - } - return $output; -} - - - - -1; - diff --git a/lib/WebGUI/Wobject.pm b/lib/WebGUI/Wobject.pm new file mode 100644 index 000000000..fc2156be1 --- /dev/null +++ b/lib/WebGUI/Wobject.pm @@ -0,0 +1,389 @@ +package WebGUI::Wobject; + +#------------------------------------------------------------------- +# 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 CGI::Carp qw(fatalsToBrowser); +use DBI; +use strict qw(subs vars); +use Tie::IxHash; +use WebGUI::DateTime; +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; + +#------------------------------------------------------------------- +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); +} + +#------------------------------------------------------------------- +sub _getPositions { + my (%hash); + tie %hash, "Tie::IxHash"; + %hash = WebGUI::Template::getPositions($session{page}{template}); + return \%hash; +} + +#------------------------------------------------------------------- + +=head2 duplicate ( [ pageId ] ) + + Duplicates this wobject with a new wobject ID. Returns the new + wobject Id. + + NOTE: This method is meant to be extended by all sub-classes. + +=item pageId + + If specified the wobject will be duplicated to this pageId, + otherwise it will be duplicated to the clipboard. + +=cut + +sub duplicate { + my ($pageId, $w); + $pageId = $_[1] || 2; + $w = WebGUI::Wobject->new({ + wobjectId => "new", + namespace => $_[0]->get("namespace") + }); + $w->set({ + pageId => $pageId, + title => $_[0]->get("title"), + description => $_[0]->get("description"), + displayTitle => $_[0]->get("displayTitle"), + processMacros => $_[0]->get("processMacros"), + startDate => $_[0]->get("startDate"), + endDate => $_[0]->get("startDate"), + templatePosition => $_[0]->get("templatePosition") + }); + return $w->get("wobjectId"); +} + +#------------------------------------------------------------------- + +=head2 get ( [ propertyName ] ) + + Returns a hash reference containing all of the properties of this + wobject instance. + +=item propertyName + + If an individual propertyName is specified, then only that + property value is returned as a scalar. + +=cut + +sub get { + if ($_[1] ne "") { + return $_[0]->{_property}{$_[1]}; + } else { + return $_[0]->{_property}; + } +} + +#------------------------------------------------------------------- + +sub inDateRange { + if ($_[0]->get("startDate") < time() && $_[0]->get("startDate") > time()) { + return 1; + } else { + return 0; + } +} + +#------------------------------------------------------------------- + +=head2 new ( hashRef ) + + Constructor. + + NOTE: This method is meant to be extended by all sub-classes. + +=item hashRef + + A hash reference containing at minimum "wobjectId" and "namespace" + and wobjectId may be set to "new" if you're creating a new + instance. This hash reference should be the one created by + WebGUI.pm and passed to the wobject subclass. + + NOTE: It may seem a little weird that the initial data for the + wobject instance is coming from WebGUI.pm, but this was done + to lessen database traffic thus increasing the speed of all + wobjects. + +=cut + +sub new { + bless {_property => $_[1] }, $_[0]; +} + +#------------------------------------------------------------------- + +sub processMacros { + if ($_[0]->get("processMacros")) { + return WebGUI::Macro::process($_[1]); + } else { + return $_[1]; + } +} + +#------------------------------------------------------------------- + +=head2 purge ( ) + + Removes this wobject from the database and all it's attachments + from the filesystem. + + NOTE: This method is meant to be extended by all sub-classes. + +=cut + +sub purge { + my ($node); + WebGUI::SQL->write("delete from ".$_[0]->get("namespace")." where wobjectId=".$_[0]->get("wobjectId")); + WebGUI::SQL->write("delete from wobject where wobjectId=".$_[0]->get("wobjectId")); + $node = WebGUI::Node->new($_[0]->get("wobjectId")); + $node->delete; +} + +#------------------------------------------------------------------- + +=head2 set ( [ hashRef ] ) + + Stores the values specified in hashRef to the database. + + NOTE: This method should be extended by all subclasses. + +=item hashRef + + A hash reference of the properties of this wobject instance. This + method will accept any name/value pair and associate it with this + wobject instance in memory, but will only store the following + fields to the database: + + title, displayTitle, description, processMacros, + pageId, templatePosition, startDate, endDate, sequenceNumber + +=cut + +sub set { + my ($key, $sql); + if ($_[0]->{_property}{wobjectId} eq "new") { + $_[0]->{_property}{wobjectId} = getNextId("widgetId"); + $_[0]->{_property}{pageId} = ${$_[1]}{pageId} || $session{page}{pageId}; + $_[0]->{_property}{sequenceNumber} = _getNextSequenceNumber($_[0]->{_property}{pageId}); + $_[0]->{_property}{addedBy} = $session{user}{userId}; + $_[0]->{_property}{dateAdded} = time(); + WebGUI::SQL->write("insert into wobject + (wobjectId, namespace, dateAdded, addedBy, sequenceNumber, pageId) + values ( + ".$_[0]->{_property}{wobjectId}.", + ".quote($_[0]->{_property}{namespace}).", + ".$_[0]->{_property}{dateAdded}.", + ".$_[0]->{_property}{addedBy}.", + ".$_[0]->{_property}{sequenceNumber}.", + ".$_[0]->{_property}{pageId}." + )"); + WebGUI::SQL->write("insert into ".$_[0]->{_property}{namespace}." (wobjectId) values (".$_[0]->{_property}{wobjectId}.")"); + } + $_[0]->{_property}{lastEdited} = time(); + $_[0]->{_property}{editedBy} = $session{user}{userId}; + $sql = "update wobject set"; + foreach $key (keys %{$_[1]}) { + $_[0]->{_property}{$key} = ${$_[1]}{$key}; + if (isIn($key, qw(title displayTitle description processMacros pageId templatePosition startDate endDate sequenceNumber))) { + $sql .= " ".$key."=".quote(${$_[1]}{$key}).","; + } + } + $sql .= " lastEdited=".$_[0]->{_property}{lastEdited}.", + editedBy=".$_[0]->{_property}{editedBy}." + where wobjectId=".$_[0]->{_property}{wobjectId}; + WebGUI::SQL->write($sql); +} + +#------------------------------------------------------------------- +sub www_cut { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->set({pageId=>2}); + _reorderWobjects($session{page}{pageId}); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_delete { + my ($output); + if (WebGUI::Privilege::canEditPage()) { + $output = helpIcon(14); + $output .= '

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

'; + $output .= WebGUI::International::get(43); + $output .= '

'; + $output .= '

'; + $output .= WebGUI::International::get(44); + $output .= ''; + $output .= '    '; + $output .= WebGUI::International::get(45); + $output .= '
'; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteConfirm { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->set({pageId=>3}); + _reorderWobjects($_[0]->get("pageId")); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_edit { + my ($f, $title, $templatePosition, $endDate); + $title = $_[0]->get("title") || $_[0]->get("namespace"); + $templatePosition = $_[0]->get("templatePosition") || 'A'; + $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->readOnly($_[0]->get("wobjectId"),WebGUI::International::get(499)); + $f->text("title",WebGUI::International::get(99),$title); + $f->yesNo("displayTitle",WebGUI::International::get(174),$_[0]->get("displayTitle")); + $f->yesNo("processMacros",WebGUI::International::get(175),$_[0]->get("processMacros")); + $f->select("templatePosition",_getPositions(),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; +} + +#------------------------------------------------------------------- +sub www_editSave { + my ($title, $templatePosition, $startDate, $endDate); + $title = $session{form}{title} || $_[0]->get("namespace"); + $templatePosition = $session{form}{templatePosition} || 'A'; + $startDate = setToEpoch($session{form}{startDate}) || setToEpoch(time()); + $endDate = setToEpoch($session{form}{endDate}) || setToEpoch(time()+315360000); + $_[0]->set({ + title=>$title, + displayTitle=>$session{form}{displayTitle}, + processMacros=>$session{form}{processMacros}, + templatePosition=>$templatePosition, + startDate=>$startDate, + endDate=>$endDate, + description=>$session{form}{description} + }); + return ""; +} + +#------------------------------------------------------------------- +sub www_moveBottom { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->set({sequenceNumber=>99999}); + _reorderWobjects($_[0]->get("pageId")); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +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(); + } +} + +#------------------------------------------------------------------- +sub www_moveTop { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->set({sequenceNumber=>0}); + _reorderWobjects($_[0]->get("pageId")); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +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(); + } +} + +#------------------------------------------------------------------- +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; diff --git a/lib/WebGUI/Wobject/Item.pm b/lib/WebGUI/Wobject/Item.pm new file mode 100644 index 000000000..4e18c1458 --- /dev/null +++ b/lib/WebGUI/Wobject/Item.pm @@ -0,0 +1,148 @@ +package WebGUI::Wobject::Item; + +#------------------------------------------------------------------- +# 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::HTMLForm; +use WebGUI::Icon; +use WebGUI::International; +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 = "Item"; +our $name = WebGUI::International::get(4,$namespace); + +#------------------------------------------------------------------- +sub duplicate { + my ($w, $f); + $w = $_[0]->SUPER::duplicate($_[1]); + $w = WebGUI::Wobject::Item->new({wobjectId=>$w,namespace=>$namespace}); + $w->set({ + linkURL=>$_[0]->get("linkURL"), + attachment=>$_[0]->get("attachment"), + }); + $f = WebGUI::Attachment->new($_[0]->get("attachment"),$_[0]->get("wobjectId")); + $f->copy($w->get("wobjectId")); +} + +#------------------------------------------------------------------- +sub new { + my ($self, $class, $property); + $class = shift; + $property = shift; + $self = WebGUI::Wobject->new($property); + bless $self, $class; +} + +#------------------------------------------------------------------- +sub set { + my ($key, $sql, @update, $i); + $_[0]->SUPER::set($_[1]); + foreach $key (keys %{$_[1]}) { + if (isIn($key, qw(linkURL attachment))) { + $update[$i] .= " ".$key."=".quote($_[1]->{$key}); + $i++; + } + } + WebGUI::SQL->write("update Item set".join(",",@update)." where wobjectId=".$_[0]->get("wobjectId")) if (@update); +} + +#------------------------------------------------------------------- +sub www_copy { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->duplicate; + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteAttachment { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->set({attachment=>''}); + return $_[0]->www_edit(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_edit { + my ($output, $f); + if (WebGUI::Privilege::canEditPage()) { + $output = helpIcon(1,$_[0]->get("namespace")); + $output .= '

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

'; + $f = WebGUI::HTMLForm->new; + $f->url("linkURL",WebGUI::International::get(1,$_[0]->get("namespace")),$_[0]->get("linkURL")); + if ($_[0]->get("attachment") eq "") { + $f->file("attachment",WebGUI::International::get(2,$_[0]->get("namespace"))) + } else { + $f->readOnly('' + .WebGUI::International::get(3,$namespace).'',WebGUI::International::get(2,$_[0]->get("namespace"))) + } + $output .= $_[0]->SUPER::www_edit($f->printRowsOnly); + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editSave { + my ($attachment); + if (WebGUI::Privilege::canEditPage()) { + $_[0]->SUPER::www_editSave(); + $attachment = WebGUI::Attachment->new("",$_[0]->get("wobjectId")); + $attachment->save("attachment"); + $_[0]->set({ + linkURL=>$session{form}{linkURL}, + attachment=>$attachment->getFilename + }); + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_view { + my (@test, $output, $file); + if ($_[0]->get("displayTitle")) { + $output = ''.$_[0]->get("title").''; + if ($_[0]->get("linkURL")) { + $output = ''.$output.''; + } + } + if ($_[0]->get("attachment") ne "") { + $file = WebGUI::Attachment->new($_[0]->get("attachment"),$_[0]->get("wobjectId")); + if ($_[0]->get("displayTitle")) { + $output .= ' - '; + } + $output .= ''.
+			$_[0]->get('; + } + if ($_[0]->get("description") ne "") { + $output .= ' - '.$_[0]->get("description"); + } + return $_[0]->processMacros($output); +} + + +1; +