OSDN Git Service

NP_SkinFiles差し替え
[nucleus-jp/nucleus-jp-ancient.git] / nucleus / plugins / skinfiles / index.php
1 <?php\r
2 \r
3    /* ==========================================================================================\r
4         * Nucleus SkinFiles Plugin\r
5         *\r
6         * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer\r
7         *\r
8         * @version $Id$\r
9         * @version $NucleusJP: index.php,v 1.6 2007/03/20 19:32:47 kmorimatsu Exp $\r
10         *\r
11         * ==========================================================================================\r
12         * This program is free software and open source software; you can redistribute\r
13         * it and/or modify it under the terms of the GNU General Public License as\r
14         * published by the Free Software Foundation; either version 2 of the License,\r
15         * or (at your option) any later version.\r
16         *\r
17         * This program is distributed in the hope that it will be useful, but WITHOUT\r
18         * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
19         * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
20         * more details.\r
21         *\r
22         * You should have received a copy of the GNU General Public License along\r
23         * with this program; if not, write to the Free Software Foundation, Inc.,\r
24         * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  or visit\r
25         * http://www.gnu.org/licenses/gpl.html\r
26         * ==========================================================================================\r
27         */\r
28 \r
29         $strRel = '../../../'; \r
30         require($strRel . 'config.php');\r
31         include($DIR_LIBS . 'PLUGINADMIN.php');\r
32 \r
33         $language = preg_replace( '@\\|/@', '', getLanguageName());\r
34         $langfile = $language.'.php';\r
35         if (file_exists($langfile))\r
36                 include_once($langfile);\r
37         else\r
38                 include_once('english.php');\r
39 \r
40         /**\r
41           * Create admin area\r
42           */\r
43 \r
44         $oPluginAdmin  = new PluginAdmin('SkinFiles');\r
45 \r
46         if (!($member->isLoggedIn() && $member->isAdmin()))\r
47         {\r
48                 /* begin modification by yama.kyms */\r
49                 $oPluginAdmin->start();\r
50                 /* end modification */\r
51                 echo '<p>' . _ERROR_DISALLOWED . '</p>';\r
52                 $oPluginAdmin->end();\r
53                 exit;\r
54         }\r
55 \r
56 \r
57         \r
58         /**\r
59           * Setup main variables\r
60           */\r
61 \r
62         $rootDirectory = sfRealPath($DIR_SKINS);                        \r
63         $rootUrl       = $CONF['SkinsURL'];\r
64         $pluginUrl         = $oPluginAdmin->plugin->getAdminURL();\r
65 \r
66         $filetypes = array (\r
67                 'text'  => array ('inc', 'txt', 'css', 'js', 'php'),\r
68                 'html'  => array ('htm', 'html'),\r
69                 'img'   => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),\r
70         );\r
71         \r
72         \r
73         /**\r
74           * Bypass admin area for downloads\r
75           */\r
76         \r
77         $action = requestVar('action');\r
78 \r
79         if ($action == 'download') { \r
80                 _skinfiles_download();\r
81                 exit;\r
82         }\r
83 \r
84 \r
85         /**\r
86           * Build admin area\r
87           */\r
88 \r
89         $oPluginAdmin->start();\r
90         \r
91         echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";\r
92         \r
93         $actions = array (\r
94                 'renfile', 'renfile_process', 'delfile', 'delfile_process', \r
95                 'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',\r
96                 'rendir', 'rendir_process', 'deldir', 'deldir_process',\r
97                 'emptydir', 'emptydir_process', 'createdir'\r
98         );\r
99         \r
100         if (in_array($action, $actions)) \r
101         { \r
102                 if (!$manager->checkTicket())\r
103                 {\r
104                         echo '<p class="error">' . _ERROR . ': ' . _ERROR_BADTICKET . '</p>';\r
105                         sfShowDirectory();\r
106                         \r
107                 } \r
108                 else \r
109                 {\r
110                         call_user_func('_skinfiles_' . $action);\r
111                 }\r
112         } \r
113         else \r
114         {\r
115                 sfShowDirectory();\r
116         }\r
117 \r
118         $oPluginAdmin->end();\r
119         exit;\r
120         \r
121         \r
122 \r
123 \r
124 \r
125 \r
126 \r
127         /* Helper functions **************************************************************************************************************/\r
128 \r
129         function sfExpandDirectory ($path) {\r
130            /* IN:  relative directory\r
131                 * OUT: full path to directory\r
132                 */\r
133 \r
134                 global $rootDirectory;\r
135                 return sfRealPath($rootDirectory . $path);\r
136         }\r
137         \r
138         function sfRealPath ($path) {\r
139            /* IN:  full path \r
140                 * OUT: canonicalized absolute pathname\r
141                 */\r
142 \r
143                 $path = realpath($path);\r
144                 $path = str_replace('\\', '/', $path);  \r
145                 $path = substr($path, strlen($path) - 1) != '/' ? $path . '/' : $path;\r
146                 return $path;\r
147         }\r
148 \r
149         function sfFullUrl ($path) {\r
150            /* IN:  full path including filename\r
151                 * OUT: url including filename\r
152                 */\r
153 \r
154                 global $rootDirectory, $rootUrl;\r
155                 \r
156                 $path = str_replace($rootDirectory, '', $path);\r
157                 $path = rawurlencode($path);\r
158                 $path = str_replace('%2F', '/', $path);\r
159                 return $rootUrl . $path;\r
160         }\r
161 \r
162         function sfValidPath ($path) {\r
163            /* IN:  full path excluding or including filename\r
164                 * OUT: boolean, true if full path is or is within rootDirectory\r
165                 */\r
166 \r
167                 global $rootDirectory;\r
168                 return substr($path, 0, strlen($rootDirectory)) == $rootDirectory;\r
169         }\r
170         \r
171         function sfRelativePath ($path) {\r
172            /* IN:  full path including or excluding filename\r
173                 * OUT: relative path from rootDirectory\r
174                 */\r
175 \r
176                 global $rootDirectory;\r
177                 return str_replace($rootDirectory, '', $path);\r
178         }\r
179         \r
180         function sfIsFileType ($type, $file) {\r
181 \r
182                 global $filetypes;\r
183                 return isset($filetypes[$type]) && in_array(strtolower(substr(strrchr($file, "."), 1)), $filetypes[$type]);\r
184         }\r
185 \r
186         function sfAllowEditing ($file) {\r
187                 return sfIsFileType('html', $file) || sfIsFileType('text', $file);\r
188         }\r
189         \r
190         function sfAllowViewing ($file) {\r
191                 return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);\r
192         }\r
193 \r
194 \r
195         function sfDisplayPath ($relative) {\r
196         \r
197                 global $pluginUrl;\r
198                 \r
199                 $result  = '<a href="' . htmlspecialchars($pluginUrl) . '" title="Go back to &laquo;skins&raquo;">';\r
200                 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';\r
201 \r
202                 $parts = explode('/', $relative);\r
203                 $part = '';\r
204                 \r
205                 while (list(,$v) = each ($parts)) {\r
206                         if ($v != '') {\r
207                                 $part .= $v . '/';\r
208                                 \r
209                                 $result .= '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';\r
210                                 $result .= 'title="Go back to &laquo;' . htmlspecialchars($v) . '&raquo;">';\r
211                                 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="" /> ';\r
212                                 $result .= htmlspecialchars($v) . '</a> / ';\r
213                         }\r
214                 }\r
215                 \r
216                 return $result;\r
217         }\r
218 \r
219         function sfIcon ($file) {\r
220         \r
221                 global $pluginUrl;\r
222         \r
223                 $ext = strtolower(substr(strrchr($file, "."), 1));\r
224                 \r
225                 switch ($ext) {\r
226                         case 'htm':\r
227                         case 'html':\r
228                                 return $pluginUrl . 'html.gif';\r
229                                 break;\r
230 \r
231                         case 'txt':\r
232                         case 'js':\r
233                         case 'css':\r
234                         case 'inc':\r
235                                 return $pluginUrl . 'text.gif';\r
236                                 break;\r
237 \r
238                         case 'gif':\r
239                         case 'png':\r
240                         case 'jpg':\r
241                         case 'jpeg':\r
242                         case 'bmp':\r
243                         case 'xbmp':\r
244                         case 'ico':\r
245                                 return $pluginUrl . 'image.gif';\r
246                                 break;\r
247 \r
248                         case 'php':\r
249                         case 'php3':\r
250                         case 'php4':\r
251                                 return $pluginUrl . 'php.gif';\r
252                                 break;\r
253                                 \r
254                         default:\r
255                                 return $pluginUrl . 'generic.gif';\r
256                                 break;\r
257                 }\r
258         }\r
259 \r
260         function sfIllegalFilename($name) {\r
261                 return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);\r
262         }\r
263 \r
264         function sfDirectoryIsEmpty($dir) {\r
265                 \r
266                 $count = 0;\r
267                 \r
268                 if ($dh = opendir($dir)) \r
269                 {\r
270                         while (($file = readdir($dh)) !== false) \r
271                         $count++;\r
272                         \r
273                         closedir($dh);\r
274                 }\r
275                 \r
276                 // $count must be smaller or equal than 2, because '.' \r
277                 // and '..' are always returned by readdir().\r
278                 return $count <= 2;\r
279         }\r
280 \r
281 \r
282 \r
283 \r
284 \r
285 \r
286 \r
287 \r
288 \r
289         /* Show directory ****************************************************************************************************************/\r
290 \r
291         function sfShowDirectory($default = '') {\r
292 \r
293                 global $pluginUrl, $rootDirectory, $CONF, $manager;\r
294                 \r
295                 $directory = $default != '' ? \r
296                         $default : \r
297                         sfExpandDirectory(trim(requestVar('dir')));\r
298                 \r
299                 if (!sfValidPath($directory) || !is_dir($directory)) {\r
300                         $directory = $rootDirectory;\r
301                 }\r
302 \r
303                 $relative  = sfRelativePath ($directory);\r
304                 \r
305                 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';                  \r
306 \r
307                         \r
308                 $dirs = array();\r
309                 $files = array();\r
310 \r
311                 if ($dh = @opendir($directory)) { \r
312                         while (($file = readdir($dh)) !== false) { \r
313                                 if (!preg_match("/^\.{1,2}$/", $file)) {\r
314                                         $fstat = @stat($directory . $file);\r
315                                 \r
316                                         if ($fstat['mode'] & 040000)\r
317                                                 $dirs[$file] = $fstat;\r
318                                         else\r
319                                                 $files[$file] = $fstat;\r
320                                 }\r
321                         }\r
322                         closedir($dh); \r
323                 }                       \r
324                 \r
325                 ksort($dirs);\r
326                 ksort($files);\r
327                 \r
328                 echo '<table><thead><tr>';\r
329                 echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';\r
330                 echo '</tr></thead>';\r
331 \r
332                 while (list($name, $stat) = each($dirs)) {\r
333                         \r
334                         $dir = sfRelativePath($directory . $name . '/');\r
335                                 \r
336                         echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';\r
337                         \r
338                         if (is_readable ($directory . $name)) \r
339                         {\r
340                                 echo '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';\r
341                                 echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';\r
342                                 echo htmlspecialchars($name).'</a>';                    \r
343                         }\r
344                         else\r
345                         {\r
346                                 echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';\r
347                                 echo htmlspecialchars($name);                   \r
348                         }\r
349                                                 \r
350                         echo '</td>';\r
351                                 \r
352                         $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));\r
353                         $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));\r
354                                 \r
355                         echo '<td>&ndash;</td>';\r
356                         echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);\r
357                         \r
358                         \r
359                         if (is_writable($directory . $name)) {\r
360                                 echo '<td><a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_RENAME . '</a></td>';\r
361                         } else {\r
362                                 echo '<td>&nbsp;</td>';\r
363                         }\r
364                         \r
365                         if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {\r
366                                 echo '<td><a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DELETE . '</a></td>';\r
367                         } else {\r
368                                 echo '<td>&nbsp;</td>';\r
369                         }\r
370                         \r
371                         echo '<td>&nbsp;</td><td>&nbsp;</td>';\r
372                         echo '</tr>';\r
373                 }\r
374 \r
375 \r
376                 while (list($name, $stat) = each($files)) {\r
377 \r
378                         $file = sfRelativePath($directory . $name);\r
379 \r
380                         $renUrl   = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file='  . rawurlencode($file));\r
381                         $delUrl   = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file='  . rawurlencode($file));\r
382                         $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));\r
383                         $viewUrl  = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));\r
384                         $dlUrl    = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));\r
385 \r
386                         echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';\r
387                         \r
388                         if (is_readable ($directory . $name) && sfAllowViewing($name)) \r
389                         {\r
390                                 echo '<a href="' . htmlspecialchars($viewUrl) . '">';\r
391                                 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';\r
392                                 echo htmlspecialchars($name).'</a>';\r
393                         }\r
394                         else\r
395                         {\r
396                                 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';\r
397                                 echo htmlspecialchars($name);\r
398                         }\r
399 \r
400                         echo '</td><td>';\r
401                         echo ceil($stat['size'] / 1024) . ' kB';\r
402                         echo '</td><td>';\r
403                         echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);\r
404                         echo '</td><td>';\r
405                                 \r
406                         if (is_writable($directory . $name)) {\r
407                                 echo '<a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_RENAME . '</a>';\r
408                         } else {\r
409                                 echo '&nbsp;';\r
410                         }\r
411                                 \r
412                         echo '</td><td>';\r
413 \r
414                         if (is_writable($directory . $name)) {\r
415                                 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DELETE . '</a>';\r
416                         } else {\r
417                                 echo '&nbsp;';\r
418                         }\r
419                                 \r
420                         echo '</td><td>';\r
421                         \r
422                         if (is_writable($directory . $name) && sfAllowEditing($name))\r
423                                 echo '<a href="'. htmlspecialchars($editUrl) . '" title="' . _SKINFILES_EDIT . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_EDIT . '</a>';\r
424                         else\r
425                                 echo '&nbsp;';\r
426 \r
427                         echo '</td><td>';\r
428                         \r
429                         if (is_readable ($directory . $name))\r
430                                 echo '<a href="' . htmlspecialchars($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DOWNLOAD . '</a>';\r
431                         else\r
432                                 echo '&nbsp;';\r
433                                 \r
434                         echo '</td></tr>';\r
435                 }\r
436 \r
437                 if (!count($dirs) && !count($files)) {\r
438                         echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';\r
439                 }\r
440 \r
441                 echo '</table>';\r
442 \r
443                 if ($relative != '') {\r
444                 \r
445                         if (is_writable($directory)) {\r
446                                 echo '<div class="dialogbox">';\r
447                                 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';\r
448                                 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
449                                 $manager->addTicketHidden();\r
450                                 echo '<input type="hidden" name="action" value="createfile" />';\r
451                                 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
452                                 echo '<input type="text" name="name" size="40" value="untitled.txt" />';\r
453                                 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';\r
454                                 echo '</div></div>';\r
455         \r
456                                 echo '<div class="dialogbox">';\r
457                                 echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';\r
458                                 echo '<form method="post" enctype="multipart/form-data" action="' . htmlspecialchars($pluginUrl) . '">';\r
459                                 $manager->addTicketHidden();\r
460                                 echo '<input type="hidden" name="action" value="uploadfile" />';\r
461                                 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
462                                 echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';\r
463                                 echo '<input type="file" name="name" size="40" />';\r
464                                 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';\r
465                                 echo '</div></div>';\r
466                         }\r
467         \r
468                         if (count($files)) {\r
469                                 echo '<div class="dialogbox">';\r
470                                 echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';\r
471                                 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
472                                 $manager->addTicketHidden();\r
473                                 echo '<input type="hidden" name="action" value="emptydir" />';\r
474                                 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
475                                 echo _SKINFILES_DEL_ALL_FILES_MSG;\r
476                                 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';\r
477                                 echo '</form>';\r
478                                 echo '</div></div>';\r
479                         }\r
480                 }\r
481         \r
482                 if (is_writable($directory)) {\r
483                         echo '<div class="dialogbox">';\r
484                         echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';\r
485                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
486                         $manager->addTicketHidden();\r
487                         echo '<input type="hidden" name="action" value="createdir" />';\r
488                         echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
489                         echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';\r
490                         echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';\r
491                         echo '</form>';\r
492                         echo '</div></div>';\r
493                 }\r
494         }\r
495         \r
496         \r
497         \r
498 \r
499         /* Rename directory **************************************************************************************************************/\r
500 \r
501         function _skinfiles_rendir($preset = '') {\r
502 \r
503                 global $pluginUrl, $manager;\r
504                 \r
505                 $file      = trim(basename(requestVar('dir')));\r
506                 $directory = trim(dirname(requestVar('dir')));\r
507                 $directory = sfExpandDirectory ($directory);\r
508                 \r
509                 if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
510                         is_dir($directory . $file) && is_writable($directory . $file)) \r
511                 {\r
512                         $relative = sfRelativePath ($directory);\r
513                         $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));\r
514 \r
515                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
516                         echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . $file . '&raquo;">';\r
517                         echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
518 \r
519                         echo '<div class="dialogbox">';\r
520                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
521                         $manager->addTicketHidden();\r
522                         echo '<input type="hidden" name="action" value="rendir_process" />';\r
523                         echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
524 \r
525                         echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';\r
526                         echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';\r
527                         echo '<p class="buttons">';\r
528                         echo '<input type="hidden" name="sure" value="yes" />';\r
529                         echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';\r
530                         echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
531                         echo '</p>';\r
532                         echo '</div></form></div>';\r
533                 }\r
534                 else\r
535                 {\r
536                         echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " &laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;\r
537                         echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";\r
538                 }\r
539         }\r
540         \r
541         function _skinfiles_rendir_process() {\r
542 \r
543                 global $pluginUrl, $manager;\r
544                 \r
545                 $file      = trim(basename(requestVar('dir')));\r
546                 $directory = trim(dirname(requestVar('dir')));\r
547                 $directory = sfExpandDirectory ($directory);\r
548                 \r
549                 if (requestVar('sure') == 'yes')\r
550                 {\r
551                         if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
552                                 is_dir($directory . $file) && is_writable($directory . $file)) \r
553                         {\r
554                                 $name = requestVar('name');\r
555                                 \r
556                                 if ($name == '') {\r
557                                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
558                                         echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";\r
559                                         _skinfiles_rendir($name);\r
560                                         return;\r
561                                 }\r
562                                 \r
563                                 if (sfIllegalFilename($name)) {\r
564                                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
565                                         echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";\r
566                                         _skinfiles_rendir($name);\r
567                                         return;\r
568                                 } \r
569                                 \r
570                                 if ($name == $file) {\r
571                                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
572                                         echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";\r
573                                         _skinfiles_rendir($name);\r
574                                         return;\r
575                                 }\r
576                                 \r
577                                 if (file_exists($directory . $name)) {\r
578                                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
579                                         echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";\r
580                                         _skinfiles_rendir($name);\r
581                                         return;\r
582                                 }\r
583                                 \r
584                                 if (!@rename($directory . $file, $directory . $name)) \r
585                                 {\r
586                                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
587                                         _skinfiles_rendir($name);\r
588                                         return;\r
589                                 }\r
590         \r
591                                 echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_RENAMED_DIR2;\r
592                                 echo _SKINFILES_RENAMED_DIR3 . "&laquo;" . htmlspecialchars($name) . "&raquo;" . _SKINFILES_RENAMED_DIR4 . "</p>";\r
593                                 sfShowDirectory($directory);\r
594                         }               \r
595                         else\r
596                         {\r
597                                 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;\r
598                                 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";\r
599                         }\r
600                 }\r
601                 else\r
602                 {\r
603                         // User cancelled\r
604                         sfShowDirectory($directory);\r
605                 }\r
606         }\r
607 \r
608 \r
609 \r
610 \r
611         /* Create directory **************************************************************************************************************/\r
612 \r
613         function _skinfiles_createdir() {\r
614         \r
615                 $directory = trim(requestVar('dir'));\r
616                 $directory = sfExpandDirectory($directory);\r
617 \r
618                 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
619                 {\r
620                         $name = requestVar('name');\r
621                         \r
622                         if ($name == '') {\r
623                                 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";\r
624                                 sfShowDirectory($directory);\r
625                                 return;\r
626                         }\r
627                         \r
628                         if (sfIllegalFilename($name)) {\r
629                                 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
630                                 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";\r
631                                 sfShowDirectory($directory);\r
632                                 return;\r
633                         } \r
634                         \r
635                         if (file_exists($directory . $name)) {\r
636                                 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
637                                 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";\r
638                                 sfShowDirectory($directory);\r
639                                 return;\r
640                         }\r
641                         \r
642                         $mask = @umask(0000);\r
643 \r
644                         if (!@mkdir($directory . $name, 0755)) \r
645                         {\r
646                                 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "&laquo;" . htmlspecialchars($name) . "&raquo;</p>";\r
647                                 sfShowDirectory($directory);\r
648                                 return;\r
649                         }\r
650 \r
651                         @umask($mask);\r
652                         \r
653                         echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";\r
654                         sfShowDirectory($directory);\r
655                 }               \r
656                 else\r
657                 {\r
658                         echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "&laquo;" . htmlspecialchars(basename($directory)) . "&raquo; " .  _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;\r
659                         echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";\r
660                 }\r
661         }\r
662         \r
663         \r
664         \r
665 \r
666         /* Delete directory **************************************************************************************************************/\r
667 \r
668         function _skinfiles_deldir() {\r
669 \r
670                 global $pluginUrl, $manager;\r
671                 \r
672                 $file      = trim(basename(requestVar('dir')));\r
673                 $directory = trim(dirname(requestVar('dir')));\r
674                 $directory = sfExpandDirectory ($directory);\r
675                 \r
676                 if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
677                         is_dir($directory . $file) && is_writable($directory . $file) &&\r
678                         sfDirectoryIsEmpty($directory . $file)) \r
679                 {\r
680                         $relative = sfRelativePath ($directory);\r
681                         $delUrl  = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));\r
682 \r
683                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
684                         echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . $file . '&raquo;">';\r
685                         echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
686 \r
687                         echo '<div class="dialogbox">';\r
688                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
689                         $manager->addTicketHidden();\r
690                         echo '<input type="hidden" name="action" value="deldir_process" />';\r
691                         echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
692 \r
693                         echo '<h4>' . _SKINFILES_DELETE_DIR . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';\r
694                         echo '<p class="buttons">';\r
695                         echo '<input type="hidden" name="sure" value="yes" />';\r
696                         echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
697                         echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
698                         echo '</p>';\r
699                         echo '</div></form></div>';\r
700                 }\r
701                 else\r
702                 {\r
703                         echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " &laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
704                         echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
705                 }\r
706         }\r
707         \r
708         function _skinfiles_deldir_process() {\r
709 \r
710                 global $pluginUrl, $manager;\r
711                 \r
712                 $file      = trim(basename(requestVar('dir')));\r
713                 $directory = trim(dirname(requestVar('dir')));\r
714                 $directory = sfExpandDirectory ($directory);\r
715                 \r
716                 if (requestVar('sure') == 'yes')\r
717                 {\r
718                         if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
719                                 is_dir($directory . $file) && is_writable($directory . $file) &&\r
720                                 sfDirectoryIsEmpty($directory . $file)) \r
721                         {\r
722                                 if (!@rmdir($directory . $file)) \r
723                                 {\r
724                                         echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
725                                         sfShowDirectory($directory);\r
726                                         return;\r
727                                 }\r
728         \r
729                                 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";\r
730 \r
731                                 /* begin modification by katsumi */\r
732                                 $num=0;\r
733                                 $d = dir($directory);\r
734                                 while (false !== ($entry = $d->read())) {\r
735                                     if ($entry!='.' && $entry!='..') $num++;\r
736                                 }\r
737                                 $d->close();\r
738                                 if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('dir'))));\r
739                                 /* end modification */\r
740 \r
741                                 sfShowDirectory($directory);\r
742                         }               \r
743                         else\r
744                         {\r
745                                 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
746                                 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
747                         }\r
748                 }\r
749                 else\r
750                 {\r
751                         // User cancelled\r
752                         sfShowDirectory($directory);\r
753                 }\r
754         }       \r
755         \r
756         \r
757         \r
758         \r
759         /* Empty directory ***************************************************************************************************************/\r
760 \r
761         function _skinfiles_emptydir() {\r
762 \r
763                 global $pluginUrl, $manager;\r
764                 \r
765                 $file      = trim(basename(requestVar('dir')));\r
766                 $directory = trim(dirname(requestVar('dir')));\r
767                 $directory = sfExpandDirectory ($directory);\r
768                 \r
769                 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file)) \r
770                 {\r
771                         $files = array();\r
772         \r
773                         if ($dh = @opendir($directory . $file)) \r
774                         { \r
775                                 while (($name = readdir($dh)) !== false) {\r
776                                         if(!preg_match("/^\.{1,2}$/", $name) && \r
777                                            !is_dir($directory . $file . '/' . $name) &&\r
778                                            is_writable($directory . $file . '/' . $name)) \r
779                                                         $files[] = $name;\r
780                                 }\r
781                                 \r
782                                 closedir($dh); \r
783                                 sort($files);\r
784                         }\r
785                         \r
786                         $relative = sfRelativePath ($directory);\r
787                         $emptyUrl  = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));\r
788 \r
789                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
790                         echo '<a href="' . htmlspecialchars($emptyUrl) . '" title="Empty &laquo;' . $file . '&raquo;">';\r
791                         echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
792 \r
793                         echo '<div class="dialogbox">';\r
794                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
795                         $manager->addTicketHidden();\r
796                         echo '<input type="hidden" name="action" value="emptydir_process" />';\r
797                         echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
798 \r
799                         echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo;' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';\r
800                         \r
801                         if (count($files)) \r
802                         {\r
803                                 echo '<ul>';\r
804                                 foreach ($files as $name) {     echo '<li>' . htmlspecialchars($name) . '</li>'; }\r
805                                 echo '</ul>';\r
806         \r
807                                 echo '<p class="buttons">';\r
808                                 echo '<input type="hidden" name="sure" value="yes" />';\r
809                                 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
810                                 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
811                                 echo '</p>';\r
812                         }\r
813                         else\r
814                         {\r
815                                 echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';\r
816                                 echo '<p class="buttons">';\r
817                                 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
818                                 echo '</p>';\r
819                         }\r
820                         \r
821                         echo '</div></form></div>';\r
822                         \r
823                 }\r
824                 else\r
825                 {\r
826                         echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
827                         echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
828                 }\r
829         }\r
830 \r
831         function _skinfiles_emptydir_process() {\r
832 \r
833                 global $pluginUrl, $manager;\r
834                 \r
835                 $file      = trim(basename(requestVar('dir')));\r
836                 $directory = trim(dirname(requestVar('dir')));\r
837                 $directory = sfExpandDirectory ($directory);\r
838                 \r
839                 if (requestVar('sure') == 'yes')\r
840                 {\r
841                         if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file)) \r
842                         {\r
843                                 if ($dh = @opendir($directory . $file)) \r
844                                 { \r
845                                         while (($name = readdir($dh)) !== false) \r
846                                         {\r
847                                                 if(!preg_match("/^\.{1,2}$/", $name) &&  !is_dir($directory . $file . '/' . $name) &&\r
848                                                    is_writable($directory . $file . '/' . $name)) \r
849                                                 {\r
850                                                         if (unlink ($directory .$file . '/' . $name)) \r
851                                                                 echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";\r
852                                                         else\r
853                                                                 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";\r
854                                                 }\r
855                                         }\r
856                                         \r
857                                         closedir($dh); \r
858         \r
859                                         sfShowDirectory($directory . $file . '/');\r
860                                 }\r
861                         }\r
862                         else\r
863                         {\r
864                                 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR6;\r
865                                 echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";\r
866                         }\r
867                 }\r
868                 else\r
869                 {\r
870                         // User cancelled\r
871                         sfShowDirectory($directory . $file . '/');\r
872                 }\r
873         }\r
874 \r
875 \r
876 \r
877 \r
878         /* Download file *****************************************************************************************************************/\r
879 \r
880         function _skinfiles_download() {\r
881 \r
882                 global $pluginUrl, $manager;\r
883                 \r
884                 $file = basename(trim(requestVar('file')));\r
885 \r
886                 $directory = dirname(trim(requestVar('file')));\r
887                 $directory = sfExpandDirectory ($directory);\r
888                 \r
889                 if (sfValidPath($directory) && file_exists($directory . $file) && \r
890                         is_file($directory . $file) && is_readable($directory . $file)) \r
891                 {\r
892                         if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))\r
893                                 $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);\r
894                         else\r
895                                 $name = $file;\r
896                                 \r
897                         if ($fp = @fopen($directory . $file, 'r')) {\r
898                                 header("Cache-Control: ");      // leave blank to avoid IE errors\r
899                                 header("Pragma: ");                     // leave blank to avoid IE errors\r
900                                 header("Content-type: application/octet-stream");\r
901                                 header('Content-Disposition: attachment; filename="'.$name.'"');\r
902                                 header("Content-length: ".(string)(filesize($directory . $file)));\r
903                                 sleep(1);\r
904                                 \r
905                                 fpassthru($fp);\r
906                                 fclose($fp);\r
907                         }\r
908                         else\r
909                         {\r
910                                 echo _SKINFILES_ERR_DOWNLOAD_FILE1;\r
911                         }\r
912                 }\r
913                 else\r
914                 {\r
915                         echo _SKINFILES_ERR_DOWNLOAD_FILE2;\r
916                 }\r
917 \r
918                 exit;\r
919         }\r
920 \r
921 \r
922 \r
923 \r
924         /* View file *********************************************************************************************************************/\r
925 \r
926         function _skinfiles_viewfile() {\r
927 \r
928                 global $pluginUrl, $manager;\r
929                 \r
930                 $file      = basename(trim(requestVar('file')));\r
931                 $directory = dirname(trim(requestVar('file')));\r
932                 $directory = sfExpandDirectory ($directory);\r
933                 \r
934                 if (sfValidPath($directory) && file_exists($directory . $file) && \r
935                         is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file)) \r
936                 {\r
937                         $relative = sfRelativePath ($directory);\r
938                         $viewUrl  = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
939 \r
940                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
941                         echo '<a href="' . htmlspecialchars($viewUrl) . '" title="View &laquo;' . $file . '&raquo;">';\r
942                         echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
943 \r
944                         echo '<h4>' . _SKINFILES_VIEW_FILE . '&laquo;' . htmlspecialchars($file) . '&raquo;</h4>';\r
945 \r
946                         if (sfIsFileType('html', $file))\r
947                         {\r
948                                 echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';\r
949                         }\r
950 \r
951                         if (sfIsFileType('text', $file))\r
952                         {\r
953                                 $content = implode('', file($directory . $file));\r
954 \r
955                                 echo '<pre>';\r
956                                 echo htmlspecialchars($content);\r
957                                 echo '</pre>';\r
958                         }\r
959 \r
960                         if (sfIsFileType('img', $file))\r
961                         {\r
962                                 $size = getimagesize($directory . $file, $info);\r
963                                 \r
964                                 switch ($size[2]) {\r
965                                         case IMAGETYPE_GIF:             $type = 'GIF document'; break;\r
966                                         case IMAGETYPE_JPEG:    $type = 'JPEG photograph'; break;\r
967                                         case IMAGETYPE_PNG:             $type = 'PNG document'; break;\r
968                                         case IMAGETYPE_SWF:             $type = 'Flash animation'; break;\r
969                                         case IMAGETYPE_PSD:             $type = 'Photoshop document'; break;\r
970                                         case IMAGETYPE_BMP:             $type = 'BMP document'; break;\r
971                                         case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;\r
972                                         case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;\r
973                                         case IMAGETYPE_JPC:             $type = 'JPEG2000 photograph'; break;\r
974                                         case IMAGETYPE_JP2:     $type = 'JPEG2000 photograph'; break;\r
975                                         case IMAGETYPE_JPX:     $type = 'JPEG2000 photograph'; break;\r
976                                         case IMAGETYPE_JB2:     $type = 'Slowview document'; break;\r
977                                         case IMAGETYPE_SWC:     $type = 'Flash animation (compressed)'; break;\r
978                                         case IMAGETYPE_IFF:     $type = 'IFF document'; break;\r
979                                         case IMAGETYPE_WBMP:    $type = 'WBMP document'; break;\r
980                                         case IMAGETYPE_XBM:     $type = 'XBM document'; break;\r
981                                         default:                                $type = 'Unknown document'; break;\r
982                                 }\r
983 \r
984                                 if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||\r
985                                         $size[2] == IMAGETYPE_PNG)\r
986                                 {\r
987                                         echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';\r
988                                 }\r
989                                 \r
990                                 echo '<table>';\r
991                                 echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';\r
992                                 echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . htmlspecialchars($type) . '</td></tr>';\r
993                                 echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . htmlspecialchars($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';\r
994                                 echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . htmlspecialchars($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';      \r
995                                 \r
996                                 if (isset($size['channels']) || isset($size['bits'])) \r
997                                 {\r
998                                         $channels = isset($size['channels']) ? $size['channels'] : 3;\r
999                                         $depth    = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;\r
1000                                         echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . htmlspecialchars($channels) . '</td></tr>';\r
1001                                         echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . htmlspecialchars($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';\r
1002                                         echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . htmlspecialchars(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';\r
1003                                 }\r
1004 \r
1005                                 \r
1006                                 if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG || \r
1007                                         $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))\r
1008                                 {\r
1009                                         $exif = exif_read_data($directory . $file, 'EXIF');\r
1010                                         \r
1011                                         if ($exif) \r
1012                                         {\r
1013                                                 echo '<tr><th colspan="2">Exif information</th></tr>';\r
1014                                                 \r
1015                                                 if (isset($exif['Make']) && isset($exif['Model']))\r
1016                                                         echo '<tr><td>Camera:</td><td>' . htmlspecialchars($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';\r
1017                                                 \r
1018                                                 if (isset($exif['DateTime']))\r
1019                                                         echo '<tr><td>Created on:</td><td>' . htmlspecialchars($exif['DateTime']) . '</td></tr>';\r
1020                                                 \r
1021                                                 if (isset($exif['XResolution']))\r
1022                                                         echo '<tr><td>Horizontal resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';\r
1023                                                 \r
1024                                                 if (isset($exif['YResolution']))\r
1025                                                         echo '<tr><td>Vertical resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';\r
1026                                                 \r
1027                                                 if (isset($exif['FocalLength']))\r
1028                                                         echo '<tr><td>Focal length:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';\r
1029                                                 \r
1030                                                 if (isset($exif['FNumber']))\r
1031                                                         echo '<tr><td>F-number:</td><td>F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';\r
1032                                                 \r
1033                                                 if (isset($exif['ExposureTime']))\r
1034                                                         echo '<tr><td>Exposuretime:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';\r
1035                                                 \r
1036                                                 if (isset($exif['ISOSpeedRatings']))\r
1037                                                         echo '<tr><td>ISO-speed:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';\r
1038                                         }\r
1039                                 }\r
1040 \r
1041                                 echo '</table>';\r
1042                         }\r
1043                 }\r
1044                 else\r
1045                 {\r
1046                         echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_VIEW_FILE2;\r
1047                         echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";\r
1048                 }\r
1049         }\r
1050 \r
1051         function _skinfiles_exif_prepare($value) {\r
1052                 if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))\r
1053                         if ($matches[1] < $matches[2])\r
1054                                 return '1/' . round($matches[2] / $matches[1]);\r
1055                         else\r
1056                                 return round($matches[1] / $matches[2]);\r
1057                 else\r
1058                         return $value;\r
1059         }\r
1060 \r
1061 \r
1062 \r
1063 \r
1064         /* Edit file *********************************************************************************************************************/\r
1065 \r
1066         function _skinfiles_editfile() {\r
1067 \r
1068                 global $pluginUrl, $manager;\r
1069                 \r
1070                 $file      = basename(trim(requestVar('file')));\r
1071                 $directory = dirname(trim(requestVar('file')));\r
1072                 $directory = sfExpandDirectory ($directory);\r
1073                 \r
1074                 if (sfValidPath($directory) && file_exists($directory . $file) && \r
1075                         is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file)) \r
1076                 {\r
1077                         $relative = sfRelativePath ($directory);\r
1078                         $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
1079 \r
1080                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
1081                         echo '<a href="' . htmlspecialchars($editUrl) . '" title="Edit &laquo;' . $file . '&raquo;">';\r
1082                         echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
1083 \r
1084                         $content = implode('', file($directory . $file));\r
1085 \r
1086                         echo '<div class="dialogbox">';\r
1087                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
1088                         $manager->addTicketHidden();\r
1089                         echo '<input type="hidden" name="action" value="editfile_process" />';\r
1090                         echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
1091 \r
1092                         echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo;</h4><div>';\r
1093                         echo '<p><label><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';\r
1094                         echo htmlspecialchars($content);\r
1095                         echo '</textarea></label></p>';\r
1096                         \r
1097                         echo '<p class="buttons">';\r
1098                         echo '<input type="hidden" name="sure" value="yes" /">';\r
1099                         echo '<input type="submit" value="' .  _SKINFILES_SAVE_CHANGES . '" />';\r
1100                         echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
1101                         echo '</p>';\r
1102                         echo '</div></form></div>';\r
1103                 }\r
1104                 else\r
1105                 {\r
1106                         echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE2;\r
1107                         echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";\r
1108                 }\r
1109         }\r
1110 \r
1111         function _skinfiles_editfile_process() {\r
1112                 global $manager;\r
1113                 $skinfiles            = $manager->getPlugin('NP_SkinFiles');\r
1114                 $file      = basename(trim(requestVar('file')));\r
1115                 $directory = dirname(trim(requestVar('file')));\r
1116                 $directory = sfExpandDirectory ($directory);\r
1117                 \r
1118                 if (requestVar('sure') == 'yes')\r
1119                 {\r
1120                         if (sfValidPath($directory) && file_exists($directory . $file) && \r
1121                                 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file)) \r
1122                         {\r
1123                                 if ($skinfiles->getOption('generate_backup') == 'yes')\r
1124                                 {\r
1125                                         copy($directory . $file,  $directory . $skinfiles->getOption('backup_prefix') . $file);\r
1126                                 }\r
1127                                 $content = postVar('content');\r
1128                                 $success = false;\r
1129                                 if ($fh = @fopen($directory . $file, 'wb')) { \r
1130                                         \r
1131                                         if (@fwrite($fh, $content) !== false)\r
1132                                                 $success = true;\r
1133                                                 \r
1134                                         @fclose($fh);\r
1135                                 }\r
1136                                 \r
1137                                 if ($success)\r
1138                                         echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";\r
1139                                 else\r
1140                                         echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";\r
1141                         \r
1142                                 /* begin modification by katsumi */\r
1143                                 if ($success && strlen($content)==0) {\r
1144                                         _skinfiles_delbutton('file',trim(requestVar('file')));\r
1145                                 }\r
1146                                 /* end modification */\r
1147                                 _skinfiles_editfile();\r
1148                         }\r
1149                         else\r
1150                         {\r
1151                                 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE2;\r
1152                                 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";\r
1153                         }\r
1154                 }\r
1155                 else\r
1156                 {\r
1157                         // User cancelled\r
1158                         sfShowDirectory($directory);\r
1159                 }\r
1160         }\r
1161 \r
1162 \r
1163 \r
1164         /* Rename file *******************************************************************************************************************/\r
1165 \r
1166         function _skinfiles_renfile($preset = '') {\r
1167 \r
1168                 global $pluginUrl, $manager;\r
1169                 \r
1170                 $file      = basename(trim(requestVar('file')));\r
1171                 $directory = dirname(trim(requestVar('file')));\r
1172                 $directory = sfExpandDirectory ($directory);\r
1173                 \r
1174                 if (sfValidPath($directory) && file_exists($directory . $file) && \r
1175                         is_file($directory . $file) && is_writable($directory . $file)) \r
1176                 {\r
1177                         $relative = sfRelativePath ($directory);\r
1178                         $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
1179 \r
1180                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
1181                         echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . $file . '&raquo;">';\r
1182                         echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
1183 \r
1184                         echo '<div class="dialogbox">';\r
1185                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
1186                         $manager->addTicketHidden();\r
1187                         echo '<input type="hidden" name="action" value="renfile_process" />';\r
1188                         echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
1189 \r
1190                         echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '&laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';\r
1191                         echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';\r
1192                         echo '<p class="buttons">';\r
1193                         echo '<input type="hidden" name="sure" value="yes" /">';\r
1194                         echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';\r
1195                         echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
1196                         echo '</p>';\r
1197                         echo '</div></form></div>';\r
1198                 }\r
1199                 else\r
1200                 {\r
1201                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE2;\r
1202                         echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";\r
1203                 }\r
1204         }\r
1205         \r
1206         function _skinfiles_renfile_process() {\r
1207 \r
1208                 global $pluginUrl, $manager;\r
1209                 \r
1210                 $file      = basename(trim(requestVar('file')));\r
1211                 $directory = dirname(trim(requestVar('file')));\r
1212                 $directory = sfExpandDirectory ($directory);\r
1213                 \r
1214                 if (requestVar('sure') == 'yes')\r
1215                 {\r
1216                         if (sfValidPath($directory) && file_exists($directory . $file) && \r
1217                                 is_file($directory . $file) && is_writable($directory . $file)) \r
1218                         {\r
1219                                 $name = requestVar('name');\r
1220 \r
1221                                 if ($name == '') {\r
1222                                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
1223                                         echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";\r
1224                                         _skinfiles_renfile($name);\r
1225                                         return;\r
1226                                 }\r
1227                                 \r
1228                                 if (sfIllegalFilename($name)) {\r
1229                                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
1230                                         echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";\r
1231                                         _skinfiles_renfile($name);\r
1232                                         return;\r
1233                                 } \r
1234                                 \r
1235                                 if ($name == $file) {\r
1236                                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
1237                                         echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";\r
1238                                         _skinfiles_renfile($name);\r
1239                                         return;\r
1240                                 }\r
1241                                 \r
1242                                 if (file_exists($directory . $name)) {\r
1243                                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
1244                                         echo _SKINFILES_ERR_RENAME_FILE11;\r
1245                                         echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";\r
1246                                         _skinfiles_renfile($name);\r
1247                                         return;\r
1248                                 }\r
1249 \r
1250                                 if (!@rename($directory . $file, $directory . $name)) \r
1251                                 {\r
1252                                         echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";\r
1253                                         _skinfiles_renfile($name);\r
1254                                         return;\r
1255                                 }\r
1256         \r
1257                                 echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE16;\r
1258                                 echo _SKINFILES_ERR_RENAME_FILE17 . "&laquo;" . htmlspecialchars($name) . "&raquo;" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";\r
1259                                 sfShowDirectory($directory);\r
1260                         }               \r
1261                         else\r
1262                         {\r
1263                                 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE2;\r
1264                                 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";\r
1265                         }\r
1266                 }\r
1267                 else\r
1268                 {\r
1269                         // User cancelled\r
1270                         sfShowDirectory($directory);\r
1271                 }\r
1272         }\r
1273 \r
1274 \r
1275 \r
1276 \r
1277         /* Create file *******************************************************************************************************************/\r
1278 \r
1279         function _skinfiles_createfile() {\r
1280         \r
1281                 $directory = trim(requestVar('dir'));\r
1282                 $directory = sfExpandDirectory($directory);\r
1283 \r
1284                 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
1285                 {\r
1286                         $name = requestVar('name');\r
1287                         \r
1288                         if ($name == '') {\r
1289                                 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";\r
1290                                 sfShowDirectory($directory);\r
1291                                 return;\r
1292                         }\r
1293                         \r
1294                         if (sfIllegalFilename($name)) {\r
1295                                 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
1296                                 echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";\r
1297                                 sfShowDirectory($directory);\r
1298                                 return;\r
1299                         } \r
1300                         \r
1301                         if (file_exists($directory . $name)) {\r
1302                                 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
1303                                 echo _SKINFILES_ERR_CREATE_FILE5;\r
1304                                 echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";\r
1305                                 sfShowDirectory($directory);\r
1306                                 return;\r
1307                         }\r
1308                         \r
1309                         if (!@touch($directory . $name)) \r
1310                         {\r
1311                                 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";\r
1312                                 sfShowDirectory($directory);\r
1313                                 return;\r
1314                         }\r
1315 \r
1316                         $mask = @umask(0000);\r
1317                         @chmod($directory . $name, 0755);\r
1318                         @umask($mask);\r
1319                         \r
1320                         echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";\r
1321                         sfShowDirectory($directory);\r
1322                 }               \r
1323                 else\r
1324                 {\r
1325                         echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "&laquo;" . htmlspecialchars(basename($directory)) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE12;\r
1326                         echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";\r
1327                 }\r
1328         }\r
1329 \r
1330 \r
1331 \r
1332 \r
1333         /* Delete file *******************************************************************************************************************/\r
1334 \r
1335         function _skinfiles_delfile() {\r
1336 \r
1337                 global $pluginUrl, $manager;\r
1338                 \r
1339                 $file      = basename(trim(requestVar('file')));\r
1340                 $directory = dirname(trim(requestVar('file')));\r
1341                 $directory = sfExpandDirectory ($directory);\r
1342                 \r
1343                 if (sfValidPath($directory) && file_exists($directory . $file) && \r
1344                         is_file($directory . $file) && is_writable($directory . $file)) \r
1345                 {\r
1346                         $relative = sfRelativePath ($directory);\r
1347                         $delUrl  = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
1348 \r
1349                         echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
1350                         echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . $file . '&raquo;">';\r
1351                         echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
1352 \r
1353                         echo '<div class="dialogbox">';\r
1354                         echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
1355                         $manager->addTicketHidden();\r
1356                         echo '<input type="hidden" name="action" value="delfile_process" />';\r
1357                         echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
1358 \r
1359                         echo '<h4>' . _SKINFILES_DELETE_FILE . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';\r
1360                         echo '<p class="buttons">';\r
1361                         echo '<input type="hidden" name="sure" value="yes" />';\r
1362                         echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
1363                         echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
1364                         echo '</p>';\r
1365                         echo '</div></form></div>';\r
1366                 }\r
1367                 else\r
1368                 {\r
1369                         echo "<p class='error'>"  . _SKINFILES_ERR_DELETE_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE2;\r
1370                         echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";\r
1371                 }\r
1372         }\r
1373 \r
1374         function _skinfiles_delfile_process() {\r
1375 \r
1376                 global $pluginUrl, $manager;\r
1377                 \r
1378                 $file      = basename(trim(requestVar('file')));\r
1379                 $directory = dirname(trim(requestVar('file')));\r
1380                 $directory = sfExpandDirectory ($directory);\r
1381                 \r
1382                 if (requestVar('sure') == 'yes')\r
1383                 {\r
1384                         if (sfValidPath($directory) && file_exists($directory . $file) && \r
1385                                 is_file($directory . $file) && is_writable($directory . $file)) \r
1386                         {\r
1387                                 if (!@unlink($directory . $file)) \r
1388                                 {\r
1389                                         echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
1390                                         sfShowDirectory($directory);\r
1391                                         return;\r
1392                                 }\r
1393         \r
1394                                 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";\r
1395 \r
1396                                 /* begin modification by katsumi */\r
1397                                 $num=0;\r
1398                                 $d = dir($directory);\r
1399                                 while (false !== ($entry = $d->read())) {\r
1400                                     if ($entry!='.' && $entry!='..') $num++;\r
1401                                 }\r
1402                                 $d->close();\r
1403                                 if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('file'))));\r
1404                                 /* end modification */\r
1405 \r
1406                                 sfShowDirectory($directory);\r
1407                         }               \r
1408                         else\r
1409                         {\r
1410                                 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE2;\r
1411                                 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";\r
1412                         }\r
1413                 }\r
1414                 else\r
1415                 {\r
1416                         // User cancelled\r
1417                         sfShowDirectory($directory);\r
1418                 }\r
1419         }\r
1420 \r
1421 \r
1422 \r
1423         /* Upload file *******************************************************************************************************************/\r
1424 \r
1425         function _skinfiles_uploadfile() {\r
1426 \r
1427                 global $pluginUrl, $manager, $CONF;\r
1428                 \r
1429                 $directory = trim(requestVar('dir'));\r
1430                 $directory = sfExpandDirectory($directory);\r
1431 \r
1432                 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
1433                 {\r
1434                         $file = postFileInfo('name');\r
1435 \r
1436                         if ($file['size'] > $CONF['MaxUploadSize']) {\r
1437                                 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";\r
1438                                 echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";\r
1439                                 echo $file['size'] . " bytes</p>";\r
1440                                 sfShowDirectory($directory);\r
1441                                 return;\r
1442                         }\r
1443 \r
1444                         if (!is_uploaded_file($file['tmp_name'])) {\r
1445                                 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST .  _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";\r
1446                                 sfShowDirectory($directory);\r
1447                                 return;\r
1448                         }\r
1449                         \r
1450                         if (sfIllegalFilename($file['name'])) {\r
1451                                 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; ";\r
1452                                 echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";\r
1453                                 sfShowDirectory($directory);\r
1454                                 return;\r
1455                         }\r
1456                         \r
1457                         if (file_exists($directory . $file['name'])) {\r
1458                                 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";\r
1459                                 sfShowDirectory($directory);\r
1460                                 return;\r
1461                         }\r
1462 \r
1463                         if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {\r
1464                                 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";\r
1465                                 sfShowDirectory($directory);\r
1466                         }\r
1467 \r
1468                         $mask = @umask(0000);\r
1469                         @chmod($directory . $file['name'], 0755);\r
1470                         @umask($mask);\r
1471 \r
1472                         echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";\r
1473                         sfShowDirectory($directory);\r
1474                 }\r
1475                 else\r
1476                 {\r
1477                         echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "&laquo;" . htmlspecialchars(basename($directory)) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE10;\r
1478                         echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";\r
1479                 }       \r
1480         }\r
1481 \r
1482 /* begin modification by katsumi */\r
1483         /* Delete file/directory buttons when empty *******************************************************************************************************************/\r
1484 \r
1485         function _skinfiles_delbutton($mode,$path){\r
1486                 global $pluginUrl,$manager;\r
1487                 echo '<p><form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
1488                 $manager->addTicketHidden();\r
1489                 switch($mode){\r
1490                 case 'file':\r
1491                         echo _SKINFILES_02;\r
1492                         echo '<input type="hidden" name="action" value="delfile_process" />';\r
1493                         echo '<input type="hidden" name="file" value="'.htmlspecialchars($path).'" />';\r
1494                         break;\r
1495                 case 'dir':\r
1496                 default:\r
1497                         echo 'The directory is empty.';\r
1498                         echo '<input type="hidden" name="action" value="deldir_process" />';\r
1499                         echo '<input type="hidden" name="dir" value="'.htmlspecialchars($path).'" />';\r
1500                 }\r
1501                 echo '<input type="hidden" name="sure" value="yes" />';\r
1502                 echo '<input type="submit" value="'._SKINFILES_DELETE.'" />';\r
1503                 echo "</form></p>\n";\r
1504         }\r
1505 /* end modification */\r
1506 ?>\r