154 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class Blotter extends Extension
 | |
| {
 | |
|     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 $config;
 | |
|         $version = $config->get_int("blotter_version", 0);
 | |
|         /**
 | |
|          * If this version is less than "1", it's time to install.
 | |
|          *
 | |
|          * REMINDER: If I change the database tables, I must change up version by 1.
 | |
|          */
 | |
|         if ($version < 1) {
 | |
|             /**
 | |
|              * Installer
 | |
|              */
 | |
|             global $database, $config;
 | |
|             $database->create_table("blotter", "
 | |
| 					id SCORE_AIPK,
 | |
| 					entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | |
| 					entry_text TEXT NOT NULL,
 | |
| 					important SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N
 | |
| 					");
 | |
|             // Insert sample data:
 | |
|             $database->execute(
 | |
|                 "INSERT INTO blotter (entry_date, entry_text, important) VALUES (now(), ?, ?)",
 | |
|                 ["Installed the blotter extension!", "Y"]
 | |
|             );
 | |
|             log_info("blotter", "Installed tables for blotter extension.");
 | |
|             $config->set_int("blotter_version", 1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function onSetupBuilding(SetupBuildingEvent $event)
 | |
|     {
 | |
|         $sb = new SetupBlock("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: ");
 | |
|         $event->panel->add_block($sb);
 | |
|     }
 | |
| 
 | |
|     public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
 | |
|     {
 | |
|         global $user;
 | |
|         if ($event->parent==="system") {
 | |
|             if ($user->can(Permissions::BLOTTER_ADMIN)) {
 | |
|                 $event->add_nav_link("blotter", new Link('blotter/editor'), "Blotter Editor");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public function onUserBlockBuilding(UserBlockBuildingEvent $event)
 | |
|     {
 | |
|         global $user;
 | |
|         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")) {
 | |
|             switch ($event->get_arg(0)) {
 | |
|                 case "editor":
 | |
|                     /**
 | |
|                      * Displays the blotter editor.
 | |
|                      */
 | |
|                     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
 | |
|                      */
 | |
|                     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!");
 | |
|                         }
 | |
|                         if (isset($_POST['important'])) {
 | |
|                             $important = 'Y';
 | |
|                         } else {
 | |
|                             $important = 'N';
 | |
|                         }
 | |
|                         // Now insert into db:
 | |
|                         $database->execute(
 | |
|                             "INSERT INTO blotter (entry_date, entry_text, important) VALUES (now(), ?, ?)",
 | |
|                             [$entry_text, $important]
 | |
|                         );
 | |
|                         log_info("blotter", "Added Message: $entry_text");
 | |
|                         $page->set_mode(PageMode::REDIRECT);
 | |
|                         $page->set_redirect(make_link("blotter/editor"));
 | |
|                     }
 | |
|                     break;
 | |
|                 case "remove":
 | |
|                     /**
 | |
|                      * Removes an entry
 | |
|                      */
 | |
|                     if (!$user->can(Permissions::BLOTTER_ADMIN) || !$user->check_auth_token()) {
 | |
|                         $this->theme->display_permission_denied();
 | |
|                     } else {
 | |
|                         $id = int_escape($_POST['id']);
 | |
|                         if (!isset($id)) {
 | |
|                             die("No ID!");
 | |
|                         }
 | |
|                         $database->Execute("DELETE FROM blotter WHERE id=:id", ["id"=>$id]);
 | |
|                         log_info("blotter", "Removed Entry #$id");
 | |
|                         $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();
 | |
|     }
 | |
| 
 | |
|     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);
 | |
|     }
 | |
| }
 |