OSDN Git Service

87c9a38b8e6c52d2ea197f5d3e94b4381dd82a7e
[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, $mediumid)\r
273         {\r
274                 global $DIR_MEDIA, $blogid;\r
275                 \r
276                 if ( !self::$itemid || !self::$blogid )\r
277                 {\r
278                         self::$blogid = $blogid;\r
279                         self::$itemid = $item->itemid;\r
280                         $this->setData($DIR_MEDIA);\r
281                 }\r
282                 \r
283                 $params = array('item', $mediumid);\r
284                 $this->getParsedTag($params);\r
285                 return;\r
286         }\r
287         \r
288         private function getParsedTag($match)\r
289         {\r
290                 global $DIR_MEDIA, $manager;\r
291                 \r
292                 /* receice maximum dimension */\r
293                 $maxwidth = 0;\r
294                 $maxheight = 0;\r
295                 if ( array_key_exists(3, $match) )\r
296                 {\r
297                         $maxheight = (integer) trim($match[3], ',');\r
298                 }\r
299                 if ( array_key_exists(2, $match) )\r
300                 {\r
301                         $maxwidth = (integer) trim($match[2], ',');\r
302                 }\r
303                 \r
304                 /* ID in tag starts 1 but ID in program starts 0 */\r
305                 $mediumid = $match[1];\r
306                 $mediumid--;\r
307                 \r
308                 /* filled tag or blank if failed */\r
309                 $tag = $this->generateParsedTag($maxwidth, $maxheight);\r
310                 \r
311                 return $tag;\r
312         }\r
313         \r
314         private function generateParsedTag($maxwidth, $maxheight)\r
315         {\r
316                 global $manager;\r
317                 \r
318                 /* check medium has path */\r
319                 $data = &self::$data;\r
320                 if ( !array_key_exists($mediumid, $data) || !$data[$mediumid]['path'] )\r
321                 {\r
322                         return;\r
323                 }\r
324                 \r
325                 /* receive an instance of NP_Thumbnail class */\r
326                 $NP_Thumbnail =& $manager->getPlugin('NP_Thumbnail');\r
327                 \r
328                 /* confirm to have maximum dimension */\r
329                 if ( $maxwidth == 0 && $maxheight == 0 )\r
330                 {\r
331                         $maxwidth = $NP_Thumbnail->getOption('maxwidth');\r
332                         $maxheight = $NP_Thumbnail->getOption('maxheight');\r
333                 }\r
334                 \r
335                 /* receive an instance of MEDIUM class */\r
336                 if ( FALSE === ($medium = new MEDIUM($DIR_MEDIA, $data[$mediumid]['path'], MediaUtils::$prefix)) )\r
337                 {\r
338                         return;\r
339                 }\r
340                 \r
341                 /* take the instance having correct resampled dimension */\r
342                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime)\r
343                    && !$medium->setResampledSize($maxwidth, $maxheight) )\r
344                  {\r
345                         return;\r
346                 }\r
347                 \r
348                 /* receive template */\r
349                 if ( !array_key_exists($medium->mime, MediaUtils::$image_mime)\r
350                    || $data[$mediumid]['way'] == 'anchor' )\r
351                  {\r
352                         $template = $this->getBlogOption(self::$blogid, 'blog_media_template');\r
353                 }\r
354                 else if ( $data[$mediumid]['way'] == 'original' )\r
355                 {\r
356                         $template = $this->getBlogOption(self::$blogid, 'blog_image_template');\r
357                 }\r
358                 else\r
359                 {\r
360                         $template = $NP_Thumbnail->getBlogOption(self::$blogid, 'thumb_template');\r
361                 }\r
362                 \r
363                 /* return filled template */\r
364                 return $NP_Thumbnail->generateTag($template, $medium, $data[$mediumid]['alt']);\r
365         }\r
366         \r
367         private function showInterface()\r
368         {\r
369                 global $CONF, $DIR_LIBS, $DIR_MEDIA, $manager;\r
370                 \r
371                 if ( !class_exists('BODYACTIONS', FALSE) )\r
372                 {\r
373                         include($DIR_LIBS . 'BODYACTIONS.php');\r
374                 }\r
375                 $action = new BODYACTIONS;\r
376                 \r
377                 if ( !$manager->pluginInstalled('NP_Thumbnail') )\r
378                 {\r
379                         return;\r
380                 }\r
381                 $NP_Thumbnail = &$manager->getPlugin('NP_Thumbnail');\r
382                 $maxwidth = $NP_Thumbnail->getOption('maxwidth');\r
383                 $maxheight = $NP_Thumbnail->getOption('maxheight');\r
384                         \r
385                 if ( !self::$amount )\r
386                 {\r
387                         return;\r
388                 }\r
389                 \r
390                 $data = self::$data;\r
391                 \r
392                 if ( empty($data) )\r
393                 {\r
394                         return;\r
395                 }\r
396                 \r
397                 echo "<table frame=\"box\" rules=\"all\" summary=\"Attached Media\">\n";\r
398                 echo "<thead>\n";\r
399                 echo "<tr>\n";\r
400                 echo "<th>" . _NP_ATTACH_10 . "</th>\n";\r
401                 echo "<th>" . _NP_ATTACH_11 . "</th>\n";\r
402                 echo "<th>" . _NP_ATTACH_12 . "</th>\n";\r
403                 echo "</tr>\n";\r
404                 echo "</thead>\n";\r
405                 echo "<tbody>\n";\r
406                 \r
407                 for ( $count = 0; $count < self::$amount; $count++ )\r
408                 {\r
409                         $id = $count + 1;\r
410                         \r
411                         echo "<tr>\n";\r
412                         echo "<td>\n";\r
413                         echo "<label for=\"alt{$count}\"><%Attach({$id})%></label>\n";\r
414                         \r
415                         if ( $data[$count]['path'] )\r
416                         {\r
417                                 echo "<br />\n";\r
418                                 echo "<input type=\"checkbox\" id=\"delete{$count}\" name=\"delete[{$count}]\" value=\"1\" />\n";\r
419                                 echo "<label for=\"delete{$count}\">" . _NP_ATTACH_13 . "</label>\n";\r
420                         }\r
421                         \r
422                         echo "</td>\n";\r
423                         echo "<td>\n";\r
424                         \r
425                         if ( !$data[$count]['path'] )\r
426                         {\r
427                                 echo "<input type=\"file\" id=\"medium{$count}\" name=\"medium[{$count}]\" size=\"1\" /><br />\n";\r
428                         }\r
429                         else\r
430                         {\r
431                                 if ( FALSE === ($medium = new MEDIUM($DIR_MEDIA, $data[$count]['path'], MediaUtils::$prefix)) )\r
432                                 {\r
433                                         return;\r
434                                 }\r
435                                 \r
436                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime)\r
437                                    && !$medium->setResampledSize($maxwidth, $maxheight) )\r
438                                  {\r
439                                         return;\r
440                                 }\r
441                                 \r
442                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime) )\r
443                                 {\r
444                                         $template = $this->getOption('admin_popup_template');\r
445                                 }\r
446                                 else\r
447                                 {\r
448                                         $template = $this->getOption('admin_media_template');\r
449                                 }\r
450                                 \r
451                                 echo $NP_Thumbnail->generateTag($template, $medium, $data[$count]['alt']) . "<br />\n";\r
452                                 echo "<input type=\"hidden\" id=\"path{$count}\" name=\"path[{$count}]\" value=\"{$data[$count]['path']}\" /><br />\n";\r
453                         }\r
454                         echo "<input type=\"text\" id=\"alt{$count}\" name=\"alt[{$count}]\" value=\"{$data[$count]['alt']}\" size=\"12\" />\n";\r
455                         echo "</td>\n";\r
456                         echo "<td>\n";\r
457                         \r
458                         if ( $data[$count]['path'] && !array_key_exists($data[$count]['mime'], MediaUtils::$image_mime) )\r
459                         {\r
460                                 echo "<input type=\"hidden\" name=\"way[{$count}]\" value=\"anchor\" />\n";\r
461                                 echo _NP_ATTACH_14 . "\n";\r
462                         }\r
463                         else\r
464                         {\r
465                                 $thumbnail_checked = "";\r
466                                 $original_checked = "";\r
467                                 $anchor_checked = "";\r
468                                 \r
469                                 if ( $data[$count]['way'] == 'original' )\r
470                                 {\r
471                                         $original_checked = 'checked="checked"';\r
472                                 }\r
473                                 else if ($data[$count]['way'] == 'anchor' )\r
474                                 {\r
475                                         $anchor_checked = 'checked="checked"';\r
476                                 }\r
477                                 else\r
478                                 {\r
479                                         $thumbnail_checked = 'checked="checked"';\r
480                                 }\r
481                                 \r
482                                 echo "<input type=\"radio\" id=\"way{$count}-anchor\" name=\"way[{$count}]\" value=\"anchor\" {$anchor_checked} />\n";\r
483                                 echo "<label for=\"way{$count}-anchor\">" . _NP_ATTACH_15 . "<label><br />\n";\r
484                                 echo "<input type=\"radio\" id=\"way{$count}-small\" name=\"way[{$count}]\" value=\"thumbnail\" {$thumbnail_checked} />\n";\r
485                                 echo "<label for=\"way{$count}-small\">" . _NP_ATTACH_16 . "<label><br />\n";\r
486                                 echo "<input type=\"radio\" id=\"way{$count}-original\" name=\"way[{$count}]\" value=\"original\" {$original_checked} />\n";\r
487                                 echo "<label for=\"way{$count}-original\">" . _NP_ATTACH_17 . "<label>\n";\r
488                         }\r
489                         echo "</td>\n";\r
490                         echo "</tr>\n";\r
491                 }\r
492                 \r
493                 echo "</tbody>\n";\r
494                 echo "</table>\n";\r
495                 return;\r
496         }\r
497         \r
498         private function setData($root)\r
499         {\r
500                 if ( self::$blogid === 0 || !self::$itemid === 0 )\r
501                 {\r
502                  return;\r
503                 }\r
504                 \r
505                 self::$amount = $this->getBlogOption(self::$blogid, 'amount');\r
506                 $media = explode(';', $this->getitemOption(self::$itemid, 'media'));\r
507                 $data = array();\r
508                 \r
509                 for ( $count = 0; $count < self::$amount; $count++ )\r
510                 {\r
511                         if ( (self::$itemid != 0) && array_key_exists($count, $media) && !empty($media[$count]) )\r
512                         {\r
513                                 $medium = explode(':', $media[$count]);\r
514                                 $data[$count]['path'] = $medium[0];\r
515                                 $data[$count]['alt'] = $medium[1];\r
516                                 $data[$count]['way'] = $medium[2];\r
517                                 \r
518                                 if ( FALSE === ($file = new Medium($root, $data[$count]['path'], MediaUtils::$prefix)) )\r
519                                 {\r
520                                         $data[$count] = array('path' => "", 'alt' => "", 'way' => "");\r
521                                 }\r
522                                 \r
523                                 $data[$count]['mime'] = $file->mime;\r
524                                 $data[$count]['width'] = $file->width;\r
525                                 $data[$count]['height'] = $file->height;\r
526                         }\r
527                         else\r
528                         {\r
529                                 $data[$count] = array('path' => "", 'alt' => "", 'way' => "");\r
530                         }\r
531                 }\r
532                 \r
533                 self::$data = $data;\r
534                 return;\r
535         }\r
536         \r
537         static private function batchRequest($root, $collection)\r
538         {\r
539                 global $CONF, $manager;\r
540                 $media = array();\r
541                 $paths = array();\r
542                 $alts = array();\r
543                 $ways = array();\r
544                 $deletes = array();\r
545                 \r
546                 if ( array_key_exists('medium', $_FILES) )\r
547                 {\r
548                         $media = $_FILES['medium'];\r
549                 }\r
550                 \r
551                 if ( array_key_exists('path', $_POST) )\r
552                 {\r
553                         $paths = $_POST['path'];\r
554                 }\r
555                 \r
556                 if ( array_key_exists('alt', $_POST) )\r
557                 {\r
558                         $alts = $_POST['alt'];\r
559                 }\r
560                 \r
561                 if ( array_key_exists('way', $_POST) )\r
562                 {\r
563                         $ways = $_POST['way'];\r
564                 }\r
565                 \r
566                 if ( array_key_exists('delete', $_POST) )\r
567                 {\r
568                         $deletes = $_POST['delete'];\r
569                 }\r
570                 \r
571                 $data = &self::$data;\r
572                 \r
573                 if ( !$manager->pluginInstalled('NP_Thumbnail') )\r
574                 {\r
575                         return;\r
576                 }\r
577                 \r
578                 foreach ( $data as $key => $value )\r
579                 {\r
580                         if ( $media && array_key_exists($key, $media['name']) && !empty($media['name'][$key]) )\r
581                         {\r
582                                 $medium = array();\r
583                                 if ( preg_match ("#(\\\\|/|\\n)#", $media['name'][$key]) )\r
584                                 {\r
585                                         $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
586                                         continue;\r
587                                 }\r
588                                 \r
589                                 $medium['name'] = &$media['name'][$key];\r
590                                 $medium['size'] = $media['size'][$key];\r
591                                 $medium['tmp_name'] = $media['tmp_name'][$key];\r
592                                 $medium['error'] = $media['error'][$key];\r
593                                 \r
594                                 $result = MediaUtils::uploadMedium($root, $collection, $medium, '', $manager);\r
595                                 \r
596                                 if ( $result )\r
597                                 {\r
598                                         $data[$key]['path'] = "";\r
599                                         $data[$key]['alt']  = "{$result} ({$medium['name']})";\r
600                                         $data[$key]['way']  = "";\r
601                                         continue;\r
602                                 }\r
603                                 else\r
604                                 {\r
605                                         $data[$key]['path'] = "{$collection}/{$medium['name']}";\r
606                                 }\r
607                         }\r
608                         else if ( array_key_exists($key, $paths) && !empty($paths[$key]) )\r
609                         {\r
610                                 if ( FALSE === ($medium = new MEDIUM($root, $paths[$key], MediaUtils::$prefix)) )\r
611                                 {\r
612                                         $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
613                                         continue;\r
614                                 }\r
615                                 if ( $deletes && array_key_exists($key, $deletes) && $deletes[$key] == 1 )\r
616                                 {\r
617                                         if ( @unlink($root . $paths[$key]) )\r
618                                         {\r
619                                                 if ( array_key_exists($medium->mime, MediaUtils::$image_mime) )\r
620                                                 {\r
621                                                         @ unlink($root . NP_Thumbnail::getThumbPath($medium));\r
622                                                 }\r
623                                                 $data[$key] = array('path' => "", 'alt' => "", 'way' => "");\r
624                                                 continue;\r
625                                         }\r
626                                 }\r
627                         }\r
628                         \r
629                         if ( array_key_exists($key, $alts) && $alts[$key] != $value['alt'] )\r
630                         {\r
631                                 $data[$key]['alt'] = htmlspecialchars($alts[$key], ENT_QUOTES, _CHARSET);\r
632                         }\r
633                         \r
634                         if ( array_key_exists($key, $ways) && $ways[$key] != $value['way'] )\r
635                         {\r
636                                 if ( !in_array($ways[$key], array('thumbnail', 'original', 'anchor')) )\r
637                                 {\r
638                                         $data[$key]['way'] = 'thumbnail';\r
639                                 }\r
640                                 else\r
641                                 {\r
642                                         $data[$key]['way'] = $ways[$key];\r
643                                 }\r
644                         }\r
645                 }\r
646                 return;\r
647         }\r
648         \r
649         static private function prepareEnctype()\r
650         {\r
651                 self::$buffer = ob_start();\r
652                 return;\r
653         }\r
654         \r
655         static private function setEnctype()\r
656         {\r
657                 if ( !self::$buffer )\r
658                 {\r
659                         return;\r
660                 }\r
661                 \r
662                 $strings = ob_get_contents();\r
663                 ob_end_clean();\r
664                 $strings = preg_replace('#action="(index.php|bookmarklet.php)"#', '$0 enctype="multipart/form-data"', $strings);\r
665                 echo $strings;\r
666                 return;\r
667         }\r
668 }\r