OSDN Git Service

NP_gallery v0.95
[nucleus-jp/nucleus-plugins.git] / NP_gallery / tags / v0.95 / NP_gallery.php
diff --git a/NP_gallery/tags/v0.95/NP_gallery.php b/NP_gallery/tags/v0.95/NP_gallery.php
new file mode 100644 (file)
index 0000000..c206505
--- /dev/null
@@ -0,0 +1,697 @@
+<?php\r
+/*\r
+NP_Gallery\r
+Gallery Plugin for nucleus cms http://nucleuscms.org\r
+\r
+Security fix in 0.95 by Katsumi\r
+http://sourceforge.jp/projects/nucleus-jp/svn/view/plugin/NP_gallery/trunk/\r
+\r
+*/\r
+\r
+\r
+include_once(dirname(__FILE__).'/gallery/config.php');\r
+\r
+class NP_gallery extends NucleusPlugin {\r
+\r
+       /*\r
+       var $currentPage; \r
+       var $currentPageID; \r
+       var $currentPageOpt; \r
+*/\r
+\r
+       function getName() {return 'Nucleus Image Gallery';}\r
+       function getAuthor()  { return 'John Bradshaw, Gene Cambridge Tsai';    }\r
+       function getURL()       { return 'http://www.sircambridge.net/nucleus/index.php?itemid=57';     }\r
+       function getVersion() { return '0.95'; }\r
+       function getDescription() { return 'Image Gallery for Nucleus CMS';     }\r
+       function supportsFeature($what) { switch($what) {\r
+               case 'SqlTablePrefix': return 1; break;\r
+               case 'HelpPage': return 1; break;\r
+               default: return 0; break;\r
+               }\r
+       }\r
+\r
+       function getTableList() {\r
+               return array(sql_table('plug_gallery_album'), \r
+               sql_table('plug_gallery_picture'), \r
+               sql_table('plug_gallery_template'), \r
+               sql_table('plug_gallery_config'), \r
+               sql_table('plug_gallery_comment'), \r
+               sql_table('plug_gallery_album_team'), \r
+               sql_table('plug_gallery_member'), \r
+               sql_table('plug_gallery_promo'), \r
+               sql_table('plug_gallery_views'), \r
+               sql_table('plug_gallery_views_log'), \r
+               sql_table('plug_gallery_picturetags') );\r
+       }\r
+\r
+       function getEventList() {\r
+               return array('QuickMenu','PreItem');\r
+       }\r
+       \r
+       function hasAdminArea() {\r
+               return 1;\r
+       }\r
+       \r
+       function event_QuickMenu(&$data) {\r
+               global $member;\r
+\r
+               if (!($member->isLoggedIn() )) return;\r
+               array_push(\r
+                       $data['options'], \r
+                       array(\r
+                               'title' => 'gallery',\r
+                               'url' => $this->getAdminURL(),\r
+                               'tooltip' => 'NP Gallery admin'\r
+                       )\r
+               );\r
+       }\r
+       \r
+       function event_PreItem(&$data) {\r
+               \r
+               $actions = new NPG_EXT_ITEM_ACTIONS();\r
+               $parser = new NPG_PREPARSER($actions->getdefinedActions(),$actions);\r
+               $actions->setparser($parser);\r
+               \r
+               //pre-parse item body\r
+               ob_start();\r
+               $parser->parse($data['item']->body);\r
+               $data['item']->body = ob_get_contents();\r
+               ob_end_clean();\r
+               \r
+               //pre-parse item more\r
+               ob_start();\r
+               $parser->parse($data['item']->more);\r
+               $data['item']->more = ob_get_contents();\r
+               ob_end_clean();\r
+               \r
+       }\r
+       \r
+\r
+       function install() {\r
+               global $NPG_CONF,$DIR_NUCLEUS;\r
+               \r
+               $this->createOption('deletetables',__NPG_OPT_DONT_DELETE_TABLES,'yesno','no'); \r
+               \r
+               //create tables\r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_album').' ( '.\r
+                               'albumid int unsigned not null auto_increment PRIMARY KEY, '.\r
+                               'title varchar(255), '.\r
+                               'description varchar(255), '.\r
+                               'ownerid int unsigned , '.\r
+                               'modified TIMESTAMP, '.\r
+                               'numberofimages int unsigned, '.\r
+                               "thumbnail varchar(100), ".\r
+                               'commentsallowed tinyint DEFAULT 1 ) ';\r
+               sql_query($query);\r
+               // code to update table to have publicalbum field\r
+               $query = 'SHOW COLUMNS FROM '.sql_table('plug_gallery_album').' LIKE "publicalbum"';\r
+               $result = sql_query($query);\r
+               if (mysql_num_rows($result) == 0){\r
+                               //if it doesnt exist, add it (there must be a better way to do this via SQL syntax, but i couldnt figure it out)\r
+                               $query = 'ALTER TABLE '. sql_table('plug_gallery_album').\r
+                                               ' ADD COLUMN publicalbum tinyint DEFAULT 1 AFTER commentsallowed';\r
+                               sql_query($query);\r
+               }\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_picture').' ( '.\r
+                               'pictureid int unsigned not null auto_increment PRIMARY KEY, '.\r
+                               'title varchar(255), '.\r
+                               'description varchar(255), '.\r
+                               'ownerid int unsigned , '.\r
+                               'modified TIMESTAMP, '.\r
+                               'albumid int unsigned, '.\r
+                               'filename varchar(255), '.\r
+                               'int_filename varchar(255), '.\r
+                               'thumb_filename varchar(255) ) ';\r
+               sql_query($query);\r
+               \r
+               //add the picturesets column after thumb_filename for people upgrading\r
+               //first test if the picturesets column exists\r
+               $query = 'SHOW COLUMNS FROM '.sql_table('plug_gallery_picture').' LIKE "keywords"';\r
+               $result = sql_query($query);\r
+               if (mysql_num_rows($result) == 0){\r
+                               //if it doesnt exist, add it (there must be a better way to do this via SQL syntax, but i couldnt figure it out)\r
+                               $query = 'ALTER TABLE '. sql_table('plug_gallery_picture').\r
+                                               ' ADD COLUMN keywords varchar(255) AFTER thumb_filename';\r
+                               sql_query($query);\r
+               }\r
+               // this is to change the descriptions to have text up to 64k characters instead of 255 characters.\r
+               //had to put it here in case someone is upgrading.\r
+               $query = 'ALTER TABLE '. sql_table('plug_gallery_picture').\r
+                                ' MODIFY description TEXT';\r
+               sql_query($query);\r
+\r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_template').' ( '.\r
+                               'tdesc int unsigned, '.\r
+                               'name varchar(20), '.\r
+                               'content text ) ';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_template_desc').' ( '.\r
+                               'tdid int unsigned not null auto_increment PRIMARY KEY, '.\r
+                               'tdname varchar(20), '.\r
+                               'tddesc varchar(200) )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_config').' ( '.\r
+                               'oname varchar(20), ovalue varchar(60) )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_album_team').' ( '.\r
+                               'tmemberid int unsigned not null, '.\r
+                               'talbumid int unsigned not null, '.\r
+                               'tadmin tinyint DEFAULT 0 )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_member').' ( '.\r
+                               'memberid int unsigned not null PRIMARY KEY, '.\r
+                               'addalbum tinyint DEFAULT 0 )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_comment').' ( '.\r
+                               'commentid int unsigned not null auto_increment PRIMARY KEY, '.\r
+                               'cbody text, '.\r
+                               'cuser varchar(40), '.\r
+                               'cmail varchar(100), '.\r
+                               'chost varchar(60), '.\r
+                               'cip varchar(15), '.\r
+                               'cmemberid int unsigned default 0, '.\r
+                               'ctime timestamp, '.\r
+                               'cpictureid int not null )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_promo').' ( '.\r
+                               'ppictureid int unsigned not null, '.\r
+                               'pblogitemid int unsigned not null )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_views').' ( '.\r
+                               'vpictureid int unsigned not null PRIMARY KEY, '.\r
+                               'views int unsigned )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_views_log').' ( '.\r
+                               'vlpictureid int unsigned not null, '.\r
+                               'ip varchar(20), '.\r
+                               'time timestamp )';\r
+               sql_query($query);\r
+               \r
+               $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_picturetag').' ( '.\r
+                               '`pictureid` VARCHAR( 255 ) NOT NULL , '.\r
+                               '`top` VARCHAR( 255 ) NOT NULL ,'.\r
+                               '`left` VARCHAR( 255 ) NOT NULL ,'.\r
+                               '`height` VARCHAR( 255 ) NOT NULL ,'.\r
+                               '`width` VARCHAR( 255 ) NOT NULL ,'.\r
+                               '`text` VARCHAR( 255 ) NOT NULL )';\r
+               sql_query($query);\r
+               \r
+               //set default options\r
+               $NPG_CONF = getNPGconfig();\r
+\r
+               if(!$NPG_CONF['viewtime']) setNPGoption('viewtime', 30);\r
+               setNPGoption('currentversion',94);\r
+               \r
+               if(!$NPG_CONF['im_path']) setNPGoption('im_path','/usr/local/bin/'); // currently needs to have trailing slash, need to change to be consistent\r
+               if(!$NPG_CONF['im_options']) setNPGoption('im_options', '-filter Lanczos');\r
+               if(!$NPG_CONF['im_quality']) setNPGoption('im_quality', '80');\r
+               if(!$NPG_CONF['graphics_library']) {\r
+                       if (GDisPresent()) {\r
+                               setNPGoption('graphics_library', 'gd'); \r
+                       } else if (IMisPresent()) {\r
+                               setNPGoption('graphics_library', 'im');\r
+                               setNPGoption('im_version', getIMversion());\r
+                       } else {\r
+                               setNPGoption('graphics_library', 'not configured');\r
+                               setNPGoption('configured', false);\r
+                       }\r
+               }\r
+               \r
+\r
+               if(!$NPG_CONF['galleryDir']) setNPGoption('galleryDir', 'media/gallery'); //when adding, need to make sure that no trailing slash\r
+               if(!$NPG_CONF['thumbwidth']) setNPGoption('thumbwidth', '100');\r
+               if(!$NPG_CONF['thumbheight']) setNPGoption('thumbheight', '100');\r
+               if(!$NPG_CONF['maxwidth']) setNPGoption('maxwidth', '600');\r
+               if(!$NPG_CONF['maxheight']) setNPGoption('maxheight', '600');\r
+               if(!$NPG_CONF['int_prefix']) setNPGoption('int_prefix', 'int_');\r
+               if(!$NPG_CONF['thumb_prefix']) setNPGoption('thumb_prefix', 'thumb_');\r
+               \r
+               if(!$NPG_CONF['max_filesize']) setNPGOption('max_filesize', '2000000');\r
+               if(!$NPG_CONF['add_album']) setNPGOption('add_album', 'admin_only');\r
+               if(!$NPG_CONF['batch_add_num']) setNPGOption('batch_add_num', '10');\r
+               if(!$NPG_CONF['dateorrandom']) setNPGOption('dateorrandom', 'randomprefix');\r
+               if(!$NPG_CONF['tooltips']) setNPGOption('tooltips', 'no');\r
+               if(!$NPG_CONF['nextprevthumb']) setNPGOption('nextprevthumb', 'no');\r
+               if(!$NPG_CONF['defaultorder']) setNPGOption('defaultorder', 'aesc');\r
+               if(!$NPG_CONF['setorpromo']) setNPGOption('setorpromo', 'promo');\r
+               if(!$NPG_CONF['slideshowson']) setNPGOption('slideshowson', 'no');\r
+               if(!$NPG_CONF['thumborlist']) setNPGOption('thumborlist', 'list');\r
+\r
+\r
+               \r
+               \r
+\r
+               \r
+\r
+               $chk = checkgalleryconfig();\r
+               if($chk['configured'] == false) setNPGoption('configured',false); else setNPGoption('configured',true);\r
+               \r
+               //?create skin NPGallery or make user do it\r
+                               \r
+               //set default templates\r
+               //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_076.inc');\r
+               //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_080.inc');\r
+               //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_090.inc');\r
+               include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_094.inc');\r
+       }\r
+       \r
+       function unInstall() {\r
+               if ($this->getOption('deletetables') == 'yes') { \r
+                       \r
+                       //delete promo posts\r
+                       $query = 'select pictureid from '.sql_table('plug_gallery_picture');\r
+                       $res = sql_query($query);\r
+                       while($row = mysql_fetch_object($res)) {\r
+                               PICTURE::deletepromoposts($res->pictureid);\r
+                       }\r
+                       \r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_album'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_picture'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_template'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_template_desc'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_config'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_album_team'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_member'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_comment'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_promo'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_views'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_views_log'));\r
+                       sql_query('DROP TABLE '.sql_table('plug_gallery_picturetag'));\r
+                       \r
+               }\r
+       }\r
+\r
+       function doAction($type) {\r
+               global $gmember, $CONF, $NPG_CONF;\r
+               global $skinid,$manager,$blog,$blogid;\r
+               \r
+               switch($type) {\r
+                       /*\r
+                       //display -- these are done in doSkinVar\r
+                       case 'mostviewed':\r
+                       case 'album':\r
+                       case 'item':\r
+                       case 'deletePictureF': \r
+                       case 'editPictureF':\r
+                       case 'addPictF':\r
+                               $this->currentPage = $type;\r
+                               $this->currentPageID = requestVar('id');\r
+                               break;\r
+                       case 'list':\r
+                               $this->currentPage = $type;\r
+                               $this->currentPageOpt = requestVar('sort');\r
+                               break;\r
+                       case 'addAlbumF': \r
+                               $this->currentPage = $type;\r
+                               break;\r
+                       */\r
+                       //these are the actions, done here, then currentpage is set and skin called to display something\r
+                       case 'addcomment': \r
+                               global $CONF;\r
+\r
+                               $post['itemid'] =       intPostVar('itemid');\r
+                               $post['user'] =         postVar('user');\r
+                               $post['userid'] =       postVar('userid');\r
+                               $post['body'] =         postVar('body');\r
+\r
+                               // set cookies when required\r
+                               $remember = intPostVar('remember');\r
+                               if ($remember == 1) {\r
+                                       $lifetime = time()+2592000;\r
+                                       setcookie($CONF['CookiePrefix'] . 'comment_user',$post['user'],$lifetime,'/','',0);\r
+                                       setcookie($CONF['CookiePrefix'] . 'comment_userid', $post['userid'],$lifetime,'/','',0);\r
+                               }\r
+\r
+                               $comments = new NPG_COMMENTS($post['itemid']);\r
+\r
+                               $errormessage = $comments->addComment($post);\r
+                               \r
+                               //need to add code to display the error\r
+                               if ($errormessage == '1') {\r
+                                       $_POST['id'] = $post['itemid'];\r
+                               } \r
+                               /*\r
+                               else {\r
+                                       $this->currentPage = 'list';\r
+                                       $this->currentPageOpt = 'date';\r
+                               }\r
+                               */\r
+                               break;\r
+                       case 'addAlbum':\r
+                               if($gmember->canAddAlbum() ){\r
+                                       $NPG_vars['ownerid'] = $gmember->getID();\r
+                                       $NPG_vars['title'] = requestVar('title'); \r
+                                       $NPG_vars['description'] = requestVar('desc');\r
+                                       $NPG_vars['publicalbum'] = requestVar('publicalbum');\r
+                                       ALBUM::add_new($NPG_vars);\r
+                               }\r
+                               break;\r
+                       case 'finaldeletepicture':\r
+                               $id = requestVar('id');\r
+                               $delpromo = requestVar('delpromo');\r
+                               if($gmember->canModifyPicture($id)) {\r
+                                       \r
+                                       $manager->notify('NPgPreDeletePicture', array('pictureid' => $id));\r
+                                       $result = PICTURE::delete($id);\r
+                                       \r
+                                       if($result['status'] == 'error') {\r
+                                               echo $result['message'];\r
+                                       }\r
+                                       else {\r
+                                               $manager->notify('NPgPostDeletePicture', array('pictureid' => $id));\r
+                                               \r
+                                               if($delpromo == 'yes') {\r
+                                                       $result2 = PICTURE::deletepromoposts($id);\r
+                                                       if($result2['status'] == 'error') echo $result2['message'];\r
+                                               }\r
+                                               else {\r
+                                                       $_POST['id'] = $result['albumid'];\r
+                                               }\r
+                                       }\r
+                               } else echo 'No permission to delete picture<br/>';\r
+                               break;\r
+                       case 'editPicture':\r
+                               $id = requestVar('id');\r
+                               if($gmember->canModifyPicture($id)) {\r
+                                       $pict = new PICTURE($id);\r
+                                       $pict->setTitle(requestVar('ptitle'));\r
+                                       $pict->setDescription(requestVar('pdesc'));\r
+                                       $pict->setkeywords(requestVar('keywords'));\r
+                                       $aid = requestVar('aid');\r
+                                       if($aid && $gmember->canAddPicture($aid)) {\r
+                                               ALBUM::decreaseNumberByOne($pict->getAlbumID());\r
+                                               ALBUM::increaseNumberByOne($aid);\r
+                                               $pict->setAlbumID($aid);\r
+                                       }\r
+                                       $pict->write();\r
+                                       echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
+                                       window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $id . "\"" .\r
+                                       "</script>";\r
+                                       break;\r
+                                       $manager->notify('NPgPostUpdatePicture',array('picture', &$pict));\r
+                               }\r
+                       case 'tagaccept' :\r
+                               $Pos1x = requestVar('Pos1x');\r
+                               $Pos1y = requestVar('Pos1y');\r
+                               $Pos2x = requestVar('Pos2x');\r
+                               $Pos2y = requestVar('Pos2y');\r
+                               $RelX = requestVar('RelX');\r
+                               $pictureid = requestVar('pictureid');\r
+                               $RelY = requestVar('RelY');\r
+                               $desc = requestVar('desc');\r
+                               $left = $Pos1x - $RelX;\r
+                               $top = $Pos1y - $RelY;\r
+                               $width = $Pos2x - $Pos1x;\r
+                               $height = $Pos2y - $Pos1y;\r
+                               $text = $desc;\r
+                               //these lines should be moved into picture_class.php\r
+                               sql_query("INSERT INTO ".sql_table('plug_gallery_picturetag')." ( `pictureid` , `top` , `left` , `height` , `width` , `text` )\r
+                               VALUES ( '" . addslashes($pictureid) ." ', '" .addslashes($top)."', '" .addslashes($left)." ' , '" .addslashes($height)."' , '" .addslashes($width)."' , '" .addslashes($text)."' ); ");\r
+                               echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
+                               window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $pictureid . "\"" .\r
+                               "</script>";\r
+                               break;\r
+                       case 'tagdelete' :\r
+                               $pictureid = requestVar('pictureid');\r
+                               //these lines should be moved into picture_class.php\r
+                               sql_query("DELETE FROM ".sql_table('plug_gallery_picturetag'). " WHERE `pictureid` = '" . addslashes($pictureid) . "' LIMIT 1; ");\r
+                               echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
+                               window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $pictureid . " \"" .\r
+                               "</script>";\r
+                               break;\r
+                       // this is done in editpicture now.\r
+                       //case 'updatesets':\r
+                               //$id = requestVar('id');\r
+                               //$setname = requestVar('setname');\r
+                               //$pict = new PICTURE($id);\r
+                               //$pict->addtoset($id,$setname);\r
+                               //$pict->write();\r
+                               //$manager->notify('NPgPostUpdatePicture',array('picture', &$pict));\r
+                               //break;\r
+                       default: \r
+                       break;\r
+               }\r
+\r
+               if (!$blogid)\r
+               $blogid = $CONF['DefaultBlog'];\r
+\r
+               $b =& $manager->getBlog($blogid);\r
+               $blog = $b;\r
+               \r
+               selectSkin('NPGallery');\r
+               \r
+               $skin =& new SKIN($skinid);\r
+               $skin->parse('index');\r
+       }\r
+       \r
+       \r
+       function doSkinVar() {\r
+               global $NPG_CONF, $gmember, $manager;\r
+               \r
+               $params = func_get_args();\r
+               $numargs = func_num_args();\r
+               $skinType = $params[0];\r
+               \r
+               $type = requestvar('type');\r
+               $id = requestvar('id');\r
+               $startstop = requestvar('startstop');\r
+               $sliderunning = requestvar('sliderunning');\r
+               \r
+               $defaulttoitem = array('editPicture','addcomment');\r
+               $defaulttolist = array('addAlbum');\r
+               $defaulttoalbum = array('finaldeletepicture');\r
+               if(in_array($type,$defaulttoitem)) $type = 'item';\r
+               \r
+               switch($params[1]) {\r
+                       case 'link':\r
+                               if($numargs >= 3) {\r
+                                       switch($params[2]) {\r
+                                               case 'picture': echo generatelink('item',$params[3]); break;\r
+                                               case 'album': echo generateLink('album',$params[3]); break;\r
+                                               default: echo generateLink('list'); break;\r
+                                       }\r
+                               } else echo generateLink('list');\r
+                               break;\r
+                       default:\r
+                               //things to display\r
+                               \r
+                               if(!$NPG_CONF['configured']) {\r
+                                       echo __NPG_ERR_GALLLERY_NOT_CONFIG;\r
+                                       break;\r
+                               }\r
+                               \r
+                               //plugin hook for collections\r
+                               $hookquery = '';\r
+                               $hooktitle = '';\r
+                               $manager->notify('NPgCollectionDisplay', array('type' => $type, 'query' => &$hookquery , 'title' => &$hooktitle) );\r
+                               if($hookquery) {\r
+                                       if ($id == 0) {\r
+                                               $collection = new ALBUM();\r
+                                               $collection->setquery($hookquery);\r
+                                               $collection->set_title($hooktitle);\r
+                                               $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                               $collection->settemplate($t);\r
+                                               $collection->display();\r
+                                       }\r
+                                       else {\r
+                                               $pict = new PICTURE($id);\r
+                                               $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                               $pict->setalbumtitle($hooktitle);\r
+                                               $pict->settemplate($t);\r
+                                               $pict->setquery($hookquery);\r
+                                               $pict->display();\r
+                                       }\r
+                                       $type = 'nothing';\r
+                               }\r
+                               \r
+                               //other pages\r
+                               switch($type) {\r
+                                       case 'album': \r
+                                               $alb = new ALBUM($id);\r
+                                               if($alb->getID()) {\r
+                                                       $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                                       $alb->settemplate($t);\r
+                                                       $alb->display(requestVar('sort'));\r
+                                               }\r
+                                               else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
+                                               break;\r
+                                       //case 'set': \r
+                                       //      $setid = $id;\r
+                                       //      $alb = new ALBUM($setid);\r
+                                               //this should work, but not sure what $alb->getID() does...\r
+                                       //      if($alb->getID()) {\r
+                                       //              $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                       //              $alb->settemplate($t);\r
+                                       //              $alb->displayset(requestVar('sort'));\r
+                                       //      }\r
+                                       //      else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
+                                       //      break;\r
+                                       case 'item': \r
+                                               $pict = new PICTURE($id);\r
+                                               if($pict->getID()) {\r
+                                                       $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                                       $pict->settemplate($t);\r
+                                                       $pict->display($startstop,$sliderunning);\r
+                                               }\r
+                                               else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
+                                               break;\r
+                                       case 'list': \r
+                                               $l = new GALLERY_LIST();\r
+                                               $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                               $l->settemplate($t);\r
+                                               $l->display(requestVar('sort')); \r
+                                               break;\r
+                                       case 'addAlbumF': \r
+                                               addAlbumForm();\r
+                                               break;\r
+                                       case 'editAlbumF': \r
+                                               editAlbumForm($id);\r
+                                               break;\r
+                                       case 'editPictureF':\r
+                                               editPictureForm($id);\r
+                                               break;\r
+                                       case 'deletePictureF':\r
+                                               deletePictureForm($id);\r
+                                               break;\r
+                                       case 'addPictF': \r
+                                               addPictureForm($id);\r
+                                               break;\r
+                                       case 'nothing':\r
+                                               break;\r
+                                       default: \r
+                                               $l = new GALLERY_LIST();\r
+                                               $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                                               $l->settemplate($t);\r
+                                               $l->display(requestvar('sort')); \r
+                                               break;\r
+                               }\r
+                               \r
+                               break;\r
+               }\r
+       }\r
+       \r
+       function MakeLink($type, $extraparams = array()) {\r
+               global $CONF;\r
+               \r
+               if($CONF['URLMode'] == 'pathinfo') { \r
+                       //fancy URLs having problems, so I changed it to revert back to regular URLS.\r
+                       //$base = '/gallery/';\r
+                       //$sep1 = '/';\r
+                       //$sep2 = '/';\r
+                       $base = 'action.php?action=plugin&name=gallery&type=';\r
+                       $sep1 = '&';\r
+                       $sep2 = '=';\r
+               }\r
+               else {\r
+                       $base = 'action.php?action=plugin&name=gallery&type=';\r
+                       $sep1 = '&';\r
+                       $sep2 = '=';            \r
+               }\r
+               //if extraparams is assoc array\r
+               if(is_array($extraparams) && array_keys($extraparams)!==range(0,sizeof($extraparams)-1)) {\r
+                       foreach($extraparams as $key => $value) \r
+                               $extra = $extra . $sep1 . $key . $sep2 . $value;\r
+                       }\r
+               return $base.$type.$extra;\r
+\r
+\r
+       }\r
+       \r
+       function MakeLinkRaw($base, $extraparams = '') {\r
+               global $CONF;\r
+               \r
+               if($CONF['URLMode'] == 'pathinfo') {\r
+                       $sep1 = '/';\r
+                       $sep2 = '/';\r
+               }\r
+               else {\r
+                       $sep1 = '&amp;';\r
+                       $sep2 = '=';\r
+               }\r
+               foreach($extraparams as $key => $value) $extra = $extra . $sep1 . $key . $sep2 .$value;\r
+               return $base.$extra;\r
+       }\r
+}\r
+\r
+class NPG_PREPARSER extends PARSER {\r
+       \r
+       function doAction($action) {\r
+                if (!$action) return;\r
+                $action_raw = '<%'.$action.'%>';\r
+                \r
+               // split into action name + arguments\r
+               if (strstr($action,'(')) {\r
+                       $paramStartPos = strpos($action, '(');\r
+                       $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2);\r
+                       $action = substr($action, 0, $paramStartPos);\r
+                       $params = explode ($this->pdelim, $params);\r
+                       $params = array_map('trim',$params);\r
+               } else {\r
+                       $params = array();\r
+               }\r
+\r
+               $actionlc = strtolower($action);\r
+\r
+               if (in_array($actionlc, $this->actions) || $this->norestrictions ) {\r
+                       call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params);\r
+               } else {\r
+                       echo $action_raw;\r
+               }\r
+\r
+        }\r
+        \r
+        \r
+}\r
+\r
+class NPG_EXT_ITEM_ACTIONS extends BaseActions {\r
+       var $parser;\r
+       \r
+       function NPG_EXT_ACTIONS() {\r
+               $this->BaseActions();\r
+       }\r
+       \r
+       function getdefinedActions() {\r
+               return array( 'gallery' );\r
+       }\r
+       \r
+       function setParser(&$parser) {$this->parser =& $parser; }\r
+       \r
+       function parse_gallery($param1, $param2, $param3) {\r
+               if($param1 == 'link') {\r
+                       if($param2 == 'picture') {\r
+                               $param3 = intval($param3);\r
+                               echo generatelink('item',$param3);\r
+                       }\r
+                       else if($param2 == 'album') {\r
+                               $param3 = intval($param3);\r
+                               echo generatelink('album',$param3);\r
+                       }\r
+                       else echo '<b>NOT HERE</b>';\r
+               }\r
+               if($param1 == 'keywords') {\r
+                       $setid = $param2;\r
+                       $splitdata = explode(' and ',$setid);\r
+                       $sort = $param3;\r
+                       //$alb = new ALBUM($id);\r
+                       //if($alb->getID()) {\r
+                       //$t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                       //$alb->settemplate($t);\r
+                       //$alb->display(requestVar('sort'));\r
+                       $thisset = new ALBUM;\r
+                       $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
+                       $thisset->settemplate($t);\r
+                       $thisset->displayset($splitdata,$sort);\r
+               }\r
+       }\r
+}\r
+?>\r