package WebGUI::Wobject::FileManager;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2002 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
#-------------------------------------------------------------------
use strict;
use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Paginator;
use WebGUI::Privilege;
use WebGUI::Search;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
use WebGUI::Utility;
use WebGUI::Wobject;
our @ISA = qw(WebGUI::Wobject);
our $namespace = "FileManager";
our $name = WebGUI::International::get(1,$namespace);
#-------------------------------------------------------------------
# example: sortByColumn(columnToSort,columnLabel);
sub sortByColumn {
my ($output);
$output = '';
if ($session{form}{sort} eq $_[0]) {
if ($session{form}{sortDirection} eq "desc") {
$output .= '
';
} else {
$output .= '
';
}
}
return $output;
}
#-------------------------------------------------------------------
sub duplicate {
my ($file, $w, %row, $sth, $newDownloadId);
tie %row, 'Tie::CPHash';
$w = $_[0]->SUPER::duplicate($_[1]);
$w = WebGUI::Wobject::FileManager->new({wobjectId=>$w,namespace=>$namespace});
$w->set({
paginateAfter=>$_[0]->get("paginateAfter"),
displayThumbnails=>$_[0]->get("displayThumbnails")
});
$sth = WebGUI::SQL->read("select * from FileManager_file where wobjectId=".$_[0]->get("wobjectId"));
while (%row = $sth->hash) {
$newDownloadId = getNextId("FileManager_fileId");
$file = WebGUI::Attachment->new($row{downloadFile},$_[0]->get("wobjectId"),$row{FileManager_fileId});
$file->copy($w->get("wobjectId"),$newDownloadId);
$file = WebGUI::Attachment->new($row{alternateVersion1},$_[0]->get("wobjectId"),$row{FileManager_fileId});
$file->copy($w->get("wobjectId"),$newDownloadId);
$file = WebGUI::Attachment->new($row{alternateVersion2},$_[0]->get("wobjectId"),$row{FileManager_fileId});
$file->copy($w->get("wobjectId"),$newDownloadId);
WebGUI::SQL->write("insert into FileManager_file values ($newDownloadId, ".$w->get("wobjectId").", ".
quote($row{fileTitle}).", ".quote($row{downloadFile}).", $row{groupToView}, ".
quote($row{briefSynopsis}).", $row{dateUploaded}, $row{sequenceNumber}, ".
quote($row{alternateVersion1}).", ".quote($row{alternateVersion2}).")");
}
$sth->finish;
}
#-------------------------------------------------------------------
sub purge {
WebGUI::SQL->write("delete from FileManager_file where wobjectId=".$_[0]->get("wobjectId"));
$_[0]->SUPER::purge();
}
#-------------------------------------------------------------------
sub set {
$_[0]->SUPER::set($_[1],[qw(paginateAfter displayThumbnails)]);
}
#-------------------------------------------------------------------
sub uiLevel {
return 4;
}
#-------------------------------------------------------------------
sub www_deleteFile {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
$_[0]->setCollateral("FileManager_file","FileManager_fileId",{$session{form}{file}=>''},0,0);
return $_[0]->www_editDownload();
}
#-------------------------------------------------------------------
sub www_deleteDownload {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
return $_[0]->confirm(WebGUI::International::get(12,$namespace),
WebGUI::URL::page('func=deleteDownloadConfirm&wid='.$session{form}{wid}.'&did='.$session{form}{did}));
}
#-------------------------------------------------------------------
sub www_deleteDownloadConfirm {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
my ($output, $file);
$file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{did});
$file->deleteNode;
$_[0]->deleteCollateral("FileManager_file","FileManager_fileId",$session{form}{did});
$_[0]->reorderCollateral("FileManager_file","FileManager_fileId");
return "";
}
#-------------------------------------------------------------------
sub www_download {
my (%download, $file);
tie %download,'Tie::CPHash';
%download = WebGUI::SQL->quickHash("select * from FileManager_file where FileManager_fileId=$session{form}{did}");
if (WebGUI::Privilege::isInGroup($download{groupToView})) {
if ($session{form}{alternateVersion} == 1) {
$file = WebGUI::Attachment->new($download{alternateVersion1},
$session{form}{wid},
$session{form}{did});
} elsif ($session{form}{alternateVersion} == 2) {
$file = WebGUI::Attachment->new($download{alternateVersion2},
$session{form}{wid},
$session{form}{did});
} else {
$file = WebGUI::Attachment->new($download{downloadFile},
$session{form}{wid},
$session{form}{did});
}
$session{header}{redirect} = WebGUI::Session::httpRedirect($file->getURL);
return "";
} else {
return WebGUI::Privilege::insufficient();
}
}
#-------------------------------------------------------------------
sub www_edit {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
my ($output, $f, $paginateAfter, $proceed);
if ($_[0]->get("wobjectId") eq "new") {
$proceed = 1;
}
$output .= helpIcon(1,$namespace);
$output .= ''.WebGUI::International::get(9,$namespace).'
';
$paginateAfter = $_[0]->get("paginateAfter") || 50;
$f = WebGUI::HTMLForm->new;
$f->integer("paginateAfter",WebGUI::International::get(20,$namespace),$paginateAfter);
$f->yesNo("displayThumbnails",WebGUI::International::get(21,$namespace),$_[0]->get("displayThumbnails"));
$f->yesNo("proceed",WebGUI::International::get(22,$namespace),$proceed);
$output .= $_[0]->SUPER::www_edit($f->printRowsOnly);
return $output;
}
#-------------------------------------------------------------------
sub www_editSave {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
$_[0]->SUPER::www_editSave({
paginateAfter=>$session{form}{paginateAfter},
displayThumbnails=>$session{form}{displayThumbnails}
});
if ($session{form}{proceed}) {
return $_[0]->www_editDownload();
} else {
return "";
}
}
#-------------------------------------------------------------------
sub www_editDownload {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
my ($output, %download, $f);
tie %download,'Tie::CPHash';
if ($session{form}{did} eq "") {
$session{form}{did} = "new";
} else {
%download = WebGUI::SQL->quickHash("select * from FileManager_file where FileManager_fileId='$session{form}{did}'");
}
$output .= helpIcon(2,$namespace);
$output .= ''.WebGUI::International::get(10,$namespace).'
';
$f = WebGUI::HTMLForm->new;
$f->hidden("wid",$_[0]->get("wobjectId"));
$f->hidden("did",$session{form}{did});
$f->hidden("func","editDownloadSave");
$f->text("fileTitle",WebGUI::International::get(5,$namespace),$download{fileTitle});
if ($download{downloadFile} ne "") {
$f->readOnly(''.WebGUI::International::get(391).
'',WebGUI::International::get(6,$namespace));
} else {
$f->file("downloadFile",WebGUI::International::get(6,$namespace));
}
if ($download{alternateVersion1} ne "") {
$f->readOnly(''.
WebGUI::International::get(391).'',WebGUI::International::get(17,$namespace));
} else {
$f->file("alternateVersion1",WebGUI::International::get(17,$namespace));
}
if ($download{alternateVersion2} ne "") {
$f->readOnly(''.
WebGUI::International::get(391).'',WebGUI::International::get(18,$namespace));
} else {
$f->file("alternateVersion2",WebGUI::International::get(18,$namespace));
}
$f->text("briefSynopsis",WebGUI::International::get(8,$namespace),$download{briefSynopsis});
$f->group("groupToView",WebGUI::International::get(7,$namespace),[$download{groupToView}]);
$f->yesNo("proceed",WebGUI::International::get(22,$namespace));
$f->submit;
$output .= $f->print;
return $output;
}
#-------------------------------------------------------------------
sub www_editDownloadSave {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
my ($file, %files);
$files{FileManager_fileId} = $_[0]->setCollateral("FileManager_file", "FileManager_fileId", {
FileManager_fileId => $session{form}{did},
fileTitle => $session{form}{fileTitle},
briefSynopsis => $session{form}{briefSynopsis},
dateUploaded => time(),
groupToView => $session{form}{groupToView}
});
$_[0]->reorderCollateral("FileManager_file","FileManager_fileId");
$file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{did});
$file->save("downloadFile");
$files{downloadFile} = $file->getFilename;
$files{fileTitle} = $files{downloadFile} if ($session{form}{fileTitle} eq "");
$file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{did});
$file->save("alternateVersion1");
$files{alternateVersion1} = $file->getFilename;
$file = WebGUI::Attachment->new("",$session{form}{wid},$session{form}{did});
$file->save("alternateVersion2");
$files{alternateVersion2} = $file->getFilename;
$_[0]->setCollateral("FileManager_file", "FileManager_fileId", \%files);
if ($session{form}{proceed}) {
$session{form}{did} = "new";
return $_[0]->www_editDownload();
} else {
return "";
}
}
#-------------------------------------------------------------------
sub www_moveDownloadDown {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
$_[0]->moveCollateralDown("FileManager_file","FileManager_fileId",$session{form}{did});
return "";
}
#-------------------------------------------------------------------
sub www_moveDownloadUp {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage());
$_[0]->moveCollateralUp("FileManager_file","FileManager_fileId",$session{form}{did});
return "";
}
#-------------------------------------------------------------------
sub www_view {
my ($url, @row, $i, $p, $file, $constraints, $alt1, $numResults, $alt2, $output, $sth, $head, $sql, %download, $flag, $columns);
tie %download, 'Tie::CPHash';
$numResults = $session{form}{numResults} || $_[0]->get("paginateAfter") || 25;
$url = WebGUI::URL::page();
$url = WebGUI::URL::append($url,"all=$session{form}{all}") if ($session{form}{all});
$url = WebGUI::URL::append($url,"atLeastOne=$session{form}{atLeastOne}") if ($session{form}{atLeastOne});
$url = WebGUI::URL::append($url,"without=$session{form}{without}") if ($session{form}{without});
$url = WebGUI::URL::append($url,"exactPhrase=$session{form}{exactPhrase}") if ($session{form}{exactPhrase});
$url = WebGUI::URL::append($url,"numResults=$numResults");
$columns = '
| ';
if ($session{var}{adminOn}) {
$row[$i] .= deleteIcon('func=deleteDownload&wid='.$_[0]->get("wobjectId").'&did='.$download{FileManager_fileId})
.editIcon('func=editDownload&wid='.$_[0]->get("wobjectId").'&did='.$download{FileManager_fileId})
.moveUpIcon('func=moveDownloadUp&wid='.$_[0]->get("wobjectId").'&did='.$download{FileManager_fileId})
.moveDownIcon('func=moveDownloadDown&wid='.$_[0]->get("wobjectId").'&did='.$download{FileManager_fileId})
.' ';
}
$row[$i] .= ''.$download{fileTitle}.' · | ';
if ($_[0]->get("displayThumbnails") && isIn($file->getType, qw(gif jpeg jpg tif tiff png bmp))) {
$row[$i] .= ' | '.''. epochToHuman($download{dateUploaded},"%z").' |
| '.WebGUI::International::get(19,$namespace).' | ||