Browse Source

Added Feature - Seperate Archive Mods can put posts in - only mods can see this archive

main
PupperWoff 7 years ago
committed by discomrade
parent
commit
7ffa8a00f9
  1. 79
      UPDATE_SCRIPT__MOD_ARCHIVE_FOR_THREADS.php
  2. 61
      inc/archive.php
  3. 11
      inc/config.php
  4. 27
      inc/functions.php
  5. 47
      inc/mod/pages.php
  6. 2
      js/gallery-view.js
  7. 3
      mod.php
  8. 3
      stylesheets/style.css
  9. 3
      templates/archive.sql
  10. 45
      templates/mod/archive_featured_list.html
  11. 22
      templates/mod/archive_list.html
  12. 2
      templates/post/image.html

79
UPDATE_SCRIPT__MOD_ARCHIVE_FOR_THREADS.php

@ -0,0 +1,79 @@
<?php
// require 'inc/config.php';
// require 'inc/config_instance.php';
require 'inc/functions.php';
global $config;
// Check so only ADMIN can run script
check_login(true);
if (!$mod || $mod['type'] != ADMIN)
die("You need to be logged in as admin");
// Set timelimit to what it is for rebuild
@set_time_limit($config['mod']['rebuild_timelimit']);
$page['title'] = 'Updating Database - MOD Archive for Threads';
$step = isset($_GET['step']) ? round($_GET['step']) : 0;
switch($step)
{
default:
case 0:
$page['body'] = '<p style="text-align:center">You are about to update the database to allow MOD archive for threads.</p>';
$page['body'] .= '<p style="text-align:center"><a href="?step=2">Click here to update database entries.</a></p>';
break;
case 2:
$page['body'] = '<p style="text-align:center">Database have been updated.</p>';
$sql_errors = "";
$file_errors = "";
// Update posts_* table to archive function
// Get list of boards
$boards = listBoards();
foreach ($boards as &$_board) {
$query = sprintf("ALTER TABLE `archive_%s` ADD `mod_archived` INT(1) NOT NULL AFTER `featured`", $_board['uri']);
query($query) or $sql_errors .= sprintf("<li>Updated Archive DB for %s<br/>", $_board['uri']) . db_error() . '</li>';
$_board['dir'] = sprintf($config['board_path'], $_board['uri']);
// Create Mod Archive threads Folders
if (!file_exists($_board['dir'] . $config['dir']['mod_archive']))
@mkdir($_board['dir'] . $config['dir']['mod_archive'], 0777)
or $file_errors .= "Couldn't create " . $_board['dir'] . $config['dir']['mod_archive'] . ". Check permissions.<br/>";
if (!file_exists($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['img']))
@mkdir($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['img'], 0777)
or $file_errors .= "Couldn't create " . $_board['dir'] . $config['dir']['feamod_archivetured'] . $config['dir']['img'] . ". Check permissions.<br/>";
if (!file_exists($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb']))
@mkdir($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb'], 0777)
or $file_errors .= "Couldn't create " . $_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb'] . ". Check permissions.<br/>";
if (!file_exists($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res']))
@mkdir($_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res'], 0777)
or $file_errors .= "Couldn't create " . $_board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res'] . ". Check permissions.<br/>";
}
if (!empty($sql_errors))
$page['body'] .= '<div class="ban"><h2>SQL errors</h2><p>SQL errors were encountered when trying to update the database.</p><p>The errors encountered were:</p><ul>' . $sql_errors . '</ul></div>';
if (!empty($file_errors))
$page['body'] .= '<div class="ban"><h2>File System errors</h2><p>File System errors were encountered when trying to create folders.</p><p>The errors encountered were:</p><ul>' . $file_errors . '</ul></div>';
break;
}
echo Element('page.html', $page);
?>
<!-- There is probably a much better way to do this, but eh. -->
<link rel="stylesheet" type="text/css" href="stylesheets/style.css" />

61
inc/archive.php

@ -85,7 +85,7 @@ class Archive {
}
// Insert Archive Data in Database
$query = prepare(sprintf("INSERT INTO ``archive_%s`` VALUES (:thread_id, :snippet, :lifetime, :files, 0)", $board['uri']));
$query = prepare(sprintf("INSERT INTO ``archive_%s`` VALUES (:thread_id, :snippet, :lifetime, :files, 0, 0)", $board['uri']));
$query->bindValue(':thread_id', $thread_id, PDO::PARAM_INT);
$query->bindValue(':snippet', $thread_data['snippet'], PDO::PARAM_STR);
$query->bindValue(':lifetime', time(), PDO::PARAM_INT);
@ -116,7 +116,7 @@ class Archive {
return;
// Delete all static pages and files for archived threads that has timed out
$query = prepare(sprintf("SELECT `id`, `files` FROM ``archive_%s`` WHERE `lifetime` < :lifetime AND `featured` = 0", $board['uri']));
$query = prepare(sprintf("SELECT `id`, `files` FROM ``archive_%s`` WHERE `lifetime` < :lifetime AND `featured` = 0 AND `mod_archived` = 0", $board['uri']));
$query->bindValue(':lifetime', strtotime("-" . $config['archive']['lifetime']), PDO::PARAM_INT);
$query->execute() or error(db_error($query));
while($thread = $query->fetch(PDO::FETCH_ASSOC)) {
@ -132,11 +132,11 @@ class Archive {
// Delete Archive Entries
if($query->rowCount() != 0) {
$query = prepare(sprintf("DELETE FROM ``archive_%s`` WHERE `lifetime` < :lifetime AND `featured` = 0", $board['uri'])) or error(db_error());
$query = prepare(sprintf("DELETE FROM ``archive_%s`` WHERE `lifetime` < :lifetime AND `featured` = 0 AND `mod_archived` = 0", $board['uri'])) or error(db_error());
$query->bindValue(':lifetime', strtotime("-" . $config['archive']['lifetime']), PDO::PARAM_INT);
$query->execute() or error(db_error($query));
modLog(sprintf("Purged %i archived threads due to expiration date", $query->rowCount()));
modLog(sprintf("Purged %d archived threads due to expiration date", $query->rowCount()));
}
return $query->rowCount();
@ -148,14 +148,17 @@ class Archive {
// Feature thread and replies
static public function featureThread($thread_id) {
global $config, $board;
static public function featureThread($thread_id, $mod_archive = false) {
global $config, $board, $mod;
// If featuring of threads is turned off return
if(!$config['feature']['threads'])
if(!$mod_archive && !$config['feature']['threads'])
return;
// If mod archive of threads is turned off return
if($mod_archive && !$config['mod_archive']['threads'])
return;
$query = query(sprintf("SELECT `files` FROM ``archive_%s`` WHERE `id` = %d AND `featured` = 0", $board['uri'], (int)$thread_id)) or error(db_error());
$query = query(sprintf("SELECT `files` FROM ``archive_%s`` WHERE `id` = %d AND " . ($mod_archive?"`mod_archived`":"`featured`") . " = 0", $board['uri'], (int)$thread_id)) or error(db_error());
if(!$thread = $query->fetch(PDO::FETCH_ASSOC))
error($config['error']['invalidpost']);
@ -163,20 +166,24 @@ class Archive {
$thread_file_content = @file_get_contents($board['dir'] . $config['dir']['archive'] . $config['dir']['res'] . sprintf($config['file_page'], $thread_id));
// Replace links and posting mode to Archived
$thread_file_content = str_replace(sprintf('src="/' . $config['board_path'] . $config['dir']['archive'], $board['uri']), sprintf('src="/' . $config['board_path'] . $config['dir']['featured'], $board['uri']), $thread_file_content);
$thread_file_content = str_replace(sprintf('href="/' . $config['board_path'] . $config['dir']['archive'], $board['uri']), sprintf('href="/' . $config['board_path'] . $config['dir']['featured'], $board['uri']), $thread_file_content);
$thread_file_content = str_replace(sprintf('src="/' . $config['board_path'] . $config['dir']['archive'], $board['uri']), sprintf('src="/' . $config['board_path'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']), $board['uri']), $thread_file_content);
$thread_file_content = str_replace(sprintf('href="/' . $config['board_path'] . $config['dir']['archive'], $board['uri']), sprintf('href="/' . $config['board_path'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']), $board['uri']), $thread_file_content);
$thread_file_content = str_replace('Archived thread', 'Featured thread', $thread_file_content);
// Write altered thread HTML to archive location
@file_put_contents($board['dir'] . $config['dir']['featured'] . $config['dir']['res'] . sprintf($config['file_page'], $thread_id), $thread_file_content, LOCK_EX);
@file_put_contents($board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['res'] . sprintf($config['file_page'], $thread_id), $thread_file_content, LOCK_EX);
foreach (json_decode($thread['files']) as $f) {
@copy($board['dir'] . $config['dir']['archive'] . $config['dir']['img'] . $f->file, $board['dir'] . $config['dir']['featured'] . $config['dir']['img'] . $f->file);
@copy($board['dir'] . $config['dir']['archive'] . $config['dir']['thumb'] . $f->thumb, $board['dir'] . $config['dir']['featured'] . $config['dir']['thumb'] . $f->thumb);
@copy($board['dir'] . $config['dir']['archive'] . $config['dir']['img'] . $f->file, $board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['img'] . $f->file);
@copy($board['dir'] . $config['dir']['archive'] . $config['dir']['thumb'] . $f->thumb, $board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['thumb'] . $f->thumb);
}
// Update DB entry
query(sprintf("UPDATE ``archive_%s`` SET `featured` = 1 WHERE `id` = %d", $board['uri'], (int)$thread_id)) or error(db_error());
query(sprintf("UPDATE ``archive_%s`` SET " . ($mod_archive?"`mod_archived`":"`featured`") . " = 1 WHERE `id` = %d", $board['uri'], (int)$thread_id)) or error(db_error());
// Add mod log entry
modLog(sprintf("Added thread #%d to " . ($mod_archive?"mod archive":"featured threads"), $thread_id));
// Rebuild Featured Index
self::buildFeaturedIndex();
@ -190,8 +197,8 @@ class Archive {
static public function deleteFeatured($thread_id) {
global $config, $board;
static public function deleteFeatured($thread_id, $mod_archive = false) {
global $config, $board, $mod;
$query = query(sprintf("SELECT `id`, `files`, `lifetime` FROM ``archive_%s`` WHERE `featured` = 1", $board['uri'])) or error(db_error());
if(!$thread = $query->fetch(PDO::FETCH_ASSOC))
@ -200,19 +207,22 @@ class Archive {
// Delete Files
foreach (json_decode($thread['files']) as $f) {
@unlink($board['dir'] . $config['dir']['featured'] . $config['dir']['img'] . $f->file);
@unlink($board['dir'] . $config['dir']['featured'] . $config['dir']['img'] . $f->thumb);
@unlink($board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['img'] . $f->file);
@unlink($board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['img'] . $f->thumb);
}
// Delete Thread
@unlink($board['dir'] . $config['dir']['featured'] . $config['dir']['res'] . sprintf($config['file_page'], $thread_id));
@unlink($board['dir'] . ($mod_archive?$config['dir']['mod_archive']:$config['dir']['featured']) . $config['dir']['res'] . sprintf($config['file_page'], $thread_id));
// Delete Entry in DB if it has timed out
if($thread['lifetime'] != 0 && $thread['lifetime'] < strtotime("-" . $config['archive']['lifetime']))
query(sprintf("DELETE FROM ``archive_%s`` WHERE `id` = %d", $board['uri'], (int)$thread_id)) or error(db_error());
query(sprintf("DELETE FROM ``archive_%s`` WHERE `id` = %d AND " . ($mod_archive?"`featured`":"`mod_archived`") . " = 0", $board['uri'], (int)$thread_id)) or error(db_error());
else
query(sprintf("UPDATE ``archive_%s`` SET `featured` = 0 WHERE `id` = %d", $board['uri'], (int)$thread_id)) or error(db_error());
query(sprintf("UPDATE ``archive_%s`` SET " . ($mod_archive?"`mod_archived`":"`featured`") . " = 0 WHERE `id` = %d", $board['uri'], (int)$thread_id)) or error(db_error());
// Add mod log entry
modLog(sprintf("Deleted thread #%d from " . ($mod_archive?"mod archive":"featured threads"), $thread_id));
// Rebuild Featured Index
self::buildFeaturedIndex();
}
@ -274,15 +284,18 @@ class Archive {
static public function getArchiveList($featured = false) {
static public function getArchiveList($featured = false, $mod_archive = false) {
global $config, $board;
$archive = false;
if($featured) {
$query = query(sprintf("SELECT `id`, `snippet`, `featured` FROM ``archive_%s`` WHERE `featured` = 1 ORDER BY `lifetime` DESC", $board['uri'])) or error(db_error());
$query = query(sprintf("SELECT `id`, `snippet`, `featured`, `mod_archived` FROM ``archive_%s`` WHERE `featured` = 1 ORDER BY `lifetime` DESC", $board['uri'])) or error(db_error());
$archive = $query->fetchAll(PDO::FETCH_ASSOC);
} else if($mod_archive) {
$query = query(sprintf("SELECT `id`, `snippet`, `featured`, `mod_archived` FROM ``archive_%s`` WHERE `mod_archived` = 1 ORDER BY `lifetime` DESC", $board['uri'])) or error(db_error());
$archive = $query->fetchAll(PDO::FETCH_ASSOC);
} else {
$query = prepare(sprintf("SELECT `id`, `snippet`, `featured` FROM ``archive_%s`` WHERE `lifetime` > :lifetime ORDER BY `lifetime` DESC", $board['uri']));
$query = prepare(sprintf("SELECT `id`, `snippet`, `featured`, `mod_archived` FROM ``archive_%s`` WHERE `lifetime` > :lifetime ORDER BY `lifetime` DESC", $board['uri']));
$query->bindValue(':lifetime', strtotime("-" . $config['archive']['lifetime']), PDO::PARAM_INT);
$query->execute() or error(db_error());
$archive = $query->fetchAll(PDO::FETCH_ASSOC);

11
inc/config.php

@ -1320,6 +1320,8 @@
$config['dir']['archive'] = 'archive/';
// Directory for "Featured Threads" (threads makred for permanent storage)
$config['dir']['featured'] = 'featured/';
// Directory for "Featured Threads" (threads makred for permanent storage)
$config['dir']['mod_archive'] = 'mod_archive/';
// For load balancing, having a seperate server (and domain/subdomain) for serving static content is
@ -1377,6 +1379,9 @@
// Indicate if link to featured archive should be shown on post and thread page
$config['feature']['link_post_page'] = false;
// Indicate if it is possible to mark threads as nostalgic (stored forever but will only be accessable to mods)
$config['mod_archive']['threads'] = true;
// Days to keep archived threads before deletion (ex. "60 minutes", "6 hours", "1 day", "1 week"), if set to false all archived threads are kept forever
$config['archive']['lifetime'] = "3 days";
@ -1766,6 +1771,12 @@
$config['mod']['feature_archived_threads'] = JANITOR;
// Delete featured archived threads
$config['mod']['delete_featured_archived_threads'] = MOD;
// View mod archive
$config['mod']['view_mod_archive'] = MOD;
// Archive threads for mods
$config['mod']['add_to_mod_archive'] = MOD;
// Archive threads for mods
$config['mod']['remove_from_mod_archive'] = MOD;
// Automatically permanently delete posts and threads (set to false if you want to keep for all)
$config['mod']['auto_delete_shadow_post'] = MOD;
// View shadow deleted posts and threads

27
inc/functions.php

@ -563,7 +563,7 @@ function setupBoard($array) {
@mkdir($board['dir'] . $config['dir']['res'], 0777)
or error("Couldn't create " . $board['dir'] . $config['dir']['img'] . ". Check permissions.", true);
// Create Archive Folders
// Create archive folders
if (!file_exists($board['dir'] . $config['dir']['archive']))
@mkdir($board['dir'] . $config['dir']['archive'], 0777)
or error("Couldn't create " . $board['dir'] . $config['dir']['archive'] . ". Check permissions.", true);
@ -576,7 +576,7 @@ function setupBoard($array) {
if (!file_exists($board['dir'] . $config['dir']['archive'] . $config['dir']['res']))
@mkdir($board['dir'] . $config['dir']['archive'] . $config['dir']['res'], 0777)
or error("Couldn't create " . $board['dir'] . $config['dir']['archive'] . $config['dir']['img'] . ". Check permissions.", true);
// Create Featured threads Folders
// Create featured threads folders
if (!file_exists($board['dir'] . $config['dir']['featured']))
@mkdir($board['dir'] . $config['dir']['featured'], 0777)
or error("Couldn't create " . $board['dir'] . $config['dir']['featured'] . ". Check permissions.", true);
@ -589,6 +589,29 @@ function setupBoard($array) {
if (!file_exists($board['dir'] . $config['dir']['featured'] . $config['dir']['res']))
@mkdir($board['dir'] . $config['dir']['featured'] . $config['dir']['res'], 0777)
or error("Couldn't create " . $board['dir'] . $config['dir']['featured'] . $config['dir']['img'] . ". Check permissions.", true);
// Create mod archive threads folders
if (!file_exists($board['dir'] . $config['dir']['mod_archive']))
@mkdir($board['dir'] . $config['dir']['mod_archive'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['mod_archive'] . ". Check permissions.<br/>";
if (!file_exists($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['img']))
@mkdir($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['img'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['feamod_archivetured'] . $config['dir']['img'] . ". Check permissions.<br/>";
if (!file_exists($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb']))
@mkdir($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['mod_archive'] . $config['dir']['thumb'] . ". Check permissions.<br/>";
if (!file_exists($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res']))
@mkdir($board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['mod_archive'] . $config['dir']['res'] . ". Check permissions.<br/>";
// Create shadow delete folders to save files in
if (!file_exists($board['dir'] . $config['dir']['shadow_del']))
@mkdir($board['dir'] . $config['dir']['shadow_del'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['shadow_del'] . ". Check permissions.<br/>";
if (!file_exists($board['dir'] . $config['dir']['shadow_del'] . $config['dir']['img']))
@mkdir($board['dir'] . $config['dir']['shadow_del'] . $config['dir']['img'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['shadow_del'] . $config['dir']['img'] . ". Check permissions.<br/>";
if (!file_exists($board['dir'] . $config['dir']['shadow_del'] . $config['dir']['thumb']))
@mkdir($board['dir'] . $config['dir']['shadow_del'] . $config['dir']['thumb'], 0777)
or $file_errors .= "Couldn't create " . $board['dir'] . $config['dir']['shadow_del'] . $config['dir']['thumb'] . ". Check permissions.<br/>";
}
function openBoard($uri) {

47
inc/mod/pages.php

@ -375,6 +375,9 @@ function mod_edit_board($boardName) {
// Delete archive table
$query = query(sprintf('DROP TABLE IF EXISTS ``archive_%s``', $board['uri'])) or error(db_error());
// Delete shadow delete table
$query = query(sprintf('DROP TABLE IF EXISTS ``shadow_posts_%s``', $board['uri'])) or error(db_error());
// Clear reports
$query = prepare('DELETE FROM ``reports`` WHERE `board` = :id');
$query->bindValue(':id', $board['uri'], PDO::PARAM_STR);
@ -3839,6 +3842,12 @@ function mod_view_archive($boardName) {
Archive::featureThread($_POST['id']);
}
else if(isset($_POST['mod_archive'], $_POST['id'])) {
if(!hasPermission($config['mod']['add_to_mod_archive'], $board['uri']))
error($config['error']['noaccess']);
Archive::featureThread($_POST['id'], true);
}
// Get Archive List
$archive = Archive::getArchiveList();
@ -3881,9 +3890,47 @@ function mod_view_archive_featured($boardName) {
mod_page(sprintf(_('Featured') . ' %s: ' . $config['board_abbreviation'], _('threads'), $board['uri']), 'mod/archive_featured_list.html', array(
'archive' => $archive,
'board' => $board,
'token' => make_secure_link_token($board['uri']. '/featured/')
));
}
function mod_view_archive_mod_archive($boardName) {
global $board, $config;
// If archiving is turned off return
if(!$config['mod_archive']['threads'])
return;
if(!hasPermission($config['mod']['view_mod_archive'], $board['uri']))
error($config['error']['noaccess']);
if (!openBoard($boardName))
error($config['error']['noboard']);
if(isset($_POST['delete'], $_POST['id'])) {
if(!hasPermission($config['mod']['remove_from_mod_archive'], $board['uri']))
error($config['error']['noaccess']);
Archive::deleteFeatured($_POST['id'], true);
}
$query = query(sprintf("SELECT `id`, `snippet` FROM ``archive_%s`` WHERE `mod_archived` = 1 ORDER BY `lifetime` DESC", $board['uri'])) or error(db_error());
$archive = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($archive as &$thread)
$thread['featured_url'] = sprintf($config['board_path'], $board['uri']) . $config['dir']['mod_archive'] . $config['dir']['res'] . sprintf($config['file_page'], $thread['id']);
mod_page(sprintf(_('Mod Archive') . ' %s: ' . $config['board_abbreviation'], _('threads'), $board['uri']), 'mod/archive_featured_list.html', array(
'archive' => $archive,
'is_mod_archive' => true,
'board' => $board,
'token' => make_secure_link_token($board['uri']. '/mod_archive/')
));
}

2
js/gallery-view.js

@ -116,7 +116,7 @@ $(function(){
if (img.match(/\.webm$|\.mp4$|\.ogv$/i)) { // We are handling video nao
i = $('<video>');
i.attr('src', img);
i.attr('autoplay', true);
i.attr('autoplay', false);
i.attr('controls', true);
i.appendTo(active);
i.hide();

3
mod.php

@ -77,7 +77,8 @@ $pages = array(
'/search/(posts|IP_notes|bans|log)/(.+)' => 'search', // search
'/(\%b)/archive/' => 'secure_POST view_archive', // view archive
'/(\%b)/featured/' => 'secure_POST view_archive_featured', // view featured archive
'/(\%b)/mod_archive/' => 'secure_POST view_archive_mod_archive', // View mod archive
'/(\%b)/featured/' => 'secure_POST view_archive_featured', // view featured archive
'/shadow_recent_post/(\d+)' => 'recent_shadow_posts', // view recent posts shadow deleted
'/(\%b)/shadow_view/(\d+)' => 'view_shadow_thread', // view shadow deleted thread

3
stylesheets/style.css

@ -653,7 +653,8 @@ table.archive-list tbody tr td:first-child{
}
table.archive-list tbody tr td:nth-child(3),
table.archive-list tbody tr td:nth-child(4){
table.archive-list tbody tr td:nth-child(4),
table.archive-list tbody tr td:nth-child(5){
text-align: center;
}

3
templates/archive.sql

@ -2,8 +2,9 @@ CREATE TABLE IF NOT EXISTS ``archive_{{ board }}`` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`snippet` text NOT NULL,
`lifetime` int(11) NOT NULL,
`files` text NOT NULL,
`files` mediumtext NOT NULL,
`featured` int(1) NOT NULL,
`mod_archived` int(1) NOT NULL,
UNIQUE KEY `id` (`id`),
KEY `lifetime` (`lifetime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

45
templates/mod/archive_featured_list.html

@ -1,4 +1,18 @@
{% if config.archive.threads %}
<p style="text-align: center">
<a id="unimportant" href="{% if mod %}{{ config.file_mod }}?{% endif %}{{ config.root }}{{ board.dir }}{{ config.dir.archive }}">[{% trans %}Thread Archive{% endtrans %}]</a>
</p>
{% endif %}
{% if is_mod_archive %}
{% if mod and mod|hasPermission(config.mod.remove_from_mod_archive) %}
<p style="text-align: center">
<b>Please be curtious and don't delete the threads archived here as they were archived for a reason.</b>
</p>
{% endif %}
{% endif %}
<table id="archive-list" class="archive-list modlog">
<thead>
@ -17,15 +31,28 @@
<td>{{ thread.id }}</td>
<td>{{ thread.snippet }}</td>
<td><a href="{{ thread.featured_url }}">[{% trans 'View' %}]</a></td>
{% if mod and mod|hasPermission(config.mod.delete_featured_archived_threads, board.uri) %}
<td>
<form action="" method="post" class="archiveForm">
<input type="hidden" name="token" value="{{ token }}">
<input type="hidden" name="id" value="{{ thread.id }}">
<input type="hidden" name="delete" value="1">
<a href="#" onclick="return confirm('Are you sure you want to permanently delete this thread from featured archive?')?this.parentNode.submit():false;">[{% trans 'Delete' %}]</a>
</form>
</td>
{% if is_mod_archive %}
{% if mod and mod|hasPermission(config.mod.remove_from_mod_archive, board.uri) %}
<td>
<form action="" method="post" class="archiveForm">
<input type="hidden" name="token" value="{{ token }}">
<input type="hidden" name="id" value="{{ thread.id }}">
<input type="hidden" name="delete" value="1">
<a href="#" onclick="return confirm('Are you sure you want to permanently delete this thread from featured archive?')?this.parentNode.submit():false;">[{% trans 'Delete' %}]</a>
</form>
</td>
{% endif %}
{% else %}
{% if mod and mod|hasPermission(config.mod.delete_featured_archived_threads, board.uri) %}
<td>
<form action="" method="post" class="archiveForm">
<input type="hidden" name="token" value="{{ token }}">
<input type="hidden" name="id" value="{{ thread.id }}">
<input type="hidden" name="delete" value="1">
<a href="#" onclick="return confirm('Are you sure you want to permanently delete this thread from featured archive?')?this.parentNode.submit():false;">[{% trans 'Delete' %}]</a>
</form>
</td>
{% endif %}
{% endif %}
</tr>
{% endfor %}

22
templates/mod/archive_list.html

@ -1,6 +1,11 @@
{% if config.mod_archive.threads and mod and mod|hasPermission(config.view_mod_archive) %}
<p style="text-align: center">
<a id="unimportant" href="{% if mod %}{{ config.file_mod }}?{% endif %}{{ config.root }}{{ board.dir }}{{ config.dir.mod_archive }}">[{% trans %}View Mod Archive{% endtrans %}]</a>
</p>
{% endif %}
{% if config.feature.threads %}
<p style="text-align: center">
<a id="unimportant" href="{{ config.root }}{% if mod %}{{ config.file_mod }}?/{% endif %}{{ board.dir }}{{ config.dir.featured }}">[{% trans %}Featured Thread Archive{% endtrans %}]</a>
@ -19,6 +24,9 @@
{% if mod and mod|hasPermission(config.mod.feature_archived_threads, board.uri) %}
<th width='80px'>&nbsp;</th>
{% endif %}
{% if mod and mod|hasPermission(config.mod.add_to_mod_archive, board.uri) %}
<th width='80px'>&nbsp;</th>
{% endif %}
</tr>
</thead>
<tbody>
@ -41,6 +49,20 @@
{% endif %}
</td>
{% endif %}
{% if mod and mod|hasPermission(config.mod.add_to_mod_archive, board.uri) %}
<td>
{% if not thread.mod_archived %}
<form action="" method="post" class="archiveForm">
<input type="hidden" name="token" value="{{ token }}">
<input type="hidden" name="id" value="{{ thread.id }}">
<input type="hidden" name="mod_archive" value="1">
<a href="#" onclick="confirm('Are you sure you want to add thread to mod archive?')?this.parentNode.submit():false;">[{% trans 'Mod Archive' %}]</a>
</form>
{% else %}
<b>{% trans 'Mod Archived' %}</b>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>

2
templates/post/image.html

@ -11,7 +11,7 @@
{% endif %}
>
{% if post.thumb|extension == 'webm' or post.thumb|extension == 'mp4' %}
<video autoplay class="post-image" src="{% if shadow %}{{ config.uri_shadow_img }}{% else %}{{ config.uri_img }}{% endif %}{{ post.thumb }}"
<video autoplay class="post-image" src="{% if shadow %}{{ config.uri_shadow_img }}{% else %}{{ config.uri_thumb }}{% endif %}{{ post.thumb }}"
poster="
{{ config.root }}
{% if config.file_icons[post.filename|extension] %}

Loading…
Cancel
Save