OSDN Git Service

NP_gallery v0.95
[nucleus-jp/nucleus-plugins.git] / NP_gallery / tags / v0.95 / gallery / functions.php
diff --git a/NP_gallery/tags/v0.95/gallery/functions.php b/NP_gallery/tags/v0.95/gallery/functions.php
new file mode 100644 (file)
index 0000000..609b12f
--- /dev/null
@@ -0,0 +1,306 @@
+<?php\r
+//support functions for NP_gallery\r
+\r
+function generateLink($type,$vars = 'date') {\r
+       global $manager,$CONF,$NPG_CONF;\r
+       $base = 'action.php?action=plugin&amp;name=gallery&amp;type=';\r
+       switch($type) {\r
+               case 'list':\r
+                       $extra['sort'] = $vars;\r
+                       $link = NP_Gallery::makelink('list',$extra);\r
+                       break;\r
+               case 'addAlbumF':\r
+               case 'finaldeletepicture': \r
+                       $link = NP_Gallery::makelink($type);\r
+                       break;\r
+               case 'editAlbumF': \r
+                       $link = $CONF['PluginURL'].'gallery/index.php?action=album&amp;id='.$vars;\r
+                       break;\r
+               case 'item': \r
+               case 'album': \r
+                       $extra['sort'] = $NPG_CONF['defaultorder'];\r
+                       $link = NP_Gallery::makelink('album',$extra);\r
+               case 'editPictureF':\r
+               case 'deletePictureF':\r
+                       $extra['id'] = $vars;\r
+                       $link = NP_Gallery::makelink($type,$extra);\r
+                       break;\r
+               case 'addPictF': $link = $CONF['PluginURL'].'gallery/add_picture.php?type=firststage&amp;id='.$vars;\r
+                       break;\r
+               case 'batchaddPictF': $link = $CONF['PluginURL'].'gallery/add_picture.php?type=firststage';\r
+                       break;\r
+               default: //$link = $base.$type;\r
+                       break;\r
+       }\r
+       return $link;\r
+}\r
+\r
+\r
+function resizeImage($orig_filename, $target_w, $target_h, $target_filename) {\r
+       global $NPG_CONF, $DIR_NUCLEUS;\r
+       \r
+       $abs_dir = substr($DIR_NUCLEUS,0,strlen($DIR_NUCLEUS) - 8);\r
+       \r
+       if(!$NPG_CONF) {\r
+               $NPG_CONF = getNPGConfig();\r
+               echo 'NPG_CONF not defined in resizeImage<br />';\r
+       }\r
+       \r
+       if($NPG_CONF['graphics_library'] == 'gd') {\r
+\r
+               $src_image = imagecreatefromjpeg($abs_dir.$orig_filename);\r
+               \r
+               $old_x=imageSX($src_image);\r
+               $old_y=imageSY($src_image);\r
+               \r
+               //return original image if original image is smaller than resized dimensions\r
+               if ($old_x <= $target_w && $old_y <= $target_h) return $orig_filename;\r
+               \r
+               //resize\r
+               if ($old_x > $old_y) {\r
+                       $thumb_w=$target_w;\r
+                       $thumb_h=$old_y*($target_w/$old_x);\r
+                       if($thumb_h > $target_h) {\r
+                               $thumb_w=$old_x*($target_h/$old_y);\r
+                               $thumb_h=$target_h;\r
+                       }\r
+               }\r
+               if ($old_x < $old_y) {\r
+                       $thumb_w=$old_x*($target_h/$old_y);\r
+                       $thumb_h=$target_h;\r
+                       if($thumb_w > $target_w) {\r
+                               $thumb_w=$target_w;\r
+                               $thumb_h=$old_y*($target_w/$old_x);\r
+                       }\r
+               }\r
+               if ($old_x == $old_y) {\r
+                       if($target_w > $target_h) {\r
+                               $thumb_w=$old_x*($target_w/$old_y);\r
+                               $thumb_h=$target_h;\r
+                       } else  {\r
+                               $thumb_w=$target_w;\r
+                               $thumb_h=$old_y*($target_h/$old_x);\r
+                       }\r
+               } \r
+\r
+               $dst_image=ImageCreateTrueColor($thumb_w,$thumb_h);\r
+               imagecopyresampled($dst_image,$src_image,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); \r
+               \r
+               if(!imagejpeg($dst_image,$abs_dir.$target_filename,90)) return NULL;\r
+               \r
+               imagedestroy($dst_image);\r
+               imagedestroy($src_image);\r
+       \r
+               return $target_filename;\r
+               \r
+       } elseif ($NPG_CONF['graphics_library'] == 'im') {\r
+               \r
+               //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
+               $imgFile = escapeshellarg($abs_dir.$orig_filename);\r
+               $output = array();\r
+               $target_file_esc = escapeshellarg($abs_dir.$target_filename);\r
+               \r
+               if (eregi("win",$_ENV['OS'])) {\r
+               $imgFile = str_replace("'","\"" ,$imgFile );\r
+                        $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
+                        exec ("\"$cmd\"", $output, $retval);\r
+               } else {\r
+                       $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
+                       exec ($cmd, $output, $retval);\r
+               }\r
+               \r
+               //todo: check for errors\r
+               return $target_filename;\r
+\r
+       }\r
+       else return false;\r
+}\r
+\r
+\r
+function allowedTemplateTags($template) {\r
+       switch ($template) {\r
+               case 'LIST_HEADER':\r
+               case 'LIST_FOOTER':\r
+                       $tags='Allowed tags: breadcrumb, sortbytitle, sortbydescription, sortbyowner, sortbymodified, '\r
+                                       .'sortbynumber, addalbumlink, addpicturelink. Allowed condition(if) tags: canaddalbum, canaddpicture';\r
+                       break;\r
+               case 'LIST_BODY':\r
+                       $tags='Allowed tags: albumlink, description, ownername, modified(date format), numberofimages';\r
+                       break;\r
+               case 'ALBUM_HEADER':\r
+               case 'ALBUM_FOOTER':\r
+                       $tags='Allowed tags: breadcrumb, editalbumlink, addpicturelink. Allowed condition(if) tags: caneditalbum, canaddpicture';\r
+                       break;\r
+               case 'ALBUM_BODY':\r
+                       $tags='Allowed tags: picturelink, thumbnail, picturetitle, centeredtopmargin(height,offset), pictureviews';\r
+                       break;\r
+               case 'ITEM_HEADER':\r
+               case 'ITEM_FOOTER':\r
+               case 'ITEM_BODY':\r
+                       $tags='Allowed tags: breadcrumb, nextlink, previouslink, fullsizelink, width, height, intermediatepicture, owner, date(format), editpicturelink, deletepicturelink, tooltips, id. Allowed condition(if) tags: caneditpicture';\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+       return $tags;\r
+}\r
+function getNPGConfig() {\r
+       $result = mysql_query('select * from '.sql_table('plug_gallery_config') );\r
+       if($result) {\r
+               while ($row = mysql_fetch_assoc($result)) {\r
+                       $npg_config[$row['oname']] = $row['ovalue'];\r
+               }\r
+       }\r
+       return $npg_config;\r
+}\r
+\r
+function setNPGoption($oname, $ovalue) {\r
+       $oname=addslashes($oname);\r
+       $ovalue=addslashes($ovalue);\r
+       $result = mysql_query("select * from ".sql_table('plug_gallery_config')." where oname='$oname'" );\r
+       if(@ mysql_num_rows($result)) {\r
+               sql_query("update ".sql_table('plug_gallery_config')." set ovalue='$ovalue' where oname='$oname'");\r
+       } else {\r
+               sql_query("insert into ".sql_table('plug_gallery_config')." values ('$oname', '$ovalue' )");\r
+       }\r
+}\r
+\r
+function database_cleanup() {\r
+       //check numberofimages for each album\r
+       $result = mysql_query("select count(*) as noi, albumid from ".sql_table('plug_gallery_picture')." group by albumid" );\r
+       if($result) {\r
+               while ($row = mysql_fetch_assoc($result)) {\r
+                       $result2 = mysql_query("select numberofimages from ".sql_table('plug_gallery_album')." where albumid = ".intval($row['albumid']));\r
+                       $row2 = mysql_fetch_assoc($result2);\r
+                       if($row2['numberofimages'] <> $row['noi']) {\r
+                               sql_query("update ".sql_table('plug_gallery_album')." set numberofimages=".intval($row['noi'])." where albumid = ".intval($row['albumid']));\r
+                       }\r
+               }\r
+       }\r
+       \r
+       //if picture is not in database, either give choice for deleting it or adding it to the database\r
+       \r
+}\r
+\r
+function rethumb($id=0) {\r
+       global $DIR_NUCLEUS,$NPG_CONF;\r
+       \r
+       $abs_dir = $DIR_NUCLEUS.'../';\r
+       $abs_dir = substr($DIR_NUCLEUS,0,strlen($DIR_NUCLEUS) - 8);\r
+       \r
+       //redo the thumbnails and intermediate images\r
+       if($id) $album = ' where albumid='.invtal($id);\r
+       $query = 'select * from '.sql_table('plug_gallery_picture').$album;\r
+       $result = sql_query($query);\r
+\r
+       echo 'Resizing images . . . ';\r
+       $timestart = microtime();\r
+       while($row=mysql_fetch_object($result)) {\r
+               //check if file exists:\r
+               \r
+               if(is_file($abs_dir.$row->filename)) {\r
+                       //make new thumbnail\r
+                       if($new_thumb = resizeImage($row->filename, $NPG_CONF['thumbwidth'], $NPG_CONF['thumbheight'], $row->thumb_filename)) {\r
+                               sql_query('update '.sql_table('plug_gallery_picture').' set thumb_filename=\''.addslashes($new_thumb).'\' where pictureid='.intval($row->pictureid));\r
+                       }\r
+                       else echo '<br/>file: '.$abs_dir.$row->thumb_filename.' could not be resized<br/>';\r
+                       //make new intermediate picture\r
+                       if($new_thumb = resizeImage($row->filename, $NPG_CONF['maxwidth'], $NPG_CONF['maxheight'], $row->int_filename)) {\r
+                               sql_query('update '.sql_table('plug_gallery_picture').' set int_filename=\''.addslashes($new_thumb).'\' where pictureid='.intval($row->pictureid));\r
+\r
+                       }\r
+                       else echo '<br/>file: '.$abs_dir.$row->int_filename.' could not be resized<br/>';\r
+               } else echo '<br/>file: '.$abs_dir.$row->filename.' does not exist -- no action taken<br/>';\r
+       }\r
+       echo 'Done<br/>';\r
+       $timeend = microtime();\r
+       $diff = number_format(((substr($timeend,0,9)) + (substr($timeend,-10)) - (substr($timestart,0,9)) - (substr($timestart,-10))),4);\r
+       echo "Execution time: $diff s <br/>";\r
+}\r
+function GDisPresent() {\r
+       if(function_exists('ImageCreateTrueColor')) return true;\r
+}\r
+\r
+function IMisPresent() {\r
+       global $NPG_CONF;\r
+       \r
+       $cmd = "{$NPG_CONF['im_path']}convert -version";\r
+       exec ($cmd, $output, $retval);\r
+       if($retval == 0) return true; \r
+       return false;\r
+}\r
+\r
+function getIMversion() {\r
+       global $NPG_CONF;\r
+       \r
+       $cmd = "{$NPG_CONF['im_path']}convert -version";\r
+       exec ($cmd, $output, $retval);\r
+       if($retval == 0) {\r
+               $pieces = explode(" ", $output[0]);\r
+               $imversion = $pieces[2];\r
+               return $imversion;\r
+       }\r
+       return false;\r
+}\r
+\r
+function checkgalleryconfig() {\r
+       global $NP_BASE_DIR,$NPG_CONF;\r
+       \r
+       $status = array();\r
+       \r
+       if((GDispresent() && $NPG_CONF['graphics_library'] == 'gd') || (IMisPresent() && $NPG_CONF['graphics_library'] == 'im')) {\r
+               $status['configured'] = true;\r
+       } else {\r
+               $status['message'] = 'Graphics engine not configured!<br/>';\r
+       }\r
+       \r
+       //check for presence of NPGallery skin\r
+       $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
+       if(!$res) {\r
+               $status['message'] .= 'mysql error checking for NPGallery skin: '.mysql_error().'<br/>';\r
+       }\r
+       else if(!mysql_num_rows($res)) {\r
+               $status['message'] .= 'NPGallery skin was not found<br/>';\r
+       }\r
+       else {\r
+               $row = mysql_fetch_object($res);\r
+               $haystack = stripslashes($row->scontent);\r
+               $s = stristr($haystack,'<%gallery');\r
+               if(!$s) {\r
+                       $status['message'] .= '<%gallery%> tag not found in NPGallery skin<br/>';\r
+               }\r
+       }\r
+       \r
+       //check for directory and directory permissions\r
+       $mediadir = $NP_BASE_DIR.$NPG_CONF['galleryDir'];\r
+       if (!@is_dir($mediadir)) {\r
+               $error = 'Gallery directory not found<br/>';\r
+               $oldumask = umask(0000);\r
+               if (!@mkdir($mediadir, 0777)) {\r
+                       $error = 'Cannot create gallery directory<br/>';\r
+               }\r
+               else {\r
+                       $error = NULL;\r
+                       umask($oldumask);                               \r
+               }\r
+               $status['message'] .= $error;\r
+       }\r
+       else {\r
+               if (!is_writeable($mediadir)) \r
+                       $status['message'] = 'Gallery directory: '.$mediadir.' not writable';\r
+       }\r
+       \r
+       if($status['message']) $status['configured'] = false; else $status['configured'] = true;\r
+       \r
+       return $status;\r
+       \r
+}\r
+\r
+function converttimestamp($d) {\r
+       if(strlen($d) > 14) list($year, $month, $day, $hour, $minute, $second) = sscanf($d, "%4u-%2u-%2u %2u:%2u:%2u");\r
+                       else list($year, $month, $day, $hour, $minute, $second) = sscanf($d, "%4u%2u%2u%2u%2u%2u");\r
+       $rd = mktime(intval($hour), intval($minute), intval($second), intval($month), intval($day), intval($year));\r
+       return $rd;\r
+}\r
+\r
+?>\r