diff --git a/inc/config.php b/inc/config.php
index 79ac48cb..a6f78053 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -651,6 +651,10 @@
array(
'/^https?:\/\/video\.google\.com\/videoplay\?docid=(\d+)([](.+)?)?$/i',
''
+ ),
+ array(
+ '/^https?:\/\/(\w+\.)?vocaroo\.com\/i\/([a-zA-Z0-9]{2,15})$/i',
+ ''
)
);
@@ -949,7 +953,7 @@
// View whether a thread has been bumplocked ("-1" to allow non-mods to see too)
$config['mod']['view_bumplock'] = MOD;
// Edit posts (EXPERIMENTAL)
- $config['mod']['editpost'] = DISABLED;
+ $config['mod']['editpost'] = MOD;
// "Move" a thread to another board (EXPERIMENTAL; has some known bugs)
$config['mod']['move'] = DISABLED;
// Bypass "field_disable_*" (forced anonymity, etc.)
diff --git a/inc/mod/pages.php b/inc/mod/pages.php
index 8666f04c..a1837e23 100644
--- a/inc/mod/pages.php
+++ b/inc/mod/pages.php
@@ -985,6 +985,54 @@ function mod_ban_post($board, $delete, $post, $token = false) {
mod_page(_('New ban'), 'mod/ban_form.html', $args);
}
+function mod_edit_post($board, $post) {
+ global $config, $mod;
+
+ if (!openBoard($board))
+ error($config['error']['noboard']);
+
+ if (!hasPermission($config['mod']['editpost'], $board))
+ error($config['error']['noaccess']);
+
+ $security_token = make_secure_link_token($board . '/ban/' . $post);
+
+ $query = prepare(sprintf('SELECT * FROM `posts_%s` WHERE `id` = :id', $board));
+ $query->bindValue(':id', $post);
+ $query->execute() or error(db_error($query));
+
+ if (!$_post = $query->fetch(PDO::FETCH_ASSOC))
+ error($config['error']['404']);
+
+ if(isset($_POST['mode']) && $_POST['mode'] == "edit")
+ {
+ $query = prepare(sprintf("UPDATE `posts_%s` SET `name` = :name,`email` = :email,`subject` = :subject,`body` = :body WHERE `id` = :id",$board));
+ $query->bindValue(':id', $post);
+ $query->bindValue('name', $_POST['name']);
+ $query->bindValue(':email', $_POST['email']);
+ $query->bindValue(':subject', $_POST['subject']);
+ $query->bindValue(':body', $_POST['body']);
+ $query->execute() or error(db_error($query));
+
+ $thread = $_post['thread'];
+ buildThread($thread ? $thread : $post);
+ modLog("Edited post #{$post}");
+ buildIndex();
+
+ header('Location: ?/' . sprintf($config['board_path'], $board) . $config['file_index'], true, $config['redirect_http']);
+ } else {
+ $args = array(
+ 'token' => $security_token,
+ 'name' => $_post['name'],
+ 'email' => $_post['email'],
+ 'subject' => $_post['subject'],
+ 'body' => $_post['body'],
+ 'mode' => "edit"
+ );
+
+ mod_page(_('Edit post'), 'mod/edit_post_form.html', $args);
+ }
+}
+
function mod_delete($board, $post) {
global $config, $mod;
diff --git a/mod.php b/mod.php
index 39a67878..5abf02bd 100644
--- a/mod.php
+++ b/mod.php
@@ -65,6 +65,7 @@ $pages = array(
'/([\w+.]+)/deletefile/(\d+)' => 'secure deletefile', // delete file from post
'/([\w+.]+)/deletebyip/(\d+)(/global)?' => 'secure deletebyip', // delete all posts by IP address
'/([\w+.]+)/(un)?lock/(\d+)' => 'secure lock', // lock thread
+ '/([\w+.]+)/edit/(\d+)' => 'secure edit_post', // edit post
'/([\w+.]+)/(un)?sticky/(\d+)' => 'secure sticky', // sticky thread
'/([\w+.]+)/bump(un)?lock/(\d+)' => 'secure bumplock', // "bumplock" thread
diff --git a/templates/generic_page.html b/templates/generic_page.html
index c50fb5dd..539cfdd3 100644
--- a/templates/generic_page.html
+++ b/templates/generic_page.html
@@ -2,35 +2,8 @@
{% block head %}
-
- {% if config.url_favicon %}{% endif %}
- {{ board.url }} - {{ board.name }}
-
-
- {% if config.meta_keywords %}{% endif %}
- {% if config.default_stylesheet.1 != '' %}{% endif %}
-
- {% if not nojavascript %}
-
- {% if not config.additional_javascript_compile %}
- {% for javascript in config.additional_javascript %}{% endfor %}
- {% endif %}
- {% endif %}
- {% if config.recaptcha %}{% endif %}
+ {% include 'header.html' %}
+ {{ board.url }} - {{ board.name }}
{% endblock %}
diff --git a/templates/header.html b/templates/header.html
new file mode 100644
index 00000000..95e0bc09
--- /dev/null
+++ b/templates/header.html
@@ -0,0 +1,28 @@
+
+ {% if config.url_favicon %}{% endif %}
+
+
+ {% if config.meta_keywords %}{% endif %}
+ {% if config.default_stylesheet.1 != '' %}{% endif %}
+
+ {% if not nojavascript %}
+
+ {% if not config.additional_javascript_compile %}
+ {% for javascript in config.additional_javascript %}{% endfor %}
+ {% endif %}
+ {% endif %}
+ {% if config.recaptcha %}{% endif %}
diff --git a/templates/index.html b/templates/index.html
index d7910416..41c47af4 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,35 +1,9 @@
+ {% include 'header.html' %}
-
- {% if config.url_favicon %}{% endif %}
{{ board.url }} - {{ board.name }}
-
- {% if config.meta_keywords %}{% endif %}
- {% if config.default_stylesheet.1 != '' %}{% endif %}
-
- {% if not nojavascript %}
-
- {% if not config.additional_javascript_compile %}
- {% for javascript in config.additional_javascript %}{% endfor %}
- {% endif %}
- {% endif %}
- {% if config.recaptcha %}{% endif %}
{{ boardlist.top }}
diff --git a/templates/mod/edit_post_form.html b/templates/mod/edit_post_form.html
new file mode 100644
index 00000000..6748435e
--- /dev/null
+++ b/templates/mod/edit_post_form.html
@@ -0,0 +1,40 @@
+
diff --git a/templates/page.html b/templates/page.html
index 8fbc49cd..457971af 100644
--- a/templates/page.html
+++ b/templates/page.html
@@ -1,14 +1,9 @@
+ {% include 'header.html' %}
-
- {% if config.url_favicon %}{% endif %}
{{ title }}
-
- {% if config.default_stylesheet.1 != '' %}{% endif %}
-
- {% if not nojavascript %}{% endif %}
{% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
diff --git a/templates/themes/recent/info.php b/templates/themes/recent/info.php
index d4cf1029..58448b3d 100644
--- a/templates/themes/recent/info.php
+++ b/templates/themes/recent/info.php
@@ -55,6 +55,14 @@
'default' => 'recent.css',
'comment' => '(eg. "recent.css")'
);
+
+ $theme['config'][] = Array(
+ 'title' => 'CSS stylesheet name',
+ 'name' => 'basecss',
+ 'type' => 'text',
+ 'default' => 'recent.css',
+ 'comment' => '(eg. "recent.css" - see templates/themes/recent for details)'
+ );
// Unique function name for building everything
$theme['build_function'] = 'recentposts_build';
diff --git a/templates/themes/recent/recent_fs.css b/templates/themes/recent/recent_fs.css
new file mode 100644
index 00000000..26aed668
--- /dev/null
+++ b/templates/themes/recent/recent_fs.css
@@ -0,0 +1,57 @@
+.box-wrap {
+ max-width: 670px;
+ min-width: 332px;
+ margin: 30px auto;
+ overflow: auto;
+ padding: 0;
+}
+.box {
+ background: white;
+ border: 1px solid #98E;
+ width: 330px;
+ margin: 8px 0;
+ padding: 0;
+}
+.box ul {
+ padding: 2px 15px;
+}
+.box ul li {
+ list-style: none;
+ margin: 0;
+}
+.box.left {
+ background: #FDF6AF;
+ color: #9E914F;
+ border: 1px solid #9E914F;
+ float: left;
+}
+.box.right {
+ background: #F2DCE5;
+ color: #525;
+ border: 1px solid #CA759E;
+ float: right;
+}
+
+.box h2 {
+ padding: 3px 7px;
+ font-size: 12pt;
+}
+.box img {
+ float: none;
+ margin: 10px auto;
+}
+.box.left h2 {
+ background: #FEE78F;
+ color: #9E914F;
+}
+.box.right h2 {
+ background: #EB81B4;
+ color: #F8F8F8;
+}
+
+body {
+ background: #F7F8F9;
+}
+header div.subtitle, h1 {
+ color: #888A8C;
+}
diff --git a/templates/themes/recent/theme.php b/templates/themes/recent/theme.php
index 986fac6a..b436ab0f 100644
--- a/templates/themes/recent/theme.php
+++ b/templates/themes/recent/theme.php
@@ -18,7 +18,7 @@
global $config, $_theme;
if ($action == 'all') {
- copy('templates/themes/recent/recent.css', $config['dir']['home'] . $settings['css']);
+ copy('templates/themes/recent/' . $settings['basecss'], $config['dir']['home'] . $settings['css']);
}
$this->excluded = explode(' ', $settings['exclude']);