3 /* ==========================================================================================
4 * Nucleus SkinFiles Plugin
6 * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer
8 * @version $Id: index.php 1796 2012-04-29 03:46:09Z 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');
37 $oPluginAdmin = new PluginAdmin('SkinFiles');
39 if (!($member->isLoggedIn() && $member->isAdmin()))
41 $oPluginAdmin->start();
42 echo '<p>' . _ERROR_DISALLOWED . '</p>';
50 * Setup main variables
53 $rootDirectory = sfRealPath($DIR_SKINS);
54 $rootUrl = $CONF['SkinsURL'];
55 $pluginUrl = $oPluginAdmin->plugin->getAdminURL();
58 'text' => array ('inc', 'txt', 'css', 'js', 'php'),
59 'html' => array ('htm', 'html'),
60 'img' => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),
65 * Bypass admin area for downloads
68 $action = requestVar('action');
70 if ($action == 'download') {
71 _skinfiles_download();
80 $oPluginAdmin->start("<style type='text/css'>
84 text-decoration: none;
87 vertical-align: middle;
105 border: 1px solid gray;
108 border: 1px solid #ddd;
109 background-color: #F6F6F6;
110 margin: 18px 0 1.5em 0;
113 background-color: #bbc;
118 div.dialogbox h4.light {
119 background-color: #ddd;
125 div.dialogbox button {
126 margin: 10px 0 0 6px;
132 div.dialogbox p.buttons {
136 div.dialogbox textarea {
144 echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";
147 'renfile', 'renfile_process', 'delfile', 'delfile_process',
148 'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',
149 'rendir', 'rendir_process', 'deldir', 'deldir_process',
150 'emptydir', 'emptydir_process', 'createdir'
153 if (in_array($action, $actions))
155 if (!$manager->checkTicket())
157 echo '<p class="error">Error: ' . _ERROR_BADTICKET . '</p>';
163 call_user_func('_skinfiles_' . $action);
171 $oPluginAdmin->end();
180 /* Helper functions **************************************************************************************************************/
182 function sfExpandDirectory ($path) {
183 /* IN: relative directory
184 * OUT: full path to directory
187 global $rootDirectory;
188 return sfRealPath($rootDirectory . $path);
191 function sfRealPath ($path) {
193 * OUT: canonicalized absolute pathname
196 $path = realpath($path);
197 $path = str_replace('\\', '/', $path);
198 $path = i18n::substr($path, i18n::strlen($path) - 1) != '/' ? $path . '/' : $path;
202 function sfFullUrl ($path) {
203 /* IN: full path including filename
204 * OUT: url including filename
207 global $rootDirectory, $rootUrl;
209 $path = str_replace($rootDirectory, '', $path);
210 $path = rawurlencode($path);
211 $path = str_replace('%2F', '/', $path);
212 return $rootUrl . $path;
215 function sfValidPath ($path) {
216 /* IN: full path excluding or including filename
217 * OUT: boolean, true if full path is or is within rootDirectory
220 global $rootDirectory;
221 return i18n::substr($path, 0, i18n::strlen($rootDirectory)) == $rootDirectory;
224 function sfRelativePath ($path) {
225 /* IN: full path including or excluding filename
226 * OUT: relative path from rootDirectory
229 global $rootDirectory;
230 return str_replace($rootDirectory, '', $path);
233 function sfIsFileType ($type, $file) {
236 return isset($filetypes[$type]) && in_array(strtolower(i18n::substr(strrchr($file, "."), 1)), $filetypes[$type]);
239 function sfAllowEditing ($file) {
240 return sfIsFileType('html', $file) || sfIsFileType('text', $file);
243 function sfAllowViewing ($file) {
244 return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);
248 function sfDisplayPath ($relative) {
252 $result = '<a href="' . Entity::hsc($pluginUrl) . '" title="Go back to «skins»">';
253 $result .= '<img src="' . Entity::hsc($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';
255 $parts = preg_split('#/#', $relative);
258 while (list(,$v) = each ($parts)) {
262 $result .= '<a href="' . Entity::hsc($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';
263 $result .= 'title="Go back to «' . Entity::hsc($v) . '»">';
264 $result .= '<img src="' . Entity::hsc($pluginUrl . 'dir.gif') . '" alt="" /> ';
265 $result .= Entity::hsc($v) . '</a> / ';
272 function sfIcon ($file) {
276 $ext = strtolower(i18n::substr(strrchr($file, "."), 1));
281 return $pluginUrl . 'html.gif';
288 return $pluginUrl . 'text.gif';
298 return $pluginUrl . 'image.gif';
304 return $pluginUrl . 'php.gif';
308 return $pluginUrl . 'generic.gif';
313 function sfIllegalFilename($name) {
314 return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);
317 function sfDirectoryIsEmpty($dir) {
321 if ($dh = opendir($dir))
323 while (($file = readdir($dh)) !== false)
329 // $count must be smaller or equal than 2, because '.'
330 // and '..' are always returned by readdir().
342 /* Show directory ****************************************************************************************************************/
344 function sfShowDirectory($default = '') {
346 global $pluginUrl, $rootDirectory, $CONF, $manager;
348 $directory = $default != '' ?
350 sfExpandDirectory(trim(requestVar('dir')));
352 if (!sfValidPath($directory) || !is_dir($directory)) {
353 $directory = $rootDirectory;
356 $relative = sfRelativePath ($directory);
358 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';
364 if ($dh = @opendir($directory)) {
365 while (($file = readdir($dh)) !== false) {
366 if (!preg_match("/^\.{1,2}$/", $file)) {
367 $fstat = @stat($directory . $file);
369 if ($fstat['mode'] & 040000)
370 $dirs[$file] = $fstat;
372 $files[$file] = $fstat;
381 echo '<table><thead><tr>';
382 echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';
383 echo '</tr></thead>';
385 while (list($name, $stat) = each($dirs)) {
387 $dir = sfRelativePath($directory . $name . '/');
389 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
391 if (is_readable ($directory . $name))
393 echo '<a href="' . Entity::hsc($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';
394 echo '<img src="' . Entity::hsc($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
395 echo Entity::hsc($name).'</a>';
399 echo '<img src="' . Entity::hsc($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
400 echo Entity::hsc($name);
405 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));
406 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));
408 echo '<td>–</td>';
409 echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
412 if (is_writable($directory . $name)) {
413 echo '<td><a href="' . Entity::hsc($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_RENAME . '</a></td>';
415 echo '<td> </td>';
418 if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {
419 echo '<td><a href="' . Entity::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_DELETE . '</a></td>';
421 echo '<td> </td>';
424 echo '<td> </td><td> </td>';
429 while (list($name, $stat) = each($files)) {
431 $file = sfRelativePath($directory . $name);
433 $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode($file));
434 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode($file));
435 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));
436 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));
437 $dlUrl = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));
439 echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
441 if (is_readable ($directory . $name) && sfAllowViewing($name))
443 echo '<a href="' . Entity::hsc($viewUrl) . '">';
444 echo '<img src="' . Entity::hsc(sfIcon($name)) . '" alt="" /> ';
445 echo Entity::hsc($name).'</a>';
449 echo '<img src="' . Entity::hsc(sfIcon($name)) . '" alt="" /> ';
450 echo Entity::hsc($name);
454 echo ceil($stat['size'] / 1024) . ' kB';
456 echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
459 if (is_writable($directory . $name)) {
460 echo '<a href="' . Entity::hsc($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_RENAME . '</a>';
467 if (is_writable($directory . $name)) {
468 echo '<a href="' . Entity::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_DELETE . '</a>';
475 if (is_writable($directory . $name) && sfAllowEditing($name))
476 echo '<a href="'. Entity::hsc($editUrl) . '" title="' . _SKINFILES_EDIT . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_EDIT . '</a>';
482 if (is_readable ($directory . $name))
483 echo '<a href="' . Entity::hsc($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' «' . Entity::hsc($name) . '»">' . _SKINFILES_DOWNLOAD . '</a>';
490 if (!count($dirs) && !count($files)) {
491 echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';
496 if ($relative != '') {
498 if (is_writable($directory)) {
499 echo '<div class="dialogbox">';
500 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';
501 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
502 $manager->addTicketHidden();
503 echo '<input type="hidden" name="action" value="createfile" />';
504 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative) . '" />';
505 echo '<input type="text" name="name" size="40" value="untitled.txt" />';
506 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';
509 echo '<div class="dialogbox">';
510 echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';
511 echo '<form method="post" enctype="multipart/form-data" action="' . Entity::hsc($pluginUrl) . '">';
512 $manager->addTicketHidden();
513 echo '<input type="hidden" name="action" value="uploadfile" />';
514 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative) . '" />';
515 echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';
516 echo '<input type="file" name="name" size="40" />';
517 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';
522 echo '<div class="dialogbox">';
523 echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';
524 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
525 $manager->addTicketHidden();
526 echo '<input type="hidden" name="action" value="emptydir" />';
527 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative) . '" />';
528 echo _SKINFILES_DEL_ALL_FILES_MSG;
529 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';
535 if (is_writable($directory)) {
536 echo '<div class="dialogbox">';
537 echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';
538 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
539 $manager->addTicketHidden();
540 echo '<input type="hidden" name="action" value="createdir" />';
541 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative) . '" />';
542 echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';
543 echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';
552 /* Rename directory **************************************************************************************************************/
554 function _skinfiles_rendir($preset = '') {
556 global $pluginUrl, $manager;
558 $file = trim(basename(requestVar('dir')));
559 $directory = trim(dirname(requestVar('dir')));
560 $directory = sfExpandDirectory ($directory);
562 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
563 is_dir($directory . $file) && is_writable($directory . $file))
565 $relative = sfRelativePath ($directory);
566 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));
568 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
569 echo '<a href="' . Entity::hsc($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
570 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
572 echo '<div class="dialogbox">';
573 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
574 $manager->addTicketHidden();
575 echo '<input type="hidden" name="action" value="rendir_process" />';
576 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative . $file) . '" />';
578 echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' «' . Entity::hsc($file) . '» ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';
579 echo '<p><input type="text" name="name" size="40" value="' . Entity::hsc($preset != '' ? $preset : $file) . '" /></p>';
580 echo '<p class="buttons">';
581 echo '<input type="hidden" name="sure" value="yes" />';
582 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
583 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
585 echo '</div></form></div>';
589 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
590 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
594 function _skinfiles_rendir_process() {
596 global $pluginUrl, $manager;
598 $file = trim(basename(requestVar('dir')));
599 $directory = trim(dirname(requestVar('dir')));
600 $directory = sfExpandDirectory ($directory);
602 if (requestVar('sure') == 'yes')
604 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
605 is_dir($directory . $file) && is_writable($directory . $file))
607 $name = requestVar('name');
610 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . Entity::hsc($file) . "» ";
611 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";
612 _skinfiles_rendir($name);
616 if (sfIllegalFilename($name)) {
617 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . Entity::hsc($file) . "» ";
618 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";
619 _skinfiles_rendir($name);
623 if ($name == $file) {
624 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . Entity::hsc($file) . "» ";
625 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";
626 _skinfiles_rendir($name);
630 if (file_exists($directory . $name)) {
631 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . Entity::hsc($file) . "» ";
632 echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";
633 _skinfiles_rendir($name);
637 if (!@rename($directory . $file, $directory . $name))
639 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . Entity::hsc($file) . "»</p>";
640 _skinfiles_rendir($name);
644 echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_RENAMED_DIR2;
645 echo _SKINFILES_RENAMED_DIR3 . "«" . Entity::hsc($name) . "»" . _SKINFILES_RENAMED_DIR4 . "</p>";
646 sfShowDirectory($directory);
650 echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
651 echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
657 sfShowDirectory($directory);
664 /* Create directory **************************************************************************************************************/
666 function _skinfiles_createdir() {
668 $directory = trim(requestVar('dir'));
669 $directory = sfExpandDirectory($directory);
671 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
673 $name = requestVar('name');
676 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";
677 sfShowDirectory($directory);
681 if (sfIllegalFilename($name)) {
682 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . Entity::hsc($name) . "» ";
683 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";
684 sfShowDirectory($directory);
688 if (file_exists($directory . $name)) {
689 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . Entity::hsc($name) . "» ";
690 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";
691 sfShowDirectory($directory);
695 $mask = @umask(0000);
697 if (!@mkdir($directory . $name, 0755))
699 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . Entity::hsc($name) . "»</p>";
700 sfShowDirectory($directory);
706 echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . Entity::hsc($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";
707 sfShowDirectory($directory);
711 echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . Entity::hsc(basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;
712 echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";
719 /* Delete directory **************************************************************************************************************/
721 function _skinfiles_deldir() {
723 global $pluginUrl, $manager;
725 $file = trim(basename(requestVar('dir')));
726 $directory = trim(dirname(requestVar('dir')));
727 $directory = sfExpandDirectory ($directory);
729 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
730 is_dir($directory . $file) && is_writable($directory . $file) &&
731 sfDirectoryIsEmpty($directory . $file))
733 $relative = sfRelativePath ($directory);
734 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));
736 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
737 echo '<a href="' . Entity::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
738 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
740 echo '<div class="dialogbox">';
741 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
742 $manager->addTicketHidden();
743 echo '<input type="hidden" name="action" value="deldir_process" />';
744 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative . $file) . '" />';
746 echo '<h4>' . _SKINFILES_DELETE_DIR . ' «' . Entity::hsc($file) . '» ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';
747 echo '<p class="buttons">';
748 echo '<input type="hidden" name="sure" value="yes" />';
749 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
750 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
752 echo '</div></form></div>';
756 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " «" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
757 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
761 function _skinfiles_deldir_process() {
763 global $pluginUrl, $manager;
765 $file = trim(basename(requestVar('dir')));
766 $directory = trim(dirname(requestVar('dir')));
767 $directory = sfExpandDirectory ($directory);
769 if (requestVar('sure') == 'yes')
771 if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
772 is_dir($directory . $file) && is_writable($directory . $file) &&
773 sfDirectoryIsEmpty($directory . $file))
775 if (!@rmdir($directory . $file))
777 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "«" . Entity::hsc($file) . "»</p>";
778 sfShowDirectory($directory);
782 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";
783 sfShowDirectory($directory);
787 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
788 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
794 sfShowDirectory($directory);
801 /* Empty directory ***************************************************************************************************************/
803 function _skinfiles_emptydir() {
805 global $pluginUrl, $manager;
807 $file = trim(basename(requestVar('dir')));
808 $directory = trim(dirname(requestVar('dir')));
809 $directory = sfExpandDirectory ($directory);
811 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
815 if ($dh = @opendir($directory . $file))
817 while (($name = readdir($dh)) !== false) {
818 if(!preg_match("/^\.{1,2}$/", $name) &&
819 !is_dir($directory . $file . '/' . $name) &&
820 is_writable($directory . $file . '/' . $name))
828 $relative = sfRelativePath ($directory);
829 $emptyUrl = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));
831 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
832 echo '<a href="' . Entity::hsc($emptyUrl) . '" title="Empty «' . $file . '»">';
833 echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
835 echo '<div class="dialogbox">';
836 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
837 $manager->addTicketHidden();
838 echo '<input type="hidden" name="action" value="emptydir_process" />';
839 echo '<input type="hidden" name="dir" value="' . Entity::hsc($relative . $file) . '" />';
841 echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' «' . Entity::hsc($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';
846 foreach ($files as $name) { echo '<li>' . Entity::hsc($name) . '</li>'; }
849 echo '<p class="buttons">';
850 echo '<input type="hidden" name="sure" value="yes" />';
851 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
852 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
857 echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';
858 echo '<p class="buttons">';
859 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
863 echo '</div></form></div>';
868 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
869 echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
873 function _skinfiles_emptydir_process() {
875 global $pluginUrl, $manager;
877 $file = trim(basename(requestVar('dir')));
878 $directory = trim(dirname(requestVar('dir')));
879 $directory = sfExpandDirectory ($directory);
881 if (requestVar('sure') == 'yes')
883 if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
885 if ($dh = @opendir($directory . $file))
887 while (($name = readdir($dh)) !== false)
889 if(!preg_match("/^\.{1,2}$/", $name) && !is_dir($directory . $file . '/' . $name) &&
890 is_writable($directory . $file . '/' . $name))
892 if (unlink ($directory .$file . '/' . $name))
893 echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . Entity::hsc($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";
895 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . Entity::hsc($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";
901 sfShowDirectory($directory . $file . '/');
906 echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6;
907 echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";
913 sfShowDirectory($directory . $file . '/');
920 /* Download file *****************************************************************************************************************/
922 function _skinfiles_download() {
924 global $pluginUrl, $manager;
926 $file = basename(trim(requestVar('file')));
928 $directory = dirname(trim(requestVar('file')));
929 $directory = sfExpandDirectory ($directory);
931 if (sfValidPath($directory) && file_exists($directory . $file) &&
932 is_file($directory . $file) && is_readable($directory . $file))
934 if ( i18n::strpos(serverVar('HTTP_USER_AGENT'), "MSIE") !== FALSE )
935 $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
939 if ($fp = @fopen($directory . $file, 'r')) {
940 header("Cache-Control: "); // leave blank to avoid IE errors
941 header("Pragma: "); // leave blank to avoid IE errors
942 header("Content-type: application/octet-stream");
943 header('Content-Disposition: attachment; filename="'.$name.'"');
944 header("Content-length: ".(string)(filesize($directory . $file)));
952 echo _SKINFILES_ERR_DOWNLOAD_FILE1;
957 echo _SKINFILES_ERR_DOWNLOAD_FILE2;
966 /* View file *********************************************************************************************************************/
968 function _skinfiles_viewfile() {
970 global $pluginUrl, $manager;
972 $file = basename(trim(requestVar('file')));
973 $directory = dirname(trim(requestVar('file')));
974 $directory = sfExpandDirectory ($directory);
976 if (sfValidPath($directory) && file_exists($directory . $file) &&
977 is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file))
979 $relative = sfRelativePath ($directory);
980 $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
982 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
983 echo '<a href="' . Entity::hsc($viewUrl) . '" title="View «' . $file . '»">';
984 echo '<img src="' . Entity::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
986 echo '<h4>' . _SKINFILES_VIEW_FILE . '«' . Entity::hsc($file) . '»</h4>';
988 if (sfIsFileType('html', $file))
990 echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';
993 if (sfIsFileType('text', $file))
995 $content = implode('', file($directory . $file));
998 echo Entity::hsc($content);
1002 if (sfIsFileType('img', $file))
1004 $size = getimagesize($directory . $file, $info);
1007 case IMAGETYPE_GIF: $type = 'GIF document'; break;
1008 case IMAGETYPE_JPEG: $type = 'JPEG photograph'; break;
1009 case IMAGETYPE_PNG: $type = 'PNG document'; break;
1010 case IMAGETYPE_SWF: $type = 'Flash animation'; break;
1011 case IMAGETYPE_PSD: $type = 'Photoshop document'; break;
1012 case IMAGETYPE_BMP: $type = 'BMP document'; break;
1013 case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;
1014 case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;
1015 case IMAGETYPE_JPC: $type = 'JPEG2000 photograph'; break;
1016 case IMAGETYPE_JP2: $type = 'JPEG2000 photograph'; break;
1017 case IMAGETYPE_JPX: $type = 'JPEG2000 photograph'; break;
1018 case IMAGETYPE_JB2: $type = 'Slowview document'; break;
1019 case IMAGETYPE_SWC: $type = 'Flash animation (compressed)'; break;
1020 case IMAGETYPE_IFF: $type = 'IFF document'; break;
1021 case IMAGETYPE_WBMP: $type = 'WBMP document'; break;
1022 case IMAGETYPE_XBM: $type = 'XBM document'; break;
1023 default: $type = 'Unknown document'; break;
1026 if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||
1027 $size[2] == IMAGETYPE_PNG)
1029 echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';
1033 echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';
1034 echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . Entity::hsc($type) . '</td></tr>';
1035 echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . Entity::hsc($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1036 echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . Entity::hsc($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
1038 if (isset($size['channels']) || isset($size['bits']))
1040 $channels = isset($size['channels']) ? $size['channels'] : 3;
1041 $depth = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;
1042 echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . Entity::hsc($channels) . '</td></tr>';
1043 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . Entity::hsc($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';
1044 echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . Entity::hsc(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';
1048 if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG ||
1049 $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))
1051 $exif = exif_read_data($directory . $file, 'EXIF');
1055 echo '<tr><th colspan="2">Exif information</th></tr>';
1057 if (isset($exif['Make']) && isset($exif['Model']))
1058 echo '<tr><td>Camera:</td><td>' . Entity::hsc($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';
1060 if (isset($exif['DateTime']))
1061 echo '<tr><td>Created on:</td><td>' . Entity::hsc($exif['DateTime']) . '</td></tr>';
1063 if (isset($exif['XResolution']))
1064 echo '<tr><td>Horizontal resolution:</td><td>' . Entity::hsc(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';
1066 if (isset($exif['YResolution']))
1067 echo '<tr><td>Vertical resolution:</td><td>' . Entity::hsc(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';
1069 if (isset($exif['FocalLength']))
1070 echo '<tr><td>Focal length:</td><td>' . Entity::hsc(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';
1072 if (isset($exif['FNumber']))
1073 echo '<tr><td>F-number:</td><td>F/' . Entity::hsc(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';
1075 if (isset($exif['ExposureTime']))
1076 echo '<tr><td>Exposuretime:</td><td>' . Entity::hsc(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';
1078 if (isset($exif['ISOSpeedRatings']))
1079 echo '<tr><td>ISO-speed:</td><td>' . Entity::hsc(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';
1088 echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_VIEW_FILE2;
1089 echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";
1093 function _skinfiles_exif_prepare($value) {
1094 if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))
1095 if ($matches[1] < $matches[2])
1096 return '1/' . round($matches[2] / $matches[1]);
1098 return round($matches[1] / $matches[2]);
1106 /* Edit file *********************************************************************************************************************/
1108 function _skinfiles_editfile() {
1110 global $pluginUrl, $manager;
1112 $file = basename(trim(requestVar('file')));
1113 $directory = dirname(trim(requestVar('file')));
1114 $directory = sfExpandDirectory ($directory);
1116 if (sfValidPath($directory) && file_exists($directory . $file) &&
1117 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1119 $relative = sfRelativePath ($directory);
1120 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1122 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1123 echo '<a href="' . Entity::hsc($editUrl) . '" title="Edit «' . $file . '»">';
1124 echo '<img src="' . Entity::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1126 $content = implode('', file($directory . $file));
1128 echo '<div class="dialogbox">';
1129 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
1130 $manager->addTicketHidden();
1131 echo '<input type="hidden" name="action" value="editfile_process" />';
1132 echo '<input type="hidden" name="file" value="' . Entity::hsc(sfRelativePath($directory . $file)) . '" />';
1134 echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' «' . Entity::hsc($file) . '»</h4><div>';
1135 echo '<p><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';
1136 echo Entity::hsc($content);
1137 echo '</textarea></p>';
1139 echo '<p class="buttons">';
1140 echo '<input type="hidden" name="sure" value="yes" /">';
1141 echo '<input type="submit" value="' . _SKINFILES_SAVE_CHANGES . '" />';
1142 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1144 echo '</div></form></div>';
1148 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1149 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1153 function _skinfiles_editfile_process() {
1155 $file = basename(trim(requestVar('file')));
1156 $directory = dirname(trim(requestVar('file')));
1157 $directory = sfExpandDirectory ($directory);
1159 if (requestVar('sure') == 'yes')
1161 if (sfValidPath($directory) && file_exists($directory . $file) &&
1162 is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
1164 $content = postVar('content');
1167 if ($fh = @fopen($directory . $file, 'wb')) {
1169 if (@fwrite($fh, $content) !== false)
1176 echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";
1178 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";
1180 _skinfiles_editfile();
1184 echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
1185 echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
1191 sfShowDirectory($directory);
1197 /* Rename file *******************************************************************************************************************/
1199 function _skinfiles_renfile($preset = '') {
1201 global $pluginUrl, $manager;
1203 $file = basename(trim(requestVar('file')));
1204 $directory = dirname(trim(requestVar('file')));
1205 $directory = sfExpandDirectory ($directory);
1207 if (sfValidPath($directory) && file_exists($directory . $file) &&
1208 is_file($directory . $file) && is_writable($directory . $file))
1210 $relative = sfRelativePath ($directory);
1211 $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1213 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1214 echo '<a href="' . Entity::hsc($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
1215 echo '<img src="' . Entity::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1217 echo '<div class="dialogbox">';
1218 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
1219 $manager->addTicketHidden();
1220 echo '<input type="hidden" name="action" value="renfile_process" />';
1221 echo '<input type="hidden" name="file" value="' . Entity::hsc(sfRelativePath($directory . $file)) . '" />';
1223 echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '«' . Entity::hsc($file) . '» ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';
1224 echo '<p><input type="text" name="name" size="40" value="' . Entity::hsc($preset != '' ? $preset : $file) . '" /></p>';
1225 echo '<p class="buttons">';
1226 echo '<input type="hidden" name="sure" value="yes" /">';
1227 echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
1228 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1230 echo '</div></form></div>';
1234 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1235 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1239 function _skinfiles_renfile_process() {
1241 global $pluginUrl, $manager;
1243 $file = basename(trim(requestVar('file')));
1244 $directory = dirname(trim(requestVar('file')));
1245 $directory = sfExpandDirectory ($directory);
1247 if (requestVar('sure') == 'yes')
1249 if (sfValidPath($directory) && file_exists($directory . $file) &&
1250 is_file($directory . $file) && is_writable($directory . $file))
1252 $name = requestVar('name');
1255 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "«" . Entity::hsc($file) . "» ";
1256 echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";
1257 _skinfiles_renfile($name);
1261 if (sfIllegalFilename($name)) {
1262 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "«" . Entity::hsc($file) . "» ";
1263 echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";
1264 _skinfiles_renfile($name);
1268 if ($name == $file) {
1269 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "«" . Entity::hsc($file) . "» ";
1270 echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";
1271 _skinfiles_renfile($name);
1275 if (file_exists($directory . $name)) {
1276 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "«" . Entity::hsc($file) . "» ";
1277 echo _SKINFILES_ERR_RENAME_FILE11;
1278 echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";
1279 _skinfiles_renfile($name);
1283 if (!@rename($directory . $file, $directory . $name))
1285 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";
1286 _skinfiles_renfile($name);
1290 echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE16;
1291 echo _SKINFILES_ERR_RENAME_FILE17 . "«" . Entity::hsc($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";
1292 sfShowDirectory($directory);
1296 echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
1297 echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
1303 sfShowDirectory($directory);
1310 /* Create file *******************************************************************************************************************/
1312 function _skinfiles_createfile() {
1314 $directory = trim(requestVar('dir'));
1315 $directory = sfExpandDirectory($directory);
1317 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1319 $name = requestVar('name');
1322 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";
1323 sfShowDirectory($directory);
1327 if (sfIllegalFilename($name)) {
1328 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "«" . Entity::hsc($name) . "» ";
1329 echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";
1330 sfShowDirectory($directory);
1334 if (file_exists($directory . $name)) {
1335 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "«" . Entity::hsc($name) . "» ";
1336 echo _SKINFILES_ERR_CREATE_FILE5;
1337 echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";
1338 sfShowDirectory($directory);
1342 if (!@touch($directory . $name))
1344 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "«" . Entity::hsc($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";
1345 sfShowDirectory($directory);
1349 $mask = @umask(0000);
1350 @chmod($directory . $name, 0755);
1353 echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "«" . Entity::hsc($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";
1354 sfShowDirectory($directory);
1358 echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "«" . Entity::hsc(basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12;
1359 echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";
1366 /* Delete file *******************************************************************************************************************/
1368 function _skinfiles_delfile() {
1370 global $pluginUrl, $manager;
1372 $file = basename(trim(requestVar('file')));
1373 $directory = dirname(trim(requestVar('file')));
1374 $directory = sfExpandDirectory ($directory);
1376 if (sfValidPath($directory) && file_exists($directory . $file) &&
1377 is_file($directory . $file) && is_writable($directory . $file))
1379 $relative = sfRelativePath ($directory);
1380 $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
1382 echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
1383 echo '<a href="' . Entity::hsc($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
1384 echo '<img src="' . Entity::hsc(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
1386 echo '<div class="dialogbox">';
1387 echo '<form method="post" action="' . Entity::hsc($pluginUrl) . '">';
1388 $manager->addTicketHidden();
1389 echo '<input type="hidden" name="action" value="delfile_process" />';
1390 echo '<input type="hidden" name="file" value="' . Entity::hsc(sfRelativePath($directory . $file)) . '" />';
1392 echo '<h4>' . _SKINFILES_DELETE_FILE . ' «' . Entity::hsc($file) . '» ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';
1393 echo '<p class="buttons">';
1394 echo '<input type="hidden" name="sure" value="yes" />';
1395 echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
1396 echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
1398 echo '</div></form></div>';
1402 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1403 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1407 function _skinfiles_delfile_process() {
1409 global $pluginUrl, $manager;
1411 $file = basename(trim(requestVar('file')));
1412 $directory = dirname(trim(requestVar('file')));
1413 $directory = sfExpandDirectory ($directory);
1415 if (requestVar('sure') == 'yes')
1417 if (sfValidPath($directory) && file_exists($directory . $file) &&
1418 is_file($directory . $file) && is_writable($directory . $file))
1420 if (!@unlink($directory . $file))
1422 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "«" . Entity::hsc($file) . "»</p>";
1423 sfShowDirectory($directory);
1427 echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";
1428 sfShowDirectory($directory);
1432 echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . Entity::hsc($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
1433 echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
1439 sfShowDirectory($directory);
1445 /* Upload file *******************************************************************************************************************/
1447 function _skinfiles_uploadfile() {
1449 global $pluginUrl, $manager, $CONF;
1451 $directory = trim(requestVar('dir'));
1452 $directory = sfExpandDirectory($directory);
1454 if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
1456 $file = postFileInfo('name');
1458 if ($file['size'] > $CONF['MaxUploadSize']) {
1459 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . Entity::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";
1460 echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";
1461 echo $file['size'] . " bytes</p>";
1462 sfShowDirectory($directory);
1466 if (!is_uploaded_file($file['tmp_name'])) {
1467 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . Entity::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1468 sfShowDirectory($directory);
1472 if (sfIllegalFilename($file['name'])) {
1473 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . Entity::hsc($file['name']) . "» ";
1474 echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";
1475 sfShowDirectory($directory);
1479 if (file_exists($directory . $file['name'])) {
1480 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . Entity::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";
1481 sfShowDirectory($directory);
1485 if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {
1486 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . Entity::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
1487 sfShowDirectory($directory);
1490 $mask = @umask(0000);
1491 @chmod($directory . $file['name'], 0755);
1494 echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . Entity::hsc($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";
1495 sfShowDirectory($directory);
1499 echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . Entity::hsc(basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10;
1500 echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";