formatting
This commit is contained in:
parent
56e247faf5
commit
a6bb15d859
108 changed files with 424 additions and 429 deletions
|
@ -192,14 +192,14 @@ class Cache
|
|||
$_tracer->begin("Cache Query", ["key"=>$key]);
|
||||
$val = $this->engine->get($key);
|
||||
if ($val !== false) {
|
||||
$res = "hit";
|
||||
$res = "hit";
|
||||
$this->hits++;
|
||||
} else {
|
||||
$res = "miss";
|
||||
$res = "miss";
|
||||
$this->misses++;
|
||||
}
|
||||
$_tracer->end(null, ["result"=>$res]);
|
||||
return $val;
|
||||
return $val;
|
||||
}
|
||||
|
||||
public function set(string $key, $val, int $time=0)
|
||||
|
|
|
@ -159,7 +159,7 @@ abstract class BaseConfig implements Config
|
|||
|
||||
public function set_array(string $name, ?array $value): void
|
||||
{
|
||||
if($value!=null) {
|
||||
if ($value!=null) {
|
||||
$this->values[$name] = implode(",", $value);
|
||||
} else {
|
||||
$this->values[$name] = null;
|
||||
|
@ -313,16 +313,19 @@ class DatabaseConfig extends BaseConfig
|
|||
private $sub_column;
|
||||
private $sub_value;
|
||||
|
||||
public function __construct(Database $database, string $table_name = "config",
|
||||
string $sub_column = null, string $sub_value = null)
|
||||
{
|
||||
public function __construct(
|
||||
Database $database,
|
||||
string $table_name = "config",
|
||||
string $sub_column = null,
|
||||
string $sub_value = null
|
||||
) {
|
||||
$this->database = $database;
|
||||
$this->table_name = $table_name;
|
||||
$this->sub_value = $sub_value;
|
||||
$this->sub_column = $sub_column;
|
||||
|
||||
$cache_name = "config";
|
||||
if(!empty($sub_value)) {
|
||||
if (!empty($sub_value)) {
|
||||
$cache_name .= "_".$sub_value;
|
||||
}
|
||||
|
||||
|
@ -335,12 +338,12 @@ class DatabaseConfig extends BaseConfig
|
|||
$query = "SELECT name, value FROM {$this->table_name}";
|
||||
$args = [];
|
||||
|
||||
if(!empty($sub_column)&&!empty($sub_value)) {
|
||||
if (!empty($sub_column)&&!empty($sub_value)) {
|
||||
$query .= " WHERE $sub_column = :sub_value";
|
||||
$args["sub_value"] = $sub_value;
|
||||
}
|
||||
|
||||
foreach ($this->database->get_all($query, $args ) as $row) {
|
||||
foreach ($this->database->get_all($query, $args) as $row) {
|
||||
$this->values[$row["name"]] = $row["value"];
|
||||
}
|
||||
$this->database->cache->set($cache_name, $this->values);
|
||||
|
@ -359,7 +362,7 @@ class DatabaseConfig extends BaseConfig
|
|||
$args = ["name"=>$name];
|
||||
$cols = ["name","value"];
|
||||
$params = [":name",":value"];
|
||||
if(!empty($this->sub_column)&&!empty($this->sub_value)) {
|
||||
if (!empty($this->sub_column)&&!empty($this->sub_value)) {
|
||||
$query .= " AND $this->sub_column = :sub_value";
|
||||
$args["sub_value"] = $this->sub_value;
|
||||
$cols[] = $this->sub_column;
|
||||
|
@ -370,8 +373,9 @@ class DatabaseConfig extends BaseConfig
|
|||
|
||||
$args["value"] =$this->values[$name];
|
||||
$this->database->Execute(
|
||||
"INSERT INTO {$this->table_name} (".join(",",$cols).") VALUES (".join(",",$params).")",
|
||||
$args);
|
||||
"INSERT INTO {$this->table_name} (".join(",", $cols).") VALUES (".join(",", $params).")",
|
||||
$args
|
||||
);
|
||||
}
|
||||
// rather than deleting and having some other request(s) do a thundering
|
||||
// herd of race-conditioned updates, just save the updated version once here
|
||||
|
|
|
@ -172,9 +172,9 @@ class Database
|
|||
if (is_null($this->engine)) {
|
||||
$this->connect_engine();
|
||||
}
|
||||
if($input===true) {
|
||||
if ($input===true) {
|
||||
return $this->engine->BOOL_Y;
|
||||
} else if ($input===false) {
|
||||
} elseif ($input===false) {
|
||||
return $this->engine->BOOL_N;
|
||||
}
|
||||
return $input;
|
||||
|
@ -190,13 +190,13 @@ class Database
|
|||
|
||||
private function count_time(string $method, float $start, string $query, ?array $args): void
|
||||
{
|
||||
global $_tracer, $tracer_enabled;
|
||||
$dur = microtime(true) - $start;
|
||||
if($tracer_enabled) {
|
||||
global $_tracer, $tracer_enabled;
|
||||
$dur = microtime(true) - $start;
|
||||
if ($tracer_enabled) {
|
||||
$query = trim(preg_replace('/^[\t ]+/m', '', $query)); // trim leading whitespace
|
||||
$_tracer->complete($start * 1000000, $dur * 1000000, "DB Query", ["query"=>$query, "args"=>$args, "method"=>$method]);
|
||||
}
|
||||
$this->query_count++;
|
||||
$this->query_count++;
|
||||
$this->dbtime += $dur;
|
||||
}
|
||||
|
||||
|
@ -226,7 +226,7 @@ class Database
|
|||
return $stmt;
|
||||
} catch (PDOException $pdoe) {
|
||||
throw new SCoreException($pdoe->getMessage()."<p><b>Query:</b> ".$query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
abstract class SCORE {
|
||||
abstract class SCORE
|
||||
{
|
||||
const AIPK = "SCORE_AIPK";
|
||||
const INET = "SCORE_INET";
|
||||
const BOOL_Y = "SCORE_BOOL_Y";
|
||||
|
|
|
@ -97,7 +97,7 @@ abstract class Extension
|
|||
$class = $class ?? get_called_class();
|
||||
$this->theme = $this->get_theme_object($class);
|
||||
$this->info = ExtensionInfo::get_for_extension_class($class);
|
||||
if($this->info===null) {
|
||||
if ($this->info===null) {
|
||||
throw new Exception("Info class not found for extension $class");
|
||||
}
|
||||
$this->key = $this->info->key;
|
||||
|
@ -132,14 +132,16 @@ abstract class Extension
|
|||
public static function determine_enabled_extensions()
|
||||
{
|
||||
self::$enabled_extensions = [];
|
||||
foreach(array_merge(ExtensionInfo::get_core_extensions(),
|
||||
explode(",", EXTRA_EXTS)) as $key) {
|
||||
foreach (array_merge(
|
||||
ExtensionInfo::get_core_extensions(),
|
||||
explode(",", EXTRA_EXTS)
|
||||
) as $key) {
|
||||
$ext = ExtensionInfo::get_by_key($key);
|
||||
if($ext===null) {
|
||||
if ($ext===null) {
|
||||
continue;
|
||||
}
|
||||
self::$enabled_extensions[] = $ext->key;
|
||||
if(!empty($ext->dependencies)) {
|
||||
if (!empty($ext->dependencies)) {
|
||||
foreach ($ext->dependencies as $dep) {
|
||||
self::$enabled_extensions[] = $dep;
|
||||
}
|
||||
|
@ -158,7 +160,7 @@ abstract class Extension
|
|||
}
|
||||
public static function get_enabled_extensions_as_string(): string
|
||||
{
|
||||
return implode(",",self::$enabled_extensions);
|
||||
return implode(",", self::$enabled_extensions);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,7 +204,7 @@ abstract class ExtensionInfo
|
|||
|
||||
public function is_supported(): bool
|
||||
{
|
||||
if($this->supported===null) {
|
||||
if ($this->supported===null) {
|
||||
$this->check_support();
|
||||
}
|
||||
return $this->supported;
|
||||
|
@ -210,7 +212,7 @@ abstract class ExtensionInfo
|
|||
|
||||
public function get_support_info(): string
|
||||
{
|
||||
if($this->supported===null) {
|
||||
if ($this->supported===null) {
|
||||
$this->check_support();
|
||||
}
|
||||
return $this->support_info;
|
||||
|
@ -222,22 +224,22 @@ abstract class ExtensionInfo
|
|||
|
||||
protected function __construct()
|
||||
{
|
||||
if(empty($this->key)) {
|
||||
if (empty($this->key)) {
|
||||
throw new Exception("key field is required");
|
||||
}
|
||||
if(empty($this->name)) {
|
||||
if (empty($this->name)) {
|
||||
throw new Exception("name field is required for extension $this->key");
|
||||
}
|
||||
if(!empty($this->visibility)&&!in_array($this->visibility, self::VALID_VISIBILITY)) {
|
||||
if (!empty($this->visibility)&&!in_array($this->visibility, self::VALID_VISIBILITY)) {
|
||||
throw new Exception("Invalid visibility for extension $this->key");
|
||||
}
|
||||
if(!is_array($this->db_support)) {
|
||||
if (!is_array($this->db_support)) {
|
||||
throw new Exception("db_support has to be an array for extension $this->key");
|
||||
}
|
||||
if(!is_array($this->authors)) {
|
||||
if (!is_array($this->authors)) {
|
||||
throw new Exception("authors has to be an array for extension $this->key");
|
||||
}
|
||||
if(!is_array($this->dependencies)) {
|
||||
if (!is_array($this->dependencies)) {
|
||||
throw new Exception("dependencies has to be an array for extension $this->key");
|
||||
}
|
||||
}
|
||||
|
@ -251,7 +253,7 @@ abstract class ExtensionInfo
|
|||
{
|
||||
global $database;
|
||||
$this->support_info = "";
|
||||
if(!empty($this->db_support)&&!in_array($database->get_driver_name(), $this->db_support)) {
|
||||
if (!empty($this->db_support)&&!in_array($database->get_driver_name(), $this->db_support)) {
|
||||
$this->support_info .= "Database not supported. ";
|
||||
}
|
||||
// Additional checks here as needed
|
||||
|
@ -276,7 +278,7 @@ abstract class ExtensionInfo
|
|||
|
||||
public static function get_by_key(string $key): ?ExtensionInfo
|
||||
{
|
||||
if(array_key_exists($key, self::$all_info_by_key)) {
|
||||
if (array_key_exists($key, self::$all_info_by_key)) {
|
||||
return self::$all_info_by_key[$key];
|
||||
} else {
|
||||
return null;
|
||||
|
@ -296,20 +298,19 @@ abstract class ExtensionInfo
|
|||
|
||||
public static function load_all_extension_info()
|
||||
{
|
||||
|
||||
foreach (get_declared_classes() as $class) {
|
||||
$rclass = new ReflectionClass($class);
|
||||
if ($rclass->isAbstract()) {
|
||||
// don't do anything
|
||||
} elseif (is_subclass_of($class, "ExtensionInfo")) {
|
||||
$extension_info = new $class();
|
||||
if(array_key_exists($extension_info->key, self::$all_info_by_key)) {
|
||||
if (array_key_exists($extension_info->key, self::$all_info_by_key)) {
|
||||
throw new Exception("Extension Info $class with key $extension_info->key has already been loaded");
|
||||
}
|
||||
|
||||
self::$all_info_by_key[$extension_info->key] = $extension_info;
|
||||
self::$all_info_by_class[$class] = $extension_info;
|
||||
if($extension_info->core===true) {
|
||||
if ($extension_info->core===true) {
|
||||
self::$core_extensions[] = $extension_info->key;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,7 +143,7 @@ class Image
|
|||
if (!$result) {
|
||||
$querylet = Image::build_search_querylet($tag_conditions, $img_conditions);
|
||||
$querylet->append(new Querylet(" ORDER BY ".(Image::$order_sql ?: "images.".$config->get_string("index_order"))));
|
||||
if($limit!=null) {
|
||||
if ($limit!=null) {
|
||||
$querylet->append(new Querylet(" LIMIT :limit ", ["limit" => $limit]));
|
||||
}
|
||||
$querylet->append(new Querylet(" OFFSET :offset ", ["offset"=>$start]));
|
||||
|
@ -231,7 +231,7 @@ class Image
|
|||
|
||||
$response = Image::query_accelerator($req);
|
||||
if ($response) {
|
||||
$list = implode(",", $response);
|
||||
$list = implode(",", $response);
|
||||
$result = $database->execute("SELECT * FROM images WHERE id IN ($list) ORDER BY images.id DESC");
|
||||
} else {
|
||||
$result = $database->execute("SELECT * FROM images WHERE 1=0 ORDER BY images.id DESC");
|
||||
|
@ -256,19 +256,19 @@ class Image
|
|||
|
||||
public static function query_accelerator($req)
|
||||
{
|
||||
global $_tracer;
|
||||
global $_tracer;
|
||||
$fp = @fsockopen("127.0.0.1", 21212);
|
||||
if (!$fp) {
|
||||
return null;
|
||||
}
|
||||
$req_str = json_encode($req);
|
||||
$_tracer->begin("Accelerator Query", ["req"=>$req_str]);
|
||||
$req_str = json_encode($req);
|
||||
$_tracer->begin("Accelerator Query", ["req"=>$req_str]);
|
||||
fwrite($fp, $req_str);
|
||||
$data = "";
|
||||
while (($buffer = fgets($fp, 4096)) !== false) {
|
||||
$data .= $buffer;
|
||||
}
|
||||
$_tracer->end();
|
||||
$_tracer->end();
|
||||
if (!feof($fp)) {
|
||||
die("Error: unexpected fgets() fail in query_accelerator($req_str)\n");
|
||||
}
|
||||
|
@ -833,10 +833,9 @@ class Image
|
|||
$opts = $matches[2];
|
||||
$post = $matches[3];
|
||||
|
||||
if(isset($flexihashes[$opts])) {
|
||||
if (isset($flexihashes[$opts])) {
|
||||
$flexihash = $flexihashes[$opts];
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$flexihash = new Flexihash\Flexihash();
|
||||
foreach (explode(",", $opts) as $opt) {
|
||||
$parts = explode("=", $opt);
|
||||
|
@ -968,7 +967,7 @@ class Image
|
|||
FROM images
|
||||
WHERE 1=0
|
||||
");
|
||||
} elseif($tag_count==1) {
|
||||
} elseif ($tag_count==1) {
|
||||
// All wildcard terms that qualify for a single tag can be treated the same as non-wildcards
|
||||
$positive_tag_id_array[] = $tag_ids[0];
|
||||
} else {
|
||||
|
@ -985,14 +984,14 @@ class Image
|
|||
|
||||
$sql = "";
|
||||
assert($positive_tag_id_array || $positive_wildcard_id_array || $negative_tag_id_array, @$_GET['q']);
|
||||
if(!empty($positive_tag_id_array) || !empty($positive_wildcard_id_array)) {
|
||||
if (!empty($positive_tag_id_array) || !empty($positive_wildcard_id_array)) {
|
||||
$inner_joins = [];
|
||||
if (!empty($positive_tag_id_array)) {
|
||||
foreach($positive_tag_id_array as $tag) {
|
||||
foreach ($positive_tag_id_array as $tag) {
|
||||
$inner_joins[] = "= $tag";
|
||||
}
|
||||
}
|
||||
if(!empty($positive_wildcard_id_array)) {
|
||||
if (!empty($positive_wildcard_id_array)) {
|
||||
foreach ($positive_wildcard_id_array as $tags) {
|
||||
$positive_tag_id_list = join(', ', $tags);
|
||||
$inner_joins[] = "IN ($positive_tag_id_list)";
|
||||
|
@ -1006,12 +1005,12 @@ class Image
|
|||
$i++;
|
||||
$sub_query .= " INNER JOIN image_tags it$i ON it$i.image_id = it.image_id AND it$i.tag_id $inner_join ";
|
||||
}
|
||||
if(!empty($negative_tag_id_array)) {
|
||||
if (!empty($negative_tag_id_array)) {
|
||||
$negative_tag_id_list = join(', ', $negative_tag_id_array);
|
||||
$sub_query .= " LEFT JOIN image_tags negative ON negative.image_id = it.image_id AND negative.tag_id IN ($negative_tag_id_list) ";
|
||||
}
|
||||
$sub_query .= "WHERE it.tag_id $first ";
|
||||
if(!empty($negative_tag_id_array)) {
|
||||
if (!empty($negative_tag_id_array)) {
|
||||
$sub_query .= " AND negative.image_id IS NULL";
|
||||
}
|
||||
$sub_query .= " GROUP BY it.image_id ";
|
||||
|
@ -1022,7 +1021,7 @@ class Image
|
|||
$sub_query
|
||||
) a on a.image_id = images.id
|
||||
";
|
||||
} elseif(!empty($negative_tag_id_array)) {
|
||||
} elseif (!empty($negative_tag_id_array)) {
|
||||
$negative_tag_id_list = join(', ', $negative_tag_id_array);
|
||||
$sql = "
|
||||
SELECT images.*
|
||||
|
|
|
@ -124,7 +124,7 @@ function get_thumbnail_size(int $orig_width, int $orig_height, bool $use_dpi_sca
|
|||
}
|
||||
|
||||
|
||||
if($use_dpi_scaling) {
|
||||
if ($use_dpi_scaling) {
|
||||
list($max_width, $max_height) = get_thumbnail_max_size_scaled();
|
||||
} else {
|
||||
$max_width = $config->get_int(ImageConfig::THUMB_WIDTH);
|
||||
|
@ -138,7 +138,6 @@ function get_thumbnail_size(int $orig_width, int $orig_height, bool $use_dpi_sca
|
|||
} else {
|
||||
return $output;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function get_scaled_by_aspect_ratio(int $original_width, int $original_height, int $max_width, int $max_height) : array
|
||||
|
@ -167,19 +166,20 @@ function get_thumbnail_max_size_scaled(): array
|
|||
}
|
||||
|
||||
|
||||
function create_image_thumb(string $hash, string $type, string $engine = null) {
|
||||
function create_image_thumb(string $hash, string $type, string $engine = null)
|
||||
{
|
||||
global $config;
|
||||
|
||||
$inname = warehouse_path(Image::IMAGE_DIR, $hash);
|
||||
$outname = warehouse_path(Image::THUMBNAIL_DIR, $hash);
|
||||
$tsize = get_thumbnail_max_size_scaled();
|
||||
|
||||
if(empty($engine)) {
|
||||
if (empty($engine)) {
|
||||
$engine = $config->get_string(ImageConfig::THUMB_ENGINE);
|
||||
}
|
||||
|
||||
$output_format = $config->get_string(ImageConfig::THUMB_TYPE);
|
||||
if($output_format=="webp") {
|
||||
if ($output_format=="webp") {
|
||||
$output_format = Media::WEBP_LOSSY;
|
||||
}
|
||||
|
||||
|
@ -206,14 +206,14 @@ function format_milliseconds(int $input): string
|
|||
|
||||
$remainder = floor($input / 1000);
|
||||
|
||||
foreach (TIME_UNITS AS $unit=>$conversion) {
|
||||
foreach (TIME_UNITS as $unit=>$conversion) {
|
||||
$count = $remainder % $conversion;
|
||||
$remainder = floor($remainder / $conversion);
|
||||
if($count==0&&$remainder<1) {
|
||||
if ($count==0&&$remainder<1) {
|
||||
break;
|
||||
}
|
||||
$output = "$count".$unit." ".$output;
|
||||
}
|
||||
|
||||
return trim($output);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -307,14 +307,14 @@ class Page
|
|||
$active_link = null;
|
||||
// To save on event calls, we check if one of the top-level links has already been marked as active
|
||||
foreach ($nav_links as $link) {
|
||||
if($link->active===true) {
|
||||
if ($link->active===true) {
|
||||
$active_link = $link;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$sub_links = null;
|
||||
// If one is, we just query for sub-menu options under that one tab
|
||||
if($active_link!==null) {
|
||||
if ($active_link!==null) {
|
||||
$psnbe = new PageSubNavBuildingEvent($active_link->name);
|
||||
send_event($psnbe);
|
||||
$sub_links = $psnbe->links;
|
||||
|
@ -326,13 +326,13 @@ class Page
|
|||
|
||||
// Now we check for a current link so we can identify the sub-links to show
|
||||
foreach ($psnbe->links as $sub_link) {
|
||||
if($sub_link->active===true) {
|
||||
if ($sub_link->active===true) {
|
||||
$sub_links = $psnbe->links;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// If the active link has been detected, we break out
|
||||
if($sub_links!==null) {
|
||||
if ($sub_links!==null) {
|
||||
$link->active = true;
|
||||
break;
|
||||
}
|
||||
|
@ -372,7 +372,6 @@ class Page
|
|||
header('Accept-Ranges: bytes');
|
||||
|
||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||
|
||||
$c_start = $start;
|
||||
$c_end = $end;
|
||||
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
||||
|
@ -418,8 +417,9 @@ class Page
|
|||
// After flush, we can tell if the client browser has disconnected.
|
||||
// This means we can start sending a large file, and if we detect they disappeared
|
||||
// then we can just stop and not waste any more resources or bandwidth.
|
||||
if (connection_status() != 0)
|
||||
if (connection_status() != 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
fclose($fp);
|
||||
|
@ -541,7 +541,7 @@ class PageSubNavBuildingEvent extends Event
|
|||
|
||||
public function add_nav_link(string $name, Link $link, string $desc, ?bool $active = null, int $order = 50)
|
||||
{
|
||||
$this->links[] = new NavLink($name, $link, $desc, $active,$order);
|
||||
$this->links[] = new NavLink($name, $link, $desc, $active, $order);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -553,7 +553,7 @@ class NavLink
|
|||
public $order;
|
||||
public $active = false;
|
||||
|
||||
public function __construct(String $name, Link $link, String $description, ?bool $active = null, int $order = 50)
|
||||
public function __construct(String $name, Link $link, String $description, ?bool $active = null, int $order = 50)
|
||||
{
|
||||
global $config;
|
||||
|
||||
|
@ -561,7 +561,7 @@ class NavLink
|
|||
$this->link = $link;
|
||||
$this->description = $description;
|
||||
$this->order = $order;
|
||||
if($active==null) {
|
||||
if ($active==null) {
|
||||
$query = ltrim(_get_query(), "/");
|
||||
if ($query === "") {
|
||||
// This indicates the front page, so we check what's set as the front page
|
||||
|
@ -572,15 +572,14 @@ class NavLink
|
|||
} else {
|
||||
$this->active = self::is_active([$link->page], $front_page);
|
||||
}
|
||||
} elseif($query===$link->page) {
|
||||
} elseif ($query===$link->page) {
|
||||
$this->active = true;
|
||||
}else {
|
||||
} else {
|
||||
$this->active = self::is_active([$link->page]);
|
||||
}
|
||||
} else {
|
||||
$this->active = $active;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function is_active(array $pages_matched, string $url = null): bool
|
||||
|
|
|
@ -66,5 +66,4 @@ abstract class Permissions
|
|||
public const VIEW_TRASH = "view_trash";
|
||||
|
||||
public const PERFORM_BULK_ACTIONS = "perform_bulk_actions";
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -759,7 +759,7 @@ function validate_input(array $inputs): array
|
|||
*/
|
||||
function sanitize_path(string $path): string
|
||||
{
|
||||
return preg_replace('|[\\\\/]+|S',DIRECTORY_SEPARATOR,$path);
|
||||
return preg_replace('|[\\\\/]+|S', DIRECTORY_SEPARATOR, $path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -770,11 +770,11 @@ function join_path(string ...$paths): string
|
|||
{
|
||||
$output = "";
|
||||
foreach ($paths as $path) {
|
||||
if(empty($path)) {
|
||||
if (empty($path)) {
|
||||
continue;
|
||||
}
|
||||
$path = sanitize_path($path);
|
||||
if(empty($output)) {
|
||||
if (empty($output)) {
|
||||
$output = $path;
|
||||
} else {
|
||||
$output = rtrim($output, DIRECTORY_SEPARATOR);
|
||||
|
@ -790,8 +790,8 @@ function join_path(string ...$paths): string
|
|||
*/
|
||||
function iterator_map(callable $callback, iterator $iter): Generator
|
||||
{
|
||||
foreach($iter as $i) {
|
||||
yield call_user_func($callback,$i);
|
||||
foreach ($iter as $i) {
|
||||
yield call_user_func($callback, $i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -810,12 +810,16 @@ function get_class_from_file(string $file): string
|
|||
$class = $buffer = '';
|
||||
$i = 0;
|
||||
while (!$class) {
|
||||
if (feof($fp)) break;
|
||||
if (feof($fp)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$buffer .= fread($fp, 512);
|
||||
$tokens = token_get_all($buffer);
|
||||
|
||||
if (strpos($buffer, '{') === false) continue;
|
||||
if (strpos($buffer, '{') === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (;$i<count($tokens);$i++) {
|
||||
if ($tokens[$i][0] === T_CLASS) {
|
||||
|
@ -828,4 +832,4 @@ function get_class_from_file(string $file): string
|
|||
}
|
||||
}
|
||||
return $class;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ function _load_event_listeners(): void
|
|||
function _clear_cached_event_listeners(): void
|
||||
{
|
||||
if (file_exists(data_path("cache/shm_event_listeners.php"))) {
|
||||
unlink(data_path("cache/shm_event_listeners.php"));
|
||||
unlink(data_path("cache/shm_event_listeners.php"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,21 +108,29 @@ function send_event(Event $event): void
|
|||
|
||||
// send_event() is performance sensitive, and with the number
|
||||
// of times tracer gets called the time starts to add up
|
||||
if ($tracer_enabled) $_tracer->begin(get_class($event));
|
||||
if ($tracer_enabled) {
|
||||
$_tracer->begin(get_class($event));
|
||||
}
|
||||
// SHIT: http://bugs.php.net/bug.php?id=35106
|
||||
$my_event_listeners = $_shm_event_listeners[get_class($event)];
|
||||
ksort($my_event_listeners);
|
||||
|
||||
foreach ($my_event_listeners as $listener) {
|
||||
if ($tracer_enabled) $_tracer->begin(get_class($listener));
|
||||
if ($tracer_enabled) {
|
||||
$_tracer->begin(get_class($listener));
|
||||
}
|
||||
if (method_exists($listener, $method_name)) {
|
||||
$listener->$method_name($event);
|
||||
}
|
||||
if ($tracer_enabled) $_tracer->end();
|
||||
if($event->stop_processing===true) {
|
||||
if ($tracer_enabled) {
|
||||
$_tracer->end();
|
||||
}
|
||||
if ($event->stop_processing===true) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$_shm_event_count++;
|
||||
if ($tracer_enabled) $_tracer->end();
|
||||
if ($tracer_enabled) {
|
||||
$_tracer->end();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,6 @@ class PolyfillsTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
public function test_sanitize_path()
|
||||
{
|
||||
|
||||
$this->assertEquals(
|
||||
"one",
|
||||
sanitize_path("one")
|
||||
|
@ -88,7 +87,6 @@ class PolyfillsTest extends \PHPUnit\Framework\TestCase
|
|||
DIRECTORY_SEPARATOR."one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR,
|
||||
sanitize_path("\\/one/\\/\\/two\\/")
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function test_join_path()
|
||||
|
@ -100,22 +98,22 @@ class PolyfillsTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$this->assertEquals(
|
||||
"one".DIRECTORY_SEPARATOR."two",
|
||||
join_path("one","two")
|
||||
join_path("one", "two")
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
||||
join_path("one","two","three")
|
||||
join_path("one", "two", "three")
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
||||
join_path("one/two","three")
|
||||
join_path("one/two", "three")
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
DIRECTORY_SEPARATOR."one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three".DIRECTORY_SEPARATOR,
|
||||
join_path("\\/////\\\\one/\///"."\\//two\/\\//\\//","//\/\\\/three/\\/\/")
|
||||
join_path("\\/////\\\\one/\///"."\\//two\/\\//\\//", "//\/\\\/three/\\/\/")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,65 +3,63 @@ require_once "core/util.php";
|
|||
|
||||
class UtilTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function test_warehouse_path()
|
||||
{
|
||||
$hash = "7ac19c10d6859415";
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base",$hash),
|
||||
warehouse_path("base",$hash,false, 0)
|
||||
join_path(DATA_DIR, "base", $hash),
|
||||
warehouse_path("base", $hash, false, 0)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a",$hash),
|
||||
warehouse_path("base",$hash,false, 1)
|
||||
join_path(DATA_DIR, "base", "7a", $hash),
|
||||
warehouse_path("base", $hash, false, 1)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1",$hash),
|
||||
warehouse_path("base",$hash,false, 2)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", $hash),
|
||||
warehouse_path("base", $hash, false, 2)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c",$hash),
|
||||
warehouse_path("base",$hash,false, 3)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", $hash),
|
||||
warehouse_path("base", $hash, false, 3)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10",$hash),
|
||||
warehouse_path("base",$hash,false, 4)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", $hash),
|
||||
warehouse_path("base", $hash, false, 4)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6",$hash),
|
||||
warehouse_path("base",$hash,false, 5)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", $hash),
|
||||
warehouse_path("base", $hash, false, 5)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85",$hash),
|
||||
warehouse_path("base",$hash,false, 6)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", $hash),
|
||||
warehouse_path("base", $hash, false, 6)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94",$hash),
|
||||
warehouse_path("base",$hash,false, 7)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", $hash),
|
||||
warehouse_path("base", $hash, false, 7)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
||||
warehouse_path("base",$hash,false, 8)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||
warehouse_path("base", $hash, false, 8)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
||||
warehouse_path("base",$hash,false, 9)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||
warehouse_path("base", $hash, false, 9)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
||||
warehouse_path("base",$hash,false, 10)
|
||||
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||
warehouse_path("base", $hash, false, 10)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -174,7 +174,7 @@ function warehouse_path(string $base, string $hash, bool $create=true, int $spli
|
|||
{
|
||||
$dirs =[DATA_DIR, $base];
|
||||
$splits = min($splits, strlen($hash) / 2);
|
||||
for($i = 0; $i < $splits; $i++) {
|
||||
for ($i = 0; $i < $splits; $i++) {
|
||||
$dirs[] = substr($hash, $i * 2, 2);
|
||||
}
|
||||
$dirs[] = $hash;
|
||||
|
@ -343,7 +343,7 @@ function join_url(string $base, string ...$paths)
|
|||
{
|
||||
$output = $base;
|
||||
foreach ($paths as $path) {
|
||||
$output = rtrim($output,"/");
|
||||
$output = rtrim($output, "/");
|
||||
$path = ltrim($path, "/");
|
||||
$output .= "/".$path;
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ class AdminPage extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::MANAGE_ADMINTOOLS)) {
|
||||
$event->add_nav_link("admin", new Link('admin'), "Board Admin");
|
||||
}
|
||||
|
|
|
@ -55,12 +55,11 @@ class AdminPageTheme extends Themelet
|
|||
$html .= "<input type='submit' value='Set Tag Case'>";
|
||||
$html .= "</form>\n";
|
||||
$page->add_block(new Block("Set Tag Case", $html));
|
||||
|
||||
}
|
||||
|
||||
public function dbq_html($terms)
|
||||
{
|
||||
if(Extension::is_enabled(TrashInfo::KEY)) {
|
||||
if (Extension::is_enabled(TrashInfo::KEY)) {
|
||||
$warning = "This delete method will bypass the trash<br/>";
|
||||
}
|
||||
if (class_exists("ImageBan")) {
|
||||
|
@ -75,6 +74,4 @@ class AdminPageTheme extends Themelet
|
|||
";
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ class AliasEditor extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="tags") {
|
||||
if ($event->parent=="tags") {
|
||||
$event->add_nav_link("aliases", new Link('alias/list'), "Aliases", NavLink::is_active(["alias"]));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ class Artists extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Artist";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -33,8 +33,8 @@ class AutoComplete extends Extension
|
|||
//$limit = 0;
|
||||
$cache_key = "autocomplete-$s";
|
||||
$limitSQL = "";
|
||||
$s = str_replace('_','\_', $s);
|
||||
$s = str_replace('%','\%', $s);
|
||||
$s = str_replace('_', '\_', $s);
|
||||
$s = str_replace('%', '\%', $s);
|
||||
$SQLarr = ["search"=>"$s%"]; #, "cat_search"=>"%:$s%"];
|
||||
if (isset($_GET["limit"]) && $_GET["limit"] !== 0) {
|
||||
$limitSQL = "LIMIT :limit";
|
||||
|
|
|
@ -22,7 +22,7 @@ class Blocks extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::MANAGE_BLOCKS)) {
|
||||
$event->add_nav_link("blocks", new Link('blocks/list'), "Blocks Editor");
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ class Blotter extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->is_admin()) {
|
||||
$event->add_nav_link("blotter", new Link('blotter/editor'), "Blotter Editor");
|
||||
}
|
||||
|
|
|
@ -13,10 +13,10 @@ class BulkActionBlockBuildingEvent extends Event
|
|||
$block = "";
|
||||
}
|
||||
|
||||
if(!empty($access_key)) {
|
||||
if (!empty($access_key)) {
|
||||
assert(strlen($access_key)==1);
|
||||
foreach ($this->actions as $existing) {
|
||||
if($existing["access_key"]==$access_key) {
|
||||
if ($existing["access_key"]==$access_key) {
|
||||
throw new SCoreException("Access key $access_key is already in use");
|
||||
}
|
||||
}
|
||||
|
@ -81,18 +81,18 @@ class BulkActions extends Extension
|
|||
}
|
||||
|
||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
||||
|
||||
$event->add_action(
|
||||
"bulk_tag",
|
||||
"Tag",
|
||||
"t",
|
||||
"",
|
||||
$this->theme->render_tag_input(),
|
||||
10);
|
||||
10
|
||||
);
|
||||
}
|
||||
|
||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_SOURCE)) {
|
||||
$event->add_action("bulk_source", "Set (S)ource", "s","", $this->theme->render_source_input(), 10);
|
||||
$event->add_action("bulk_source", "Set (S)ource", "s", "", $this->theme->render_source_input(), 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ class BulkActions extends Extension
|
|||
foreach ($data as $id) {
|
||||
if (is_numeric($id)) {
|
||||
$image = Image::by_id($id);
|
||||
if($image!=null) {
|
||||
if ($image!=null) {
|
||||
yield $image;
|
||||
}
|
||||
}
|
||||
|
@ -237,10 +237,10 @@ class BulkActions extends Extension
|
|||
}
|
||||
} else {
|
||||
foreach ($items as $image) {
|
||||
$img_tags = array_map("strtolower",$image->get_tag_array());
|
||||
$img_tags = array_map("strtolower", $image->get_tag_array());
|
||||
|
||||
if (!empty($neg_tag_array)) {
|
||||
$neg_tag_array = array_map("strtolower",$neg_tag_array);
|
||||
$neg_tag_array = array_map("strtolower", $neg_tag_array);
|
||||
|
||||
$img_tags = array_merge($pos_tag_array, $img_tags);
|
||||
$img_tags = array_diff($img_tags, $neg_tag_array);
|
||||
|
|
|
@ -157,7 +157,7 @@ class CommentList extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="comment") {
|
||||
if ($event->parent=="comment") {
|
||||
$event->add_nav_link("comment_list", new Link('comment/list'), "All");
|
||||
$event->add_nav_link("comment_help", new Link('ext_doc/comment'), "Help");
|
||||
}
|
||||
|
@ -359,7 +359,7 @@ class CommentList extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Comments";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -312,6 +312,5 @@ class CommentListTheme extends Themelet
|
|||
<p>Returns images that have been commented on by user 123. </p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,4 +28,3 @@ becomes a link to smile.gif
|
|||
<p>Images are stored in /ext/emoticons/default/, and you can
|
||||
add more emoticons by uploading images into that folder.";
|
||||
}
|
||||
|
||||
|
|
|
@ -18,4 +18,3 @@ class Emoticons extends FormatterExtension
|
|||
return $text;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ class ET extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::VIEW_SYSINTO)) {
|
||||
$event->add_nav_link("system_info", new Link('system_info'), "System Info", null, 10);
|
||||
}
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
|
||||
function __extman_extcmp(ExtensionInfo $a, ExtensionInfo $b): int
|
||||
{
|
||||
if($a->beta===true&&$b->beta===false)
|
||||
if ($a->beta===true&&$b->beta===false) {
|
||||
return 1;
|
||||
if($a->beta===false&&$b->beta===true)
|
||||
}
|
||||
if ($a->beta===false&&$b->beta===true) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return strcmp($a->name, $b->name);
|
||||
}
|
||||
|
@ -82,7 +84,7 @@ class ExtManager extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::MANAGE_EXTENSION_LIST)) {
|
||||
$event->add_nav_link("ext_manager", new Link('ext_manager'), "Extension Manager");
|
||||
} else {
|
||||
|
@ -108,7 +110,7 @@ class ExtManager extends Extension
|
|||
{
|
||||
$extensions = ExtensionInfo::get_all();
|
||||
if (!$all) {
|
||||
$extensions = array_filter($extensions,"__extman_extactive");
|
||||
$extensions = array_filter($extensions, "__extman_extactive");
|
||||
}
|
||||
usort($extensions, "__extman_extcmp");
|
||||
return $extensions;
|
||||
|
|
|
@ -32,7 +32,7 @@ class ExtManagerTheme extends Themelet
|
|||
$h_link = make_link("ext_doc/" . url_escape($extension->key));
|
||||
|
||||
$h_enabled = ($extension->is_enabled() === true ? " checked='checked'" : "");
|
||||
$h_disabled = ($extension->is_supported()===false || $extension->core===true? " disabled ": " " );
|
||||
$h_disabled = ($extension->is_supported()===false || $extension->core===true? " disabled ": " ");
|
||||
|
||||
//baseline_open_in_new_black_18dp.png
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ class Favorites extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Favorites";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -155,11 +155,11 @@ class Favorites extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("posts_favorites", new Link("post/list/favorited_by={$user->name}/1"), "My Favorites");
|
||||
}
|
||||
|
||||
if($event->parent==="user") {
|
||||
if ($event->parent==="user") {
|
||||
if ($user->can(Permissions::MANAGE_ADMINTOOLS)) {
|
||||
$username = url_escape($user->name);
|
||||
$event->add_nav_link("favorites", new Link("post/list/favorited_by=$username/1"), "My Favorites");
|
||||
|
|
|
@ -56,6 +56,5 @@ class FavoritesTheme extends Themelet
|
|||
<p>Returns images that have been favorited by user 123. </p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
class FlashFileHandler extends DataHandlerExtension
|
||||
{
|
||||
|
||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||
{
|
||||
switch ($event->ext) {
|
||||
|
|
|
@ -7,7 +7,7 @@ class IcoFileHandler extends DataHandlerExtension
|
|||
|
||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||
{
|
||||
if(in_array($event->ext, self::SUPPORTED_EXTENSIONS)) {
|
||||
if (in_array($event->ext, self::SUPPORTED_EXTENSIONS)) {
|
||||
$event->lossless = true;
|
||||
$event->video = false;
|
||||
$event->audio = false;
|
||||
|
|
|
@ -12,7 +12,6 @@ class MP3FileHandler extends DataHandlerExtension
|
|||
break;
|
||||
}
|
||||
// TODO: Buff out audio format support, length scanning
|
||||
|
||||
}
|
||||
|
||||
protected function create_thumb(string $hash, string $type): bool
|
||||
|
|
|
@ -7,14 +7,14 @@ class PixelFileHandler extends DataHandlerExtension
|
|||
|
||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||
{
|
||||
if(in_array($event->ext, Media::LOSSLESS_FORMATS)) {
|
||||
if (in_array($event->ext, Media::LOSSLESS_FORMATS)) {
|
||||
$event->lossless = true;
|
||||
} elseif($event->ext=="webp") {
|
||||
} elseif ($event->ext=="webp") {
|
||||
$event->lossless = Media::is_lossless_webp($event->file_name);
|
||||
}
|
||||
|
||||
if(in_array($event->ext,self::SUPPORTED_EXTENSIONS)) {
|
||||
if($event->lossless==null) {
|
||||
if (in_array($event->ext, self::SUPPORTED_EXTENSIONS)) {
|
||||
if ($event->lossless==null) {
|
||||
$event->lossless = false;
|
||||
}
|
||||
$event->audio = false;
|
||||
|
@ -111,5 +111,4 @@ class PixelFileHandler extends DataHandlerExtension
|
|||
</form>
|
||||
", 20);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ use enshrined\svgSanitize\Sanitizer;
|
|||
|
||||
class SVGFileHandler extends DataHandlerExtension
|
||||
{
|
||||
|
||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||
{
|
||||
switch ($event->ext) {
|
||||
|
|
|
@ -36,19 +36,19 @@ class VideoFileHandler extends DataHandlerExtension
|
|||
|
||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||
{
|
||||
if(in_array($event->ext, self::SUPPORTED_EXT)) {
|
||||
if (in_array($event->ext, self::SUPPORTED_EXT)) {
|
||||
$event->video = true;
|
||||
try {
|
||||
$data = Media::get_ffprobe_data($event->file_name);
|
||||
|
||||
if(is_array($data)) {
|
||||
if(array_key_exists("streams", $data)) {
|
||||
if (is_array($data)) {
|
||||
if (array_key_exists("streams", $data)) {
|
||||
$video = false;
|
||||
$audio = true;
|
||||
$streams = $data["streams"];
|
||||
if (is_array($streams)) {
|
||||
foreach ($streams as $stream) {
|
||||
if(is_array($stream)) {
|
||||
if (is_array($stream)) {
|
||||
if (array_key_exists("codec_type", $stream)) {
|
||||
$type = $stream["codec_type"];
|
||||
switch ($type) {
|
||||
|
@ -68,22 +68,20 @@ class VideoFileHandler extends DataHandlerExtension
|
|||
&& is_numeric($stream["height"]) && intval($stream["height"]) > ($event->height) ?? 0) {
|
||||
$event->height = intval($stream["height"]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
$event->video = $video;
|
||||
$event->audio = $audio;
|
||||
}
|
||||
}
|
||||
if(array_key_exists("format", $data)&& is_array($data["format"])) {
|
||||
if (array_key_exists("format", $data)&& is_array($data["format"])) {
|
||||
$format = $data["format"];
|
||||
if(array_key_exists("duration", $format) && is_numeric($format["duration"])) {
|
||||
$event->length = floor(floatval($format["duration"]) * 1000);
|
||||
if (array_key_exists("duration", $format) && is_numeric($format["duration"])) {
|
||||
$event->length = floor(floatval($format["duration"]) * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(MediaException $e) {
|
||||
|
||||
} catch (MediaException $e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,11 +14,11 @@ class VideoFileHandlerTheme extends Themelet
|
|||
$player = make_link('vendor/bower-asset/mediaelement/build/flashmediaelement.swf');
|
||||
|
||||
$width="auto";
|
||||
if($image->width>1) {
|
||||
if ($image->width>1) {
|
||||
$width = $image->width."px";
|
||||
}
|
||||
$height="auto";
|
||||
if($image->height>1) {
|
||||
if ($image->height>1) {
|
||||
$height = $image->height."px";
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ class HelpPageListBuildingEvent extends Event
|
|||
{
|
||||
$this->pages[$key] = $name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class HelpPageBuildingEvent extends Event
|
||||
|
@ -21,10 +20,9 @@ class HelpPageBuildingEvent extends Event
|
|||
$this->key = $key;
|
||||
}
|
||||
|
||||
function add_block(Block $block, int $position = 50)
|
||||
public function add_block(Block $block, int $position = 50)
|
||||
{
|
||||
if(!array_key_exists("$position",$this->blocks))
|
||||
{
|
||||
if (!array_key_exists("$position", $this->blocks)) {
|
||||
$this->blocks["$position"] = [];
|
||||
}
|
||||
$this->blocks["$position"][] = $block;
|
||||
|
@ -49,7 +47,7 @@ class HelpPages extends Extension
|
|||
} else {
|
||||
$name = $event->get_arg(0);
|
||||
$title = $name;
|
||||
if(array_key_exists($name, $e->pages)) {
|
||||
if (array_key_exists($name, $e->pages)) {
|
||||
$title = $e->pages[$name];
|
||||
}
|
||||
|
||||
|
@ -60,7 +58,7 @@ class HelpPages extends Extension
|
|||
asort($hpbe->blocks);
|
||||
|
||||
foreach ($hpbe->blocks as $key=>$value) {
|
||||
foreach($value as $block) {
|
||||
foreach ($value as $block) {
|
||||
$page->add_block($block);
|
||||
}
|
||||
}
|
||||
|
@ -85,15 +83,15 @@ class HelpPages extends Extension
|
|||
$event->add_link("Help", make_link("help"));
|
||||
}
|
||||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event) {
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if ($event->key=="licenses") {
|
||||
$block = new Block("Software Licenses");
|
||||
$block->body = "The code in Shimmie is contributed by numerous authors under multiple licenses. For reference, these licenses are listed below. The base software is in general licensed under the GPLv2 license.";
|
||||
$event->add_block($block);
|
||||
|
||||
if($event->key=="licenses"){
|
||||
$block = new Block("Software Licenses");
|
||||
$block->body = "The code in Shimmie is contributed by numerous authors under multiple licenses. For reference, these licenses are listed below. The base software is in general licensed under the GPLv2 license.";
|
||||
$event->add_block($block);
|
||||
|
||||
$block = new Block(ExtensionInfo::LICENSE_GPLV2);
|
||||
$block->body = "<pre> GNU GENERAL PUBLIC LICENSE
|
||||
$block = new Block(ExtensionInfo::LICENSE_GPLV2);
|
||||
$block->body = "<pre> GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
|
@ -432,10 +430,10 @@ proprietary programs. If your program is a subroutine library, you may
|
|||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.</pre>";
|
||||
$event->add_block($block);
|
||||
$event->add_block($block);
|
||||
|
||||
$block = new Block(ExtensionInfo::LICENSE_MIT);
|
||||
$block->body = "<pre>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
$block = new Block(ExtensionInfo::LICENSE_MIT);
|
||||
$block->body = "<pre>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the \"Software\"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
|
@ -452,11 +450,11 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.</pre>";
|
||||
$event->add_block($block);
|
||||
$event->add_block($block);
|
||||
|
||||
|
||||
$block = new Block(ExtensionInfo::LICENSE_WTFPL);
|
||||
$block->body = "<pre> DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
$block = new Block(ExtensionInfo::LICENSE_WTFPL);
|
||||
$block->body = "<pre> DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
@ -471,9 +469,7 @@ SOFTWARE.</pre>";
|
|||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
||||
</pre>";
|
||||
$event->add_block($block);
|
||||
|
||||
$event->add_block($block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
class HelpPagesTheme extends Themelet
|
||||
{
|
||||
|
||||
public function display_list_page(array $pages)
|
||||
{
|
||||
global $page;
|
||||
|
@ -27,5 +26,4 @@ class HelpPagesTheme extends Themelet
|
|||
$page->set_title("Help - $title");
|
||||
$page->set_heading("Help - $title");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
|
||||
abstract class ImageConfig {
|
||||
abstract class ImageConfig
|
||||
{
|
||||
const THUMB_ENGINE = 'thumb_engine';
|
||||
const THUMB_WIDTH = 'thumb_width';
|
||||
const THUMB_HEIGHT = 'thumb_height';
|
||||
|
@ -17,5 +18,4 @@ abstract class ImageConfig {
|
|||
|
||||
const COLLISION_MERGE = 'merge';
|
||||
const COLLISION_ERROR = 'error';
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ require_once "config.php";
|
|||
*/
|
||||
class ImageIO extends Extension
|
||||
{
|
||||
|
||||
const COLLISION_OPTIONS = ['Error'=>ImageConfig::COLLISION_ERROR, 'Merge'=>ImageConfig::COLLISION_MERGE];
|
||||
|
||||
const EXIF_READ_FUNCTION = "exif_read_data";
|
||||
|
@ -240,10 +239,9 @@ class ImageIO extends Extension
|
|||
|
||||
try {
|
||||
Media::update_image_media_properties($image->hash, strtolower($image->ext));
|
||||
} catch(MediaException $e) {
|
||||
log_warning("add_image","Error while running update_image_media_properties: ".$e->getMessage());
|
||||
} catch (MediaException $e) {
|
||||
log_warning("add_image", "Error while running update_image_media_properties: ".$e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
// }}} end add
|
||||
|
||||
|
@ -322,7 +320,7 @@ class ImageIO extends Extension
|
|||
|
||||
$duplicate = Image::by_hash($image->hash);
|
||||
|
||||
if(!is_null($duplicate) && $duplicate->id!=$id) {
|
||||
if (!is_null($duplicate) && $duplicate->id!=$id) {
|
||||
$error = "Image <a href='" . make_link("post/view/{$duplicate->id}") . "'>{$duplicate->id}</a> " .
|
||||
"already has hash {$image->hash}:<p>" . $this->theme->build_thumb_html($duplicate);
|
||||
throw new ImageReplaceException($error);
|
||||
|
@ -361,8 +359,8 @@ class ImageIO extends Extension
|
|||
|
||||
try {
|
||||
Media::update_image_media_properties($image->hash, $image->ext);
|
||||
} catch(MediaException $e) {
|
||||
log_warning("image_replace","Error while running update_image_media_properties: ".$e->getMessage());
|
||||
} catch (MediaException $e) {
|
||||
log_warning("image_replace", "Error while running update_image_media_properties: ".$e->getMessage());
|
||||
}
|
||||
|
||||
/* Generate new thumbnail */
|
||||
|
|
|
@ -97,7 +97,7 @@ class ImageBan extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::BAN_IMAGE)) {
|
||||
$event->add_nav_link("image_bans", new Link('image_hash_ban/list/1'), "Image Bans", NavLink::is_active(["image_hash_ban"]));
|
||||
}
|
||||
|
|
|
@ -108,10 +108,13 @@ class Index extends Extension
|
|||
if (SPEED_HAX) {
|
||||
if (!$user->can("big_search")) {
|
||||
$fast_page_limit = 500;
|
||||
if ($total_pages > $fast_page_limit) $total_pages = $fast_page_limit;
|
||||
if ($total_pages > $fast_page_limit) {
|
||||
$total_pages = $fast_page_limit;
|
||||
}
|
||||
if ($page_number > $fast_page_limit) {
|
||||
$this->theme->display_error(
|
||||
404, "Search limit hit",
|
||||
404,
|
||||
"Search limit hit",
|
||||
"Only $fast_page_limit pages of results are searchable - " .
|
||||
"if you want to find older results, use more specific search terms"
|
||||
);
|
||||
|
@ -180,19 +183,19 @@ class Index extends Extension
|
|||
|
||||
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
||||
{
|
||||
$event->add_nav_link("posts", new Link('post/list'), "Posts", NavLink::is_active(["post","view"]),20);
|
||||
$event->add_nav_link("posts", new Link('post/list'), "Posts", NavLink::is_active(["post","view"]), 20);
|
||||
}
|
||||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("posts_all", new Link('post/list'), "All");
|
||||
}
|
||||
}
|
||||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "General";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -339,6 +339,5 @@ and of course start organising your images :-)
|
|||
</ul>
|
||||
</p>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ class IPBan extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::BAN_IP)) {
|
||||
$event->add_nav_link("ip_bans", new Link('ip_ban/list'), "IP Bans", NavLink::is_active(["ip_ban"]));
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ class LogDatabase extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::VIEW_EVENTLOG)) {
|
||||
$event->add_nav_link("event_log", new Link('log/view'), "Event Log");
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ abstract class MediaConfig
|
|||
const CONVERT_PATH = "media_convert_path";
|
||||
const VERSION = "ext_media_version";
|
||||
const MEM_LIMIT = 'media_mem_limit';
|
||||
|
||||
}
|
||||
|
||||
abstract class MediaEngine
|
||||
|
@ -98,14 +97,19 @@ class MediaResizeEvent extends Event
|
|||
public $ignore_aspect_ratio;
|
||||
public $allow_upscale;
|
||||
|
||||
public function __construct(String $engine, string $input_path, string $input_type, string $output_path,
|
||||
int $target_width, int $target_height,
|
||||
bool $ignore_aspect_ratio = false,
|
||||
string $target_format = null,
|
||||
int $target_quality = 80,
|
||||
bool $minimize = false,
|
||||
bool $allow_upscale = true)
|
||||
{
|
||||
public function __construct(
|
||||
String $engine,
|
||||
string $input_path,
|
||||
string $input_type,
|
||||
string $output_path,
|
||||
int $target_width,
|
||||
int $target_height,
|
||||
bool $ignore_aspect_ratio = false,
|
||||
string $target_format = null,
|
||||
int $target_quality = 80,
|
||||
bool $minimize = false,
|
||||
bool $allow_upscale = true
|
||||
) {
|
||||
assert(in_array($engine, MediaEngine::ALL));
|
||||
$this->engine = $engine;
|
||||
$this->input_path = $input_path;
|
||||
|
@ -137,7 +141,6 @@ class MediaCheckPropertiesEvent extends Event
|
|||
$this->file_name = $file_name;
|
||||
$this->ext = $ext;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -186,7 +189,7 @@ class Media extends Extension
|
|||
[0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50, 0x56, 0x50, 0x38, 0x4C];
|
||||
|
||||
|
||||
static function imagick_available(): bool
|
||||
public static function imagick_available(): bool
|
||||
{
|
||||
return extension_loaded("imagick");
|
||||
}
|
||||
|
@ -286,7 +289,6 @@ class Media extends Extension
|
|||
$sb->end_table();
|
||||
|
||||
$event->panel->add_block($sb);
|
||||
|
||||
}
|
||||
|
||||
public function onAdminBuilding(AdminBuildingEvent $event)
|
||||
|
@ -368,7 +370,8 @@ class Media extends Extension
|
|||
$event->target_format,
|
||||
$event->ignore_aspect_ratio,
|
||||
$event->target_quality,
|
||||
$event->allow_upscale);
|
||||
$event->allow_upscale
|
||||
);
|
||||
|
||||
break;
|
||||
case MediaEngine::IMAGICK:
|
||||
|
@ -384,7 +387,8 @@ class Media extends Extension
|
|||
$event->ignore_aspect_ratio,
|
||||
$event->target_quality,
|
||||
$event->minimize,
|
||||
$event->allow_upscale);
|
||||
$event->allow_upscale
|
||||
);
|
||||
//}
|
||||
break;
|
||||
default:
|
||||
|
@ -414,7 +418,7 @@ class Media extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Media";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -473,7 +477,8 @@ class Media extends Extension
|
|||
"video" => $database->scoresql_value_prepare($mcpe->video),
|
||||
"audio" => $database->scoresql_value_prepare($mcpe->audio),
|
||||
"length" => $mcpe->length
|
||||
]);
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function get_images(String $ext = null)
|
||||
|
@ -729,11 +734,12 @@ class Media extends Extension
|
|||
// }
|
||||
// }
|
||||
|
||||
public static function is_lossless(string $filename, string $format) {
|
||||
if(in_array($format, self::LOSSLESS_FORMATS)) {
|
||||
public static function is_lossless(string $filename, string $format)
|
||||
{
|
||||
if (in_array($format, self::LOSSLESS_FORMATS)) {
|
||||
return true;
|
||||
}
|
||||
switch($format) {
|
||||
switch ($format) {
|
||||
case "webp":
|
||||
return self::is_lossless_webp($filename);
|
||||
break;
|
||||
|
@ -752,8 +758,7 @@ class Media extends Extension
|
|||
int $output_quality = 80,
|
||||
bool $minimize = false,
|
||||
bool $allow_upscale = true
|
||||
): void
|
||||
{
|
||||
): void {
|
||||
global $config;
|
||||
|
||||
$convert = $config->get_string(MediaConfig::CONVERT_PATH);
|
||||
|
@ -766,7 +771,7 @@ class Media extends Extension
|
|||
$output_type = $input_type;
|
||||
}
|
||||
|
||||
if($output_type=="webp" && self::is_lossless($input_path, $input_type)) {
|
||||
if ($output_type=="webp" && self::is_lossless($input_path, $input_type)) {
|
||||
$output_type = self::WEBP_LOSSLESS;
|
||||
}
|
||||
|
||||
|
@ -840,8 +845,7 @@ class Media extends Extension
|
|||
bool $ignore_aspect_ratio = false,
|
||||
int $output_quality = 80,
|
||||
bool $allow_upscale = true
|
||||
)
|
||||
{
|
||||
) {
|
||||
$width = $info[0];
|
||||
$height = $info[1];
|
||||
|
||||
|
@ -942,16 +946,16 @@ class Media extends Extension
|
|||
|
||||
// Actually resize the image.
|
||||
if (imagecopyresampled(
|
||||
$image_resized,
|
||||
$image,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
$new_width,
|
||||
$new_height,
|
||||
$width,
|
||||
$height
|
||||
$image_resized,
|
||||
$image,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
$new_width,
|
||||
$new_height,
|
||||
$width,
|
||||
$height
|
||||
) === false) {
|
||||
throw new MediaException("Unable to copy resized image data to new image");
|
||||
}
|
||||
|
@ -1040,7 +1044,6 @@ class Media extends Extension
|
|||
} else {
|
||||
throw new MediaException("Unable to open file for byte check: $file_name");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function is_animated_webp(String $image_filename): bool
|
||||
|
@ -1084,7 +1087,7 @@ class Media extends Extension
|
|||
* @param $format
|
||||
* @return string|null The format name that the media extension will recognize.
|
||||
*/
|
||||
static public function normalize_format(string $format, ?bool $lossless = null): ?string
|
||||
public static function normalize_format(string $format, ?bool $lossless = null): ?string
|
||||
{
|
||||
if ($format == "webp") {
|
||||
if ($lossless === true) {
|
||||
|
@ -1107,7 +1110,7 @@ class Media extends Extension
|
|||
* @param string $filename
|
||||
* @return array [width, height]
|
||||
*/
|
||||
static public function video_size(string $filename): array
|
||||
public static function video_size(string $filename): array
|
||||
{
|
||||
global $config;
|
||||
$ffmpeg = $config->get_string(MediaConfig::FFMPEG_PATH);
|
||||
|
@ -1132,5 +1135,4 @@ class Media extends Extension
|
|||
log_debug('Media', "Getting video size with `$cmd`, returns $output -- $size[0], $size[1]");
|
||||
return $size;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -42,6 +42,5 @@ class MediaTheme extends Themelet
|
|||
</div>
|
||||
<p>These search terms depend on the items being scanned for media content. Automatic scanning was implemented in mid-2019, so items uploaded before, or items uploaded on a system without ffmpeg, will require additional scanning before this will work.</p>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ class NotATag extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="tags") {
|
||||
if ($event->parent==="tags") {
|
||||
if ($user->can(Permissions::BAN_IMAGE)) {
|
||||
$event->add_nav_link("untags", new Link('untag/list/1'), "UnTags");
|
||||
}
|
||||
|
|
|
@ -211,7 +211,7 @@ class Notes extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Notes";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -269,7 +269,5 @@ class NotesTheme extends Themelet
|
|||
<p>Returns images with note(s) by user 123.</p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -220,7 +220,7 @@ class NumericScore extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Numeric Score";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -296,11 +296,10 @@ class NumericScore extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("numeric_score_day", new Link('popular_by_day'), "Popular by Day");
|
||||
$event->add_nav_link("numeric_score_month", new Link('popular_by_month'), "Popular by Month");
|
||||
$event->add_nav_link("numeric_score_year", new Link('popular_by_year'), "Popular by Year");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -132,6 +132,5 @@ class NumericScoreTheme extends Themelet
|
|||
<p>Sorts the search results by score, ascending.</p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ class PrivMsg extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="user") {
|
||||
if ($event->parent==="user") {
|
||||
if (!$user->is_anonymous()) {
|
||||
$count = $this->count_pms($user);
|
||||
$h_count = $count > 0 ? " <span class='unread'>($count)</span>" : "";
|
||||
|
|
|
@ -37,7 +37,6 @@ class PoolAddPostsEvent extends Event
|
|||
$this->pool_id = $pool_id;
|
||||
$this->posts = $posts;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class PoolCreationEvent extends Event
|
||||
|
@ -58,7 +57,6 @@ class PoolCreationEvent extends Event
|
|||
$this->public = $public;
|
||||
$this->description = $description;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Pools extends Extension
|
||||
|
@ -143,7 +141,7 @@ class Pools extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="pool") {
|
||||
if ($event->parent=="pool") {
|
||||
$event->add_nav_link("pool_list", new Link('pool/list'), "List");
|
||||
$event->add_nav_link("pool_new", new Link('pool/new'), "Create");
|
||||
$event->add_nav_link("pool_updated", new Link('pool/updated'), "Changes");
|
||||
|
@ -189,7 +187,8 @@ class Pools extends Extension
|
|||
$title,
|
||||
$user,
|
||||
$_POST["public"] === "Y",
|
||||
$_POST["description"]);
|
||||
$_POST["description"]
|
||||
);
|
||||
|
||||
send_event($event);
|
||||
$page->set_mode(PageMode::REDIRECT);
|
||||
|
@ -365,7 +364,7 @@ class Pools extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Pools";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -434,8 +433,8 @@ class Pools extends Extension
|
|||
$pools = $database->get_all("SELECT * FROM pools ORDER BY title ");
|
||||
|
||||
|
||||
$event->add_action("bulk_pool_add_existing", "Add To (P)ool", "p","", $this->theme->get_bulk_pool_selector($pools));
|
||||
$event->add_action("bulk_pool_add_new", "Create Pool", "","", $this->theme->get_bulk_pool_input($event->search_terms));
|
||||
$event->add_action("bulk_pool_add_existing", "Add To (P)ool", "p", "", $this->theme->get_bulk_pool_selector($pools));
|
||||
$event->add_action("bulk_pool_add_new", "Create Pool", "", "", $this->theme->get_bulk_pool_input($event->search_terms));
|
||||
}
|
||||
|
||||
public function onBulkAction(BulkActionEvent $event)
|
||||
|
@ -452,7 +451,8 @@ class Pools extends Extension
|
|||
|
||||
if ($this->have_permission($user, $pool)) {
|
||||
send_event(
|
||||
new PoolAddPostsEvent($pool_id,iterator_map_to_array("image_to_id", $event->items)));
|
||||
new PoolAddPostsEvent($pool_id, iterator_map_to_array("image_to_id", $event->items))
|
||||
);
|
||||
}
|
||||
break;
|
||||
case "bulk_pool_add_new":
|
||||
|
@ -800,7 +800,7 @@ class Pools extends Extension
|
|||
if (Extension::is_enabled(RatingsInfo::KEY)) {
|
||||
$query .= "AND i.rating IN (".Ratings::privs_to_sql(Ratings::get_user_privs($user)).")";
|
||||
}
|
||||
if(Extension::is_enabled(TrashInfo::KEY)) {
|
||||
if (Extension::is_enabled(TrashInfo::KEY)) {
|
||||
$query .= $database->scoreql_to_sql(" AND trash = SCORE_BOOL_N ");
|
||||
}
|
||||
|
||||
|
@ -814,10 +814,10 @@ class Pools extends Extension
|
|||
);
|
||||
|
||||
$totalPages = ceil($database->get_one(
|
||||
"
|
||||
"
|
||||
SELECT COUNT(*) FROM pool_images p
|
||||
$query",
|
||||
["pid" => $poolID]
|
||||
["pid" => $poolID]
|
||||
) / $imagesPerPage);
|
||||
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ class PoolsTheme extends Themelet
|
|||
|
||||
public function get_bulk_pool_input(array $search_terms)
|
||||
{
|
||||
return "<input type='text' name='bulk_pool_new' placeholder='New pool' required='required' value='".(implode(" ",$search_terms))."' />";
|
||||
return "<input type='text' name='bulk_pool_new' placeholder='New pool' required='required' value='".(implode(" ", $search_terms))."' />";
|
||||
}
|
||||
|
||||
|
||||
|
@ -429,6 +429,5 @@ class PoolsTheme extends Themelet
|
|||
<p>Returns images in the "swimming pool" pool. Note that the underscore becomes a space</p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,4 +6,4 @@ abstract class PostTitlesConfig
|
|||
public const VERSION = "ext_post_titles_version";
|
||||
public const DEFAULT_TO_FILENAME = "post_titles_default_to_filename";
|
||||
public const SHOW_IN_WINDOW_TITLE = "post_titles_show_in_window_title";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,4 +10,4 @@ class PostTitleSetEvent extends Event
|
|||
$this->image = $image;
|
||||
$this->title = $title;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ class PostTitles extends Extension
|
|||
{
|
||||
global $config;
|
||||
|
||||
if($config->get_bool(PostTitlesConfig::SHOW_IN_WINDOW_TITLE)) {
|
||||
if ($config->get_bool(PostTitlesConfig::SHOW_IN_WINDOW_TITLE)) {
|
||||
$event->set_title(self::get_title($event->get_image()));
|
||||
}
|
||||
}
|
||||
|
@ -67,8 +67,8 @@ class PostTitles extends Extension
|
|||
{
|
||||
$sb = new SetupBlock("Post Titles");
|
||||
$sb->start_table();
|
||||
$sb->add_bool_option(PostTitlesConfig::DEFAULT_TO_FILENAME,"Default to filename", true);
|
||||
$sb->add_bool_option(PostTitlesConfig::SHOW_IN_WINDOW_TITLE,"Show in window title", true);
|
||||
$sb->add_bool_option(PostTitlesConfig::DEFAULT_TO_FILENAME, "Default to filename", true);
|
||||
$sb->add_bool_option(PostTitlesConfig::SHOW_IN_WINDOW_TITLE, "Show in window title", true);
|
||||
$sb->end_table();
|
||||
|
||||
$event->panel->add_block($sb);
|
||||
|
@ -88,9 +88,9 @@ class PostTitles extends Extension
|
|||
global $config;
|
||||
|
||||
$title = $image->title??"";
|
||||
if(empty($title) && $config->get_bool(PostTitlesConfig::DEFAULT_TO_FILENAME)) {
|
||||
if (empty($title) && $config->get_bool(PostTitlesConfig::DEFAULT_TO_FILENAME)) {
|
||||
$info = pathinfo($image->filename);
|
||||
if(array_key_exists("extension",$info)) {
|
||||
if (array_key_exists("extension", $info)) {
|
||||
$title = basename($image->filename, '.' . $info['extension']);
|
||||
} else {
|
||||
$title = $image->filename;
|
||||
|
|
|
@ -3,8 +3,6 @@ class PostTitlesTheme extends Themelet
|
|||
{
|
||||
public function get_title_set_html(string $title, bool $can_set): string
|
||||
{
|
||||
|
||||
|
||||
$html = "
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
|
|
|
@ -58,7 +58,7 @@ class RandomImage extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("posts_random", new Link('random_image/view'), "Random Image");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ class RandomList extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("posts_random", new Link('random'), "Shuffle");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ class Ratings extends Extension
|
|||
{
|
||||
global $user;
|
||||
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Ratings";
|
||||
|
||||
|
@ -164,7 +164,7 @@ class Ratings extends Extension
|
|||
global $user;
|
||||
|
||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_RATING)) {
|
||||
$event->add_action("bulk_rate","Set (R)ating", "r","",$this->theme->get_selection_rater_html("u","bulk_rating"));
|
||||
$event->add_action("bulk_rate", "Set (R)ating", "r", "", $this->theme->get_selection_rater_html("u", "bulk_rating"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ class RegenThumb extends Extension
|
|||
global $user;
|
||||
|
||||
if ($user->can(Permissions::DELETE_IMAGE)) {
|
||||
$event->add_action("bulk_regen", "Regen Thumbnails", "","", $this->theme->bulk_html());
|
||||
$event->add_action("bulk_regen", "Regen Thumbnails", "", "", $this->theme->bulk_html());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class ImageRelationshipSetEvent extends Event
|
|||
public $parent_id;
|
||||
|
||||
|
||||
public function __construct(int $child_id, int $parent_id)
|
||||
public function __construct(int $child_id, int $parent_id)
|
||||
{
|
||||
$this->child_id = $child_id;
|
||||
$this->parent_id = $parent_id;
|
||||
|
@ -44,7 +44,7 @@ class Relationships extends Extension
|
|||
{
|
||||
if (isset($_POST['tag_edit__tags']) ? !preg_match('/parent[=|:]/', $_POST["tag_edit__tags"]) : true) { //Ignore tag_edit__parent if tags contain parent metatag
|
||||
if (isset($_POST["tag_edit__parent"]) ? ctype_digit($_POST["tag_edit__parent"]) : false) {
|
||||
send_event(new ImageRelationshipSetEvent($event->image->id,(int) $_POST["tag_edit__parent"]));
|
||||
send_event(new ImageRelationshipSetEvent($event->image->id, (int) $_POST["tag_edit__parent"]));
|
||||
} else {
|
||||
$this->remove_parent($event->image->id);
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ class Relationships extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Relationships";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -132,15 +132,14 @@ class Relationships extends Extension
|
|||
|
||||
$old_parent = $database->get_one("SELECT parent_id FROM images WHERE id = :cid", ["cid"=>$event->child_id]);
|
||||
|
||||
if($old_parent!=$event->parent_id) {
|
||||
if ($old_parent!=$event->parent_id) {
|
||||
if ($database->get_row("SELECT 1 FROM images WHERE id = :pid", ["pid" => $event->parent_id])) {
|
||||
|
||||
$result = $database->execute("UPDATE images SET parent_id = :pid WHERE id = :cid", ["pid" => $event->parent_id, "cid" => $event->child_id]);
|
||||
|
||||
if ($result->rowCount() > 0) {
|
||||
$database->execute("UPDATE images SET has_children = TRUE WHERE id = :pid", ["pid" => $event->parent_id]);
|
||||
|
||||
if($old_parent!=null) {
|
||||
if ($old_parent!=null) {
|
||||
$this->set_has_children($old_parent);
|
||||
}
|
||||
}
|
||||
|
@ -155,7 +154,7 @@ class Relationships extends Extension
|
|||
$results = $database->get_all_iterable("SELECT * FROM images WHERE parent_id = :pid ", ["pid"=>$image->id]);
|
||||
$output = [];
|
||||
foreach ($results as $result) {
|
||||
if($result["id"]==$omit) {
|
||||
if ($result["id"]==$omit) {
|
||||
continue;
|
||||
}
|
||||
$output[] = new Image($result);
|
||||
|
@ -180,13 +179,11 @@ class Relationships extends Extension
|
|||
|
||||
// Doesn't work on pgsql
|
||||
// $database->execute("UPDATE images SET has_children = (SELECT * FROM (SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM images WHERE parent_id = :pid) AS sub)
|
||||
// WHERE id = :pid", ["pid"=>$parentID]);
|
||||
// WHERE id = :pid", ["pid"=>$parentID]);
|
||||
|
||||
$database->execute(
|
||||
"UPDATE images SET has_children = EXISTS (SELECT 1 FROM images WHERE parent_id = :pid) WHERE id = :pid",
|
||||
["pid"=>$parent_id]);
|
||||
["pid"=>$parent_id]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||
$image_3 = Image::by_id($image_id_3);
|
||||
|
||||
$this->assertNull($image_1->parent_id);
|
||||
$this->assertEquals($image_id_1,$image_2->parent_id);
|
||||
$this->assertEquals($image_id_1, $image_2->parent_id);
|
||||
$this->assertNull($image_3->parent_id);
|
||||
$this->assertTrue($image_1->has_children);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
|
@ -56,7 +56,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||
$image_3 = Image::by_id($image_id_3);
|
||||
|
||||
$this->assertNull($image_1->parent_id);
|
||||
$this->assertEquals($image_id_3,$image_2->parent_id);
|
||||
$this->assertEquals($image_id_3, $image_2->parent_id);
|
||||
$this->assertNull($image_3->parent_id);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
|
@ -129,7 +129,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||
$image_3 = Image::by_id($image_id_3);
|
||||
|
||||
$this->assertNull($image_1->parent_id);
|
||||
$this->assertEquals($image_id_1,$image_2->parent_id);
|
||||
$this->assertEquals($image_id_1, $image_2->parent_id);
|
||||
$this->assertNull($image_3->parent_id);
|
||||
$this->assertTrue($image_1->has_children);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
|
@ -151,8 +151,8 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||
$image_2 = Image::by_id($image_id_2);
|
||||
$image_3 = Image::by_id($image_id_3);
|
||||
|
||||
$this->assertEquals($image_id_3,$image_1->parent_id);
|
||||
$this->assertEquals($image_id_1,$image_2->parent_id);
|
||||
$this->assertEquals($image_id_3, $image_1->parent_id);
|
||||
$this->assertEquals($image_id_1, $image_2->parent_id);
|
||||
$this->assertNull($image_3->parent_id);
|
||||
$this->assertTrue($image_1->has_children);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
|
@ -175,7 +175,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||
$image_3 = Image::by_id($image_id_3);
|
||||
|
||||
$this->assertNull($image_1->parent_id);
|
||||
$this->assertEquals($image_id_1,$image_2->parent_id);
|
||||
$this->assertEquals($image_id_1, $image_2->parent_id);
|
||||
$this->assertNull($image_3->parent_id);
|
||||
$this->assertTrue($image_1->has_children);
|
||||
$this->assertFalse($image_2->has_children);
|
||||
|
|
|
@ -72,6 +72,5 @@ class RelationshipsTheme extends Themelet
|
|||
<p>Returns images that have no children.</p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ class ReportImage extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::VIEW_IMAGE_REPORT)) {
|
||||
$count = $this->count_reported_images();
|
||||
$h_count = $count > 0 ? " ($count)" : "";
|
||||
|
|
|
@ -47,7 +47,7 @@ class ResizeImage extends Extension
|
|||
{
|
||||
$sb = new SetupBlock("Image Resize");
|
||||
$sb->start_table();
|
||||
$sb->add_choice_option(ResizeConfig::ENGINE, Media::IMAGE_MEDIA_ENGINES, "Engine: ", true);
|
||||
$sb->add_choice_option(ResizeConfig::ENGINE, Media::IMAGE_MEDIA_ENGINES, "Engine: ", true);
|
||||
$sb->add_bool_option(ResizeConfig::ENABLED, "Allow resizing images: ", true);
|
||||
$sb->add_bool_option(ResizeConfig::UPLOAD, "Resize on upload: ", true);
|
||||
$sb->end_table();
|
||||
|
@ -180,7 +180,7 @@ class ResizeImage extends Extension
|
|||
$engine = $config->get_string(ResizeConfig::ENGINE);
|
||||
|
||||
|
||||
if(!$this->can_resize_format($image_obj->ext, $image_obj->lossless)) {
|
||||
if (!$this->can_resize_format($image_obj->ext, $image_obj->lossless)) {
|
||||
throw new ImageResizeException("Engine $engine cannot resize selected image");
|
||||
}
|
||||
|
||||
|
|
|
@ -19,5 +19,4 @@ class RSS_CommentsInfo extends ExtensionInfo
|
|||
public $license = self::LICENSE_GPLV2;
|
||||
public $description = "Self explanatory";
|
||||
public $db_support = [DatabaseDriver::MYSQL, DatabaseDriver::SQLITE]; // pgsql has no UNIX_TIMESTAMP
|
||||
|
||||
}
|
||||
|
|
|
@ -73,9 +73,8 @@ EOD;
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="comment") {
|
||||
if ($event->parent=="comment") {
|
||||
$event->add_nav_link("comment_rss", new Link('rss/comments'), "Feed");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ class RSS_Images extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="posts") {
|
||||
if ($event->parent=="posts") {
|
||||
$event->add_nav_link("posts_rss", new Link('rss/images'), "Feed");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ if ( // kill these glitched requests immediately
|
|||
|
||||
class Rule34 extends Extension
|
||||
{
|
||||
|
||||
public function onImageDeletion(ImageDeletionEvent $event)
|
||||
{
|
||||
global $database;
|
||||
|
|
|
@ -9,4 +9,4 @@ class SetupConfig
|
|||
public const THEME = "theme";
|
||||
public const WORD_WRAP = "word_wrap";
|
||||
public const COMMENT_CAPTCHA = "comment_captcha";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,20 +136,33 @@ class SetupBlock extends Block
|
|||
|
||||
|
||||
|
||||
private function format_option(string $name, $html, ?string $label, bool $table_row) {
|
||||
private function format_option(string $name, $html, ?string $label, bool $table_row)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if($table_row) $this->start_table_row();
|
||||
if($table_row) $this->start_table_header_cell();
|
||||
if ($table_row) {
|
||||
$this->start_table_row();
|
||||
}
|
||||
if ($table_row) {
|
||||
$this->start_table_header_cell();
|
||||
}
|
||||
if (!is_null($label)) {
|
||||
$this->body .= "<label for='{$name}'>{$label}</label>";
|
||||
}
|
||||
if($table_row) $this->end_table_header_cell();
|
||||
if ($table_row) {
|
||||
$this->end_table_header_cell();
|
||||
}
|
||||
|
||||
if($table_row) $this->start_table_cell();
|
||||
if ($table_row) {
|
||||
$this->start_table_cell();
|
||||
}
|
||||
$this->body .= $html;
|
||||
if($table_row) $this->end_table_cell();
|
||||
if($table_row) $this->end_table_row();
|
||||
if ($table_row) {
|
||||
$this->end_table_cell();
|
||||
}
|
||||
if ($table_row) {
|
||||
$this->end_table_row();
|
||||
}
|
||||
}
|
||||
|
||||
public function add_text_option(string $name, string $label=null, bool $table_row = false)
|
||||
|
@ -181,7 +194,7 @@ class SetupBlock extends Block
|
|||
$checked = $config->get_bool($name) ? " checked" : "";
|
||||
|
||||
$html = "";
|
||||
if(!$table_row&&!is_null($label)) {
|
||||
if (!$table_row&&!is_null($label)) {
|
||||
$html .= "<label for='{$name}'>{$label}</label>";
|
||||
}
|
||||
|
||||
|
@ -210,7 +223,6 @@ class SetupBlock extends Block
|
|||
$html .= "<input type='hidden' name='_type_$name' value='int'>\n";
|
||||
|
||||
$this->format_option($name, $html, $label, $table_row);
|
||||
|
||||
}
|
||||
|
||||
public function add_shorthand_int_option(string $name, string $label=null, bool $table_row = false)
|
||||
|
@ -408,7 +420,7 @@ class Setup extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::CHANGE_SETTING)) {
|
||||
$event->add_nav_link("setup", new Link('setup'), "Board Config", null, 0);
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ class Source_History extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
||||
$event->add_nav_link("source_history", new Link('source_history/all/1'), "Source Changes", NavLink::is_active(["source_history"]));
|
||||
}
|
||||
|
|
|
@ -20,6 +20,4 @@ class System extends Extension
|
|||
{
|
||||
$event->add_nav_link("system", new Link('system'), "System");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -5,4 +5,4 @@ abstract class TagCategoriesConfig
|
|||
public const VERSION = "ext_tag_categories_version";
|
||||
|
||||
public const SPLIT_ON_VIEW = "tag_categories_split_on_view";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,7 +70,8 @@ class TagCategories extends Extension
|
|||
$count = $matches[3];
|
||||
|
||||
$types = $database->get_col(
|
||||
$database->scoreql_to_sql('SELECT SCORE_STRNORM(category) FROM image_tag_categories'));
|
||||
$database->scoreql_to_sql('SELECT SCORE_STRNORM(category) FROM image_tag_categories')
|
||||
);
|
||||
if (in_array($type, $types)) {
|
||||
$event->add_querylet(
|
||||
new Querylet($database->scoreql_to_sql("EXISTS (
|
||||
|
@ -88,7 +89,7 @@ class TagCategories extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Tag Categories";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -113,6 +113,5 @@ class TagCategoriesTheme extends Themelet
|
|||
<p>Can use <, <=, >, >=, or =.</p>
|
||||
<p>Category name is not case sensitive, category must exist for search to work.</p>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,7 +218,7 @@ class TagEdit extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="tags") {
|
||||
if ($event->parent=="tags") {
|
||||
$event->add_nav_link("tags_help", new Link('ext_doc/tag_edit'), "Help");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ class Tag_History extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
||||
$event->add_nav_link("tag_history", new Link('tag_history/all/1'), "Tag Changes", NavLink::is_active(["tag_history"]));
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ class TagListConfig
|
|||
{
|
||||
public const LENGTH = "tag_list_length";
|
||||
public const POPULAR_TAG_LIST_LENGTH = "popular_tag_list_length";
|
||||
public CONSt TAGS_MIN = "tags_min";
|
||||
public const TAGS_MIN = "tags_min";
|
||||
public const INFO_LINK = "info_link";
|
||||
public const IMAGE_TYPE = "tag_list_image_type";
|
||||
public const RELATED_SORT = "tag_list_related_sort";
|
||||
|
@ -28,4 +28,4 @@ class TagListConfig
|
|||
"Tag Count" => TagListConfig::SORT_TAG_COUNT,
|
||||
"Alphabetical" => TagListConfig::SORT_ALPHABETICAL
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ class TagList extends Extension
|
|||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="tags") {
|
||||
if ($event->parent=="tags") {
|
||||
$event->add_nav_link("tags_map", new Link('tags/map'), "Map");
|
||||
$event->add_nav_link("tags_alphabetic", new Link('tags/alphabetic'), "Alphabetic");
|
||||
$event->add_nav_link("tags_popularity", new Link('tags/popularity'), "Popularity");
|
||||
|
@ -137,15 +137,24 @@ class TagList extends Extension
|
|||
$sb->start_table();
|
||||
$sb->add_text_option(TagListConfig::INFO_LINK, "Tag info link", true);
|
||||
$sb->add_text_option(TagListConfig::OMIT_TAGS, "Omit tags", true);
|
||||
$sb->add_choice_option(TagListConfig::IMAGE_TYPE,
|
||||
$sb->add_choice_option(
|
||||
TagListConfig::IMAGE_TYPE,
|
||||
TagListConfig::TYPE_CHOICES,
|
||||
"Image tag list", true);
|
||||
$sb->add_choice_option(TagListConfig::RELATED_SORT,
|
||||
"Image tag list",
|
||||
true
|
||||
);
|
||||
$sb->add_choice_option(
|
||||
TagListConfig::RELATED_SORT,
|
||||
TagListConfig::SORT_CHOICES,
|
||||
"Sort related list by", true);
|
||||
$sb->add_choice_option(TagListConfig::POPULAR_SORT,
|
||||
"Sort related list by",
|
||||
true
|
||||
);
|
||||
$sb->add_choice_option(
|
||||
TagListConfig::POPULAR_SORT,
|
||||
TagListConfig::SORT_CHOICES,
|
||||
"Sort popular list by", true);
|
||||
"Sort popular list by",
|
||||
true
|
||||
);
|
||||
$sb->add_bool_option("tag_list_numbers", "Show tag counts", true);
|
||||
$sb->end_table();
|
||||
$event->panel->add_block($sb);
|
||||
|
@ -179,7 +188,7 @@ class TagList extends Extension
|
|||
|
||||
$results = $database->cache->get("tag_list_omitted_tags:".$tags_config);
|
||||
|
||||
if($results==null) {
|
||||
if ($results==null) {
|
||||
$results = [];
|
||||
$tags = explode(" ", $tags_config);
|
||||
|
||||
|
@ -200,13 +209,11 @@ class TagList extends Extension
|
|||
} else {
|
||||
$where[] = " tag LIKE :$arg ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$results = $database->get_col("SELECT id FROM tags WHERE " . implode(" OR ", $where), $args);
|
||||
|
||||
$database->cache->set("tag_list_omitted_tags:" . $tags_config, $results, 600);
|
||||
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
@ -454,11 +461,11 @@ class TagList extends Extension
|
|||
global $database, $config;
|
||||
|
||||
$omitted_tags = self::get_omitted_tags();
|
||||
$starting_tags = $database->get_col("SELECT tag_id FROM image_tags WHERE image_id = :image_id",["image_id" => $image->id]);
|
||||
$starting_tags = $database->get_col("SELECT tag_id FROM image_tags WHERE image_id = :image_id", ["image_id" => $image->id]);
|
||||
|
||||
$starting_tags = array_diff($starting_tags,$omitted_tags);
|
||||
$starting_tags = array_diff($starting_tags, $omitted_tags);
|
||||
|
||||
if(count($starting_tags) === 0) {
|
||||
if (count($starting_tags) === 0) {
|
||||
// No valid starting tags, so can't look anything up
|
||||
return;
|
||||
}
|
||||
|
@ -467,9 +474,9 @@ class TagList extends Extension
|
|||
SELECT it2.tag_id
|
||||
FROM image_tags AS it1
|
||||
INNER JOIN image_tags AS it2 ON it1.image_id=it2.image_id
|
||||
AND it2.tag_id NOT IN (".implode(",",array_merge($omitted_tags,$starting_tags)).")
|
||||
AND it2.tag_id NOT IN (".implode(",", array_merge($omitted_tags, $starting_tags)).")
|
||||
WHERE
|
||||
it1.tag_id IN (".implode(",",$starting_tags).")
|
||||
it1.tag_id IN (".implode(",", $starting_tags).")
|
||||
GROUP BY it2.tag_id
|
||||
) A ON A.tag_id = tags.id
|
||||
ORDER BY count DESC
|
||||
|
@ -530,7 +537,7 @@ class TagList extends Extension
|
|||
if (empty($tags)) {
|
||||
$omitted_tags = self::get_omitted_tags();
|
||||
|
||||
if(empty($omitted_tags)) {
|
||||
if (empty($omitted_tags)) {
|
||||
$query = "
|
||||
SELECT tag, count
|
||||
FROM tags
|
||||
|
@ -538,7 +545,6 @@ class TagList extends Extension
|
|||
ORDER BY count DESC
|
||||
LIMIT :popular_tag_list_length
|
||||
";
|
||||
|
||||
} else {
|
||||
$query = "
|
||||
SELECT tag, count
|
||||
|
@ -618,9 +624,9 @@ class TagList extends Extension
|
|||
|
||||
$omitted_tags = self::get_omitted_tags();
|
||||
|
||||
$starting_tags = array_diff($starting_tags,$omitted_tags);
|
||||
$starting_tags = array_diff($starting_tags, $omitted_tags);
|
||||
|
||||
if(count($starting_tags) === 0) {
|
||||
if (count($starting_tags) === 0) {
|
||||
// No valid starting tags, so can't look anything up
|
||||
return [];
|
||||
}
|
||||
|
@ -631,9 +637,9 @@ class TagList extends Extension
|
|||
FROM image_tags AS it1 -- Got other images with the same tags
|
||||
INNER JOIN image_tags AS it2 ON it1.image_id=it2.image_id
|
||||
-- And filter out unwanted tags
|
||||
AND it2.tag_id NOT IN (".implode(",",array_merge($omitted_tags,$starting_tags)).")
|
||||
AND it2.tag_id NOT IN (".implode(",", array_merge($omitted_tags, $starting_tags)).")
|
||||
WHERE
|
||||
it1.tag_id IN (".implode(",",$starting_tags).")
|
||||
it1.tag_id IN (".implode(",", $starting_tags).")
|
||||
GROUP BY it2.tag_id) A ON A.tag_id = t.id
|
||||
ORDER BY A.calc_count
|
||||
DESC LIMIT :limit
|
||||
|
@ -643,14 +649,12 @@ class TagList extends Extension
|
|||
$related_tags = $database->get_all($query, $args);
|
||||
$database->cache->set("related_tags:$str_search", $related_tags, 60 * 60);
|
||||
}
|
||||
|
||||
}
|
||||
if ($related_tags === false) {
|
||||
return [];
|
||||
} else {
|
||||
return $related_tags;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -117,12 +117,12 @@ class TagListTheme extends Themelet
|
|||
$page->add_block(new Block($category_display_name, $tag_categories_html[$category], "left", 9));
|
||||
}
|
||||
|
||||
if ($main_html != null) {
|
||||
if ($config->get_string(TagListConfig::IMAGE_TYPE)==TagListConfig::TYPE_TAGS) {
|
||||
$page->add_block(new Block("Tags", $main_html, "left", 10));
|
||||
} else {
|
||||
$page->add_block(new Block("Related Tags", $main_html, "left", 10));
|
||||
}
|
||||
if ($main_html != null) {
|
||||
if ($config->get_string(TagListConfig::IMAGE_TYPE)==TagListConfig::TYPE_TAGS) {
|
||||
$page->add_block(new Block("Tags", $main_html, "left", 10));
|
||||
} else {
|
||||
$page->add_block(new Block("Related Tags", $main_html, "left", 10));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
class Tips extends Extension
|
||||
{
|
||||
|
||||
public function onInitExt(InitExtEvent $event)
|
||||
{
|
||||
global $config, $database;
|
||||
|
@ -67,7 +66,7 @@ class Tips extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->is_admin()) {
|
||||
$event->add_nav_link("tips", new Link('tips/list'), "Tips Editor");
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ class TranscodeImage extends Extension
|
|||
$sb->start_table();
|
||||
$sb->add_bool_option(TranscodeConfig::ENABLED, "Allow transcoding images: ", true);
|
||||
$sb->add_bool_option(TranscodeConfig::UPLOAD, "Transcode on upload: ", true);
|
||||
$sb->add_choice_option(TranscodeConfig::ENGINE, Media::IMAGE_MEDIA_ENGINES, "Engine", true);
|
||||
$sb->add_choice_option(TranscodeConfig::ENGINE, Media::IMAGE_MEDIA_ENGINES, "Engine", true);
|
||||
foreach (self::INPUT_FORMATS as $display=>$format) {
|
||||
if (in_array($format, MediaEngine::INPUT_SUPPORT[$engine])) {
|
||||
$outputs = $this->get_supported_output_formats($engine, $format);
|
||||
|
@ -169,7 +169,7 @@ class TranscodeImage extends Extension
|
|||
$engine = $config->get_string(TranscodeConfig::ENGINE);
|
||||
|
||||
if ($user->is_admin()) {
|
||||
$event->add_action(self::ACTION_BULK_TRANSCODE, "Transcode", null,"", $this->theme->get_transcode_picker_html($this->get_supported_output_formats($engine)));
|
||||
$event->add_action(self::ACTION_BULK_TRANSCODE, "Transcode", null, "", $this->theme->get_transcode_picker_html($this->get_supported_output_formats($engine)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -218,7 +218,7 @@ class TranscodeImage extends Extension
|
|||
|
||||
private function get_supported_output_formats($engine, ?String $omit_format = null, ?bool $lossless = null): array
|
||||
{
|
||||
if($omit_format!=null) {
|
||||
if ($omit_format!=null) {
|
||||
$omit_format = Media::normalize_format($omit_format, $lossless);
|
||||
}
|
||||
$output = [];
|
||||
|
@ -229,7 +229,7 @@ class TranscodeImage extends Extension
|
|||
$output[$key] = $value;
|
||||
continue;
|
||||
}
|
||||
if(Media::is_output_supported($engine, $value)
|
||||
if (Media::is_output_supported($engine, $value)
|
||||
&&(empty($omit_format)||$omit_format!=$value)) {
|
||||
$output[$key] = $value;
|
||||
}
|
||||
|
|
|
@ -10,8 +10,13 @@ class TranscodeImageTheme extends Themelet
|
|||
global $config;
|
||||
|
||||
$html = "
|
||||
".make_form(make_link("transcode/{$image->id}"), 'POST', false, "",
|
||||
"return transcodeSubmit()")."
|
||||
".make_form(
|
||||
make_link("transcode/{$image->id}"),
|
||||
'POST',
|
||||
false,
|
||||
"",
|
||||
"return transcodeSubmit()"
|
||||
)."
|
||||
<input type='hidden' name='image_id' value='{$image->id}'>
|
||||
<input type='hidden' id='image_lossless' name='image_lossless' value='{$image->lossless}'>
|
||||
".$this->get_transcode_picker_html($options)."
|
||||
|
|
|
@ -7,7 +7,6 @@ abstract class TrashConfig
|
|||
|
||||
class Trash extends Extension
|
||||
{
|
||||
|
||||
public function get_priority(): int
|
||||
{
|
||||
// Needs to be early to intercept delete events
|
||||
|
@ -50,7 +49,7 @@ class Trash extends Extension
|
|||
{
|
||||
global $user, $page;
|
||||
|
||||
if($event->image->trash===true && !$user->can(Permissions::VIEW_TRASH)) {
|
||||
if ($event->image->trash===true && !$user->can(Permissions::VIEW_TRASH)) {
|
||||
$page->set_mode(PageMode::REDIRECT);
|
||||
$page->set_redirect(make_link("post/list"));
|
||||
}
|
||||
|
@ -58,7 +57,7 @@ class Trash extends Extension
|
|||
|
||||
public function onImageDeletion(ImageDeletionEvent $event)
|
||||
{
|
||||
if($event->force!==true && $event->image->trash!==true) {
|
||||
if ($event->force!==true && $event->image->trash!==true) {
|
||||
self::set_trash($event->image->id, true);
|
||||
$event->stop_processing = true;
|
||||
}
|
||||
|
@ -78,7 +77,7 @@ class Trash extends Extension
|
|||
|
||||
|
||||
if (preg_match(self::SEARCH_REGEXP, strtolower($event->term), $matches)) {
|
||||
if($user->can(Permissions::VIEW_TRASH)) {
|
||||
if ($user->can(Permissions::VIEW_TRASH)) {
|
||||
$event->add_querylet(new Querylet($database->scoreql_to_sql("trash = SCORE_BOOL_Y ")));
|
||||
}
|
||||
}
|
||||
|
@ -87,8 +86,8 @@ class Trash extends Extension
|
|||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if($user->can(Permissions::VIEW_TRASH)) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
if ($user->can(Permissions::VIEW_TRASH)) {
|
||||
$block = new Block();
|
||||
$block->header = "Trash";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
@ -108,18 +107,19 @@ class Trash extends Extension
|
|||
return true;
|
||||
}
|
||||
|
||||
public static function set_trash($image_id, $trash) {
|
||||
public static function set_trash($image_id, $trash)
|
||||
{
|
||||
global $database;
|
||||
|
||||
$database->execute("UPDATE images SET trash = :trash WHERE id = :id",
|
||||
["trash"=>$database->scoresql_value_prepare($trash),"id"=>$image_id]);
|
||||
|
||||
|
||||
$database->execute(
|
||||
"UPDATE images SET trash = :trash WHERE id = :id",
|
||||
["trash"=>$database->scoresql_value_prepare($trash),"id"=>$image_id]
|
||||
);
|
||||
}
|
||||
public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event)
|
||||
{
|
||||
global $config, $database, $user;
|
||||
if($event->image->trash===true && $user->can(Permissions::VIEW_TRASH)) {
|
||||
if ($event->image->trash===true && $user->can(Permissions::VIEW_TRASH)) {
|
||||
$event->add_part($this->theme->get_image_admin_html($event->image->id));
|
||||
}
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ class Trash extends Extension
|
|||
global $user;
|
||||
|
||||
if ($user->can(Permissions::VIEW_TRASH)&&in_array("in:trash", $event->search_terms)) {
|
||||
$event->add_action("bulk_trash_restore","(U)ndelete", "u");
|
||||
$event->add_action("bulk_trash_restore", "(U)ndelete", "u");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,5 @@ class Trash extends Extension
|
|||
$database->Execute("CREATE INDEX images_trash_idx ON images(trash)");
|
||||
$config->set_int(TrashConfig::VERSION, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
class TrashTheme extends Themelet
|
||||
{
|
||||
function get_image_admin_html(int $image_id) {
|
||||
public function get_image_admin_html(int $image_id)
|
||||
{
|
||||
$html = "
|
||||
".make_form(make_link('trash_restore/'.$image_id), 'POST')."
|
||||
<input type='hidden' name='image_id' value='$image_id'>
|
||||
|
@ -10,7 +11,8 @@ class TrashTheme extends Themelet
|
|||
</form>
|
||||
";
|
||||
|
||||
return $html; }
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
public function get_help_html()
|
||||
|
@ -21,6 +23,5 @@ class TrashTheme extends Themelet
|
|||
<p>Returns images that are in the trash.</p>
|
||||
</div>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ class Upgrade extends Extension
|
|||
$database->execute("ALTER TABLE images ADD COLUMN length INTEGER NULL ");
|
||||
|
||||
log_info("upgrade", "Setting indexes for media columns");
|
||||
switch($database->get_driver_name()) {
|
||||
switch ($database->get_driver_name()) {
|
||||
case DatabaseDriver::PGSQL:
|
||||
case DatabaseDriver::SQLITE:
|
||||
$database->execute('CREATE INDEX images_video_idx ON images(video) WHERE video IS NOT NULL');
|
||||
|
@ -213,7 +213,6 @@ class Upgrade extends Extension
|
|||
log_info("upgrade", "Database at version 17");
|
||||
$config->set_bool("in_upgrade", false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function get_priority(): int
|
||||
|
|
|
@ -135,12 +135,12 @@ class Upload extends Extension
|
|||
|
||||
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
||||
{
|
||||
$event->add_nav_link("upload",new Link('upload'), "Upload");
|
||||
$event->add_nav_link("upload", new Link('upload'), "Upload");
|
||||
}
|
||||
|
||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
if($event->parent=="upload") {
|
||||
if ($event->parent=="upload") {
|
||||
if (class_exists("Wiki")) {
|
||||
$event->add_nav_link("upload_guidelines", new Link('wiki/upload_guidelines'), "Guidelines");
|
||||
}
|
||||
|
|
|
@ -270,7 +270,7 @@ class UserPage extends Extension
|
|||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||
{
|
||||
global $user;
|
||||
if($event->parent==="system") {
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::EDIT_USER_CLASS)) {
|
||||
$event->add_nav_link("user_admin", new Link('user_admin/list'), "User List", NavLink::is_active(["user_admin"]));
|
||||
}
|
||||
|
@ -317,7 +317,7 @@ class UserPage extends Extension
|
|||
|
||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||
{
|
||||
if($event->key===HelpPages::SEARCH) {
|
||||
if ($event->key===HelpPages::SEARCH) {
|
||||
$block = new Block();
|
||||
$block->header = "Users";
|
||||
$block->body = $this->theme->get_help_html();
|
||||
|
|
|
@ -242,7 +242,6 @@ class UserPageTheme extends Themelet
|
|||
$page->set_heading(html_escape($duser->name)."'s Page");
|
||||
$page->add_block(new NavBlock());
|
||||
$page->add_block(new Block("Stats", join("<br>", $stats), "main", 10));
|
||||
|
||||
}
|
||||
|
||||
public function build_options(User $duser, UserOptionsBuildingEvent $event)
|
||||
|
@ -337,7 +336,6 @@ class UserPageTheme extends Themelet
|
|||
foreach ($event->parts as $part) {
|
||||
$html .= $part;
|
||||
}
|
||||
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ class UserConfig extends Extension
|
|||
{
|
||||
global $config;
|
||||
|
||||
if ($config->get_int(self::VERSION,0)<1) {
|
||||
if ($config->get_int(self::VERSION, 0)<1) {
|
||||
$this->install();
|
||||
}
|
||||
}
|
||||
|
@ -43,8 +43,7 @@ class UserConfig extends Extension
|
|||
{
|
||||
global $config, $database;
|
||||
|
||||
if ($config->get_int(self::VERSION,0) < 1) {
|
||||
|
||||
if ($config->get_int(self::VERSION, 0) < 1) {
|
||||
log_info("upgrade", "Adding user config table");
|
||||
|
||||
$database->create_table("user_config", "
|
||||
|
|
|
@ -26,7 +26,8 @@ class DisplayingImageEvent extends Event
|
|||
return $this->image;
|
||||
}
|
||||
|
||||
public function set_title(String $title) {
|
||||
public function set_title(String $title)
|
||||
{
|
||||
$this->title = $title;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,4 +22,4 @@ class ImageAdminBlockBuildingEvent extends Event
|
|||
}
|
||||
$this->parts[$position] = $html;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,4 +22,4 @@ class ImageInfoBoxBuildingEvent extends Event
|
|||
}
|
||||
$this->parts[$position] = $html;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,4 +9,4 @@ class ImageInfoSetEvent extends Event
|
|||
{
|
||||
$this->image = $image;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue