This repository has been archived on 2024-09-05. You can view files and clone it, but cannot push or open issues or pull requests.
shimmie2/ext/blotter/main.php

148 lines
5.7 KiB
PHP
Raw Normal View History

2021-12-14 18:32:47 +00:00
<?php
declare(strict_types=1);
namespace Shimmie2;
class Blotter extends Extension
{
2020-02-04 00:46:36 +00:00
/** @var BlotterTheme */
2023-06-27 14:56:49 +00:00
protected Themelet $theme;
2020-02-04 00:46:36 +00:00
public function onInitExt(InitExtEvent $event)
{
global $config;
$config->set_default_int("blotter_recent", 5);
$config->set_default_string("blotter_color", "FF0000");
$config->set_default_string("blotter_position", "subheading");
}
public function onDatabaseUpgrade(DatabaseUpgradeEvent $event)
{
global $database;
2020-10-26 18:10:34 +00:00
if ($this->get_version("blotter_version") < 1) {
$database->create_table("blotter", "
2020-10-26 18:10:34 +00:00
id SCORE_AIPK,
entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
entry_text TEXT NOT NULL,
important BOOLEAN NOT NULL DEFAULT FALSE
2020-10-26 18:10:34 +00:00
");
// Insert sample data:
$database->execute(
2019-11-27 11:22:46 +00:00
"INSERT INTO blotter (entry_date, entry_text, important) VALUES (now(), :text, :important)",
2020-10-26 18:10:34 +00:00
["text"=>"Installed the blotter extension!", "important"=>true]
);
log_info("blotter", "Installed tables for blotter extension.");
$this->set_version("blotter_version", 2);
2020-10-26 18:10:34 +00:00
}
if ($this->get_version("blotter_version") < 2) {
2020-10-26 18:10:34 +00:00
$database->standardise_boolean("blotter", "important");
$this->set_version("blotter_version", 2);
}
}
public function onSetupBuilding(SetupBuildingEvent $event)
{
$sb = $event->panel->create_new_block("Blotter");
$sb->add_int_option("blotter_recent", "<br />Number of recent entries to display: ");
$sb->add_text_option("blotter_color", "<br />Color of important updates: (ABCDEF format) ");
$sb->add_choice_option("blotter_position", ["Top of page" => "subheading", "In navigation bar" => "left"], "<br>Position: ");
}
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
{
global $user;
2019-09-29 13:30:55 +00:00
if ($event->parent==="system") {
2019-09-29 18:00:51 +00:00
if ($user->can(Permissions::BLOTTER_ADMIN)) {
$event->add_nav_link("blotter", new Link('blotter/editor'), "Blotter Editor");
}
}
}
public function onUserBlockBuilding(UserBlockBuildingEvent $event)
{
global $user;
2019-09-29 18:00:51 +00:00
if ($user->can(Permissions::BLOTTER_ADMIN)) {
$event->add_link("Blotter Editor", make_link("blotter/editor"));
}
}
public function onPageRequest(PageRequestEvent $event)
{
global $page, $database, $user;
if ($event->page_matches("blotter") && $event->count_args() > 0) {
switch ($event->get_arg(0)) {
case "editor":
/**
* Displays the blotter editor.
*/
2019-09-29 18:00:51 +00:00
if (!$user->can(Permissions::BLOTTER_ADMIN)) {
$this->theme->display_permission_denied();
} else {
$entries = $database->get_all("SELECT * FROM blotter ORDER BY id DESC");
$this->theme->display_editor($entries);
}
break;
case "add":
/**
* Adds an entry
*/
2019-09-29 18:00:51 +00:00
if (!$user->can(Permissions::BLOTTER_ADMIN) || !$user->check_auth_token()) {
$this->theme->display_permission_denied();
} else {
$entry_text = $_POST['entry_text'];
if ($entry_text == "") {
die("No entry message!");
}
2020-10-26 18:10:34 +00:00
$important = isset($_POST['important']);
// Now insert into db:
$database->execute(
2019-11-27 11:22:46 +00:00
"INSERT INTO blotter (entry_date, entry_text, important) VALUES (now(), :text, :important)",
["text"=>$entry_text, "important"=>$important]
);
log_info("blotter", "Added Message: $entry_text");
2019-06-19 01:58:28 +00:00
$page->set_mode(PageMode::REDIRECT);
$page->set_redirect(make_link("blotter/editor"));
}
break;
case "remove":
/**
* Removes an entry
*/
2019-09-29 18:00:51 +00:00
if (!$user->can(Permissions::BLOTTER_ADMIN) || !$user->check_auth_token()) {
$this->theme->display_permission_denied();
} else {
$id = int_escape($_POST['id']);
2020-10-25 21:34:52 +00:00
$database->execute("DELETE FROM blotter WHERE id=:id", ["id"=>$id]);
log_info("blotter", "Removed Entry #$id");
2019-06-19 01:58:28 +00:00
$page->set_mode(PageMode::REDIRECT);
$page->set_redirect(make_link("blotter/editor"));
}
break;
case "list":
/**
* Displays all blotter entries
*/
$entries = $database->get_all("SELECT * FROM blotter ORDER BY id DESC");
$this->theme->display_blotter_page($entries);
break;
}
}
/**
* Finally, display the blotter on whatever page we're viewing.
*/
$this->display_blotter();
}
2010-02-18 14:12:52 +00:00
private function display_blotter()
{
global $database, $config;
$limit = $config->get_int("blotter_recent", 5);
$sql = 'SELECT * FROM blotter ORDER BY id DESC LIMIT '.intval($limit);
$entries = $database->get_all($sql);
$this->theme->display_blotter($entries);
}
2010-02-18 14:12:52 +00:00
}