-<?php\r
-\r
-/* */\r
-/* Admin page for NP_SkinFiles */\r
-/* ------------------------------------ */\r
-/* A simple skin files manager */\r
-/* */\r
-/* code by Jeff MacMichael */\r
-/* http://gednet.com/ */\r
-/* */\r
-/* version 1.01 */\r
- \r
- $strRel = '../../../'; \r
- include($strRel . 'config.php');\r
- \r
- include($DIR_LIBS . 'PLUGINADMIN.php');\r
-\r
- if (preg_match("/MD$/", $nucleus['version'])) {\r
- $isblogadmin = $member->isBlogAdmin(-1);\r
- } else {\r
- $isblogadmin = $member->isBlogAdmin($blogid);\r
- }\r
- if (!($member->isAdmin() || $isblogadmin)) {\r
- $oPluginAdmin = new PluginAdmin('SkinFiles');\r
- $oPluginAdmin->start();\r
- echo "<p>"._ERROR_DISALLOWED."</p>";\r
- $oPluginAdmin->end();\r
- exit;\r
- }\r
-\r
- // set to FALSE for normal operation, or TRUE if skins are stored\r
- // under owner's member id i.e. /skins/1/grey/... (MDNucleus)\r
- $privateskins = FALSE;\r
- if ($privateskins) { \r
- global $member;\r
- $SKINSUBDIR = $member->getID().'/'; \r
- $latestskins = 'latest-skins/';\r
- } else {\r
- $SKINSUBDIR = '';\r
- }\r
- \r
- global $pluginsskinfiles, $CONF;\r
- $pluginsskinfiles=$CONF['PluginURL']."skinfiles";\r
-\r
- if (isset($_GET['action'])) {$action = $_GET['action'];}\r
- if (isset($_POST['action'])) {$action = $_POST['action'];}\r
-\r
- if ($action == 'download') { \r
- download();\r
- return;\r
- break;\r
- }\r
-\r
- // create the admin area page\r
- $oPluginAdmin = new PluginAdmin('SkinFiles');\r
- $oPluginAdmin->start();\r
- \r
- echo "<h2>Skin File Management</h2>";\r
- \r
- if (strstr('renfile delfile createdir rendir deldir deleteAllInDir'\r
- .' editfile uploadfile createfile getLatestSkins', $action)) { \r
- call_user_func($action);\r
- } else {\r
- showdir();\r
- }\r
-\r
- $oPluginAdmin->end();\r
- return;\r
- break;\r
- \r
- function createfile() {\r
- global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- $parent = $_POST["dir"];\r
- $filename = $_POST["filename"];\r
- $fullpath = $DIR_SKINS.$SKINSUBDIR.$parent.'/'.$filename;\r
- if (file_exists($fullpath)) {\r
- $msg = "Error: the file '$filename' already exists.";\r
- showdir($msg);\r
- }\r
- echo "<h3><b>Creating file \"/$parent/$filename\":</b></h3>";\r
- $errrep = error_reporting(E_ERROR);\r
- if (touch($fullpath)) { \r
- $msg = 'The file was created successfully.';\r
- } else {\r
- $msg = 'ERROR: The file was <i>not</i> created successfully.';\r
- }\r
- $oldumask = umask(0000);\r
- chmod($fullpath, 0755);\r
- umask($oldumask);\r
- error_reporting($errrep);\r
- showdir($msg);\r
- }\r
-\r
- function createdir() {\r
- global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- $parent = $_POST["dir"];\r
- $newdir = $_POST["newdir"];\r
- if (!$newdir) {\r
- echo 'You need to specify a directory name to create. <br /><br />';\r
- echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Go back</a><br />'; \r
- return;\r
- }\r
- $errrep = error_reporting(E_ERROR);\r
- $oldumask = umask(0000);\r
- if (mkdir ($DIR_SKINS.$SKINSUBDIR.$parent.'/'.$newdir, 0755)) {\r
- $msg = 'Directory created successfully.';\r
- } else {\r
- $msg = 'There was an error creating the directory (check to see if the directory already exists).';\r
- }\r
- umask($oldumask);\r
- error_reporting($errrep);\r
- showdir($msg);\r
- }\r
- \r
- function download() {\r
- global $DIR_SKINS, $SKINSUBDIR;\r
- $file = $_GET["rfp"];\r
- $path = $DIR_SKINS.$SKINSUBDIR.$file;\r
- $splitpath = preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
- $file = strrev($splitpath[0]);\r
- \r
- // download code taken from Paul Alger's PHP_Easy_Download. \r
-\r
- // translate file name properly for Internet Explorer.\r
- if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){\r
- $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);\r
- }\r
- // make sure the file exists before sending headers\r
- if(!$fdl=@fopen($path,'r')){\r
- die("Cannot Open File!");\r
- } else {\r
- header("Cache-Control: ");// leave blank to avoid IE errors\r
- header("Pragma: ");// leave blank to avoid IE errors\r
- header("Content-type: application/octet-stream");\r
- header('Content-Disposition: attachment; filename="'.$file.'"');\r
- header("Content-length: ".(string)(filesize($path)));\r
- sleep(1);\r
- \r
- fpassthru($fdl);\r
- }\r
- return;\r
- break;\r
- }\r
- \r
- function uploadfile() {\r
- global $HTTP_POST_FILES, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;\r
- $filename = $HTTP_POST_FILES['filename']['name'];\r
- $filesize = $HTTP_POST_FILES['filename']['size'];\r
- $filetempname = $HTTP_POST_FILES['filename']['tmp_name'];\r
- $todir = $DIR_SKINS.$SKINSUBDIR.$_POST['dir'].'/';\r
- \r
- if ($filesize > $CONF['MaxUploadSize']) {\r
- showdir(_ERROR_FILE_TOO_BIG);\r
- return;\r
- }\r
-\r
- // check file type against allowed types\r
- $ok = 0;\r
- $allowedtypes = explode (',', "css,html,htm,xml,inc,txt,".$CONF['AllowedTypes']);\r
- foreach ( $allowedtypes as $type ) \r
- if (eregi("\." .$type. "$",$filename)) $ok = 1; \r
- if (!$ok) {\r
- showdir(_ERROR_BADFILETYPE);\r
- return;\r
- }\r
- if (!is_uploaded_file($filetempname)) {\r
- showdir(_ERROR_BADREQUEST);\r
- return;\r
- }\r
- if (file_exists($todir.$filename)) {\r
- showdir(_ERROR_UPLOADDUPLICATE);\r
- return;\r
- }\r
-\r
- // move file to directory\r
- if (is_uploaded_file($filetempname)) {\r
- $errrep = error_reporting(E_ERROR);\r
- if (!@move_uploaded_file($filetempname, $todir . $filename)) {\r
- showdir(_ERROR_UPLOADMOVE);\r
- return;\r
- }\r
- error_reporting($errrep);\r
- }\r
- // chmod uploaded file\r
- $oldumask = umask(0000);\r
- @chmod($todir . $filename, 0755); \r
- umask($oldumask); \r
-\r
- showdir("File uploaded successfully.");\r
- }\r
-\r
- function rendir() {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- if (isset($_POST['newname'])) {\r
- $splitpath = preg_split( "/\//", strrev($_POST["oldname"]), 2);\r
- $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];\r
- $newname = preg_replace("/^\//", "", $newname);\r
- $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], \r
- $DIR_SKINS.$SKINSUBDIR.$newname);\r
- if ($res) { \r
- $msg = "Directory successfully renamed."; \r
- } else {\r
- $msg = "Failed to rename directory - (check to see if another directory already exists with the new name).";\r
- }\r
- showdir($msg);\r
- } else { \r
- $oldname = preg_replace("/^\//", "", $_GET["oldname"]);\r
- echo '<h3><b>Rename directory "/'.$oldname.'":</b></h3>';\r
- $splitpath = preg_split( "/\//", strrev($_GET["oldname"]), 2);\r
- $dir = strrev($splitpath[0]);\r
- $parent = strrev($splitpath[1]);\r
- echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />'; \r
- ?>\r
- <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="rendir" />\r
- <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>\r
- <input type="hidden" name="oldname" value="<?php echo $oldname?>"/>\r
- <table><tr>\r
- <td><?php echo 'Rename to'?></td>\r
- <td><input name="newname" tabindex="90" value="<?php echo htmlspecialchars($dir) ?>" maxlength="50" size="20" /></td>\r
- </tr><tr>\r
- <td><?php echo "Rename"?></td>\r
- <td><input type="submit" tabindex="140" value="<?php echo "Rename this folder"?>" onclick="return checkSubmit();" /></td>\r
- </tr></table>\r
- </form>\r
- <?PHP\r
- }\r
- }\r
-\r
- function editfile () {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- if (isset ($_POST['rfp']) && isset($_POST['content'])) {\r
- $file = $_POST['rfp'];\r
- $errrep = error_reporting(E_ERROR);\r
- $success = true;\r
- if ($fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'w')) { \r
- if (fwrite ($fh, trim(stripslashes($_POST['content'])))) {\r
- fclose($fh);\r
- } else {\r
- $success = false;\r
- }\r
- } else {\r
- $success = false;\r
- }\r
- error_reporting($errrep);\r
- if ($success) {\r
- $msg = 'File was edited successfully.';\r
- } else {\r
- $msg = 'ERROR: File was <i>not</i> saved successfully.';\r
- }\r
- }\r
- if (isset ($_GET['rfp'])) { $file = $_GET['rfp']; }\r
- if (isset ($_POST['rfp'])) { $file = $_POST['rfp']; }\r
- $splitpath = preg_split( "/\//", strrev($file), 2);\r
- $parent = strrev($splitpath[1]);\r
- echo '<h3>Editing file "/'.$file.'":</h3>';\r
- if (isset($msg)) { echo "<p><b>$msg</b></p>"; }\r
- echo "> <a href=\"$pluginsskinfiles/?dir=$parent\"> Cancel/Return to /$parent</a><br /><br />";\r
- $fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'r');\r
- while (!feof($fh)) { \r
- $content .= fread($fh, 4096); \r
- }\r
- fclose ($fh); \r
- ?>\r
- <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="editfile" />\r
- <input type="hidden" name="rfp" value="<?php echo $file ?>"/>\r
- <input type="hidden" name="dir" value="<?php echo $parent ?>"/>\r
- <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />\r
- <input type="reset" value="Reset Data" /><br />\r
- <textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content"><?PHP echo htmlspecialchars($content) ?></textarea>\r
- <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />\r
- <input type="reset" value="Reset Data" /><br />\r
- </form>\r
- <?PHP\r
- }\r
-\r
-\r
- function renfile() {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- if (isset($_POST['newname'])) {\r
- $splitpath = preg_split( "/\//", strrev($_POST["oldname"]), 2);\r
- $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];\r
- $newname = preg_replace("/^\//", "", $newname);\r
- $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], \r
- $DIR_SKINS.$SKINSUBDIR.$newname);\r
- if ($res) { \r
- $msg = "File successfully renamed."; \r
- } else {\r
- $msg = "File could not be renamed - (check to see if another file already exists with the new name).";\r
- }\r
- showdir($msg);\r
- } else { \r
- echo '<h3><b>Rename file "/'.$_GET["rfp"].'":</b></h3>';\r
- $splitpath = preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
- $file = strrev($splitpath[0]);\r
- $parent = strrev($splitpath[1]);\r
- echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />'; \r
- ?>\r
- <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="renfile" />\r
- <input type="hidden" name="oldname" value="<?php echo $_GET["rfp"] ?>"/>\r
- <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>\r
- <table><tr>\r
- <td><?php echo 'Rename to'?></td>\r
- <td><input name="newname" tabindex="90" value="<?php echo htmlspecialchars($file) ?>" maxlength="50" size="20" /></td>\r
- </tr><tr>\r
- <td><?php echo "Rename"?></td>\r
- <td><input type="submit" tabindex="140" value="<?php echo "Rename this file"?>" onclick="return checkSubmit();" /></td>\r
- </tr></table>\r
- </form>\r
- <?PHP\r
- }\r
- }\r
-\r
- function delfile() {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- if (isset($_GET['sure'])) { \r
- $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];\r
- $errrep = error_reporting(E_ERROR);\r
- if (unlink ($file)) {\r
- $msg = 'File "'.$_GET["rfp"].'" has been deleted.';\r
- } else {\r
- $msg = 'ERROR: File "'.$_GET["rfp"].'" could not be deleted.';\r
- }\r
- error_reporting($errrep);\r
- showdir($msg);\r
- } else {\r
- $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];\r
- $splitpath = preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
- $parent = strrev($splitpath[1]);\r
- echo '<h3><b>Delete file "'.$_GET["rfp"].'": are you sure?</b></h3>';\r
- echo '<b>This action cannot be undone!</b><br /><br />';\r
- echo "> <a href=\"$pluginsskinfiles/?action=delfile&dir=$parent&sure=y&rfp=".$_GET["rfp"]."\">Yes, delete the file.</a><br />"; \r
- echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />'; \r
- }\r
- }\r
-\r
- function deldir() {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- if (isset($_GET['sure'])) { \r
- $dir = $DIR_SKINS.$SKINSUBDIR.$_GET["remdir"];\r
- $errrep = error_reporting(E_ERROR);\r
- if (rmdir ($dir)) {\r
- $msg = 'Directory "'.$_GET["remdir"].'" has been deleted.';\r
- } else {\r
- $msg = 'ERROR: directory "'.$_GET["remdir"].'" could not be deleted - (check to see if it contains files).';\r
- }\r
- error_reporting($errrep);\r
- showdir($msg);\r
- } else {\r
- $dir = preg_replace("/^\//", "",$_GET['remdir']);\r
- $parent = $_GET['dir'];\r
- echo '<h3><b>Delete directory "/'.$dir.'": are you sure?</b></h3>';\r
- echo '<b>This action cannot be undone!</b><br /><br />';\r
- echo "> <a href=\"$pluginsskinfiles/?action=deldir&sure=y&remdir=$dir&dir=$parent\">Yes, delete the directory (it must be empty to do this).</a><br /><br />"; \r
- echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />'; \r
- }\r
- }\r
-\r
- function deleteAllInDir() {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
- $parent = $DIR_SKINS.$SKINSUBDIR.preg_replace("/^\//", "",$_GET['dir']);\r
- if ($dh = @opendir($parent)) { \r
- while (($file = readdir($dh)) !== false) { \r
- if(!preg_match("/^\.{1,2}/", $file)){\r
- if (!is_dir($parent.$file)) {\r
- $files[] = $file;\r
- }\r
- }\r
- }\r
- closedir($dh); \r
- } \r
- if (isset($_GET['sure'])) { \r
- $errrep = error_reporting(E_ERROR);\r
- echo '<h3>Deletion results</h3><table>';\r
- echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />"; \r
- foreach ($files as $file) {\r
- if (unlink ("$parent/$file")) { \r
- echo "<tr><td>File: $file was deleted.</td></tr>"; \r
- } else {\r
- echo "<tr><td>File: $file was <b>NOT</b> deleted.</td></tr>";\r
- }\r
- }\r
- echo "</table>";\r
- error_reporting($errrep);\r
- echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />"; \r
- } else {\r
- echo '<h3><b>Delete all files in directory "/'.$_GET['dir'].'": are you sure?</b></h3>';\r
- echo '<b>This action cannot be undone!</b><br /><br />';\r
- echo "> <a href=\"$pluginsskinfiles/?action=deleteAllInDir&sure=y&dir=".$_GET["dir"]."\">Yes, delete <u>all files</u> in this directory.</a><br />"; \r
- echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET['dir'].'">No, go back.</a><br /><br />'; \r
- echo '<b>Files list:</b><table>';\r
- foreach ($files as $file) { echo "<tr><td>$file</td></tr>"; }\r
- echo '</table>';\r
- }\r
- }\r
-\r
- // function for MDNucleus; won't work unless $privateskins is set to true\r
- function getLatestSkins() {\r
- global $DIR_SKINS, $pluginsskinfiles, $privateskins, $latestskins, $member;\r
- $confirmed = $_POST['overwrite'];\r
- if (!$confirmed) {\r
- showdir("Overwrite of default skin files not confirmed - no action taken.");\r
- return;\r
- }\r
- if ($dh = @opendir($DIR_SKINS.$latestskins)) { \r
- while (($file = readdir($dh)) !== false) { \r
- if(!preg_match("/^\.{1,2}/", $file))\r
- if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;\r
- }\r
- closedir($dh); \r
- } \r
- if ($skins) {\r
- $msg = "Refreshed skin folders:";\r
- sort ($skins);\r
- foreach ($skins as $skin) {\r
- $memberskin = $DIR_SKINS.$member->getID().'/'.$skin;\r
- if (is_file($memberskin)) unlink($memberskin);\r
- if (!is_dir($memberskin)) {\r
- $old_umask = umask(0);\r
- mkdir($memberskin, 0755);\r
- umask($old_umask);\r
- }\r
- exec("rsync -Wtr --delete ".$DIR_SKINS.$latestskins.$skin."/* ".$memberskin.'/');\r
- $msg .= " $skin";\r
- }\r
- } else {\r
- showdir("No default skin folders found. No action taken.");\r
- return;\r
- }\r
- showdir($msg);\r
- }\r
-\r
- function _isImageFile($file) {\r
- return preg_match ("/\.(gif|png|jpg|jpeg|bmp|ico)$/i", $file);\r
- }\r
-\r
- function _isEditableFile($file) {\r
- return preg_match ("/\.(inc|txt|htm|html|xml)$/i", $file);\r
- }\r
-\r
- function showdir($msg = '') {\r
- global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;\r
- global $privateskins, $latestskins;\r
- if (isset($_GET['dir'])) { \r
- $newdir = preg_replace("/^\//", "",$_GET['dir']);\r
- $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";\r
- $in_subdir = 1;\r
- } elseif (isset($_POST['dir'])) { \r
- $newdir = preg_replace("/^\//", "",$_POST['dir']);\r
- $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";\r
- $in_subdir = 1;\r
- } else {\r
- $newdir = '';\r
- $currdir = $DIR_SKINS.$SKINSUBDIR;\r
- $in_subdir = 0;\r
- }\r
- \r
- if ($privateskins && (!is_dir($DIR_SKINS.$SKINSUBDIR))) {\r
- $oldumask = umask(0);\r
- mkdir($DIR_SKINS.$SKINSUBDIR, 0755);\r
- umask($oldmask);\r
- }\r
-\r
- if (!is_dir($currdir)) {\r
- echo 'The specified location is not a directory or doesn\'t exist.';\r
- return;\r
- }\r
- \r
- if ($dh = @opendir($currdir)) { \r
- while (($file = readdir($dh)) !== false) { \r
- if(!preg_match("/^\.{1,2}/", $file)){\r
- if (is_dir($currdir.$file)) {\r
- $dirs[] = $file;\r
- } else {\r
- $files[] = $file;\r
- }\r
- }\r
- }\r
- closedir($dh); \r
- } \r
- \r
- echo "<h3>Current Directory: <b>/$newdir</b></h3>";\r
- \r
- if ($msg) {\r
- echo '<p><b>'.htmlspecialchars($msg).'</b></p>';\r
- }\r
- \r
- if ($newdir != '') {\r
- echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";\r
- if (strstr($newdir, '/')) {\r
- $splitpath = preg_split( "/\//", strrev($newdir), 2);\r
- $updir = strrev($splitpath[1]);\r
- echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";\r
- }\r
- }\r
- echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";\r
-\r
- echo "<table>";\r
- if(is_array($dirs)){\r
- sort($dirs);\r
- foreach($dirs as $dir) {\r
- echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";\r
- echo " <a href=\"$pluginsskinfiles/?dir=$newdir/$dir\">";\r
- echo "<img src=\"$pluginsskinfiles/dir.gif\"> $dir</a> </td>";\r
- echo "<td> <a href=\"$pluginsskinfiles/?action=rendir&oldname=$newdir/$dir\" title=\"Rename directory\">(ren)</a></td>";\r
- echo "<td> <a href=\"$pluginsskinfiles/?action=deldir&dir=$newdir&remdir=$newdir/$dir\" title=\"Delete directory\">(del)</a></td>";\r
- echo "</td><td></td><td></td><td></td><td>";\r
- echo "<td>".date('M d, Y h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$newdir."/$dir"));\r
- echo "</td></tr>";\r
- }\r
- }\r
- \r
- if(is_array($files)){\r
- sort($files);\r
- foreach($files as $file) {\r
- echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";\r
- echo " ";\r
- if (preg_match("/\.css$/i", $file)) {\r
- echo "<img src=\"$pluginsskinfiles/css.gif\"> ";\r
- } elseif (preg_match("/\.php(3|4)?$/i", $file)) {\r
- echo "<img src=\"$pluginsskinfiles/php.gif\"> ";\r
- } elseif (_isEditableFile($file)) {\r
- echo "<img src=\"$pluginsskinfiles/text.gif\"> ";\r
- } elseif (_isImageFile($file)) {\r
- echo "<img src=\"$pluginsskinfiles/image.gif\"> ";\r
- } else {\r
- echo "<img src=\"$pluginsskinfiles/generic.png\"> ";\r
- }\r
- if ($newdir == '') {$thisdir = '';} else {$thisdir = "$newdir/";}\r
- echo "$file ";\r
- echo "</td><td>";\r
- echo " <a href=\"$pluginsskinfiles/?action=renfile&rfp=$thisdir"."$file\" title=\"Rename file\">(ren)</a>";\r
- echo "</td><td>";\r
- echo " <a href=\"$pluginsskinfiles/?action=delfile&rfp=$thisdir"."$file\" title=\"Delete file\">(del)</a>";\r
- echo "</td><td>";\r
- if ((is_writable($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)) && (!_isImageFile($file))) {\r
- echo " <a href=\"$pluginsskinfiles/?action=editfile&rfp=$thisdir"."$file\" title=\"Edit file\">(edit)</a>";\r
- }\r
- echo "</td><td>";\r
- if (_isImageFile($file)) {\r
- echo ' <a href="'.$CONF['SkinsURL'].$SKINSUBDIR.$thisdir."$file\" title=\"View graphic\">(view)</a>";\r
- }\r
- echo "</td><td>";\r
- echo " <a href=\"$pluginsskinfiles/?action=download&rfp=$thisdir"."$file\" title=\"Download file\">(d/l)</a>";\r
- echo "</td><td>";\r
- echo number_format(filesize($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)/1024, 2)." KB";\r
- echo "</td><td>";\r
- echo date('M d, Y h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$thisdir.$file));\r
- echo "</td></tr>";\r
- }\r
- }\r
- echo "</table>";\r
- \r
- if(is_array($dirs) || is_array($files)) {\r
- if ($newdir != '') {\r
- echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";\r
- if (strstr($newdir, '/')) {\r
- $splitpath = preg_split( "/\//", strrev($newdir), 2);\r
- $updir = strrev($splitpath[1]);\r
- echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";\r
- }\r
- }\r
- echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";\r
- }\r
-\r
- if ($newdir != '') {\r
- echo "<h3>Create new file in <b>/$newdir</b></h3>";\r
- ?>\r
- <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">\r
- <input type="hidden" name="action" value="createfile" />\r
- <input type="hidden" name="dir" value="<?php echo $newdir ?>">\r
- <input type="text" name="filename" size="40">\r
- <input type="submit" value="<?php echo 'Create file' ?>" />\r
- </form>\r
- <?PHP\r
-\r
- echo "<h3>Upload new file to <b>/$newdir</b></h3>";\r
- ?>\r
- <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">\r
- <input type="hidden" name="action" value="uploadfile" />\r
- <input type="hidden" name="dir" value="<?php echo $newdir ?>">\r
- <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $CONF['MaxUploadSize']?>" />\r
- <input type="file" name="filename" size="40">\r
- <input type="submit" value="<?php echo _UPLOAD_BUTTON?>" />\r
- </form>\r
- <?PHP\r
- \r
- if (count($files)) {\r
- echo "<h3>Delete all files in <b>/$newdir</b></h3>";\r
- ?>\r
- <form method="get" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="deleteAllInDir" />\r
- <input type="hidden" name="dir" value="<?php echo $newdir?>"/>\r
- <?php echo "Delete all Files? (will ask for confirmation)"?>\r
- <input type="submit" tabindex="140" value="<?php echo "Delete All"?>" onclick="return checkSubmit();" />\r
- </form>\r
- <?PHP\r
- }\r
- }\r
- \r
- echo "<h3>Create a new directory in <b>/$newdir</b></h3>"; \r
- ?>\r
- <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="createdir" />\r
- <input type="hidden" name="dir" value="<?php echo $newdir?>"/>\r
- <input name="newdir" tabindex="90" value="<?php echo 'newdir' ?>" size="40" />\r
- <input type="submit" tabindex="140" value="<?php echo "Create"?>" onclick="return checkSubmit();" />\r
- </form>\r
- <?PHP\r
-\r
- // for MDNucleus, ignored if on Win32 platform (for the moment)\r
- if (($newdir == '') && ($privateskins) && (!strtoupper(substr(PHP_OS, 0,3) == 'WIN'))) {\r
- if ($dh = @opendir($DIR_SKINS.$latestskins)) { \r
- while (($file = readdir($dh)) !== false) { \r
- if(!preg_match("/^\.{1,2}/", $file))\r
- if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;\r
- }\r
- closedir($dh); \r
- }\r
- if ($skins) {\r
- echo "<h3>Refresh default skin files to standard versions</h3>";\r
- ?>\r
- <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
- <input type="hidden" name="action" value="getLatestSkins" />\r
- <?php\r
- sort ($skins);\r
- if (count($skins) > 1) {\r
- $lastskin = array_pop($skins);\r
- array_push($skins, "</b>and<b> $lastskin");\r
- }\r
- echo "This will overwrite or create files in the following skin file directories: <b>";\r
- echo implode(", ", $skins)."</b><br /><br />"; \r
- ?> \r
- Note that you may need to re-import skin definitions you wish to use (See Layout Import/Export).<br /><br />\r
- <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" />\r
- <label for="cb_overwrite"><?php echo "Check this box to confirm overwrite of files<br />" ?></label>\r
- <input type="submit" tabindex="140" value="<?php echo "Overwrite Default Skin Files"?>" onclick="return checkSubmit();" />\r
- </form>\r
- <?PHP\r
- }\r
- }\r
-\r
- }\r
-\r
- \r
- \r
-?>
\ No newline at end of file
+<?php
+
+ /* ==========================================================================================
+ * Nucleus SkinFiles Plugin
+ *
+ * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer
+ *
+ * @version $Id: index.php,v 1.7 2008-02-08 09:31:23 kimitake Exp $
+ * @version $NucleusJP: index.php,v 1.6.2.1 2007/09/07 07:08:01 kimitake Exp $
+ *
+ * ==========================================================================================
+ * This program is free software and open source software; you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit
+ * http://www.gnu.org/licenses/gpl.html
+ * ==========================================================================================
+ */
+
+ $strRel = '../../../';
+ require($strRel . 'config.php');
+ include($DIR_LIBS . 'PLUGINADMIN.php');
+
+ $language = ereg_replace( '[\\|/]', '', getLanguageName());
+ $langfile = $language.'.php';
+ if (file_exists($langfile))
+ include_once($langfile);
+ else
+ include_once('english.php');
+
+ /**
+ * Create admin area
+ */
+
+ $oPluginAdmin = new PluginAdmin('SkinFiles');
+
+ if (!($member->isLoggedIn() && $member->isAdmin()))
+ {
+ $oPluginAdmin->start();
+ echo '<p>' . _ERROR_DISALLOWED . '</p>';
+ $oPluginAdmin->end();
+ exit;
+ }
+
+
+
+ /**
+ * Setup main variables
+ */
+
+ $rootDirectory = sfRealPath($DIR_SKINS);
+ $rootUrl = $CONF['SkinsURL'];
+ $pluginUrl = $oPluginAdmin->plugin->getAdminURL();
+
+ $filetypes = array (
+ 'text' => array ('inc', 'txt', 'css', 'js', 'php'),
+ 'html' => array ('htm', 'html'),
+ 'img' => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),
+ );
+
+
+ /**
+ * Bypass admin area for downloads
+ */
+
+ $action = requestVar('action');
+
+ if ($action == 'download') {
+ _skinfiles_download();
+ exit;
+ }
+
+
+ /**
+ * Build admin area
+ */
+
+ $oPluginAdmin->start("<style type='text/css'>
+ <!--
+
+ div#content a {
+ text-decoration: none;
+ }
+ div#content img {
+ vertical-align: middle;
+ margin-top: -3px;
+ }
+ p.message {
+ font-weight: bold;
+ }
+ p.error {
+ font-size: 100%;
+ font-weight: bold;
+ color: #880000;
+ }
+ pre {
+ overflow: auto;
+ height: 400px;
+ }
+ iframe {
+ width: 100%;
+ height: 400px;
+ border: 1px solid gray;
+ }
+ div.dialogbox {
+ border: 1px solid #ddd;
+ background-color: #F6F6F6;
+ margin: 18px 0 1.5em 0;
+ }
+ div.dialogbox h4 {
+ background-color: #bbc;
+ color: #000;
+ margin: 0;
+ padding: 5px;
+ }
+ div.dialogbox h4.light {
+ background-color: #ddd;
+ }
+ div.dialogbox div {
+ margin: 0;
+ padding: 10px;
+ }
+ div.dialogbox button {
+ margin: 10px 0 0 6px;
+ float: right;
+ }
+ div.dialogbox p {
+ margin: 0;
+ }
+ div.dialogbox p.buttons {
+ text-align: right;
+ overflow: auto;
+ }
+ div.dialogbox textarea {
+ width: 100%;
+ margin: 0;
+ }
+
+ -->
+ </style>");
+
+ echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";
+
+ $actions = array (
+ 'renfile', 'renfile_process', 'delfile', 'delfile_process',
+ 'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',
+ 'rendir', 'rendir_process', 'deldir', 'deldir_process',
+ 'emptydir', 'emptydir_process', 'createdir'
+ );
+
+ if (in_array($action, $actions))
+ {
+ if (!$manager->checkTicket())
+ {
+ echo '<p class="error">Error: ' . _ERROR_BADTICKET . '</p>';
+ sfShowDirectory();
+
+ }
+ else
+ {
+ call_user_func('_skinfiles_' . $action);
+ }
+ }
+ else
+ {
+ sfShowDirectory();
+ }
+
+ $oPluginAdmin->end();
+ exit;
+
+
+
+
+
+
+
+ /* Helper functions **************************************************************************************************************/
+
+ function sfExpandDirectory ($path) {
+ /* IN: relative directory
+ * OUT: full path to directory
+ */
+
+ global $rootDirectory;
+ return sfRealPath($rootDirectory . $path);
+ }
+
+ function sfRealPath ($path) {
+ /* IN: full path
+ * OUT: canonicalized absolute pathname
+ */
+
+ $path = realpath($path);
+ $path = str_replace('\\', '/', $path);
+ $path = substr($path, strlen($path) - 1) != '/' ? $path . '/' : $path;
+ return $path;
+ }
+
+ function sfFullUrl ($path) {
+ /* IN: full path including filename
+ * OUT: url including filename
+ */
+
+ global $rootDirectory, $rootUrl;
+
+ $path = str_replace($rootDirectory, '', $path);
+ $path = rawurlencode($path);
+ $path = str_replace('%2F', '/', $path);
+ return $rootUrl . $path;
+ }
+
+ function sfValidPath ($path) {
+ /* IN: full path excluding or including filename
+ * OUT: boolean, true if full path is or is within rootDirectory
+ */
+
+ global $rootDirectory;
+ return substr($path, 0, strlen($rootDirectory)) == $rootDirectory;
+ }
+
+ function sfRelativePath ($path) {
+ /* IN: full path including or excluding filename
+ * OUT: relative path from rootDirectory
+ */
+
+ global $rootDirectory;
+ return str_replace($rootDirectory, '', $path);
+ }
+
+ function sfIsFileType ($type, $file) {
+
+ global $filetypes;
+ return isset($filetypes[$type]) && in_array(strtolower(substr(strrchr($file, "."), 1)), $filetypes[$type]);
+ }
+
+ function sfAllowEditing ($file) {
+ return sfIsFileType('html', $file) || sfIsFileType('text', $file);
+ }
+
+ function sfAllowViewing ($file) {
+ return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);
+ }
+
+
+ function sfDisplayPath ($relative) {
+
+ global $pluginUrl;
+
+ $result = '<a href="' . htmlspecialchars($pluginUrl) . '" title="Go back to «skins»">';
+ $result .= '<img src="' . htmlspecialchars($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';
+
+ $parts = explode('/', $relative);
+ $part = '';
+
+ while (list(,$v) = each ($parts)) {
+ if ($v != '') {
+ $part .= $v . '/';
+
+ $result .= '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';
+ $result .= 'title="Go back to «' . htmlspecialchars($v) . '»">';
+ $result .= '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="" /> ';
+ $result .= htmlspecialchars($v) . '</a> / ';
+ }
+ }
+
+ return $result;
+ }
+
+ function sfIcon ($file) {
+
+ global $pluginUrl;
+
+ $ext = strtolower(substr(strrchr($file, "."), 1));
+
+ switch ($ext) {
+ case 'htm':
+ case 'html':
+ return $pluginUrl . 'html.gif';
+ break;
+
+ case 'txt':
+ case 'js':
+ case 'css':
+ case 'inc':
+ return $pluginUrl . 'text.gif';
+ break;
+
+ case 'gif':
+ case 'png':
+ case 'jpg':
+ case 'jpeg':
+ case 'bmp':
+ case 'xbmp':
+ case 'ico':
+ return $pluginUrl . 'image.gif';
+ break;
+
+ case 'php':
+ case 'php3':
+ case 'php4':
+ return $pluginUrl . 'php.gif';
+ break;
+
+ default:
+ return $pluginUrl . 'generic.gif';
+ break;
+ }
+ }
+
+ function sfIllegalFilename($name) {
+ return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);
+ }
+
+ function sfDirectoryIsEmpty($dir) {
+
+ $count = 0;
+
+ if ($dh = opendir($dir))
+ {
+ while (($file = readdir($dh)) !== false)
+ $count++;
+
+ closedir($dh);
+ }
+
+ // $count must be smaller or equal than 2, because '.'
+ // and '..' are always returned by readdir().
+ return $count <= 2;
+ }
+
+
+
+
+
+
+
+
+
+ /* Show directory ****************************************************************************************************************/
+
+ function sfShowDirectory($default = '') {
+
+ global $pluginUrl, $rootDirectory, $CONF, $manager;
+
+ $directory = $default != '' ?
+ $default :
+ sfExpandDirectory(trim(requestVar('dir')));
+
+ if (!sfValidPath($directory) || !is_dir($directory)) {
+ $directory = $rootDirectory;
+ }
+
+ $relative = sfRelativePath ($directory);
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';
+
+
+ $dirs = array();
+ $files = array();
+
+ if ($dh = @opendir($directory)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!preg_match("/^\.{1,2}$/", $file)) {
+ $fstat = @stat($directory . $file);
+
+ if ($fstat['mode'] & 040000)
+ $dirs[$file] = $fstat;
+ else
+ $files[$file] = $fstat;
+ }
+ }
+ closedir($dh);
+ }
+
+ ksort($dirs);
+ ksort($files);
+
+ echo '<table><thead><tr>';
+ echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';
+ echo '</tr></thead>';
+
+ while (list($name, $stat) = each($dirs)) {
+
+ $dir = sfRelativePath($directory . $name . '/');
+
+ echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
+
+ if (is_readable ($directory . $name))
+ {
+ echo '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';
+ echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
+ echo htmlspecialchars($name).'</a>';
+ }
+ else
+ {
+ echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';
+ echo htmlspecialchars($name);
+ }
+
+ echo '</td>';
+
+ $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));
+ $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));
+
+ echo '<td>–</td>';
+ echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
+
+
+ if (is_writable($directory . $name)) {
+ echo '<td><a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a></td>';
+ } else {
+ echo '<td> </td>';
+ }
+
+ if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {
+ echo '<td><a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a></td>';
+ } else {
+ echo '<td> </td>';
+ }
+
+ echo '<td> </td><td> </td>';
+ echo '</tr>';
+ }
+
+
+ while (list($name, $stat) = each($files)) {
+
+ $file = sfRelativePath($directory . $name);
+
+ $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode($file));
+ $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode($file));
+ $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));
+ $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));
+ $dlUrl = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));
+
+ echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';
+
+ if (is_readable ($directory . $name) && sfAllowViewing($name))
+ {
+ echo '<a href="' . htmlspecialchars($viewUrl) . '">';
+ echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
+ echo htmlspecialchars($name).'</a>';
+ }
+ else
+ {
+ echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';
+ echo htmlspecialchars($name);
+ }
+
+ echo '</td><td>';
+ echo ceil($stat['size'] / 1024) . ' kB';
+ echo '</td><td>';
+ echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);
+ echo '</td><td>';
+
+ if (is_writable($directory . $name)) {
+ echo '<a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_RENAME . '</a>';
+ } else {
+ echo ' ';
+ }
+
+ echo '</td><td>';
+
+ if (is_writable($directory . $name)) {
+ echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DELETE . '</a>';
+ } else {
+ echo ' ';
+ }
+
+ echo '</td><td>';
+
+ if (is_writable($directory . $name) && sfAllowEditing($name))
+ echo '<a href="'. htmlspecialchars($editUrl) . '" title="' . _SKINFILES_EDIT . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_EDIT . '</a>';
+ else
+ echo ' ';
+
+ echo '</td><td>';
+
+ if (is_readable ($directory . $name))
+ echo '<a href="' . htmlspecialchars($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' «' . htmlspecialchars($name) . '»">' . _SKINFILES_DOWNLOAD . '</a>';
+ else
+ echo ' ';
+
+ echo '</td></tr>';
+ }
+
+ if (!count($dirs) && !count($files)) {
+ echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';
+ }
+
+ echo '</table>';
+
+ if ($relative != '') {
+
+ if (is_writable($directory)) {
+ echo '<div class="dialogbox">';
+ echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="createfile" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
+ echo '<input type="text" name="name" size="40" value="untitled.txt" />';
+ echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';
+ echo '</div></div>';
+
+ echo '<div class="dialogbox">';
+ echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';
+ echo '<form method="post" enctype="multipart/form-data" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="uploadfile" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
+ echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';
+ echo '<input type="file" name="name" size="40" />';
+ echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';
+ echo '</div></div>';
+ }
+
+ if (count($files)) {
+ echo '<div class="dialogbox">';
+ echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="emptydir" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
+ echo _SKINFILES_DEL_ALL_FILES_MSG;
+ echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';
+ echo '</form>';
+ echo '</div></div>';
+ }
+ }
+
+ if (is_writable($directory)) {
+ echo '<div class="dialogbox">';
+ echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="createdir" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';
+ echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';
+ echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';
+ echo '</form>';
+ echo '</div></div>';
+ }
+ }
+
+
+
+
+ /* Rename directory **************************************************************************************************************/
+
+ function _skinfiles_rendir($preset = '') {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
+ is_dir($directory . $file) && is_writable($directory . $file))
+ {
+ $relative = sfRelativePath ($directory);
+ $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
+ echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="rendir_process" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
+
+ echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';
+ echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" />';
+ echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ echo '</div></form></div>';
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
+ echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
+ }
+ }
+
+ function _skinfiles_rendir_process() {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
+ is_dir($directory . $file) && is_writable($directory . $file))
+ {
+ $name = requestVar('name');
+
+ if ($name == '') {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";
+ _skinfiles_rendir($name);
+ return;
+ }
+
+ if (sfIllegalFilename($name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";
+ _skinfiles_rendir($name);
+ return;
+ }
+
+ if ($name == $file) {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";
+ _skinfiles_rendir($name);
+ return;
+ }
+
+ if (file_exists($directory . $name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";
+ _skinfiles_rendir($name);
+ return;
+ }
+
+ if (!@rename($directory . $file, $directory . $name))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . htmlspecialchars($file) . "»</p>";
+ _skinfiles_rendir($name);
+ return;
+ }
+
+ echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_RENAMED_DIR2;
+ echo _SKINFILES_RENAMED_DIR3 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_RENAMED_DIR4 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;
+ echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory);
+ }
+ }
+
+
+
+
+ /* Create directory **************************************************************************************************************/
+
+ function _skinfiles_createdir() {
+
+ $directory = trim(requestVar('dir'));
+ $directory = sfExpandDirectory($directory);
+
+ if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
+ {
+ $name = requestVar('name');
+
+ if ($name == '') {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (sfIllegalFilename($name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (file_exists($directory . $name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . htmlspecialchars($name) . "» ";
+ echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ $mask = @umask(0000);
+
+ if (!@mkdir($directory . $name, 0755))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "»</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ @umask($mask);
+
+ echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;
+ echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";
+ }
+ }
+
+
+
+
+ /* Delete directory **************************************************************************************************************/
+
+ function _skinfiles_deldir() {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
+ is_dir($directory . $file) && is_writable($directory . $file) &&
+ sfDirectoryIsEmpty($directory . $file))
+ {
+ $relative = sfRelativePath ($directory);
+ $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
+ echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="deldir_process" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
+
+ echo '<h4>' . _SKINFILES_DELETE_DIR . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" />';
+ echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ echo '</div></form></div>';
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
+ echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
+ }
+ }
+
+ function _skinfiles_deldir_process() {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) &&
+ is_dir($directory . $file) && is_writable($directory . $file) &&
+ sfDirectoryIsEmpty($directory . $file))
+ {
+ if (!@rmdir($directory . $file))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "«" . htmlspecialchars($file) . "»</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
+ echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory);
+ }
+ }
+
+
+
+
+ /* Empty directory ***************************************************************************************************************/
+
+ function _skinfiles_emptydir() {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
+ {
+ $files = array();
+
+ if ($dh = @opendir($directory . $file))
+ {
+ while (($name = readdir($dh)) !== false) {
+ if(!preg_match("/^\.{1,2}$/", $name) &&
+ !is_dir($directory . $file . '/' . $name) &&
+ is_writable($directory . $file . '/' . $name))
+ $files[] = $name;
+ }
+
+ closedir($dh);
+ sort($files);
+ }
+
+ $relative = sfRelativePath ($directory);
+ $emptyUrl = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($emptyUrl) . '" title="Empty «' . $file . '»">';
+ echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="emptydir_process" />';
+ echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';
+
+ echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' «' . htmlspecialchars($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';
+
+ if (count($files))
+ {
+ echo '<ul>';
+ foreach ($files as $name) { echo '<li>' . htmlspecialchars($name) . '</li>'; }
+ echo '</ul>';
+
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" />';
+ echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ }
+ else
+ {
+ echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';
+ echo '<p class="buttons">';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ }
+
+ echo '</div></form></div>';
+
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2;
+ echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";
+ }
+ }
+
+ function _skinfiles_emptydir_process() {
+
+ global $pluginUrl, $manager;
+
+ $file = trim(basename(requestVar('dir')));
+ $directory = trim(dirname(requestVar('dir')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file))
+ {
+ if ($dh = @opendir($directory . $file))
+ {
+ while (($name = readdir($dh)) !== false)
+ {
+ if(!preg_match("/^\.{1,2}$/", $name) && !is_dir($directory . $file . '/' . $name) &&
+ is_writable($directory . $file . '/' . $name))
+ {
+ if (unlink ($directory .$file . '/' . $name))
+ echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";
+ else
+ echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";
+ }
+ }
+
+ closedir($dh);
+
+ sfShowDirectory($directory . $file . '/');
+ }
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6;
+ echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory . $file . '/');
+ }
+ }
+
+
+
+
+ /* Download file *****************************************************************************************************************/
+
+ function _skinfiles_download() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_readable($directory . $file))
+ {
+ if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))
+ $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
+ else
+ $name = $file;
+
+ if ($fp = @fopen($directory . $file, 'r')) {
+ header("Cache-Control: "); // leave blank to avoid IE errors
+ header("Pragma: "); // leave blank to avoid IE errors
+ header("Content-type: application/octet-stream");
+ header('Content-Disposition: attachment; filename="'.$name.'"');
+ header("Content-length: ".(string)(filesize($directory . $file)));
+ sleep(1);
+
+ fpassthru($fp);
+ fclose($fp);
+ }
+ else
+ {
+ echo _SKINFILES_ERR_DOWNLOAD_FILE1;
+ }
+ }
+ else
+ {
+ echo _SKINFILES_ERR_DOWNLOAD_FILE2;
+ }
+
+ exit;
+ }
+
+
+
+
+ /* View file *********************************************************************************************************************/
+
+ function _skinfiles_viewfile() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file))
+ {
+ $relative = sfRelativePath ($directory);
+ $viewUrl = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($viewUrl) . '" title="View «' . $file . '»">';
+ echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<h4>' . _SKINFILES_VIEW_FILE . '«' . htmlspecialchars($file) . '»</h4>';
+
+ if (sfIsFileType('html', $file))
+ {
+ echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';
+ }
+
+ if (sfIsFileType('text', $file))
+ {
+ $content = implode('', file($directory . $file));
+
+ echo '<pre>';
+ echo htmlspecialchars($content);
+ echo '</pre>';
+ }
+
+ if (sfIsFileType('img', $file))
+ {
+ $size = getimagesize($directory . $file, $info);
+
+ switch ($size[2]) {
+ case IMAGETYPE_GIF: $type = 'GIF document'; break;
+ case IMAGETYPE_JPEG: $type = 'JPEG photograph'; break;
+ case IMAGETYPE_PNG: $type = 'PNG document'; break;
+ case IMAGETYPE_SWF: $type = 'Flash animation'; break;
+ case IMAGETYPE_PSD: $type = 'Photoshop document'; break;
+ case IMAGETYPE_BMP: $type = 'BMP document'; break;
+ case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;
+ case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;
+ case IMAGETYPE_JPC: $type = 'JPEG2000 photograph'; break;
+ case IMAGETYPE_JP2: $type = 'JPEG2000 photograph'; break;
+ case IMAGETYPE_JPX: $type = 'JPEG2000 photograph'; break;
+ case IMAGETYPE_JB2: $type = 'Slowview document'; break;
+ case IMAGETYPE_SWC: $type = 'Flash animation (compressed)'; break;
+ case IMAGETYPE_IFF: $type = 'IFF document'; break;
+ case IMAGETYPE_WBMP: $type = 'WBMP document'; break;
+ case IMAGETYPE_XBM: $type = 'XBM document'; break;
+ default: $type = 'Unknown document'; break;
+ }
+
+ if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||
+ $size[2] == IMAGETYPE_PNG)
+ {
+ echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';
+ }
+
+ echo '<table>';
+ echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . htmlspecialchars($type) . '</td></tr>';
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . htmlspecialchars($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . htmlspecialchars($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';
+
+ if (isset($size['channels']) || isset($size['bits']))
+ {
+ $channels = isset($size['channels']) ? $size['channels'] : 3;
+ $depth = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . htmlspecialchars($channels) . '</td></tr>';
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . htmlspecialchars($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';
+ echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . htmlspecialchars(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';
+ }
+
+
+ if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG ||
+ $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))
+ {
+ $exif = exif_read_data($directory . $file, 'EXIF');
+
+ if ($exif)
+ {
+ echo '<tr><th colspan="2">Exif information</th></tr>';
+
+ if (isset($exif['Make']) && isset($exif['Model']))
+ echo '<tr><td>Camera:</td><td>' . htmlspecialchars($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';
+
+ if (isset($exif['DateTime']))
+ echo '<tr><td>Created on:</td><td>' . htmlspecialchars($exif['DateTime']) . '</td></tr>';
+
+ if (isset($exif['XResolution']))
+ echo '<tr><td>Horizontal resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';
+
+ if (isset($exif['YResolution']))
+ echo '<tr><td>Vertical resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';
+
+ if (isset($exif['FocalLength']))
+ echo '<tr><td>Focal length:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';
+
+ if (isset($exif['FNumber']))
+ echo '<tr><td>F-number:</td><td>F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';
+
+ if (isset($exif['ExposureTime']))
+ echo '<tr><td>Exposuretime:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';
+
+ if (isset($exif['ISOSpeedRatings']))
+ echo '<tr><td>ISO-speed:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';
+ }
+ }
+
+ echo '</table>';
+ }
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_VIEW_FILE2;
+ echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";
+ }
+ }
+
+ function _skinfiles_exif_prepare($value) {
+ if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))
+ if ($matches[1] < $matches[2])
+ return '1/' . round($matches[2] / $matches[1]);
+ else
+ return round($matches[1] / $matches[2]);
+ else
+ return $value;
+ }
+
+
+
+
+ /* Edit file *********************************************************************************************************************/
+
+ function _skinfiles_editfile() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
+ {
+ $relative = sfRelativePath ($directory);
+ $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($editUrl) . '" title="Edit «' . $file . '»">';
+ echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
+
+ $content = implode('', file($directory . $file));
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="editfile_process" />';
+ echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
+
+ echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' «' . htmlspecialchars($file) . '»</h4><div>';
+ echo '<p><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';
+ echo htmlspecialchars($content);
+ echo '</textarea></p>';
+
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" /">';
+ echo '<input type="submit" value="' . _SKINFILES_SAVE_CHANGES . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ echo '</div></form></div>';
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
+ echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
+ }
+ }
+
+ function _skinfiles_editfile_process() {
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file))
+ {
+ $content = postVar('content');
+ $success = false;
+
+ if ($fh = @fopen($directory . $file, 'wb')) {
+
+ if (@fwrite($fh, $content) !== false)
+ $success = true;
+
+ @fclose($fh);
+ }
+
+ if ($success)
+ echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";
+ else
+ echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";
+
+ _skinfiles_editfile();
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2;
+ echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory);
+ }
+ }
+
+
+
+ /* Rename file *******************************************************************************************************************/
+
+ function _skinfiles_renfile($preset = '') {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file))
+ {
+ $relative = sfRelativePath ($directory);
+ $editUrl = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' «' . $file . '»">';
+ echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="renfile_process" />';
+ echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
+
+ echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '«' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';
+ echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" /">';
+ echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ echo '</div></form></div>';
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
+ echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
+ }
+ }
+
+ function _skinfiles_renfile_process() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file))
+ {
+ $name = requestVar('name');
+
+ if ($name == '') {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";
+ _skinfiles_renfile($name);
+ return;
+ }
+
+ if (sfIllegalFilename($name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";
+ _skinfiles_renfile($name);
+ return;
+ }
+
+ if ($name == $file) {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";
+ _skinfiles_renfile($name);
+ return;
+ }
+
+ if (file_exists($directory . $name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "«" . htmlspecialchars($file) . "» ";
+ echo _SKINFILES_ERR_RENAME_FILE11;
+ echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";
+ _skinfiles_renfile($name);
+ return;
+ }
+
+ if (!@rename($directory . $file, $directory . $name))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";
+ _skinfiles_renfile($name);
+ return;
+ }
+
+ echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE16;
+ echo _SKINFILES_ERR_RENAME_FILE17 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2;
+ echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory);
+ }
+ }
+
+
+
+
+ /* Create file *******************************************************************************************************************/
+
+ function _skinfiles_createfile() {
+
+ $directory = trim(requestVar('dir'));
+ $directory = sfExpandDirectory($directory);
+
+ if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
+ {
+ $name = requestVar('name');
+
+ if ($name == '') {
+ echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (sfIllegalFilename($name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "«" . htmlspecialchars($name) . "» ";
+ echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (file_exists($directory . $name)) {
+ echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "«" . htmlspecialchars($name) . "» ";
+ echo _SKINFILES_ERR_CREATE_FILE5;
+ echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (!@touch($directory . $name))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ $mask = @umask(0000);
+ @chmod($directory . $name, 0755);
+ @umask($mask);
+
+ echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12;
+ echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";
+ }
+ }
+
+
+
+
+ /* Delete file *******************************************************************************************************************/
+
+ function _skinfiles_delfile() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file))
+ {
+ $relative = sfRelativePath ($directory);
+ $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));
+
+ echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);
+ echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' «' . $file . '»">';
+ echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';
+
+ echo '<div class="dialogbox">';
+ echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';
+ $manager->addTicketHidden();
+ echo '<input type="hidden" name="action" value="delfile_process" />';
+ echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';
+
+ echo '<h4>' . _SKINFILES_DELETE_FILE . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';
+ echo '<p class="buttons">';
+ echo '<input type="hidden" name="sure" value="yes" />';
+ echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';
+ echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';
+ echo '</p>';
+ echo '</div></form></div>';
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
+ echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
+ }
+ }
+
+ function _skinfiles_delfile_process() {
+
+ global $pluginUrl, $manager;
+
+ $file = basename(trim(requestVar('file')));
+ $directory = dirname(trim(requestVar('file')));
+ $directory = sfExpandDirectory ($directory);
+
+ if (requestVar('sure') == 'yes')
+ {
+ if (sfValidPath($directory) && file_exists($directory . $file) &&
+ is_file($directory . $file) && is_writable($directory . $file))
+ {
+ if (!@unlink($directory . $file))
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "«" . htmlspecialchars($file) . "»</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2;
+ echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";
+ }
+ }
+ else
+ {
+ // User cancelled
+ sfShowDirectory($directory);
+ }
+ }
+
+
+
+ /* Upload file *******************************************************************************************************************/
+
+ function _skinfiles_uploadfile() {
+
+ global $pluginUrl, $manager, $CONF;
+
+ $directory = trim(requestVar('dir'));
+ $directory = sfExpandDirectory($directory);
+
+ if (sfValidPath($directory) && is_dir($directory) && is_writable($directory))
+ {
+ $file = postFileInfo('name');
+
+ if ($file['size'] > $CONF['MaxUploadSize']) {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";
+ echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";
+ echo $file['size'] . " bytes</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (!is_uploaded_file($file['tmp_name'])) {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (sfIllegalFilename($file['name'])) {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . htmlspecialchars($file['name']) . "» ";
+ echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (file_exists($directory . $file['name'])) {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";
+ sfShowDirectory($directory);
+ return;
+ }
+
+ if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";
+ sfShowDirectory($directory);
+ }
+
+ $mask = @umask(0000);
+ @chmod($directory . $file['name'], 0755);
+ @umask($mask);
+
+ echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";
+ sfShowDirectory($directory);
+ }
+ else
+ {
+ echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10;
+ echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";
+ }
+ }
+
+
+
+
+
+?>