OSDN Git Service

ADD: Mocchiが手がけたファイル管理プラグイン一式をコミット
[nucleus-jp/nucleus-plugins.git] / NP_ImprovedMedia / NP_ImprovedMedia.php
diff --git a/NP_ImprovedMedia/NP_ImprovedMedia.php b/NP_ImprovedMedia/NP_ImprovedMedia.php
new file mode 100755 (executable)
index 0000000..62bbf8b
--- /dev/null
@@ -0,0 +1,278 @@
+<?php\r
+/**\r
+ * ImprovedMedia plugin for Nucleus CMS\r
+ * Version 3.0.1 for PHP5\r
+ * Written By Mocchi, Feb.28, 2010\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_ImprovedMedia extends NucleusPlugin {\r
+ // private\r
+ private $baseUrl = ''; //string\r
+ // private\r
+ private $blog = FALSE; //object\r
+ // private\r
+ private $blogid = 1; //integer\r
\r
+ // public\r
+ public function __construct() {\r
+  global $CONF;\r
+  $this->baseUrl = str_replace($CONF['AdminURL'], '', $this->getAdminURL());\r
+  self::setBlogObject();\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function getName() { return 'ImprovedMedia'; }\r
+ // public\r
+ public function getAuthor() { return 'Mocchi'; }\r
+ // public\r
+ public function getURL() { return 'http://japan.nucleuscms.org/wiki/plugins:improvedmedia'; }\r
+ // public\r
+ public function getVersion() { return '3.0.1 for PHP5'; }\r
+ // public\r
+ public function getMinNucleusVersion() { return 223; }\r
+ // public\r
+ public function getDescription() { return _IM_DESCRIPTION; }\r
\r
+ // public\r
+ public function supportsFeature($what) {\r
+  global $CONF;\r
+  switch($what) {\r
+  case 'HelpPage':\r
+  case 'SqlTablePrefix':\r
+   return 1;\r
+  default:\r
+   return 0;\r
+  }\r
+ }\r
\r
+ // public\r
+ public function init() {\r
+  $language = preg_replace( '#[/|\\\\]#', '', getLanguageName());\r
+  if(file_exists($this->getDirectory() .'lang/' .  $language.'.php'))\r
+   include_once($this->getDirectory() . 'lang/' . $language.'.php');\r
+  else\r
+   include_once($this->getDirectory() . 'lang/english.php');\r
+  \r
+  if($this->getOption('IM_EACHBLOGDIR') == 'yes')\r
+   self::setDirectories();\r
+  \r
+  return;\r
+ }\r
\r
+ // public\r
+ public function install() {\r
+  $this->createOption('IM_PRIVATE', _IM_OPTION_PRIVATE , 'yesno', 'yes');\r
+  $this->createOption('IM_ITEMDISPLAY', _IM_OPTION_ITEMDISPLAY , 'text', '10', 'datatype=numerical' );\r
+  $this->createOption('IM_GREYBOX', _IM_OPTION_GREYBOX , 'yesno', 'no');\r
+  $this->createOption('IM_EACHBLOGDIR', _IM_OPTION_EACHBLOGDIR , 'yesno', 'no');\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function unInstall() {\r
+  $this->deleteOption('IM_PRIVATE');\r
+  $this->deleteOption('IM_ITEMDISPLAY');\r
+  $this->deleteOption('IM_GREYBOX');\r
+  $this->deleteOption('IM_EACHBLOGDIR');\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function getEventList() {\r
+  return array('InitSkinParse', 'AdminPrePageHead', 'BookmarkletExtraHead');\r
+ }\r
\r
+ // public\r
+ public function doAction($type) {\r
+  global $DIR_LIBS;\r
+  if(!class_exists('MEDIA', FALSE))\r
+   include($DIR_LIBS . 'MEDIA.php');\r
+  if(!class_exists('MEDIA_VARIABLES', FALSE))\r
+   include($this->getDirectory() . 'MEDIA_VARIABLES.php');\r
+  if(!class_exists('MEDIA_CONTROL', FALSE))\r
+   include($this->getDirectory() . 'MEDIA_CONTROL.php');\r
+  \r
+  new MEDIA_CONTROL($this);\r
+  exit;\r
+ }\r
\r
+ // public\r
+ public function doSkinVar($data, $place) {\r
+  global $CONF, $member;\r
+  if($member->isLoggedIn()) {\r
+   if($this->getOption('IM_GREYBOX') == 'yes') {\r
+    switch($place) {\r
+    case 'head':\r
+     echo '<script type="text/javascript">' . "\n" .\r
+      '<!--' . "\n" . \r
+      ' var GB_ROOT_DIR = "' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/";' . "\n" .\r
+      '// -->' . "\n" .\r
+      '</script>' . "\n" .\r
+      '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS.js"></script>' . "\n" .\r
+      '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS_fx.js"></script>' . "\n" .\r
+      '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_scripts.js"></script>' . "\n".\r
+      '<link href="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_styles.css" rel="stylesheet" type="text/css" />' . "\n";\r
+     break;\r
+    case 'anchor':\r
+     echo '<a href="' . $CONF['ActionURL'] . '?action=plugin&amp;name=ImprovedMedia&amp;astool=1&amp;blogid=' . $this->blogid . '" onclick="GB_showCenter(\'Media Control' . _IM_HEADER_TEXT . '\',this.href,540,600); return false;">' . _IM_ANCHOR_TEXT . '</a>';\r
+     break;\r
+    default:\r
+     break;\r
+    }\r
+   } else {\r
+    if($place == 'anchor') {\r
+     echo '<a href="' . $CONF['ActionURL'] . '?action=plugin&amp;name=ImprovedMedia&amp;astool=1&amp;blogid=' . $this->blogid . '" onclick="window.open(this.href , \'MediaControl\' , \'width=600 , height=600, scrollbars=1\'); return false;">' . _IM_ANCHOR_TEXT . '</a>';\r
+    }\r
+   }\r
+  }\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function event_InitSkinParse(&$data) {\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function event_BookmarkletExtraHead(&$data) {\r
+  self::addHeader($data['extrahead']);\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function event_AdminPrePageHead(&$data) {\r
+  if(($data['action'] == 'createitem') || ($data['action'] == 'itemedit'))\r
+   self::addHeader($data['extrahead']);\r
+  return;\r
+ }\r
\r
+ // private\r
+ private function addHeader(&$extrahead) {\r
+  global $CONF;\r
+  \r
+  if($this->getOption('IM_GREYBOX') == 'yes') {\r
+   $extrahead .= '<script type="text/javascript">' ."\n" .\r
+   '<!--' ."\n".\r
+   'function addMedia() {' ."\n".\r
+   ' GB_showCenter(\'Media Control' . _IM_HEADER_TEXT . '\',\'' . $CONF['ActionURL'] . '?action=plugin&name=ImprovedMedia&mode=upload_select&astool=0&blogid=' . $this->blogid . '\',540,600);' . "\n" .\r
+   '}' . "\n";\r
+  } else {\r
+   $extrahead .= '<script type="text/javascript">' ."\n" .\r
+   '<!--' ."\n".\r
+   'function addMedia() {' ."\n".\r
+   ' window.open(\'' . $CONF['ActionURL'] . '?action=plugin&name=ImprovedMedia&mode=upload_select&astool=0&blogid=' . $this->blogid . '\' , \'MediaControl\' , \'width=600 , height=600, scrollbars=1\');' . "\n" .\r
+   '}' . "\n";\r
+  }\r
+  $extrahead .= 'function includeImage(collection, filename, type, width, height, text) {' . "\n" .\r
+  ' var fullName;' . "\n" .\r
+  ' if(isNaN(collection) || (nucleusAuthorId != collection)) {' . "\n" .\r
+  '  fullName = collection + \'/\' + filename;' . "\n" .\r
+  ' } else {' . "\n" .\r
+  '  fullName = filename;' . "\n" .\r
+  ' }' . "\n" .\r
+  ' var replaceBy;' . "\n" .\r
+  ' switch(type) {' . "\n" .\r
+  ' case \'popup\':' . "\n" .\r
+  '  replaceBy = \'<%popup(\' +  fullName + \'|\'+width+\'|\'+height+\'|\' + text +\')%>\';' . "\n" .\r
+  '  break;' . "\n" .\r
+  ' case \'inline\':' . "\n" .\r
+  ' default:' . "\n" .\r
+  '  replaceBy = \'<%image(\' +  fullName + \'|\'+width+\'|\'+height+\'|\' + text +\')%>\';' . "\n" .\r
+  ' }' . "\n" .\r
+  ' insertAtCaret(replaceBy);' . "\n" .\r
+  ' updAllPreviews();' . "\n" .\r
+  '}' . "\n" .\r
+  '' . "\n" .\r
+  'function includeOtherMedia(collection, filename, text) {' . "\n" .\r
+  ' var fullName;' . "\n" .\r
+  ' if(isNaN(collection) || (nucleusAuthorId != collection)) {' . "\n" .\r
+  '  fullName = collection + \'/\' + filename;' . "\n" .\r
+  ' } else {' . "\n" .\r
+  '  fullName = filename;' . "\n" .\r
+  ' }' . "\n" .\r
+  ' var replaceBy = \'<%media(\' +  fullName + \'|\' + text +\')%>\';' . "\n" .\r
+  ' insertAtCaret(replaceBy);' . "\n" .\r
+  ' updAllPreviews();' . "\n" .\r
+  '}' .\r
+  '// -->' ."\n".\r
+  '</script>'."\n";\r
+  \r
+  if($this->getOption('IM_GREYBOX') == 'yes') {\r
+   $extrahead .= '<script type="text/javascript">' . "\n" .\r
+   '<!--' . "\n" .\r
+   ' var GB_ROOT_DIR = "' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/";' . "\n" .\r
+   '// -->' . "\n" .\r
+   '</script>' . "\n" .\r
+   '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS.js"></script>' . "\n" .\r
+   '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS_fx.js"></script>' . "\n" .\r
+   '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_scripts.js"></script>' . "\n" .\r
+   '<link href="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_styles.css" rel="stylesheet" type="text/css" />' . "\n";\r
+  }\r
+  return;\r
+ }\r
\r
+ // private\r
+ private function setBlogObject() {\r
+  global $manager, $blog;\r
+  \r
+  $blogid = intRequestVar('blogid');\r
+  $itemid = intRequestVar('itemid');\r
+  \r
+  if($blog) {\r
+   $this->blog =& $blog;\r
+   $this->blogid =& $blog->getID();\r
+   return;\r
+  }\r
+  \r
+  if($blogid && $manager->existsBlogID($blogid)) {\r
+   $this->blog =& $manager->getBlog($blogid);\r
+   $this->blogid =& $this->blog->getID();\r
+   return;\r
+  }\r
+  \r
+  if($itemid && $manager->existsItem($itemid, 1, 1)) {\r
+   $this->blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
+   $this->blogid =& $this->blog->getID();\r
+   return;\r
+  }\r
+ }\r
\r
+ // private\r
+ private function setDirectories() {\r
+  global $DIR_MEDIA, $CONF;\r
+  \r
+  if(!$this->blog)\r
+   return;\r
+  \r
+  $blog =& $this->blog;\r
+  $bshortname =& $blog->getShortName();\r
+  \r
+  if($this->blogid !== 1) {\r
+   $DIR_MEDIA = preg_replace('#(.+)/(.+)?/$#',"$1/$bshortname/$2/",$DIR_MEDIA);\r
+   $CONF['MediaURL'] = preg_replace( '#(.+)/(.+)?/$#' , "$1/$bshortname/$2/" , $CONF['MediaURL'] );\r
+  }\r
+  return;\r
+ }\r
\r
+ // public\r
+ public function & getBlog() {\r
+  return $this->blog;\r
+ }\r
\r
+ // public\r
+ public function & getBlogid() {\r
+  return $this->blogid;\r
+ }\r
\r
+ // public\r
+ public function getBaseURL() {\r
+  return $this->baseUrl;\r
+ }\r
+}\r
+?>
\ No newline at end of file