3 /* ==========================================================================================
4 * Nucleus SkinFiles Plugin
6 * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer
8 * @version $Id: index.php 1624 2012-01-09 11:36:20Z sakamocchi $
9 * @version $NucleusJP: index.php,v 1.5.2.1 2005/08/25 07:04:13 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_libs('PLUGINADMIN.php');
33 //$language = ereg_replace( '[\\|/]', '', getLanguageName());
34 $language = preg_replace( '#[\\|/]#', '', getLanguageName());
35 $langfile = $language.'.php';
36 if (file_exists($langfile))
37 include_once($langfile);
39 include_once('english.php');
45 $oPluginAdmin = new PluginAdmin('SkinFiles');
47 if (!($member->isLoggedIn() && $member->isAdmin()))
49 $oPluginAdmin->start();
50 echo '<p>' . _ERROR_DISALLOWED . '</p>';
58 * Setup main variables
61 $rootDirectory = sfRealPath($DIR_SKINS);
62 $rootUrl = $CONF['SkinsURL'];
63 $pluginUrl = $oPluginAdmin->plugin->getAdminURL();
66 'text' => array ('inc', 'txt', 'css', 'js', 'php'),
67 'html' => array ('htm', 'html'),
68 'img' => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),
73 * Bypass admin area for downloads
76 $action = requestVar('action');
78 if ($action == 'download') {
79 _skinfiles_download();
88 $oPluginAdmin->start("<style type='text/css'>
92 text-decoration: none;
95 vertical-align: middle;
113 border: 1px solid gray;
116 border: 1px solid #ddd;
117 background-color: #F6F6F6;
118 margin: 18px 0 1.5em 0;
121 background-color: #bbc;
126 div.dialogbox h4.light {
127 background-color: #ddd;
133 div.dialogbox button {
134 margin: 10px 0 0 6px;
140 div.dialogbox p.buttons {
144 div.dialogbox textarea {
152 echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";
155 'renfile', 'renfile_process', 'delfile', 'delfile_process',
156 'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',
157 'rendir', 'rendir_process', 'deldir', 'deldir_process',
158 'emptydir', 'emptydir_process', 'createdir'
161 if (in_array($action, $actions))
163 if (!$manager->checkTicket())
165 echo '<p class="error">Error: ' . _ERROR_BADTICKET . '</p>';
171 call_user_func('_skinfiles_' . $action);
179 $oPluginAdmin->end();
188 /* Helper functions **************************************************************************************************************/
190 function sfExpandDirectory ($path) {
191 /* IN: relative directory
192 * OUT: full path to directory
195 global $rootDirectory;
196 return sfRealPath($rootDirectory . $path);
199 function sfRealPath ($path) {
201 * OUT: canonicalized absolute pathname
204 $path = realpath($path);
205 $path = str_replace('\\', '/', $path);
206 $path = i18n::substr($path, i18n::strlen($path) - 1) != '/' ? $path . '/' : $path;
210 function sfFullUrl ($path) {
211 /* IN: full path including filename
212 * OUT: url including filename
215 global $rootDirectory, $rootUrl;
217 $path = str_replace($rootDirectory, '', $path);
218 $path = rawurlencode($path);
219 $path = str_replace('%2F', '/', $path);
220 return $rootUrl . $path;
223 function sfValidPath ($path) {
224 /* IN: full path excluding or including filename
225 * OUT: boolean, true if full path is or is within rootDirectory
228 global $rootDirectory;
229 return i18n::substr($path, 0, i18n::strlen($rootDirectory)) == $rootDirectory;
232 function sfRelativePath ($path) {
233 /* IN: full path including or excluding filename
234 * OUT: relative path from rootDirectory
237 global $rootDirectory;
238 return str_replace($rootDirectory, '', $path);
241 function sfIsFileType ($type, $file) {
244 return isset($filetypes[$type]) && in_array(strtolower(i18n::substr(strrchr($file, "."), 1)), $filetypes[$type]);
247 function sfAllowEditing ($file) {
248 return sfIsFileType('html', $file) || sfIsFileType('text', $file);
251 function sfAllowViewing ($file) {
252 return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);
256 function sfDisplayPath ($relative) {
260 $result = '<a href="' . i18n::hsc($pluginUrl) . '" title="Go back to «skins»">';
261 $result .= '<img src="' . i18n::hsc($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';
263 $parts = i18n::explode('/', $relative);
266 while (list(,$v) = each ($parts)) {
270 $result .= '<a href="' . i18n::hsc($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';
271 $result .= 'title="Go back to «' . i18n::hsc($v) . '»">';
272 $result .= '<img src="' . i18n::hsc($pluginUrl . 'dir.gif') . '" alt="" /> ';
273 $result .= i18n::hsc($v) . '</a> / ';
280 function sfIcon ($file) {
284 $ext = strtolower(i18n::substr(strrchr($file, "."), 1));
289 return $pluginUrl . 'html.gif';
296 return $pluginUrl . 'text.gif';
306 return $pluginUrl . 'image.gif';
312 return $pluginUrl . 'php.gif';
316 return $pluginUrl . 'generic.gif';
321 function sfIllegalFilename($name) {
322 return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);
325 function sfDirectoryIsEmpty($dir) {
329 if ($dh = opendir($dir))
331 while (($file = readdir($dh)) !== false)
337 // $count must be smaller or equal than 2, because '.'
338 // and '..' are always returned by readdir().
350 /* Show directory ****************************************************************************************************************/
352 function sfShowDirectory($default = '') {
354 global $pluginUrl, $rootDirectory, $CONF, $manager;
356 $directory = $default != '' ?
358 sfExpandDirectory(trim(requestVar('dir')));
360 if (!sfValidPath($directory) || !is_dir($directory)) {
361 $directory = $rootDirectory;
364 $relative = sfRelativePath ($directory);
366 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';
372 if ($dh = @opendir($directory)) {
373 while (($file = readdir($dh)) !== false) {
374 if (!preg_match("/^\.{1,2}$/", $file)) {
375 $fstat = @stat($directory . $file);
377 if ($fstat['mode'] & 040000)
378 $dirs[$file] = $fstat;
380 $files[$file] = $fstat;
389 echo '<table><thead><tr>';
390 echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';
391 echo '</tr></thead>';
393 while (list($name, $stat) = each($dirs)) {
395 $dir = sfRelativePath($directory . $name . '/');
397 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
399 if (is_readable ($directory . $name))
401 echo '<a href="' . i18n::hsc($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';
402 echo '<img src="' . i18n::hsc($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
403 echo i18n::hsc($name).'</a>';
407 echo '<img src="' . i18n::hsc($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
408 echo i18n::hsc($name);
413 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));
414 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));
416 echo '<td>–</td>';
417 echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
420 if (is_writable($directory . $name)) {
421 echo '<td><a href="' . i18n::hsc($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_RENAME . '</a></td>';
423 echo '<td> </td>';
426 if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {
427 echo '<td><a href="' . i18n::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_DELETE . '</a></td>';
429 echo '<td> </td>';
432 echo '<td> </td><td> </td>';
437 while (list($name, $stat) = each($files)) {
439 $file = sfRelativePath($directory . $name);
441 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode($file));
442 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode($file));
443 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));
444 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));
445 $dlUrl = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));
447 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
449 if (is_readable ($directory . $name) && sfAllowViewing($name))
451 echo '<a href="' . i18n::hsc($viewUrl) . '">';
452 echo '<img src="' . i18n::hsc(sfIcon($name)) . '" alt="" /> ';
453 echo i18n::hsc($name).'</a>';
457 echo '<img src="' . i18n::hsc(sfIcon($name)) . '" alt="" /> ';
458 echo i18n::hsc($name);
462 echo ceil($stat['size'] / 1024) . ' kB';
464 echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
467 if (is_writable($directory . $name)) {
468 echo '<a href="' . i18n::hsc($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_RENAME . '</a>';
475 if (is_writable($directory . $name)) {
476 echo '<a href="' . i18n::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_DELETE . '</a>';
483 if (is_writable($directory . $name) && sfAllowEditing($name))
484 echo '<a href="'. i18n::hsc($editUrl) . '" title="' . _SKINFILES_EDIT . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_EDIT . '</a>';
490 if (is_readable ($directory . $name))
491 echo '<a href="' . i18n::hsc($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' «' . i18n::hsc($name) . '»">' . _SKINFILES_DOWNLOAD . '</a>';
498 if (!count($dirs) && !count($files)) {
499 echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';
504 if ($relative != '') {
506 if (is_writable($directory)) {
507 echo '<div class="dialogbox">';
508 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';
509 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
510 $manager->addTicketHidden();
511 echo '<input type="hidden" name="action" value="createfile" />';
512 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative) . '" />';
513 echo '<input type="text" name="name" size="40" value="untitled.txt" />';
514 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';
517 echo '<div class="dialogbox">';
518 echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';
519 echo '<form method="post" enctype="multipart/form-data" action="' . i18n::hsc($pluginUrl) . '">';
520 $manager->addTicketHidden();
521 echo '<input type="hidden" name="action" value="uploadfile" />';
522 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative) . '" />';
523 echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';
524 echo '<input type="file" name="name" size="40" />';
525 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';
530 echo '<div class="dialogbox">';
531 echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';
532 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
533 $manager->addTicketHidden();
534 echo '<input type="hidden" name="action" value="emptydir" />';
535 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative) . '" />';
536 echo _SKINFILES_DEL_ALL_FILES_MSG;
537 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';
543 if (is_writable($directory)) {
544 echo '<div class="dialogbox">';
545 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';
546 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
547 $manager->addTicketHidden();
548 echo '<input type="hidden" name="action" value="createdir" />';
549 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative) . '" />';
550 echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';
551 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';
560 /* Rename directory **************************************************************************************************************/
562 function _skinfiles_rendir($preset = '') {
564 global $pluginUrl, $manager;
566 $file = trim(basename(requestVar('dir')));
567 $directory = trim(dirname(requestVar('dir')));
568 $directory = sfExpandDirectory ($directory);
570 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
571 is_dir($directory . $file) && is_writable($directory . $file))
573 $relative = sfRelativePath ($directory);
574 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));
576 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
577 echo '<a href="' . i18n::hsc($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
578 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
580 echo '<div class="dialogbox">';
581 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
582 $manager->addTicketHidden();
583 echo '<input type="hidden" name="action" value="rendir_process" />';
584 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative . $file) . '" />';
586 echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' «' . i18n::hsc($file) . '» ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';
587 echo '<p><input type="text" name="name" size="40" value="' . i18n::hsc($preset != '' ? $preset : $file) . '" /></p>';
588 echo '<p class="buttons">';
589 echo '<input type="hidden" name="sure" value="yes" />';
590 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
591 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
593 echo '</div></form></div>';
597 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
598 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
602 function _skinfiles_rendir_process() {
604 global $pluginUrl, $manager;
606 $file = trim(basename(requestVar('dir')));
607 $directory = trim(dirname(requestVar('dir')));
608 $directory = sfExpandDirectory ($directory);
610 if (requestVar('sure') == 'yes')
612 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
613 is_dir($directory . $file) && is_writable($directory . $file))
615 $name = requestVar('name');
618 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . i18n::hsc($file) . "» ";
619 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";
620 _skinfiles_rendir($name);
624 if (sfIllegalFilename($name)) {
625 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . i18n::hsc($file) . "» ";
626 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";
627 _skinfiles_rendir($name);
631 if ($name == $file) {
632 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . i18n::hsc($file) . "» ";
633 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";
634 _skinfiles_rendir($name);
638 if (file_exists($directory . $name)) {
639 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . i18n::hsc($file) . "» ";
640 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";
641 _skinfiles_rendir($name);
645 if (!@rename($directory . $file, $directory . $name))
647 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . i18n::hsc($file) . "»</p>";
648 _skinfiles_rendir($name);
652 echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_RENAMED_DIR2;
653 echo _SKINFILES_RENAMED_DIR3 . "«" . i18n::hsc($name) . "»" . _SKINFILES_RENAMED_DIR4 . "</p>";
654 sfShowDirectory($directory);
658 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
659 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
665 sfShowDirectory($directory);
672 /* Create directory **************************************************************************************************************/
674 function _skinfiles_createdir() {
676 $directory = trim(requestVar('dir'));
677 $directory = sfExpandDirectory($directory);
679 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
681 $name = requestVar('name');
684 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";
685 sfShowDirectory($directory);
689 if (sfIllegalFilename($name)) {
690 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . i18n::hsc($name) . "» ";
691 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";
692 sfShowDirectory($directory);
696 if (file_exists($directory . $name)) {
697 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . i18n::hsc($name) . "» ";
698 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";
699 sfShowDirectory($directory);
703 $mask = @umask(0000);
705 if (!@mkdir($directory . $name, 0755))
707 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . i18n::hsc($name) . "»</p>";
708 sfShowDirectory($directory);
714 echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . i18n::hsc($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";
715 sfShowDirectory($directory);
719 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . i18n::hsc(basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;
720 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";
727 /* Delete directory **************************************************************************************************************/
729 function _skinfiles_deldir() {
731 global $pluginUrl, $manager;
733 $file = trim(basename(requestVar('dir')));
734 $directory = trim(dirname(requestVar('dir')));
735 $directory = sfExpandDirectory ($directory);
737 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
738 is_dir($directory . $file) && is_writable($directory . $file) &&
739 sfDirectoryIsEmpty($directory . $file))
741 $relative = sfRelativePath ($directory);
742 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));
744 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
745 echo '<a href="' . i18n::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
746 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
748 echo '<div class="dialogbox">';
749 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
750 $manager->addTicketHidden();
751 echo '<input type="hidden" name="action" value="deldir_process" />';
752 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative . $file) . '" />';
754 echo '<h4>' . _SKINFILES_DELETE_DIR . ' «' . i18n::hsc($file) . '» ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';
755 echo '<p class="buttons">';
756 echo '<input type="hidden" name="sure" value="yes" />';
757 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
758 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
760 echo '</div></form></div>';
764 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " «" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
765 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
769 function _skinfiles_deldir_process() {
771 global $pluginUrl, $manager;
773 $file = trim(basename(requestVar('dir')));
774 $directory = trim(dirname(requestVar('dir')));
775 $directory = sfExpandDirectory ($directory);
777 if (requestVar('sure') == 'yes')
779 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
780 is_dir($directory . $file) && is_writable($directory . $file) &&
781 sfDirectoryIsEmpty($directory . $file))
783 if (!@rmdir($directory . $file))
785 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "«" . i18n::hsc($file) . "»</p>";
786 sfShowDirectory($directory);
790 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";
791 sfShowDirectory($directory);
795 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
796 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
802 sfShowDirectory($directory);
809 /* Empty directory ***************************************************************************************************************/
811 function _skinfiles_emptydir() {
813 global $pluginUrl, $manager;
815 $file = trim(basename(requestVar('dir')));
816 $directory = trim(dirname(requestVar('dir')));
817 $directory = sfExpandDirectory ($directory);
819 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
823 if ($dh = @opendir($directory . $file))
825 while (($name = readdir($dh)) !== false) {
826 if(!preg_match("/^\.{1,2}$/", $name) &&
827 !is_dir($directory . $file . '/' . $name) &&
828 is_writable($directory . $file . '/' . $name))
836 $relative = sfRelativePath ($directory);
837 $emptyUrl = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));
839 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
840 echo '<a href="' . i18n::hsc($emptyUrl) . '" title="Empty «' . $file . '»">';
841 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
843 echo '<div class="dialogbox">';
844 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
845 $manager->addTicketHidden();
846 echo '<input type="hidden" name="action" value="emptydir_process" />';
847 echo '<input type="hidden" name="dir" value="' . i18n::hsc($relative . $file) . '" />';
849 echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' «' . i18n::hsc($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';
854 foreach ($files as $name) { echo '<li>' . i18n::hsc($name) . '</li>'; }
857 echo '<p class="buttons">';
858 echo '<input type="hidden" name="sure" value="yes" />';
859 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
860 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
865 echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';
866 echo '<p class="buttons">';
867 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
871 echo '</div></form></div>';
876 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
877 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
881 function _skinfiles_emptydir_process() {
883 global $pluginUrl, $manager;
885 $file = trim(basename(requestVar('dir')));
886 $directory = trim(dirname(requestVar('dir')));
887 $directory = sfExpandDirectory ($directory);
889 if (requestVar('sure') == 'yes')
891 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
893 if ($dh = @opendir($directory . $file))
895 while (($name = readdir($dh)) !== false)
897 if(!preg_match("/^\.{1,2}$/", $name) && !is_dir($directory . $file . '/' . $name) &&
898 is_writable($directory . $file . '/' . $name))
900 if (unlink ($directory .$file . '/' . $name))
901 echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . i18n::hsc($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";
903 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . i18n::hsc($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";
909 sfShowDirectory($directory . $file . '/');
914 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6;
915 echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";
921 sfShowDirectory($directory . $file . '/');
928 /* Download file *****************************************************************************************************************/
930 function _skinfiles_download() {
932 global $pluginUrl, $manager;
934 $file = basename(trim(requestVar('file')));
936 $directory = dirname(trim(requestVar('file')));
937 $directory = sfExpandDirectory ($directory);
939 if (sfValidPath($directory) && file_exists($directory . $file) &&
940 is_file($directory . $file) && is_readable($directory . $file))
942 if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))
943 $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
947 if ($fp = @fopen($directory . $file, 'r')) {
948 header("Cache-Control: "); // leave blank to avoid IE errors
949 header("Pragma: "); // leave blank to avoid IE errors
950 header("Content-type: application/octet-stream");
951 header('Content-Disposition: attachment; filename="'.$name.'"');
952 header("Content-length: ".(string)(filesize($directory . $file)));
960 echo _SKINFILES_ERR_DOWNLOAD_FILE1;
965 echo _SKINFILES_ERR_DOWNLOAD_FILE2;
974 /* View file *********************************************************************************************************************/
976 function _skinfiles_viewfile() {
978 global $pluginUrl, $manager;
980 $file = basename(trim(requestVar('file')));
981 $directory = dirname(trim(requestVar('file')));
982 $directory = sfExpandDirectory ($directory);
984 if (sfValidPath($directory) && file_exists($directory . $file) &&
985 is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file))
987 $relative = sfRelativePath ($directory);
988 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
990 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
991 echo '<a href="' . i18n::hsc($viewUrl) . '" title="View «' . $file . '»">';
992 echo '<img src="' . i18n::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
994 echo '<h4>' . _SKINFILES_VIEW_FILE . '«' . i18n::hsc($file) . '»</h4>';
996 if (sfIsFileType('html', $file))
998 echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';
1001 if (sfIsFileType('text', $file))
1003 $content = implode('', file($directory . $file));
1006 echo i18n::hsc($content);
1010 if (sfIsFileType('img', $file))
1012 $size = getimagesize($directory . $file, $info);
1015 case IMAGETYPE_GIF: $type = 'GIF document'; break;
1016 case IMAGETYPE_JPEG: $type = 'JPEG photograph'; break;
1017 case IMAGETYPE_PNG: $type = 'PNG document'; break;
1018 case IMAGETYPE_SWF: $type = 'Flash animation'; break;
1019 case IMAGETYPE_PSD: $type = 'Photoshop document'; break;
1020 case IMAGETYPE_BMP: $type = 'BMP document'; break;
1021 case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;
1022 case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;
1023 case IMAGETYPE_JPC: $type = 'JPEG2000 photograph'; break;
1024 case IMAGETYPE_JP2: $type = 'JPEG2000 photograph'; break;
1025 case IMAGETYPE_JPX: $type = 'JPEG2000 photograph'; break;
1026 case IMAGETYPE_JB2: $type = 'Slowview document'; break;
1027 case IMAGETYPE_SWC: $type = 'Flash animation (compressed)'; break;
1028 case IMAGETYPE_IFF: $type = 'IFF document'; break;
1029 case IMAGETYPE_WBMP: $type = 'WBMP document'; break;
1030 case IMAGETYPE_XBM: $type = 'XBM document'; break;
1031 default: $type = 'Unknown document'; break;
1034 if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||
1035 $size[2] == IMAGETYPE_PNG)
1037 echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';
1041 echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';
1042 echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . i18n::hsc($type) . '</td></tr>';
1043 echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . i18n::hsc($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1044 echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . i18n::hsc($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1046 if (isset($size['channels']) || isset($size['bits']))
1048 $channels = isset($size['channels']) ? $size['channels'] : 3;
1049 $depth = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;
1050 echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . i18n::hsc($channels) . '</td></tr>';
1051 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . i18n::hsc($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';
1052 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . i18n::hsc(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';
1056 if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG ||
1057 $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))
1059 $exif = exif_read_data($directory . $file, 'EXIF');
1063 echo '<tr><th colspan="2">Exif information</th></tr>';
1065 if (isset($exif['Make']) && isset($exif['Model']))
1066 echo '<tr><td>Camera:</td><td>' . i18n::hsc($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';
1068 if (isset($exif['DateTime']))
1069 echo '<tr><td>Created on:</td><td>' . i18n::hsc($exif['DateTime']) . '</td></tr>';
1071 if (isset($exif['XResolution']))
1072 echo '<tr><td>Horizontal resolution:</td><td>' . i18n::hsc(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';
1074 if (isset($exif['YResolution']))
1075 echo '<tr><td>Vertical resolution:</td><td>' . i18n::hsc(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';
1077 if (isset($exif['FocalLength']))
1078 echo '<tr><td>Focal length:</td><td>' . i18n::hsc(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';
1080 if (isset($exif['FNumber']))
1081 echo '<tr><td>F-number:</td><td>F/' . i18n::hsc(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';
1083 if (isset($exif['ExposureTime']))
1084 echo '<tr><td>Exposuretime:</td><td>' . i18n::hsc(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';
1086 if (isset($exif['ISOSpeedRatings']))
1087 echo '<tr><td>ISO-speed:</td><td>' . i18n::hsc(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';
1096 echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_VIEW_FILE2;
1097 echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";
1101 function _skinfiles_exif_prepare($value) {
1102 if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))
1103 if ($matches[1] < $matches[2])
1104 return '1/' . round($matches[2] / $matches[1]);
1106 return round($matches[1] / $matches[2]);
1114 /* Edit file *********************************************************************************************************************/
1116 function _skinfiles_editfile() {
1118 global $pluginUrl, $manager;
1120 $file = basename(trim(requestVar('file')));
1121 $directory = dirname(trim(requestVar('file')));
1122 $directory = sfExpandDirectory ($directory);
1124 if (sfValidPath($directory) && file_exists($directory . $file) &&
1125 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1127 $relative = sfRelativePath ($directory);
1128 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1130 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1131 echo '<a href="' . i18n::hsc($editUrl) . '" title="Edit «' . $file . '»">';
1132 echo '<img src="' . i18n::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1134 $content = implode('', file($directory . $file));
1136 echo '<div class="dialogbox">';
1137 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
1138 $manager->addTicketHidden();
1139 echo '<input type="hidden" name="action" value="editfile_process" />';
1140 echo '<input type="hidden" name="file" value="' . i18n::hsc(sfRelativePath($directory . $file)) . '" />';
1142 echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' «' . i18n::hsc($file) . '»</h4><div>';
1143 echo '<p><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';
1144 echo i18n::hsc($content);
1145 echo '</textarea></p>';
1147 echo '<p class="buttons">';
1148 echo '<input type="hidden" name="sure" value="yes" /">';
1149 echo '<input type="submit" value="' . _SKINFILES_SAVE_CHANGES . '" />';
1150 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1152 echo '</div></form></div>';
1156 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1157 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1161 function _skinfiles_editfile_process() {
1163 $file = basename(trim(requestVar('file')));
1164 $directory = dirname(trim(requestVar('file')));
1165 $directory = sfExpandDirectory ($directory);
1167 if (requestVar('sure') == 'yes')
1169 if (sfValidPath($directory) && file_exists($directory . $file) &&
1170 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1172 $content = postVar('content');
1175 if ($fh = @fopen($directory . $file, 'wb')) {
1177 if (@fwrite($fh, $content) !== false)
1184 echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";
1186 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";
1188 _skinfiles_editfile();
1192 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1193 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1199 sfShowDirectory($directory);
1205 /* Rename file *******************************************************************************************************************/
1207 function _skinfiles_renfile($preset = '') {
1209 global $pluginUrl, $manager;
1211 $file = basename(trim(requestVar('file')));
1212 $directory = dirname(trim(requestVar('file')));
1213 $directory = sfExpandDirectory ($directory);
1215 if (sfValidPath($directory) && file_exists($directory . $file) &&
1216 is_file($directory . $file) && is_writable($directory . $file))
1218 $relative = sfRelativePath ($directory);
1219 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1221 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1222 echo '<a href="' . i18n::hsc($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
1223 echo '<img src="' . i18n::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1225 echo '<div class="dialogbox">';
1226 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
1227 $manager->addTicketHidden();
1228 echo '<input type="hidden" name="action" value="renfile_process" />';
1229 echo '<input type="hidden" name="file" value="' . i18n::hsc(sfRelativePath($directory . $file)) . '" />';
1231 echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '«' . i18n::hsc($file) . '» ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';
1232 echo '<p><input type="text" name="name" size="40" value="' . i18n::hsc($preset != '' ? $preset : $file) . '" /></p>';
1233 echo '<p class="buttons">';
1234 echo '<input type="hidden" name="sure" value="yes" /">';
1235 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
1236 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1238 echo '</div></form></div>';
1242 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1243 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1247 function _skinfiles_renfile_process() {
1249 global $pluginUrl, $manager;
1251 $file = basename(trim(requestVar('file')));
1252 $directory = dirname(trim(requestVar('file')));
1253 $directory = sfExpandDirectory ($directory);
1255 if (requestVar('sure') == 'yes')
1257 if (sfValidPath($directory) && file_exists($directory . $file) &&
1258 is_file($directory . $file) && is_writable($directory . $file))
1260 $name = requestVar('name');
1263 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "«" . i18n::hsc($file) . "» ";
1264 echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";
1265 _skinfiles_renfile($name);
1269 if (sfIllegalFilename($name)) {
1270 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "«" . i18n::hsc($file) . "» ";
1271 echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";
1272 _skinfiles_renfile($name);
1276 if ($name == $file) {
1277 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "«" . i18n::hsc($file) . "» ";
1278 echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";
1279 _skinfiles_renfile($name);
1283 if (file_exists($directory . $name)) {
1284 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "«" . i18n::hsc($file) . "» ";
1285 echo _SKINFILES_ERR_RENAME_FILE11;
1286 echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";
1287 _skinfiles_renfile($name);
1291 if (!@rename($directory . $file, $directory . $name))
1293 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";
1294 _skinfiles_renfile($name);
1298 echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE16;
1299 echo _SKINFILES_ERR_RENAME_FILE17 . "«" . i18n::hsc($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";
1300 sfShowDirectory($directory);
1304 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1305 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1311 sfShowDirectory($directory);
1318 /* Create file *******************************************************************************************************************/
1320 function _skinfiles_createfile() {
1322 $directory = trim(requestVar('dir'));
1323 $directory = sfExpandDirectory($directory);
1325 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1327 $name = requestVar('name');
1330 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";
1331 sfShowDirectory($directory);
1335 if (sfIllegalFilename($name)) {
1336 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "«" . i18n::hsc($name) . "» ";
1337 echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";
1338 sfShowDirectory($directory);
1342 if (file_exists($directory . $name)) {
1343 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "«" . i18n::hsc($name) . "» ";
1344 echo _SKINFILES_ERR_CREATE_FILE5;
1345 echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";
1346 sfShowDirectory($directory);
1350 if (!@touch($directory . $name))
1352 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "«" . i18n::hsc($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";
1353 sfShowDirectory($directory);
1357 $mask = @umask(0000);
1358 @chmod($directory . $name, 0755);
1361 echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "«" . i18n::hsc($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";
1362 sfShowDirectory($directory);
1366 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "«" . i18n::hsc(basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12;
1367 echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";
1374 /* Delete file *******************************************************************************************************************/
1376 function _skinfiles_delfile() {
1378 global $pluginUrl, $manager;
1380 $file = basename(trim(requestVar('file')));
1381 $directory = dirname(trim(requestVar('file')));
1382 $directory = sfExpandDirectory ($directory);
1384 if (sfValidPath($directory) && file_exists($directory . $file) &&
1385 is_file($directory . $file) && is_writable($directory . $file))
1387 $relative = sfRelativePath ($directory);
1388 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1390 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1391 echo '<a href="' . i18n::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
1392 echo '<img src="' . i18n::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1394 echo '<div class="dialogbox">';
1395 echo '<form method="post" action="' . i18n::hsc($pluginUrl) . '">';
1396 $manager->addTicketHidden();
1397 echo '<input type="hidden" name="action" value="delfile_process" />';
1398 echo '<input type="hidden" name="file" value="' . i18n::hsc(sfRelativePath($directory . $file)) . '" />';
1400 echo '<h4>' . _SKINFILES_DELETE_FILE . ' «' . i18n::hsc($file) . '» ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';
1401 echo '<p class="buttons">';
1402 echo '<input type="hidden" name="sure" value="yes" />';
1403 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
1404 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1406 echo '</div></form></div>';
1410 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1411 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1415 function _skinfiles_delfile_process() {
1417 global $pluginUrl, $manager;
1419 $file = basename(trim(requestVar('file')));
1420 $directory = dirname(trim(requestVar('file')));
1421 $directory = sfExpandDirectory ($directory);
1423 if (requestVar('sure') == 'yes')
1425 if (sfValidPath($directory) && file_exists($directory . $file) &&
1426 is_file($directory . $file) && is_writable($directory . $file))
1428 if (!@unlink($directory . $file))
1430 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "«" . i18n::hsc($file) . "»</p>";
1431 sfShowDirectory($directory);
1435 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";
1436 sfShowDirectory($directory);
1440 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . i18n::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1441 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1447 sfShowDirectory($directory);
1453 /* Upload file *******************************************************************************************************************/
1455 function _skinfiles_uploadfile() {
1457 global $pluginUrl, $manager, $CONF;
1459 $directory = trim(requestVar('dir'));
1460 $directory = sfExpandDirectory($directory);
1462 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1464 $file = postFileInfo('name');
1466 if ($file['size'] > $CONF['MaxUploadSize']) {
1467 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . i18n::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";
1468 echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";
1469 echo $file['size'] . " bytes</p>";
1470 sfShowDirectory($directory);
1474 if (!is_uploaded_file($file['tmp_name'])) {
1475 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . i18n::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1476 sfShowDirectory($directory);
1480 if (sfIllegalFilename($file['name'])) {
1481 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . i18n::hsc($file['name']) . "» ";
1482 echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";
1483 sfShowDirectory($directory);
1487 if (file_exists($directory . $file['name'])) {
1488 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . i18n::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";
1489 sfShowDirectory($directory);
1493 if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {
1494 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . i18n::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1495 sfShowDirectory($directory);
1498 $mask = @umask(0000);
1499 @chmod($directory . $file['name'], 0755);
1502 echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . i18n::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";
1503 sfShowDirectory($directory);
1507 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . i18n::hsc(basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10;
1508 echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";