package WebGUI::Operation::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 #------------------------------------------------------------------- # 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 Exporter; use strict; use WebGUI::Collateral; 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; 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); #------------------------------------------------------------------- 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=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; 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 ($parent) = WebGUI::SQL->quickArray("select parentId from collateralFolder where collateralFolderId=".$session{scratch}{collateralFolderId}); WebGUI::SQL->write("update collateral set collateralFolderId=$parent where collateralFolderId=$session{scratch}{collateralFolderId}"); WebGUI::SQL->write("delete from collateralFolder where collateralFolderId=".$session{scratch}{collateralFolderId}); WebGUI::Session::setScratch("collateralFolderId",$parent); return www_listCollateral(); } #------------------------------------------------------------------- sub www_deleteCollateralFile { return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(4)); my $collateral = WebGUI::Collateral->new($session{form}{cid}); $collateral->delete; return www_editCollateral($collateral); } #------------------------------------------------------------------- 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) ); } 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" ); } } 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); } #------------------------------------------------------------------- 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"; } } $collateral->set($session{form}); $session{form}{collateralType} = ""; return www_listCollateral(); } #------------------------------------------------------------------- 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"; } } 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 .= ''; } $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); } 1;