OSDN Git Service

FIX: NP_AttachをNucleus 3.65/PHP5.4/MySQL5.5で動作するよう修正
[nucleus-jp/nucleus-plugins.git] / NP_Attach / NP_Attach.php
1 <?php\r
2 /**\r
3  * Attach plugin for Nucleus CMS\r
4  * Version 1.0.0 for PHP5\r
5  * Written By Mocchi, Oct. 20, 2012\r
6  * Original code was written by NKJG and yamamoto, May 02, 2009\r
7  * This plugin depends on NP_Thumbnail and NP_MediaUtils\r
8  * \r
9  * This program is free software; you can redistribute it and/or\r
10  * modify it under the terms of the GNU General Public License\r
11  * as published by the Free Software Foundation; either version 3\r
12  * of the License, or (at your option) any later version.\r
13  */\r
14 \r
15 // TODO (hard) If itemOption is set as "hidden", PrePluginOptionsUpdate event is not generated, related Nucleus CMS library problem.\r
16 // TODO (hard) There are no ways to show the error message even if upload processing is failed.\r
17 // TODO (medium) all of the plugin options are purged when uninstalling plugins.\r
18 \r
19 class NP_Attach extends NucleusPlugin\r
20 {\r
21         static private $buffer = false;\r
22         static private $blogid = 0;\r
23         static private $itemid = 0;\r
24         static private $amount = 0;\r
25         static private $data = array();\r
26         \r
27         public function getName()                       { return 'Attach'; }\r
28         public function getAuthor()             { return 'Mocchi, yamamoto, NKJG'; }\r
29         public function getURL()                        { return 'http://japan.nucleuscms.org/wiki/plugins:attach'; }\r
30         public function getVersion()            { return '1.0.0'; }\r
31         public function getDescription()        { return _NP_ATTACH_01; }\r
32         public function getPluginDep()  { return array('NP_MediaUtils', 'NP_Thumbnail');}\r
33         public function getMinNucleusVersion()  {return 340;}\r
34         public function supportsFeature($feature)       { return in_array($feature, array('SqlTablePrefix', 'SqlApi'));}\r
35         public function getEventList()\r
36         {\r
37                 return array(\r
38                         'PrePluginOptionsEdit', \r
39                         'AdminPrePageHead',\r
40                         'BookmarkletExtraHead',\r
41                         'PreItem',\r
42                         'PreAddItem',\r
43                         'PreUpdateItem',\r
44                         'PostAddItem',\r
45                         'PostUpdateItem',\r
46                         'PrePluginOptionsUpdate',\r
47                         'AddItemFormExtras',\r
48                         'EditItemFormExtras');\r
49         }\r
50         \r
51         public function install()\r
52         {\r
53                 $this->createOption('maxwidth', '_NP_ATTACH_02', 'text', '90',  'datatype=numerical');\r
54                 $this->createOption('maxheight', '_NP_ATTACH_03', 'text', '90',  'datatype=numerical');\r
55                 $this->createOption('admin_popup_template', '_NP_ATTACH_04', 'textarea', '<a href="<%rawpopuplink%>" title="<%popuptext%>" onclick="<%popupcode%>"><img src="<%thumb_url%>" width="<%thumb_width%>" height="<%thumb_height%>" alt="<%popuptext%>" /></a>');\r
56                 $this->createOption('admin_media_template', '_NP_ATTACH_05', 'textarea', '<a href="<%link%>" title="<%text%>"><%text%></a>');\r
57                 $this->createBlogOption('amount', '_NP_ATTACH_06', 'text', '3');\r
58                 $this->createBlogOption('blog_image_template', '_NP_ATTACH_07', 'textarea', '<img src="<%link%>" width="<%width%>" height="<%height%>" alt="<%text%>" />');\r
59                 $this->createBlogOption('blog_media_template', '_NP_ATTACH_08', 'textarea', '<a href="<%link%>" title="<%text%>"><%text%></a>');\r
60                 $this->createItemOption('media', '_NP_ATTACH_09', 'text', '');\r
61                 return;\r
62         }\r
63         \r
64         public function uninstall()\r
65         {\r
66                 return;\r
67         }\r
68         \r
69         public function init()\r
70         {\r
71                 $locale = '';\r
72                 \r
73                 /* new API */\r
74                 if ( class_exists('i18n', FALSE) )\r
75                 {\r
76                         $locale = i18n::get_current_locale() . '.' . i18n::get_current_charset() . '.php';\r
77                 }\r
78                 /* old API */\r
79                 else\r
80                 {\r
81                         $language = preg_replace('#[/|\\\\]#', '', getLanguageName());\r
82                         if ( $language == 'japanese-euc' )\r
83                         {\r
84                                 $locale = 'ja_Jpan_JP.EUC-JP.php';\r
85                         }\r
86                         else if ( $language = 'japanese-utf8' )\r
87                         {\r
88                                 $locale = 'ja_Jpan_JP.UTF-8.php';\r
89                         }\r
90                 }\r
91                 \r
92                 if ( !$locale || !file_exists($this->getDirectory() . $locale) )\r
93                 {\r
94                         include($this->getDirectory() . 'en_Latn_US.ISO-8859-1.php');\r
95                 }\r
96                 else\r
97                 {\r
98                         include($this->getDirectory() . $locale);\r
99                 }\r
100                 \r
101                 return;\r
102         }\r
103         \r
104         /*\r
105          * for translation\r
106          */\r
107         public function event_PrePluginOptionsEdit(&$data)\r
108         {\r
109                 /* Old version do not support natively */\r
110                 if ( getNucleusVersion() < 400  )\r
111                 {\r
112                         if ( $data['context'] != 'global' )\r
113                         {\r
114                                 foreach ( $data['options'] as $key => $option )\r
115                                 {\r
116                                         if ( $option['pid'] == $this->getID() )\r
117                                         {\r
118                                                 if ( defined($option['description']) )\r
119                                                 {\r
120                                                         $data['options'][$key]['description'] = constant($option['description']);\r
121                                                 }\r
122                                                 if ( $option['type'] == 'select' )\r
123                                                 {\r
124                                                         foreach ( explode('|', $option['typeinfo']) as $option )\r
125                                                         {\r
126                                                                 if ( defined($option) )\r
127                                                                 {\r
128                                                                         $data['options'][$key]['typeinfo'] = str_replace($option, constant($option), $data['options'][$key]['typeinfo']);\r
129                                                                 }\r
130                                                         }\r
131                                                 }\r
132                                         }\r
133                                 }\r
134                         }\r
135                         else if ($data['plugid'] == $this->getID() )\r
136                         {\r
137                                 foreach ( $data['options'] as $key => $option )\r
138                                 {\r
139                                         if ( defined($option['description']) )\r
140                                         {\r
141                                                 $data['options'][$key]['description'] = constant($option['description']);\r
142                                         }\r
143                                         if ( $option['type'] == 'select' )\r
144                                         {\r
145                                                         foreach ( explode('|', $option['typeinfo']) as $option )\r
146                                                         {\r
147                                                                 if ( defined($option) )\r
148                                                                 {\r
149                                                                         $data['options'][$key]['typeinfo'] = str_replace($option, constant($option), $data['options'][$key]['typeinfo']);\r
150                                                                 }\r
151                                                         }\r
152                                         }\r
153                                 }\r
154                         }\r
155                 }\r
156                 \r
157                 return;\r
158         }\r
159         \r
160         /*\r
161          * Change enctype attribute of form element as 'multipart/form-data'\r
162          * Insert interface\r
163          */\r
164         public function event_AdminPrePageHead(&$data)\r
165         {\r
166                 if ( !in_array ($data['action'], array('createitem', 'itemedit')) )\r
167                 {\r
168                         self::prepareEnctype();\r
169                 }\r
170                 return;\r
171         }\r
172         \r
173         public function event_BookmarkletExtraHead(&$data)\r
174         {\r
175                 self::prepareEnctype();\r
176                 return;\r
177         }\r
178         \r
179         public function event_AddItemFormExtras(&$data)\r
180         {\r
181                 global $DIR_MEDIA;\r
182                 $blog = $data['blog'];\r
183                 self::$blogid = $blog->blogid;\r
184                 self::$itemid = 0;\r
185                 self::setEnctype();\r
186                 $this->setData($DIR_MEDIA);\r
187                 $this->showInterface();\r
188                 return;\r
189         }\r
190         \r
191         public function event_EditItemFormExtras(&$data)\r
192         {\r
193                 global $DIR_MEDIA;\r
194                 $blog = $data['blog'];\r
195                 self::$blogid = $blog->blogid;\r
196                 self::$itemid = $data['itemid'];\r
197                 self::setEnctype();\r
198                 $this->setData($DIR_MEDIA);\r
199                 $this->showInterface();\r
200                 return;\r
201         }\r
202         \r
203         /*\r
204          * Process upload and update plugin item option\r
205          */\r
206         public function event_PreAddItem(&$data)\r
207         {\r
208                 self::$blogid = $data['blog']->blogid;\r
209                 return;\r
210         }\r
211         \r
212         public function event_PreUpdateItem(&$data)\r
213         {\r
214                 self::$blogid = $data['blog']->blogid;\r
215                 return;\r
216         }\r
217         \r
218         public function event_PostAddItem(&$data)\r
219         {\r
220                 self::$itemid = $data['itemid'];\r
221                 return;\r
222         }\r
223         \r
224         public function event_PostUpdateItem(&$data)\r
225         {\r
226                 self::$itemid = $data['itemid'];\r
227                 return;\r
228         }\r
229         \r
230         public function event_PrePluginOptionsUpdate(&$data)\r
231         {\r
232                 global $DIR_MEDIA, $member;\r
233                 \r
234                 if ( $data['plugid'] != $this->getID() || $data['optionname'] != 'media' )\r
235                 {\r
236                         return;\r
237                 }\r
238                 \r
239                 $this->setData($DIR_MEDIA);\r
240                 self::batchRequest($DIR_MEDIA, $member->getID());\r
241                 \r
242                 $value = '';\r
243                 foreach ( self::$data as $datum )\r
244                 {\r
245                         if ( !$datum['path'] )\r
246                         {\r
247                                 continue;\r
248                         }\r
249                         $value .= "{$datum['path']}:{$datum['alt']}:{$datum['way']};";\r
250                 }\r
251                 \r
252                 $data['value'] = $value;\r
253                 return;\r
254         }\r
255         \r
256         /*\r
257          * Show media in item\r
258          */\r
259         public function event_PreItem(&$data)\r
260         {\r
261                 global $DIR_MEDIA;\r
262                 \r
263                 self::$blogid =& $data['blog']->blogid;\r
264                 self::$itemid =& $data["item"]->itemid;\r
265                 $this->setData($DIR_MEDIA);\r
266                 \r
267                 $data["item"]->body = preg_replace_callback("#<\%Attach\((.+?)(,.+?)?(,.+?)?\)%\>#", array($this, 'getParsedTag'), $data["item"]->body);\r
268                 $data["item"]->more = preg_replace_callback("#<\%Attach\((.+?)(,.+?)?(,.+?)?\)%\>#", array($this, 'getParsedTag'), $data["item"]->more);\r
269                 return;\r
270         }\r
271         \r
272         public function doTemplateVar(&$item)\r
273         {\r
274                 global $DIR_MEDIA, $blogid;\r
275                 \r
276                 /* receive an argument, with prevention of E_STRICT*/\r
277                 $args = func_get_args();\r
278                 if ( !array_key_exists(0, $args) )\r
279                 {\r
280                         return;\r
281                 }\r
282                 else\r
283                 {\r
284                         $mediumid = $args[0];\r
285                 }\r
286                 \r
287                 if ( !self::$itemid || !self::$blogid )\r
288                 {\r
289                         self::$blogid = $blogid;\r
290                         self::$itemid = $item->itemid;\r
291                         $this->setData($DIR_MEDIA);\r
292                 }\r
293                 \r
294                 $params = array('item', $mediumid);\r
295                 $this->getParsedTag($params);\r
296                 return;\r
297         }\r
298         \r
299         private function getParsedTag($match)\r
300         {\r
301                 global $DIR_MEDIA, $manager;\r
302                 \r
303                 /* receice maximum dimension */\r
304                 $maxwidth = 0;\r
305                 $maxheight = 0;\r
306                 if ( array_key_exists(3, $match) )\r
307                 {\r
308                         $maxheight = (integer) trim($match[3], ',');\r
309                 }\r
310                 if ( array_key_exists(2, $match) )\r
311                 {\r
312                         $maxwidth = (integer) trim($match[2], ',');\r
313                 }\r
314                 \r
315                 /* ID in tag starts 1 but ID in program starts 0 */\r
316                 $mediumid = $match[1];\r
317                 $mediumid--;\r
318                 \r
319                 /* filled tag or blank if failed */\r
320                 $tag = $this->generateParsedTag($maxwidth, $maxheight);\r
321                 \r
322                 return $tag;\r
323         }\r
324         \r
325         private function generateParsedTag($maxwidth, $maxheight)\r
326         {\r
327                 global $manager, $DIR_MEDIA;\r
328                 \r
329                 /* check medium has path */\r
330                 $data = &self::$data;\r
331                 if ( !array_key_exists($mediumid, $data) || !$data[$mediumid]['path'] )\r
332                 {\r
333                         return;\r
334                 }\r
335                 \r
336                 /* receive an instance of NP_Thumbnail class */\r
337                 $NP_Thumbnail =& $manager->getPlugin('NP_Thumbnail');\r
338                 \r
339                 /* confirm to have maximum dimension */\r
340                 if ( $maxwidth == 0 && $maxheight == 0 )\r
341                 {\r
342                         $maxwidth = $NP_Thumbnail->getOption('maxwidth');\r
343                         $maxheight = $NP_Thumbnail->getOption('maxheight');\r
344                 }\r
345                 \r
346                 /* receive an instance of MEDIUM class */\r
347                 if ( FALSE === ($medium = new MEDIUM($DIR_MEDIA, $data[$mediumid]['path'], MediaUtils::$prefix)) )\r
348                 {\r
349                         return;\r
350                 }\r
351                 \r
352                 /* take the instance having correct resampled dimension */\r
353                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime)\r
354                    && !$medium->setResampledSize($maxwidth, $maxheight) )\r
355                  {\r
356                         return;\r
357                 }\r
358                 \r
359                 /* receive template */\r
360                 if ( !array_key_exists($medium->mime, MediaUtils::$image_mime)\r
361                    || $data[$mediumid]['way'] == 'anchor' )\r
362                  {\r
363                         $template = $this->getBlogOption(self::$blogid, 'blog_media_template');\r
364                 }\r
365                 else if ( $data[$mediumid]['way'] == 'original' )\r
366                 {\r
367                         $template = $this->getBlogOption(self::$blogid, 'blog_image_template');\r
368                 }\r
369                 else\r
370                 {\r
371                         $template = $NP_Thumbnail->getBlogOption(self::$blogid, 'thumb_template');\r
372                 }\r
373                 \r
374                 /* return filled template */\r
375                 return $NP_Thumbnail->generateTag($template, $medium, $data[$mediumid]['alt']);\r
376         }\r
377         \r
378         private function showInterface()\r
379         {\r
380                 global $CONF, $DIR_LIBS, $DIR_MEDIA, $manager;\r
381                 \r
382                 if ( !class_exists('BODYACTIONS', FALSE) )\r
383                 {\r
384                         include($DIR_LIBS . 'BODYACTIONS.php');\r
385                 }\r
386                 $action = new BODYACTIONS;\r
387                 \r
388                 if ( !$manager->pluginInstalled('NP_Thumbnail') )\r
389                 {\r
390                         return;\r
391                 }\r
392                 $NP_Thumbnail = &$manager->getPlugin('NP_Thumbnail');\r
393                 $maxwidth = $NP_Thumbnail->getOption('maxwidth');\r
394                 $maxheight = $NP_Thumbnail->getOption('maxheight');\r
395                         \r
396                 if ( !self::$amount )\r
397                 {\r
398                         return;\r
399                 }\r
400                 \r
401                 $data = self::$data;\r
402                 \r
403                 if ( empty($data) )\r
404                 {\r
405                         return;\r
406                 }\r
407                 \r
408                 echo "<table frame=\"box\" rules=\"all\" summary=\"Attached Media\">\n";\r
409                 echo "<thead>\n";\r
410                 echo "<tr>\n";\r
411                 echo "<th>" . _NP_ATTACH_10 . "</th>\n";\r
412                 echo "<th>" . _NP_ATTACH_11 . "</th>\n";\r
413                 echo "<th>" . _NP_ATTACH_12 . "</th>\n";\r
414                 echo "</tr>\n";\r
415                 echo "</thead>\n";\r
416                 echo "<tbody>\n";\r
417                 \r
418                 for ( $count = 0; $count < self::$amount; $count++ )\r
419                 {\r
420                         $id = $count + 1;\r
421                         \r
422                         echo "<tr>\n";\r
423                         echo "<td>\n";\r
424                         echo "<label for=\"alt{$count}\"><%Attach({$id})%></label>\n";\r
425                         \r
426                         if ( $data[$count]['path'] )\r
427                         {\r
428                                 echo "<br />\n";\r
429                                 echo "<input type=\"checkbox\" id=\"delete{$count}\" name=\"delete[{$count}]\" value=\"1\" />\n";\r
430                                 echo "<label for=\"delete{$count}\">" . _NP_ATTACH_13 . "</label>\n";\r
431                         }\r
432                         \r
433                         echo "</td>\n";\r
434                         echo "<td>\n";\r
435                         \r
436                         if ( !$data[$count]['path'] )\r
437                         {\r
438                                 echo "<input type=\"file\" id=\"medium{$count}\" name=\"medium[{$count}]\" size=\"1\" /><br />\n";\r
439                         }\r
440                         else\r
441                         {\r
442                                 if ( FALSE === ($medium = new MEDIUM($DIR_MEDIA, $data[$count]['path'], MediaUtils::$prefix)) )\r
443                                 {\r
444                                         return;\r
445                                 }\r
446                                 \r
447                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime)\r
448                                    && !$medium->setResampledSize($maxwidth, $maxheight) )\r
449                                  {\r
450                                         return;\r
451                                 }\r
452                                 \r
453                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime) )\r
454                                 {\r
455                                         $template = $this->getOption('admin_popup_template');\r
456                                 }\r
457                                 else\r
458                                 {\r
459                                         $template = $this->getOption('admin_media_template');\r
460                                 }\r
461                                 \r
462                                 echo $NP_Thumbnail->generateTag($template, $medium, $data[$count]['alt']) . "<br />\n";\r
463                                 echo "<input type=\"hidden\" id=\"path{$count}\" name=\"path[{$count}]\" value=\"{$data[$count]['path']}\" /><br />\n";\r
464                         }\r
465                         echo "<input type=\"text\" id=\"alt{$count}\" name=\"alt[{$count}]\" value=\"{$data[$count]['alt']}\" size=\"12\" />\n";\r
466                         echo "</td>\n";\r
467                         echo "<td>\n";\r
468                         \r
469                         if ( $data[$count]['path'] && !array_key_exists($data[$count]['mime'], MediaUtils::$image_mime) )\r
470                         {\r
471                                 echo "<input type=\"hidden\" name=\"way[{$count}]\" value=\"anchor\" />\n";\r
472                                 echo _NP_ATTACH_14 . "\n";\r
473                         }\r
474                         else\r
475                         {\r
476                                 $thumbnail_checked = "";\r
477                                 $original_checked = "";\r
478                                 $anchor_checked = "";\r
479                                 \r
480                                 if ( $data[$count]['way'] == 'original' )\r
481                                 {\r
482                                         $original_checked = 'checked="checked"';\r
483                                 }\r
484                                 else if ($data[$count]['way'] == 'anchor' )\r
485                                 {\r
486                                         $anchor_checked = 'checked="checked"';\r
487                                 }\r
488                                 else\r
489                                 {\r
490                                         $thumbnail_checked = 'checked="checked"';\r
491                                 }\r
492                                 \r
493                                 echo "<input type=\"radio\" id=\"way{$count}-anchor\" name=\"way[{$count}]\" value=\"anchor\" {$anchor_checked} />\n";\r
494                                 echo "<label for=\"way{$count}-anchor\">" . _NP_ATTACH_15 . "<label><br />\n";\r
495                                 echo "<input type=\"radio\" id=\"way{$count}-small\" name=\"way[{$count}]\" value=\"thumbnail\" {$thumbnail_checked} />\n";\r
496                                 echo "<label for=\"way{$count}-small\">" . _NP_ATTACH_16 . "<label><br />\n";\r
497                                 echo "<input type=\"radio\" id=\"way{$count}-original\" name=\"way[{$count}]\" value=\"original\" {$original_checked} />\n";\r
498                                 echo "<label for=\"way{$count}-original\">" . _NP_ATTACH_17 . "<label>\n";\r
499                         }\r
500                         echo "</td>\n";\r
501                         echo "</tr>\n";\r
502                 }\r
503                 \r
504                 echo "</tbody>\n";\r
505                 echo "</table>\n";\r
506                 return;\r
507         }\r
508         \r
509         private function setData($root)\r
510         {\r
511                 if ( self::$blogid === 0 || !self::$itemid === 0 )\r
512                 {\r
513                  return;\r
514                 }\r
515                 \r
516                 self::$amount = $this->getBlogOption(self::$blogid, 'amount');\r
517                 $media = explode(';', $this->getitemOption(self::$itemid, 'media'));\r
518                 $data = array();\r
519                 \r
520                 for ( $count = 0; $count < self::$amount; $count++ )\r
521                 {\r
522                         if ( (self::$itemid != 0) && array_key_exists($count, $media) && !empty($media[$count]) )\r
523                         {\r
524                                 $medium = explode(':', $media[$count]);\r
525                                 $data[$count]['path'] = $medium[0];\r
526                                 $data[$count]['alt'] = $medium[1];\r
527                                 $data[$count]['way'] = $medium[2];\r
528                                 \r
529                                 if ( FALSE === ($file = new Medium($root, $data[$count]['path'], MediaUtils::$prefix)) )\r
530                                 {\r
531                                         $data[$count] = array('path' => "", 'alt' => "", 'way' => "");\r
532                                 }\r
533                                 \r
534                                 $data[$count]['mime'] = $file->mime;\r
535                                 $data[$count]['width'] = $file->width;\r
536                                 $data[$count]['height'] = $file->height;\r
537                         }\r
538                         else\r
539                         {\r
540                                 $data[$count] = array('path' => "", 'alt' => "", 'way' => "");\r
541                         }\r
542                 }\r
543                 \r
544                 self::$data = $data;\r
545                 return;\r
546         }\r
547         \r
548         static private function batchRequest($root, $collection)\r
549         {\r
550                 global $CONF, $manager;\r
551                 $media = array();\r
552                 $paths = array();\r
553                 $alts = array();\r
554                 $ways = array();\r
555                 $deletes = array();\r
556                 \r
557                 if ( array_key_exists('medium', $_FILES) )\r
558                 {\r
559                         $media = $_FILES['medium'];\r
560                 }\r
561                 \r
562                 if ( array_key_exists('path', $_POST) )\r
563                 {\r
564                         $paths = $_POST['path'];\r
565                 }\r
566                 \r
567                 if ( array_key_exists('alt', $_POST) )\r
568                 {\r
569                         $alts = $_POST['alt'];\r
570                 }\r
571                 \r
572                 if ( array_key_exists('way', $_POST) )\r
573                 {\r
574                         $ways = $_POST['way'];\r
575                 }\r
576                 \r
577                 if ( array_key_exists('delete', $_POST) )\r
578                 {\r
579                         $deletes = $_POST['delete'];\r
580                 }\r
581                 \r
582                 $data = &self::$data;\r
583                 \r
584                 if ( !$manager->pluginInstalled('NP_Thumbnail') )\r
585                 {\r
586                         return;\r
587                 }\r
588                 \r
589                 foreach ( $data as $key => $value )\r
590                 {\r
591                         if ( $media && array_key_exists($key, $media['name']) && !empty($media['name'][$key]) )\r
592                         {\r
593                                 $medium = array();\r
594                                 if ( preg_match ("#(\\\\|/|\\n)#", $media['name'][$key]) )\r
595                                 {\r
596                                         $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
597                                         continue;\r
598                                 }\r
599                                 \r
600                                 $medium['name'] = &$media['name'][$key];\r
601                                 $medium['size'] = $media['size'][$key];\r
602                                 $medium['tmp_name'] = $media['tmp_name'][$key];\r
603                                 $medium['error'] = $media['error'][$key];\r
604                                 \r
605                                 $result = MediaUtils::uploadMedium($root, $collection, $medium, '', $manager);\r
606                                 \r
607                                 if ( $result )\r
608                                 {\r
609                                         $data[$key]['path'] = "";\r
610                                         $data[$key]['alt']  = "{$result} ({$medium['name']})";\r
611                                         $data[$key]['way']  = "";\r
612                                         continue;\r
613                                 }\r
614                                 else\r
615                                 {\r
616                                         $data[$key]['path'] = "{$collection}/{$medium['name']}";\r
617                                 }\r
618                         }\r
619                         else if ( array_key_exists($key, $paths) && !empty($paths[$key]) )\r
620                         {\r
621                                 if ( FALSE === ($medium = new MEDIUM($root, $paths[$key], MediaUtils::$prefix)) )\r
622                                 {\r
623                                         $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
624                                         continue;\r
625                                 }\r
626                                 if ( $deletes && array_key_exists($key, $deletes) && $deletes[$key] == 1 )\r
627                                 {\r
628                                         if ( @unlink($root . $paths[$key]) )\r
629                                         {\r
630                                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime) )\r
631                                                 {\r
632                                                         @ unlink($root . NP_Thumbnail::getThumbPath($medium));\r
633                                                 }\r
634                                                 $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
635                                                 continue;\r
636                                         }\r
637                                 }\r
638                         }\r
639                         \r
640                         if ( array_key_exists($key, $alts) && $alts[$key] != $value['alt'] )\r
641                         {\r
642                                 $data[$key]['alt'] = htmlspecialchars($alts[$key], ENT_QUOTES, _CHARSET);\r
643                         }\r
644                         \r
645                         if ( array_key_exists($key, $ways) && $ways[$key] != $value['way'] )\r
646                         {\r
647                                 if ( !in_array($ways[$key], array('thumbnail', 'original', 'anchor')) )\r
648                                 {\r
649                                         $data[$key]['way'] = 'thumbnail';\r
650                                 }\r
651                                 else\r
652                                 {\r
653                                         $data[$key]['way'] = $ways[$key];\r
654                                 }\r
655                         }\r
656                 }\r
657                 return;\r
658         }\r
659         \r
660         static private function prepareEnctype()\r
661         {\r
662                 self::$buffer = ob_start();\r
663                 return;\r
664         }\r
665         \r
666         static private function setEnctype()\r
667         {\r
668                 if ( !self::$buffer )\r
669                 {\r
670                         return;\r
671                 }\r
672                 \r
673                 $strings = ob_get_contents();\r
674                 ob_end_clean();\r
675                 $strings = preg_replace('#action="(index.php|bookmarklet.php)"#', '$0 enctype="multipart/form-data"', $strings);\r
676                 echo $strings;\r
677                 return;\r
678         }\r
679 }\r