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 .= '
| '.$data.' |
';
- ($data) = WebGUI::SQL->quickArray("select count(*) from widget");
+ ($data) = WebGUI::SQL->quickArray("select count(*) from wobject");
$data--;
$output .= '| '.$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 .= ' -
';
- }
- 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 .= '
';
+ 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 .= '
';
+ }
+ if ($_[0]->get("description") ne "") {
+ $output .= ' - '.$_[0]->get("description");
+ }
+ return $_[0]->processMacros($output);
+}
+
+
+1;
+