OSDN Git Service

NP_gallery v0.95
[nucleus-jp/nucleus-plugins.git] / NP_gallery / tags / v0.95 / gallery / add_picture.php
diff --git a/NP_gallery/tags/v0.95/gallery/add_picture.php b/NP_gallery/tags/v0.95/gallery/add_picture.php
new file mode 100644 (file)
index 0000000..1bbc84f
--- /dev/null
@@ -0,0 +1,469 @@
+<style type="text/css">\r
+<!--\r
+body,td,th {\r
+       font-family: Courier New, Courier, monospace;\r
+       font-size: 12px;\r
+       color: #000000;\r
+}\r
+body {\r
+       margin-left: 20px;\r
+       margin-top: 20px;\r
+}\r
+-->\r
+</style>\r
+<?php\r
+\r
+//add_picture.php\r
+include('../../../config.php');\r
+include_once(dirname(__FILE__).'/config.php'); //gallery config\r
+include_once($DIR_LIBS . 'ITEM.php');\r
+\r
+\r
+class NPG_PROMO_ACTIONS extends BaseActions {\r
+\r
+       var $parser;\r
+       var $thumbnails;\r
+       var $template;\r
+       var $CurrentThumb;\r
+\r
+       function NPG_PROMO_ACTIONS() {\r
+               $this->BaseActions();\r
+       }\r
+\r
+       function getdefinedActions() {\r
+               return array(\r
+                       'images',\r
+                       'thumbnail',\r
+                       'centeredtopmargin',\r
+                       'picturelink',\r
+                       'description'\r
+                       );      \r
+       }\r
+       \r
+       function setTemplate(&$template) {$this->template = &$template;}\r
+       function setParser(&$parser) {$this->parser =& $parser; }\r
+       function setCurrentThumb(&$CurrentThumb) {$this->CurrentThumb = &$CurrentThumb;}\r
+       \r
+       function addimagethumbnail($thumbnails) {$this->thumbnails = $this->thumbnails . $thumbnails;}\r
+       function needtoaddpromo() {if($this->thumbnails <> '') return true; return false;}\r
+       \r
+       function parse_images() { echo $this->thumbnails; }\r
+       function parse_description() {echo $this->CurrentThumb->getdescription(); }\r
+       function parse_thumbnail() {echo $this->CurrentThumb->getthumbfilename();}\r
+       function parse_picturelink() {echo '<%gallery(link,picture,'.$this->CurrentThumb->getID().')%>';}\r
+       function parse_centeredtopmargin($height = 140,$adjustment = 0) {\r
+               $image_size = getimagesize($this->CurrentThumb->getthumbfilename());\r
+               $topmargin = ((intval($height) - intval($image_size[1])) / 2) + intval($adjustment);\r
+               echo 'margin-top: '.$topmargin.'px;';\r
+       }\r
+}\r
+\r
+//globals for add_picture.php\r
+global $NPG_CONF,$gmember,$manager,$NP_BASE_DIR;\r
+\r
+if(!$NPG_CONF['temp_table']) {\r
+       $NPG_CONF['temp_table'] = 'gallery_temp';\r
+       setNPGoption('temp_table','gallery_temp');\r
+}\r
+\r
+if(!$NPG_CONF['batch_add_num']) $NPG_CONF['batch_add_num'] = 10;\r
+\r
+//todo: display header\r
+\r
+if (!preg_match('/^([a-z0-9_]+|`[^`]+`)$/i',$NPG_CONF['temp_table'])) exit;\r
+$type = requestvar('type');\r
+switch($type) {\r
+       case 'firststage':\r
+                       $exist_temp_table = mysql_query('SELECT 1 FROM '.$NPG_CONF['temp_table'].' LIMIT 0');\r
+                       if ($exist_temp_table) sql_query('drop table '. $NPG_CONF['temp_table']);\r
+               if(requestVar('id')) $albumid = requestVar('id'); else $albumid = 0;\r
+               $number_of_uploads=$NPG_CONF['batch_add_num'];\r
+               addPictureForm($albumid, $number_of_uploads);\r
+               break;\r
+       case 'secondstage':\r
+               if(requestVar('id')) $albumid = requestVar('id'); else $albumid = 0;\r
+               $result = mysql_query('create table '.$NPG_CONF['temp_table']\r
+                                               .'(tempid int unsigned not null auto_increment PRIMARY KEY, '\r
+                                               .'memberid int unsigned, '\r
+                                               .'albumid int unsigned, '\r
+                                               .'filename varchar(60), '\r
+                                               .'intfilename varchar(60), '\r
+                                               .'thumbfilename varchar(60), '\r
+                                               .'title varchar(40), '\r
+                                               .'description varchar(255), '\r
+                                               .'promote tinyint unsigned default 0, '\r
+                                               .'error varchar(60) default NULL)' );\r
+\r
+               $i=0;\r
+               while ($uploadInfo = postFileInfo('uploadpicture'.$i)) {\r
+                       if ($filename = $uploadInfo['name']) {\r
+                               $filetype = $uploadInfo['type'];\r
+                               $filesize = $uploadInfo['size'];\r
+                               $filetempname = $uploadInfo['tmp_name'];\r
+                               //this gets picasa captions from ITPC metadata\r
+                               $size = getimagesize($filetempname, $info);\r
+                               if (isset($info["APP13"])) {\r
+                                       $iptc = iptcparse($info["APP13"]);\r
+                                       $description = $iptc["2#120"][0];\r
+                               }\r
+                               //adds a picture to the temp table so user can add description, etc before actually adding to database\r
+                               add_temp($albumid, $filename, $filetype, $filesize, $filetempname,$description);\r
+                               }\r
+                       $i++;\r
+               }\r
+               addTempPictureForm($albumid);\r
+               break;\r
+       case 'massupload' :\r
+               //if the referring address is not this page, drop the table.\r
+               if(!stristr($_SERVER['HTTP_REFERER'],'add_picture.php')) {\r
+                       $exist_temp_table = mysql_query('SELECT 1 FROM '.$NPG_CONF['temp_table'].' LIMIT 0');\r
+                       if ($exist_temp_table) sql_query('drop table '. $NPG_CONF['temp_table']);\r
+                       echo 'starting a fresh massupload batch </br>';\r
+               }\r
+               else echo '...continuing a massupload batch </br>';\r
+               //create a table (if the table is already there, mysql just adds to the table)\r
+               if(requestVar('id')) $albumid = requestVar('id'); else $albumid = 0;\r
+               $result = mysql_query('create table '.$NPG_CONF['temp_table']\r
+                  .'(tempid int unsigned not null auto_increment PRIMARY KEY, '\r
+                  .'memberid int unsigned, '\r
+                  .'albumid int unsigned, '\r
+                  .'filename varchar(60), '\r
+                  .'intfilename varchar(60), '\r
+                  .'thumbfilename varchar(60), '\r
+                  .'title varchar(40), '\r
+                  .'description varchar(255), '\r
+                  .'promote tinyint unsigned default 0, '\r
+                  .'error varchar(60) default NULL)' );\r
+      //checks to see how many files are in the upload directory\r
+               if ($handle = opendir($NP_BASE_DIR.'upload')) {\r
+                               while (false !== ($filename = readdir($handle))) {\r
+                                       if (stristr($filename,'jpeg') or stristr($filename,'jpg')){\r
+                                               $scandir[] = $filename;\r
+                                       }\r
+                               }\r
+                               closedir($handle);\r
+                               $numpics = count($scandir);\r
+\r
+        echo 'there are ' . $numpics .' pictures(jpg) left in the upload directory </br>';\r
+        echo 'the massupload script will loop though '.$NPG_CONF['batch_add_num'].' pictures per time to prevent timeouts</br>';\r
+        //if there are more than 10 files, remember to refresh, \r
+        //this is to solve the incomplete database writes when scripts timeout\r
+        //have to reopen the directory so it starts from the first file again\r
+        $handle = opendir($NP_BASE_DIR.'upload');\r
+         for ( $i=0; false !==($file=readdir($handle)) and $i<=$NPG_CONF['batch_add_num']; $i++ ) {\r
+                       if (stristr($file,'jpeg') or stristr($file,'jpg')){\r
+                                       $filename = $file;\r
+                                       //echo $filename . 'uploaded </br>';\r
+                               $filetype = filetype($NP_BASE_DIR.'upload/' . $file);\r
+                               $filesize = filesize($NP_BASE_DIR.'upload/' . $file);\r
+                               $filetempname = $NP_BASE_DIR.'upload/' . $file;\r
+                               $size = getimagesize($filetempname, $info);\r
+                                       //this gets picasa captions from ITPC metadata\r
+                                               if (isset($info["APP13"])) {\r
+                                                       $iptc = iptcparse($info["APP13"]);\r
+                                                       $description = $iptc["2#120"][0];\r
+                                               }\r
+                                       //adds a picture to the temp table so user can add description, etc before actually adding to database\r
+                                       echo 'creating thumbnail for ';\r
+                                       echo $filename;\r
+                                       add_temp($albumid, $filename, $filetype, $filesize, $filetempname,$description);\r
+                                       echo '.... done. </br>';\r
+                                       }         \r
+         }\r
+         closedir($handle);\r
+      }\r
+      //if there were more than 10 files, refresh, else proceed.\r
+      if($numpics > $NPG_CONF['batch_add_num']){\r
+               echo "<SCRIPT LANGUAGE=\"JavaScript\">window.location=\" ".$_SERVER['SCRIPT_NAME']."?type=massupload&id=".$albumid." \";</script>";\r
+               }\r
+       addTempPictureForm($albumid);\r
+       break;\r
+       \r
+       case 'addpictures':\r
+               $i=0;\r
+               $promoallowed = postvar('promopost');\r
+               $promo_ids = array();\r
+               $setorpromo = $NPG_CONF['setorpromo'];\r
+               \r
+               if(!$NPG_CONF['template']) $NPG_CONF['template'] = 1;\r
+               $template = & new NPG_TEMPLATE($NPG_CONF['template']);\r
+               \r
+               $actions = new NPG_PROMO_ACTIONS();\r
+               $parser = new PARSER($actions->getdefinedActions(),$actions);\r
+               $actions->setparser($parser);\r
+               $actions->settemplate($template);\r
+               \r
+               while($tempid = postvar('tid'.$i)) {\r
+                       $title = postvar('title'.$i);\r
+                       $description = postvar('description'.$i);\r
+                       $promote = postvar('promote'.$i);\r
+                       $albumid = postvar('album'.$i);\r
+\r
+                       $filename = $NPG_CONF['galleryDir'].'/'.postvar('filename'.$i);\r
+                       $int_filename = postvar('intfilename'.$i);\r
+                       $thumb_filename = postvar('thumbfilename'.$i);\r
+                       $keywords = postvar('keywords'.$i);\r
+\r
+                       //check permissions to add\r
+                       if($gmember->canAddPicture($albumid)) {\r
+                               $pict = new PICTURE(0);\r
+                               $newid = $pict->add_new($albumid, $filename, $title, $description, $int_filename, $thumb_filename,$keywords);\r
+                               echo "$filename added<br/>";\r
+                               \r
+                               //promotion post\r
+                               if ($promoallowed == '1' && $promote == 'yes') {\r
+                                       ob_start();\r
+                                       $actions->setCurrentThumb($pict);\r
+                                       $parser->parse($template->section['PROMO_IMAGES']);\r
+                                       $capt = ob_get_contents();\r
+                                       ob_end_clean();\r
+                                       $actions->addimagethumbnail($capt);\r
+                                       array_push($promo_ids, $newid);\r
+                               }\r
+                               unset($pict);\r
+                               \r
+                               $manager->notify('NPgPostAddPicture',array('pictureid' => $newid));\r
+                       }\r
+                       else {\r
+                               echo "$filename not added due to bad album permissions<br/>";\r
+                               //delete files\r
+                               if(file_exists($galleryDir.'/'.$filename))  unlink($galleryDir.'/'.$filename);\r
+                               if(file_exists($int_filename))  unlink($int_filename);\r
+                               if(file_exists($thumb_filename))  unlink($thumb_filename);\r
+                               \r
+                       }\r
+\r
+                       $i++;\r
+               }\r
+\r
+               if ($promoallowed == '1' && $actions->needtoaddpromo() ) {\r
+\r
+                       $today = getdate();\r
+                       $hour = $today['hours'];\r
+                       $minutes = $today['minutes'];\r
+                       $day = $today['mday'];\r
+                       $month = $today['mon'];\r
+                       $year = $today['year'];\r
+                       \r
+                       \r
+                       ob_start();\r
+                       $parser->parse($template->section['PROMO_TITLE']);\r
+                       $title = ob_get_contents();\r
+                       ob_end_clean();\r
+                       if ($setorpromo=='promo'){\r
+                               ob_start();\r
+                               $parser->parse($template->section['PROMO_BODY']);\r
+                               $body = ob_get_contents();\r
+                               ob_end_clean();\r
+                       }\r
+                       if ($setorpromo=='sets'){\r
+                               $body = '<%gallery(keywords,'.$promokeywords.',desc)%>';\r
+                       }\r
+\r
+                       ?>\r
+                               <br/><hr/><br/>\r
+                               <form><input type="button" value="<?php echo __NPG_PROMO_FORM_CANCEL; ?>" onclick="window.close()"/></form>\r
+                               <form method="post" action="add_picture.php"><div>\r
+                                       <input type="hidden" name="type" value="promopost" />\r
+                                       <input type="hidden" name="catid" value="<?php echo $NPG_CONF['blog_cat']; ?>" />\r
+                                       <input type="hidden" name="hour" value="<?php echo $hour; ?>" />\r
+                                       <input type="hidden" name="minutes" value="<?php echo $minutes; ?>" />\r
+                                       <input type="hidden" name="day" value="<?php echo $day; ?>" />\r
+                                       <input type="hidden" name="year" value="<?php echo $year; ?>" />\r
+                                       <input type="hidden" name="month" value="<?php echo $month; ?>" />\r
+                                       <input type="hidden" name="ids" value="<?php echo implode(",",$promo_ids); ?>" />\r
+                                       \r
+                                       <p><label for "title_f"><?php echo __NPG_PROMO_FORM_TITLE.'<br/>'; ?></label>\r
+                                       <input type="text" name="title" id="title_f" value="<?php echo $title; ?>" /></p>\r
+                                       \r
+                                       <p><label for "body_f"><?php echo __NPG_PROMO_FORM_BODY.'<br/>'; ?></label>\r
+                                       <textarea rows="10" cols="50" name="body" id="body_f" >\r
+                                       <?php echo $body; ?></textarea></p>\r
+                                       <input type="submit" value="<?php echo __NPG_PROMO_FORM_SUBMIT; ?>" />\r
+                                       <br/>\r
+                                       \r
+                       <?php\r
+                       \r
+               }\r
+               else {\r
+                       echo '<br/><hr/><br/>';\r
+                       echo '<form><input type="button" value="'.__NPG_PROMO_FORM_CLOSE.'" onclick="window.close()"/></form>';\r
+               }\r
+                               \r
+               \r
+               $exist_temp_table = mysql_query('SELECT 1 FROM '.$NPG_CONF['temp_table'].' LIMIT 0');\r
+               if ($exist_temp_table) sql_query('drop table '. $NPG_CONF['temp_table']);\r
+\r
+               break;\r
+       \r
+       case 'promopost':\r
+               global $manager;\r
+               $ids = explode(",", postvar('ids'));\r
+               $result = ITEM::createFromRequest();\r
+               if ($result['status'] == 'error')\r
+                       echo $result['message']; \r
+                       else {\r
+                               $j=0;\r
+                               while($ids[$j]) {\r
+                                       $query = 'insert into '.sql_table('plug_gallery_promo').' values ('.intval($ids[$j]).', '.intval($result['itemid']).')';\r
+                                       sql_query($query);\r
+                                       $j++;\r
+                               }\r
+                               echo __NPG_PROMO_FORM_SUCCESS.'<br/>';\r
+                               echo '<form><input type="button" value="' . __NPG_PROMO_FORM_CLOSE . '" onclick="window.close()"/></form>';\r
+                               \r
+                       }\r
+               break;\r
+               \r
+       case 'picasa' :\r
+      if(requestVar('id')) $albumid = requestVar('id'); else $albumid = 0;\r
+      $result = mysql_query('create temporary table '.$NPG_CONF['temp_table']\r
+                  .'(tempid int unsigned not null auto_increment PRIMARY KEY, '\r
+                  .'memberid int unsigned, '\r
+                  .'albumid int unsigned, '\r
+                  .'filename varchar(60), '\r
+                  .'intfilename varchar(60), '\r
+                  .'thumbfilename varchar(60), '\r
+                  .'title varchar(40), '\r
+                  .'description varchar(255), '\r
+                  .'promote tinyint unsigned default 0, '\r
+                  .'error varchar(60) default NULL)' );\r
+      //creates an xml parser and puts the xml into an array\r
+      $p = xml_parser_create();\r
+      if (!($fp = fopen($NP_BASE_DIR."upload/index.xml", "r"))) {die("unable to open XML");}\r
+      $contents = fread($fp, filesize($NP_BASE_DIR."upload/index.xml"));\r
+      xml_parse_into_struct($p,$contents,$vals,$index);\r
+      fclose($fp);\r
+      xml_parser_free($p);\r
+      //get album item count and loop through the pictures, putting filename and description into the temp database\r
+      $count = $index["ALBUMITEMCOUNT"][0];\r
+      $albumitemcount = $vals[$count]["value"];\r
+      for ($i=0; $i<$albumitemcount;$i++) {\r
+         $count = $index["ITEMNAME"][$i];\r
+         $filename = $vals[$count]["value"];\r
+         $count = $index["ITEMCAPTION"][$i];\r
+         $description = $vals[$count]["value"];\r
+         $filename = trim($filename);\r
+         $filetempname = $NP_BASE_DIR.'upload/images/' . $filename ;\r
+         $filetype = filetype($filetempname);\r
+         $filesize = filesize($filetempname);\r
+         //adds a picture to the temp table so user can add description, etc before actually adding to database\r
+         add_temp($albumid, $filename, $filetype, $filesize, $filetempname, $description);\r
+         \r
+      }\r
+       \r
+               \r
+       default:\r
+               break;\r
+}\r
+\r
+\r
+\r
+\r
+//adds a picture to the temp table so user can add description, etc before actually adding to database\r
+\r
+function add_temp($albumid = 0, $filename, $filetype, $filesize, $filetempname, $description = '') {\r
+       global $NPG_CONF, $gmember, $NP_BASE_DIR,$manager;\r
+       $memberid = $gmember->getID();\r
+       if (!preg_match('/^([a-z0-9_]+|`[^`]+`)$/i',$NPG_CONF['temp_table'])) exit;\r
+       $temp_table = $NPG_CONF['temp_table'];\r
+       $int_filename = '';\r
+       $thumb_filename = '';\r
+       $error = '';\r
+       $defaulttitle = $filename;\r
+       $NPG_CONF['randomprefix'] = 6;\r
+\r
+       //add prefix to filename -- from http://www.phpdig.net/ref/rn22re349.html\r
+               //or add current date to filename , option set in plugin admin\r
+       $dateorrandom = $NPG_CONF['dateorrandom'];\r
+\r
+       if ($dateorrandom == 'randomprefix'){\r
+               $str = "";\r
+               for ($i = 0; $i < $NPG_CONF['randomprefix']; ++$i) {\r
+               $str .= chr(rand() % 26 + 97);\r
+               }\r
+               $filename = $str . $filename;\r
+       }\r
+       if ($dateorrandom == 'dateprefix'){\r
+               $str = "";\r
+               $str = date('Y-m-d');\r
+               $filename = $str . $filename;\r
+       }\r
+       //check filesize\r
+\r
+       if ($filesize > $NPG_CONF['max_filesize']) \r
+               $error = 'FILE_TOO_BIG';\r
+       else {\r
+               //check filetype -- currently only jpeg supported       \r
+               if (eregi("\.jpeg$",$filename)) $ok = 1;\r
+               if (eregi("\.jpg$",$filename)) $ok = 1;\r
+               if (!$ok) \r
+                       $error='BADFILETYPE';\r
+                       else {\r
+                               //check if gallery directory exists, try to create if it doesn't, check write permssions\r
+                               $mediadir = $NPG_CONF['galleryDir'];\r
+                               if (!@is_dir($NP_BASE_DIR.$mediadir)) {\r
+                                       $error = 'Disallowed';\r
+                                       $oldumask = umask(0000);\r
+                                       if (!@mkdir($NP_BASE_DIR.$mediadir, 0777)) $error='Cannot create gallery directory'; \r
+                                       else {\r
+                                               $error = NULL;\r
+                                               umask($oldumask);                               \r
+                                       }\r
+                               }\r
+                               else {\r
+                                       if (!is_writeable($NP_BASE_DIR.$mediadir)) $error = 'Gallery directory not writable';\r
+                                       else {\r
+                                               // add trailing slash (don't add it earlier since it causes mkdir to fail on some systems)\r
+                                               $mediadir .= '/';\r
+                                               //check if file already exists -- todo:if it does, add it to the database?\r
+                                               if (file_exists($NP_BASE_DIR.$mediadir . $filename)) $error = 'UPLOADDUPLICATE';\r
+                                               else {\r
+                                                       //move file : courtesy of Leslie Holmes www.CyberSparrow.com\r
+                                                       if (is_file($filetempname)) {\r
+                                                               if (@rename($filetempname,$NP_BASE_DIR. $mediadir . $filename)){\r
+                                                               // it worked, no problems\r
+                                                               } elseif (copy($filetempname,$NP_BASE_DIR. $mediadir . $filename)){\r
+                                                               // rename didn't work, so we tried copy and it worked, now delete original upload file\r
+                                                                       unlink($filetempname);\r
+                                                               } else {\r
+                                                               // neither method worked, so report error\r
+                                                                       $error = 'ERROR_UPLOADCOPY,ERROR_UPLOADMOVE' ;\r
+                                                               }\r
+                                                       }               \r
+                                                       //chmod file\r
+                                                       $oldumask = umask(0000);\r
+                                                       @chmod($NP_BASE_DIR.$mediadir . $filename, 0644); \r
+                                                       umask($oldumask);\r
+\r
+                                                       if(($NPG_CONF['graphics_library']=='gd' && GDisPresent()) || ($NPG_CONF['graphics_library']=='im' && IMisPresent()) ) {\r
+                                                               //make intermediate file and thumbnail\r
+                                                               $int_filename = resizeImage($mediadir.$filename, $NPG_CONF['maxwidth'], $NPG_CONF['maxheight'], $mediadir.$NPG_CONF['int_prefix'].$filename);\r
+                                                               $thumb_filename = resizeImage($mediadir.$filename, $NPG_CONF['thumbwidth'], $NPG_CONF['thumbheight'], $mediadir.$NPG_CONF['thumb_prefix'].$filename);\r
+                                                       }\r
+                                                       else {\r
+                                                               $error = 'Graphics library not configured properly';\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               \r
+\r
+       \r
+\r
+     $query = 'insert into '\r
+      .$temp_table\r
+      .'(tempid,memberid,albumid,filename,intfilename,thumbfilename,title,description,promote,error)'\r
+      ." values (NULL, ".intval($memberid).", ".intval($albumid).", '".addslashes($filename)."', '".addslashes($int_filename)."', '".addslashes($thumb_filename)."', '".addslashes($defaulttitle)."', '".addslashes($description)."', 0, '".addslashes($error)."') ";\r
+   //echo $query.'<br/>';\r
+   $result = sql_query($query);\r
+\r
+\r
+\r
+}\r
+\r
+\r
+?>\r