init 4chan
This commit is contained in:
commit
c850337f1e
390 changed files with 195936 additions and 0 deletions
161
plugins/broomcloset.php
Normal file
161
plugins/broomcloset.php
Normal file
|
@ -0,0 +1,161 @@
|
|||
<?php
|
||||
// broom closet - yotsuba plugin
|
||||
// implementation of janitor discussion system.
|
||||
|
||||
/* Features:
|
||||
* - "latest" mode - display last post number, etc, so that it can be polled by a script.
|
||||
* - force posting with logged-in moderator/janitor name.
|
||||
* - never expire posts.
|
||||
* - allow no-file posts.
|
||||
* - emit PHP instead of html in order to do admin-validation checking.
|
||||
* - give everyone a capcode, and give janitors a tooltip saying which board they're in charge of.
|
||||
*/
|
||||
|
||||
// Config enforcement... (too late to change it now)
|
||||
if( NO_TEXTONLY == 1 ) die( 'Config NO_TEXTONLY should be turned off!' );
|
||||
if( PHP_EXT == '.html' ) die( 'Config PHP_EXT should end in .php!' );
|
||||
if( PAGE_MAX > 0 ) die( 'Config PAGE_MAX should be 0!' );
|
||||
|
||||
|
||||
/* register_callback('mode_default_case', 'broomcloset_mode');
|
||||
register_callback('regist_before', 'broomcloset_regist');
|
||||
register_callback('trim_db_before', 'broomcloset_trim');
|
||||
register_callback('head_before', 'broomcloset_head');
|
||||
register_callback('form_after', 'broomcloset_form');
|
||||
register_callback('post_before', 'broomcloset_post');
|
||||
register_callback('capcode', 'broomcloset_capcode');
|
||||
*/
|
||||
|
||||
// add the 'latest' mode
|
||||
function broomcloset_latest()
|
||||
{
|
||||
//if (!valid('janitor_board')) die('');
|
||||
$query = mysql_board_call( "SELECT * FROM `" . SQLLOG . "` ORDER BY no DESC LIMIT 1" );
|
||||
if( $row = mysql_fetch_assoc( $query ) ) {
|
||||
foreach( $row as &$val ) $val = addslashes( $val );
|
||||
echo <<<EOJSON
|
||||
{"no":{$row['no']}}
|
||||
EOJSON;
|
||||
}
|
||||
die( '' );
|
||||
}
|
||||
|
||||
function refresh_mod_cache()
|
||||
{
|
||||
global $mod_cache;
|
||||
|
||||
if( !isset( $mod_cache ) ) {
|
||||
$admin_salt = file_get_contents('/www/keys/2014_admin.salt');
|
||||
|
||||
if (!$admin_salt) {
|
||||
die('Internal Server Error (rmc0)');
|
||||
}
|
||||
|
||||
$query = mysql_global_call( "SELECT id,username,allow,level from mod_users" );
|
||||
$mod_cache = array();
|
||||
while( list( $id, $username, $allow, $level ) = mysql_fetch_row( $query ) ) {
|
||||
if( $allow ) {
|
||||
$hashed_bits = hash_hmac('sha256', $username, $admin_salt, true);
|
||||
|
||||
$username = base64_encode($hashed_bits);
|
||||
|
||||
$mod_cache[$username] = array();
|
||||
|
||||
$board = '';
|
||||
|
||||
if( $level == 'janitor' ) {
|
||||
$level = 'Janitor';
|
||||
$color = '#4169E1';
|
||||
$board = str_replace( ',janitor', '', $allow );
|
||||
} elseif( $id == 2 ) {
|
||||
$level = 'Admin';
|
||||
$color = '#FF0000';
|
||||
} elseif( $level == 'manager' ) { // disabled until mootapproval
|
||||
$level = 'Manager';
|
||||
$color = '#FF0080';
|
||||
} else {
|
||||
$level = 'Mod';
|
||||
$color = '#800080';
|
||||
}
|
||||
|
||||
$mod_cache[$username]['level'] = $level;
|
||||
$mod_cache[$username]['color'] = $color;
|
||||
$mod_cache[$username]['id'] = $id;
|
||||
|
||||
if( $board )
|
||||
$mod_cache[$username]['board'] = $board;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function broomcloset_name( $name )
|
||||
{
|
||||
global $mod_cache;
|
||||
refresh_mod_cache();
|
||||
|
||||
if( !isset( $mod_cache[$name] ) ) { // user not found
|
||||
return 'Anonymous';
|
||||
}
|
||||
|
||||
return 'Anonymous ## ' . $mod_cache[$name]['level'];
|
||||
}
|
||||
|
||||
|
||||
function broomcloset_style( $name )
|
||||
{
|
||||
global $mod_cache;
|
||||
refresh_mod_cache();
|
||||
|
||||
if( !isset( $mod_cache[$name] ) ) { // user not found
|
||||
return ' style="color:#aaa"';
|
||||
}
|
||||
|
||||
if( $mod_cache[$name]['board'] ) {
|
||||
$tooltip = " style='color: {$mod_cache[$name]['color']}'";
|
||||
} else {
|
||||
$tooltip = " style='color: {$mod_cache[$name]['color']}'";
|
||||
}
|
||||
|
||||
return $tooltip;
|
||||
}
|
||||
|
||||
// auto-set name
|
||||
function broomcloset_new_post( $caller )
|
||||
{
|
||||
// set textonly to 1 - this is ok even if they're posting a picture
|
||||
// now imgboard won't complain about no picture EVER
|
||||
$caller['textonly'] = 1;
|
||||
|
||||
$caller['name'] = $_COOKIE['4chan_auser'];
|
||||
if( !has_level( 'janitor' ) ) die;
|
||||
}
|
||||
|
||||
function broomcloset_form( $dat )
|
||||
{ // modify the form to hide name, email, and textonly
|
||||
$newform = str_replace( '<tr><td></td><td class="postblock" align="left"><b>Name</b></td><td><input type=text name=name size="28"><span id="tdname"></span></td></tr>', '<input type=hidden name=name>', $dat );
|
||||
$newform = str_replace( '<tr><td></td><td class="postblock" align="left"><b>E-mail</b></td><td><input type=text name=email size="28"><span id="tdemail"></span></td></tr>', '<input type=hidden name=email>', $newform );
|
||||
$newform = str_replace( '[<label><input type=checkbox name=textonly value=on>No File</label>]', '', $newform );
|
||||
$newform = str_replace( 'name=sub size="35">', 'name=sub size="35"><span id="tdname"></span><span id="tdemail"></span>', $newform ); // move admin ext. placeholders next to subject
|
||||
return $newform;
|
||||
}
|
||||
|
||||
// this function is last because it screws up syntax coloring in my editor :(
|
||||
function broomcloset_head( $dat )
|
||||
{
|
||||
$dat .= <<<'BUTTCODE'
|
||||
<?php if( !isset( $_COOKIE['4chan_auser'] ) || !isset( $_COOKIE['apass'] ) ) { http_response_code(403); die(); }
|
||||
|
||||
require_once 'lib/admin.php';
|
||||
require_once 'lib/auth.php';
|
||||
|
||||
header('Content-Security-Policy: connect-src *.4chan.org *.4cdn.org');
|
||||
header('X-Content-Security-Policy: connect-src *.4chan.org *.4cdn.org');
|
||||
|
||||
auth_user();
|
||||
|
||||
if( !has_level('janitor') ) { http_response_code(403); die(); } ?>
|
||||
BUTTCODE;
|
||||
|
||||
return $dat;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue