From 99689f30f1a8bc0f0d30083886db867562bf0740 Mon Sep 17 00:00:00 2001 From: Andy Grundman Date: Wed, 18 Jun 2003 03:59:05 +0000 Subject: [PATCH] oops, checked in over the wrong Collateral file --- lib/WebGUI/Collateral.pm | 912 ++++++++++++--------------------------- 1 file changed, 272 insertions(+), 640 deletions(-) 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).'

'; - $output .= '' - .WebGUI::International::get(44).''; - $output .= '    '; - $output .= ''.WebGUI::International::get(45).''; - $output .= '
'; - 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).'

'; - $output .= '' - .WebGUI::International::get(44).''; - $output .= '    '; - $output .= ''.WebGUI::International::get(45).''; - $output .= '
'; - 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).'

'; - $output .= '' - .WebGUI::International::get(44).''; - $output .= '    '; - $output .= ''.WebGUI::International::get(45).''; - $output .= '
'; - 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 .= ''; - } - $sth = WebGUI::SQL->read("select collateralFolderId, name, description from collateralFolder - where parentId=$folderId and collateralFolderId<>0 order by name"); - while ($data = $sth->hashRef) { - $output .= ''; - } - $sth->finish; - foreach $row (@$page) { - $url = WebGUI::URL::page('op=editCollateral&cid='.$row->{collateralId}.'&fid='.$folderId); - $output .= ''; - $output .= ''; - $output .= ''; - $output .= ''; - $output .= ''; - 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 .= ''; - $output .= "\n"; - } - $output .= '
'.WebGUI::International::get(768).'' - .WebGUI::International::get(783).''.WebGUI::International::get(387) - .''.WebGUI::International::get(388).'' - .WebGUI::International::get(784).'
' - .' '.WebGUI::International::get(542).'
' - .' '.$data->{name}.''.$data->{description}.'
'.$row->{name}.''.$type{$row->{collateralType}}.''.$row->{username}.''.epochToHuman($row->{dateUploaded},"%z").''.$thumbnail.'
'; - $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 .= ''.$name.''; - $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; + +