3 /* ==========================================================================================
4 * Nucleus SkinFiles Plugin
6 * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer
8 * @version $Id: index.php,v 1.7 2008-02-08 09:31:23 kimitake Exp $
9 * @version $NucleusJP: index.php,v 1.6.2.1 2007/09/07 07:08:01 kimitake Exp $
11 * ==========================================================================================
12 * This program is free software and open source software; you can redistribute
13 * it and/or modify it under the terms of the GNU General Public License as
14 * published by the Free Software Foundation; either version 2 of the License,
15 * or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
22 * You should have received a copy of the GNU General Public License along
23 * with this program; if not, write to the Free Software Foundation, Inc.,
24 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit
25 * http://www.gnu.org/licenses/gpl.html
26 * ==========================================================================================
29 $strRel = '../../../';
30 require($strRel . 'config.php');
31 include($DIR_LIBS . 'PLUGINADMIN.php');
33 $language = ereg_replace( '[\\|/]', '', getLanguageName());
34 $langfile = $language.'.php';
35 if (file_exists($langfile))
36 include_once($langfile);
38 include_once('english.php');
44 $oPluginAdmin = new PluginAdmin('SkinFiles');
46 if (!($member->isLoggedIn() && $member->isAdmin()))
48 $oPluginAdmin->start();
49 echo '<p>' . _ERROR_DISALLOWED . '</p>';
57 * Setup main variables
60 $rootDirectory = sfRealPath($DIR_SKINS);
61 $rootUrl = $CONF['SkinsURL'];
62 $pluginUrl = $oPluginAdmin->plugin->getAdminURL();
65 'text' => array ('inc', 'txt', 'css', 'js', 'php'),
66 'html' => array ('htm', 'html'),
67 'img' => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),
72 * Bypass admin area for downloads
75 $action = requestVar('action');
77 if ($action == 'download') {
78 _skinfiles_download();
87 $oPluginAdmin->start("<style type='text/css'>
91 text-decoration: none;
94 vertical-align: middle;
112 border: 1px solid gray;
115 border: 1px solid #ddd;
116 background-color: #F6F6F6;
117 margin: 18px 0 1.5em 0;
120 background-color: #bbc;
125 div.dialogbox h4.light {
126 background-color: #ddd;
132 div.dialogbox button {
133 margin: 10px 0 0 6px;
139 div.dialogbox p.buttons {
143 div.dialogbox textarea {
151 echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";
154 'renfile', 'renfile_process', 'delfile', 'delfile_process',
155 'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',
156 'rendir', 'rendir_process', 'deldir', 'deldir_process',
157 'emptydir', 'emptydir_process', 'createdir'
160 if (in_array($action, $actions))
162 if (!$manager->checkTicket())
164 echo '<p class="error">Error: ' . _ERROR_BADTICKET . '</p>';
170 call_user_func('_skinfiles_' . $action);
178 $oPluginAdmin->end();
187 /* Helper functions **************************************************************************************************************/
189 function sfExpandDirectory ($path) {
190 /* IN: relative directory
191 * OUT: full path to directory
194 global $rootDirectory;
195 return sfRealPath($rootDirectory . $path);
198 function sfRealPath ($path) {
200 * OUT: canonicalized absolute pathname
203 $path = realpath($path);
204 $path = str_replace('\\', '/', $path);
205 $path = substr($path, strlen($path) - 1) != '/' ? $path . '/' : $path;
209 function sfFullUrl ($path) {
210 /* IN: full path including filename
211 * OUT: url including filename
214 global $rootDirectory, $rootUrl;
216 $path = str_replace($rootDirectory, '', $path);
217 $path = rawurlencode($path);
218 $path = str_replace('%2F', '/', $path);
219 return $rootUrl . $path;
222 function sfValidPath ($path) {
223 /* IN: full path excluding or including filename
224 * OUT: boolean, true if full path is or is within rootDirectory
227 global $rootDirectory;
228 return substr($path, 0, strlen($rootDirectory)) == $rootDirectory;
231 function sfRelativePath ($path) {
232 /* IN: full path including or excluding filename
233 * OUT: relative path from rootDirectory
236 global $rootDirectory;
237 return str_replace($rootDirectory, '', $path);
240 function sfIsFileType ($type, $file) {
243 return isset($filetypes[$type]) && in_array(strtolower(substr(strrchr($file, "."), 1)), $filetypes[$type]);
246 function sfAllowEditing ($file) {
247 return sfIsFileType('html', $file) || sfIsFileType('text', $file);
250 function sfAllowViewing ($file) {
251 return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);
255 function sfDisplayPath ($relative) {
259 $result = '<a href="' . htmlspecialchars($pluginUrl) . '" title="Go back to «skins»">';
260 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';
262 $parts = explode('/', $relative);
265 while (list(,$v) = each ($parts)) {
269 $result .= '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';
270 $result .= 'title="Go back to «' . htmlspecialchars($v) . '»">';
271 $result .= '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="" /> ';
272 $result .= htmlspecialchars($v) . '</a> / ';
279 function sfIcon ($file) {
283 $ext = strtolower(substr(strrchr($file, "."), 1));
288 return $pluginUrl . 'html.gif';
295 return $pluginUrl . 'text.gif';
305 return $pluginUrl . 'image.gif';
311 return $pluginUrl . 'php.gif';
315 return $pluginUrl . 'generic.gif';
320 function sfIllegalFilename($name) {
321 return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);
324 function sfDirectoryIsEmpty($dir) {
328 if ($dh = opendir($dir))
330 while (($file = readdir($dh)) !== false)
336 // $count must be smaller or equal than 2, because '.'
337 // and '..' are always returned by readdir().
349 /* Show directory ****************************************************************************************************************/
351 function sfShowDirectory($default = '') {
353 global $pluginUrl, $rootDirectory, $CONF, $manager;
355 $directory = $default != '' ?
357 sfExpandDirectory(trim(requestVar('dir')));
359 if (!sfValidPath($directory) || !is_dir($directory)) {
360 $directory = $rootDirectory;
363 $relative = sfRelativePath ($directory);
365 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';
371 if ($dh = @opendir($directory)) {
372 while (($file = readdir($dh)) !== false) {
373 if (!preg_match("/^\.{1,2}$/", $file)) {
374 $fstat = @stat($directory . $file);
376 if ($fstat['mode'] & 040000)
377 $dirs[$file] = $fstat;
379 $files[$file] = $fstat;
388 echo '<table><thead><tr>';
389 echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';
390 echo '</tr></thead>';
392 while (list($name, $stat) = each($dirs)) {
394 $dir = sfRelativePath($directory . $name . '/');
396 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
398 if (is_readable ($directory . $name))
400 echo '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';
401 echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
402 echo htmlspecialchars($name).'</a>';
406 echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
407 echo htmlspecialchars($name);
412 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));
413 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));
415 echo '<td>–</td>';
416 echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
419 if (is_writable($directory . $name)) {
420 echo '<td><a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a></td>';
422 echo '<td> </td>';
425 if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {
426 echo '<td><a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a></td>';
428 echo '<td> </td>';
431 echo '<td> </td><td> </td>';
436 while (list($name, $stat) = each($files)) {
438 $file = sfRelativePath($directory . $name);
440 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode($file));
441 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode($file));
442 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));
443 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));
444 $dlUrl = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));
446 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
448 if (is_readable ($directory . $name) && sfAllowViewing($name))
450 echo '<a href="' . htmlspecialchars($viewUrl) . '">';
451 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
452 echo htmlspecialchars($name).'</a>';
456 echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
457 echo htmlspecialchars($name);
461 echo ceil($stat['size'] / 1024) . ' kB';
463 echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
466 if (is_writable($directory . $name)) {
467 echo '<a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a>';
474 if (is_writable($directory . $name)) {
475 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a>';
482 if (is_writable($directory . $name) && sfAllowEditing($name))
483 echo '<a href="'. htmlspecialchars($editUrl) . '" title="' . _SKINFILES_EDIT . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_EDIT . '</a>';
489 if (is_readable ($directory . $name))
490 echo '<a href="' . htmlspecialchars($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DOWNLOAD . '</a>';
497 if (!count($dirs) && !count($files)) {
498 echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';
503 if ($relative != '') {
505 if (is_writable($directory)) {
506 echo '<div class="dialogbox">';
507 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';
508 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
509 $manager->addTicketHidden();
510 echo '<input type="hidden" name="action" value="createfile" />';
511 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
512 echo '<input type="text" name="name" size="40" value="untitled.txt" />';
513 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';
516 echo '<div class="dialogbox">';
517 echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';
518 echo '<form method="post" enctype="multipart/form-data" action="' . htmlspecialchars($pluginUrl) . '">';
519 $manager->addTicketHidden();
520 echo '<input type="hidden" name="action" value="uploadfile" />';
521 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
522 echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';
523 echo '<input type="file" name="name" size="40" />';
524 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';
529 echo '<div class="dialogbox">';
530 echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';
531 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
532 $manager->addTicketHidden();
533 echo '<input type="hidden" name="action" value="emptydir" />';
534 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
535 echo _SKINFILES_DEL_ALL_FILES_MSG;
536 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';
542 if (is_writable($directory)) {
543 echo '<div class="dialogbox">';
544 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';
545 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
546 $manager->addTicketHidden();
547 echo '<input type="hidden" name="action" value="createdir" />';
548 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
549 echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';
550 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';
559 /* Rename directory **************************************************************************************************************/
561 function _skinfiles_rendir($preset = '') {
563 global $pluginUrl, $manager;
565 $file = trim(basename(requestVar('dir')));
566 $directory = trim(dirname(requestVar('dir')));
567 $directory = sfExpandDirectory ($directory);
569 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
570 is_dir($directory . $file) && is_writable($directory . $file))
572 $relative = sfRelativePath ($directory);
573 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));
575 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
576 echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
577 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
579 echo '<div class="dialogbox">';
580 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
581 $manager->addTicketHidden();
582 echo '<input type="hidden" name="action" value="rendir_process" />';
583 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
585 echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';
586 echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';
587 echo '<p class="buttons">';
588 echo '<input type="hidden" name="sure" value="yes" />';
589 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
590 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
592 echo '</div></form></div>';
596 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
597 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
601 function _skinfiles_rendir_process() {
603 global $pluginUrl, $manager;
605 $file = trim(basename(requestVar('dir')));
606 $directory = trim(dirname(requestVar('dir')));
607 $directory = sfExpandDirectory ($directory);
609 if (requestVar('sure') == 'yes')
611 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
612 is_dir($directory . $file) && is_writable($directory . $file))
614 $name = requestVar('name');
617 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . htmlspecialchars($file) . "» ";
618 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";
619 _skinfiles_rendir($name);
623 if (sfIllegalFilename($name)) {
624 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . htmlspecialchars($file) . "» ";
625 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";
626 _skinfiles_rendir($name);
630 if ($name == $file) {
631 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . htmlspecialchars($file) . "» ";
632 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";
633 _skinfiles_rendir($name);
637 if (file_exists($directory . $name)) {
638 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . htmlspecialchars($file) . "» ";
639 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";
640 _skinfiles_rendir($name);
644 if (!@rename($directory . $file, $directory . $name))
646 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . htmlspecialchars($file) . "»</p>";
647 _skinfiles_rendir($name);
651 echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_RENAMED_DIR2;
652 echo _SKINFILES_RENAMED_DIR3 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_RENAMED_DIR4 . "</p>";
653 sfShowDirectory($directory);
657 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
658 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
664 sfShowDirectory($directory);
671 /* Create directory **************************************************************************************************************/
673 function _skinfiles_createdir() {
675 $directory = trim(requestVar('dir'));
676 $directory = sfExpandDirectory($directory);
678 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
680 $name = requestVar('name');
683 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";
684 sfShowDirectory($directory);
688 if (sfIllegalFilename($name)) {
689 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "» ";
690 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";
691 sfShowDirectory($directory);
695 if (file_exists($directory . $name)) {
696 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . htmlspecialchars($name) . "» ";
697 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";
698 sfShowDirectory($directory);
702 $mask = @umask(0000);
704 if (!@mkdir($directory . $name, 0755))
706 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "»</p>";
707 sfShowDirectory($directory);
713 echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";
714 sfShowDirectory($directory);
718 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;
719 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";
726 /* Delete directory **************************************************************************************************************/
728 function _skinfiles_deldir() {
730 global $pluginUrl, $manager;
732 $file = trim(basename(requestVar('dir')));
733 $directory = trim(dirname(requestVar('dir')));
734 $directory = sfExpandDirectory ($directory);
736 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
737 is_dir($directory . $file) && is_writable($directory . $file) &&
738 sfDirectoryIsEmpty($directory . $file))
740 $relative = sfRelativePath ($directory);
741 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));
743 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
744 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
745 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
747 echo '<div class="dialogbox">';
748 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
749 $manager->addTicketHidden();
750 echo '<input type="hidden" name="action" value="deldir_process" />';
751 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
753 echo '<h4>' . _SKINFILES_DELETE_DIR . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';
754 echo '<p class="buttons">';
755 echo '<input type="hidden" name="sure" value="yes" />';
756 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
757 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
759 echo '</div></form></div>';
763 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
764 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
768 function _skinfiles_deldir_process() {
770 global $pluginUrl, $manager;
772 $file = trim(basename(requestVar('dir')));
773 $directory = trim(dirname(requestVar('dir')));
774 $directory = sfExpandDirectory ($directory);
776 if (requestVar('sure') == 'yes')
778 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
779 is_dir($directory . $file) && is_writable($directory . $file) &&
780 sfDirectoryIsEmpty($directory . $file))
782 if (!@rmdir($directory . $file))
784 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "«" . htmlspecialchars($file) . "»</p>";
785 sfShowDirectory($directory);
789 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";
790 sfShowDirectory($directory);
794 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
795 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
801 sfShowDirectory($directory);
808 /* Empty directory ***************************************************************************************************************/
810 function _skinfiles_emptydir() {
812 global $pluginUrl, $manager;
814 $file = trim(basename(requestVar('dir')));
815 $directory = trim(dirname(requestVar('dir')));
816 $directory = sfExpandDirectory ($directory);
818 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
822 if ($dh = @opendir($directory . $file))
824 while (($name = readdir($dh)) !== false) {
825 if(!preg_match("/^\.{1,2}$/", $name) &&
826 !is_dir($directory . $file . '/' . $name) &&
827 is_writable($directory . $file . '/' . $name))
835 $relative = sfRelativePath ($directory);
836 $emptyUrl = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));
838 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
839 echo '<a href="' . htmlspecialchars($emptyUrl) . '" title="Empty «' . $file . '»">';
840 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
842 echo '<div class="dialogbox">';
843 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
844 $manager->addTicketHidden();
845 echo '<input type="hidden" name="action" value="emptydir_process" />';
846 echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
848 echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' «' . htmlspecialchars($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';
853 foreach ($files as $name) { echo '<li>' . htmlspecialchars($name) . '</li>'; }
856 echo '<p class="buttons">';
857 echo '<input type="hidden" name="sure" value="yes" />';
858 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
859 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
864 echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';
865 echo '<p class="buttons">';
866 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
870 echo '</div></form></div>';
875 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
876 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
880 function _skinfiles_emptydir_process() {
882 global $pluginUrl, $manager;
884 $file = trim(basename(requestVar('dir')));
885 $directory = trim(dirname(requestVar('dir')));
886 $directory = sfExpandDirectory ($directory);
888 if (requestVar('sure') == 'yes')
890 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
892 if ($dh = @opendir($directory . $file))
894 while (($name = readdir($dh)) !== false)
896 if(!preg_match("/^\.{1,2}$/", $name) && !is_dir($directory . $file . '/' . $name) &&
897 is_writable($directory . $file . '/' . $name))
899 if (unlink ($directory .$file . '/' . $name))
900 echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";
902 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";
908 sfShowDirectory($directory . $file . '/');
913 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6;
914 echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";
920 sfShowDirectory($directory . $file . '/');
927 /* Download file *****************************************************************************************************************/
929 function _skinfiles_download() {
931 global $pluginUrl, $manager;
933 $file = basename(trim(requestVar('file')));
935 $directory = dirname(trim(requestVar('file')));
936 $directory = sfExpandDirectory ($directory);
938 if (sfValidPath($directory) && file_exists($directory . $file) &&
939 is_file($directory . $file) && is_readable($directory . $file))
941 if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))
942 $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
946 if ($fp = @fopen($directory . $file, 'r')) {
947 header("Cache-Control: "); // leave blank to avoid IE errors
948 header("Pragma: "); // leave blank to avoid IE errors
949 header("Content-type: application/octet-stream");
950 header('Content-Disposition: attachment; filename="'.$name.'"');
951 header("Content-length: ".(string)(filesize($directory . $file)));
959 echo _SKINFILES_ERR_DOWNLOAD_FILE1;
964 echo _SKINFILES_ERR_DOWNLOAD_FILE2;
973 /* View file *********************************************************************************************************************/
975 function _skinfiles_viewfile() {
977 global $pluginUrl, $manager;
979 $file = basename(trim(requestVar('file')));
980 $directory = dirname(trim(requestVar('file')));
981 $directory = sfExpandDirectory ($directory);
983 if (sfValidPath($directory) && file_exists($directory . $file) &&
984 is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file))
986 $relative = sfRelativePath ($directory);
987 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
989 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
990 echo '<a href="' . htmlspecialchars($viewUrl) . '" title="View «' . $file . '»">';
991 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
993 echo '<h4>' . _SKINFILES_VIEW_FILE . '«' . htmlspecialchars($file) . '»</h4>';
995 if (sfIsFileType('html', $file))
997 echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';
1000 if (sfIsFileType('text', $file))
1002 $content = implode('', file($directory . $file));
1005 echo htmlspecialchars($content);
1009 if (sfIsFileType('img', $file))
1011 $size = getimagesize($directory . $file, $info);
1014 case IMAGETYPE_GIF: $type = 'GIF document'; break;
1015 case IMAGETYPE_JPEG: $type = 'JPEG photograph'; break;
1016 case IMAGETYPE_PNG: $type = 'PNG document'; break;
1017 case IMAGETYPE_SWF: $type = 'Flash animation'; break;
1018 case IMAGETYPE_PSD: $type = 'Photoshop document'; break;
1019 case IMAGETYPE_BMP: $type = 'BMP document'; break;
1020 case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;
1021 case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;
1022 case IMAGETYPE_JPC: $type = 'JPEG2000 photograph'; break;
1023 case IMAGETYPE_JP2: $type = 'JPEG2000 photograph'; break;
1024 case IMAGETYPE_JPX: $type = 'JPEG2000 photograph'; break;
1025 case IMAGETYPE_JB2: $type = 'Slowview document'; break;
1026 case IMAGETYPE_SWC: $type = 'Flash animation (compressed)'; break;
1027 case IMAGETYPE_IFF: $type = 'IFF document'; break;
1028 case IMAGETYPE_WBMP: $type = 'WBMP document'; break;
1029 case IMAGETYPE_XBM: $type = 'XBM document'; break;
1030 default: $type = 'Unknown document'; break;
1033 if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||
1034 $size[2] == IMAGETYPE_PNG)
1036 echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';
1040 echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';
1041 echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . htmlspecialchars($type) . '</td></tr>';
1042 echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . htmlspecialchars($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1043 echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . htmlspecialchars($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1045 if (isset($size['channels']) || isset($size['bits']))
1047 $channels = isset($size['channels']) ? $size['channels'] : 3;
1048 $depth = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;
1049 echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . htmlspecialchars($channels) . '</td></tr>';
1050 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . htmlspecialchars($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';
1051 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . htmlspecialchars(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';
1055 if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG ||
1056 $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))
1058 $exif = exif_read_data($directory . $file, 'EXIF');
1062 echo '<tr><th colspan="2">Exif information</th></tr>';
1064 if (isset($exif['Make']) && isset($exif['Model']))
1065 echo '<tr><td>Camera:</td><td>' . htmlspecialchars($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';
1067 if (isset($exif['DateTime']))
1068 echo '<tr><td>Created on:</td><td>' . htmlspecialchars($exif['DateTime']) . '</td></tr>';
1070 if (isset($exif['XResolution']))
1071 echo '<tr><td>Horizontal resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';
1073 if (isset($exif['YResolution']))
1074 echo '<tr><td>Vertical resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';
1076 if (isset($exif['FocalLength']))
1077 echo '<tr><td>Focal length:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';
1079 if (isset($exif['FNumber']))
1080 echo '<tr><td>F-number:</td><td>F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';
1082 if (isset($exif['ExposureTime']))
1083 echo '<tr><td>Exposuretime:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';
1085 if (isset($exif['ISOSpeedRatings']))
1086 echo '<tr><td>ISO-speed:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';
1095 echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_VIEW_FILE2;
1096 echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";
1100 function _skinfiles_exif_prepare($value) {
1101 if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))
1102 if ($matches[1] < $matches[2])
1103 return '1/' . round($matches[2] / $matches[1]);
1105 return round($matches[1] / $matches[2]);
1113 /* Edit file *********************************************************************************************************************/
1115 function _skinfiles_editfile() {
1117 global $pluginUrl, $manager;
1119 $file = basename(trim(requestVar('file')));
1120 $directory = dirname(trim(requestVar('file')));
1121 $directory = sfExpandDirectory ($directory);
1123 if (sfValidPath($directory) && file_exists($directory . $file) &&
1124 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1126 $relative = sfRelativePath ($directory);
1127 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1129 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1130 echo '<a href="' . htmlspecialchars($editUrl) . '" title="Edit «' . $file . '»">';
1131 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1133 $content = implode('', file($directory . $file));
1135 echo '<div class="dialogbox">';
1136 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
1137 $manager->addTicketHidden();
1138 echo '<input type="hidden" name="action" value="editfile_process" />';
1139 echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
1141 echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' «' . htmlspecialchars($file) . '»</h4><div>';
1142 echo '<p><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';
1143 echo htmlspecialchars($content);
1144 echo '</textarea></p>';
1146 echo '<p class="buttons">';
1147 echo '<input type="hidden" name="sure" value="yes" /">';
1148 echo '<input type="submit" value="' . _SKINFILES_SAVE_CHANGES . '" />';
1149 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1151 echo '</div></form></div>';
1155 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1156 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1160 function _skinfiles_editfile_process() {
1162 $file = basename(trim(requestVar('file')));
1163 $directory = dirname(trim(requestVar('file')));
1164 $directory = sfExpandDirectory ($directory);
1166 if (requestVar('sure') == 'yes')
1168 if (sfValidPath($directory) && file_exists($directory . $file) &&
1169 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1171 $content = postVar('content');
1174 if ($fh = @fopen($directory . $file, 'wb')) {
1176 if (@fwrite($fh, $content) !== false)
1183 echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";
1185 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";
1187 _skinfiles_editfile();
1191 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1192 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1198 sfShowDirectory($directory);
1204 /* Rename file *******************************************************************************************************************/
1206 function _skinfiles_renfile($preset = '') {
1208 global $pluginUrl, $manager;
1210 $file = basename(trim(requestVar('file')));
1211 $directory = dirname(trim(requestVar('file')));
1212 $directory = sfExpandDirectory ($directory);
1214 if (sfValidPath($directory) && file_exists($directory . $file) &&
1215 is_file($directory . $file) && is_writable($directory . $file))
1217 $relative = sfRelativePath ($directory);
1218 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1220 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1221 echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
1222 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1224 echo '<div class="dialogbox">';
1225 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
1226 $manager->addTicketHidden();
1227 echo '<input type="hidden" name="action" value="renfile_process" />';
1228 echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
1230 echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '«' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';
1231 echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';
1232 echo '<p class="buttons">';
1233 echo '<input type="hidden" name="sure" value="yes" /">';
1234 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
1235 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1237 echo '</div></form></div>';
1241 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1242 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1246 function _skinfiles_renfile_process() {
1248 global $pluginUrl, $manager;
1250 $file = basename(trim(requestVar('file')));
1251 $directory = dirname(trim(requestVar('file')));
1252 $directory = sfExpandDirectory ($directory);
1254 if (requestVar('sure') == 'yes')
1256 if (sfValidPath($directory) && file_exists($directory . $file) &&
1257 is_file($directory . $file) && is_writable($directory . $file))
1259 $name = requestVar('name');
1262 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "«" . htmlspecialchars($file) . "» ";
1263 echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";
1264 _skinfiles_renfile($name);
1268 if (sfIllegalFilename($name)) {
1269 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "«" . htmlspecialchars($file) . "» ";
1270 echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";
1271 _skinfiles_renfile($name);
1275 if ($name == $file) {
1276 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "«" . htmlspecialchars($file) . "» ";
1277 echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";
1278 _skinfiles_renfile($name);
1282 if (file_exists($directory . $name)) {
1283 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "«" . htmlspecialchars($file) . "» ";
1284 echo _SKINFILES_ERR_RENAME_FILE11;
1285 echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";
1286 _skinfiles_renfile($name);
1290 if (!@rename($directory . $file, $directory . $name))
1292 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";
1293 _skinfiles_renfile($name);
1297 echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE16;
1298 echo _SKINFILES_ERR_RENAME_FILE17 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";
1299 sfShowDirectory($directory);
1303 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1304 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1310 sfShowDirectory($directory);
1317 /* Create file *******************************************************************************************************************/
1319 function _skinfiles_createfile() {
1321 $directory = trim(requestVar('dir'));
1322 $directory = sfExpandDirectory($directory);
1324 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1326 $name = requestVar('name');
1329 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";
1330 sfShowDirectory($directory);
1334 if (sfIllegalFilename($name)) {
1335 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "«" . htmlspecialchars($name) . "» ";
1336 echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";
1337 sfShowDirectory($directory);
1341 if (file_exists($directory . $name)) {
1342 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "«" . htmlspecialchars($name) . "» ";
1343 echo _SKINFILES_ERR_CREATE_FILE5;
1344 echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";
1345 sfShowDirectory($directory);
1349 if (!@touch($directory . $name))
1351 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";
1352 sfShowDirectory($directory);
1356 $mask = @umask(0000);
1357 @chmod($directory . $name, 0755);
1360 echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";
1361 sfShowDirectory($directory);
1365 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12;
1366 echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";
1373 /* Delete file *******************************************************************************************************************/
1375 function _skinfiles_delfile() {
1377 global $pluginUrl, $manager;
1379 $file = basename(trim(requestVar('file')));
1380 $directory = dirname(trim(requestVar('file')));
1381 $directory = sfExpandDirectory ($directory);
1383 if (sfValidPath($directory) && file_exists($directory . $file) &&
1384 is_file($directory . $file) && is_writable($directory . $file))
1386 $relative = sfRelativePath ($directory);
1387 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1389 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1390 echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
1391 echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1393 echo '<div class="dialogbox">';
1394 echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
1395 $manager->addTicketHidden();
1396 echo '<input type="hidden" name="action" value="delfile_process" />';
1397 echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
1399 echo '<h4>' . _SKINFILES_DELETE_FILE . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';
1400 echo '<p class="buttons">';
1401 echo '<input type="hidden" name="sure" value="yes" />';
1402 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
1403 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1405 echo '</div></form></div>';
1409 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1410 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1414 function _skinfiles_delfile_process() {
1416 global $pluginUrl, $manager;
1418 $file = basename(trim(requestVar('file')));
1419 $directory = dirname(trim(requestVar('file')));
1420 $directory = sfExpandDirectory ($directory);
1422 if (requestVar('sure') == 'yes')
1424 if (sfValidPath($directory) && file_exists($directory . $file) &&
1425 is_file($directory . $file) && is_writable($directory . $file))
1427 if (!@unlink($directory . $file))
1429 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "«" . htmlspecialchars($file) . "»</p>";
1430 sfShowDirectory($directory);
1434 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";
1435 sfShowDirectory($directory);
1439 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1440 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1446 sfShowDirectory($directory);
1452 /* Upload file *******************************************************************************************************************/
1454 function _skinfiles_uploadfile() {
1456 global $pluginUrl, $manager, $CONF;
1458 $directory = trim(requestVar('dir'));
1459 $directory = sfExpandDirectory($directory);
1461 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1463 $file = postFileInfo('name');
1465 if ($file['size'] > $CONF['MaxUploadSize']) {
1466 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";
1467 echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";
1468 echo $file['size'] . " bytes</p>";
1469 sfShowDirectory($directory);
1473 if (!is_uploaded_file($file['tmp_name'])) {
1474 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1475 sfShowDirectory($directory);
1479 if (sfIllegalFilename($file['name'])) {
1480 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . htmlspecialchars($file['name']) . "» ";
1481 echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";
1482 sfShowDirectory($directory);
1486 if (file_exists($directory . $file['name'])) {
1487 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";
1488 sfShowDirectory($directory);
1492 if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {
1493 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1494 sfShowDirectory($directory);
1497 $mask = @umask(0000);
1498 @chmod($directory . $file['name'], 0755);
1501 echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";
1502 sfShowDirectory($directory);
1506 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10;
1507 echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";