add JSON support
This commit is contained in:
parent
b8603b717f
commit
d6841c02aa
12 changed files with 184 additions and 4 deletions
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 Trevor Slocum <trevor@rocketnine.space>
|
||||
Copyright (c) 2020 Trevor Slocum <trevor@rocketnine.space>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
31
imgboard.php
31
imgboard.php
|
@ -1,7 +1,29 @@
|
|||
<?php
|
||||
# TinyIB
|
||||
#
|
||||
# https://gitlab.com/tslocum/tinyib
|
||||
/*
|
||||
TinyIB <https://gitlab.com/tslocum/tinyib>
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Trevor Slocum <trevor@rocketnine.space>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set("display_errors", 1);
|
||||
|
@ -57,6 +79,9 @@ foreach ($writedirs as $dir) {
|
|||
}
|
||||
|
||||
$includes = array("inc/defines.php", "inc/functions.php", "inc/html.php");
|
||||
if (TINYIB_JSON) {
|
||||
$includes[] = 'inc/json.php';
|
||||
}
|
||||
if (in_array(TINYIB_DBMODE, array('flatfile', 'mysql', 'mysqli', 'sqlite', 'sqlite3', 'pdo'))) {
|
||||
$includes[] = 'inc/database_' . TINYIB_DBMODE . '.php';
|
||||
} else {
|
||||
|
|
|
@ -184,6 +184,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return convertPostsToSQLStyle($rows);
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
$rows = $GLOBALS['db']->selectWhere(POSTS_FILE, new SimpleWhereClause(POST_FILE_HEX, '=', $hex, STRING_COMPARISON), 1);
|
||||
return convertPostsToSQLStyle($rows);
|
||||
|
|
|
@ -105,6 +105,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return $posts;
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
$posts = array();
|
||||
$result = mysql_query("SELECT `id`, `parent` FROM `" . TINYIB_DBPOSTS . "` WHERE `file_hex` = '" . mysql_real_escape_string($hex) . "' AND `moderated` = 1 LIMIT 1");
|
||||
|
|
|
@ -117,6 +117,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return $posts;
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
global $link;
|
||||
$posts = array();
|
||||
|
|
|
@ -167,6 +167,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return $posts;
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
$posts = array();
|
||||
$results = pdoQuery("SELECT * FROM " . TINYIB_DBPOSTS . " WHERE file_hex = ? AND moderated = 1 LIMIT 1", array($hex));
|
||||
|
|
|
@ -118,6 +118,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return $posts;
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
$posts = array();
|
||||
$result = sqlite_fetch_all(sqlite_query($GLOBALS["db"], "SELECT id, parent FROM " . TINYIB_DBPOSTS . " WHERE file_hex = '" . sqlite_escape_string($hex) . "' LIMIT 1"), SQLITE_ASSOC);
|
||||
|
|
|
@ -130,6 +130,17 @@ function postsInThreadByID($id, $moderated_only = true) {
|
|||
return $posts;
|
||||
}
|
||||
|
||||
function imagesInThreadByID($id, $moderated_only = true) {
|
||||
$images = 0;
|
||||
$posts = postsInThreadByID($id, false);
|
||||
foreach ($posts as $post) {
|
||||
if ($post['file'] != '') {
|
||||
$images++;
|
||||
}
|
||||
}
|
||||
return $images;
|
||||
}
|
||||
|
||||
function postsByHex($hex) {
|
||||
global $db;
|
||||
$posts = array();
|
||||
|
|
|
@ -46,6 +46,9 @@ if (!defined('TINYIB_TIMEZONE')) {
|
|||
if (!defined('TINYIB_CATALOG')) {
|
||||
define('TINYIB_CATALOG', true);
|
||||
}
|
||||
if (!defined('TINYIB_JSON')) {
|
||||
define('TINYIB_JSON', true);
|
||||
}
|
||||
if (!defined('TINYIB_DBMIGRATE')) {
|
||||
define('TINYIB_DBMIGRATE', false);
|
||||
}
|
||||
|
|
|
@ -623,6 +623,10 @@ function rebuildIndexes() {
|
|||
$i = 0;
|
||||
$htmlposts = '';
|
||||
}
|
||||
|
||||
if (TINYIB_JSON) {
|
||||
writePage("res/" . $thread['id'] . '.json', buildThreadNoJSON($thread['id']));
|
||||
}
|
||||
}
|
||||
|
||||
if ($page == 0 || $htmlposts != '') {
|
||||
|
@ -633,6 +637,11 @@ function rebuildIndexes() {
|
|||
if (TINYIB_CATALOG) {
|
||||
rebuildCatalog();
|
||||
}
|
||||
|
||||
if (TINYIB_JSON) {
|
||||
writePage('threads.json', buildThreadsJSON());
|
||||
writePage('catalog.json', buildCatalogJSON());
|
||||
}
|
||||
}
|
||||
|
||||
function rebuildThread($id) {
|
||||
|
|
76
inc/json.php
Normal file
76
inc/json.php
Normal file
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
function buildThreadsJSON() {
|
||||
$output['threads'] = array();
|
||||
|
||||
$threads = allThreads();
|
||||
//$pages may be useful later, dismiss it for now
|
||||
//$pages = ceil(count($threads) / TINYIB_THREADSPERPAGE) - 1;
|
||||
|
||||
foreach ($threads as $thread) {
|
||||
array_push($output['threads'], array('id' => $thread['id'], 'subject' => $thread['subject'], 'bumped' => $thread['bumped']));
|
||||
}
|
||||
|
||||
$threads_json[] = $output;
|
||||
if (version_compare(phpversion(), '5.4.0', '>')) {
|
||||
return json_encode($threads_json, JSON_PRETTY_PRINT);
|
||||
} else {
|
||||
return json_encode($threads_json);
|
||||
}
|
||||
}
|
||||
|
||||
function buildCatalogJSON() {
|
||||
$output['threads'] = array();
|
||||
|
||||
$threads = allThreads();
|
||||
|
||||
foreach ($threads as $thread) {
|
||||
$replies = postsInThreadByID($thread['id']);
|
||||
$images = imagesInThreadByID($thread['id']);
|
||||
|
||||
if($thread['name'] == '') {
|
||||
array_push($output['threads'], array('id' => $thread['id'], 'parent' => $thread['parent'], 'timestamp' => $thread['timestamp'], 'bumped' => $thread['bumped'], 'name' => 'Anonymous', 'tripcode' => $thread['tripcode'], 'subject' => $thread['subject'], 'message' => $thread['message'], 'file' => $thread['file'], 'file_hex' => $thread['file_hex'], 'file_original' => $thread['file_original'], 'file_size' => $thread['file_size'], 'file_size_formated' => $thread['file_size_formatted'], 'image_width' => $thread['image_width'], 'image_height' => $thread['image_height'], 'thumb' => $thread['thumb'], 'thumb_width' => $thread['thumb_width'], 'thumb_height' => $thread['thumb_height'], 'stickied' => $thread['stickied'], 'moderated' => $thread['moderated'], 'locked' => $thread['locked'], 'replies' => count($replies) - 1, 'images' => $images));
|
||||
} else {
|
||||
array_push($output['threads'], array('id' => $thread['id'], 'parent' => $thread['parent'], 'timestamp' => $thread['timestamp'], 'bumped' => $thread['bumped'], 'name' => $thread['name'], 'tripcode' => $thread['tripcode'], 'subject' => $thread['subject'], 'message' => $thread['message'], 'file' => $thread['file'], 'file_hex' => $thread['file_hex'], 'file_original' => $thread['file_original'], 'file_size' => $thread['file_size'], 'file_size_formated' => $thread['file_size_formatted'], 'image_width' => $thread['image_width'], 'image_height' => $thread['image_height'], 'thumb' => $thread['thumb'], 'thumb_width' => $thread['thumb_width'], 'thumb_height' => $thread['thumb_height'], 'stickied' => $thread['stickied'], 'moderated' => $thread['moderated'], 'locked' => $thread['locked'], 'replies' => count($replies) - 1, 'images' => $images));
|
||||
}
|
||||
}
|
||||
|
||||
$threads_json[] = $output;
|
||||
if (version_compare(phpversion(), '5.4.0', '>')) {
|
||||
return json_encode($threads_json, JSON_PRETTY_PRINT);
|
||||
} else {
|
||||
return json_encode($threads_json);
|
||||
}
|
||||
}
|
||||
|
||||
function buildThreadNoJSON($id) {
|
||||
$output = array();
|
||||
|
||||
$threads = allThreads();
|
||||
|
||||
foreach ($threads as $thread) {
|
||||
$replies = postsInThreadByID($id);
|
||||
if($thread['parent'] == 0 && $thread['id'] == $id) {
|
||||
if($thread['name'] == '') {
|
||||
$output = array('posts' => [array('id' => $thread['id'], 'parent' => $thread['parent'], 'timestamp' => $thread['timestamp'], 'bumped' => $thread['bumped'], 'name' => 'Anonymous', 'tripcode' => $thread['tripcode'], 'subject' => $thread['subject'], 'message' => $thread['message'], 'file' => $thread['file'], 'file_hex' => $thread['file_hex'], 'file_original' => $thread['file_original'], 'file_size' => $thread['file_size'], 'file_size_formated' => $thread['file_size_formatted'], 'image_width' => $thread['image_width'], 'image_height' => $thread['image_height'], 'thumb' => $thread['thumb'], 'thumb_width' => $thread['thumb_width'], 'thumb_height' => $thread['thumb_height'], 'stickied' => $thread['stickied'], 'moderated' => $thread['moderated'], 'locked' => $thread['locked'])]);
|
||||
} else {
|
||||
$output = array('posts' => [array('id' => $thread['id'], 'parent' => $thread['parent'], 'timestamp' => $thread['timestamp'], 'bumped' => $thread['bumped'], 'name' => $thread['name'], 'tripcode' => $thread['tripcode'], 'subject' => $thread['subject'], 'message' => $thread['message'], 'file' => $thread['file'], 'file_hex' => $thread['file_hex'], 'file_original' => $thread['file_original'], 'file_size' => $thread['file_size'], 'file_size_formated' => $thread['file_size_formatted'], 'image_width' => $thread['image_width'], 'image_height' => $thread['image_height'], 'thumb' => $thread['thumb'], 'thumb_width' => $thread['thumb_width'], 'thumb_height' => $thread['thumb_height'], 'stickied' => $thread['stickied'], 'moderated' => $thread['moderated'], 'locked' => $thread['locked'])]);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($replies as $reply) {
|
||||
if($reply['parent'] == $id) {
|
||||
if($thread['name'] == '') {
|
||||
array_push($output['posts'], array('id' => $reply['id'], 'parent' => $reply['parent'], 'timestamp' => $reply['timestamp'], 'bumped' => $reply['bumped'], 'name' => 'Anonymous', 'tripcode' => $reply['tripcode'], 'subject' => $reply['subject'], 'message' => $reply['message'], 'file' => $reply['file'], 'file_hex' => $reply['file_hex'], 'file_original' => $reply['file_original'], 'file_size' => $reply['file_size'], 'file_size_formated' => $reply['file_size_formatted'], 'image_width' => $reply['image_width'], 'image_height' => $reply['image_height'], 'thumb' => $reply['thumb'], 'thumb_width' => $reply['thumb_width'], 'thumb_height' => $reply['thumb_height'], 'moderated' => $reply['moderated']));
|
||||
} else {
|
||||
array_push($output['posts'], array('id' => $reply['id'], 'parent' => $reply['parent'], 'timestamp' => $reply['timestamp'], 'bumped' => $reply['bumped'], 'name' => $reply['name'], 'tripcode' => $reply['tripcode'], 'subject' => $reply['subject'], 'message' => $reply['message'], 'file' => $reply['file'], 'file_hex' => $reply['file_hex'], 'file_original' => $reply['file_original'], 'file_size' => $reply['file_size'], 'file_size_formated' => $reply['file_size_formatted'], 'image_width' => $reply['image_width'], 'image_height' => $reply['image_height'], 'thumb' => $reply['thumb'], 'thumb_width' => $reply['thumb_width'], 'thumb_height' => $reply['thumb_height'], 'moderated' => $reply['moderated']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (version_compare(phpversion(), '5.4.0', '>')) {
|
||||
return json_encode($output, JSON_PRETTY_PRINT);
|
||||
} else {
|
||||
return json_encode($output);
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ define('TINYIB_TRUNCATE', 15); // Messages are truncated to this many lin
|
|||
define('TINYIB_WORDBREAK', 80); // Words longer than this many characters will be broken apart [0 to disable]
|
||||
define('TINYIB_TIMEZONE', 'UTC'); // See https://secure.php.net/manual/en/timezones.php - e.g. America/Los_Angeles
|
||||
define('TINYIB_CATALOG', true); // Generate catalog page
|
||||
define('TINYIB_JSON', true); // Write JSON files (threads.json, catalog.json, etc.)
|
||||
$tinyib_hidefieldsop = array(); // Fields to hide when creating a new thread - e.g. array('name', 'email', 'subject', 'message', 'file', 'embed', 'password')
|
||||
$tinyib_hidefields = array(); // Fields to hide when replying
|
||||
|
||||
|
|
Loading…
Reference in a new issue