OSDN Git Service

FIX: NP_AttachをNucleus 3.65/PHP5.4/MySQL5.5で動作するよう修正
[nucleus-jp/nucleus-plugins.git] / NP_ImprovedMedia / NP_ImprovedMedia.php
1 <?php\r
2 /**\r
3  * ImprovedMedia plugin for Nucleus CMS\r
4  * Version 3.0.1 for PHP5\r
5  * Written By Mocchi, Feb.28, 2010\r
6  * \r
7  * This program is free software; you can redistribute it and/or\r
8  * modify it under the terms of the GNU General Public License\r
9  * as published by the Free Software Foundation; either version 3\r
10  * of the License, or (at your option) any later version.\r
11  */\r
12 \r
13 class NP_ImprovedMedia extends NucleusPlugin {\r
14  // private\r
15  private $baseUrl = ''; //string\r
16  // private\r
17  private $blog = FALSE; //object\r
18  // private\r
19  private $blogid = 1; //integer\r
20  \r
21  // public\r
22  public function __construct() {\r
23   global $CONF;\r
24   $this->baseUrl = str_replace($CONF['AdminURL'], '', $this->getAdminURL());\r
25   self::setBlogObject();\r
26   return;\r
27  }\r
28  \r
29  // public\r
30  public function getName() { return 'ImprovedMedia'; }\r
31  // public\r
32  public function getAuthor() { return 'Mocchi'; }\r
33  // public\r
34  public function getURL() { return 'http://japan.nucleuscms.org/wiki/plugins:improvedmedia'; }\r
35  // public\r
36  public function getVersion() { return '3.0.1 for PHP5'; }\r
37  // public\r
38  public function getMinNucleusVersion() { return 223; }\r
39  // public\r
40  public function getDescription() { return _IM_DESCRIPTION; }\r
41  \r
42  // public\r
43  public function supportsFeature($what) {\r
44   global $CONF;\r
45   switch($what) {\r
46   case 'HelpPage':\r
47   case 'SqlTablePrefix':\r
48    return 1;\r
49   default:\r
50    return 0;\r
51   }\r
52  }\r
53  \r
54  // public\r
55  public function init() {\r
56   $language = preg_replace( '#[/|\\\\]#', '', getLanguageName());\r
57   if(file_exists($this->getDirectory() .'lang/' .  $language.'.php'))\r
58    include_once($this->getDirectory() . 'lang/' . $language.'.php');\r
59   else\r
60    include_once($this->getDirectory() . 'lang/english.php');\r
61   \r
62   if($this->getOption('IM_EACHBLOGDIR') == 'yes')\r
63    self::setDirectories();\r
64   \r
65   return;\r
66  }\r
67  \r
68  // public\r
69  public function install() {\r
70   $this->createOption('IM_PRIVATE', _IM_OPTION_PRIVATE , 'yesno', 'yes');\r
71   $this->createOption('IM_ITEMDISPLAY', _IM_OPTION_ITEMDISPLAY , 'text', '10', 'datatype=numerical' );\r
72   $this->createOption('IM_GREYBOX', _IM_OPTION_GREYBOX , 'yesno', 'no');\r
73   $this->createOption('IM_EACHBLOGDIR', _IM_OPTION_EACHBLOGDIR , 'yesno', 'no');\r
74   return;\r
75  }\r
76  \r
77  // public\r
78  public function unInstall() {\r
79   $this->deleteOption('IM_PRIVATE');\r
80   $this->deleteOption('IM_ITEMDISPLAY');\r
81   $this->deleteOption('IM_GREYBOX');\r
82   $this->deleteOption('IM_EACHBLOGDIR');\r
83   return;\r
84  }\r
85  \r
86  // public\r
87  public function getEventList() {\r
88   return array('InitSkinParse', 'AdminPrePageHead', 'BookmarkletExtraHead');\r
89  }\r
90  \r
91  // public\r
92  public function doAction($type) {\r
93   global $DIR_LIBS;\r
94   if(!class_exists('MEDIA', FALSE))\r
95    include($DIR_LIBS . 'MEDIA.php');\r
96   if(!class_exists('MEDIA_VARIABLES', FALSE))\r
97    include($this->getDirectory() . 'MEDIA_VARIABLES.php');\r
98   if(!class_exists('MEDIA_CONTROL', FALSE))\r
99    include($this->getDirectory() . 'MEDIA_CONTROL.php');\r
100   \r
101   new MEDIA_CONTROL($this);\r
102   exit;\r
103  }\r
104  \r
105  // public\r
106  public function doSkinVar($data, $place) {\r
107   global $CONF, $member;\r
108   if($member->isLoggedIn()) {\r
109    if($this->getOption('IM_GREYBOX') == 'yes') {\r
110     switch($place) {\r
111     case 'head':\r
112      echo '<script type="text/javascript">' . "\n" .\r
113       '<!--' . "\n" . \r
114       ' var GB_ROOT_DIR = "' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/";' . "\n" .\r
115       '// -->' . "\n" .\r
116       '</script>' . "\n" .\r
117       '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS.js"></script>' . "\n" .\r
118       '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS_fx.js"></script>' . "\n" .\r
119       '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_scripts.js"></script>' . "\n".\r
120       '<link href="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_styles.css" rel="stylesheet" type="text/css" />' . "\n";\r
121      break;\r
122     case 'anchor':\r
123      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
124      break;\r
125     default:\r
126      break;\r
127     }\r
128    } else {\r
129     if($place == 'anchor') {\r
130      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
131     }\r
132    }\r
133   }\r
134   return;\r
135  }\r
136  \r
137  // public\r
138  public function event_InitSkinParse(&$data) {\r
139   return;\r
140  }\r
141  \r
142  // public\r
143  public function event_BookmarkletExtraHead(&$data) {\r
144   self::addHeader($data['extrahead']);\r
145   return;\r
146  }\r
147  \r
148  // public\r
149  public function event_AdminPrePageHead(&$data) {\r
150   if(($data['action'] == 'createitem') || ($data['action'] == 'itemedit'))\r
151    self::addHeader($data['extrahead']);\r
152   return;\r
153  }\r
154  \r
155  // private\r
156  private function addHeader(&$extrahead) {\r
157   global $CONF;\r
158   \r
159   if($this->getOption('IM_GREYBOX') == 'yes') {\r
160    $extrahead .= '<script type="text/javascript">' ."\n" .\r
161    '<!--' ."\n".\r
162    'function addMedia() {' ."\n".\r
163    ' 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
164    '}' . "\n";\r
165   } else {\r
166    $extrahead .= '<script type="text/javascript">' ."\n" .\r
167    '<!--' ."\n".\r
168    'function addMedia() {' ."\n".\r
169    ' 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
170    '}' . "\n";\r
171   }\r
172   $extrahead .= 'function includeImage(collection, filename, type, width, height, text) {' . "\n" .\r
173   ' var fullName;' . "\n" .\r
174   ' if(isNaN(collection) || (nucleusAuthorId != collection)) {' . "\n" .\r
175   '  fullName = collection + \'/\' + filename;' . "\n" .\r
176   ' } else {' . "\n" .\r
177   '  fullName = filename;' . "\n" .\r
178   ' }' . "\n" .\r
179   ' var replaceBy;' . "\n" .\r
180   ' switch(type) {' . "\n" .\r
181   ' case \'popup\':' . "\n" .\r
182   '  replaceBy = \'<%popup(\' +  fullName + \'|\'+width+\'|\'+height+\'|\' + text +\')%>\';' . "\n" .\r
183   '  break;' . "\n" .\r
184   ' case \'inline\':' . "\n" .\r
185   ' default:' . "\n" .\r
186   '  replaceBy = \'<%image(\' +  fullName + \'|\'+width+\'|\'+height+\'|\' + text +\')%>\';' . "\n" .\r
187   ' }' . "\n" .\r
188   ' insertAtCaret(replaceBy);' . "\n" .\r
189   ' updAllPreviews();' . "\n" .\r
190   '}' . "\n" .\r
191   '' . "\n" .\r
192   'function includeOtherMedia(collection, filename, text) {' . "\n" .\r
193   ' var fullName;' . "\n" .\r
194   ' if(isNaN(collection) || (nucleusAuthorId != collection)) {' . "\n" .\r
195   '  fullName = collection + \'/\' + filename;' . "\n" .\r
196   ' } else {' . "\n" .\r
197   '  fullName = filename;' . "\n" .\r
198   ' }' . "\n" .\r
199   ' var replaceBy = \'<%media(\' +  fullName + \'|\' + text +\')%>\';' . "\n" .\r
200   ' insertAtCaret(replaceBy);' . "\n" .\r
201   ' updAllPreviews();' . "\n" .\r
202   '}' .\r
203   '// -->' ."\n".\r
204   '</script>'."\n";\r
205   \r
206   if($this->getOption('IM_GREYBOX') == 'yes') {\r
207    $extrahead .= '<script type="text/javascript">' . "\n" .\r
208    '<!--' . "\n" .\r
209    ' var GB_ROOT_DIR = "' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/";' . "\n" .\r
210    '// -->' . "\n" .\r
211    '</script>' . "\n" .\r
212    '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS.js"></script>' . "\n" .\r
213    '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/AJS_fx.js"></script>' . "\n" .\r
214    '<script type="text/javascript" src="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_scripts.js"></script>' . "\n" .\r
215    '<link href="' . $CONF['AdminURL'] . $this->baseUrl . 'greybox/gb_styles.css" rel="stylesheet" type="text/css" />' . "\n";\r
216   }\r
217   return;\r
218  }\r
219  \r
220  // private\r
221  private function setBlogObject() {\r
222   global $manager, $blog;\r
223   \r
224   $blogid = intRequestVar('blogid');\r
225   $itemid = intRequestVar('itemid');\r
226   \r
227   if($blog) {\r
228    $this->blog =& $blog;\r
229    $this->blogid =& $blog->getID();\r
230    return;\r
231   }\r
232   \r
233   if($blogid && $manager->existsBlogID($blogid)) {\r
234    $this->blog =& $manager->getBlog($blogid);\r
235    $this->blogid =& $this->blog->getID();\r
236    return;\r
237   }\r
238   \r
239   if($itemid && $manager->existsItem($itemid, 1, 1)) {\r
240    $this->blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
241    $this->blogid =& $this->blog->getID();\r
242    return;\r
243   }\r
244  }\r
245  \r
246  // private\r
247  private function setDirectories() {\r
248   global $DIR_MEDIA, $CONF;\r
249   \r
250   if(!$this->blog)\r
251    return;\r
252   \r
253   $blog =& $this->blog;\r
254   $bshortname =& $blog->getShortName();\r
255   \r
256   if($this->blogid !== 1) {\r
257    $DIR_MEDIA = preg_replace('#(.+)/(.+)?/$#',"$1/$bshortname/$2/",$DIR_MEDIA);\r
258    $CONF['MediaURL'] = preg_replace( '#(.+)/(.+)?/$#' , "$1/$bshortname/$2/" , $CONF['MediaURL'] );\r
259   }\r
260   return;\r
261  }\r
262  \r
263  // public\r
264  public function & getBlog() {\r
265   return $this->blog;\r
266  }\r
267  \r
268  // public\r
269  public function & getBlogid() {\r
270   return $this->blogid;\r
271  }\r
272  \r
273  // public\r
274  public function getBaseURL() {\r
275   return $this->baseUrl;\r
276  }\r
277 }\r
278 ?>