diff --git a/lib/WebGUI/Collateral.pm b/lib/WebGUI/Collateral.pm
index 5bebf9707..8c930a6ab 100644
--- a/lib/WebGUI/Collateral.pm
+++ b/lib/WebGUI/Collateral.pm
@@ -1,305 +1,673 @@
-package WebGUI::Collateral;
+package WebGUI::Operation::Collateral;
-=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
+#-------------------------------------------------------------------
- -------------------------------------------------------------------
- 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
- -------------------------------------------------------------------
-=cut
+# 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 $@;
-use WebGUI::Attachment;
+
+use Exporter;
+use strict;
+use WebGUI::Collateral;
+use WebGUI::CollateralFolder;
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 WebGUI::Utility;
+use Tie::IxHash;
+use WebGUI::URL;
+use WebGUI::HTML;
-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
+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);
#-------------------------------------------------------------------
-# extended only to save info to database
-sub createThumbnail {
- $_[0]->SUPER::createThumbnail($_[1]);
- if ($_[1] != $_[0]->get("thumbnailSize")) {
- $_[0]->set({thumbnailSize=>$_[1]});
- }
-}
-
-
-#-------------------------------------------------------------------
-
-=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);
-}
-
-#-------------------------------------------------------------------
-
-=head2 get ( [ propertyName ] )
-
-Returns a hash reference containing all of the properties of this collateral item.
-
-=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 {
- return $_[0]->{_properties};
- }
-}
-
-
-#-------------------------------------------------------------------
-
-=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);
+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);
}
- return $class->_new($properties);
+ $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);
}
#-------------------------------------------------------------------
-
-# 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;
+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);
}
#-------------------------------------------------------------------
-
-=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");
+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();
}
#-------------------------------------------------------------------
-
-=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;
+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);
+ }
+ return www_listCollateral();
+}
-=head2 set ( properties )
+#-------------------------------------------------------------------
+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);
+}
-Sets the value of a property for this collateral item.
+#-------------------------------------------------------------------
+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();
+}
-=over
+#-------------------------------------------------------------------
+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);
+}
-=item properties
+#-------------------------------------------------------------------
+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.''
+ );
+ }
+ } 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"
+ );
+ }
+ }
-A hash reference containing the list of properties to set. The valid property names are "name", "parameters", "userId", "username", "collateralFolderId", "collateralType", and "thumbnailSize".
+ 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"
+ );
+ }
+ }
+ $f->submit if ($canEdit);
+ $output .= $f->print;
+ return _submenu($output);
+}
-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}).",";
+#-------------------------------------------------------------------
+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";
}
}
- $sql .= " dateUploaded=".$self->{_properties}{dateUploaded}."
- where collateralid=".$self->get("collateralId");
- WebGUI::SQL->write($sql);
+ $collateral->set($session{form});
+ $session{form}{collateralType} = "";
+ return www_listCollateral();
}
-
#-------------------------------------------------------------------
-# 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;
+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};
}
- return $filename;
+ $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);
}
#-------------------------------------------------------------------
-# 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;
+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";
+ }
}
- return $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();
}
+#-------------------------------------------------------------------
+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;
-
-