OSDN Git Service

Modified for security.
[nucleus-jp/nucleus-plugins.git] / NP_gallery / trunk / NP_gallery.php
1 <?php\r
2 /*\r
3 NP_Gallery\r
4 Gallery Plugin for nucleus cms http://nucleuscms.org\r
5 \r
6 Security fix in 0.95 by Katsumi\r
7 http://sourceforge.jp/projects/nucleus-jp/svn/view/plugin/NP_gallery/trunk/\r
8 \r
9 */\r
10 \r
11 \r
12 include_once(dirname(__FILE__).'/gallery/config.php');\r
13 \r
14 class NP_gallery extends NucleusPlugin {\r
15 \r
16         /*\r
17         var $currentPage; \r
18         var $currentPageID; \r
19         var $currentPageOpt; \r
20 */\r
21 \r
22         function getName() {return 'Nucleus Image Gallery';}\r
23         function getAuthor()  { return 'John Bradshaw, Gene Cambridge Tsai';    }\r
24         function getURL()       { return 'http://www.sircambridge.net/nucleus/index.php?itemid=57';     }\r
25         function getVersion() { return '0.95'; }\r
26         function getDescription() { return 'Image Gallery for Nucleus CMS';     }\r
27         function supportsFeature($what) { switch($what) {\r
28                 case 'SqlTablePrefix': return 1; break;\r
29                 case 'HelpPage': return 1; break;\r
30                 default: return 0; break;\r
31                 }\r
32         }\r
33 \r
34         function getTableList() {\r
35                 return array(sql_table('plug_gallery_album'), \r
36                 sql_table('plug_gallery_picture'), \r
37                 sql_table('plug_gallery_template'), \r
38                 sql_table('plug_gallery_config'), \r
39                 sql_table('plug_gallery_comment'), \r
40                 sql_table('plug_gallery_album_team'), \r
41                 sql_table('plug_gallery_member'), \r
42                 sql_table('plug_gallery_promo'), \r
43                 sql_table('plug_gallery_views'), \r
44                 sql_table('plug_gallery_views_log'), \r
45                 sql_table('plug_gallery_picturetags') );\r
46         }\r
47 \r
48         function getEventList() {\r
49                 return array('QuickMenu','PreItem');\r
50         }\r
51         \r
52         function hasAdminArea() {\r
53                 return 1;\r
54         }\r
55         \r
56         function event_QuickMenu(&$data) {\r
57                 global $member;\r
58 \r
59                 if (!($member->isLoggedIn() )) return;\r
60                 array_push(\r
61                         $data['options'], \r
62                         array(\r
63                                 'title' => 'gallery',\r
64                                 'url' => $this->getAdminURL(),\r
65                                 'tooltip' => 'NP Gallery admin'\r
66                         )\r
67                 );\r
68         }\r
69         \r
70         function event_PreItem(&$data) {\r
71                 \r
72                 $actions = new NPG_EXT_ITEM_ACTIONS();\r
73                 $parser = new NPG_PREPARSER($actions->getdefinedActions(),$actions);\r
74                 $actions->setparser($parser);\r
75                 \r
76                 //pre-parse item body\r
77                 ob_start();\r
78                 $parser->parse($data['item']->body);\r
79                 $data['item']->body = ob_get_contents();\r
80                 ob_end_clean();\r
81                 \r
82                 //pre-parse item more\r
83                 ob_start();\r
84                 $parser->parse($data['item']->more);\r
85                 $data['item']->more = ob_get_contents();\r
86                 ob_end_clean();\r
87                 \r
88         }\r
89         \r
90 \r
91         function install() {\r
92                 global $NPG_CONF,$DIR_NUCLEUS;\r
93                 \r
94                 $this->createOption('deletetables',__NPG_OPT_DONT_DELETE_TABLES,'yesno','no'); \r
95                 \r
96                 //create tables\r
97                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_album').' ( '.\r
98                                 'albumid int unsigned not null auto_increment PRIMARY KEY, '.\r
99                                 'title varchar(255), '.\r
100                                 'description varchar(255), '.\r
101                                 'ownerid int unsigned , '.\r
102                                 'modified TIMESTAMP, '.\r
103                                 'numberofimages int unsigned, '.\r
104                                 "thumbnail varchar(100), ".\r
105                                 'commentsallowed tinyint DEFAULT 1 ) ';\r
106                 sql_query($query);\r
107                 // code to update table to have publicalbum field\r
108                 $query = 'SHOW COLUMNS FROM '.sql_table('plug_gallery_album').' LIKE "publicalbum"';\r
109                 $result = sql_query($query);\r
110                 if (mysql_num_rows($result) == 0){\r
111                                 //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
112                                 $query = 'ALTER TABLE '. sql_table('plug_gallery_album').\r
113                                                 ' ADD COLUMN publicalbum tinyint DEFAULT 1 AFTER commentsallowed';\r
114                                 sql_query($query);\r
115                 }\r
116                 \r
117                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_picture').' ( '.\r
118                                 'pictureid int unsigned not null auto_increment PRIMARY KEY, '.\r
119                                 'title varchar(255), '.\r
120                                 'description varchar(255), '.\r
121                                 'ownerid int unsigned , '.\r
122                                 'modified TIMESTAMP, '.\r
123                                 'albumid int unsigned, '.\r
124                                 'filename varchar(255), '.\r
125                                 'int_filename varchar(255), '.\r
126                                 'thumb_filename varchar(255) ) ';\r
127                 sql_query($query);\r
128                 \r
129                 //add the picturesets column after thumb_filename for people upgrading\r
130                 //first test if the picturesets column exists\r
131                 $query = 'SHOW COLUMNS FROM '.sql_table('plug_gallery_picture').' LIKE "keywords"';\r
132                 $result = sql_query($query);\r
133                 if (mysql_num_rows($result) == 0){\r
134                                 //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
135                                 $query = 'ALTER TABLE '. sql_table('plug_gallery_picture').\r
136                                                 ' ADD COLUMN keywords varchar(255) AFTER thumb_filename';\r
137                                 sql_query($query);\r
138                 }\r
139                 // this is to change the descriptions to have text up to 64k characters instead of 255 characters.\r
140                 //had to put it here in case someone is upgrading.\r
141                 $query = 'ALTER TABLE '. sql_table('plug_gallery_picture').\r
142                                  ' MODIFY description TEXT';\r
143                 sql_query($query);\r
144 \r
145                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_template').' ( '.\r
146                                 'tdesc int unsigned, '.\r
147                                 'name varchar(20), '.\r
148                                 'content text ) ';\r
149                 sql_query($query);\r
150                 \r
151                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_template_desc').' ( '.\r
152                                 'tdid int unsigned not null auto_increment PRIMARY KEY, '.\r
153                                 'tdname varchar(20), '.\r
154                                 'tddesc varchar(200) )';\r
155                 sql_query($query);\r
156                 \r
157                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_config').' ( '.\r
158                                 'oname varchar(20), ovalue varchar(60) )';\r
159                 sql_query($query);\r
160                 \r
161                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_album_team').' ( '.\r
162                                 'tmemberid int unsigned not null, '.\r
163                                 'talbumid int unsigned not null, '.\r
164                                 'tadmin tinyint DEFAULT 0 )';\r
165                 sql_query($query);\r
166                 \r
167                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_member').' ( '.\r
168                                 'memberid int unsigned not null PRIMARY KEY, '.\r
169                                 'addalbum tinyint DEFAULT 0 )';\r
170                 sql_query($query);\r
171                 \r
172                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_comment').' ( '.\r
173                                 'commentid int unsigned not null auto_increment PRIMARY KEY, '.\r
174                                 'cbody text, '.\r
175                                 'cuser varchar(40), '.\r
176                                 'cmail varchar(100), '.\r
177                                 'chost varchar(60), '.\r
178                                 'cip varchar(15), '.\r
179                                 'cmemberid int unsigned default 0, '.\r
180                                 'ctime timestamp, '.\r
181                                 'cpictureid int not null )';\r
182                 sql_query($query);\r
183                 \r
184                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_promo').' ( '.\r
185                                 'ppictureid int unsigned not null, '.\r
186                                 'pblogitemid int unsigned not null )';\r
187                 sql_query($query);\r
188                 \r
189                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_views').' ( '.\r
190                                 'vpictureid int unsigned not null PRIMARY KEY, '.\r
191                                 'views int unsigned )';\r
192                 sql_query($query);\r
193                 \r
194                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_views_log').' ( '.\r
195                                 'vlpictureid int unsigned not null, '.\r
196                                 'ip varchar(20), '.\r
197                                 'time timestamp )';\r
198                 sql_query($query);\r
199                 \r
200                 $query = 'CREATE TABLE IF NOT EXISTS '.sql_table('plug_gallery_picturetag').' ( '.\r
201                                 '`pictureid` VARCHAR( 255 ) NOT NULL , '.\r
202                                 '`top` VARCHAR( 255 ) NOT NULL ,'.\r
203                                 '`left` VARCHAR( 255 ) NOT NULL ,'.\r
204                                 '`height` VARCHAR( 255 ) NOT NULL ,'.\r
205                                 '`width` VARCHAR( 255 ) NOT NULL ,'.\r
206                                 '`text` VARCHAR( 255 ) NOT NULL )';\r
207                 sql_query($query);\r
208                 \r
209                 //set default options\r
210                 $NPG_CONF = getNPGconfig();\r
211 \r
212                 if(!$NPG_CONF['viewtime']) setNPGoption('viewtime', 30);\r
213                 setNPGoption('currentversion',94);\r
214                 \r
215                 if(!$NPG_CONF['im_path']) setNPGoption('im_path','/usr/local/bin/'); // currently needs to have trailing slash, need to change to be consistent\r
216                 if(!$NPG_CONF['im_options']) setNPGoption('im_options', '-filter Lanczos');\r
217                 if(!$NPG_CONF['im_quality']) setNPGoption('im_quality', '80');\r
218                 if(!$NPG_CONF['graphics_library']) {\r
219                         if (GDisPresent()) {\r
220                                 setNPGoption('graphics_library', 'gd'); \r
221                         } else if (IMisPresent()) {\r
222                                 setNPGoption('graphics_library', 'im');\r
223                                 setNPGoption('im_version', getIMversion());\r
224                         } else {\r
225                                 setNPGoption('graphics_library', 'not configured');\r
226                                 setNPGoption('configured', false);\r
227                         }\r
228                 }\r
229                 \r
230 \r
231                 if(!$NPG_CONF['galleryDir']) setNPGoption('galleryDir', 'media/gallery'); //when adding, need to make sure that no trailing slash\r
232                 if(!$NPG_CONF['thumbwidth']) setNPGoption('thumbwidth', '100');\r
233                 if(!$NPG_CONF['thumbheight']) setNPGoption('thumbheight', '100');\r
234                 if(!$NPG_CONF['maxwidth']) setNPGoption('maxwidth', '600');\r
235                 if(!$NPG_CONF['maxheight']) setNPGoption('maxheight', '600');\r
236                 if(!$NPG_CONF['int_prefix']) setNPGoption('int_prefix', 'int_');\r
237                 if(!$NPG_CONF['thumb_prefix']) setNPGoption('thumb_prefix', 'thumb_');\r
238                 \r
239                 if(!$NPG_CONF['max_filesize']) setNPGOption('max_filesize', '2000000');\r
240                 if(!$NPG_CONF['add_album']) setNPGOption('add_album', 'admin_only');\r
241                 if(!$NPG_CONF['batch_add_num']) setNPGOption('batch_add_num', '10');\r
242                 if(!$NPG_CONF['dateorrandom']) setNPGOption('dateorrandom', 'randomprefix');\r
243                 if(!$NPG_CONF['tooltips']) setNPGOption('tooltips', 'no');\r
244                 if(!$NPG_CONF['nextprevthumb']) setNPGOption('nextprevthumb', 'no');\r
245                 if(!$NPG_CONF['defaultorder']) setNPGOption('defaultorder', 'aesc');\r
246                 if(!$NPG_CONF['setorpromo']) setNPGOption('setorpromo', 'promo');\r
247                 if(!$NPG_CONF['slideshowson']) setNPGOption('slideshowson', 'no');\r
248                 if(!$NPG_CONF['thumborlist']) setNPGOption('thumborlist', 'list');\r
249 \r
250 \r
251                 \r
252                 \r
253 \r
254                 \r
255 \r
256                 $chk = checkgalleryconfig();\r
257                 if($chk['configured'] == false) setNPGoption('configured',false); else setNPGoption('configured',true);\r
258                 \r
259                 //?create skin NPGallery or make user do it\r
260                                 \r
261                 //set default templates\r
262                 //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_076.inc');\r
263                 //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_080.inc');\r
264                 //include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_090.inc');\r
265                 include($DIR_NUCLEUS.'/plugins/gallery/update/default_templates_094.inc');\r
266         }\r
267         \r
268         function unInstall() {\r
269                 if ($this->getOption('deletetables') == 'yes') { \r
270                         \r
271                         //delete promo posts\r
272                         $query = 'select pictureid from '.sql_table('plug_gallery_picture');\r
273                         $res = sql_query($query);\r
274                         while($row = mysql_fetch_object($res)) {\r
275                                 PICTURE::deletepromoposts($res->pictureid);\r
276                         }\r
277                         \r
278                         sql_query('DROP TABLE '.sql_table('plug_gallery_album'));\r
279                         sql_query('DROP TABLE '.sql_table('plug_gallery_picture'));\r
280                         sql_query('DROP TABLE '.sql_table('plug_gallery_template'));\r
281                         sql_query('DROP TABLE '.sql_table('plug_gallery_template_desc'));\r
282                         sql_query('DROP TABLE '.sql_table('plug_gallery_config'));\r
283                         sql_query('DROP TABLE '.sql_table('plug_gallery_album_team'));\r
284                         sql_query('DROP TABLE '.sql_table('plug_gallery_member'));\r
285                         sql_query('DROP TABLE '.sql_table('plug_gallery_comment'));\r
286                         sql_query('DROP TABLE '.sql_table('plug_gallery_promo'));\r
287                         sql_query('DROP TABLE '.sql_table('plug_gallery_views'));\r
288                         sql_query('DROP TABLE '.sql_table('plug_gallery_views_log'));\r
289                         sql_query('DROP TABLE '.sql_table('plug_gallery_picturetag'));\r
290                         \r
291                 }\r
292         }\r
293 \r
294         function doAction($type) {\r
295                 global $gmember, $CONF, $NPG_CONF;\r
296                 global $skinid,$manager,$blog,$blogid;\r
297                 \r
298                 switch($type) {\r
299                         /*\r
300                         //display -- these are done in doSkinVar\r
301                         case 'mostviewed':\r
302                         case 'album':\r
303                         case 'item':\r
304                         case 'deletePictureF': \r
305                         case 'editPictureF':\r
306                         case 'addPictF':\r
307                                 $this->currentPage = $type;\r
308                                 $this->currentPageID = requestVar('id');\r
309                                 break;\r
310                         case 'list':\r
311                                 $this->currentPage = $type;\r
312                                 $this->currentPageOpt = requestVar('sort');\r
313                                 break;\r
314                         case 'addAlbumF': \r
315                                 $this->currentPage = $type;\r
316                                 break;\r
317                         */\r
318                         //these are the actions, done here, then currentpage is set and skin called to display something\r
319                         case 'addcomment': \r
320                                 global $CONF;\r
321 \r
322                                 $post['itemid'] =       intPostVar('itemid');\r
323                                 $post['user'] =         postVar('user');\r
324                                 $post['userid'] =       postVar('userid');\r
325                                 $post['body'] =         postVar('body');\r
326 \r
327                                 // set cookies when required\r
328                                 $remember = intPostVar('remember');\r
329                                 if ($remember == 1) {\r
330                                         $lifetime = time()+2592000;\r
331                                         setcookie($CONF['CookiePrefix'] . 'comment_user',$post['user'],$lifetime,'/','',0);\r
332                                         setcookie($CONF['CookiePrefix'] . 'comment_userid', $post['userid'],$lifetime,'/','',0);\r
333                                 }\r
334 \r
335                                 $comments = new NPG_COMMENTS($post['itemid']);\r
336 \r
337                                 $errormessage = $comments->addComment($post);\r
338                                 \r
339                                 //need to add code to display the error\r
340                                 if ($errormessage == '1') {\r
341                                         $_POST['id'] = $post['itemid'];\r
342                                 } \r
343                                 /*\r
344                                 else {\r
345                                         $this->currentPage = 'list';\r
346                                         $this->currentPageOpt = 'date';\r
347                                 }\r
348                                 */\r
349                                 break;\r
350                         case 'addAlbum':\r
351                                 if($gmember->canAddAlbum() ){\r
352                                         $NPG_vars['ownerid'] = $gmember->getID();\r
353                                         $NPG_vars['title'] = requestVar('title'); \r
354                                         $NPG_vars['description'] = requestVar('desc');\r
355                                         $NPG_vars['publicalbum'] = requestVar('publicalbum');\r
356                                         ALBUM::add_new($NPG_vars);\r
357                                 }\r
358                                 break;\r
359                         case 'finaldeletepicture':\r
360                                 $id = requestVar('id');\r
361                                 $delpromo = requestVar('delpromo');\r
362                                 if($gmember->canModifyPicture($id)) {\r
363                                         \r
364                                         $manager->notify('NPgPreDeletePicture', array('pictureid' => $id));\r
365                                         $result = PICTURE::delete($id);\r
366                                         \r
367                                         if($result['status'] == 'error') {\r
368                                                 echo $result['message'];\r
369                                         }\r
370                                         else {\r
371                                                 $manager->notify('NPgPostDeletePicture', array('pictureid' => $id));\r
372                                                 \r
373                                                 if($delpromo == 'yes') {\r
374                                                         $result2 = PICTURE::deletepromoposts($id);\r
375                                                         if($result2['status'] == 'error') echo $result2['message'];\r
376                                                 }\r
377                                                 else {\r
378                                                         $_POST['id'] = $result['albumid'];\r
379                                                 }\r
380                                         }\r
381                                 } else echo 'No permission to delete picture<br/>';\r
382                                 break;\r
383                         case 'editPicture':\r
384                                 $id = requestVar('id');\r
385                                 if($gmember->canModifyPicture($id)) {\r
386                                         $pict = new PICTURE($id);\r
387                                         $pict->setTitle(requestVar('ptitle'));\r
388                                         $pict->setDescription(requestVar('pdesc'));\r
389                                         $pict->setkeywords(requestVar('keywords'));\r
390                                         $aid = requestVar('aid');\r
391                                         if($aid && $gmember->canAddPicture($aid)) {\r
392                                                 ALBUM::decreaseNumberByOne($pict->getAlbumID());\r
393                                                 ALBUM::increaseNumberByOne($aid);\r
394                                                 $pict->setAlbumID($aid);\r
395                                         }\r
396                                         $pict->write();\r
397                                         echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
398                                         window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $id . "\"" .\r
399                                         "</script>";\r
400                                         break;\r
401                                         $manager->notify('NPgPostUpdatePicture',array('picture', &$pict));\r
402                                 }\r
403                         case 'tagaccept' :\r
404                                 $Pos1x = requestVar('Pos1x');\r
405                                 $Pos1y = requestVar('Pos1y');\r
406                                 $Pos2x = requestVar('Pos2x');\r
407                                 $Pos2y = requestVar('Pos2y');\r
408                                 $RelX = requestVar('RelX');\r
409                                 $pictureid = requestVar('pictureid');\r
410                                 $RelY = requestVar('RelY');\r
411                                 $desc = requestVar('desc');\r
412                                 $left = $Pos1x - $RelX;\r
413                                 $top = $Pos1y - $RelY;\r
414                                 $width = $Pos2x - $Pos1x;\r
415                                 $height = $Pos2y - $Pos1y;\r
416                                 $text = $desc;\r
417                                 //these lines should be moved into picture_class.php\r
418                                 sql_query("INSERT INTO ".sql_table('plug_gallery_picturetag')." ( `pictureid` , `top` , `left` , `height` , `width` , `text` )\r
419                                 VALUES ( '" . addslashes($pictureid) ." ', '" .addslashes($top)."', '" .addslashes($left)." ' , '" .addslashes($height)."' , '" .addslashes($width)."' , '" .addslashes($text)."' ); ");\r
420                                 echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
421                                 window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $pictureid . "\"" .\r
422                                 "</script>";\r
423                                 break;\r
424                         case 'tagdelete' :\r
425                                 $pictureid = requestVar('pictureid');\r
426                                 //these lines should be moved into picture_class.php\r
427                                 sql_query("DELETE FROM ".sql_table('plug_gallery_picturetag'). " WHERE `pictureid` = '" . addslashes($pictureid) . "' LIMIT 1; ");\r
428                                 echo "<SCRIPT LANGUAGE=\"JavaScript\">\r
429                                 window.location=\"" . $NP_BASE_DIR  . "action.php?action=plugin&name=gallery&type=item&id=". $pictureid . " \"" .\r
430                                 "</script>";\r
431                                 break;\r
432                         // this is done in editpicture now.\r
433                         //case 'updatesets':\r
434                                 //$id = requestVar('id');\r
435                                 //$setname = requestVar('setname');\r
436                                 //$pict = new PICTURE($id);\r
437                                 //$pict->addtoset($id,$setname);\r
438                                 //$pict->write();\r
439                                 //$manager->notify('NPgPostUpdatePicture',array('picture', &$pict));\r
440                                 //break;\r
441                         default: \r
442                         break;\r
443                 }\r
444 \r
445                 if (!$blogid)\r
446                 $blogid = $CONF['DefaultBlog'];\r
447 \r
448                 $b =& $manager->getBlog($blogid);\r
449                 $blog = $b;\r
450                 \r
451                 selectSkin('NPGallery');\r
452                 \r
453                 $skin =& new SKIN($skinid);\r
454                 $skin->parse('index');\r
455         }\r
456         \r
457         \r
458         function doSkinVar() {\r
459                 global $NPG_CONF, $gmember, $manager;\r
460                 \r
461                 $params = func_get_args();\r
462                 $numargs = func_num_args();\r
463                 $skinType = $params[0];\r
464                 \r
465                 $type = requestvar('type');\r
466                 $id = requestvar('id');\r
467                 $startstop = requestvar('startstop');\r
468                 $sliderunning = requestvar('sliderunning');\r
469                 \r
470                 $defaulttoitem = array('editPicture','addcomment');\r
471                 $defaulttolist = array('addAlbum');\r
472                 $defaulttoalbum = array('finaldeletepicture');\r
473                 if(in_array($type,$defaulttoitem)) $type = 'item';\r
474                 \r
475                 switch($params[1]) {\r
476                         case 'link':\r
477                                 if($numargs >= 3) {\r
478                                         switch($params[2]) {\r
479                                                 case 'picture': echo generatelink('item',$params[3]); break;\r
480                                                 case 'album': echo generateLink('album',$params[3]); break;\r
481                                                 default: echo generateLink('list'); break;\r
482                                         }\r
483                                 } else echo generateLink('list');\r
484                                 break;\r
485                         default:\r
486                                 //things to display\r
487                                 \r
488                                 if(!$NPG_CONF['configured']) {\r
489                                         echo __NPG_ERR_GALLLERY_NOT_CONFIG;\r
490                                         break;\r
491                                 }\r
492                                 \r
493                                 //plugin hook for collections\r
494                                 $hookquery = '';\r
495                                 $hooktitle = '';\r
496                                 $manager->notify('NPgCollectionDisplay', array('type' => $type, 'query' => &$hookquery , 'title' => &$hooktitle) );\r
497                                 if($hookquery) {\r
498                                         if ($id == 0) {\r
499                                                 $collection = new ALBUM();\r
500                                                 $collection->setquery($hookquery);\r
501                                                 $collection->set_title($hooktitle);\r
502                                                 $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
503                                                 $collection->settemplate($t);\r
504                                                 $collection->display();\r
505                                         }\r
506                                         else {\r
507                                                 $pict = new PICTURE($id);\r
508                                                 $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
509                                                 $pict->setalbumtitle($hooktitle);\r
510                                                 $pict->settemplate($t);\r
511                                                 $pict->setquery($hookquery);\r
512                                                 $pict->display();\r
513                                         }\r
514                                         $type = 'nothing';\r
515                                 }\r
516                                 \r
517                                 //other pages\r
518                                 switch($type) {\r
519                                         case 'album': \r
520                                                 $alb = new ALBUM($id);\r
521                                                 if($alb->getID()) {\r
522                                                         $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
523                                                         $alb->settemplate($t);\r
524                                                         $alb->display(requestVar('sort'));\r
525                                                 }\r
526                                                 else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
527                                                 break;\r
528                                         //case 'set': \r
529                                         //      $setid = $id;\r
530                                         //      $alb = new ALBUM($setid);\r
531                                                 //this should work, but not sure what $alb->getID() does...\r
532                                         //      if($alb->getID()) {\r
533                                         //              $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
534                                         //              $alb->settemplate($t);\r
535                                         //              $alb->displayset(requestVar('sort'));\r
536                                         //      }\r
537                                         //      else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
538                                         //      break;\r
539                                         case 'item': \r
540                                                 $pict = new PICTURE($id);\r
541                                                 if($pict->getID()) {\r
542                                                         $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
543                                                         $pict->settemplate($t);\r
544                                                         $pict->display($startstop,$sliderunning);\r
545                                                 }\r
546                                                 else echo __NPG_ERR_NOSUCHTHING.'<br/>';\r
547                                                 break;\r
548                                         case 'list': \r
549                                                 $l = new GALLERY_LIST();\r
550                                                 $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
551                                                 $l->settemplate($t);\r
552                                                 $l->display(requestVar('sort')); \r
553                                                 break;\r
554                                         case 'addAlbumF': \r
555                                                 addAlbumForm();\r
556                                                 break;\r
557                                         case 'editAlbumF': \r
558                                                 editAlbumForm($id);\r
559                                                 break;\r
560                                         case 'editPictureF':\r
561                                                 editPictureForm($id);\r
562                                                 break;\r
563                                         case 'deletePictureF':\r
564                                                 deletePictureForm($id);\r
565                                                 break;\r
566                                         case 'addPictF': \r
567                                                 addPictureForm($id);\r
568                                                 break;\r
569                                         case 'nothing':\r
570                                                 break;\r
571                                         default: \r
572                                                 $l = new GALLERY_LIST();\r
573                                                 $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
574                                                 $l->settemplate($t);\r
575                                                 $l->display(requestvar('sort')); \r
576                                                 break;\r
577                                 }\r
578                                 \r
579                                 break;\r
580                 }\r
581         }\r
582         \r
583         function MakeLink($type, $extraparams = array()) {\r
584                 global $CONF;\r
585                 \r
586                 if($CONF['URLMode'] == 'pathinfo') { \r
587                         //fancy URLs having problems, so I changed it to revert back to regular URLS.\r
588                         //$base = '/gallery/';\r
589                         //$sep1 = '/';\r
590                         //$sep2 = '/';\r
591                         $base = 'action.php?action=plugin&name=gallery&type=';\r
592                         $sep1 = '&';\r
593                         $sep2 = '=';\r
594                 }\r
595                 else {\r
596                         $base = 'action.php?action=plugin&name=gallery&type=';\r
597                         $sep1 = '&';\r
598                         $sep2 = '=';            \r
599                 }\r
600                 //if extraparams is assoc array\r
601                 if(is_array($extraparams) && array_keys($extraparams)!==range(0,sizeof($extraparams)-1)) {\r
602                         foreach($extraparams as $key => $value) \r
603                                 $extra = $extra . $sep1 . $key . $sep2 . $value;\r
604                         }\r
605                 return $base.$type.$extra;\r
606 \r
607 \r
608         }\r
609         \r
610         function MakeLinkRaw($base, $extraparams = '') {\r
611                 global $CONF;\r
612                 \r
613                 if($CONF['URLMode'] == 'pathinfo') {\r
614                         $sep1 = '/';\r
615                         $sep2 = '/';\r
616                 }\r
617                 else {\r
618                         $sep1 = '&amp;';\r
619                         $sep2 = '=';\r
620                 }\r
621                 foreach($extraparams as $key => $value) $extra = $extra . $sep1 . $key . $sep2 .$value;\r
622                 return $base.$extra;\r
623         }\r
624 }\r
625 \r
626 class NPG_PREPARSER extends PARSER {\r
627         \r
628         function doAction($action) {\r
629                  if (!$action) return;\r
630                  $action_raw = '<%'.$action.'%>';\r
631                  \r
632                 // split into action name + arguments\r
633                 if (strstr($action,'(')) {\r
634                         $paramStartPos = strpos($action, '(');\r
635                         $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2);\r
636                         $action = substr($action, 0, $paramStartPos);\r
637                         $params = explode ($this->pdelim, $params);\r
638                         $params = array_map('trim',$params);\r
639                 } else {\r
640                         $params = array();\r
641                 }\r
642 \r
643                 $actionlc = strtolower($action);\r
644 \r
645                 if (in_array($actionlc, $this->actions) || $this->norestrictions ) {\r
646                         call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params);\r
647                 } else {\r
648                         echo $action_raw;\r
649                 }\r
650 \r
651          }\r
652          \r
653          \r
654 }\r
655 \r
656 class NPG_EXT_ITEM_ACTIONS extends BaseActions {\r
657         var $parser;\r
658         \r
659         function NPG_EXT_ACTIONS() {\r
660                 $this->BaseActions();\r
661         }\r
662         \r
663         function getdefinedActions() {\r
664                 return array( 'gallery' );\r
665         }\r
666         \r
667         function setParser(&$parser) {$this->parser =& $parser; }\r
668         \r
669         function parse_gallery($param1, $param2, $param3) {\r
670                 if($param1 == 'link') {\r
671                         if($param2 == 'picture') {\r
672                                 $param3 = intval($param3);\r
673                                 echo generatelink('item',$param3);\r
674                         }\r
675                         else if($param2 == 'album') {\r
676                                 $param3 = intval($param3);\r
677                                 echo generatelink('album',$param3);\r
678                         }\r
679                         else echo '<b>NOT HERE</b>';\r
680                 }\r
681                 if($param1 == 'keywords') {\r
682                         $setid = $param2;\r
683                         $splitdata = explode(' and ',$setid);\r
684                         $sort = $param3;\r
685                         //$alb = new ALBUM($id);\r
686                         //if($alb->getID()) {\r
687                         //$t = new NPG_TEMPLATE($NPG_CONF['template']);\r
688                         //$alb->settemplate($t);\r
689                         //$alb->display(requestVar('sort'));\r
690                         $thisset = new ALBUM;\r
691                         $t = new NPG_TEMPLATE($NPG_CONF['template']);\r
692                         $thisset->settemplate($t);\r
693                         $thisset->displayset($splitdata,$sort);\r
694                 }\r
695         }\r
696 }\r
697 ?>\r