OSDN Git Service

NP_gallery v0.95
[nucleus-jp/nucleus-plugins.git] / NP_gallery / tags / v0.95 / gallery / functions.php
1 <?php\r
2 //support functions for NP_gallery\r
3 \r
4 function generateLink($type,$vars = 'date') {\r
5         global $manager,$CONF,$NPG_CONF;\r
6         $base = 'action.php?action=plugin&amp;name=gallery&amp;type=';\r
7         switch($type) {\r
8                 case 'list':\r
9                         $extra['sort'] = $vars;\r
10                         $link = NP_Gallery::makelink('list',$extra);\r
11                         break;\r
12                 case 'addAlbumF':\r
13                 case 'finaldeletepicture': \r
14                         $link = NP_Gallery::makelink($type);\r
15                         break;\r
16                 case 'editAlbumF': \r
17                         $link = $CONF['PluginURL'].'gallery/index.php?action=album&amp;id='.$vars;\r
18                         break;\r
19                 case 'item': \r
20                 case 'album': \r
21                         $extra['sort'] = $NPG_CONF['defaultorder'];\r
22                         $link = NP_Gallery::makelink('album',$extra);\r
23                 case 'editPictureF':\r
24                 case 'deletePictureF':\r
25                         $extra['id'] = $vars;\r
26                         $link = NP_Gallery::makelink($type,$extra);\r
27                         break;\r
28                 case 'addPictF': $link = $CONF['PluginURL'].'gallery/add_picture.php?type=firststage&amp;id='.$vars;\r
29                         break;\r
30                 case 'batchaddPictF': $link = $CONF['PluginURL'].'gallery/add_picture.php?type=firststage';\r
31                         break;\r
32                 default: //$link = $base.$type;\r
33                         break;\r
34         }\r
35         return $link;\r
36 }\r
37 \r
38 \r
39 function resizeImage($orig_filename, $target_w, $target_h, $target_filename) {\r
40         global $NPG_CONF, $DIR_NUCLEUS;\r
41         \r
42         $abs_dir = substr($DIR_NUCLEUS,0,strlen($DIR_NUCLEUS) - 8);\r
43         \r
44         if(!$NPG_CONF) {\r
45                 $NPG_CONF = getNPGConfig();\r
46                 echo 'NPG_CONF not defined in resizeImage<br />';\r
47         }\r
48         \r
49         if($NPG_CONF['graphics_library'] == 'gd') {\r
50 \r
51                 $src_image = imagecreatefromjpeg($abs_dir.$orig_filename);\r
52                 \r
53                 $old_x=imageSX($src_image);\r
54                 $old_y=imageSY($src_image);\r
55                 \r
56                 //return original image if original image is smaller than resized dimensions\r
57                 if ($old_x <= $target_w && $old_y <= $target_h) return $orig_filename;\r
58                 \r
59                 //resize\r
60                 if ($old_x > $old_y) {\r
61                         $thumb_w=$target_w;\r
62                         $thumb_h=$old_y*($target_w/$old_x);\r
63                         if($thumb_h > $target_h) {\r
64                                 $thumb_w=$old_x*($target_h/$old_y);\r
65                                 $thumb_h=$target_h;\r
66                         }\r
67                 }\r
68                 if ($old_x < $old_y) {\r
69                         $thumb_w=$old_x*($target_h/$old_y);\r
70                         $thumb_h=$target_h;\r
71                         if($thumb_w > $target_w) {\r
72                                 $thumb_w=$target_w;\r
73                                 $thumb_h=$old_y*($target_w/$old_x);\r
74                         }\r
75                 }\r
76                 if ($old_x == $old_y) {\r
77                         if($target_w > $target_h) {\r
78                                 $thumb_w=$old_x*($target_w/$old_y);\r
79                                 $thumb_h=$target_h;\r
80                         } else  {\r
81                                 $thumb_w=$target_w;\r
82                                 $thumb_h=$old_y*($target_h/$old_x);\r
83                         }\r
84                 } \r
85 \r
86                 $dst_image=ImageCreateTrueColor($thumb_w,$thumb_h);\r
87                 imagecopyresampled($dst_image,$src_image,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); \r
88                 \r
89                 if(!imagejpeg($dst_image,$abs_dir.$target_filename,90)) return NULL;\r
90                 \r
91                 imagedestroy($dst_image);\r
92                 imagedestroy($src_image);\r
93         \r
94                 return $target_filename;\r
95                 \r
96         } elseif ($NPG_CONF['graphics_library'] == 'im') {\r
97                 \r
98                 //code modified from coppermine photo gallery -- only the non-widows portion was tested, the windows portion was added to the coppermine code so that imagemagick would work even if installed in c:/program files\r
99                 $imgFile = escapeshellarg($abs_dir.$orig_filename);\r
100                 $output = array();\r
101                 $target_file_esc = escapeshellarg($abs_dir.$target_filename);\r
102                 \r
103                 if (eregi("win",$_ENV['OS'])) {\r
104                 $imgFile = str_replace("'","\"" ,$imgFile );\r
105                          $cmd = "\"".str_replace("\\","/", $NPG_CONF['im_path'])."convert\" -quality {$NPG_CONF['im_quality']} {$NPG_CONF['im_options']} -resize {$target_w}x{$target_h} ".str_replace("\\","/" ,$imgFile )." ".str_replace("\\","/" ,$target_file_esc );\r
106                          exec ("\"$cmd\"", $output, $retval);\r
107                 } else {\r
108                         $cmd = "{$NPG_CONF['im_path']}convert -quality {$NPG_CONF['im_quality']} {$NPG_CONF['im_options']} -resize {$target_w}x{$target_h} $imgFile $target_file_esc";\r
109                         exec ($cmd, $output, $retval);\r
110                 }\r
111                 \r
112                 //todo: check for errors\r
113                 return $target_filename;\r
114 \r
115         }\r
116         else return false;\r
117 }\r
118 \r
119 \r
120 function allowedTemplateTags($template) {\r
121         switch ($template) {\r
122                 case 'LIST_HEADER':\r
123                 case 'LIST_FOOTER':\r
124                         $tags='Allowed tags: breadcrumb, sortbytitle, sortbydescription, sortbyowner, sortbymodified, '\r
125                                         .'sortbynumber, addalbumlink, addpicturelink. Allowed condition(if) tags: canaddalbum, canaddpicture';\r
126                         break;\r
127                 case 'LIST_BODY':\r
128                         $tags='Allowed tags: albumlink, description, ownername, modified(date format), numberofimages';\r
129                         break;\r
130                 case 'ALBUM_HEADER':\r
131                 case 'ALBUM_FOOTER':\r
132                         $tags='Allowed tags: breadcrumb, editalbumlink, addpicturelink. Allowed condition(if) tags: caneditalbum, canaddpicture';\r
133                         break;\r
134                 case 'ALBUM_BODY':\r
135                         $tags='Allowed tags: picturelink, thumbnail, picturetitle, centeredtopmargin(height,offset), pictureviews';\r
136                         break;\r
137                 case 'ITEM_HEADER':\r
138                 case 'ITEM_FOOTER':\r
139                 case 'ITEM_BODY':\r
140                         $tags='Allowed tags: breadcrumb, nextlink, previouslink, fullsizelink, width, height, intermediatepicture, owner, date(format), editpicturelink, deletepicturelink, tooltips, id. Allowed condition(if) tags: caneditpicture';\r
141                         break;\r
142                 default:\r
143                         break;\r
144         }\r
145         return $tags;\r
146 }\r
147 function getNPGConfig() {\r
148         $result = mysql_query('select * from '.sql_table('plug_gallery_config') );\r
149         if($result) {\r
150                 while ($row = mysql_fetch_assoc($result)) {\r
151                         $npg_config[$row['oname']] = $row['ovalue'];\r
152                 }\r
153         }\r
154         return $npg_config;\r
155 }\r
156 \r
157 function setNPGoption($oname, $ovalue) {\r
158         $oname=addslashes($oname);\r
159         $ovalue=addslashes($ovalue);\r
160         $result = mysql_query("select * from ".sql_table('plug_gallery_config')." where oname='$oname'" );\r
161         if(@ mysql_num_rows($result)) {\r
162                 sql_query("update ".sql_table('plug_gallery_config')." set ovalue='$ovalue' where oname='$oname'");\r
163         } else {\r
164                 sql_query("insert into ".sql_table('plug_gallery_config')." values ('$oname', '$ovalue' )");\r
165         }\r
166 }\r
167 \r
168 function database_cleanup() {\r
169         //check numberofimages for each album\r
170         $result = mysql_query("select count(*) as noi, albumid from ".sql_table('plug_gallery_picture')." group by albumid" );\r
171         if($result) {\r
172                 while ($row = mysql_fetch_assoc($result)) {\r
173                         $result2 = mysql_query("select numberofimages from ".sql_table('plug_gallery_album')." where albumid = ".intval($row['albumid']));\r
174                         $row2 = mysql_fetch_assoc($result2);\r
175                         if($row2['numberofimages'] <> $row['noi']) {\r
176                                 sql_query("update ".sql_table('plug_gallery_album')." set numberofimages=".intval($row['noi'])." where albumid = ".intval($row['albumid']));\r
177                         }\r
178                 }\r
179         }\r
180         \r
181         //if picture is not in database, either give choice for deleting it or adding it to the database\r
182         \r
183 }\r
184 \r
185 function rethumb($id=0) {\r
186         global $DIR_NUCLEUS,$NPG_CONF;\r
187         \r
188         $abs_dir = $DIR_NUCLEUS.'../';\r
189         $abs_dir = substr($DIR_NUCLEUS,0,strlen($DIR_NUCLEUS) - 8);\r
190         \r
191         //redo the thumbnails and intermediate images\r
192         if($id) $album = ' where albumid='.invtal($id);\r
193         $query = 'select * from '.sql_table('plug_gallery_picture').$album;\r
194         $result = sql_query($query);\r
195 \r
196         echo 'Resizing images . . . ';\r
197         $timestart = microtime();\r
198         while($row=mysql_fetch_object($result)) {\r
199                 //check if file exists:\r
200                 \r
201                 if(is_file($abs_dir.$row->filename)) {\r
202                         //make new thumbnail\r
203                         if($new_thumb = resizeImage($row->filename, $NPG_CONF['thumbwidth'], $NPG_CONF['thumbheight'], $row->thumb_filename)) {\r
204                                 sql_query('update '.sql_table('plug_gallery_picture').' set thumb_filename=\''.addslashes($new_thumb).'\' where pictureid='.intval($row->pictureid));\r
205                         }\r
206                         else echo '<br/>file: '.$abs_dir.$row->thumb_filename.' could not be resized<br/>';\r
207                         //make new intermediate picture\r
208                         if($new_thumb = resizeImage($row->filename, $NPG_CONF['maxwidth'], $NPG_CONF['maxheight'], $row->int_filename)) {\r
209                                 sql_query('update '.sql_table('plug_gallery_picture').' set int_filename=\''.addslashes($new_thumb).'\' where pictureid='.intval($row->pictureid));\r
210 \r
211                         }\r
212                         else echo '<br/>file: '.$abs_dir.$row->int_filename.' could not be resized<br/>';\r
213                 } else echo '<br/>file: '.$abs_dir.$row->filename.' does not exist -- no action taken<br/>';\r
214         }\r
215         echo 'Done<br/>';\r
216         $timeend = microtime();\r
217         $diff = number_format(((substr($timeend,0,9)) + (substr($timeend,-10)) - (substr($timestart,0,9)) - (substr($timestart,-10))),4);\r
218         echo "Execution time: $diff s <br/>";\r
219 }\r
220 function GDisPresent() {\r
221         if(function_exists('ImageCreateTrueColor')) return true;\r
222 }\r
223 \r
224 function IMisPresent() {\r
225         global $NPG_CONF;\r
226         \r
227         $cmd = "{$NPG_CONF['im_path']}convert -version";\r
228         exec ($cmd, $output, $retval);\r
229         if($retval == 0) return true; \r
230         return false;\r
231 }\r
232 \r
233 function getIMversion() {\r
234         global $NPG_CONF;\r
235         \r
236         $cmd = "{$NPG_CONF['im_path']}convert -version";\r
237         exec ($cmd, $output, $retval);\r
238         if($retval == 0) {\r
239                 $pieces = explode(" ", $output[0]);\r
240                 $imversion = $pieces[2];\r
241                 return $imversion;\r
242         }\r
243         return false;\r
244 }\r
245 \r
246 function checkgalleryconfig() {\r
247         global $NP_BASE_DIR,$NPG_CONF;\r
248         \r
249         $status = array();\r
250         \r
251         if((GDispresent() && $NPG_CONF['graphics_library'] == 'gd') || (IMisPresent() && $NPG_CONF['graphics_library'] == 'im')) {\r
252                 $status['configured'] = true;\r
253         } else {\r
254                 $status['message'] = 'Graphics engine not configured!<br/>';\r
255         }\r
256         \r
257         //check for presence of NPGallery skin\r
258         $res = sql_query('select sdname, scontent from '.sql_table('skin_desc').', '.sql_table('skin').' where sdesc=sdnumber and stype="index" and sdname="NPGallery" LIMIT 1');\r
259         if(!$res) {\r
260                 $status['message'] .= 'mysql error checking for NPGallery skin: '.mysql_error().'<br/>';\r
261         }\r
262         else if(!mysql_num_rows($res)) {\r
263                 $status['message'] .= 'NPGallery skin was not found<br/>';\r
264         }\r
265         else {\r
266                 $row = mysql_fetch_object($res);\r
267                 $haystack = stripslashes($row->scontent);\r
268                 $s = stristr($haystack,'<%gallery');\r
269                 if(!$s) {\r
270                         $status['message'] .= '<%gallery%> tag not found in NPGallery skin<br/>';\r
271                 }\r
272         }\r
273         \r
274         //check for directory and directory permissions\r
275         $mediadir = $NP_BASE_DIR.$NPG_CONF['galleryDir'];\r
276         if (!@is_dir($mediadir)) {\r
277                 $error = 'Gallery directory not found<br/>';\r
278                 $oldumask = umask(0000);\r
279                 if (!@mkdir($mediadir, 0777)) {\r
280                         $error = 'Cannot create gallery directory<br/>';\r
281                 }\r
282                 else {\r
283                         $error = NULL;\r
284                         umask($oldumask);                               \r
285                 }\r
286                 $status['message'] .= $error;\r
287         }\r
288         else {\r
289                 if (!is_writeable($mediadir)) \r
290                         $status['message'] = 'Gallery directory: '.$mediadir.' not writable';\r
291         }\r
292         \r
293         if($status['message']) $status['configured'] = false; else $status['configured'] = true;\r
294         \r
295         return $status;\r
296         \r
297 }\r
298 \r
299 function converttimestamp($d) {\r
300         if(strlen($d) > 14) list($year, $month, $day, $hour, $minute, $second) = sscanf($d, "%4u-%2u-%2u %2u:%2u:%2u");\r
301                         else list($year, $month, $day, $hour, $minute, $second) = sscanf($d, "%4u%2u%2u%2u%2u%2u");\r
302         $rd = mktime(intval($hour), intval($minute), intval($second), intval($month), intval($day), intval($year));\r
303         return $rd;\r
304 }\r
305 \r
306 ?>\r