diff --git a/system/download.php b/system/download.php deleted file mode 100644 index 0e339a3d..00000000 --- a/system/download.php +++ /dev/null @@ -1,21 +0,0 @@ - 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'csv' => 'text/x-comma-separated-values', - 'bin' => 'application/macbinary', - 'dms' => 'application/octet-stream', - 'lha' => 'application/octet-stream', - 'lzh' => 'application/octet-stream', - 'exe' => 'application/octet-stream', - 'class' => 'application/octet-stream', - 'psd' => 'application/x-photoshop', - 'so' => 'application/octet-stream', - 'sea' => 'application/octet-stream', - 'dll' => 'application/octet-stream', - 'oda' => 'application/oda', - 'pdf' => 'application/pdf', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'mif' => 'application/vnd.mif', - 'xls' => 'application/excel', - 'ppt' => 'application/powerpoint', - 'wbxml' => 'application/wbxml', - 'wmlc' => 'application/wmlc', - 'dcr' => 'application/x-director', - 'dir' => 'application/x-director', - 'dxr' => 'application/x-director', - 'dvi' => 'application/x-dvi', - 'gtar' => 'application/x-gtar', - 'gz' => 'application/x-gzip', - 'php' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'php3' => 'application/x-httpd-php', - 'phtml' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', - 'js' => 'application/x-javascript', - 'swf' => 'application/x-shockwave-flash', - 'sit' => 'application/x-stuffit', - 'tar' => 'application/x-tar', - 'tgz' => 'application/x-tar', - 'xhtml' => 'application/xhtml+xml', - 'xht' => 'application/xhtml+xml', - 'zip' => 'application/x-zip', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mpga' => 'audio/mpeg', - 'mp2' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'ram' => 'audio/x-pn-realaudio', - 'rm' => 'audio/x-pn-realaudio', - 'rpm' => 'audio/x-pn-realaudio-plugin', - 'ra' => 'audio/x-realaudio', - 'rv' => 'video/vnd.rn-realvideo', - 'wav' => 'audio/x-wav', - 'bmp' => 'image/bmp', - 'gif' => 'image/gif', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'png' => 'image/png', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'css' => 'text/css', - 'html' => 'text/html', - 'htm' => 'text/html', - 'shtml' => 'text/html', - 'txt' => 'text/plain', - 'text' => 'text/plain', - 'log' => 'text/plain', - 'rtx' => 'text/richtext', - 'rtf' => 'text/rtf', - 'xml' => 'text/xml', - 'xsl' => 'text/xml', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'qt' => 'video/quicktime', - 'mov' => 'video/quicktime', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'word' => 'application/msword', - 'xl' => 'application/excel', - 'eml' => 'message/rfc822' + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'csv' => 'text/x-comma-separated-values', + 'bin' => 'application/macbinary', + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'class' => 'application/octet-stream', + 'psd' => 'application/x-photoshop', + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/excel', + 'ppt' => 'application/powerpoint', + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'php' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => 'application/x-zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'word' => 'application/msword', + 'xl' => 'application/excel', + 'eml' => 'message/rfc822' ); /** - * Create a download response. The proper headers will be sent - * to the browser to force the file to be downloaded. + * Get the contents of a file. + * + * @param string $path + * @return string + */ + public static function get($path) + { + return file_get_contents($path); + } + + /** + * Write to a file. + * + * @param string $path + * @param string $data + * @return int + */ + public static function put($path, $data) + { + return file_put_contents($path, $data, LOCK_EX); + } + + /** + * Append to a file. + * + * @param string $path + * @param string $data + * @return int + */ + public static function append($path, $data) + { + return file_put_contents($path, $data, LOCK_EX | FILE_APPEND); + } + + /** + * Extract the extension from a file path. + * + * @param string $path + * @return string + */ + public static function extension($path) + { + return pathinfo($path, PATHINFO_EXTENSION); + } + + /** + * Get a file MIME type by extension. + * + * @param string $extension + * @param string $default + * @return string + */ + public static function mime($extension, $default = 'application/octet-stream') + { + return (array_key_exists($extension, static::$mimes)) ? static::$mimes[$extension] : $default; + } + + /** + * Create a response that will force a file to be downloaded. * * @param string $path * @param string $name @@ -115,10 +172,10 @@ class File { $name = basename($path); } - $response = Response::make(file_get_contents($path)); + $response = Response::make(static::get($path)); $response->header('Content-Description', 'File Transfer'); - $response->header('Content-Type', static::mime(pathinfo($path, PATHINFO_EXTENSION))); + $response->header('Content-Type', static::mime(static::extension($path))); $response->header('Content-Disposition', 'attachment; filename="'.$name.'"'); $response->header('Content-Transfer-Encoding', 'binary'); $response->header('Expires', 0); @@ -129,27 +186,4 @@ class File { return $response; } - /** - * Get a file's extension. - * - * @param string $path - * @return string - */ - public static function extension($path) - { - return pathinfo($path, PATHINFO_EXTENSION); - } - - /** - * Get a MIME type by extension. - * - * @param string $extension - * @param string $default - * @return string - */ - public static function mime($extension, $default = 'application/octet-stream') - { - return (array_key_exists($extension, static::$mimes)) ? static::$mimes[$extension] : $default; - } - } \ No newline at end of file diff --git a/system/input.php b/system/input.php index 47d79fa4..7e682c6b 100644 --- a/system/input.php +++ b/system/input.php @@ -10,14 +10,25 @@ class Input { public static $input; /** - * Determine if the input data contains an item that is not empty. + * Determine if the input data contains an item. * * @param string $key * @return bool */ public static function has($key) { - return ( ! is_null(static::get($key)) and trim((string) static::get($key)) != ''); + return ( ! is_null(static::get($key))); + } + + /** + * Determine if the input data contains an item that is not empty. + * + * @param string $key + * @return bool + */ + public static function filled($key) + { + return (static::has($key) and trim((string) static::get($key)) !== ''); } /** @@ -38,14 +49,25 @@ class Input { } /** - * Determine if the old input data contains an item that is not empty. + * Determine if the old input data contains an item. * * @param string $key * @return bool */ public static function had($key) { - return ( ! is_null(static::old($key)) and trim((string) static::old($key)) != ''); + return ( ! is_null(static::old($key))); + } + + /** + * Determine if the old input data contains an item that is not empty. + * + * @param string $key + * @return bool + */ + public static function was_filled($key) + { + return (static::had($key) and trim((string) static::old($key)) !== ''); } /** diff --git a/system/log.php b/system/log.php index 2a54fb0e..9c330a89 100644 --- a/system/log.php +++ b/system/log.php @@ -45,44 +45,39 @@ class Log { public static function write($type, $message) { // ----------------------------------------------------- - // Determine the yearly directory. + // Create the yearly and monthly directories if needed. // ----------------------------------------------------- - $directory = APP_PATH.'logs/'.date('Y'); - - if ( ! is_dir($directory)) - { - static::make_directory($directory); - } + static::make_directory($directory = APP_PATH.'logs/'.date('Y')); + static::make_directory($directory .= '/'.date('m')); // ----------------------------------------------------- - // Determine the monthly directory. - // ----------------------------------------------------- - $directory .= '/'.date('m'); - - if ( ! is_dir($directory)) - { - static::make_directory($directory); - } - - // ----------------------------------------------------- - // Determine the daily file. + // Each day has its own log file. // ----------------------------------------------------- $file = $directory.'/'.date('d').EXT; + // ----------------------------------------------------- + // Append to the log file and set the permissions. + // ----------------------------------------------------- file_put_contents($file, date('Y-m-d H:i:s').' '.$type.' - '.$message.PHP_EOL, LOCK_EX | FILE_APPEND); + chmod($file, 0666); } /** * Create a log directory. * + * If the directory already exists, no action will be taken. + * * @param string $directory * @return void */ private static function make_directory($directory) { - mkdir($directory, 02777); - chmod($directory, 02777); + if ( ! is_dir($directory)) + { + mkdir($directory, 02777); + chmod($directory, 02777); + } } } \ No newline at end of file