notify("shm_image_bans", $event->image->hash); } public function onImageInfoSet(ImageInfoSetEvent $event): void { global $cache; $cache->delete("thumb-block:{$event->image->id}"); } public function onAdminBuilding(AdminBuildingEvent $event): void { global $page; $html = make_form(make_link("admin/cache_purge"), "POST"); $html .= ""; $html .= "
"; $html .= "\n"; $page->add_block(new Block("Cache Purger", $html)); } public function onUserPageBuilding(UserPageBuildingEvent $event): void { global $database, $user, $config; if ($user->can(Permissions::CHANGE_SETTING) && $config->get_bool('r34_comic_integration')) { $current_state = bool_escape($database->get_one("SELECT comic_admin FROM users WHERE id=:id", ['id' => $event->display_user->id])); $this->theme->show_comic_changer($event->display_user, $current_state); } } public function onCliGen(CliGenEvent $event): void { $event->app->register('wipe-thumb-cache') ->addArgument('tags', InputArgument::REQUIRED) ->setDescription('Delete cached thumbnails for images matching the given tags') ->setCode(function (InputInterface $input, OutputInterface $output): int { global $cache; $tags = Tag::explode($input->getArgument('tags')); foreach (Search::find_images_iterable(0, null, $tags) as $image) { $output->writeln($image->id); $cache->delete("thumb-block:{$image->id}"); } return Command::SUCCESS; }); } public function onSourceSet(SourceSetEvent $event): void { // Maybe check for 404? if (empty($event->source)) { return; } if (!preg_match("/^(https?:\/\/)?[a-zA-Z0-9\.\-]+(\/.*)?$/", $event->source)) { throw new SCoreException("Invalid source URL"); } } public function onRobotsBuilding(RobotsBuildingEvent $event): void { // robots should only check the canonical site, not mirrors if ($_SERVER['HTTP_HOST'] != "rule34.paheal.net") { $event->add_disallow(""); } } public function onPageRequest(PageRequestEvent $event): void { global $database, $page, $user; # Database might not be connected at this point... #$database->set_timeout(null); // deleting users can take a while $page->add_html_header(""); $page->add_html_header(""); if (function_exists("sd_notify_watchdog")) { \sd_notify_watchdog(); } if ($event->page_matches("rule34/comic_admin")) { if ($user->can(Permissions::CHANGE_SETTING) && $user->check_auth_token()) { $input = validate_input([ 'user_id' => 'user_id,exists', 'is_admin' => 'bool', ]); $database->execute( 'UPDATE users SET comic_admin=:is_admin WHERE id=:id', ['is_admin' => $input['is_admin'] ? 't' : 'f', 'id' => $input['user_id']] ); $page->set_mode(PageMode::REDIRECT); $page->set_redirect(referer_or(make_link())); } } if ($event->page_matches("tnc_agreed")) { setcookie("ui-tnc-agreed", "true", 0, "/"); $page->set_mode(PageMode::REDIRECT); $page->set_redirect(referer_or("/")); } if ($event->page_matches("admin/cache_purge")) { if (!$user->can(Permissions::MANAGE_ADMINTOOLS)) { $this->theme->display_permission_denied(); } else { if ($user->check_auth_token()) { $all = $_POST["hash"]; $matches = []; if (preg_match_all("/([a-fA-F0-9]{32})/", $all, $matches)) { $matches = $matches[0]; foreach ($matches as $hash) { $page->flash("Cleaning {$hash}"); if (strlen($hash) != 32) { continue; } log_info("admin", "Cleaning {$hash}"); @unlink(warehouse_path(Image::IMAGE_DIR, $hash)); @unlink(warehouse_path(Image::THUMBNAIL_DIR, $hash)); $database->notify("shm_image_bans", $hash); } } } $page->set_mode(PageMode::REDIRECT); $page->set_redirect(make_link("admin")); } } } }