diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8108863c --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# static html +*.html + +# directories +res/ +src/ +thumb/ + +# instance-config +inc/instance-config.php \ No newline at end of file diff --git a/README.md b/README.md index 3c9a6bf3..815e3a4a 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,46 @@ -# Tinyboard - A lightweight PHP imageboard. - -## About -Tinyboard is an imageboard software package written in PHP. It aims to maintain a stable, fast, clean and user-friendly engine for imageboards. Development for Tinyboard started in October 2010 and the project is being lead by [OmegaSDG][o] ("Omega Software Develop Group"). You can contact the development team over IRC at irc.n0v4.com #tinyboard. - -Tinyboard is not currently at a stable state. - -[o]: http://omegadev.org/ - -## Installation - 1. Tinyboard requires a MySQL database and a user to work. Create one. - 2. Import 'install.sql' into the database. There are several ways to do this. - - using phpMyAdmin - - `mysql -uUSERNAME -pPASSWORD DATABASE < install.sql` - 3. Edit '[inc/config.php][c]' to suit your installation - 4. Make sure that the directories used by Tinyboard are writable. Depending on your setup, you may need to `chmod` the directories to 777. - The default directories are: - - ./res - - ./src - - ./thumb - - . (document root) - 5. Ensure everything is okay by running [test.php][t] in a browser. The script will try and help you correct your errors. - 6. Run the [post.php][p] script. It should create an index.html and redirect you to it if everything is okay. - 7. Optional (highly recommended): Either delete or chmod as unreadable the following files: [test.php][t], [install.sql][i], and this [README][r]. - -[t]: http://github.com/savetheinternet/Tinyboard/blob/master/test.php -[p]: http://github.com/savetheinternet/Tinyboard/blob/master/post.php -[c]: http://github.com/savetheinternet/Tinyboard/blob/master/inc/config.php -[i]: http://github.com/savetheinternet/Tinyboard/blob/master/install.sql -[r]: http://github.com/savetheinternet/Tinyboard/blob/master/README.md - -## License -Copyright (c) 2010 by Omega Software Development Group - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file +# Tinyboard - A lightweight PHP imageboard. + +## About +Tinyboard is an imageboard software package written in PHP. It aims to maintain a stable, fast, clean and user-friendly engine for imageboards. Development for Tinyboard started in October 2010 and the project is being lead by [OmegaSDG][o] ("Omega Software Develop Group"). You can contact the development team over IRC at irc.n0v4.com #tinyboard. + +Tinyboard is not currently at a stable state. + +[o]: http://omegadev.org/ + +## Installation + 1. Tinyboard requires a MySQL database and a user to work. Create one. + 2. Import 'install.sql' into the database. There are several ways to do this. + - using phpMyAdmin + - `mysql -uUSERNAME -pPASSWORD DATABASE < install.sql` + 3. Edit 'instance-config.php' to suit your installation. You should copy some values from '[inc/config.php][c]' to redefine them in the instance-config. + 4. Make sure that the directories used by Tinyboard are writable. Depending on your setup, you may need to `chmod` the directories to 777. + The default directories are: + - ./res + - ./src + - ./thumb + - . (document root) + 5. Ensure everything is okay by running [test.php][t] in a browser. The script will try and help you correct your errors. + 6. Run the [post.php][p] script. It should create an index.html and redirect you to it if everything is okay. + 7. Optional (highly recommended): Either delete or chmod as unreadable the following files: [test.php][t], [install.sql][i], and this [README][r]. + +[t]: http://github.com/savetheinternet/Tinyboard/blob/master/test.php +[p]: http://github.com/savetheinternet/Tinyboard/blob/master/post.php +[c]: http://github.com/savetheinternet/Tinyboard/blob/master/inc/config.php +[i]: http://github.com/savetheinternet/Tinyboard/blob/master/install.sql +[r]: http://github.com/savetheinternet/Tinyboard/blob/master/README.md + +## License +Copyright (c) 2010 by Omega Software Development Group + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/inc/config.php b/inc/config.php index 24c84fbb..6f07e640 100644 --- a/inc/config.php +++ b/inc/config.php @@ -1,36 +1,46 @@ Your file\'s size: %filesz% bytes'); define('ERR_MAXSIZE', 'The file was too big.'); +======= + define('ERROR_LURK', 'Lurk some more before posting.', true); + define('ERROR_BOT', 'You look like a bot.', true); + define('ERROR_TOOLONG', 'The %s field was too long.', true); + define('ERROR_TOOLONGBODY', 'The body was too long.', true); + define('ERROR_TOOSHORTBODY', 'The body was too short or empty.', true); + define('ERROR_NOIMAGE', 'You must upload an image.', true); + define('ERROR_NOMOVE', 'The server failed to handle your upload.', true); + define('ERROR_FILEEXT', 'Unsupported image format.', true); + define('ERR_INVALIDIMG','Invalid image.', true); + define('ERR_FILESIZE', 'Maximum file size: %maxsz% bytes
Your file\'s size: %filesz% bytes', true); + define('ERR_MAXSIZE', 'The file was too big.', true); +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 // For resizing, max values - define('THUMB_WIDTH', 200); - define('THUMB_HEIGHT', 200); + define('THUMB_WIDTH', 200, true); + define('THUMB_HEIGHT', 200, true); // Maximum image upload size in bytes - define('MAX_FILESIZE', 1048576); // 10MB + define('MAX_FILESIZE', 10*1024*1024, true); // 10MB // Maximum image dimensions - define('MAX_WIDTH', 10000); - define('MAX_HEIGHT', MAX_WIDTH); + define('MAX_WIDTH', 10000, true); + define('MAX_HEIGHT', MAX_WIDTH, true); + + define('ALLOW_ZIP', true, true); + define('ZIP_IMAGE', 'src/zip.png', true); + define('ALLOW_ZIP', true); define('ZIP_IMAGE', 'src/zip.png'); @@ -61,44 +88,54 @@ Redraw the image using GD functions to strip any excess data (commonly ZIP archives) WARNING: Very beta. Currently strips animated GIFs too :( **/ - define('REDRAW_IMAGE', true); + define('REDRAW_IMAGE', false, true); // Redrawing configuration - define('JPEG_QUALITY', 100); - define('REDRAW_GIF', false); + define('JPEG_QUALITY', 100, true); + define('REDRAW_GIF', false, true); // Display the aspect ratio in a post's file info +<<<<<<< HEAD define('SHOW_RATIO', true); +======= + define('SHOW_RATIO', true, true); +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 - define('DIR_IMG', 'src/'); - define('DIR_THUMB', 'thumb/'); - define('DIR_RES', 'res/'); + define('DIR_IMG', 'src/', true); + define('DIR_THUMB', 'thumb/', true); + define('DIR_RES', 'res/', true); // The root directory, including the trailing slash, for Tinyboard. // examples: '/', '/board/', '/chan/' - define('ROOT', '/'); - define('POST_URL', ROOT . 'post.php'); - define('FILE_INDEX', 'index.html'); - define('FILE_PAGE', '%d.html'); + define('ROOT', '/', true); + define('POST_URL', ROOT . 'post.php', true); + define('FILE_INDEX', 'index.html', true); + define('FILE_PAGE', '%d.html', true); // Automatically convert things like "..." to Unicode characters ("�") - define('AUTO_UNICODE', true); + define('AUTO_UNICODE', true, true); // Whether to turn URLs into functional links - define('MARKUP_URLS', true); - define('URL_REGEX', '/' . '(https?|ftp):\/\/' . '([\w\-]+\.)+[a-zA-Z]{2,6}' . '(\/([\w\-~\.#\/?=&;:+%]+))?' . '/'); + define('MARKUP_URLS', true, true); + define('URL_REGEX', '/' . '(https?|ftp):\/\/' . '([\w\-]+\.)+[a-zA-Z]{2,6}' . '(\/([\w\-~\.#\/?=&;:+%]+))?' . '/', true); // Allowed file extensions - $allowed_ext = Array('jpg', 'jpeg', 'bmp', 'gif', 'png'); + $allowed_ext = Array('jpg', 'jpeg', 'bmp', 'gif', 'png', true); - define('BUTTON_NEWTOPIC', 'New Topic'); - define('BUTTON_REPLY', 'New Reply'); + define('BUTTON_NEWTOPIC', 'New Topic', true); + define('BUTTON_REPLY', 'New Reply', true); - define('ALWAYS_NOKO', false); + define('ALWAYS_NOKO', false, true); - define('URL_MATCH', '/^' . (@$_SERVER['HTTPS']?'https':'http').':\/\/'.$_SERVER['HTTP_HOST'] . '(' . preg_quote(ROOT, '/') . '|' . preg_quote(ROOT, '/') . '' . preg_quote(FILE_INDEX, '/') . '|' . preg_quote(ROOT, '/') . '' . str_replace('%d', '\d+', preg_quote(FILE_PAGE, '/')) . ')$/'); + define('URL_MATCH', '/^' . (@$_SERVER['HTTPS']?'https':'http').':\/\/'.$_SERVER['HTTP_HOST'] . '(' . preg_quote(ROOT, '/') . '|' . preg_quote(ROOT, '/') . '' . preg_quote(FILE_INDEX, '/') . '|' . preg_quote(ROOT, '/') . '' . str_replace('%d', '\d+', preg_quote(FILE_PAGE, '/')) . ')$/', true); if(!defined('IS_INSTALLATION')) { +<<<<<<< HEAD if(!file_exists(DIR_IMG)) @mkdir(DIR_IMG) or error("Couldn't create " . DIR_IMG . ". Install manually."); if(!file_exists(DIR_THUMB)) @mkdir(DIR_THUMB) or error("Couldn't create " . DIR_IMG . ". Install manually."); if(!file_exists(DIR_RES)) @mkdir(DIR_RES) or error("Couldn't create " . DIR_IMG . ". Install manually."); +======= + if(!file_exists(DIR_IMG)) @mkdir(DIR_IMG) or error("Couldn't create " . DIR_IMG . ". Install manually.", true); + if(!file_exists(DIR_THUMB)) @mkdir(DIR_THUMB) or error("Couldn't create " . DIR_IMG . ". Install manually.", true); + if(!file_exists(DIR_RES)) @mkdir(DIR_RES) or error("Couldn't create " . DIR_IMG . ". Install manually.", true); +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 } -?> \ No newline at end of file +?> diff --git a/inc/display.php b/inc/display.php index b988e3bc..132dcac5 100644 --- a/inc/display.php +++ b/inc/display.php @@ -14,8 +14,21 @@ return round($size, 2).$units[$i]; } + function commaize($n) { + $n = strval($n); + return (intval($n) < 1000) ? $n : commaize(substr($n, 0, -3)) . ',' . substr($n, -3); + } + function error($message) { - die(Element('page.html', Array('index' => ROOT, 'title'=>'Error', 'subtitle'=>'An error has occured.', 'body'=>"

$message

Go back.

"))); + die(Element('page.html', Array( + 'index'=>ROOT, + 'title'=>'Error', + 'subtitle'=>'An error has occured.', + 'body'=>"
" . + "

$message

" . + "

Go back.

" . + "
" + ))); } class Post { @@ -180,4 +193,5 @@ return $built; } }; -?> \ No newline at end of file +?> + diff --git a/inc/functions.php b/inc/functions.php index 237a7724..58a88e0b 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -3,16 +3,23 @@ $replaces = array(); foreach($vars as $k => $v) { $replaces[$delim . $k . $delim] = $v; +<<<<<<< HEAD } +======= + } +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 return str_replace(array_keys($replaces), array_values($replaces), $str); } +<<<<<<< HEAD function commaize($n) { $n = strval($n); return (intval($n) < 1000) ? $n : commaize(substr($n, 0, -3)) . ',' . substr($n, -3); } +======= +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 function sql_open() { global $sql; $sql = @mysql_connect(MY_SERVER, MY_USER, MY_PASSWORD) or error('Database error.'); @@ -568,4 +575,5 @@ function int_to_word($n) { return chr($n & 255).chr(($n >> 8) & 255); } -?> \ No newline at end of file +?> + diff --git a/inc/instance-config.php b/inc/instance-config.php new file mode 100644 index 00000000..7655d344 --- /dev/null +++ b/inc/instance-config.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/post.php b/post.php index e4303fca..a69c7c8e 100644 --- a/post.php +++ b/post.php @@ -2,6 +2,9 @@ require 'inc/functions.php'; require 'inc/display.php'; require 'inc/template.php'; + if (file_exists('inc/instance-config.php')) { + require 'inc/instance-config.php'; + } require 'inc/config.php'; require 'inc/user.php'; @@ -78,7 +81,11 @@ $size = $_FILES['file']['size']; if($size > MAX_FILESIZE) error(sprintf3(ERR_FILESIZE, array( +<<<<<<< HEAD 'sz'=>commaize($size), +======= + 'filesz'=>commaize($size), +>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89 'maxsz'=>commaize(MAX_FILESIZE)))); } diff --git a/test.php b/test.php index 0cab3ac6..73a4a0d8 100644 --- a/test.php +++ b/test.php @@ -4,6 +4,9 @@ require 'inc/functions.php'; require 'inc/display.php'; require 'inc/template.php'; + if (file_exists('inc/instance-config.php')) { + require 'inc/instance-config.php'; + } require 'inc/config.php'; require 'inc/user.php';