From 79130fd4244705432789754377240d9935f6de46 Mon Sep 17 00:00:00 2001 From: Daniel Quinlan Date: Mon, 24 Jun 2002 17:09:52 +0000 Subject: [PATCH] Added groups to the Image manager. This allows images to be grouped hierarchially. --- docs/upgrades/upgrade_4.0.4-4.1.0.sql | 23 ++- lib/WebGUI/Operation/Image.pm | 213 +++++++++++++++++++++++--- 2 files changed, 213 insertions(+), 23 deletions(-) diff --git a/docs/upgrades/upgrade_4.0.4-4.1.0.sql b/docs/upgrades/upgrade_4.0.4-4.1.0.sql index 5e0914d4c..3ff4ac5bf 100644 --- a/docs/upgrades/upgrade_4.0.4-4.1.0.sql +++ b/docs/upgrades/upgrade_4.0.4-4.1.0.sql @@ -22,5 +22,26 @@ alter table UserSubmission add column karmaPerSubmission int not null default 0; alter table UserSubmission add column karmaPerPost int not null default 0; alter table MessageBoard add column karmaPerPost int not null default 0; alter table Article add column karmaPerPost int not null default 0; - +CREATE TABLE imageGroup ( + imageGroupId int(11) NOT NULL auto_increment, + name varchar(128) NOT NULL default 'untitled', + parentId int(11) NOT NULL default '0', + description varchar(255) default NULL, + PRIMARY KEY (imageGroupId), + UNIQUE KEY imageGroupId (imageGroupId) +); +INSERT INTO incrementer (incrementId, nextValue) VALUES('imageGroupId',1); +INSERT INTO imageGroup (imageGroupId, name, parentId, description) VALUES (0, 'Root', 0, 'Top level'); +alter table images add column imageGroupId int not null default 0; +INSERT INTO groups (groupId, groupName, description) VALUES (9, 'Image Managers', 'Users that have privileges to add, edit, and delete images from the image manager. Content managers can view by default'); +INSERT INTO international VALUES (542,'WebGUI','English','Previous..'); +INSERT INTO international VALUES (543,'WebGUI','English','Add a new group'); +INSERT INTO international VALUES (544,'WebGUI','English','Are you certain you wish to delete this group?'); +INSERT INTO international VALUES (545,'WebGUI','English','Editing Image group'); +INSERT INTO international VALUES (546,'WebGUI','English','Group Id'); +INSERT INTO international VALUES (547,'WebGUI','English','Parent group'); +INSERT INTO international VALUES (548,'WebGUI','English','Group name'); +INSERT INTO international VALUES (549,'WebGUI','English','Group description'); +INSERT INTO international VALUES (550,'WebGUI','English','View Image group'); +INSERT INTO international VALUES (382,'WebGUI','English','Edit Image'); diff --git a/lib/WebGUI/Operation/Image.pm b/lib/WebGUI/Operation/Image.pm index c7d345c4a..1fe8d1fb2 100644 --- a/lib/WebGUI/Operation/Image.pm +++ b/lib/WebGUI/Operation/Image.pm @@ -26,19 +26,19 @@ use WebGUI::URL; use WebGUI::Utility; our @ISA = qw(Exporter); -our @EXPORT = qw(&www_editImage &www_editImageSave &www_viewImage &www_deleteImage &www_deleteImageConfirm &www_listImages &www_deleteImageFile); +our @EXPORT = qw(&www_editImage &www_editImageSave &www_viewImage &www_deleteImage &www_deleteImageConfirm &www_listImages &www_deleteImageFile &www_editImageGroup &www_editImageGroupSave &www_viewImageGroup &www_deleteImageGroup &www_deleteImageGroupConfirm); #------------------------------------------------------------------- sub www_deleteImage { my ($output); - if (WebGUI::Privilege::isInGroup(4)) { + if (WebGUI::Privilege::isInGroup(9)) { $output .= helpIcon(23); $output .= '

'.WebGUI::International::get(42).'

'; $output .= WebGUI::International::get(392).'

'; $output .= '

'.WebGUI::International::get(44).''; - $output .= '    '. + $output .= '    '. WebGUI::International::get(45).'
'; return $output; } else { @@ -49,7 +49,7 @@ sub www_deleteImage { #------------------------------------------------------------------- sub www_deleteImageConfirm { my ($image); - if (WebGUI::Privilege::isInGroup(4)) { + if (WebGUI::Privilege::isInGroup(9)) { $image = WebGUI::Attachment->new("","images",$session{form}{iid}); $image->deleteNode; WebGUI::SQL->write("delete from images where imageId=$session{form}{iid}"); @@ -61,7 +61,7 @@ sub www_deleteImageConfirm { #------------------------------------------------------------------- sub www_deleteImageFile { - if (WebGUI::Privilege::isInGroup(4)) { + if (WebGUI::Privilege::isInGroup(9)) { WebGUI::SQL->write("update images set filename='' where imageId=$session{form}{iid}"); return www_editImage(); } else { @@ -71,19 +71,21 @@ sub www_deleteImageFile { #------------------------------------------------------------------- sub www_editImage { - my ($output, %data, $image, $f); + my ($output, %data, $image, $f, $imageGroupId); tie %data, 'Tie::CPHash'; - if (WebGUI::Privilege::isInGroup(4)) { + if (WebGUI::Privilege::isInGroup(9)) { if ($session{form}{iid} eq "new") { - + $imageGroupId = $session{form}{gid}; } else { %data = WebGUI::SQL->quickHash("select * from images where imageId=$session{form}{iid}"); + $imageGroupId = $data{imageGroupId}; } $output = helpIcon(20); $output .= '

'.WebGUI::International::get(382).'

'; $f = WebGUI::HTMLForm->new; $f->hidden("op","editImageSave"); $f->hidden("iid",$session{form}{iid}); + $f->hidden("gid",$imageGroupId); $f->readOnly($session{form}{iid},WebGUI::International::get(389)); $f->text("name",WebGUI::International::get(383),$data{name}); if ($data{filename} ne "") { @@ -108,7 +110,7 @@ sub www_editImage { #------------------------------------------------------------------- sub www_editImageSave { my ($file, $sqlAdd, $test); - if (WebGUI::Privilege::isInGroup(4)) { + if (WebGUI::Privilege::isInGroup(9)) { if ($session{form}{iid} eq "new") { $session{form}{iid} = getNextId("imageId"); WebGUI::SQL->write("insert into images (imageId) values ($session{form}{iid})"); @@ -129,6 +131,7 @@ sub www_editImageSave { WebGUI::SQL->write("update images set name=".quote($session{form}{name}). $sqlAdd.", parameters=".quote($session{form}{parameters}).", userId=$session{user}{userId}, ". " username=".quote($session{user}{username}). + ", imageGroupId=".$session{form}{gid}. ", dateUploaded=".time()." where imageId=$session{form}{iid}"); return www_listImages(); } else { @@ -138,14 +141,29 @@ sub www_editImageSave { #------------------------------------------------------------------- sub www_listImages { - my ($f, $output, $sth, %data, @row, $image, $p, $i, $search, $isAdmin); + my ($f, $output, $sth, %data, @row, $image, $p, $i, $search, $search_group, $imageGroupId, $isImageManager, $imageGroupParentId); tie %data, 'Tie::CPHash'; if (WebGUI::Privilege::isInGroup(4)) { + $isImageManager = WebGUI::Privilege::isInGroup(9); + if($session{form}{gid} ne "") { + $imageGroupId = $session{form}{gid}; + } else { + $imageGroupId = 0; + } + %data = WebGUI::SQL->quickHash("select parentId,name from imageGroup where imageGroupId=".$imageGroupId); + if($session{form}{pid} ne "") { + $imageGroupParentId = $session{form}{pid}; + } elsif($imageGroupId != 0) { + $imageGroupParentId = $data{parentId}; + } $output = helpIcon(26); - $output .= '

'.WebGUI::International::get(393).'

'; - $output .= ''; + $output .= '

'.WebGUI::International::get(393).' - '.$data{name}.'

'; + $output .= '
'; - $output .= ''.WebGUI::International::get(395).''; - $output .= '
'; + if($isImageManager) { + $output .= ''; + $output .= ''; + } $f = WebGUI::HTMLForm->new(1); $f->raw(''; + $row[$i] .= ''; + $row[$i] .= ''; # FIXME folder icon + $row[$i] .= ''; + $row[$i] .= ''; + $row[$i] .= ''; + $row[$i] .= ''; + $i++; + } + $sth = WebGUI::SQL->read("select * from imageGroup $search_group order by name"); + while (%data = $sth->hash) { + $row[$i] = ''; + $row[$i] .= ''; # FIXME folder icon + $row[$i] .= ''; + $row[$i] .= ''; + $row[$i] .= ''; + $row[$i] .= ''; + $i++; } - $isAdmin = WebGUI::Privilege::isInGroup(3); + $sth->finish; + # do images $sth = WebGUI::SQL->read("select * from images $search order by name"); while (%data = $sth->hash) { $image = WebGUI::Attachment->new($data{filename},"images",$data{imageId}); $row[$i] = ''; - $row[$i] .= ''; $row[$i] .= ''; @@ -198,7 +255,7 @@ sub www_viewImage { %data = WebGUI::SQL->quickHash("select * from images where imageId=$session{form}{iid}"); $image = WebGUI::Attachment->new($data{filename},"images",$data{imageId}); $output .= '

'.WebGUI::International::get(396).'

'; - $output .= ''.WebGUI::International::get(397).''; + $output .= ''.WebGUI::International::get(397).''; $f = WebGUI::HTMLForm->new; $f->readOnly($data{imageId},WebGUI::International::get(389)); $f->readOnly($data{name},WebGUI::International::get(383)); @@ -214,6 +271,118 @@ sub www_viewImage { } } +#------------------------------------------------------------------- +sub www_deleteImageGroup { + my ($output); + if (WebGUI::Privilege::isInGroup(9)) { + $output .= helpIcon(23); + $output .= '

'.WebGUI::International::get(42).'

'; + $output .= WebGUI::International::get(544).'

'; + $output .= '

'.WebGUI::International::get(44).''; + $output .= '    '. + WebGUI::International::get(45).'
'; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteImageGroupConfirm { + my ($image, %data); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(9)) { + # FIXME reparent all children of this group to this group's parent + # or delete all children....this would also have to delete all images + %data = WebGUI::SQL->quickHash("select parentId from imageGroup where imageGroupId=$session{form}{gid}"); + WebGUI::SQL->write("update images set imageGroupId=$data{parentId} where imageGroupId=$session{form}{gid}"); + WebGUI::SQL->write("update imageGroup set parentId=$data{parentId} where parentId=$session{form}{gid}"); + WebGUI::SQL->write("delete from imageGroup where imageGroupId=$session{form}{gid}"); + $session{form}{gid}=$session{form}{pid}; + return www_listImages(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editImageGroup { + my ($output, %data, %parent_data, $image, $f); + tie %data, 'Tie::CPHash'; + tie %parent_data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(9)) { + if ($session{form}{gid} eq "new") { + + } else { + %data = WebGUI::SQL->quickHash("select * from imageGroup where imageGroupId=$session{form}{gid}"); + } + %parent_data = WebGUI::SQL->quickHash("select name from imageGroup where imageGroupId=$data{parentId}"); + $output = helpIcon(20); + $output .= '

'.WebGUI::International::get(545).'

'; + $f = WebGUI::HTMLForm->new; + $f->hidden("op","editImageGroupSave"); + $f->hidden("gid",$session{form}{gid}); + $f->hidden("pid",$session{form}{pid}); #FIXME make this dropdown group tree + $f->readOnly($session{form}{gid},WebGUI::International::get(546)); + $f->readOnly($parent_data{name},WebGUI::International::get(547)); + $f->text("name",WebGUI::International::get(548),$data{name}); + $f->text("description",WebGUI::International::get(549),$data{description}); + $f->submit; + $output .= $f->print; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editImageGroupSave { + my ($test); + if (WebGUI::Privilege::isInGroup(9)) { + if ($session{form}{gid} eq "new") { + $session{form}{gid} = getNextId("imageGroupId"); + WebGUI::SQL->write("insert into imageGroup (imageGroupId) values ($session{form}{gid})"); + } + while (($test) = WebGUI::SQL->quickArray("select name from imageGroup + where name=".quote($session{form}{name})." and imageGroupId<>$session{form}{gid}")) { + if ($session{form}{name} =~ /(.*)(\d+$)/) { + $session{form}{name} = $1.($2+1); + } elsif ($test ne "") { + $session{form}{name} .= "2"; + } + } + WebGUI::SQL->write("update imageGroup set name=".quote($session{form}{name}). + ", parentId=".$session{form}{pid}.", description=".quote($session{form}{description}). + " where imageGroupId=$session{form}{gid}"); + return www_listImages(); + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_viewImageGroup { + my ($output, %data, %parent_data, $image,$f); + tie %data, 'Tie::CPHash'; + tie %parent_data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(4)) { + %data = WebGUI::SQL->quickHash("select * from imageGroup where imageGroupId=$session{form}{gid}"); + %parent_data = WebGUI::SQL->quickHash("select name from imageGroup where imageGroupId=".$data{parentId}); + $output .= '

'.WebGUI::International::get(550).'

'; + $output .= ''.WebGUI::International::get(397).''; + $f = WebGUI::HTMLForm->new; + $f->readOnly($data{imageGroupId},WebGUI::International::get(546)); + $f->readOnly($parent_data{name},WebGUI::International::get(547)); + $f->readOnly($data{name},WebGUI::International::get(548)); + $f->readOnly($data{description},WebGUI::International::get(549)); + $output .= $f->print; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} 1;
'.WebGUI::International::get(395).''; + $output .= ''.WebGUI::International::get(543).''); $f->hidden("op","listImages"); @@ -158,19 +176,58 @@ sub www_listImages { $search = " where (name like '%".$session{form}{keyword}. "%' or username like '%".$session{form}{keyword}. "%' or filename like '%".$session{form}{keyword}."%') "; + $search_group = " where (name like '%".$session{form}{keyword}. + "%' or description like '%".$session{form}{keyword}."%') and imageGroupId>0"; + } else { + $search = " where imageGroupId='".$imageGroupId."' "; + $search_group = " where parentId='".$imageGroupId."' and imageGroupId>0 "; + } + # do image groups + if($imageGroupId > 0) { # show previous link + $row[$i] = '
 ' + .' '.WebGUI::International::get(542).'    
'; + if ($isImageManager) { + $row[$i] .= deleteIcon('op=deleteImageGroup&gid='.$data{imageGroupId}.'&pid='.$imageGroupId); + $row[$i] .= editIcon('op=editImageGroup&gid='.$data{imageGroupId}.'&pid='.$imageGroupId); + } + $row[$i] .= viewIcon('op=viewImageGroup&gid='.$data{imageGroupId}.'&pid='.$imageGroupId); + $row[$i] .= '' + .' '.$data{name}.''.$data{description}.'    
'; - if ($session{user}{userId} == $data{userId} || $isAdmin) { - $row[$i] .= deleteIcon('op=deleteImage&iid='.$data{imageId}); - $row[$i] .= editIcon('op=editImage&iid='.$data{imageId}); + if ($isImageManager) { + $row[$i] .= deleteIcon('op=deleteImage&iid='.$data{imageId}.'&gid='.$data{imageGroupId}); + $row[$i] .= editIcon('op=editImage&iid='.$data{imageId}.'&gid='.$data{imageGroupId}); } - $row[$i] .= viewIcon('op=viewImage&iid='.$data{imageId}); + $row[$i] .= viewIcon('op=viewImage&iid='.$data{imageId}.'&gid='.$data{imageGroupId}); $row[$i] .= ''; $row[$i] .= ''.$data{name}.''.$data{username}.'