OSDN Git Service

ADD: Mocchiが手がけたファイル管理プラグイン一式をコミット
[nucleus-jp/nucleus-plugins.git] / NP_MediaUtils / NP_MediaUtils.php
diff --git a/NP_MediaUtils/NP_MediaUtils.php b/NP_MediaUtils/NP_MediaUtils.php
new file mode 100755 (executable)
index 0000000..a59d12a
--- /dev/null
@@ -0,0 +1,122 @@
+<?php\r
+/**\r
+ * MediaUtils plugin for Nucleus CMS\r
+ * Version 0.9.6 (1.0 RC2) for PHP5\r
+ * Written By Mocchi, Apr. 04, 2011\r
+ * \r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 3\r
+ * of the License, or (at your option) any later version.\r
+ */\r
+\r
+class NP_MediaUtils extends NucleusPlugin {\r
+       public function getName()                       { return 'MediaUtils'; }\r
+       public function getAuthor()             { return 'Mocchi'; }\r
+       public function getURL()                        { return 'http://japan.nucleuscms.org/wiki/plugins:mediautils'; }\r
+       public function getVersion()            { return '0.9.6 (1.0 RC2)'; }\r
+       public function getDescription()        { return 'Load MediaUtils, static function set for media management. Another function of this plugin is keeping Cookies for identifying weblog id.'; }\r
+       \r
+       public function getMinNucleusVersion()  { return 340; }\r
+       public function supportsFeature($feature) { return in_array ($feature, array ('SqlTablePrefix', 'SqlApi')); }\r
+       public function getEventList()  { return array('PostAuthentication', 'InitSkinParse', 'PreSendContentType'); }\r
+       \r
+       /*\r
+        * NOTICE: Event drivened method can get a correct blogid in initSkinParse.\r
+        */\r
+       public function event_PostAuthentication($data) {\r
+               global $CONF;\r
+               static $blogid = 0;\r
+               static $blogs = array();\r
+               \r
+               if (!class_exists('MediaUtils', FALSE)) {\r
+                       include ($this->getDirectory() . 'MediaUtils.php');\r
+               }\r
+               \r
+               MediaUtils::$lib_path = preg_replace('#/*$#', '', $this->getDirectory());\r
+               MediaUtils::$prefix = (boolean) $CONF['MediaPrefix'];\r
+               MediaUtils::$maxsize = (integer) $CONF['MaxUploadSize'];\r
+               \r
+               $suffixes = explode(',', $CONF['AllowedTypes']);\r
+               foreach ($suffixes as $suffix) {\r
+                       $suffix = trim($suffix);\r
+                       if(!in_array($suffix, MediaUtils::$suffixes)) {\r
+                               MediaUtils::$suffixes[] = strtolower($suffix);\r
+                       }\r
+               }\r
+               \r
+               $result = sql_query('SELECT bnumber, bshortname FROM ' . sql_table('blog') . ';');\r
+               while(FALSE !== ($row = sql_fetch_assoc($result))) {\r
+                       $blogs[$row['bnumber']] = $row['bshortname'];\r
+               }\r
+               MediaUtils::$blogs = $blogs;\r
+               \r
+               if (array_key_exists('blogid', $_GET)) {\r
+                       $blogid = (integer) $_GET['blogid'];\r
+               } else if (array_key_exists('blogid', $_POST)) {\r
+                       $blogid = (integer) $_POST['blogid'];\r
+               } else if (array_key_exists('itemid', $_GET)) {\r
+                       $blogid = (integer) getBlogIDFromItemID((integer) $_GET['itemid']);\r
+               } else if (array_key_exists('itemid', $_POST)) {\r
+                       $blogid = (integer) getBlogIDFromItemID((integer) $_POST['itemid']);\r
+               } else if (array_key_exists(MediaUtils::$cookiename, $_COOKIE)) {\r
+                       $blogid = (integer) $_COOKIE['blogid'];\r
+               }\r
+               \r
+               if (!$blogid || !array_key_exists($blogid, $blogs)) {\r
+                       self::setCookie(-1);\r
+                       return;\r
+               }\r
+               \r
+               MediaUtils::$blogid = (integer) $blogid;\r
+               MediaUtils::$bshortname = (string) $blogs[$blogid];\r
+               self::setCookie(1);\r
+               \r
+               return;\r
+       }\r
+       \r
+       public function event_PreSendContentType($data) {\r
+               global $blog, $blogid;\r
+               if (MediaUtils::$blogid) {\r
+                       return;\r
+               }\r
+               \r
+               if (!$blogid && !$blog) {\r
+                       self::setCookie(-1);\r
+                       return;\r
+               }\r
+               \r
+               if (!$blogid) {\r
+                       MediaUtils::$blogid = $blog->getID();\r
+               } else {\r
+                       MediaUtils::$blogid = $blogid;\r
+               }\r
+               \r
+               if (!$blog) {\r
+                       MediaUtils::$bshortname = $manager->getBlog(MediaUtils::$blogid)->getShortName();\r
+               } else {\r
+                       MediaUtils::$bshortname = $blog->getShortName();\r
+               }\r
+               \r
+               self::setCookie(1);\r
+               return;\r
+       }\r
+       \r
+       public function event_InitSkinParse($data) {\r
+               global $blogid;\r
+               if (MediaUtils::$blogid != $blogid) {\r
+                       MediaUtils::$blogid = $blogid;\r
+                       MediaUtils::$bshortname = MediaUtils::$blogs[MediaUtils::$blogid];\r
+                       self::setCookie(1);\r
+               }\r
+               return;\r
+       }\r
+       \r
+       private function setCookie($factor) {\r
+               global $CONF;\r
+               $factor = (integer) $factor;\r
+               \r
+               setcookie($CONF['CookiePrefix'] . MediaUtils::$cookiename, MediaUtils::$blogid, time()+180*$factor, $CONF['CookiePath'], $CONF['CookieDomain'], $CONF['CookieSecure']);\r
+               return;\r
+       }\r
+}\r