3 /* ==========================================================================================
\r
4 * Nucleus SkinFiles Plugin
\r
6 * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer
\r
9 * @version $NucleusJP: index.php,v 1.6 2007/03/20 19:32:47 kmorimatsu Exp $
\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
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
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
29 $strRel = '../../../';
\r
30 require($strRel . 'config.php');
\r
31 include($DIR_LIBS . 'PLUGINADMIN.php');
\r
33 $language = preg_replace( '@\\|/@', '', getLanguageName());
\r
34 $langfile = $language.'.php';
\r
35 if (file_exists($langfile))
\r
36 include_once($langfile);
\r
38 include_once('english.php');
\r
44 $oPluginAdmin = new PluginAdmin('SkinFiles');
\r
46 if (!($member->isLoggedIn() && $member->isAdmin()))
\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
59 * Setup main variables
\r
62 $rootDirectory = sfRealPath($DIR_SKINS);
\r
63 $rootUrl = $CONF['SkinsURL'];
\r
64 $pluginUrl = $oPluginAdmin->plugin->getAdminURL();
\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
74 * Bypass admin area for downloads
\r
77 $action = requestVar('action');
\r
79 if ($action == 'download') {
\r
80 _skinfiles_download();
\r
89 $oPluginAdmin->start();
\r
91 echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";
\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
100 if (in_array($action, $actions))
\r
102 if (!$manager->checkTicket())
\r
104 echo '<p class="error">' . _ERROR . ': ' . _ERROR_BADTICKET . '</p>';
\r
110 call_user_func('_skinfiles_' . $action);
\r
118 $oPluginAdmin->end();
\r
127 /* Helper functions **************************************************************************************************************/
\r
129 function sfExpandDirectory ($path) {
\r
130 /* IN: relative directory
\r
131 * OUT: full path to directory
\r
134 global $rootDirectory;
\r
135 return sfRealPath($rootDirectory . $path);
\r
138 function sfRealPath ($path) {
\r
140 * OUT: canonicalized absolute pathname
\r
143 $path = realpath($path);
\r
144 $path = str_replace('\\', '/', $path);
\r
145 $path = substr($path, strlen($path) - 1) != '/' ? $path . '/' : $path;
\r
149 function sfFullUrl ($path) {
\r
150 /* IN: full path including filename
\r
151 * OUT: url including filename
\r
154 global $rootDirectory, $rootUrl;
\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
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
167 global $rootDirectory;
\r
168 return substr($path, 0, strlen($rootDirectory)) == $rootDirectory;
\r
171 function sfRelativePath ($path) {
\r
172 /* IN: full path including or excluding filename
\r
173 * OUT: relative path from rootDirectory
\r
176 global $rootDirectory;
\r
177 return str_replace($rootDirectory, '', $path);
\r
180 function sfIsFileType ($type, $file) {
\r
183 return isset($filetypes[$type]) && in_array(strtolower(substr(strrchr($file, "."), 1)), $filetypes[$type]);
\r
186 function sfAllowEditing ($file) {
\r
187 return sfIsFileType('html', $file) || sfIsFileType('text', $file);
\r
190 function sfAllowViewing ($file) {
\r
191 return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);
\r
195 function sfDisplayPath ($relative) {
\r
199 $result = '<a href="' . htmlspecialchars($pluginUrl) . '" title="Go back to «skins»">';
\r
200 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';
\r
202 $parts = explode('/', $relative);
\r
205 while (list(,$v) = each ($parts)) {
\r
209 $result .= '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';
\r
210 $result .= 'title="Go back to «' . htmlspecialchars($v) . '»">';
\r
211 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="" /> ';
\r
212 $result .= htmlspecialchars($v) . '</a> / ';
\r
219 function sfIcon ($file) {
\r
223 $ext = strtolower(substr(strrchr($file, "."), 1));
\r
228 return $pluginUrl . 'html.gif';
\r
235 return $pluginUrl . 'text.gif';
\r
245 return $pluginUrl . 'image.gif';
\r
251 return $pluginUrl . 'php.gif';
\r
255 return $pluginUrl . 'generic.gif';
\r
260 function sfIllegalFilename($name) {
\r
261 return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);
\r
264 function sfDirectoryIsEmpty($dir) {
\r
268 if ($dh = opendir($dir))
\r
270 while (($file = readdir($dh)) !== false)
\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
289 /* Show directory ****************************************************************************************************************/
\r
291 function sfShowDirectory($default = '') {
\r
293 global $pluginUrl, $rootDirectory, $CONF, $manager;
\r
295 $directory = $default != '' ?
\r
297 sfExpandDirectory(trim(requestVar('dir')));
\r
299 if (!sfValidPath($directory) || !is_dir($directory)) {
\r
300 $directory = $rootDirectory;
\r
303 $relative = sfRelativePath ($directory);
\r
305 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';
\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
316 if ($fstat['mode'] & 040000)
\r
317 $dirs[$file] = $fstat;
\r
319 $files[$file] = $fstat;
\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
332 while (list($name, $stat) = each($dirs)) {
\r
334 $dir = sfRelativePath($directory . $name . '/');
\r
336 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
\r
338 if (is_readable ($directory . $name))
\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
346 echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
\r
347 echo htmlspecialchars($name);
\r
352 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));
\r
353 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));
\r
355 echo '<td>–</td>';
\r
356 echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
\r
359 if (is_writable($directory . $name)) {
\r
360 echo '<td><a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a></td>';
\r
362 echo '<td> </td>';
\r
365 if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {
\r
366 echo '<td><a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a></td>';
\r
368 echo '<td> </td>';
\r
371 echo '<td> </td><td> </td>';
\r
376 while (list($name, $stat) = each($files)) {
\r
378 $file = sfRelativePath($directory . $name);
\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
386 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
\r
388 if (is_readable ($directory . $name) && sfAllowViewing($name))
\r
390 echo '<a href="' . htmlspecialchars($viewUrl) . '">';
\r
391 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
\r
392 echo htmlspecialchars($name).'</a>';
\r
396 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
\r
397 echo htmlspecialchars($name);
\r
401 echo ceil($stat['size'] / 1024) . ' kB';
\r
403 echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
\r
406 if (is_writable($directory . $name)) {
\r
407 echo '<a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a>';
\r
414 if (is_writable($directory . $name)) {
\r
415 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a>';
\r
422 if (is_writable($directory . $name) && sfAllowEditing($name))
\r
423 echo '<a href="'. htmlspecialchars($editUrl) . '" title="' . _SKINFILES_EDIT . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_EDIT . '</a>';
\r
429 if (is_readable ($directory . $name))
\r
430 echo '<a href="' . htmlspecialchars($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DOWNLOAD . '</a>';
\r
437 if (!count($dirs) && !count($files)) {
\r
438 echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';
\r
443 if ($relative != '') {
\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
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
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
478 echo '</div></div>';
\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
492 echo '</div></div>';
\r
499 /* Rename directory **************************************************************************************************************/
\r
501 function _skinfiles_rendir($preset = '') {
\r
503 global $pluginUrl, $manager;
\r
505 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
506 $directory = trim(dirname(requestVar('dir')));
\r
507 $directory = sfExpandDirectory ($directory);
\r
509 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
\r
510 is_dir($directory . $file) && is_writable($directory . $file))
\r
512 $relative = sfRelativePath ($directory);
\r
513 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));
\r
515 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
516 echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
\r
517 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
\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
525 echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' «' . htmlspecialchars($file) . '» ' . _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
532 echo '</div></form></div>';
\r
536 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
\r
537 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
\r
541 function _skinfiles_rendir_process() {
\r
543 global $pluginUrl, $manager;
\r
545 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
546 $directory = trim(dirname(requestVar('dir')));
\r
547 $directory = sfExpandDirectory ($directory);
\r
549 if (requestVar('sure') == 'yes')
\r
551 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
\r
552 is_dir($directory . $file) && is_writable($directory . $file))
\r
554 $name = requestVar('name');
\r
557 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . htmlspecialchars($file) . "» ";
\r
558 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";
\r
559 _skinfiles_rendir($name);
\r
563 if (sfIllegalFilename($name)) {
\r
564 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . htmlspecialchars($file) . "» ";
\r
565 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";
\r
566 _skinfiles_rendir($name);
\r
570 if ($name == $file) {
\r
571 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . htmlspecialchars($file) . "» ";
\r
572 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";
\r
573 _skinfiles_rendir($name);
\r
577 if (file_exists($directory . $name)) {
\r
578 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . htmlspecialchars($file) . "» ";
\r
579 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";
\r
580 _skinfiles_rendir($name);
\r
584 if (!@rename($directory . $file, $directory . $name))
\r
586 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . htmlspecialchars($file) . "»</p>";
\r
587 _skinfiles_rendir($name);
\r
591 echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_RENAMED_DIR2;
\r
592 echo _SKINFILES_RENAMED_DIR3 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_RENAMED_DIR4 . "</p>";
\r
593 sfShowDirectory($directory);
\r
597 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
\r
598 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
\r
604 sfShowDirectory($directory);
\r
611 /* Create directory **************************************************************************************************************/
\r
613 function _skinfiles_createdir() {
\r
615 $directory = trim(requestVar('dir'));
\r
616 $directory = sfExpandDirectory($directory);
\r
618 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
\r
620 $name = requestVar('name');
\r
623 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";
\r
624 sfShowDirectory($directory);
\r
628 if (sfIllegalFilename($name)) {
\r
629 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "» ";
\r
630 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";
\r
631 sfShowDirectory($directory);
\r
635 if (file_exists($directory . $name)) {
\r
636 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . htmlspecialchars($name) . "» ";
\r
637 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";
\r
638 sfShowDirectory($directory);
\r
642 $mask = @umask(0000);
\r
644 if (!@mkdir($directory . $name, 0755))
\r
646 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "»</p>";
\r
647 sfShowDirectory($directory);
\r
653 echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";
\r
654 sfShowDirectory($directory);
\r
658 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . htmlspecialchars(_skinfikes_basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;
\r
659 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";
\r
666 /* Delete directory **************************************************************************************************************/
\r
668 function _skinfiles_deldir() {
\r
670 global $pluginUrl, $manager;
\r
672 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
673 $directory = trim(dirname(requestVar('dir')));
\r
674 $directory = sfExpandDirectory ($directory);
\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
680 $relative = sfRelativePath ($directory);
\r
681 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));
\r
683 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
684 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
\r
685 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
\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
693 echo '<h4>' . _SKINFILES_DELETE_DIR . ' «' . htmlspecialchars($file) . '» ' . _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
699 echo '</div></form></div>';
\r
703 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
\r
704 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
\r
708 function _skinfiles_deldir_process() {
\r
710 global $pluginUrl, $manager;
\r
712 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
713 $directory = trim(dirname(requestVar('dir')));
\r
714 $directory = sfExpandDirectory ($directory);
\r
716 if (requestVar('sure') == 'yes')
\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
722 if (!@rmdir($directory . $file))
\r
724 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "«" . htmlspecialchars($file) . "»</p>";
\r
725 sfShowDirectory($directory);
\r
729 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";
\r
731 /* begin modification by katsumi */
\r
733 $d = dir($directory);
\r
734 while (false !== ($entry = $d->read())) {
\r
735 if ($entry!='.' && $entry!='..') $num++;
\r
738 if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('dir'))));
\r
739 /* end modification */
\r
741 sfShowDirectory($directory);
\r
745 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
\r
746 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
\r
752 sfShowDirectory($directory);
\r
759 /* Empty directory ***************************************************************************************************************/
\r
761 function _skinfiles_emptydir() {
\r
763 global $pluginUrl, $manager;
\r
765 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
766 $directory = trim(dirname(requestVar('dir')));
\r
767 $directory = sfExpandDirectory ($directory);
\r
769 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
\r
773 if ($dh = @opendir($directory . $file))
\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
786 $relative = sfRelativePath ($directory);
\r
787 $emptyUrl = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));
\r
789 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
790 echo '<a href="' . htmlspecialchars($emptyUrl) . '" title="Empty «' . $file . '»">';
\r
791 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
\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
799 echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' «' . htmlspecialchars($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';
\r
801 if (count($files))
\r
804 foreach ($files as $name) { echo '<li>' . htmlspecialchars($name) . '</li>'; }
\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
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
821 echo '</div></form></div>';
\r
826 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
\r
827 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
\r
831 function _skinfiles_emptydir_process() {
\r
833 global $pluginUrl, $manager;
\r
835 $file = trim(_skinfikes_basename(requestVar('dir')));
\r
836 $directory = trim(dirname(requestVar('dir')));
\r
837 $directory = sfExpandDirectory ($directory);
\r
839 if (requestVar('sure') == 'yes')
\r
841 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
\r
843 if ($dh = @opendir($directory . $file))
\r
845 while (($name = readdir($dh)) !== false)
\r
847 if(!preg_match("/^\.{1,2}$/", $name) && !is_dir($directory . $file . '/' . $name) &&
\r
848 is_writable($directory . $file . '/' . $name))
\r
850 if (unlink ($directory .$file . '/' . $name))
\r
851 echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";
\r
853 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";
\r
859 sfShowDirectory($directory . $file . '/');
\r
864 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6;
\r
865 echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";
\r
871 sfShowDirectory($directory . $file . '/');
\r
878 /* Download file *****************************************************************************************************************/
\r
880 function _skinfiles_download() {
\r
882 global $pluginUrl, $manager;
\r
884 $file = _skinfikes_basename(trim(requestVar('file')));
\r
886 $directory = dirname(trim(requestVar('file')));
\r
887 $directory = sfExpandDirectory ($directory);
\r
889 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
890 is_file($directory . $file) && is_readable($directory . $file))
\r
892 if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))
\r
893 $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
\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
910 echo _SKINFILES_ERR_DOWNLOAD_FILE1;
\r
915 echo _SKINFILES_ERR_DOWNLOAD_FILE2;
\r
924 /* View file *********************************************************************************************************************/
\r
926 function _skinfiles_viewfile() {
\r
928 global $pluginUrl, $manager;
\r
930 $file = _skinfikes_basename(trim(requestVar('file')));
\r
931 $directory = dirname(trim(requestVar('file')));
\r
932 $directory = sfExpandDirectory ($directory);
\r
934 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
935 is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file))
\r
937 $relative = sfRelativePath ($directory);
\r
938 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
\r
940 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
941 echo '<a href="' . htmlspecialchars($viewUrl) . '" title="View «' . $file . '»">';
\r
942 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
\r
944 echo '<h4>' . _SKINFILES_VIEW_FILE . '«' . htmlspecialchars($file) . '»</h4>';
\r
946 if (sfIsFileType('html', $file))
\r
948 echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';
\r
951 if (sfIsFileType('text', $file))
\r
953 $content = implode('', file($directory . $file));
\r
956 echo htmlspecialchars($content);
\r
960 if (sfIsFileType('img', $file))
\r
962 $size = getimagesize($directory . $file, $info);
\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
984 if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||
\r
985 $size[2] == IMAGETYPE_PNG)
\r
987 echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';
\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
996 if (isset($size['channels']) || isset($size['bits']))
\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
1006 if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG ||
\r
1007 $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))
\r
1009 $exif = exif_read_data($directory . $file, 'EXIF');
\r
1013 echo '<tr><th colspan="2">Exif information</th></tr>';
\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
1018 if (isset($exif['DateTime']))
\r
1019 echo '<tr><td>Created on:</td><td>' . htmlspecialchars($exif['DateTime']) . '</td></tr>';
\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
1024 if (isset($exif['YResolution']))
\r
1025 echo '<tr><td>Vertical resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';
\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
1030 if (isset($exif['FNumber']))
\r
1031 echo '<tr><td>F-number:</td><td>F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';
\r
1033 if (isset($exif['ExposureTime']))
\r
1034 echo '<tr><td>Exposuretime:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';
\r
1036 if (isset($exif['ISOSpeedRatings']))
\r
1037 echo '<tr><td>ISO-speed:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';
\r
1046 echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_VIEW_FILE2;
\r
1047 echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";
\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
1056 return round($matches[1] / $matches[2]);
\r
1064 /* Edit file *********************************************************************************************************************/
\r
1066 function _skinfiles_editfile() {
\r
1068 global $pluginUrl, $manager;
\r
1070 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1071 $directory = dirname(trim(requestVar('file')));
\r
1072 $directory = sfExpandDirectory ($directory);
\r
1074 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1075 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
\r
1077 $relative = sfRelativePath ($directory);
\r
1078 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
\r
1080 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
1081 echo '<a href="' . htmlspecialchars($editUrl) . '" title="Edit «' . $file . '»">';
\r
1082 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
\r
1084 $content = implode('', file($directory . $file));
\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
1092 echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' «' . htmlspecialchars($file) . '»</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
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
1102 echo '</div></form></div>';
\r
1106 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
\r
1107 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
\r
1111 function _skinfiles_editfile_process() {
\r
1113 $skinfiles = $manager->getPlugin('NP_SkinFiles');
\r
1114 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1115 $directory = dirname(trim(requestVar('file')));
\r
1116 $directory = sfExpandDirectory ($directory);
\r
1118 if (requestVar('sure') == 'yes')
\r
1120 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1121 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
\r
1123 if ($skinfiles->getOption('generate_backup') == 'yes')
\r
1125 copy($directory . $file, $directory . $skinfiles->getOption('backup_prefix') . $file);
\r
1127 $content = postVar('content');
\r
1129 if ($fh = @fopen($directory . $file, 'wb')) {
\r
1131 if (@fwrite($fh, $content) !== false)
\r
1138 echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";
\r
1140 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";
\r
1142 /* begin modification by katsumi */
\r
1143 if ($success && strlen($content)==0) {
\r
1144 _skinfiles_delbutton('file',trim(requestVar('file')));
\r
1146 /* end modification */
\r
1147 _skinfiles_editfile();
\r
1151 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
\r
1152 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
\r
1158 sfShowDirectory($directory);
\r
1164 /* Rename file *******************************************************************************************************************/
\r
1166 function _skinfiles_renfile($preset = '') {
\r
1168 global $pluginUrl, $manager;
\r
1170 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1171 $directory = dirname(trim(requestVar('file')));
\r
1172 $directory = sfExpandDirectory ($directory);
\r
1174 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1175 is_file($directory . $file) && is_writable($directory . $file))
\r
1177 $relative = sfRelativePath ($directory);
\r
1178 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
\r
1180 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
1181 echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
\r
1182 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
\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
1190 echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '«' . htmlspecialchars($file) . '» ' . _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
1197 echo '</div></form></div>';
\r
1201 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
\r
1202 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
\r
1206 function _skinfiles_renfile_process() {
\r
1208 global $pluginUrl, $manager;
\r
1210 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1211 $directory = dirname(trim(requestVar('file')));
\r
1212 $directory = sfExpandDirectory ($directory);
\r
1214 if (requestVar('sure') == 'yes')
\r
1216 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1217 is_file($directory . $file) && is_writable($directory . $file))
\r
1219 $name = requestVar('name');
\r
1221 if ($name == '') {
\r
1222 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "«" . htmlspecialchars($file) . "» ";
\r
1223 echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";
\r
1224 _skinfiles_renfile($name);
\r
1228 if (sfIllegalFilename($name)) {
\r
1229 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "«" . htmlspecialchars($file) . "» ";
\r
1230 echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";
\r
1231 _skinfiles_renfile($name);
\r
1235 if ($name == $file) {
\r
1236 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "«" . htmlspecialchars($file) . "» ";
\r
1237 echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";
\r
1238 _skinfiles_renfile($name);
\r
1242 if (file_exists($directory . $name)) {
\r
1243 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "«" . htmlspecialchars($file) . "» ";
\r
1244 echo _SKINFILES_ERR_RENAME_FILE11;
\r
1245 echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";
\r
1246 _skinfiles_renfile($name);
\r
1250 if (!@rename($directory . $file, $directory . $name))
\r
1252 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";
\r
1253 _skinfiles_renfile($name);
\r
1257 echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE16;
\r
1258 echo _SKINFILES_ERR_RENAME_FILE17 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";
\r
1259 sfShowDirectory($directory);
\r
1263 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
\r
1264 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
\r
1270 sfShowDirectory($directory);
\r
1277 /* Create file *******************************************************************************************************************/
\r
1279 function _skinfiles_createfile() {
\r
1281 $directory = trim(requestVar('dir'));
\r
1282 $directory = sfExpandDirectory($directory);
\r
1284 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
\r
1286 $name = requestVar('name');
\r
1288 if ($name == '') {
\r
1289 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";
\r
1290 sfShowDirectory($directory);
\r
1294 if (sfIllegalFilename($name)) {
\r
1295 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "«" . htmlspecialchars($name) . "» ";
\r
1296 echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";
\r
1297 sfShowDirectory($directory);
\r
1301 if (file_exists($directory . $name)) {
\r
1302 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "«" . htmlspecialchars($name) . "» ";
\r
1303 echo _SKINFILES_ERR_CREATE_FILE5;
\r
1304 echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";
\r
1305 sfShowDirectory($directory);
\r
1309 if (!@touch($directory . $name))
\r
1311 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";
\r
1312 sfShowDirectory($directory);
\r
1316 $mask = @umask(0000);
\r
1317 @chmod($directory . $name, 0755);
\r
1320 echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";
\r
1321 sfShowDirectory($directory);
\r
1325 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "«" . htmlspecialchars(_skinfikes_basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12;
\r
1326 echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";
\r
1333 /* Delete file *******************************************************************************************************************/
\r
1335 function _skinfiles_delfile() {
\r
1337 global $pluginUrl, $manager;
\r
1339 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1340 $directory = dirname(trim(requestVar('file')));
\r
1341 $directory = sfExpandDirectory ($directory);
\r
1343 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1344 is_file($directory . $file) && is_writable($directory . $file))
\r
1346 $relative = sfRelativePath ($directory);
\r
1347 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
\r
1349 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
\r
1350 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
\r
1351 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
\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
1359 echo '<h4>' . _SKINFILES_DELETE_FILE . ' «' . htmlspecialchars($file) . '» ' . _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
1365 echo '</div></form></div>';
\r
1369 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
\r
1370 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
\r
1374 function _skinfiles_delfile_process() {
\r
1376 global $pluginUrl, $manager;
\r
1378 $file = _skinfikes_basename(trim(requestVar('file')));
\r
1379 $directory = dirname(trim(requestVar('file')));
\r
1380 $directory = sfExpandDirectory ($directory);
\r
1382 if (requestVar('sure') == 'yes')
\r
1384 if (sfValidPath($directory) && file_exists($directory . $file) &&
\r
1385 is_file($directory . $file) && is_writable($directory . $file))
\r
1387 if (!@unlink($directory . $file))
\r
1389 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "«" . htmlspecialchars($file) . "»</p>";
\r
1390 sfShowDirectory($directory);
\r
1394 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";
\r
1396 /* begin modification by katsumi */
\r
1398 $d = dir($directory);
\r
1399 while (false !== ($entry = $d->read())) {
\r
1400 if ($entry!='.' && $entry!='..') $num++;
\r
1403 if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('file'))));
\r
1404 /* end modification */
\r
1406 sfShowDirectory($directory);
\r
1410 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
\r
1411 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
\r
1417 sfShowDirectory($directory);
\r
1423 /* Upload file *******************************************************************************************************************/
\r
1425 function _skinfiles_uploadfile() {
\r
1427 global $pluginUrl, $manager, $CONF;
\r
1429 $directory = trim(requestVar('dir'));
\r
1430 $directory = sfExpandDirectory($directory);
\r
1432 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
\r
1434 $file = postFileInfo('name');
\r
1436 if ($file['size'] > $CONF['MaxUploadSize']) {
\r
1437 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _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
1444 if (!is_uploaded_file($file['tmp_name'])) {
\r
1445 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
\r
1446 sfShowDirectory($directory);
\r
1450 if (sfIllegalFilename($file['name'])) {
\r
1451 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . htmlspecialchars($file['name']) . "» ";
\r
1452 echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";
\r
1453 sfShowDirectory($directory);
\r
1457 if (file_exists($directory . $file['name'])) {
\r
1458 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";
\r
1459 sfShowDirectory($directory);
\r
1463 if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {
\r
1464 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
\r
1465 sfShowDirectory($directory);
\r
1468 $mask = @umask(0000);
\r
1469 @chmod($directory . $file['name'], 0755);
\r
1472 echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";
\r
1473 sfShowDirectory($directory);
\r
1477 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . htmlspecialchars(_skinfikes_basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10;
\r
1478 echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";
\r
1482 /* begin modification by katsumi */
\r
1483 /* Delete file/directory buttons when empty *******************************************************************************************************************/
\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
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
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
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
1505 /* end modification */
\r
1507 function _skinfikes_basename($name) {
\r
1508 if ((strtolower(_CHARSET) != 'utf-8') && function_exists('mb_convert_encoding')) {$name = mb_convert_encoding($name , "UTF-8" , _CHARSET);}
\r
1509 $name = str_replace('\\','/',$name); // Avoid using "\" in Windows.
\r
1510 $name = (function_exists('mb_split')) ? end(mb_split("/",$name)) : end(explode("/",$name));
\r
1511 if ((strtolower(_CHARSET) != 'utf-8') && function_exists('mb_convert_encoding')) {$name = mb_convert_encoding($name , _CHARSET , "UTF-8");}
\r