isLoggedIn() && $member->isAdmin())) { $oPluginAdmin->start(); echo '

' . _ERROR_DISALLOWED . '

'; $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(""); echo "

" . _SKINFILES_MANAGEMENT . "

"; $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 '

Error: ' . _ERROR_BADTICKET . '

'; 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 = ''; $result .= ' skins / '; $parts = explode('/', $relative); $part = ''; while (list(,$v) = each ($parts)) { if ($v != '') { $part .= $v . '/'; $result .= ''; $result .= ' '; $result .= htmlspecialchars($v) . ' / '; } } 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '

'; $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 ''; echo ''; echo ''; while (list($name, $stat) = each($dirs)) { $dir = sfRelativePath($directory . $name . '/'); echo ''; $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir)); $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir)); echo ''; echo ''; } else { echo ''; } if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) { echo ''; } else { echo ''; } echo ''; echo ''; } 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 ''; } if (!count($dirs) && !count($files)) { echo ''; } echo '
' . _SKINFILES_NAME . '' . _SKINFILES_SIZE . '' . _SKINFILES_LAST_MODIFIED . '' . _SKINFILES_ACTIONS . '
'; if (is_readable ($directory . $name)) { echo ''; echo 'folder '; echo htmlspecialchars($name).''; } else { echo 'folder '; echo htmlspecialchars($name); } echo '' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']); if (is_writable($directory . $name)) { echo '' . _SKINFILES_RENAME . ' ' . _SKINFILES_DELETE . '   
'; if (is_readable ($directory . $name) && sfAllowViewing($name)) { echo ''; echo ' '; echo htmlspecialchars($name).''; } else { echo ' '; echo htmlspecialchars($name); } echo ''; echo ceil($stat['size'] / 1024) . ' kB'; echo ''; echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']); echo ''; if (is_writable($directory . $name)) { echo '' . _SKINFILES_RENAME . ''; } else { echo ' '; } echo ''; if (is_writable($directory . $name)) { echo '' . _SKINFILES_DELETE . ''; } else { echo ' '; } echo ''; if (is_writable($directory . $name) && sfAllowEditing($name)) echo '' . _SKINFILES_EDIT . ''; else echo ' '; echo ''; if (is_readable ($directory . $name)) echo '' . _SKINFILES_DOWNLOAD . ''; else echo ' '; echo '
' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '
'; if ($relative != '') { if (is_writable($directory)) { echo '
'; echo '

' . _SKINFILES_CREATE_NEW_FILE . '

'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo ''; echo '

'; echo '
'; echo '
'; echo '

' . _SKINFILES_UPLOAD_NEW_FILE . '

'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo ''; echo ''; echo '

'; echo '
'; } if (count($files)) { echo '
'; echo '

' . _SKINFILES_DEL_ALL_FILES . '

'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo _SKINFILES_DEL_ALL_FILES_MSG; echo '

'; echo '
'; echo '
'; } } if (is_writable($directory)) { echo '
'; echo '

' . _SKINFILES_CREATE_NEW_DIR . '

'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo ''; echo '

'; echo '
'; echo '
'; } } /* 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_RENAME_DIR_MSG . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_DIR_MSG2 . '

'; echo '

'; echo '

'; echo ''; echo ''; echo ''; echo '

'; echo '
'; } else { echo "

" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2; echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "

"; } } 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 "

" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "

"; _skinfiles_rendir($name); return; } if (sfIllegalFilename($name)) { echo "

" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "

"; _skinfiles_rendir($name); return; } if ($name == $file) { echo "

" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "

"; _skinfiles_rendir($name); return; } if (file_exists($directory . $name)) { echo "

" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "

"; _skinfiles_rendir($name); return; } if (!@rename($directory . $file, $directory . $name)) { echo "

" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "«" . htmlspecialchars($file) . "»

"; _skinfiles_rendir($name); return; } echo "

" . _SKINFILES_RENAMED_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_RENAMED_DIR2; echo _SKINFILES_RENAMED_DIR3 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_RENAMED_DIR4 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2; echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "

"; } } 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 "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "

"; sfShowDirectory($directory); return; } if (sfIllegalFilename($name)) { echo "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "» "; echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "

"; sfShowDirectory($directory); return; } if (file_exists($directory . $name)) { echo "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "«" . htmlspecialchars($name) . "» "; echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "

"; sfShowDirectory($directory); return; } $mask = @umask(0000); if (!@mkdir($directory . $name, 0755)) { echo "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "«" . htmlspecialchars($name) . "»

"; sfShowDirectory($directory); return; } @umask($mask); echo "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR10; echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "

"; } } /* 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_DELETE_DIR . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_DIR2 . '

'; echo '

'; echo ''; echo ''; echo ''; echo '

'; echo '
'; } else { echo "

" . _SKINFILES_ERR_DELETE_DIR1 . " «" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2; echo _SKINFILES_ERR_DELETE_DIR3 . "

"; } } 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 "

" . _SKINFILES_ERR_DELETE_DIR4 . "«" . htmlspecialchars($file) . "»

"; sfShowDirectory($directory); return; } echo "

" . _SKINFILES_ERR_DELETE_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR6 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2; echo _SKINFILES_ERR_DELETE_DIR3 . "

"; } } 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_DELETE_FILE_MSG . ' «' . htmlspecialchars($file) . '»' . _SKINFILES_DELETE_FILE_MSG2 . '

'; if (count($files)) { echo '
    '; foreach ($files as $name) { echo '
  • ' . htmlspecialchars($name) . '
  • '; } echo '
'; echo '

'; echo ''; echo ''; echo ''; echo '

'; } else { echo '

' . _SKINFILES_ERR_DELETE_DIR7 . '

'; echo '

'; echo ''; echo '

'; } echo '
'; } else { echo "

" . _SKINFILES_ERR_DELETE_DIR1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_DIR2; echo _SKINFILES_ERR_DELETE_DIR3 . "

"; } } 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 "

" . _SKINFILES_ERR_EMPTY_DIR1 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR2 . "

"; else echo "

" . _SKINFILES_ERR_EMPTY_DIR3 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_EMPTY_DIR4 . "

"; } } closedir($dh); sfShowDirectory($directory . $file . '/'); } } else { echo "

" . _SKINFILES_ERR_EMPTY_DIR5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EMPTY_DIR6; echo _SKINFILES_ERR_EMPTY_DIR7 . "

"; } } 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '

' . _SKINFILES_VIEW_FILE . '«' . htmlspecialchars($file) . '»

'; if (sfIsFileType('html', $file)) { echo ''; } if (sfIsFileType('text', $file)) { $content = implode('', file($directory . $file)); echo '
';
				echo htmlspecialchars($content);
				echo '
'; } 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 '

'; } echo ''; echo ''; echo ''; echo ''; echo ''; 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 ''; echo ''; echo ''; } 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 ''; if (isset($exif['Make']) && isset($exif['Model'])) echo ''; if (isset($exif['DateTime'])) echo ''; if (isset($exif['XResolution'])) echo ''; if (isset($exif['YResolution'])) echo ''; if (isset($exif['FocalLength'])) echo ''; if (isset($exif['FNumber'])) echo ''; if (isset($exif['ExposureTime'])) echo ''; if (isset($exif['ISOSpeedRatings'])) echo ''; } } echo '
' . _SKINFILES_VIEW_FILE_IMG_INFO . '
' . _SKINFILES_VIEW_FILE_TYPE . '' . htmlspecialchars($type) . '
' . _SKINFILES_VIEW_FILE_WIDTH . '' . htmlspecialchars($size[0]) . _SKINFILES_VIEW_FILE_PX . '
' . _SKINFILES_VIEW_FILE_HEIGHT . '' . htmlspecialchars($size[1]) . _SKINFILES_VIEW_FILE_PX . '
' . _SKINFILES_VIEW_FILE_CHANNELS . '' . htmlspecialchars($channels) . '
' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '' . htmlspecialchars($depth) . _SKINFILES_VIEW_FILE_BITS . '
' . _SKINFILES_VIEW_FILE_COLORS . '' . htmlspecialchars(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '
Exif information
Camera:' . htmlspecialchars($exif['Make'] . ' ' . $exif['Model']) . '
Created on:' . htmlspecialchars($exif['DateTime']) . '
Horizontal resolution:' . htmlspecialchars(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi
Vertical resolution:' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi
Focal length:' . htmlspecialchars(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm
F-number:F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '
Exposuretime:' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec
ISO-speed:' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '
'; } } else { echo "

" . _SKINFILES_ERR_VIEW_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_VIEW_FILE2; echo _SKINFILES_ERR_VIEW_FILE3 . "

"; } } 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; $content = implode('', file($directory . $file)); echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_EDIT_FILE_MSG . ' «' . htmlspecialchars($file) . '»

'; echo '

'; echo '

'; echo ''; echo ''; echo ''; echo '

'; echo '
'; } else { echo "

" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2; echo _SKINFILES_ERR_EDIT_FILE3 . "

"; } } 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 "

" . _SKINFILES_ERR_EDIT_FILE4 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE5 . "

"; else echo "

" . _SKINFILES_ERR_EDIT_FILE6 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE7 . "

"; _skinfiles_editfile(); } else { echo "

" . _SKINFILES_ERR_EDIT_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_EDIT_FILE2; echo _SKINFILES_ERR_EDIT_FILE3 . "

"; } } 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_RENAME_FILE_MSG . '«' . htmlspecialchars($file) . '» ' . _SKINFILES_RENAME_FILE_MSG2 . '

'; echo '

'; echo '

'; echo ''; echo ''; echo ''; echo '

'; echo '
'; } else { echo "

" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2; echo _SKINFILES_ERR_RENAME_FILE3 . "

"; } } 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 "

" . _SKINFILES_ERR_RENAME_FILE4 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_RENAME_FILE5 . "

"; _skinfiles_renfile($name); return; } if (sfIllegalFilename($name)) { echo "

" . _SKINFILES_ERR_RENAME_FILE6 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_RENAME_FILE7 . "

"; _skinfiles_renfile($name); return; } if ($name == $file) { echo "

" . _SKINFILES_ERR_RENAME_FILE8 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_RENAME_FILE9 . "

"; _skinfiles_renfile($name); return; } if (file_exists($directory . $name)) { echo "

" . _SKINFILES_ERR_RENAME_FILE10 . "«" . htmlspecialchars($file) . "» "; echo _SKINFILES_ERR_RENAME_FILE11; echo _SKINFILES_ERR_RENAME_FILE12 . "

"; _skinfiles_renfile($name); return; } if (!@rename($directory . $file, $directory . $name)) { echo "

" . _SKINFILES_ERR_RENAME_FILE13 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE14 . "

"; _skinfiles_renfile($name); return; } echo "

" . _SKINFILES_ERR_RENAME_FILE15 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE16; echo _SKINFILES_ERR_RENAME_FILE17 . "«" . htmlspecialchars($name) . "»" . _SKINFILES_ERR_RENAME_FILE18 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_RENAME_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_RENAME_FILE2; echo _SKINFILES_ERR_RENAME_FILE3 . "

"; } } 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 "

" . _SKINFILES_ERR_CREATE_FILE1 . "

"; sfShowDirectory($directory); return; } if (sfIllegalFilename($name)) { echo "

" . _SKINFILES_ERR_CREATE_FILE2 . "«" . htmlspecialchars($name) . "» "; echo _SKINFILES_ERR_CREATE_FILE3 . "

"; sfShowDirectory($directory); return; } if (file_exists($directory . $name)) { echo "

" . _SKINFILES_ERR_CREATE_FILE4 . "«" . htmlspecialchars($name) . "» "; echo _SKINFILES_ERR_CREATE_FILE5; echo _SKINFILES_ERR_CREATE_FILE6 . "

"; sfShowDirectory($directory); return; } if (!@touch($directory . $name)) { echo "

" . _SKINFILES_ERR_CREATE_FILE7 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE8 . "

"; sfShowDirectory($directory); return; } $mask = @umask(0000); @chmod($directory . $name, 0755); @umask($mask); echo "

" . _SKINFILES_ERR_CREATE_FILE9 . "«" . htmlspecialchars($name) . "» " . _SKINFILES_ERR_CREATE_FILE10 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_CREATE_FILE11 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_CREATE_FILE12; echo _SKINFILES_ERR_CREATE_FILE13 . "

"; } } /* 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 '

' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative); echo ''; echo ' ' . $file . '

'; echo '
'; echo '
'; $manager->addTicketHidden(); echo ''; echo ''; echo '

' . _SKINFILES_DELETE_FILE . ' «' . htmlspecialchars($file) . '» ' . _SKINFILES_DELETE_FILE2 . '

'; echo '

'; echo ''; echo ''; echo ''; echo '

'; echo '
'; } else { echo "

" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2; echo _SKINFILES_ERR_DELETE_FILE3 . "

"; } } 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 "

" . _SKINFILES_ERR_DELETE_FILE4 . "«" . htmlspecialchars($file) . "»

"; sfShowDirectory($directory); return; } echo "

" . _SKINFILES_ERR_DELETE_FILE5 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE6 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_DELETE_FILE1 . "«" . htmlspecialchars($file) . "» " . _SKINFILES_ERR_DELETE_FILE2; echo _SKINFILES_ERR_DELETE_FILE3 . "

"; } } 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 "

" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "
"; echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / "; echo $file['size'] . " bytes

"; sfShowDirectory($directory); return; } if (!is_uploaded_file($file['tmp_name'])) { echo "

" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST . _SKINFILES_ERR_UPLOAD_FILE4 . "

"; sfShowDirectory($directory); return; } if (sfIllegalFilename($file['name'])) { echo "

" . _SKINFILES_ERR_UPLOAD_FILE5 . "«" . htmlspecialchars($file['name']) . "» "; echo _SKINFILES_ERR_UPLOAD_FILE6 . "

"; sfShowDirectory($directory); return; } if (file_exists($directory . $file['name'])) { echo "

" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "

"; sfShowDirectory($directory); return; } if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) { echo "

" . _SKINFILES_ERR_UPLOAD_FILE1 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "

"; sfShowDirectory($directory); } $mask = @umask(0000); @chmod($directory . $file['name'], 0755); @umask($mask); echo "

" . _SKINFILES_ERR_UPLOAD_FILE7 . "«" . htmlspecialchars($file['name']) . "» " . _SKINFILES_ERR_UPLOAD_FILE8 . "

"; sfShowDirectory($directory); } else { echo "

" . _SKINFILES_ERR_UPLOAD_FILE9 . "«" . htmlspecialchars(basename($directory)) . "» " . _SKINFILES_ERR_UPLOAD_FILE10; echo _SKINFILES_ERR_UPLOAD_FILE11 . "

"; } } ?>