Merge branch 'master' of github.com:savetheinternet/Tinyboard

Conflicts:
	inc/config.php
	inc/functions.php
	post.php
This commit is contained in:
Savetheinternet 2010-11-05 01:35:53 +11:00
commit 599530e935
8 changed files with 185 additions and 86 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
# static html
*.html
# directories
res/
src/
thumb/
# instance-config
inc/instance-config.php

View File

@ -1,45 +1,46 @@
# Tinyboard - A lightweight PHP imageboard. # Tinyboard - A lightweight PHP imageboard.
## About ## 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 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. Tinyboard is not currently at a stable state.
[o]: http://omegadev.org/ [o]: http://omegadev.org/
## Installation ## Installation
1. Tinyboard requires a MySQL database and a user to work. Create one. 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. 2. Import 'install.sql' into the database. There are several ways to do this.
- using phpMyAdmin - using phpMyAdmin
- `mysql -uUSERNAME -pPASSWORD DATABASE < install.sql` - `mysql -uUSERNAME -pPASSWORD DATABASE < install.sql`
3. Edit '[inc/config.php][c]' to suit your installation 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. 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: The default directories are:
- ./res - ./res
- ./src - ./src
- ./thumb - ./thumb
- . (document root) - . (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. 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. 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]. 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 [t]: http://github.com/savetheinternet/Tinyboard/blob/master/test.php
[p]: http://github.com/savetheinternet/Tinyboard/blob/master/post.php [p]: http://github.com/savetheinternet/Tinyboard/blob/master/post.php
[c]: http://github.com/savetheinternet/Tinyboard/blob/master/inc/config.php [c]: http://github.com/savetheinternet/Tinyboard/blob/master/inc/config.php
[i]: http://github.com/savetheinternet/Tinyboard/blob/master/install.sql [i]: http://github.com/savetheinternet/Tinyboard/blob/master/install.sql
[r]: http://github.com/savetheinternet/Tinyboard/blob/master/README.md [r]: http://github.com/savetheinternet/Tinyboard/blob/master/README.md
## License ## License
Copyright (c) 2010 by Omega Software Development Group Copyright (c) 2010 by Omega Software Development Group
Permission to use, copy, modify, and/or distribute this software for any 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 purpose with or without fee is hereby granted, provided that the above copyright
notice and this permission notice appear in all copies. notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -1,36 +1,46 @@
<?php <?php
/*
* WARNING: This is a project-wide configuration file shared by all Tinyboard users around the globe.
* If you would like to make instance-specific changes to your own setup, please use instance-config.php.
*
* This is the default configuration. You can copy values from here and use them in
* your instance-config.php
*
*/
// Database stuff // Database stuff
define('MY_SERVER', 'localhost'); define('MY_SERVER', 'localhost', true);
define('MY_USER', ''); define('MY_USER', '', true);
define('MY_PASSWORD', ''); define('MY_PASSWORD', '', true);
define('MY_DATABASE', ''); define('MY_DATABASE', '', true);
// The name of the session cookie (PHP's $_SESSION) // The name of the session cookie (PHP's $_SESSION)
define('SESS_COOKIE', 'imgboard'); define('SESS_COOKIE', 'imgboard', true);
// Used to safely determine when the user was first seen, to prevent floods. // Used to safely determine when the user was first seen, to prevent floods.
// time() // time()
define('TIME_COOKIE', 'arrived'); define('TIME_COOKIE', 'arrived', true);
// HASH_COOKIE contains an MD5 hash of TIME_COOKIE+SALT for verification. // HASH_COOKIE contains an MD5 hash of TIME_COOKIE+SALT for verification.
define('HASH_COOKIE', 'hash'); define('HASH_COOKIE', 'hash', true);
// How long should the cookies last (in seconds) // How long should the cookies last (in seconds)
define('COOKIE_EXPIRE', 15778463); //6 months define('COOKIE_EXPIRE', 15778463, true); //6 months
define('SALT', 'wefaw98YHEWUFuo'); define('SALT', 'wefaw98YHEWUFuo', true);
// How many seconds before you can post, after the first visit // How many seconds before you can post, after the first visit
define('LURKTIME', 30); define('LURKTIME', 30, true);
// Max body length // Max body length
define('MAX_BODY', 1800); define('MAX_BODY', 1800, true);
define('THREADS_PER_PAGE', 10); define('THREADS_PER_PAGE', 10, true);
define('MAX_PAGES', 5); define('MAX_PAGES', 5, true);
define('THREADS_PREVIEW', 5); define('THREADS_PREVIEW', 5, true);
// Error messages // Error messages
<<<<<<< HEAD
define('ERROR_LURK', 'Lurk some more before posting.'); define('ERROR_LURK', 'Lurk some more before posting.');
define('ERROR_BOT', 'You look like a bot.'); define('ERROR_BOT', 'You look like a bot.');
define('ERROR_TOOLONG', 'The %s field was too long.'); define('ERROR_TOOLONG', 'The %s field was too long.');
@ -42,16 +52,33 @@
define('ERR_INVALIDIMG','Invalid image.'); define('ERR_INVALIDIMG','Invalid image.');
define('ERR_FILESIZE', 'Maximum file size: %maxsz% bytes<br>Your file\'s size: %filesz% bytes'); define('ERR_FILESIZE', 'Maximum file size: %maxsz% bytes<br>Your file\'s size: %filesz% bytes');
define('ERR_MAXSIZE', 'The file was too big.'); 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<br>Your file\'s size: %filesz% bytes', true);
define('ERR_MAXSIZE', 'The file was too big.', true);
>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89
// For resizing, max values // For resizing, max values
define('THUMB_WIDTH', 200); define('THUMB_WIDTH', 200, true);
define('THUMB_HEIGHT', 200); define('THUMB_HEIGHT', 200, true);
// Maximum image upload size in bytes // Maximum image upload size in bytes
define('MAX_FILESIZE', 1048576); // 10MB define('MAX_FILESIZE', 10*1024*1024, true); // 10MB
// Maximum image dimensions // Maximum image dimensions
define('MAX_WIDTH', 10000); define('MAX_WIDTH', 10000, true);
define('MAX_HEIGHT', MAX_WIDTH); define('MAX_HEIGHT', MAX_WIDTH, true);
define('ALLOW_ZIP', true, true);
define('ZIP_IMAGE', 'src/zip.png', true);
define('ALLOW_ZIP', true); define('ALLOW_ZIP', true);
define('ZIP_IMAGE', 'src/zip.png'); define('ZIP_IMAGE', 'src/zip.png');
@ -61,44 +88,54 @@
Redraw the image using GD functions to strip any excess data (commonly ZIP archives) Redraw the image using GD functions to strip any excess data (commonly ZIP archives)
WARNING: Very beta. Currently strips animated GIFs too :( WARNING: Very beta. Currently strips animated GIFs too :(
**/ **/
define('REDRAW_IMAGE', true); define('REDRAW_IMAGE', false, true);
// Redrawing configuration // Redrawing configuration
define('JPEG_QUALITY', 100); define('JPEG_QUALITY', 100, true);
define('REDRAW_GIF', false); define('REDRAW_GIF', false, true);
// Display the aspect ratio in a post's file info // Display the aspect ratio in a post's file info
<<<<<<< HEAD
define('SHOW_RATIO', true); define('SHOW_RATIO', true);
=======
define('SHOW_RATIO', true, true);
>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89
define('DIR_IMG', 'src/'); define('DIR_IMG', 'src/', true);
define('DIR_THUMB', 'thumb/'); define('DIR_THUMB', 'thumb/', true);
define('DIR_RES', 'res/'); define('DIR_RES', 'res/', true);
// The root directory, including the trailing slash, for Tinyboard. // The root directory, including the trailing slash, for Tinyboard.
// examples: '/', '/board/', '/chan/' // examples: '/', '/board/', '/chan/'
define('ROOT', '/'); define('ROOT', '/', true);
define('POST_URL', ROOT . 'post.php'); define('POST_URL', ROOT . 'post.php', true);
define('FILE_INDEX', 'index.html'); define('FILE_INDEX', 'index.html', true);
define('FILE_PAGE', '%d.html'); define('FILE_PAGE', '%d.html', true);
// Automatically convert things like "..." to Unicode characters ("<22>") // Automatically convert things like "..." to Unicode characters ("<22>")
define('AUTO_UNICODE', true); define('AUTO_UNICODE', true, true);
// Whether to turn URLs into functional links // Whether to turn URLs into functional links
define('MARKUP_URLS', true); define('MARKUP_URLS', true, true);
define('URL_REGEX', '/' . '(https?|ftp):\/\/' . '([\w\-]+\.)+[a-zA-Z]{2,6}' . '(\/([\w\-~\.#\/?=&;:+%]+))?' . '/'); define('URL_REGEX', '/' . '(https?|ftp):\/\/' . '([\w\-]+\.)+[a-zA-Z]{2,6}' . '(\/([\w\-~\.#\/?=&;:+%]+))?' . '/', true);
// Allowed file extensions // 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_NEWTOPIC', 'New Topic', true);
define('BUTTON_REPLY', 'New Reply'); 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')) { 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_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_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_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
} }
?> ?>

View File

@ -14,8 +14,21 @@
return round($size, 2).$units[$i]; 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) { function error($message) {
die(Element('page.html', Array('index' => ROOT, 'title'=>'Error', 'subtitle'=>'An error has occured.', 'body'=>"<h1>$message</h1><p style=\"text-align:center;\"><a href=\"" . ROOT . FILE_INDEX . "\">Go back</a>.</p>"))); die(Element('page.html', Array(
'index'=>ROOT,
'title'=>'Error',
'subtitle'=>'An error has occured.',
'body'=>"<center>" .
"<h2>$message</h2>" .
"<p><a href=\"" . ROOT . FILE_INDEX . "\">Go back</a>.</p>" .
"</center>"
)));
} }
class Post { class Post {
@ -180,4 +193,5 @@
return $built; return $built;
} }
}; };
?> ?>

View File

@ -3,16 +3,23 @@
$replaces = array(); $replaces = array();
foreach($vars as $k => $v) { foreach($vars as $k => $v) {
$replaces[$delim . $k . $delim] = $v; $replaces[$delim . $k . $delim] = $v;
<<<<<<< HEAD
} }
=======
}
>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89
return str_replace(array_keys($replaces), return str_replace(array_keys($replaces),
array_values($replaces), $str); array_values($replaces), $str);
} }
<<<<<<< HEAD
function commaize($n) { function commaize($n) {
$n = strval($n); $n = strval($n);
return (intval($n) < 1000) ? $n : commaize(substr($n, 0, -3)) . ',' . substr($n, -3); return (intval($n) < 1000) ? $n : commaize(substr($n, 0, -3)) . ',' . substr($n, -3);
} }
=======
>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89
function sql_open() { function sql_open() {
global $sql; global $sql;
$sql = @mysql_connect(MY_SERVER, MY_USER, MY_PASSWORD) or error('Database error.'); $sql = @mysql_connect(MY_SERVER, MY_USER, MY_PASSWORD) or error('Database error.');
@ -568,4 +575,5 @@
function int_to_word($n) { function int_to_word($n) {
return chr($n & 255).chr(($n >> 8) & 255); return chr($n & 255).chr(($n >> 8) & 255);
} }
?> ?>

19
inc/instance-config.php Normal file
View File

@ -0,0 +1,19 @@
<?php
/*
* Instance Configuration
* ----------------------
* Edit this file and not config.php for imageboard configuration.
*
* You can copy values from config.php (defaults) and paste them here.
*/
/*
define('MY_SERVER', 'localhost', true);
define('MY_USER', '', true);
define('MY_PASSWORD', '', true);
define('MY_DATABASE', '', true);
// define('FOO', 'bar');
*/
?>

View File

@ -2,6 +2,9 @@
require 'inc/functions.php'; require 'inc/functions.php';
require 'inc/display.php'; require 'inc/display.php';
require 'inc/template.php'; require 'inc/template.php';
if (file_exists('inc/instance-config.php')) {
require 'inc/instance-config.php';
}
require 'inc/config.php'; require 'inc/config.php';
require 'inc/user.php'; require 'inc/user.php';
@ -78,7 +81,11 @@
$size = $_FILES['file']['size']; $size = $_FILES['file']['size'];
if($size > MAX_FILESIZE) if($size > MAX_FILESIZE)
error(sprintf3(ERR_FILESIZE, array( error(sprintf3(ERR_FILESIZE, array(
<<<<<<< HEAD
'sz'=>commaize($size), 'sz'=>commaize($size),
=======
'filesz'=>commaize($size),
>>>>>>> 6cdaed486e6c373b52f639d3e92d7365242f6a89
'maxsz'=>commaize(MAX_FILESIZE)))); 'maxsz'=>commaize(MAX_FILESIZE))));
} }

View File

@ -4,6 +4,9 @@
require 'inc/functions.php'; require 'inc/functions.php';
require 'inc/display.php'; require 'inc/display.php';
require 'inc/template.php'; require 'inc/template.php';
if (file_exists('inc/instance-config.php')) {
require 'inc/instance-config.php';
}
require 'inc/config.php'; require 'inc/config.php';
require 'inc/user.php'; require 'inc/user.php';