make Cache its own thing, separate from Database

This commit is contained in:
Shish 2019-10-02 10:49:32 +01:00
parent 842df41951
commit e08cdb1638
20 changed files with 105 additions and 117 deletions

View file

@ -4,7 +4,7 @@
* actually do anything as far as the app is concerned
*/
global $config, $database, $user, $page, $_tracer;
global $cache, $config, $database, $user, $page, $_tracer;
require_once "core/sys_config.php";
require_once "core/polyfills.php";
@ -37,7 +37,10 @@ unset($_shm_files);
unset($_shm_filename);
$_tracer->end();
// connect to the database
$_tracer->begin("Connecting to Cache");
$cache = new Cache(CACHE_DSN);
$_tracer->end();
$_tracer->begin("Connecting to DB");
$database = new Database();
$config = new DatabaseConfig($database);

View file

@ -319,6 +319,8 @@ class DatabaseConfig extends BaseConfig
string $sub_column = null,
string $sub_value = null
) {
global $cache;
$this->database = $database;
$this->table_name = $table_name;
$this->sub_value = $sub_value;
@ -329,7 +331,7 @@ class DatabaseConfig extends BaseConfig
$cache_name .= "_".$sub_value;
}
$cached = $this->database->cache->get($cache_name);
$cached = $cache->get($cache_name);
if ($cached) {
$this->values = $cached;
} else {
@ -346,12 +348,14 @@ class DatabaseConfig extends BaseConfig
foreach ($this->database->get_all($query, $args) as $row) {
$this->values[$row["name"]] = $row["value"];
}
$this->database->cache->set($cache_name, $this->values);
$cache->set($cache_name, $this->values);
}
}
public function save(string $name=null): void
{
global $cache;
if (is_null($name)) {
reset($this->values); // rewind the array to the first element
foreach ($this->values as $name => $value) {
@ -379,7 +383,7 @@ class DatabaseConfig extends BaseConfig
}
// rather than deleting and having some other request(s) do a thundering
// herd of race-conditioned updates, just save the updated version once here
$this->database->cache->set("config", $this->values);
$cache->set("config", $this->values);
}
}

View file

@ -29,12 +29,6 @@ class Database
*/
private $engine = null;
/**
* The currently active cache engine.
* @var Cache|null
*/
public $cache = null;
/**
* A boolean flag to track if we already have an active transaction.
* (ie: True if beginTransaction() already called)
@ -48,16 +42,6 @@ class Database
*/
public $query_count = 0;
/**
* For now, only connect to the cache, as we will pretty much certainly
* need it. There are some pages where all the data is in cache, so the
* DB connection is on-demand.
*/
public function __construct()
{
$this->cache = new Cache(CACHE_DSN);
}
private function connect_db(): void
{
# FIXME: detect ADODB URI, automatically translate PDO DSN
@ -364,12 +348,9 @@ class MockDatabase extends Database
private $query_id = 0;
/** @var array */
private $responses = [];
/** @var ?NoCache */
public $cache = null;
public function __construct(array $responses = [])
{
$this->cache = new NoCache();
$this->responses = $responses;
}

View file

@ -41,16 +41,16 @@ class Image
/** @var int */
public $owner_id;
/** @var string */
public $owner_ip;
/** @var string */
public $posted;
/** @var string */
public $source;
/** @var boolean */
public $locked = false;
@ -291,14 +291,14 @@ class Image
*/
public static function count_images(array $tags=[]): int
{
global $database;
global $cache, $database;
$tag_count = count($tags);
if ($tag_count === 0) {
$total = $database->cache->get("image-count");
$total = $cache->get("image-count");
if (!$total) {
$total = $database->get_one("SELECT COUNT(*) FROM images");
$database->cache->set("image-count", $total, 600);
$cache->set("image-count", $total, 600);
}
} elseif ($tag_count === 1 && !preg_match("/[:=><\*\?]/", $tags[0])) {
$total = $database->get_one(
@ -682,7 +682,7 @@ class Image
*/
public function set_tags(array $unfiltered_tags): void
{
global $database;
global $cache, $database;
$unfiltered_tags = array_unique($unfiltered_tags);
@ -755,7 +755,7 @@ class Image
}
log_info("core_image", "Tags for Image #{$this->id} set to: ".Tag::implode($tags), null, ["image_id" => $this->id]);
$database->cache->delete("image-{$this->id}-tags");
$cache->delete("image-{$this->id}-tags");
}
}

View file

@ -66,8 +66,8 @@ class User
public static function by_session(string $name, string $session): ?User
{
global $config, $database;
$row = $database->cache->get("user-session:$name-$session");
global $cache, $config, $database;
$row = $cache->get("user-session:$name-$session");
if (!$row) {
if ($database->get_driver_name() === DatabaseDriver::MYSQL) {
$query = "SELECT * FROM users WHERE name = :name AND md5(concat(pass, :ip)) = :sess";
@ -75,23 +75,23 @@ class User
$query = "SELECT * FROM users WHERE name = :name AND md5(pass || :ip) = :sess";
}
$row = $database->get_row($query, ["name"=>$name, "ip"=>get_session_ip($config), "sess"=>$session]);
$database->cache->set("user-session:$name-$session", $row, 600);
$cache->set("user-session:$name-$session", $row, 600);
}
return is_null($row) ? null : new User($row);
}
public static function by_id(int $id): ?User
{
global $database;
global $cache, $database;
if ($id === 1) {
$cached = $database->cache->get('user-id:'.$id);
$cached = $cache->get('user-id:'.$id);
if ($cached) {
return new User($cached);
}
}
$row = $database->get_row("SELECT * FROM users WHERE id = :id", ["id"=>$id]);
if ($id === 1) {
$database->cache->set('user-id:'.$id, $row, 600);
$cache->set('user-id:'.$id, $row, 600);
}
return is_null($row) ? null : new User($row);
}

View file

@ -305,7 +305,7 @@ function path_to_tags(string $path): string
$path = dirname($path);
$path = str_replace(";", ":", $path);
$path = str_replace("__", " ", $path);
$category = "";
foreach (explode("/", $path) as $dir) {
@ -366,7 +366,7 @@ $_shm_load_start = microtime(true);
*/
function get_debug_info(): string
{
global $config, $_shm_event_count, $database, $_shm_load_start;
global $cache, $config, $_shm_event_count, $database, $_shm_load_start;
$i_mem = sprintf("%5.2f", ((memory_get_peak_usage(true)+512)/1024)/1024);
@ -378,8 +378,8 @@ function get_debug_info(): string
$time = sprintf("%.2f", microtime(true) - $_shm_load_start);
$dbtime = sprintf("%.2f", $database->dbtime);
$i_files = count(get_included_files());
$hits = $database->cache->get_hits();
$miss = $database->cache->get_misses();
$hits = $cache->get_hits();
$miss = $cache->get_misses();
$debug = "<br>Took $time seconds (db:$dbtime) and {$i_mem}MB of RAM";
$debug .= "; Used $i_files files and {$database->query_count} queries";

View file

@ -9,7 +9,7 @@ class AutoComplete extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $page, $database;
global $cache, $page, $database;
if ($event->page_matches("api/internal/autocomplete")) {
if (!isset($_GET["s"])) {
@ -42,7 +42,7 @@ class AutoComplete extends Extension
$cache_key .= "-" . $_GET["limit"];
}
$res = $database->cache->get($cache_key);
$res = $cache->get($cache_key);
if (!$res) {
$res = $database->get_pairs(
$database->scoreql_to_sql("
@ -55,7 +55,7 @@ class AutoComplete extends Extension
$limitSQL"),
$SQLarr
);
$database->cache->set($cache_key, $res, 600);
$cache->set($cache_key, $res, 600);
}
$page->set_data(json_encode($res));

View file

@ -39,12 +39,12 @@ class Blocks extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $database, $page, $user;
global $cache, $database, $page, $user;
$blocks = $database->cache->get("blocks");
$blocks = $cache->get("blocks");
if ($blocks === false) {
$blocks = $database->get_all("SELECT * FROM blocks");
$database->cache->set("blocks", $blocks, 600);
$cache->set("blocks", $blocks, 600);
}
foreach ($blocks as $block) {
$path = implode("/", $event->args);
@ -63,7 +63,7 @@ class Blocks extends Extension
VALUES (?, ?, ?, ?, ?)
", [$_POST['pages'], $_POST['title'], $_POST['area'], (int)$_POST['priority'], $_POST['content']]);
log_info("blocks", "Added Block #".($database->get_last_insert_id('blocks_id_seq'))." (".$_POST['title'].")");
$database->cache->delete("blocks");
$cache->delete("blocks");
$page->set_mode(PageMode::REDIRECT);
$page->set_redirect(make_link("blocks/list"));
}
@ -83,7 +83,7 @@ class Blocks extends Extension
", [$_POST['pages'], $_POST['title'], $_POST['area'], (int)$_POST['priority'], $_POST['content'], $_POST['id']]);
log_info("blocks", "Updated Block #".$_POST['id']." (".$_POST['title'].")");
}
$database->cache->delete("blocks");
$cache->delete("blocks");
$page->set_mode(PageMode::REDIRECT);
$page->set_redirect(make_link("blocks/list"));
}

View file

@ -263,13 +263,13 @@ class CommentList extends Extension
public function onPostListBuilding(PostListBuildingEvent $event)
{
global $config, $database;
global $cache, $config, $database;
$cc = $config->get_int("comment_count");
if ($cc > 0) {
$recent = $database->cache->get("recent_comments");
$recent = $cache->get("recent_comments");
if (empty($recent)) {
$recent = $this->get_recent_comments($cc);
$database->cache->set("recent_comments", $recent, 60);
$cache->set("recent_comments", $recent, 60);
}
if (count($recent) > 0) {
$this->theme->display_recent_comments($recent);
@ -370,17 +370,17 @@ class CommentList extends Extension
// page building {{{
private function build_page(int $current_page)
{
global $database, $user;
global $cache, $database, $user;
$where = SPEED_HAX ? "WHERE posted > now() - interval '24 hours'" : "";
$total_pages = $database->cache->get("comment_pages");
$total_pages = $cache->get("comment_pages");
if (empty($total_pages)) {
$total_pages = (int)($database->get_one("
SELECT COUNT(c1)
FROM (SELECT COUNT(image_id) AS c1 FROM comments $where GROUP BY image_id) AS s1
") / 10);
$database->cache->set("comment_pages", $total_pages, 600);
$cache->set("comment_pages", $total_pages, 600);
}
$total_pages = max($total_pages, 1);

View file

@ -42,16 +42,16 @@ class Featured extends Extension
public function onPostListBuilding(PostListBuildingEvent $event)
{
global $config, $database, $page, $user;
global $cache, $config, $database, $page, $user;
$fid = $config->get_int("featured_id");
if ($fid > 0) {
$image = $database->cache->get("featured_image_object:$fid");
$image = $cache->get("featured_image_object:$fid");
if ($image === false) {
$image = Image::by_id($fid);
if ($image) { // make sure the object is fully populated before saving
$image->get_tag_array();
}
$database->cache->set("featured_image_object:$fid", $image, 600);
$cache->set("featured_image_object:$fid", $image, 600);
}
if (!is_null($image)) {
if (Extension::is_enabled(RatingsInfo::KEY)) {

View file

@ -79,7 +79,7 @@ class Index extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $database, $page, $user;
global $cache, $page, $user;
if ($event->page_matches("post/list")) {
if (isset($_GET['search'])) {
// implode(explode()) to resolve aliases and sanitise
@ -123,10 +123,10 @@ class Index extends Extension
}
if ($count_search_terms === 0 && ($page_number < 10)) {
// extra caching for the first few post/list pages
$images = $database->cache->get("post-list:$page_number");
$images = $cache->get("post-list:$page_number");
if (!$images) {
$images = Image::find_images(($page_number-1)*$page_size, $page_size, $search_terms);
$database->cache->set("post-list:$page_number", $images, 60);
$cache->set("post-list:$page_number", $images, 60);
}
}
}
@ -175,9 +175,9 @@ class Index extends Extension
public function onImageInfoSet(ImageInfoSetEvent $event)
{
global $database;
global $cache;
if (SPEED_HAX) {
$database->cache->delete("thumb-block:{$event->image->id}");
$cache->delete("thumb-block:{$event->image->id}");
}
}

View file

@ -113,20 +113,20 @@ class IPBan extends Extension
public function onAddIPBan(AddIPBanEvent $event)
{
global $user, $database;
global $cache, $user, $database;
$sql = "INSERT INTO bans (ip, reason, end_timestamp, banner_id) VALUES (:ip, :reason, :end, :admin_id)";
$database->Execute($sql, ["ip"=>$event->ip, "reason"=>$event->reason, "end"=>strtotime($event->end), "admin_id"=>$user->id]);
$database->cache->delete("ip_bans_sorted");
$cache->delete("ip_bans_sorted");
log_info("ipban", "Banned {$event->ip} because '{$event->reason}' until {$event->end}");
}
public function onRemoveIPBan(RemoveIPBanEvent $event)
{
global $database;
global $cache, $database;
$ban = $database->get_row("SELECT * FROM bans WHERE id = :id", ["id"=>$event->id]);
if ($ban) {
$database->Execute("DELETE FROM bans WHERE id = :id", ["id"=>$event->id]);
$database->cache->delete("ip_bans_sorted");
$cache->delete("ip_bans_sorted");
log_info("ipban", "Removed {$ban['ip']}'s ban");
}
}
@ -306,9 +306,9 @@ class IPBan extends Extension
// returns [ips, nets]
private function get_active_bans_sorted()
{
global $database;
global $cache;
$cached = $database->cache->get("ip_bans_sorted");
$cached = $cache->get("ip_bans_sorted");
if ($cached) {
return $cached;
}
@ -325,7 +325,7 @@ class IPBan extends Extension
}
$sorted = [$ips, $nets];
$database->cache->set("ip_bans_sorted", $sorted, 600);
$cache->set("ip_bans_sorted", $sorted, 600);
return $sorted;
}
// }}}

View file

@ -39,7 +39,7 @@ class LogDatabase extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $database, $user;
global $cache, $database, $user;
if ($event->page_matches("log/view")) {
if ($user->can(Permissions::VIEW_EVENTLOG)) {
$wheres = [];
@ -95,12 +95,12 @@ class LogDatabase extends Extension
$limit = 50;
$offset = ($page_num-1) * $limit;
$page_total = $database->cache->get("event_log_length");
$page_total = $cache->get("event_log_length");
if (!$page_total) {
$page_total = $database->get_one("SELECT count(*) FROM score_log $where", $args);
// don't cache a length of zero when the extension is first installed
if ($page_total > 10) {
$database->cache->set("event_log_length", $page_total, 600);
$cache->set("event_log_length", $page_total, 600);
}
}

View file

@ -122,7 +122,7 @@ class PrivMsg extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $database, $page, $user;
global $cache, $database, $page, $user;
if ($event->page_matches("pm")) {
if (!$user->is_anonymous()) {
switch ($event->get_arg(0)) {
@ -135,7 +135,7 @@ class PrivMsg extends Extension
$from_user = User::by_id(int_escape($pm["from_id"]));
if ($pm["to_id"] == $user->id) {
$database->execute("UPDATE private_message SET is_read='Y' WHERE id = :id", ["id" => $pm_id]);
$database->cache->delete("pm-count-{$user->id}");
$cache->delete("pm-count-{$user->id}");
}
$this->theme->display_message($page, $from_user, $user, new PM($pm));
} else {
@ -150,7 +150,7 @@ class PrivMsg extends Extension
$this->theme->display_error(404, "No such PM", "There is no PM #$pm_id");
} elseif (($pm["to_id"] == $user->id) || $user->can(Permissions::VIEW_OTHER_PMS)) {
$database->execute("DELETE FROM private_message WHERE id = :id", ["id" => $pm_id]);
$database->cache->delete("pm-count-{$user->id}");
$cache->delete("pm-count-{$user->id}");
log_info("pm", "Deleted PM #$pm_id", "PM deleted");
$page->set_mode(PageMode::REDIRECT);
$page->set_redirect($_SERVER["HTTP_REFERER"]);
@ -179,7 +179,7 @@ class PrivMsg extends Extension
public function onSendPM(SendPMEvent $event)
{
global $database;
global $cache, $database;
$database->execute(
"
INSERT INTO private_message(
@ -189,7 +189,7 @@ class PrivMsg extends Extension
["fromid" => $event->pm->from_id, "fromip" => $event->pm->from_ip,
"toid" => $event->pm->to_id, "subject" => $event->pm->subject, "message" => $event->pm->message]
);
$database->cache->delete("pm-count-{$event->pm->to_id}");
$cache->delete("pm-count-{$event->pm->to_id}");
log_info("pm", "Sent PM to User #{$event->pm->to_id}");
}
@ -216,9 +216,9 @@ class PrivMsg extends Extension
private function count_pms(User $user)
{
global $database;
global $cache, $database;
$count = $database->cache->get("pm-count:{$user->id}");
$count = $cache->get("pm-count:{$user->id}");
if (is_null($count) || $count === false) {
$count = $database->get_one("
SELECT count(*)
@ -226,7 +226,7 @@ class PrivMsg extends Extension
WHERE to_id = :to_id
AND is_read = :is_read
", ["to_id" => $user->id, "is_read" => "N"]);
$database->cache->set("pm-count:{$user->id}", $count, 600);
$cache->set("pm-count:{$user->id}", $count, 600);
}
return $count;
}

View file

@ -5,10 +5,10 @@ class RegenThumb extends Extension
{
public function regenerate_thumbnail($image, $force = true): string
{
global $database;
global $cache;
$event = new ThumbnailGenerationEvent($image->hash, $image->ext, $force);
send_event($event);
$database->cache->delete("thumb-block:{$image->id}");
$cache->delete("thumb-block:{$image->id}");
return $event->generated;
}

View file

@ -89,21 +89,21 @@ class ReportImage extends Extension
public function onAddReportedImage(AddReportedImageEvent $event)
{
global $database;
global $cache, $database;
log_info("report_image", "Adding report of Image #{$event->report->image_id} with reason '{$event->report->reason}'", null, ["image_id" => $event->report->image_id]);
$database->Execute(
"INSERT INTO image_reports(image_id, reporter_id, reason)
VALUES (?, ?, ?)",
[$event->report->image_id, $event->report->user_id, $event->report->reason]
);
$database->cache->delete("image-report-count");
$cache->delete("image-report-count");
}
public function onRemoveReportedImage(RemoveReportedImageEvent $event)
{
global $database;
global $cache, $database;
$database->Execute("DELETE FROM image_reports WHERE id = ?", [$event->id]);
$database->cache->delete("image-report-count");
$cache->delete("image-report-count");
}
public function onUserPageBuilding(UserPageBuildingEvent $event)
@ -149,9 +149,9 @@ class ReportImage extends Extension
public function onImageDeletion(ImageDeletionEvent $event)
{
global $database;
global $cache, $database;
$database->Execute("DELETE FROM image_reports WHERE image_id = ?", [$event->image->id]);
$database->cache->delete("image-report-count");
$cache->delete("image-report-count");
}
public function onUserDeletion(UserDeletionEvent $event)
@ -176,9 +176,9 @@ class ReportImage extends Extension
public function delete_reports_by(int $user_id)
{
global $database;
global $cache, $database;
$database->execute("DELETE FROM image_reports WHERE reporter_id=?", [$user_id]);
$database->cache->delete("image-report-count");
$cache->delete("image-report-count");
}
protected function install()
@ -247,12 +247,12 @@ class ReportImage extends Extension
public function count_reported_images(): int
{
global $database;
global $cache, $database;
$count = $database->cache->get("image-report-count");
$count = $cache->get("image-report-count");
if (is_null($count) || $count === false) {
$count = $database->get_one("SELECT count(*) FROM image_reports");
$database->cache->set("image-report-count", $count, 600);
$cache->set("image-report-count", $count, 600);
}
return $count;

View file

@ -76,9 +76,9 @@ class RSSImages extends Extension
private function thumb(Image $image): string
{
global $database;
global $cache, $database;
$cached = $database->cache->get("rss-thumb:{$image->id}");
$cached = $cache->get("rss-thumb:{$image->id}");
if ($cached) {
return $cached;
}
@ -106,7 +106,7 @@ class RSSImages extends Extension
</item>
";
$database->cache->set("rss-thumb:{$image->id}", $data, 3600);
$cache->set("rss-thumb:{$image->id}", $data, 3600);
return $data;
}

View file

@ -13,7 +13,7 @@ class StatsDInterface extends Extension
private function _stats(string $type)
{
global $_shm_event_count, $database, $_shm_load_start;
global $_shm_event_count, $cache, $database, $_shm_load_start;
$time = microtime(true) - $_shm_load_start;
StatsDInterface::$stats["shimmie.$type.hits"] = "1|c";
StatsDInterface::$stats["shimmie.$type.time"] = "$time|ms";
@ -22,8 +22,8 @@ class StatsDInterface extends Extension
StatsDInterface::$stats["shimmie.$type.files"] = count(get_included_files())."|c";
StatsDInterface::$stats["shimmie.$type.queries"] = $database->query_count."|c";
StatsDInterface::$stats["shimmie.$type.events"] = $_shm_event_count."|c";
StatsDInterface::$stats["shimmie.$type.cache-hits"] = $database->cache->get_hits()."|c";
StatsDInterface::$stats["shimmie.$type.cache-misses"] = $database->cache->get_misses()."|c";
StatsDInterface::$stats["shimmie.$type.cache-hits"] = $cache->get_hits()."|c";
StatsDInterface::$stats["shimmie.$type.cache-misses"] = $cache->get_misses()."|c";
}
public function onPageRequest(PageRequestEvent $event)

View file

@ -20,7 +20,7 @@ class TagList extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $page, $database;
global $cache, $page, $database;
if ($event->page_matches("tags")) {
$this->theme->set_navigation($this->build_navigation());
@ -60,7 +60,7 @@ class TagList extends Extension
}
$res = null;
$database->cache->get($cache_key);
$cache->get($cache_key);
if (!$res) {
$res = $database->get_col($database->scoreql_to_sql("
SELECT tag
@ -69,7 +69,7 @@ class TagList extends Extension
AND count > 0
$limitSQL
"), $SQLarr);
$database->cache->set($cache_key, $res, 600);
$cache->set($cache_key, $res, 600);
}
$page->set_mode(PageMode::DATA);
@ -183,10 +183,10 @@ class TagList extends Extension
private static function get_omitted_tags(): array
{
global $config, $database;
global $cache, $config, $database;
$tags_config = $config->get_string(TagListConfig::OMIT_TAGS);
$results = $database->cache->get("tag_list_omitted_tags:".$tags_config);
$results = $cache->get("tag_list_omitted_tags:".$tags_config);
if ($results==null) {
$results = [];
@ -213,7 +213,7 @@ class TagList extends Extension
$results = $database->get_col("SELECT id FROM tags WHERE " . implode(" OR ", $where), $args);
$database->cache->set("tag_list_omitted_tags:" . $tags_config, $results, 600);
$cache->set("tag_list_omitted_tags:" . $tags_config, $results, 600);
}
return $results;
}
@ -531,9 +531,9 @@ class TagList extends Extension
private function add_popular_block(Page $page)
{
global $database, $config;
global $cache, $database, $config;
$tags = $database->cache->get("popular_tags");
$tags = $cache->get("popular_tags");
if (empty($tags)) {
$omitted_tags = self::get_omitted_tags();
@ -560,7 +560,7 @@ class TagList extends Extension
$tags = $database->get_all($query, $args);
$database->cache->set("popular_tags", $tags, 600);
$cache->set("popular_tags", $tags, 600);
}
if (count($tags) > 0) {
$this->theme->display_popular_block($page, $tags);
@ -589,12 +589,12 @@ class TagList extends Extension
public static function get_related_tags(array $search, int $limit): array
{
global $config, $database;
global $cache, $database;
$wild_tags = $search;
$str_search = Tag::implode($search);
$related_tags = $database->cache->get("related_tags:$str_search");
$related_tags = $cache->get("related_tags:$str_search");
if (empty($related_tags)) {
// $search_tags = array();
@ -645,7 +645,7 @@ class TagList extends Extension
$args = ["limit" => $limit];
$related_tags = $database->get_all($query, $args);
$database->cache->set("related_tags:$str_search", $related_tags, 60 * 60);
$cache->set("related_tags:$str_search", $related_tags, 60 * 60);
}
}
if ($related_tags === false) {

View file

@ -165,7 +165,7 @@ class Upload extends Extension
public function onPageRequest(PageRequestEvent $event)
{
global $database, $page, $user;
global $cache, $page, $user;
if ($user->can(Permissions::CREATE_IMAGE)) {
if ($this->is_full) {
@ -219,14 +219,14 @@ class Upload extends Extension
}
}
}
$database->cache->delete("thumb-block:{$image_id}");
$cache->delete("thumb-block:{$image_id}");
$this->theme->display_upload_status($page, $ok);
} elseif (!empty($_GET['url'])) {
$url = $_GET['url'];
$tags = isset($_GET['tags']) ? Tag::explode($_GET['tags']) : 'tagme';
$source = isset($_GET['source']) ? $_GET['source'] : $url;
$ok = $this->try_transload($url, $tags, $source, $image_id);
$database->cache->delete("thumb-block:{$image_id}");
$cache->delete("thumb-block:{$image_id}");
$this->theme->display_upload_status($page, $ok);
} else {
$this->theme->display_replace_page($page, $image_id);