From 9554291802cb8ac712ba25d1a59ced31d20b07f0 Mon Sep 17 00:00:00 2001
From: Savetheinternet
Date: Fri, 17 Dec 2010 02:20:16 +1100
Subject: [PATCH] Mod controls and permissions
---
inc/config.php | 8 ++++
inc/display.php | 116 +++++++++++++++++++++++++++++-------------------
inc/mod.php | 8 ++--
mod.php | 25 ++++++++---
4 files changed, 101 insertions(+), 56 deletions(-)
diff --git a/inc/config.php b/inc/config.php
index 4e48b6d5..8f265a78 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -152,6 +152,7 @@
// Permissions
// What level of administration you need to:
+ /* Post Controls */
// View IP addresses
define('MOD_SHOW_IP', MOD_MOD, true);
// Delete a post
@@ -167,6 +168,12 @@
// Sticky a thread
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)
// Correspond to above permission directives
define('MOD_LINK_DELETE', '[D]', true);
@@ -175,6 +182,7 @@
define('MOD_LINK_DELETEFILE', '[F]', true);
define('MOD_LINK_DELETEBYIP', '[D+]', 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.
// This keeps the script from querying the database and causing strain when not needed.
diff --git a/inc/display.php b/inc/display.php
index 8cf4a18e..5dbccc8f 100644
--- a/inc/display.php
+++ b/inc/display.php
@@ -48,50 +48,6 @@
)));
}
- function postControls($id, $thread=false) {
- global $mod;
-
- $built = '';
- if($mod) {
- // Mod controls (on posts)
- if($thread) {
- $built .= '';
- } else {
- $built .= '';
- }
-
- // Delete
- if($mod['type'] >= MOD_DELETE)
- $built .= ' ' . MOD_LINK_DELETE . '';
-
- // Delete all posts by IP
- if($mod['type'] >= MOD_DELETEBYIP)
- $built .= ' ' . MOD_LINK_DELETEBYIP . '';
-
- // Ban
- if($mod['type'] >= MOD_BAN)
- $built .= ' ' . MOD_LINK_BAN . '';
-
- // Ban & Delete
- if($mod['type'] >= MOD_BANDELETE)
- $built .= ' ' . MOD_LINK_BANDELETE . '';
-
- // Delete file (keep post)
- if(!$thread && $mod['type'] >= MOD_DELETEFILE)
- $built .= ' ' . MOD_LINK_DELETEFILE . '';
-
- if($thread) {
- // Delete file (keep post)
- if($mod['type'] >= MOD_STICKY)
- $built .= ' ' . MOD_LINK_STICKY . '';
-
- }
-
- $built .= '';
- }
- return $built;
- }
-
class Post {
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;
@@ -113,6 +69,39 @@
$this->ip = $ip;
$this->root = $root;
}
+ public function postControls() {
+ global $mod;
+
+ $built = '';
+ if($mod) {
+ // Mod controls (on posts)
+ $built .= '';
+
+ // Delete
+ if($mod['type'] >= MOD_DELETE)
+ $built .= ' ' . MOD_LINK_DELETE . '';
+
+ // Delete all posts by IP
+ if($mod['type'] >= MOD_DELETEBYIP)
+ $built .= ' ' . MOD_LINK_DELETEBYIP . '';
+
+ // Ban
+ if($mod['type'] >= MOD_BAN)
+ $built .= ' ' . MOD_LINK_BAN . '';
+
+ // Ban & Delete
+ if($mod['type'] >= MOD_BANDELETE)
+ $built .= ' ' . MOD_LINK_BANDELETE . '';
+
+ // Delete file (keep post)
+ if($mod['type'] >= MOD_DELETEFILE)
+ $built .= ' ' . MOD_LINK_DELETEFILE . '';
+
+ $built .= '';
+ }
+ return $built;
+ }
+
public function build($index=false) {
global $board, $mod;
@@ -169,7 +158,7 @@
'';
}
- $built .= postControls($this->id);
+ $built .= $this->postControls();
// Body
$built .= '' . $this->body . '
';
@@ -205,6 +194,41 @@
public function add(Post $post) {
$this->posts[] = $post;
}
+ public function postControls() {
+ global $mod;
+
+ $built = '';
+ if($mod) {
+ // Mod controls (on posts)
+ $built .= '';
+
+ // Delete
+ if($mod['type'] >= MOD_DELETE)
+ $built .= ' ' . MOD_LINK_DELETE . '';
+
+ // Delete all posts by IP
+ if($mod['type'] >= MOD_DELETEBYIP)
+ $built .= ' ' . MOD_LINK_DELETEBYIP . '';
+
+ // Ban
+ if($mod['type'] >= MOD_BAN)
+ $built .= ' ' . MOD_LINK_BAN . '';
+
+ // Ban & Delete
+ if($mod['type'] >= MOD_BANDELETE)
+ $built .= ' ' . MOD_LINK_BANDELETE . '';
+
+ // Delete file (keep post)
+ if($mod['type'] >= MOD_STICKY)
+ if($this->sticky)
+ $built .= ' ' . MOD_LINK_DESTICKY . '';
+ else
+ $built .= ' ' . MOD_LINK_STICKY . '';
+
+ $built .= '';
+ }
+ return $built;
+ }
public function build($index=false) {
global $board, $mod;
@@ -261,7 +285,7 @@
($index ? '[Reply]' : '') .
// Mod controls
- postControls($this->id, true) .
+ $this->postControls() .
'
';
// Body
diff --git a/inc/mod.php b/inc/mod.php
index 200ffa20..b5e773f5 100644
--- a/inc/mod.php
+++ b/inc/mod.php
@@ -85,11 +85,11 @@
}
// Generates a element with a list of linked
- // boards and their subtitles.
+ // boards and their subtitles. (without the opening and ending tags)
function ulBoards() {
global $mod;
- $body = '';
+ $body = '';
// List of boards
$boards = listBoards();
@@ -106,10 +106,10 @@
'';
}
- if($mod['type'] == MOD_ADMIN) {
+ if($mod['type'] >= MOD_NEWBOARD) {
$body .= '- Create new board
';
}
- return $body . '
';
+ return $body;
}
function form_newBoard() {
diff --git a/mod.php b/mod.php
index 6b3d17c3..7b52735f 100644
--- a/mod.php
+++ b/mod.php
@@ -56,14 +56,26 @@
if(preg_match('/^\/?$/', $query)) {
// Dashboard
- $body = '';
+ $fieldset = Array(
+ 'Boards' => '',
+ 'Administration' => ''
+ );
- $body .= '';
+ // Boards
+ $fieldset['Boards'] .= ulBoards();
+
+ if($mod['type'] >= MOD_SHOW_CONFIG) {
+ $fieldset['Administration'] .= '- Show configuration
';
+ }
// TODO: Statistics, etc, in the dashboard.
+ $body = '';
+ foreach($fieldset as $title => $data) {
+ if($data)
+ $body .= "";
+ }
+
echo Element('page.html', Array(
'index'=>ROOT,
'title'=>'Dashboard',
@@ -72,7 +84,7 @@
)
);
} 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
@@ -92,7 +104,7 @@
)
);
} elseif(preg_match('/^\/new$/', $query)) {
- if($mod['type'] != MOD_ADMIN) error(ERROR_NOACCESS);
+ if($mod['type'] < MOD_NEWBOARD) error(ERROR_NOACCESS);
// New board
$body = '';
@@ -186,6 +198,7 @@
echo $page;
} elseif(preg_match('/^\/' . $regex['board'] . 'delete\/(\d+)$/', $query, $matches)) {
+ if($mod['type'] < MOD_DELETE) error(ERROR_NOACCESS);
// Delete post
$boardName = $matches[1];