mirror of
https://github.com/vichan-devel/vichan.git
synced 2024-11-28 01:10:51 +01:00
Mod controls and permissions
This commit is contained in:
parent
4052d63502
commit
9554291802
@ -152,6 +152,7 @@
|
|||||||
// Permissions
|
// Permissions
|
||||||
// What level of administration you need to:
|
// What level of administration you need to:
|
||||||
|
|
||||||
|
/* Post Controls */
|
||||||
// View IP addresses
|
// View IP addresses
|
||||||
define('MOD_SHOW_IP', MOD_MOD, true);
|
define('MOD_SHOW_IP', MOD_MOD, true);
|
||||||
// Delete a post
|
// Delete a post
|
||||||
@ -167,6 +168,12 @@
|
|||||||
// Sticky a thread
|
// Sticky a thread
|
||||||
define('MOD_STICKY', MOD_MOD, true);
|
define('MOD_STICKY', MOD_MOD, true);
|
||||||
|
|
||||||
|
/* Administration */
|
||||||
|
// Display the contents of instant-config.php
|
||||||
|
define('MOD_SHOW_CONFIG', MOD_ADMIN, true);
|
||||||
|
// Create a new board
|
||||||
|
define('MOD_NEWBOARD', MOD_ADMIN, true);
|
||||||
|
|
||||||
// Mod links (full HTML)
|
// Mod links (full HTML)
|
||||||
// Correspond to above permission directives
|
// Correspond to above permission directives
|
||||||
define('MOD_LINK_DELETE', '[D]', true);
|
define('MOD_LINK_DELETE', '[D]', true);
|
||||||
@ -175,6 +182,7 @@
|
|||||||
define('MOD_LINK_DELETEFILE', '[F]', true);
|
define('MOD_LINK_DELETEFILE', '[F]', true);
|
||||||
define('MOD_LINK_DELETEBYIP', '[D+]', true);
|
define('MOD_LINK_DELETEBYIP', '[D+]', true);
|
||||||
define('MOD_LINK_STICKY', '[Sticky]', true);
|
define('MOD_LINK_STICKY', '[Sticky]', true);
|
||||||
|
define('MOD_LINK_DESTICKY', '[-Sticky]', true);
|
||||||
|
|
||||||
// A small file in the main directory indicating that the script has been ran and the board(s) have been generated.
|
// A small file in the main directory indicating that the script has been ran and the board(s) have been generated.
|
||||||
// This keeps the script from querying the database and causing strain when not needed.
|
// This keeps the script from querying the database and causing strain when not needed.
|
||||||
|
116
inc/display.php
116
inc/display.php
@ -48,50 +48,6 @@
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function postControls($id, $thread=false) {
|
|
||||||
global $mod;
|
|
||||||
|
|
||||||
$built = '';
|
|
||||||
if($mod) {
|
|
||||||
// Mod controls (on posts)
|
|
||||||
if($thread) {
|
|
||||||
$built .= '<span class="controls op">';
|
|
||||||
} else {
|
|
||||||
$built .= '<span class="controls">';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete
|
|
||||||
if($mod['type'] >= MOD_DELETE)
|
|
||||||
$built .= ' <a title="Delete" href="?/b/delete/' . $id . '">' . MOD_LINK_DELETE . '</a>';
|
|
||||||
|
|
||||||
// Delete all posts by IP
|
|
||||||
if($mod['type'] >= MOD_DELETEBYIP)
|
|
||||||
$built .= ' <a title="Delete all posts by IP" href="?/b/deletebyip/' . $id . '">' . MOD_LINK_DELETEBYIP . '</a>';
|
|
||||||
|
|
||||||
// Ban
|
|
||||||
if($mod['type'] >= MOD_BAN)
|
|
||||||
$built .= ' <a title="Ban" href="?/b/ban/' . $id . '">' . MOD_LINK_BAN . '</a>';
|
|
||||||
|
|
||||||
// Ban & Delete
|
|
||||||
if($mod['type'] >= MOD_BANDELETE)
|
|
||||||
$built .= ' <a title="Ban & Delete" href="?/b/ban&delete/' . $id . '">' . MOD_LINK_BANDELETE . '</a>';
|
|
||||||
|
|
||||||
// Delete file (keep post)
|
|
||||||
if(!$thread && $mod['type'] >= MOD_DELETEFILE)
|
|
||||||
$built .= ' <a title="Remove file" href="?/b/file/' . $id . '">' . MOD_LINK_DELETEFILE . '</a>';
|
|
||||||
|
|
||||||
if($thread) {
|
|
||||||
// Delete file (keep post)
|
|
||||||
if($mod['type'] >= MOD_STICKY)
|
|
||||||
$built .= ' <a title="Make thread sticky" href="?/b/sticky/' . $id . '">' . MOD_LINK_STICKY . '</a>';
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$built .= '</span>';
|
|
||||||
}
|
|
||||||
return $built;
|
|
||||||
}
|
|
||||||
|
|
||||||
class Post {
|
class Post {
|
||||||
public function __construct($id, $thread, $subject, $email, $name, $trip, $body, $time, $thumb, $thumbx, $thumby, $file, $filex, $filey, $filesize, $filename, $ip, $root=ROOT) {
|
public function __construct($id, $thread, $subject, $email, $name, $trip, $body, $time, $thumb, $thumbx, $thumby, $file, $filex, $filey, $filesize, $filename, $ip, $root=ROOT) {
|
||||||
$this->id = $id;
|
$this->id = $id;
|
||||||
@ -113,6 +69,39 @@
|
|||||||
$this->ip = $ip;
|
$this->ip = $ip;
|
||||||
$this->root = $root;
|
$this->root = $root;
|
||||||
}
|
}
|
||||||
|
public function postControls() {
|
||||||
|
global $mod;
|
||||||
|
|
||||||
|
$built = '';
|
||||||
|
if($mod) {
|
||||||
|
// Mod controls (on posts)
|
||||||
|
$built .= '<span class="controls">';
|
||||||
|
|
||||||
|
// Delete
|
||||||
|
if($mod['type'] >= MOD_DELETE)
|
||||||
|
$built .= ' <a title="Delete" href="?/b/delete/' . $this->id . '">' . MOD_LINK_DELETE . '</a>';
|
||||||
|
|
||||||
|
// Delete all posts by IP
|
||||||
|
if($mod['type'] >= MOD_DELETEBYIP)
|
||||||
|
$built .= ' <a title="Delete all posts by IP" href="?/b/deletebyip/' . $this->id . '">' . MOD_LINK_DELETEBYIP . '</a>';
|
||||||
|
|
||||||
|
// Ban
|
||||||
|
if($mod['type'] >= MOD_BAN)
|
||||||
|
$built .= ' <a title="Ban" href="?/b/ban/' . $this->id . '">' . MOD_LINK_BAN . '</a>';
|
||||||
|
|
||||||
|
// Ban & Delete
|
||||||
|
if($mod['type'] >= MOD_BANDELETE)
|
||||||
|
$built .= ' <a title="Ban & Delete" href="?/b/ban&delete/' . $this->id . '">' . MOD_LINK_BANDELETE . '</a>';
|
||||||
|
|
||||||
|
// Delete file (keep post)
|
||||||
|
if($mod['type'] >= MOD_DELETEFILE)
|
||||||
|
$built .= ' <a title="Remove file" href="?/b/file/' . $this->id . '">' . MOD_LINK_DELETEFILE . '</a>';
|
||||||
|
|
||||||
|
$built .= '</span>';
|
||||||
|
}
|
||||||
|
return $built;
|
||||||
|
}
|
||||||
|
|
||||||
public function build($index=false) {
|
public function build($index=false) {
|
||||||
global $board, $mod;
|
global $board, $mod;
|
||||||
|
|
||||||
@ -169,7 +158,7 @@
|
|||||||
'<a href="' . ROOT . $board['dir'] . DIR_IMG . $this->file.'"><img src="' . ROOT . $board['dir'] . DIR_THUMB . $this->thumb.'" style="width:'.$this->thumbx.'px;height:'.$this->thumby.'px;" /></a>';
|
'<a href="' . ROOT . $board['dir'] . DIR_IMG . $this->file.'"><img src="' . ROOT . $board['dir'] . DIR_THUMB . $this->thumb.'" style="width:'.$this->thumbx.'px;height:'.$this->thumby.'px;" /></a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$built .= postControls($this->id);
|
$built .= $this->postControls();
|
||||||
|
|
||||||
// Body
|
// Body
|
||||||
$built .= '<p class="body">' . $this->body . '</p></div><br class="clear"/>';
|
$built .= '<p class="body">' . $this->body . '</p></div><br class="clear"/>';
|
||||||
@ -205,6 +194,41 @@
|
|||||||
public function add(Post $post) {
|
public function add(Post $post) {
|
||||||
$this->posts[] = $post;
|
$this->posts[] = $post;
|
||||||
}
|
}
|
||||||
|
public function postControls() {
|
||||||
|
global $mod;
|
||||||
|
|
||||||
|
$built = '';
|
||||||
|
if($mod) {
|
||||||
|
// Mod controls (on posts)
|
||||||
|
$built .= '<span class="controls op">';
|
||||||
|
|
||||||
|
// Delete
|
||||||
|
if($mod['type'] >= MOD_DELETE)
|
||||||
|
$built .= ' <a title="Delete" href="?/b/delete/' . $this->id . '">' . MOD_LINK_DELETE . '</a>';
|
||||||
|
|
||||||
|
// Delete all posts by IP
|
||||||
|
if($mod['type'] >= MOD_DELETEBYIP)
|
||||||
|
$built .= ' <a title="Delete all posts by IP" href="?/b/deletebyip/' . $this->id . '">' . MOD_LINK_DELETEBYIP . '</a>';
|
||||||
|
|
||||||
|
// Ban
|
||||||
|
if($mod['type'] >= MOD_BAN)
|
||||||
|
$built .= ' <a title="Ban" href="?/b/ban/' . $this->id . '">' . MOD_LINK_BAN . '</a>';
|
||||||
|
|
||||||
|
// Ban & Delete
|
||||||
|
if($mod['type'] >= MOD_BANDELETE)
|
||||||
|
$built .= ' <a title="Ban & Delete" href="?/b/ban&delete/' . $this->id . '">' . MOD_LINK_BANDELETE . '</a>';
|
||||||
|
|
||||||
|
// Delete file (keep post)
|
||||||
|
if($mod['type'] >= MOD_STICKY)
|
||||||
|
if($this->sticky)
|
||||||
|
$built .= ' <a title="Make thread not sticky" href="?/b/unsticky/' . $this->id . '">' . MOD_LINK_DESTICKY . '</a>';
|
||||||
|
else
|
||||||
|
$built .= ' <a title="Make thread sticky" href="?/b/sticky/' . $this->id . '">' . MOD_LINK_STICKY . '</a>';
|
||||||
|
|
||||||
|
$built .= '</span>';
|
||||||
|
}
|
||||||
|
return $built;
|
||||||
|
}
|
||||||
|
|
||||||
public function build($index=false) {
|
public function build($index=false) {
|
||||||
global $board, $mod;
|
global $board, $mod;
|
||||||
@ -261,7 +285,7 @@
|
|||||||
($index ? '<a href="' . $this->root . $board['dir'] . DIR_RES . $this->id . '.html">[Reply]</a>' : '') .
|
($index ? '<a href="' . $this->root . $board['dir'] . DIR_RES . $this->id . '.html">[Reply]</a>' : '') .
|
||||||
|
|
||||||
// Mod controls
|
// Mod controls
|
||||||
postControls($this->id, true) .
|
$this->postControls() .
|
||||||
'</p>';
|
'</p>';
|
||||||
|
|
||||||
// Body
|
// Body
|
||||||
|
@ -85,11 +85,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generates a <ul> element with a list of linked
|
// Generates a <ul> element with a list of linked
|
||||||
// boards and their subtitles.
|
// boards and their subtitles. (without the <ul> opening and ending tags)
|
||||||
function ulBoards() {
|
function ulBoards() {
|
||||||
global $mod;
|
global $mod;
|
||||||
|
|
||||||
$body = '<ul>';
|
$body = '';
|
||||||
|
|
||||||
// List of boards
|
// List of boards
|
||||||
$boards = listBoards();
|
$boards = listBoards();
|
||||||
@ -106,10 +106,10 @@
|
|||||||
'</li>';
|
'</li>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if($mod['type'] == MOD_ADMIN) {
|
if($mod['type'] >= MOD_NEWBOARD) {
|
||||||
$body .= '<li style="margin-top:15px;"><a href="?/new"><strong>Create new board</strong></a></li>';
|
$body .= '<li style="margin-top:15px;"><a href="?/new"><strong>Create new board</strong></a></li>';
|
||||||
}
|
}
|
||||||
return $body . '</ul>';
|
return $body;
|
||||||
}
|
}
|
||||||
|
|
||||||
function form_newBoard() {
|
function form_newBoard() {
|
||||||
|
25
mod.php
25
mod.php
@ -56,14 +56,26 @@
|
|||||||
|
|
||||||
if(preg_match('/^\/?$/', $query)) {
|
if(preg_match('/^\/?$/', $query)) {
|
||||||
// Dashboard
|
// Dashboard
|
||||||
$body = '';
|
$fieldset = Array(
|
||||||
|
'Boards' => '',
|
||||||
|
'Administration' => ''
|
||||||
|
);
|
||||||
|
|
||||||
$body .= '<fieldset><legend>Boards</legend>' .
|
// Boards
|
||||||
ulBoards() .
|
$fieldset['Boards'] .= ulBoards();
|
||||||
'</fieldset>';
|
|
||||||
|
if($mod['type'] >= MOD_SHOW_CONFIG) {
|
||||||
|
$fieldset['Administration'] .= '<li><a href="?/config">Show configuration</a></li>';
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Statistics, etc, in the dashboard.
|
// TODO: Statistics, etc, in the dashboard.
|
||||||
|
|
||||||
|
$body = '';
|
||||||
|
foreach($fieldset as $title => $data) {
|
||||||
|
if($data)
|
||||||
|
$body .= "<fieldset><legend>{$title}</legend><ul>{$data}</ul></fieldset>";
|
||||||
|
}
|
||||||
|
|
||||||
echo Element('page.html', Array(
|
echo Element('page.html', Array(
|
||||||
'index'=>ROOT,
|
'index'=>ROOT,
|
||||||
'title'=>'Dashboard',
|
'title'=>'Dashboard',
|
||||||
@ -72,7 +84,7 @@
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
} elseif(preg_match('/^\/config$/', $query)) {
|
} elseif(preg_match('/^\/config$/', $query)) {
|
||||||
if($mod['type'] != MOD_ADMIN) error(ERROR_NOACCESS);
|
if($mod['type'] < MOD_SHOW_CONFIG) error(ERROR_NOACCESS);
|
||||||
|
|
||||||
// Show instance-config.php
|
// Show instance-config.php
|
||||||
|
|
||||||
@ -92,7 +104,7 @@
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
} elseif(preg_match('/^\/new$/', $query)) {
|
} elseif(preg_match('/^\/new$/', $query)) {
|
||||||
if($mod['type'] != MOD_ADMIN) error(ERROR_NOACCESS);
|
if($mod['type'] < MOD_NEWBOARD) error(ERROR_NOACCESS);
|
||||||
|
|
||||||
// New board
|
// New board
|
||||||
$body = '';
|
$body = '';
|
||||||
@ -186,6 +198,7 @@
|
|||||||
|
|
||||||
echo $page;
|
echo $page;
|
||||||
} elseif(preg_match('/^\/' . $regex['board'] . 'delete\/(\d+)$/', $query, $matches)) {
|
} elseif(preg_match('/^\/' . $regex['board'] . 'delete\/(\d+)$/', $query, $matches)) {
|
||||||
|
if($mod['type'] < MOD_DELETE) error(ERROR_NOACCESS);
|
||||||
// Delete post
|
// Delete post
|
||||||
|
|
||||||
$boardName = $matches[1];
|
$boardName = $matches[1];
|
||||||
|
Loading…
Reference in New Issue
Block a user