Example #1
0
 function __construct()
 {
     parent::__construct(Config::getCfg('site')['pagetitle'], "", 0);
     $boards = Model::get()->getBoards();
     $archiveBoards = array_filter($boards, function ($b) {
         return $b->isArchive();
     });
     $plainBoards = array_filter($boards, function ($b) {
         return !$b->isArchive();
     });
     $html = "<div class='boardlist_big'><h1>Archived Boards</h1><hr style='width:64px;'>";
     foreach ($archiveBoards as $b) {
         $html .= Site::parseHtmlFragment("indexArchiveBoard.html", ["%ago%", "%crawltime%", "%shortname%", "%longname%", "%posts%", "%threads%", "%firstcrawl%"], [ago(time() - $b->getLastCrawl()), $b->getLastCrawl(), $b->getName(), $b->getLongName(), $b->getNoPosts(), $b->getNoThreads(), date("j F Y", $b->getFirstCrawl())]);
     }
     $html .= "</div>";
     $html .= "<script type='text/javascript' src='/script/boardUpdate.js'></script>";
     if (count($plainBoards) > 0) {
         $html .= "<div class='boardlist_big'><h1>Boards</h1><hr style='width:64px;'>";
         foreach ($plainBoards as $b) {
             $html .= Site::parseHtmlFragment("indexBoard.html", ["%ago%", "%crawltime%", "%shortname%", "%longname%", "%posts%", "%threads%", "%firstcrawl%"], [ago(time() - $b->getLastCrawl()), $b->getLastCrawl(), $b->getName(), $b->getLongName(), $b->getNoPosts(), $b->getNoThreads(), date("j F Y", $b->getFirstCrawl())]);
         }
         $html .= "</div>";
     }
     $this->setBody($html);
 }
Example #2
0
 public function __construct()
 {
     parent::__construct("Report Queue", el('h2', "Reports"), Config::getCfg('permissions')['delete']);
     $reports = Model::get()->getReports();
     $html = "<table class='reportTable'><tr><th colspan='3'>Report Queue</th></tr><tr><th style='width:3em;'>Times</th><th>Post</th><th style='width:20em;'>Options</th></tr>";
     foreach ($reports as $report) {
         $hash = bin2hex($report['md5']);
         $html .= "<tr id='report{$report['no']}'>";
         $html .= "<td>" . $report['count'] . "</td>";
         $html .= "<td><a href='{$report['threadid']}#p{$report['no']}' data-board='{$report['board']}' data-thread='{$report['threadid']}' data-post='{$report['no']}' class='quotelink noEmbed'>&gt;&gt;{$report['no']}</a></td>";
         $html .= "<td><a class='button' href='javascript:deletePost({$report['no']},\"{$report['board']}\");' >Delete&nbsp;Post</a>&nbsp;";
         $html .= "<a class='button' href='javascript:banImage(\"{$hash}\");' id='ban{$hash}'>Ban&nbsp;Image</a>&nbsp;";
         $html .= "<a class='button' href='javascript:deleteReport({$report['no']},\"{$report['board']}\");'>Delete&nbsp;Report</a>&nbsp;";
         $html .= "<a class='button' href='javascript:banReporter({$report['no']},\"{$report['board']}\");'>Ban&nbsp;Reporter</a></td>";
         $html .= "</tr>";
     }
     $html .= "</table>";
     if (Site::getUser()->getPrivilege() >= Config::getCfg('permissions')['owner']) {
         $html .= "<br><table class='reportTable'><tr><th colspan='3'>Last Few Deleted Posts</th></tr><tr><th style='width:3em;'>Board</th><th>Post</th><th style='width:7em;'>Options</th></tr>";
         foreach (Model::get()->getBoards() as $board) {
             $lastFew = OldModel::getLastNDeletedPosts($board->getName(), 5);
             foreach ($lastFew as $report) {
                 $html .= "<tr id='report{$report['no']}'>";
                 $html .= "<td>" . $board->getName() . "</td>";
                 $html .= "<td>&gt;&gt;{$report['no']} ({$report['name']}{$report['trip']})</td>";
                 $html .= "<td><a class='button' href='javascript:restorePost({$report['no']},\"{$board->getName()}\");' >Restore&nbsp;Post</a></td>";
                 $html .= "</tr>";
             }
         }
         $html .= "</table>";
     }
     $this->appendToBody($html);
 }
Example #3
0
 static function setStyle() : string
 {
     $styles = Config::getCfg("styles");
     if (in_array(post('style'), array_keys($styles))) {
         Site::getUser()->setTheme(post('style'));
     }
     return '';
 }
Example #4
0
 function setTheme($theme)
 {
     if (in_array($theme, array_keys(Config::getCfg('styles')))) {
         if ($this->uid != 0) {
             OldModel::updateUserTheme($this->uid, $theme);
         }
         $this->theme = $theme;
     }
 }
Example #5
0
 function renderHeader()
 {
     parent::renderHeader();
     if (!$this->clearHeader) {
         $this->header .= Site::parseHtmlFragment('pagebody.html', ['<!-- boardlist -->', '<!-- name -->', '<!-- subtitle -->'], [Board::getBoardList(), Config::getCfg('site')['name'], Config::getCfg('site')['subtitle']]);
         if ($_SERVER['SCRIPT_NAME'] != "/index.php") {
             if ($this->board == null) {
                 $this->header .= div('[' . a('HOME', '/index.php') . ']', 'centertext');
             } else {
                 $this->header .= "<div style='position:relative; top: -20px;' id='topLinks'>[<a href='/index.php'>Home</a>]";
                 if ($_SERVER['SCRIPT_NAME'] != "/board.php") {
                     $this->header .= " [" . a('Return', "/{$this->board->getName()}/") . "]";
                 }
                 if ($_SERVER['SCRIPT_NAME'] != "/catalog.php" && !$this->board->isSwfBoard()) {
                     $this->header .= " [" . a('Catalog', "/{$this->board->getName()}/catalog") . "]";
                 }
                 $this->header .= "</div><br>";
             }
         }
     }
     return $this->header;
 }
Example #6
0
 function getImgUrl()
 {
     if (!$this->hasImage()) {
         return "";
     }
     $imgcfg = $this->ext == '.swf' ? Config::getCfg("servers")["swf"] : Config::getCfg("servers")["images"];
     if ($imgcfg['https']) {
         $url = 'https://' . $imgcfg['httpshostname'] . ($imgcfg['httpsport'] != 443 ? ":" . $imgcfg['httpsport'] : "");
     } else {
         $url = 'http://' . $imgcfg['hostname'] . ($imgcfg['port'] != 80 ? ":" . $imgcfg['port'] : "");
     }
     $md5Hex = bin2hex($this->md5bin);
     return $url . str_replace(['%hex%', '%ext%', '%1%', '%2%'], [$md5Hex, $this->ext, $md5Hex[0], $md5Hex[1]], $imgcfg['format']);
 }
Example #7
0
 static function getSiteHostname()
 {
     return Config::getCfg("servers")["site"]["hostname"];
 }
Example #8
0
 public static function sitectl(array $path) : array
 {
     Site::requirePrivilege(Config::getCfg('permissions')['owner']);
     switch (strtolower($path[3])) {
         case 'enterbackupmode':
             Site::enterBackupMode();
             break;
         case 'exitbackupmode':
             Site::exitBackupMode();
             break;
     }
     return ['result' => 'success'];
 }
Example #9
0
 public static function styles(array $path) : array
 {
     header('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 60));
     header('Cache-Control: max-age=3600, public, must-revalidate');
     header_remove("Pragma");
     return Config::getCfg("styles");
 }
Example #10
0
 protected function renderHeader()
 {
     $styles = "";
     foreach (Config::getCfg('styles')[$this->user->getTheme()] as $css) {
         $styles .= "<link rel='stylesheet' type='text/css' href='{$css}' data-name='theme'>";
     }
     $ga = Config::getCfg('site')['ga_id'] ?? '';
     if ($ga != '') {
         $analytics = Site::parseHtmlFragment("ga.html", ['__ID__'], [$ga]);
     } else {
         $analytics = "";
     }
     $this->header = Site::parseHtmlFragment('pagehead.html', ['<!-- styles -->', '<!-- pageTitle -->', '<!-- additionalHeaders -->', '<!-- navbar -->', '<!-- ga -->'], [$styles, $this->title, $this->addToHead, $this->renderNavBar(), $analytics]);
     return $this->header;
 }
Example #11
0
 /**
  * Routes to the proper view given a path relative to the site root.
  * @param string $path
  * @throws Exception
  * @throws NotFoundException if the path can't be routed
  */
 public static function route(string $path)
 {
     $exploded = explode('/', $path);
     $base = strtolower($exploded[1]);
     switch ($base) {
         case "do":
             // Action pages begin with do
             Action::run($exploded);
             break;
         case "api":
             // API endpoints begin with api
             $page = PublicApi::run($exploded);
             break;
         case "admin":
             $page = AdminApi::run($exploded);
             break;
         case "_":
             // Fuuka API support
             $page = FuukaApiAdaptor::run($exploded);
             break;
         default:
             $pages = Config::getCfg('pages');
             $boards = Model::get()->getBoards(true);
             if (array_key_exists($base, $boards)) {
                 $board = $boards[$base];
                 if (isset($exploded[2])) {
                     switch ($exploded[2]) {
                         case "catalog":
                             $page = new Catalog($board);
                             break;
                         case "thread":
                         case "res":
                             $num = $exploded[3] ?? "";
                             if (is_numeric($num)) {
                                 $page = new ThreadView(Model::get()->getThread($board, $num));
                             } else {
                                 throw new Exception("Invalid thread id provided");
                             }
                             break;
                         case "post":
                             $post = Model::get()->getPost($board, $exploded[3] ?? 0);
                             try {
                                 $thread = Model::get()->getThread($board, $post->threadid);
                                 header("Location: /{$board->getName()}/thread/{$post->getThreadId()}#{$post->getNo()}");
                                 exit;
                             } catch (NotFoundException $ex) {
                                 $page = new OrphanPost($post);
                             }
                             break;
                         case "search":
                             $page = new Search($board, $exploded);
                             break;
                         case "":
                             $page = new BoardIndexPage($boards[$base], 1);
                             break;
                         default:
                             if (is_numeric($exploded[2])) {
                                 $page = new BoardIndexPage($boards[$base], $exploded[2]);
                             } else {
                                 throw new Exception("Unknown board page requested");
                             }
                             break;
                     }
                 } else {
                     if (!array_key_exists($base, $pages)) {
                         header("Location: {$path}/");
                         exit;
                     } else {
                         $class = '\\View\\Pages\\' . $pages[$base];
                         $page = new $class();
                     }
                 }
             } else {
                 if (array_key_exists($base, $pages)) {
                     $class = '\\View\\Pages\\' . $pages[$base];
                     $page = new $class();
                 }
             }
             break;
     }
     if (isset($page)) {
         echo $page->display();
     } else {
         throw new NotFoundException('Unrecognized URL: ' . $path);
     }
 }