diff --git a/lib/WebGUI/Collateral.pm b/lib/WebGUI/Collateral.pm
index 8c930a6ab..5bebf9707 100644
--- a/lib/WebGUI/Collateral.pm
+++ b/lib/WebGUI/Collateral.pm
@@ -1,673 +1,305 @@
-package WebGUI::Operation::Collateral;
+package WebGUI::Collateral;
-#-------------------------------------------------------------------
-# WebGUI is Copyright 2001-2003 Plain Black LLC.
-#-------------------------------------------------------------------
-# 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
-#-------------------------------------------------------------------
+=head1 LEGAL
+ -------------------------------------------------------------------
+ WebGUI is Copyright 2001-2003 Plain Black LLC.
+ -------------------------------------------------------------------
+ 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
+ -------------------------------------------------------------------
-# test for ImageMagick. if it's not installed set $hasImageMagick to 0,
-# if it is installed it will be set to 1
-my $hasImageMagick=1;
-eval " use Image::Magick; "; $hasImageMagick=0 if $@;
+=cut
-
-use Exporter;
-use strict;
-use WebGUI::Collateral;
-use WebGUI::CollateralFolder;
+use WebGUI::Attachment;
use WebGUI::DateTime;
-use WebGUI::HTMLForm;
-use WebGUI::Icon;
-use WebGUI::International;
-use WebGUI::Operation::Shared;
-use WebGUI::Paginator;
-use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
-use Tie::IxHash;
-use WebGUI::URL;
-use WebGUI::HTML;
+use WebGUI::Utility;
-our @ISA = qw(Exporter);
-our @EXPORT = qw(&www_editCollateral &www_editCollateralSave &www_deleteCollateral
- &www_deleteCollateralConfirm &www_listCollateral
- &www_deleteCollateralFile &www_editCollateralFolder &www_editCollateralFolderSave &www_deleteCollateralFolder
- &www_deleteCollateralFolderConfirm &www_emptyCollateralFolder &www_emptyCollateralFolderConfirm
- &www_htmlArealistCollateral &www_htmlAreaviewCollateral &www_htmlAreaUpload
- &www_htmlAreaDelete &www_htmlAreaCreateFolder);
+our @ISA = qw(WebGUI::Attachment);
+
+=head1 NAME
+
+Package WebGUI::Collateral
+
+=head1 DESCRIPTION
+
+Package to manipulate items in WebGUI's collateral manager.
+
+=head1 SYNOPSIS
+
+ use WebGUI::Collateral;
+
+ $collateral = WebGUI::Collateral->new(1234);
+
+ $collateral = WebGUI::Collateral->find("My Snippet");
+
+ $collateral->delete;
+ $collateral->deleteFile;
+ $collateral->get("parameters");
+ $collateral->set(\%hash);
+
+=head1 SEE ALSO
+
+This package is derived from WebGUI::Attachment. See that package for documentation of its methods.
+
+=head1 METHODS
+
+These methods are available from this class:
+
+=cut
#-------------------------------------------------------------------
-sub _submenu {
- my (%menu);
- tie %menu, 'Tie::IxHash';
- $menu{WebGUI::URL::page('op=editCollateralFolder&fid=new')} = WebGUI::International::get(758);
- $menu{WebGUI::URL::page('op=editCollateral&cid=new&type=image')} = WebGUI::International::get(761);
- $menu{WebGUI::URL::page('op=editCollateral&cid=new&type=file')} = WebGUI::International::get(762);
- $menu{WebGUI::URL::page('op=editCollateral&cid=new&type=snippet')} = WebGUI::International::get(763);
- if ($session{form}{op} eq "editCollateral" || $session{form}{op} eq "deleteCollateral") {
- $menu{WebGUI::URL::page('op=editCollateral&cid='.$session{form}{cid})} = WebGUI::International::get(764);
- $menu{WebGUI::URL::page('op=deleteCollateral&cid='.$session{form}{cid})} = WebGUI::International::get(765);
- }
- $menu{WebGUI::URL::page('op=editCollateralFolder')} = WebGUI::International::get(759);
- $menu{WebGUI::URL::page('op=emptyCollateralFolder')} = WebGUI::International::get(980);
- $menu{WebGUI::URL::page('op=deleteCollateralFolder')} = WebGUI::International::get(760);
- $menu{WebGUI::URL::page('op=listCollateral')} = WebGUI::International::get(766);
- return menuWrapper($_[0],\%menu);
-}
-
-#-------------------------------------------------------------------
-sub www_deleteCollateral {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my $output = '
'.WebGUI::International::get(42).'
';
- $output .= WebGUI::International::get(774).'';
- return _submenu($output);
-}
-
-#-------------------------------------------------------------------
-sub www_deleteCollateralConfirm {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my $collateral = WebGUI::Collateral->new($session{form}{cid});
- $collateral->delete;
- WebGUI::Session::deleteScratch("collateralPageNumber");
- return www_listCollateral();
-}
-
-#-------------------------------------------------------------------
-sub www_deleteCollateralFolder {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- return WebGUI::Privilege::vitalComponent() unless ($session{scratch}{collateralFolderId} > 999);
- my $output = ''.WebGUI::International::get(42).'
';
- $output .= WebGUI::International::get(775).'';
- return _submenu($output);
-}
-
-#-------------------------------------------------------------------
-sub www_deleteCollateralFolderConfirm {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- return WebGUI::Privilege::vitalComponent() unless ($session{scratch}{collateralFolderId} > 999);
- my $folders = WebGUI::CollateralFolder->getTree({-minimumFields => 1});
- if (my $deadFolder = $folders->{$session{scratch}{collateralFolderId}}) {
- my $parentId = $deadFolder->get("parentId");
- $deadFolder->recursiveDelete();
- WebGUI::Session::setScratch("collateralFolderId",$parentId);
+# extended only to save info to database
+sub createThumbnail {
+ $_[0]->SUPER::createThumbnail($_[1]);
+ if ($_[1] != $_[0]->get("thumbnailSize")) {
+ $_[0]->set({thumbnailSize=>$_[1]});
}
- return www_listCollateral();
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 delete ( )
+
+Delete's this collateral item.
+
+=cut
+
+sub delete {
+ $_[0]->deleteNode;
+ WebGUI::SQL->write("delete from collateral where collateralId=".$_[0]->get("collateralId"));
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 deleteFile ( )
+
+Deletes the file attached to this collateral item.
+
+=cut
+
+sub deleteFile {
+ $_[0]->SUPER::delete;
+ WebGUI::SQL->write("update collateral set filename='' where collateralId=".$_[0]->get("collateralId"));
+ $_[0]->{_properties}{filename}='';
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 find ( name )
+
+An alternative to the constructor "new", use find as a constructor by name rather than id.
+
+=over
+
+=item name
+
+The name of the collateral item you wish to instanciate.
+
+=back
+
+=cut
+
+sub find {
+ my ($collateralId) = WebGUI::SQL->quickArray("select collateralId from collateral where name=".quote($_[1]));
+ return WebGUI::Collateral->new($collateralId);
}
#-------------------------------------------------------------------
-sub www_emptyCollateralFolder {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- return WebGUI::Privilege::vitalComponent() unless ($session{scratch}{collateralFolderId} > 999);
- my $output = ''.WebGUI::International::get(42).'
';
- $output .= WebGUI::International::get(979).'';
- return _submenu($output);
-}
-#-------------------------------------------------------------------
-sub www_emptyCollateralFolderConfirm {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- return WebGUI::Privilege::vitalComponent() unless ($session{scratch}{collateralFolderId} > 999);
- my @collateralIds = WebGUI::SQL->buildArray("select collateralId from collateral where collateralFolderId=".$session{scratch}{collateralFolderId});
- WebGUI::Collateral->multiDelete(@collateralIds);
- return www_listCollateral();
-}
+=head2 get ( [ propertyName ] )
-#-------------------------------------------------------------------
-sub www_deleteCollateralFile {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my $collateral = WebGUI::Collateral->new($session{form}{cid});
- $collateral->deleteFile;
- return www_editCollateral($collateral);
-}
+Returns a hash reference containing all of the properties of this collateral item.
-#-------------------------------------------------------------------
-sub www_editCollateral {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my ($canEdit, $file, $folderId, $output, $f, $collateral, $image, $error, $x, $y);
- if ($session{form}{cid} eq "new") {
- $collateral->{collateralType} = $session{form}{type};
- $collateral->{collateralId} = "new";
- $collateral->{username} = $session{user}{username};
- $collateral->{userId} = $session{user}{userId};
- $collateral->{parameters} = 'border="0"' if ($session{form}{type} eq "image");
- $collateral->{thumbnailSize} = $session{setting}{thumbnailSize};
- } else {
- my $c = $_[1] || WebGUI::Collateral->new($session{form}{cid});
- $collateral = $c->get;
- }
- $canEdit = ($collateral->{userId} == $session{user}{userId} || WebGUI::Privilege::isInGroup(3));
- $folderId = $session{scratch}{collateralFolderId} || 0;
- $f = WebGUI::HTMLForm->new;
- $f->hidden("op","editCollateralSave");
- $f->hidden("collateralType",$collateral->{collateralType});
- $f->hidden("cid",$collateral->{collateralId});
- $f->readOnly(
- -label=>WebGUI::International::get(767),
- -value=>$collateral->{collateralId}
- );
- $f->readOnly(
- -label=>WebGUI::International::get(388),
- -value=>epochToHuman($collateral->{dateUploaded},"%z")
- );
- $f->readOnly(
- -label=>WebGUI::International::get(387),
- -value=>$collateral->{username}
- );
- if ($canEdit) {
- $f->text(
- -name=>"name",
- -value=>$collateral->{name},
- -label=>WebGUI::International::get(768)
- );
- $f->select(
- -name=>"collateralFolderId",
- -value=>[$folderId],
- -label=>WebGUI::International::get(769),
- -options=>WebGUI::SQL->buildHashRef("select collateralFolderId,name from collateralFolder order by name")
- );
- } else {
- $f->readOnly(
- -label=>WebGUI::International::get(768),
- -value=>$collateral->{name}
- );
- }
- if ($collateral->{collateralType} eq "snippet") {
- $output .= ''.WebGUI::International::get(770).'
';
- if ($canEdit) {
- $f->HTMLArea(
- -name=>"parameters",
- -value=>$collateral->{parameters},
- -label=>WebGUI::International::get(771),
- -popupToggle=>1
- );
- } else {
- $f->readOnly(
- -value=>$collateral->{parameters},
- -label=>WebGUI::International::get(771)
- );
- }
- } elsif ($collateral->{collateralType} eq "file") {
- $output .= ''.WebGUI::International::get(772).'
';
- if ($canEdit) {
- if ($collateral->{filename} ne "") {
- $f->readOnly(
- -value=>''.WebGUI::International::get(391).'',
- -label=>WebGUI::International::get(773)
- );
- } else {
- $f->file(
- -name=>"filename",
- -label=>WebGUI::International::get(773)
- );
- }
- }
- $file = WebGUI::Attachment->new($collateral->{filename},"images",$collateral->{collateralId});
- if ($file->getFilename ne "") {
- $f->readOnly(
- -value=>'
'
- .$file->getFilename.''
- );
- }
+=over
+
+=item propertyName
+
+If an individual propertyName is specified, then only that property value is returned as a scalar.
+
+=back
+
+=cut
+
+sub get {
+ if ($_[1] ne "") {
+ return $_[0]->{_properties}{$_[1]};
} else {
- $output .= helpIcon(20);
- $output .= ''.WebGUI::International::get(382).'
';
- if ($canEdit) {
- if ($collateral->{filename} ne "") {
- $f->readOnly(
- -value=>''.WebGUI::International::get(391).'',
- -label=>WebGUI::International::get(384)
- );
- } else {
- $f->file(
- -name=>"filename",
- -label=>WebGUI::International::get(384)
- );
- }
- }
- $file = WebGUI::Attachment->new($collateral->{filename},"images",$collateral->{collateralId});
- if ($file->getFilename ne "") {
- $f->readOnly(
- -value=>'
'
- );
- if ($hasImageMagick) {
- $image = Image::Magick->new;
- $error = $image->Read($file->getPath);
- ($x, $y) = $image->Get('width','height');
- $f->readOnly(
- -value=>$error ? "Error reading image: $error" : "$x x $y",
- -label=>"Image dimensions"
- );
- }
- }
-
- if ($canEdit) {
- $f->textarea(
- -name=>"parameters",
- -value=>$collateral->{parameters},
- -label=>WebGUI::International::get(385)
- );
- } else {
- $f->readOnly(
- -label=>WebGUI::International::get(385),
- -value=>$collateral->{parameters}
- );
- }
- if ($canEdit && $collateral->{collateralType} eq 'image') {
- $f->text(
- -name=>"thumbnailSize",
- -value=>$collateral->{thumbnailSize},
- -label=>"Thumbnail size"
- );
- }
+ return $_[0]->{_properties};
}
- $f->submit if ($canEdit);
- $output .= $f->print;
- return _submenu($output);
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 new ( collateralId )
+
+Constructor.
+
+=over
+
+=item collateralId
+
+The unique identifier for this piece of collateral. If set to "new" an id will be generated.
+
+=back
+
+=cut
+
+sub new {
+ my ($class, $collateralId) = @_;
+ my $properties;
+ if ($collateralId eq "new") {
+ $properties = {
+ collateralId=>getNextId("collateralId"),
+ collateralFolderId=>0,
+ collateralType=>"image",
+ userId=>$session{user}{userId},
+ dateUploaded=>time(),
+ thumbnailSize=>$session{setting}{thumbnailSize},
+ name=>"untitled",
+ username=>$session{user}{username}
+ };
+ WebGUI::SQL->write("insert into collateral (collateralId, collateralFolderId, collateraltype, userId,
+ dateUploaded, thumbnailSize, name, username) values ( ".$properties->{collateralId}.",
+ ".$properties->{collateralFolderId}.", ".quote($properties->{collateralType}).",
+ ".$properties->{userId}.", ".$properties->{dateUploaded}.", ".$properties->{thumbnailSize}.",
+ ".quote($properties->{name}).", ".quote($properties->{username}).")");
+ } elsif ($collateralId > 0) {
+ $properties = WebGUI::SQL->quickHashRef("select * from collateral where collateralId=".$collateralId);
+ }
+ return $class->_new($properties);
}
#-------------------------------------------------------------------
-sub www_editCollateralSave {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- WebGUI::Session::setScratch("collateralFolderId",$session{form}{collateralFolderId});
- my ($test, $file, $addFile);
- my $collateral = WebGUI::Collateral->new($session{form}{cid});
- $session{form}{thumbnailSize} ||= $session{setting}{thumbnailSize};
- if ($session{form}{cid} eq "new") {
- $session{form}{cid} = $collateral->get("collateralId");
- } elsif ($collateral->get("thumbnailSize") != $session{form}{thumbnailSize}) {
- $collateral->createThumbnail($session{form}{thumbnailSize});
- }
- $collateral->save("filename", $session{form}{thumbnailSize});
- $session{form}{name} = "untitled" if ($session{form}{name} eq "");
- while (($test) = WebGUI::SQL->quickArray("select name from collateral
- where name=".quote($session{form}{name})." and collateralId<>".$collateral->get("collateralId"))) {
- if ($session{form}{name} =~ /(.*)(\d+$)/) {
- $session{form}{name} = $1.($2+1);
- } elsif ($test ne "") {
- $session{form}{name} .= "2";
+
+# Reuse this code for multiNew
+sub _new {
+ my ($class,$properties) = @_;
+ return undef unless $properties;
+ my $self = WebGUI::Attachment->new($properties->{filename},"images",$properties->{collateralId});
+ $self->{_properties} = $properties;
+ bless $self, $class;
+}
+
+#-------------------------------------------------------------------
+
+=head2 multiDelete ( @collateraIds )
+
+Deletes the nodes and database entries for a list of collateral items.
+
+=cut
+
+sub multiDelete {
+ my ($class,@ids) = @_;
+ return undef unless @ids;
+
+ my @collateral = $class->multiNew(@ids);
+ foreach my $obj (@collateral) {
+ $obj->deleteNode();
+ }
+
+ my $clause = "collateralId in (".join(',',@ids).")";
+ WebGUI::SQL->write("delete from collateral where $clause");
+}
+
+#-------------------------------------------------------------------
+
+=head2 multiNew ( @collateralIds )
+
+Returns a list of WebGUI::Collateral objects.
+
+=cut
+
+sub multiNew {
+ my ($class,@collateralIds) = @_;
+ return () unless @collateralIds;
+
+ my (@objs);
+
+ my $clause = "collateralId in (".join(',',@collateralIds).")";
+ my $sth = WebGUI::SQL->read("select * from collateral where $clause");
+
+ while (my $hash = $sth->hashRef()) {
+ push @objs,$class->_new($hash);
+ }
+
+ return @objs;
+}
+
+#-------------------------------------------------------------------
+
+=head2 set ( properties )
+
+Sets the value of a property for this collateral item.
+
+=over
+
+=item properties
+
+A hash reference containing the list of properties to set. The valid property names are "name", "parameters", "userId", "username", "collateralFolderId", "collateralType", and "thumbnailSize".
+
+If username or userId are not specified, the current user will be used.
+
+=back
+
+=cut
+
+sub set {
+ my ($key, $sql, @update, $i);
+ my $self = shift;
+ my $properties = shift;
+ $self->{_properties}->{dateUploaded} = time();
+ $properties->{userId} = $session{user}{userId} if ($properties->{userId} eq "");
+ $properties->{username} = $session{user}{username} if ($properties->{username} eq "");
+ $properties->{thumbnailSize} = $session{setting}{thumbnailSize} if ($properties->{thumbnailSize} eq "");
+ $sql = "update collateral set";
+ foreach $key (keys %{$properties}) {
+ $self->{_property}{$key} = $properties->{$key};
+ if (isIn($key, qw(name parameters userId username collateralFolderId collateralType thumbnailSize))) {
+ $sql .= " ".$key."=".quote($properties->{$key}).",";
}
}
- $collateral->set($session{form});
- $session{form}{collateralType} = "";
- return www_listCollateral();
+ $sql .= " dateUploaded=".$self->{_properties}{dateUploaded}."
+ where collateralid=".$self->get("collateralId");
+ WebGUI::SQL->write($sql);
+}
+
+
+#-------------------------------------------------------------------
+# extended only to save info to database
+sub save {
+ my $filename = $_[0]->SUPER::save($_[1],$_[2],$_[3]);
+ if ($filename) {
+ WebGUI::SQL->write("update collateral set filename=".quote($filename)
+ ." where collateralId=".$_[0]->get("collateralId"));
+ $_[0]->{_properties}{filename} = $filename;
+ }
+ return $filename;
}
#-------------------------------------------------------------------
-sub www_editCollateralFolder {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my ($output, $f, $folder, $folderId, $constraint);
- $output .= ''.WebGUI::International::get(776).'
';
- if ($session{form}{fid} eq "new") {
- $folder->{collateralFolderId} = "new";
- $folder->{parentId} = $session{scratch}{collateralFolderId} || 0;
- } else {
- $folderId = $session{scratch}{collateralFolderId} || 0;
- $folder = WebGUI::SQL->quickHashRef("select * from collateralFolder where collateralFolderId=$folderId");
- $constraint = "where collateralFolderId<>".$folder->{collateralFolderId};
- }
- $f = WebGUI::HTMLForm->new;
- $f->hidden("op","editCollateralFolderSave");
- $f->hidden("fid",$session{form}{fid});
- $f->readOnly(
- -value=>$folder->{collateralFolderId},
- -label=>WebGUI::International::get(777)
- );
- if ($folder->{collateralFolderId} eq "0") {
- $f->hidden("parentId",0);
- } else {
- $f->select(
- -name=>"parentId",
- -value=>[$folder->{parentId}],
- -label=>WebGUI::International::get(769),
- -options=>WebGUI::SQL->buildHashRef("select collateralFolderId,name from collateralFolder
- $constraint order by name")
- );
- }
- $f->text(
- -value=>$folder->{name},
- -name=>"name",
- -label=>WebGUI::International::get(768)
- );
- $f->textarea(
- -value=>$folder->{description},
- -name=>"description",
- -label=>WebGUI::International::get(778)
- );
- $f->submit;
- $output .= $f->print;
- return _submenu($output);
-}
-
-#-------------------------------------------------------------------
-sub www_editCollateralFolderSave {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- if ($session{form}{fid} eq "new") {
- $session{form}{fid} = getNextId("collateralFolderId");
- WebGUI::Session::setScratch("collateralFolderId",$session{form}{fid});
- WebGUI::SQL->write("insert into collateralFolder (collateralFolderId) values ($session{form}{fid})");
- }
- my $folderId = $session{scratch}{collateralFolderId} || 0;
- $session{form}{name} = "untitled" if ($session{form}{name} eq "");
- while (my ($test) = WebGUI::SQL->quickArray("select name from collateralFolder
- where name=".quote($session{form}{name})." and collateralFolderId<>$folderId")) {
- if ($session{form}{name} =~ /(.*)(\d+$)/) {
- $session{form}{name} = $1.($2+1);
- } elsif ($test ne "") {
- $session{form}{name} .= "2";
- }
+# extended only to save info to database
+sub saveFromFilesystem {
+ my $filename = $_[0]->SUPER::saveFromFilesystem($_[1],$_[2],$_[3]);
+ if ($filename) {
+ WebGUI::SQL->write("update collateral set filename=".quote($filename)
+ ." where collateralId=".$_[0]->get("collateralId"));
+ $_[0]->{_properties}{filename} = $filename;
}
- WebGUI::SQL->write("update collateralFolder set parentId=$session{form}{parentId}, name=".quote($session{form}{name})
- .", description=".quote($session{form}{description})
- ." where collateralFolderId=$folderId");
- return www_listCollateral();
+ return $filename;
}
-#-------------------------------------------------------------------
-sub www_listCollateral {
- return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4));
- my (%type, %user, $f, $row, $data, $sth, $url, $output, $parent, $p, $thumbnail, $file, $page, $constraints, $folderId);
- tie %type, 'Tie::IxHash';
- tie %user, 'Tie::IxHash';
- %type = (
- '-delete-'=>WebGUI::International::get(782),
- image=>WebGUI::International::get(779),
- file=>WebGUI::International::get(780),
- snippet=>WebGUI::International::get(781)
- );
- %user = (
- '-delete-'=>WebGUI::International::get(782),
- %{WebGUI::SQL->buildHashRef("select distinct(userId), username from collateral order by username")}
- );
- WebGUI::Session::setScratch("keyword",$session{form}{keyword});
- WebGUI::Session::setScratch("collateralUser",$session{form}{collateralUser});
- WebGUI::Session::setScratch("collateralType",$session{form}{collateralType});
- WebGUI::Session::setScratch("collateralPageNumber",$session{form}{pn});
- WebGUI::Session::setScratch("collateralFolderId",$session{form}{fid});
- $folderId = $session{scratch}{collateralFolderId} || 0;
- $constraints = "collateralFolderId=".$folderId;
- $constraints .= " and userId=$session{scratch}{collateralUser}" if ($session{scratch}{collateralUser});
- $constraints .= " and collateralType=".quote($session{scratch}{collateralType}) if ($session{scratch}{collateralType});
- $constraints .= " and name like ".quote('%'.$session{scratch}{keyword}.'%') if ($session{scratch}{keyword});
- $p = WebGUI::Paginator->new(WebGUI::URL::page('op=listCollateral'),[],"",$session{scratch}{collateralPageNumber});
- $p->setDataByQuery("select collateralId, name, filename, collateralType, dateUploaded, username, parameters
- from collateral where $constraints order by name");
- $page = $p->getPageData;
- $output = helpIcon(49);
- $output .= ''.WebGUI::International::get(757).'
';
- $f = WebGUI::HTMLForm->new(1);
- $f->hidden("op","listCollateral");
- $f->hidden("pn",1);
- $f->text(
- -name=>"keyword",
- -value=>$session{scratch}{keyword},
- -size=>15
- );
- $f->select(
- -name=>"collateralUser",
- -value=>[$session{scratch}{collateralUser}],
- -options=>\%user
- );
- $f->select(
- -name=>"collateralType",
- -value=>[$session{scratch}{collateralType}],
- -options=>\%type
- );
- $f->submit(WebGUI::International::get(170));
- $output .= ''.$f->print.'
';
- $output .= '';
- $output .= '
';
- if ($folderId) {
- ($parent) = WebGUI::SQL->quickArray("select parentId from collateralFolder
- where collateralFolderId=$folderId");
- $output .= ' '
- .' '.WebGUI::International::get(542).' |
';
- }
- $sth = WebGUI::SQL->read("select collateralFolderId, name, description from collateralFolder
- where parentId=$folderId and collateralFolderId<>0 order by name");
- while ($data = $sth->hashRef) {
- $output .= ' '
- .' '.$data->{name}.' | '.$data->{description}.' |
';
- }
- $sth->finish;
- foreach $row (@$page) {
- $url = WebGUI::URL::page('op=editCollateral&cid='.$row->{collateralId}.'&fid='.$folderId);
- $output .= '';
- $output .= '| '.$row->{name}.' | ';
- $output .= ''.$type{$row->{collateralType}}.' | ';
- $output .= ''.$row->{username}.' | ';
- $output .= ''.epochToHuman($row->{dateUploaded},"%z").' | ';
- if ($row->{filename} ne "" && $row->{collateralType} eq "image") {
- $file = WebGUI::Attachment->new($row->{filename},"images",$row->{collateralId});
- $thumbnail = '
';
- } elsif ($row->{filename} ne "" && $row->{collateralType} eq "file") {
- $file = WebGUI::Attachment->new($row->{filename},"images",$row->{collateralId});
- $thumbnail = '
';
- } elsif ($row->{collateralType} eq "snippet") {
- $thumbnail = WebGUI::HTML::filter($row->{parameters},'all');
- $thumbnail =~ s/(\n[^\n]\r?|\r[^\r]\n?)/\↵/gs;
- $thumbnail =~ s/\s{2,}//g;
- $thumbnail =~ s/\s*\↵+\s*/\↵/g;
- $thumbnail =~ s/^(\↵)+//;
- my $crCount = $thumbnail =~ m/\↵/g;
- $thumbnail = substr($thumbnail,0,$session{setting}{snippetsPreviewLength}+$crCount*6);
- $thumbnail .= '...' if (length($row->{parameters}) > $session{setting}{snippetsPreviewLength});
- } else {
- $thumbnail = "";
- }
- $output .= ''.$thumbnail.' | ';
- $output .= "
\n";
- }
- $output .= '
';
- $output .= $p->getBarTraditional;
- return _submenu($output);
-}
-
-#-------------------------------------------------------------------
-sub _htmlAreaCreateTree {
- my ($output);
- my ($name, $description, $url, $image, $indent, $target, $delete) = @_;
- if($delete) {
- $delete = qq//;
- $delete .= '
';
- }
- $target = ' target="'.$target.'" ' if ($target);
- $output .= '';
- $output .= (' ') x$indent;
- $output .= ' ';
- $output .= ''.$name.' | ';
- $output .= ''.$delete.' |
';
- return $output;
-}
-
-#-------------------------------------------------------------------
-sub www_htmlArealistCollateral {
- my (@parents, $sth, $data, $indent);
- $session{form}{makePrintable}=1; $session{form}{style}=-10; # Special style for this output
- return "Only Content Managers are allowed to use WebGUI Collateral" unless (WebGUI::Privilege::isInGroup(4));
-
- my $output = '';
- my $folderId = $session{form}{fid} || 0;
- my $parent = $folderId;
- # push parent folders in array so it can be reversed
- unshift(@parents, $parent);
- until($parent == 0) {
- ($parent) = WebGUI::SQL->quickArray("select parentId from collateralFolder where collateralFolderId=$parent");
- unshift(@parents, $parent);
- }
- # Build tree for opened parent folders
- foreach $parent (@parents) {
- my ($name, $description) = WebGUI::SQL->quickArray("select name, description from
- collateralFolder where collateralFolderId=$parent");
- my ($itemsInFolder) = WebGUI::SQL->quickArray("select count(*) from collateral where collateralFolderId = $parent");
- my ($foldersInFolder)=WebGUI::SQL->quickArray("select count(*) from collateralFolder where parentId=$parent");
- my $delete = "fid=$parent" unless ($itemsInFolder + $foldersInFolder);
- $output .= _htmlAreaCreateTree($name, $description,
- WebGUI::URL::page('op=htmlArealistCollateral&fid='.$parent), "opened.gif",
- $indent++,"" ,$delete);
- }
- # Extend tree with closed folders in current folder
- $sth = WebGUI::SQL->read("select collateralFolderId, name, description from collateralFolder
- where parentId=$folderId and collateralFolderId<>0 order by name");
- while ($data = $sth->hashRef) {
- my ($itemsInFolder) = WebGUI::SQL->quickArray("select count(*) from collateral where
- collateralFolderId = ".$data->{collateralFolderId});
- my $delete = 'fid='.$data->{collateralFolderId} unless $itemsInFolder;
- $output .= _htmlAreaCreateTree($data->{name}, $data->{description},
- WebGUI::URL::page('op=htmlArealistCollateral&fid='.$data->{collateralFolderId}),
- "closed.gif", $indent, "", $delete);
- }
- # Extend tree with images in current folder
- $sth = WebGUI::SQL->read('select collateralId, name, filename from collateral where collateralType = "image" '.
- "and collateralFolderId = $folderId");
- while ($data = $sth->hashRef) {
- $data->{filename} =~ /\.([^\.]+)$/; # Get extension
- my $fileType = $1.'.gif';
- $output .= _htmlAreaCreateTree($data->{filename}, $data->{name},
- WebGUI::URL::page('op=htmlAreaviewCollateral&cid='.$data->{collateralId}),
- $fileType, $indent, "viewer", 'cid='.$data->{collateralId}.'&fid='.$folderId);
- }
- $output .= '
';
- $output .= '\n";
- $sth->finish;
- return $output;
-}
-
-#-------------------------------------------------------------------
-sub www_htmlAreaviewCollateral {
- my($output, $collateral, $file, $x, $y, $image, $error);
- $session{form}{makePrintable}=1; $session{form}{style}=-10; # Special style for this output
- $output .= '';
- if($session{form}{cid} == 0 || ! WebGUI::Privilege::isInGroup(4)) {
- $output .= '| ';
- $output .= '
 ';
- $output .= 'WebGUI Image Manager for htmlArea ';
- $output .= ' |
';
- } else {
- my $c = WebGUI::Collateral->new($session{form}{cid});
- $collateral = $c->get;
- $file = WebGUI::Attachment->new($collateral->{filename},"images",$collateral->{collateralId});
- $output .= '';
- $output .= ''.$file->getFilename.' ';
- if ($hasImageMagick) {
- $image = Image::Magick->new;
- $error = $image->Read($file->getPath);
- ($x, $y) = $image->Get('width','height');
- $output .= $error ? "Error reading image: $error" : "($x × $y)";
- }
- $output .= ' |
';
- $output .= ' ';
- $output .= ' |
';
- $output .= '\n";
- }
- return $output;
-}
-
-#-------------------------------------------------------------------
-sub www_htmlAreaUpload {
- $session{form}{makePrintable}=1; $session{form}{style}=-10; # Special style for this output
- return "Only Content Managers are allowed to use WebGUI Collateral" unless (WebGUI::Privilege::isInGroup(4));
- return www_htmlArealistCollateral() if ($session{form}{image} eq "");
- my($test, $file);
- $session{form}{fid} = $session{form}{collateralFolderId} = $session{form}{path};
- my $collateral = WebGUI::Collateral->new("new");
- $session{form}{thumbnailSize} ||= $session{setting}{thumbnailSize};
- $session{form}{cid} = $collateral->get("collateralId");
- $collateral->save("image", $session{form}{thumbnailSize});
- $session{form}{name} = "untitled" if ($session{form}{name} eq "");
- while (($test) = WebGUI::SQL->quickArray("select name from collateral
- where name=".quote($session{form}{name})." and collateralId<>".$collateral->get("collateralId"))) {
- if ($session{form}{name} =~ /(.*)(\d+$)/) {
- $session{form}{name} = $1.($2+1);
- } elsif ($test ne "") {
- $session{form}{name} .= "2";
- }
- }
- $collateral->set($session{form});
- $session{form}{collateralType} = "";
- return www_htmlArealistCollateral();
-}
-
-#-------------------------------------------------------------------
-sub www_htmlAreaDelete {
- $session{form}{makePrintable}=1; $session{form}{style}=-10; # Special style for this output
- return "Only Content Managers are allowed to use WebGUI Collateral" unless (WebGUI::Privilege::isInGroup(4));
- if($session{form}{cid}) { # Delete Image
- my $collateral = WebGUI::Collateral->new($session{form}{cid});
- $collateral->delete;
- } elsif($session{form}{fid} and not($session{form}{cid})) {
- return WebGUI::Privilege::vitalComponent() unless ($session{form}{fid} > 999);
- my ($parent) = WebGUI::SQL->quickArray("select parentId from collateralFolder
- where collateralFolderId=".$session{form}{fid});
- WebGUI::SQL->write("delete from collateralFolder where collateralFolderId=".$session{form}{fid});
- $session{form}{fid}=$parent;
- }
- return www_htmlArealistCollateral();
-}
-
-#-------------------------------------------------------------------
-sub www_htmlAreaCreateFolder {
- $session{form}{makePrintable}=1; $session{form}{style}=-10; # Special style for this output
- return "Only Content Managers are allowed to use WebGUI Collateral" unless (WebGUI::Privilege::isInGroup(4));
- $session{form}{fid} = getNextId("collateralFolderId");
- WebGUI::Session::setScratch("collateralFolderId",$session{form}{fid});
- WebGUI::SQL->write("insert into collateralFolder (collateralFolderId) values ($session{form}{fid})");
- my $folderId = $session{scratch}{collateralFolderId} || 0;
- $session{form}{name} = $session{form}{folder};
- $session{form}{name} = "untitled" if ($session{form}{name} eq "");
- while (my ($test) = WebGUI::SQL->quickArray("select name from collateralFolder
- where name=".quote($session{form}{name})." and collateralFolderId<>$folderId")) {
- if ($session{form}{name} =~ /(.*)(\d+$)/) {
- $session{form}{name} = $1.($2+1);
- } elsif ($test ne "") {
- $session{form}{name} .= "2";
- }
- }
- WebGUI::SQL->write("update collateralFolder set parentId=$session{form}{path}, name=".quote($session{form}{name})
- .", description=".quote($session{form}{description})
- ." where collateralFolderId=$folderId");
- $session{form}{fid} = $session{form}{path};
- return www_htmlArealistCollateral();
-}
1;
+
+