formatting
This commit is contained in:
parent
4dce3a2f07
commit
f5119b20a3
@ -192,14 +192,14 @@ class Cache
|
|||||||
$_tracer->begin("Cache Query", ["key"=>$key]);
|
$_tracer->begin("Cache Query", ["key"=>$key]);
|
||||||
$val = $this->engine->get($key);
|
$val = $this->engine->get($key);
|
||||||
if ($val !== false) {
|
if ($val !== false) {
|
||||||
$res = "hit";
|
$res = "hit";
|
||||||
$this->hits++;
|
$this->hits++;
|
||||||
} else {
|
} else {
|
||||||
$res = "miss";
|
$res = "miss";
|
||||||
$this->misses++;
|
$this->misses++;
|
||||||
}
|
}
|
||||||
$_tracer->end(null, ["result"=>$res]);
|
$_tracer->end(null, ["result"=>$res]);
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set(string $key, $val, int $time=0)
|
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
|
public function set_array(string $name, ?array $value): void
|
||||||
{
|
{
|
||||||
if($value!=null) {
|
if ($value!=null) {
|
||||||
$this->values[$name] = implode(",", $value);
|
$this->values[$name] = implode(",", $value);
|
||||||
} else {
|
} else {
|
||||||
$this->values[$name] = null;
|
$this->values[$name] = null;
|
||||||
@ -313,16 +313,19 @@ class DatabaseConfig extends BaseConfig
|
|||||||
private $sub_column;
|
private $sub_column;
|
||||||
private $sub_value;
|
private $sub_value;
|
||||||
|
|
||||||
public function __construct(Database $database, string $table_name = "config",
|
public function __construct(
|
||||||
string $sub_column = null, string $sub_value = null)
|
Database $database,
|
||||||
{
|
string $table_name = "config",
|
||||||
|
string $sub_column = null,
|
||||||
|
string $sub_value = null
|
||||||
|
) {
|
||||||
$this->database = $database;
|
$this->database = $database;
|
||||||
$this->table_name = $table_name;
|
$this->table_name = $table_name;
|
||||||
$this->sub_value = $sub_value;
|
$this->sub_value = $sub_value;
|
||||||
$this->sub_column = $sub_column;
|
$this->sub_column = $sub_column;
|
||||||
|
|
||||||
$cache_name = "config";
|
$cache_name = "config";
|
||||||
if(!empty($sub_value)) {
|
if (!empty($sub_value)) {
|
||||||
$cache_name .= "_".$sub_value;
|
$cache_name .= "_".$sub_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,12 +338,12 @@ class DatabaseConfig extends BaseConfig
|
|||||||
$query = "SELECT name, value FROM {$this->table_name}";
|
$query = "SELECT name, value FROM {$this->table_name}";
|
||||||
$args = [];
|
$args = [];
|
||||||
|
|
||||||
if(!empty($sub_column)&&!empty($sub_value)) {
|
if (!empty($sub_column)&&!empty($sub_value)) {
|
||||||
$query .= " WHERE $sub_column = :sub_value";
|
$query .= " WHERE $sub_column = :sub_value";
|
||||||
$args["sub_value"] = $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->values[$row["name"]] = $row["value"];
|
||||||
}
|
}
|
||||||
$this->database->cache->set($cache_name, $this->values);
|
$this->database->cache->set($cache_name, $this->values);
|
||||||
@ -359,7 +362,7 @@ class DatabaseConfig extends BaseConfig
|
|||||||
$args = ["name"=>$name];
|
$args = ["name"=>$name];
|
||||||
$cols = ["name","value"];
|
$cols = ["name","value"];
|
||||||
$params = [":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";
|
$query .= " AND $this->sub_column = :sub_value";
|
||||||
$args["sub_value"] = $this->sub_value;
|
$args["sub_value"] = $this->sub_value;
|
||||||
$cols[] = $this->sub_column;
|
$cols[] = $this->sub_column;
|
||||||
@ -370,8 +373,9 @@ class DatabaseConfig extends BaseConfig
|
|||||||
|
|
||||||
$args["value"] =$this->values[$name];
|
$args["value"] =$this->values[$name];
|
||||||
$this->database->Execute(
|
$this->database->Execute(
|
||||||
"INSERT INTO {$this->table_name} (".join(",",$cols).") VALUES (".join(",",$params).")",
|
"INSERT INTO {$this->table_name} (".join(",", $cols).") VALUES (".join(",", $params).")",
|
||||||
$args);
|
$args
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// rather than deleting and having some other request(s) do a thundering
|
// rather than deleting and having some other request(s) do a thundering
|
||||||
// herd of race-conditioned updates, just save the updated version once here
|
// herd of race-conditioned updates, just save the updated version once here
|
||||||
|
@ -172,9 +172,9 @@ class Database
|
|||||||
if (is_null($this->engine)) {
|
if (is_null($this->engine)) {
|
||||||
$this->connect_engine();
|
$this->connect_engine();
|
||||||
}
|
}
|
||||||
if($input===true) {
|
if ($input===true) {
|
||||||
return $this->engine->BOOL_Y;
|
return $this->engine->BOOL_Y;
|
||||||
} else if ($input===false) {
|
} elseif ($input===false) {
|
||||||
return $this->engine->BOOL_N;
|
return $this->engine->BOOL_N;
|
||||||
}
|
}
|
||||||
return $input;
|
return $input;
|
||||||
@ -190,13 +190,13 @@ class Database
|
|||||||
|
|
||||||
private function count_time(string $method, float $start, string $query, ?array $args): void
|
private function count_time(string $method, float $start, string $query, ?array $args): void
|
||||||
{
|
{
|
||||||
global $_tracer, $tracer_enabled;
|
global $_tracer, $tracer_enabled;
|
||||||
$dur = microtime(true) - $start;
|
$dur = microtime(true) - $start;
|
||||||
if($tracer_enabled) {
|
if ($tracer_enabled) {
|
||||||
$query = trim(preg_replace('/^[\t ]+/m', '', $query)); // trim leading whitespace
|
$query = trim(preg_replace('/^[\t ]+/m', '', $query)); // trim leading whitespace
|
||||||
$_tracer->complete($start * 1000000, $dur * 1000000, "DB Query", ["query"=>$query, "args"=>$args, "method"=>$method]);
|
$_tracer->complete($start * 1000000, $dur * 1000000, "DB Query", ["query"=>$query, "args"=>$args, "method"=>$method]);
|
||||||
}
|
}
|
||||||
$this->query_count++;
|
$this->query_count++;
|
||||||
$this->dbtime += $dur;
|
$this->dbtime += $dur;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ class Database
|
|||||||
return $stmt;
|
return $stmt;
|
||||||
} catch (PDOException $pdoe) {
|
} catch (PDOException $pdoe) {
|
||||||
throw new SCoreException($pdoe->getMessage()."<p><b>Query:</b> ".$query);
|
throw new SCoreException($pdoe->getMessage()."<p><b>Query:</b> ".$query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
abstract class SCORE {
|
abstract class SCORE
|
||||||
|
{
|
||||||
const AIPK = "SCORE_AIPK";
|
const AIPK = "SCORE_AIPK";
|
||||||
const INET = "SCORE_INET";
|
const INET = "SCORE_INET";
|
||||||
const BOOL_Y = "SCORE_BOOL_Y";
|
const BOOL_Y = "SCORE_BOOL_Y";
|
||||||
|
@ -140,7 +140,7 @@ class Image
|
|||||||
if (!$result) {
|
if (!$result) {
|
||||||
$querylet = Image::build_search_querylet($tag_conditions, $img_conditions);
|
$querylet = Image::build_search_querylet($tag_conditions, $img_conditions);
|
||||||
$querylet->append(new Querylet(" ORDER BY ".(Image::$order_sql ?: "images.".$config->get_string("index_order"))));
|
$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(" LIMIT :limit ", ["limit" => $limit]));
|
||||||
}
|
}
|
||||||
$querylet->append(new Querylet(" OFFSET :offset ", ["offset"=>$start]));
|
$querylet->append(new Querylet(" OFFSET :offset ", ["offset"=>$start]));
|
||||||
@ -228,7 +228,7 @@ class Image
|
|||||||
|
|
||||||
$response = Image::query_accelerator($req);
|
$response = Image::query_accelerator($req);
|
||||||
if ($response) {
|
if ($response) {
|
||||||
$list = implode(",", $response);
|
$list = implode(",", $response);
|
||||||
$result = $database->execute("SELECT * FROM images WHERE id IN ($list) ORDER BY images.id DESC");
|
$result = $database->execute("SELECT * FROM images WHERE id IN ($list) ORDER BY images.id DESC");
|
||||||
} else {
|
} else {
|
||||||
$result = $database->execute("SELECT * FROM images WHERE 1=0 ORDER BY images.id DESC");
|
$result = $database->execute("SELECT * FROM images WHERE 1=0 ORDER BY images.id DESC");
|
||||||
@ -253,19 +253,19 @@ class Image
|
|||||||
|
|
||||||
public static function query_accelerator($req)
|
public static function query_accelerator($req)
|
||||||
{
|
{
|
||||||
global $_tracer;
|
global $_tracer;
|
||||||
$fp = @fsockopen("127.0.0.1", 21212);
|
$fp = @fsockopen("127.0.0.1", 21212);
|
||||||
if (!$fp) {
|
if (!$fp) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
$req_str = json_encode($req);
|
$req_str = json_encode($req);
|
||||||
$_tracer->begin("Accelerator Query", ["req"=>$req_str]);
|
$_tracer->begin("Accelerator Query", ["req"=>$req_str]);
|
||||||
fwrite($fp, $req_str);
|
fwrite($fp, $req_str);
|
||||||
$data = "";
|
$data = "";
|
||||||
while (($buffer = fgets($fp, 4096)) !== false) {
|
while (($buffer = fgets($fp, 4096)) !== false) {
|
||||||
$data .= $buffer;
|
$data .= $buffer;
|
||||||
}
|
}
|
||||||
$_tracer->end();
|
$_tracer->end();
|
||||||
if (!feof($fp)) {
|
if (!feof($fp)) {
|
||||||
die("Error: unexpected fgets() fail in query_accelerator($req_str)\n");
|
die("Error: unexpected fgets() fail in query_accelerator($req_str)\n");
|
||||||
}
|
}
|
||||||
@ -299,7 +299,7 @@ class Image
|
|||||||
["tag"=>$tags[0]]
|
["tag"=>$tags[0]]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if(ext_is_live("Ratings")) {
|
if (ext_is_live("Ratings")) {
|
||||||
$tags[] = "rating:*";
|
$tags[] = "rating:*";
|
||||||
}
|
}
|
||||||
list($tag_conditions, $img_conditions) = self::terms_to_conditions($tags);
|
list($tag_conditions, $img_conditions) = self::terms_to_conditions($tags);
|
||||||
@ -833,10 +833,9 @@ class Image
|
|||||||
$opts = $matches[2];
|
$opts = $matches[2];
|
||||||
$post = $matches[3];
|
$post = $matches[3];
|
||||||
|
|
||||||
if(isset($flexihashes[$opts])) {
|
if (isset($flexihashes[$opts])) {
|
||||||
$flexihash = $flexihashes[$opts];
|
$flexihash = $flexihashes[$opts];
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$flexihash = new Flexihash\Flexihash();
|
$flexihash = new Flexihash\Flexihash();
|
||||||
foreach (explode(",", $opts) as $opt) {
|
foreach (explode(",", $opts) as $opt) {
|
||||||
$parts = explode("=", $opt);
|
$parts = explode("=", $opt);
|
||||||
@ -964,7 +963,7 @@ class Image
|
|||||||
FROM images
|
FROM images
|
||||||
WHERE 1=0
|
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
|
// All wildcard terms that qualify for a single tag can be treated the same as non-wildcards
|
||||||
$positive_tag_id_array[] = $tag_ids[0];
|
$positive_tag_id_array[] = $tag_ids[0];
|
||||||
} else {
|
} else {
|
||||||
@ -981,14 +980,14 @@ class Image
|
|||||||
|
|
||||||
$sql = "";
|
$sql = "";
|
||||||
assert($positive_tag_id_array || $positive_wildcard_id_array || $negative_tag_id_array, @$_GET['q']);
|
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 = [];
|
$inner_joins = [];
|
||||||
if (!empty($positive_tag_id_array)) {
|
if (!empty($positive_tag_id_array)) {
|
||||||
foreach($positive_tag_id_array as $tag) {
|
foreach ($positive_tag_id_array as $tag) {
|
||||||
$inner_joins[] = "= $tag";
|
$inner_joins[] = "= $tag";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!empty($positive_wildcard_id_array)) {
|
if (!empty($positive_wildcard_id_array)) {
|
||||||
foreach ($positive_wildcard_id_array as $tags) {
|
foreach ($positive_wildcard_id_array as $tags) {
|
||||||
$positive_tag_id_list = join(', ', $tags);
|
$positive_tag_id_list = join(', ', $tags);
|
||||||
$inner_joins[] = "IN ($positive_tag_id_list)";
|
$inner_joins[] = "IN ($positive_tag_id_list)";
|
||||||
@ -1002,12 +1001,12 @@ class Image
|
|||||||
$i++;
|
$i++;
|
||||||
$sub_query .= " INNER JOIN image_tags it$i ON it$i.image_id = it.image_id AND it$i.tag_id $inner_join ";
|
$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);
|
$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 .= " 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 ";
|
$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 .= " AND negative.image_id IS NULL";
|
||||||
}
|
}
|
||||||
$sub_query .= " GROUP BY it.image_id ";
|
$sub_query .= " GROUP BY it.image_id ";
|
||||||
@ -1018,7 +1017,7 @@ class Image
|
|||||||
$sub_query
|
$sub_query
|
||||||
) a on a.image_id = images.id
|
) 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);
|
$negative_tag_id_list = join(', ', $negative_tag_id_array);
|
||||||
$sql = "
|
$sql = "
|
||||||
SELECT images.*
|
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();
|
list($max_width, $max_height) = get_thumbnail_max_size_scaled();
|
||||||
} else {
|
} else {
|
||||||
$max_width = $config->get_int(ImageConfig::THUMB_WIDTH);
|
$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 {
|
} else {
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_scaled_by_aspect_ratio(int $original_width, int $original_height, int $max_width, int $max_height) : array
|
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;
|
global $config;
|
||||||
|
|
||||||
$inname = warehouse_path(Image::IMAGE_DIR, $hash);
|
$inname = warehouse_path(Image::IMAGE_DIR, $hash);
|
||||||
$outname = warehouse_path(Image::THUMBNAIL_DIR, $hash);
|
$outname = warehouse_path(Image::THUMBNAIL_DIR, $hash);
|
||||||
$tsize = get_thumbnail_max_size_scaled();
|
$tsize = get_thumbnail_max_size_scaled();
|
||||||
|
|
||||||
if(empty($engine)) {
|
if (empty($engine)) {
|
||||||
$engine = $config->get_string(ImageConfig::THUMB_ENGINE);
|
$engine = $config->get_string(ImageConfig::THUMB_ENGINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
$output_format = $config->get_string(ImageConfig::THUMB_TYPE);
|
$output_format = $config->get_string(ImageConfig::THUMB_TYPE);
|
||||||
if($output_format=="webp") {
|
if ($output_format=="webp") {
|
||||||
$output_format = Media::WEBP_LOSSY;
|
$output_format = Media::WEBP_LOSSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,14 +206,14 @@ function format_milliseconds(int $input): string
|
|||||||
|
|
||||||
$remainder = floor($input / 1000);
|
$remainder = floor($input / 1000);
|
||||||
|
|
||||||
foreach (TIME_UNITS AS $unit=>$conversion) {
|
foreach (TIME_UNITS as $unit=>$conversion) {
|
||||||
$count = $remainder % $conversion;
|
$count = $remainder % $conversion;
|
||||||
$remainder = floor($remainder / $conversion);
|
$remainder = floor($remainder / $conversion);
|
||||||
if($count==0&&$remainder<1) {
|
if ($count==0&&$remainder<1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$output = "$count".$unit." ".$output;
|
$output = "$count".$unit." ".$output;
|
||||||
}
|
}
|
||||||
|
|
||||||
return trim($output);
|
return trim($output);
|
||||||
}
|
}
|
||||||
|
@ -307,14 +307,14 @@ class Page
|
|||||||
$active_link = null;
|
$active_link = null;
|
||||||
// To save on event calls, we check if one of the top-level links has already been marked as active
|
// 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) {
|
foreach ($nav_links as $link) {
|
||||||
if($link->active===true) {
|
if ($link->active===true) {
|
||||||
$active_link = $link;
|
$active_link = $link;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sub_links = null;
|
$sub_links = null;
|
||||||
// If one is, we just query for sub-menu options under that one tab
|
// 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);
|
$psnbe = new PageSubNavBuildingEvent($active_link->name);
|
||||||
send_event($psnbe);
|
send_event($psnbe);
|
||||||
$sub_links = $psnbe->links;
|
$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
|
// Now we check for a current link so we can identify the sub-links to show
|
||||||
foreach ($psnbe->links as $sub_link) {
|
foreach ($psnbe->links as $sub_link) {
|
||||||
if($sub_link->active===true) {
|
if ($sub_link->active===true) {
|
||||||
$sub_links = $psnbe->links;
|
$sub_links = $psnbe->links;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If the active link has been detected, we break out
|
// If the active link has been detected, we break out
|
||||||
if($sub_links!==null) {
|
if ($sub_links!==null) {
|
||||||
$link->active = true;
|
$link->active = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -372,7 +372,6 @@ class Page
|
|||||||
header('Accept-Ranges: bytes');
|
header('Accept-Ranges: bytes');
|
||||||
|
|
||||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||||
|
|
||||||
$c_start = $start;
|
$c_start = $start;
|
||||||
$c_end = $end;
|
$c_end = $end;
|
||||||
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
||||||
@ -418,8 +417,9 @@ class Page
|
|||||||
// After flush, we can tell if the client browser has disconnected.
|
// 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
|
// 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.
|
// then we can just stop and not waste any more resources or bandwidth.
|
||||||
if (connection_status() != 0)
|
if (connection_status() != 0) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
fclose($fp);
|
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)
|
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 $order;
|
||||||
public $active = false;
|
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;
|
global $config;
|
||||||
|
|
||||||
@ -561,7 +561,7 @@ class NavLink
|
|||||||
$this->link = $link;
|
$this->link = $link;
|
||||||
$this->description = $description;
|
$this->description = $description;
|
||||||
$this->order = $order;
|
$this->order = $order;
|
||||||
if($active==null) {
|
if ($active==null) {
|
||||||
$query = ltrim(_get_query(), "/");
|
$query = ltrim(_get_query(), "/");
|
||||||
if ($query === "") {
|
if ($query === "") {
|
||||||
// This indicates the front page, so we check what's set as the front page
|
// This indicates the front page, so we check what's set as the front page
|
||||||
@ -572,15 +572,14 @@ class NavLink
|
|||||||
} else {
|
} else {
|
||||||
$this->active = self::is_active([$link->page], $front_page);
|
$this->active = self::is_active([$link->page], $front_page);
|
||||||
}
|
}
|
||||||
} elseif($query===$link->page) {
|
} elseif ($query===$link->page) {
|
||||||
$this->active = true;
|
$this->active = true;
|
||||||
}else {
|
} else {
|
||||||
$this->active = self::is_active([$link->page]);
|
$this->active = self::is_active([$link->page]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->active = $active;
|
$this->active = $active;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function is_active(array $pages_matched, string $url = null): bool
|
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 VIEW_TRASH = "view_trash";
|
||||||
|
|
||||||
public const PERFORM_BULK_ACTIONS = "perform_bulk_actions";
|
public const PERFORM_BULK_ACTIONS = "perform_bulk_actions";
|
||||||
|
}
|
||||||
}
|
|
||||||
|
@ -759,7 +759,7 @@ function validate_input(array $inputs): array
|
|||||||
*/
|
*/
|
||||||
function sanitize_path(string $path): string
|
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 = "";
|
$output = "";
|
||||||
foreach ($paths as $path) {
|
foreach ($paths as $path) {
|
||||||
if(empty($path)) {
|
if (empty($path)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$path = sanitize_path($path);
|
$path = sanitize_path($path);
|
||||||
if(empty($output)) {
|
if (empty($output)) {
|
||||||
$output = $path;
|
$output = $path;
|
||||||
} else {
|
} else {
|
||||||
$output = rtrim($output, DIRECTORY_SEPARATOR);
|
$output = rtrim($output, DIRECTORY_SEPARATOR);
|
||||||
@ -790,8 +790,8 @@ function join_path(string ...$paths): string
|
|||||||
*/
|
*/
|
||||||
function iterator_map(callable $callback, iterator $iter): Generator
|
function iterator_map(callable $callback, iterator $iter): Generator
|
||||||
{
|
{
|
||||||
foreach($iter as $i) {
|
foreach ($iter as $i) {
|
||||||
yield call_user_func($callback,$i);
|
yield call_user_func($callback, $i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -801,4 +801,4 @@ function iterator_map(callable $callback, iterator $iter): Generator
|
|||||||
function iterator_map_to_array(callable $callback, iterator $iter): array
|
function iterator_map_to_array(callable $callback, iterator $iter): array
|
||||||
{
|
{
|
||||||
return iterator_to_array(iterator_map($callback, $iter));
|
return iterator_to_array(iterator_map($callback, $iter));
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ function _load_event_listeners(): void
|
|||||||
function _clear_cached_event_listeners(): void
|
function _clear_cached_event_listeners(): void
|
||||||
{
|
{
|
||||||
if (file_exists(data_path("cache/shm_event_listeners.php"))) {
|
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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,21 +118,29 @@ function send_event(Event $event): void
|
|||||||
|
|
||||||
// send_event() is performance sensitive, and with the number
|
// send_event() is performance sensitive, and with the number
|
||||||
// of times tracer gets called the time starts to add up
|
// 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
|
// SHIT: http://bugs.php.net/bug.php?id=35106
|
||||||
$my_event_listeners = $_shm_event_listeners[get_class($event)];
|
$my_event_listeners = $_shm_event_listeners[get_class($event)];
|
||||||
ksort($my_event_listeners);
|
ksort($my_event_listeners);
|
||||||
|
|
||||||
foreach ($my_event_listeners as $listener) {
|
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)) {
|
if (method_exists($listener, $method_name)) {
|
||||||
$listener->$method_name($event);
|
$listener->$method_name($event);
|
||||||
}
|
}
|
||||||
if ($tracer_enabled) $_tracer->end();
|
if ($tracer_enabled) {
|
||||||
if($event->stop_processing===true) {
|
$_tracer->end();
|
||||||
|
}
|
||||||
|
if ($event->stop_processing===true) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_shm_event_count++;
|
$_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()
|
public function test_sanitize_path()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"one",
|
"one",
|
||||||
sanitize_path("one")
|
sanitize_path("one")
|
||||||
@ -88,7 +87,6 @@ class PolyfillsTest extends \PHPUnit\Framework\TestCase
|
|||||||
DIRECTORY_SEPARATOR."one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR,
|
DIRECTORY_SEPARATOR."one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR,
|
||||||
sanitize_path("\\/one/\\/\\/two\\/")
|
sanitize_path("\\/one/\\/\\/two\\/")
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_join_path()
|
public function test_join_path()
|
||||||
@ -100,22 +98,22 @@ class PolyfillsTest extends \PHPUnit\Framework\TestCase
|
|||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"one".DIRECTORY_SEPARATOR."two",
|
"one".DIRECTORY_SEPARATOR."two",
|
||||||
join_path("one","two")
|
join_path("one", "two")
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
||||||
join_path("one","two","three")
|
join_path("one", "two", "three")
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
"one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three",
|
||||||
join_path("one/two","three")
|
join_path("one/two", "three")
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
DIRECTORY_SEPARATOR."one".DIRECTORY_SEPARATOR."two".DIRECTORY_SEPARATOR."three".DIRECTORY_SEPARATOR,
|
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
|
class UtilTest extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
public function test_warehouse_path()
|
public function test_warehouse_path()
|
||||||
{
|
{
|
||||||
$hash = "7ac19c10d6859415";
|
$hash = "7ac19c10d6859415";
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base",$hash),
|
join_path(DATA_DIR, "base", $hash),
|
||||||
warehouse_path("base",$hash,false, 0)
|
warehouse_path("base", $hash, false, 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a",$hash),
|
join_path(DATA_DIR, "base", "7a", $hash),
|
||||||
warehouse_path("base",$hash,false, 1)
|
warehouse_path("base", $hash, false, 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", $hash),
|
||||||
warehouse_path("base",$hash,false, 2)
|
warehouse_path("base", $hash, false, 2)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", $hash),
|
||||||
warehouse_path("base",$hash,false, 3)
|
warehouse_path("base", $hash, false, 3)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", $hash),
|
||||||
warehouse_path("base",$hash,false, 4)
|
warehouse_path("base", $hash, false, 4)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", $hash),
|
||||||
warehouse_path("base",$hash,false, 5)
|
warehouse_path("base", $hash, false, 5)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", $hash),
|
||||||
warehouse_path("base",$hash,false, 6)
|
warehouse_path("base", $hash, false, 6)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", $hash),
|
||||||
warehouse_path("base",$hash,false, 7)
|
warehouse_path("base", $hash, false, 7)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||||
warehouse_path("base",$hash,false, 8)
|
warehouse_path("base", $hash, false, 8)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||||
warehouse_path("base",$hash,false, 9)
|
warehouse_path("base", $hash, false, 9)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
join_path(DATA_DIR,"base","7a","c1","9c","10","d6","85","94","15",$hash),
|
join_path(DATA_DIR, "base", "7a", "c1", "9c", "10", "d6", "85", "94", "15", $hash),
|
||||||
warehouse_path("base",$hash,false, 10)
|
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];
|
$dirs =[DATA_DIR, $base];
|
||||||
$splits = min($splits, strlen($hash) / 2);
|
$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[] = substr($hash, $i * 2, 2);
|
||||||
}
|
}
|
||||||
$dirs[] = $hash;
|
$dirs[] = $hash;
|
||||||
@ -343,7 +343,7 @@ function join_url(string $base, string ...$paths)
|
|||||||
{
|
{
|
||||||
$output = $base;
|
$output = $base;
|
||||||
foreach ($paths as $path) {
|
foreach ($paths as $path) {
|
||||||
$output = rtrim($output,"/");
|
$output = rtrim($output, "/");
|
||||||
$path = ltrim($path, "/");
|
$path = ltrim($path, "/");
|
||||||
$output .= "/".$path;
|
$output .= "/".$path;
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ class AdminPage extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::MANAGE_ADMINTOOLS)) {
|
if ($user->can(Permissions::MANAGE_ADMINTOOLS)) {
|
||||||
$event->add_nav_link("admin", new Link('admin'), "Board Admin");
|
$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 .= "<input type='submit' value='Set Tag Case'>";
|
||||||
$html .= "</form>\n";
|
$html .= "</form>\n";
|
||||||
$page->add_block(new Block("Set Tag Case", $html));
|
$page->add_block(new Block("Set Tag Case", $html));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dbq_html($terms)
|
public function dbq_html($terms)
|
||||||
{
|
{
|
||||||
if(ext_is_live("Trash")) {
|
if (ext_is_live("Trash")) {
|
||||||
$warning = "This delete method will bypass the trash<br/>";
|
$warning = "This delete method will bypass the trash<br/>";
|
||||||
}
|
}
|
||||||
if (class_exists("ImageBan")) {
|
if (class_exists("ImageBan")) {
|
||||||
@ -75,6 +74,4 @@ class AdminPageTheme extends Themelet
|
|||||||
";
|
";
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ class AliasEditor extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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"]));
|
$event->add_nav_link("aliases", new Link('alias/list'), "Aliases", NavLink::is_active(["alias"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ class Artists extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Artist";
|
$block->header = "Artist";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
|
@ -38,8 +38,8 @@ class AutoComplete extends Extension
|
|||||||
//$limit = 0;
|
//$limit = 0;
|
||||||
$cache_key = "autocomplete-$s";
|
$cache_key = "autocomplete-$s";
|
||||||
$limitSQL = "";
|
$limitSQL = "";
|
||||||
$s = str_replace('_','\_', $s);
|
$s = str_replace('_', '\_', $s);
|
||||||
$s = str_replace('%','\%', $s);
|
$s = str_replace('%', '\%', $s);
|
||||||
$SQLarr = ["search"=>"$s%"]; #, "cat_search"=>"%:$s%"];
|
$SQLarr = ["search"=>"$s%"]; #, "cat_search"=>"%:$s%"];
|
||||||
if (isset($_GET["limit"]) && $_GET["limit"] !== 0) {
|
if (isset($_GET["limit"]) && $_GET["limit"] !== 0) {
|
||||||
$limitSQL = "LIMIT :limit";
|
$limitSQL = "LIMIT :limit";
|
||||||
|
@ -29,7 +29,7 @@ class Blocks extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::MANAGE_BLOCKS)) {
|
if ($user->can(Permissions::MANAGE_BLOCKS)) {
|
||||||
$event->add_nav_link("blocks", new Link('blocks/list'), "Blocks Editor");
|
$event->add_nav_link("blocks", new Link('blocks/list'), "Blocks Editor");
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class Blotter extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->is_admin()) {
|
if ($user->is_admin()) {
|
||||||
$event->add_nav_link("blotter", new Link('blotter/editor'), "Blotter Editor");
|
$event->add_nav_link("blotter", new Link('blotter/editor'), "Blotter Editor");
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,10 @@ class BulkActionBlockBuildingEvent extends Event
|
|||||||
$block = "";
|
$block = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($access_key)) {
|
if (!empty($access_key)) {
|
||||||
assert(strlen($access_key)==1);
|
assert(strlen($access_key)==1);
|
||||||
foreach ($this->actions as $existing) {
|
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");
|
throw new SCoreException("Access key $access_key is already in use");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,18 +90,18 @@ class BulkActions extends Extension
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
||||||
|
|
||||||
$event->add_action(
|
$event->add_action(
|
||||||
"bulk_tag",
|
"bulk_tag",
|
||||||
"Tag",
|
"Tag",
|
||||||
"t",
|
"t",
|
||||||
"",
|
"",
|
||||||
$this->theme->render_tag_input(),
|
$this->theme->render_tag_input(),
|
||||||
10);
|
10
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_SOURCE)) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ class BulkActions extends Extension
|
|||||||
foreach ($data as $id) {
|
foreach ($data as $id) {
|
||||||
if (is_numeric($id)) {
|
if (is_numeric($id)) {
|
||||||
$image = Image::by_id($id);
|
$image = Image::by_id($id);
|
||||||
if($image!=null) {
|
if ($image!=null) {
|
||||||
yield $image;
|
yield $image;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -246,10 +246,10 @@ class BulkActions extends Extension
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($items as $image) {
|
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)) {
|
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_merge($pos_tag_array, $img_tags);
|
||||||
$img_tags = array_diff($img_tags, $neg_tag_array);
|
$img_tags = array_diff($img_tags, $neg_tag_array);
|
||||||
|
@ -166,7 +166,7 @@ class CommentList extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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_list", new Link('comment/list'), "All");
|
||||||
$event->add_nav_link("comment_help", new Link('ext_doc/comment'), "Help");
|
$event->add_nav_link("comment_help", new Link('ext_doc/comment'), "Help");
|
||||||
}
|
}
|
||||||
@ -368,7 +368,7 @@ class CommentList extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Comments";
|
$block->header = "Comments";
|
||||||
$block->body = $this->theme->get_help_html();
|
$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>
|
<p>Returns images that have been commented on by user 123. </p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ class ET extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::VIEW_SYSINTO)) {
|
if ($user->can(Permissions::VIEW_SYSINTO)) {
|
||||||
$event->add_nav_link("system_info", new Link('system_info'), "System Info", null, 10);
|
$event->add_nav_link("system_info", new Link('system_info'), "System Info", null, 10);
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ class ExtManager extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::MANAGE_EXTENSION_LIST)) {
|
if ($user->can(Permissions::MANAGE_EXTENSION_LIST)) {
|
||||||
$event->add_nav_link("ext_manager", new Link('ext_manager'), "Extension Manager");
|
$event->add_nav_link("ext_manager", new Link('ext_manager'), "Extension Manager");
|
||||||
} else {
|
} else {
|
||||||
|
@ -157,7 +157,7 @@ class Favorites extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Favorites";
|
$block->header = "Favorites";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -168,11 +168,11 @@ class Favorites extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
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");
|
$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)) {
|
if ($user->can(Permissions::MANAGE_ADMINTOOLS)) {
|
||||||
$username = url_escape($user->name);
|
$username = url_escape($user->name);
|
||||||
$event->add_nav_link("favorites", new Link("post/list/favorited_by=$username/1"), "My Favorites");
|
$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>
|
<p>Returns images that have been favorited by user 123. </p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
class FlashFileHandler extends DataHandlerExtension
|
class FlashFileHandler extends DataHandlerExtension
|
||||||
{
|
{
|
||||||
|
|
||||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||||
{
|
{
|
||||||
switch ($event->ext) {
|
switch ($event->ext) {
|
||||||
|
@ -12,7 +12,7 @@ class IcoFileHandler extends DataHandlerExtension
|
|||||||
|
|
||||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
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->lossless = true;
|
||||||
$event->video = false;
|
$event->video = false;
|
||||||
$event->audio = false;
|
$event->audio = false;
|
||||||
|
@ -17,7 +17,6 @@ class MP3FileHandler extends DataHandlerExtension
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// TODO: Buff out audio format support, length scanning
|
// TODO: Buff out audio format support, length scanning
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function create_thumb(string $hash, string $type): bool
|
protected function create_thumb(string $hash, string $type): bool
|
||||||
|
@ -13,14 +13,14 @@ class PixelFileHandler extends DataHandlerExtension
|
|||||||
|
|
||||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||||
{
|
{
|
||||||
if(in_array($event->ext, Media::LOSSLESS_FORMATS)) {
|
if (in_array($event->ext, Media::LOSSLESS_FORMATS)) {
|
||||||
$event->lossless = true;
|
$event->lossless = true;
|
||||||
} elseif($event->ext=="webp") {
|
} elseif ($event->ext=="webp") {
|
||||||
$event->lossless = Media::is_lossless_webp($event->file_name);
|
$event->lossless = Media::is_lossless_webp($event->file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(in_array($event->ext,self::SUPPORTED_EXTENSIONS)) {
|
if (in_array($event->ext, self::SUPPORTED_EXTENSIONS)) {
|
||||||
if($event->lossless==null) {
|
if ($event->lossless==null) {
|
||||||
$event->lossless = false;
|
$event->lossless = false;
|
||||||
}
|
}
|
||||||
$event->audio = false;
|
$event->audio = false;
|
||||||
@ -117,5 +117,4 @@ class PixelFileHandler extends DataHandlerExtension
|
|||||||
</form>
|
</form>
|
||||||
", 20);
|
", 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ use enshrined\svgSanitize\Sanitizer;
|
|||||||
|
|
||||||
class SVGFileHandler extends DataHandlerExtension
|
class SVGFileHandler extends DataHandlerExtension
|
||||||
{
|
{
|
||||||
|
|
||||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||||
{
|
{
|
||||||
switch ($event->ext) {
|
switch ($event->ext) {
|
||||||
|
@ -50,19 +50,19 @@ class VideoFileHandler extends DataHandlerExtension
|
|||||||
|
|
||||||
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
public function onMediaCheckProperties(MediaCheckPropertiesEvent $event)
|
||||||
{
|
{
|
||||||
if(in_array($event->ext, self::SUPPORTED_EXT)) {
|
if (in_array($event->ext, self::SUPPORTED_EXT)) {
|
||||||
$event->video = true;
|
$event->video = true;
|
||||||
try {
|
try {
|
||||||
$data = Media::get_ffprobe_data($event->file_name);
|
$data = Media::get_ffprobe_data($event->file_name);
|
||||||
|
|
||||||
if(is_array($data)) {
|
if (is_array($data)) {
|
||||||
if(array_key_exists("streams", $data)) {
|
if (array_key_exists("streams", $data)) {
|
||||||
$video = false;
|
$video = false;
|
||||||
$audio = true;
|
$audio = true;
|
||||||
$streams = $data["streams"];
|
$streams = $data["streams"];
|
||||||
if (is_array($streams)) {
|
if (is_array($streams)) {
|
||||||
foreach ($streams as $stream) {
|
foreach ($streams as $stream) {
|
||||||
if(is_array($stream)) {
|
if (is_array($stream)) {
|
||||||
if (array_key_exists("codec_type", $stream)) {
|
if (array_key_exists("codec_type", $stream)) {
|
||||||
$type = $stream["codec_type"];
|
$type = $stream["codec_type"];
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
@ -82,22 +82,20 @@ class VideoFileHandler extends DataHandlerExtension
|
|||||||
&& is_numeric($stream["height"]) && intval($stream["height"]) > ($event->height) ?? 0) {
|
&& is_numeric($stream["height"]) && intval($stream["height"]) > ($event->height) ?? 0) {
|
||||||
$event->height = intval($stream["height"]);
|
$event->height = intval($stream["height"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$event->video = $video;
|
$event->video = $video;
|
||||||
$event->audio = $audio;
|
$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"];
|
$format = $data["format"];
|
||||||
if(array_key_exists("duration", $format) && is_numeric($format["duration"])) {
|
if (array_key_exists("duration", $format) && is_numeric($format["duration"])) {
|
||||||
$event->length = floor(floatval($format["duration"]) * 1000);
|
$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');
|
$player = make_link('vendor/bower-asset/mediaelement/build/flashmediaelement.swf');
|
||||||
|
|
||||||
$width="auto";
|
$width="auto";
|
||||||
if($image->width>1) {
|
if ($image->width>1) {
|
||||||
$width = $image->width."px";
|
$width = $image->width."px";
|
||||||
}
|
}
|
||||||
$height="auto";
|
$height="auto";
|
||||||
if($image->height>1) {
|
if ($image->height>1) {
|
||||||
$height = $image->height."px";
|
$height = $image->height."px";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ class HelpPageListBuildingEvent extends Event
|
|||||||
{
|
{
|
||||||
$this->pages[$key] = $name;
|
$this->pages[$key] = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class HelpPageBuildingEvent extends Event
|
class HelpPageBuildingEvent extends Event
|
||||||
@ -27,10 +26,9 @@ class HelpPageBuildingEvent extends Event
|
|||||||
$this->key = $key;
|
$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"] = [];
|
||||||
}
|
}
|
||||||
$this->blocks["$position"][] = $block;
|
$this->blocks["$position"][] = $block;
|
||||||
@ -55,7 +53,7 @@ class HelpPages extends Extension
|
|||||||
} else {
|
} else {
|
||||||
$name = $event->get_arg(0);
|
$name = $event->get_arg(0);
|
||||||
$title = $name;
|
$title = $name;
|
||||||
if(array_key_exists($name, $e->pages)) {
|
if (array_key_exists($name, $e->pages)) {
|
||||||
$title = $e->pages[$name];
|
$title = $e->pages[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +64,7 @@ class HelpPages extends Extension
|
|||||||
asort($hpbe->blocks);
|
asort($hpbe->blocks);
|
||||||
|
|
||||||
foreach ($hpbe->blocks as $key=>$value) {
|
foreach ($hpbe->blocks as $key=>$value) {
|
||||||
foreach($value as $block) {
|
foreach ($value as $block) {
|
||||||
$page->add_block($block);
|
$page->add_block($block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,6 +87,4 @@ class HelpPages extends Extension
|
|||||||
global $user;
|
global $user;
|
||||||
$event->add_link("Help", make_link("help"));
|
$event->add_link("Help", make_link("help"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
class HelpPagesTheme extends Themelet
|
class HelpPagesTheme extends Themelet
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display_list_page(array $pages)
|
public function display_list_page(array $pages)
|
||||||
{
|
{
|
||||||
global $page;
|
global $page;
|
||||||
@ -27,5 +26,4 @@ class HelpPagesTheme extends Themelet
|
|||||||
$page->set_title("Help - $title");
|
$page->set_title("Help - $title");
|
||||||
$page->set_heading("Help - $title");
|
$page->set_heading("Help - $title");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
abstract class ImageConfig {
|
abstract class ImageConfig
|
||||||
|
{
|
||||||
const THUMB_ENGINE = 'thumb_engine';
|
const THUMB_ENGINE = 'thumb_engine';
|
||||||
const THUMB_WIDTH = 'thumb_width';
|
const THUMB_WIDTH = 'thumb_width';
|
||||||
const THUMB_HEIGHT = 'thumb_height';
|
const THUMB_HEIGHT = 'thumb_height';
|
||||||
@ -26,7 +27,6 @@ abstract class ImageConfig {
|
|||||||
|
|
||||||
const COLLISION_MERGE = 'merge';
|
const COLLISION_MERGE = 'merge';
|
||||||
const COLLISION_ERROR = 'error';
|
const COLLISION_ERROR = 'error';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,7 +34,6 @@ abstract class ImageConfig {
|
|||||||
*/
|
*/
|
||||||
class ImageIO extends Extension
|
class ImageIO extends Extension
|
||||||
{
|
{
|
||||||
|
|
||||||
const COLLISION_OPTIONS = ['Error'=>ImageConfig::COLLISION_ERROR, 'Merge'=>ImageConfig::COLLISION_MERGE];
|
const COLLISION_OPTIONS = ['Error'=>ImageConfig::COLLISION_ERROR, 'Merge'=>ImageConfig::COLLISION_MERGE];
|
||||||
|
|
||||||
const EXIF_READ_FUNCTION = "exif_read_data";
|
const EXIF_READ_FUNCTION = "exif_read_data";
|
||||||
@ -267,10 +266,9 @@ class ImageIO extends Extension
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Media::update_image_media_properties($image->hash, strtolower($image->ext));
|
Media::update_image_media_properties($image->hash, strtolower($image->ext));
|
||||||
} catch(MediaException $e) {
|
} catch (MediaException $e) {
|
||||||
log_warning("add_image","Error while running update_image_media_properties: ".$e->getMessage());
|
log_warning("add_image", "Error while running update_image_media_properties: ".$e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// }}} end add
|
// }}} end add
|
||||||
|
|
||||||
@ -349,7 +347,7 @@ class ImageIO extends Extension
|
|||||||
|
|
||||||
$duplicate = Image::by_hash($image->hash);
|
$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> " .
|
$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);
|
"already has hash {$image->hash}:<p>" . $this->theme->build_thumb_html($duplicate);
|
||||||
throw new ImageReplaceException($error);
|
throw new ImageReplaceException($error);
|
||||||
@ -388,8 +386,8 @@ class ImageIO extends Extension
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Media::update_image_media_properties($image->hash, $image->ext);
|
Media::update_image_media_properties($image->hash, $image->ext);
|
||||||
} catch(MediaException $e) {
|
} catch (MediaException $e) {
|
||||||
log_warning("image_replace","Error while running update_image_media_properties: ".$e->getMessage());
|
log_warning("image_replace", "Error while running update_image_media_properties: ".$e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate new thumbnail */
|
/* Generate new thumbnail */
|
||||||
|
@ -106,7 +106,7 @@ class ImageBan extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::BAN_IMAGE)) {
|
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"]));
|
$event->add_nav_link("image_bans", new Link('image_hash_ban/list/1'), "Image Bans", NavLink::is_active(["image_hash_ban"]));
|
||||||
}
|
}
|
||||||
|
@ -262,10 +262,13 @@ class Index extends Extension
|
|||||||
if (SPEED_HAX) {
|
if (SPEED_HAX) {
|
||||||
if (!$user->can("big_search")) {
|
if (!$user->can("big_search")) {
|
||||||
$fast_page_limit = 500;
|
$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) {
|
if ($page_number > $fast_page_limit) {
|
||||||
$this->theme->display_error(
|
$this->theme->display_error(
|
||||||
404, "Search limit hit",
|
404,
|
||||||
|
"Search limit hit",
|
||||||
"Only $fast_page_limit pages of results are searchable - " .
|
"Only $fast_page_limit pages of results are searchable - " .
|
||||||
"if you want to find older results, use more specific search terms"
|
"if you want to find older results, use more specific search terms"
|
||||||
);
|
);
|
||||||
@ -334,19 +337,19 @@ class Index extends Extension
|
|||||||
|
|
||||||
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
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)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="posts") {
|
if ($event->parent=="posts") {
|
||||||
$event->add_nav_link("posts_all", new Link('post/list'), "All");
|
$event->add_nav_link("posts_all", new Link('post/list'), "All");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "General";
|
$block->header = "General";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
|
@ -339,6 +339,5 @@ and of course start organising your images :-)
|
|||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ class IPBan extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::BAN_IP)) {
|
if ($user->can(Permissions::BAN_IP)) {
|
||||||
$event->add_nav_link("ip_bans", new Link('ip_ban/list'), "IP Bans", NavLink::is_active(["ip_ban"]));
|
$event->add_nav_link("ip_bans", new Link('ip_ban/list'), "IP Bans", NavLink::is_active(["ip_ban"]));
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ class LogDatabase extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::VIEW_EVENTLOG)) {
|
if ($user->can(Permissions::VIEW_EVENTLOG)) {
|
||||||
$event->add_nav_link("event_log", new Link('log/view'), "Event Log");
|
$event->add_nav_link("event_log", new Link('log/view'), "Event Log");
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ abstract class MediaConfig
|
|||||||
const CONVERT_PATH = "media_convert_path";
|
const CONVERT_PATH = "media_convert_path";
|
||||||
const VERSION = "ext_media_version";
|
const VERSION = "ext_media_version";
|
||||||
const MEM_LIMIT = 'media_mem_limit';
|
const MEM_LIMIT = 'media_mem_limit';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class MediaEngine
|
abstract class MediaEngine
|
||||||
@ -105,14 +104,19 @@ class MediaResizeEvent extends Event
|
|||||||
public $ignore_aspect_ratio;
|
public $ignore_aspect_ratio;
|
||||||
public $allow_upscale;
|
public $allow_upscale;
|
||||||
|
|
||||||
public function __construct(String $engine, string $input_path, string $input_type, string $output_path,
|
public function __construct(
|
||||||
int $target_width, int $target_height,
|
String $engine,
|
||||||
bool $ignore_aspect_ratio = false,
|
string $input_path,
|
||||||
string $target_format = null,
|
string $input_type,
|
||||||
int $target_quality = 80,
|
string $output_path,
|
||||||
bool $minimize = false,
|
int $target_width,
|
||||||
bool $allow_upscale = true)
|
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));
|
assert(in_array($engine, MediaEngine::ALL));
|
||||||
$this->engine = $engine;
|
$this->engine = $engine;
|
||||||
$this->input_path = $input_path;
|
$this->input_path = $input_path;
|
||||||
@ -144,7 +148,6 @@ class MediaCheckPropertiesEvent extends Event
|
|||||||
$this->file_name = $file_name;
|
$this->file_name = $file_name;
|
||||||
$this->ext = $ext;
|
$this->ext = $ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -193,7 +196,7 @@ class Media extends Extension
|
|||||||
[0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50, 0x56, 0x50, 0x38, 0x4C];
|
[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");
|
return extension_loaded("imagick");
|
||||||
}
|
}
|
||||||
@ -293,7 +296,6 @@ class Media extends Extension
|
|||||||
$sb->end_table();
|
$sb->end_table();
|
||||||
|
|
||||||
$event->panel->add_block($sb);
|
$event->panel->add_block($sb);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onAdminBuilding(AdminBuildingEvent $event)
|
public function onAdminBuilding(AdminBuildingEvent $event)
|
||||||
@ -375,7 +377,8 @@ class Media extends Extension
|
|||||||
$event->target_format,
|
$event->target_format,
|
||||||
$event->ignore_aspect_ratio,
|
$event->ignore_aspect_ratio,
|
||||||
$event->target_quality,
|
$event->target_quality,
|
||||||
$event->allow_upscale);
|
$event->allow_upscale
|
||||||
|
);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MediaEngine::IMAGICK:
|
case MediaEngine::IMAGICK:
|
||||||
@ -391,7 +394,8 @@ class Media extends Extension
|
|||||||
$event->ignore_aspect_ratio,
|
$event->ignore_aspect_ratio,
|
||||||
$event->target_quality,
|
$event->target_quality,
|
||||||
$event->minimize,
|
$event->minimize,
|
||||||
$event->allow_upscale);
|
$event->allow_upscale
|
||||||
|
);
|
||||||
//}
|
//}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -421,7 +425,7 @@ class Media extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Media";
|
$block->header = "Media";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -480,7 +484,8 @@ class Media extends Extension
|
|||||||
"video" => $database->scoresql_value_prepare($mcpe->video),
|
"video" => $database->scoresql_value_prepare($mcpe->video),
|
||||||
"audio" => $database->scoresql_value_prepare($mcpe->audio),
|
"audio" => $database->scoresql_value_prepare($mcpe->audio),
|
||||||
"length" => $mcpe->length
|
"length" => $mcpe->length
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_images(String $ext = null)
|
public function get_images(String $ext = null)
|
||||||
@ -736,11 +741,12 @@ class Media extends Extension
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public static function is_lossless(string $filename, string $format) {
|
public static function is_lossless(string $filename, string $format)
|
||||||
if(in_array($format, self::LOSSLESS_FORMATS)) {
|
{
|
||||||
|
if (in_array($format, self::LOSSLESS_FORMATS)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
switch($format) {
|
switch ($format) {
|
||||||
case "webp":
|
case "webp":
|
||||||
return self::is_lossless_webp($filename);
|
return self::is_lossless_webp($filename);
|
||||||
break;
|
break;
|
||||||
@ -759,8 +765,7 @@ class Media extends Extension
|
|||||||
int $output_quality = 80,
|
int $output_quality = 80,
|
||||||
bool $minimize = false,
|
bool $minimize = false,
|
||||||
bool $allow_upscale = true
|
bool $allow_upscale = true
|
||||||
): void
|
): void {
|
||||||
{
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
$convert = $config->get_string(MediaConfig::CONVERT_PATH);
|
$convert = $config->get_string(MediaConfig::CONVERT_PATH);
|
||||||
@ -773,7 +778,7 @@ class Media extends Extension
|
|||||||
$output_type = $input_type;
|
$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;
|
$output_type = self::WEBP_LOSSLESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,8 +852,7 @@ class Media extends Extension
|
|||||||
bool $ignore_aspect_ratio = false,
|
bool $ignore_aspect_ratio = false,
|
||||||
int $output_quality = 80,
|
int $output_quality = 80,
|
||||||
bool $allow_upscale = true
|
bool $allow_upscale = true
|
||||||
)
|
) {
|
||||||
{
|
|
||||||
$width = $info[0];
|
$width = $info[0];
|
||||||
$height = $info[1];
|
$height = $info[1];
|
||||||
|
|
||||||
@ -949,16 +953,16 @@ class Media extends Extension
|
|||||||
|
|
||||||
// Actually resize the image.
|
// Actually resize the image.
|
||||||
if (imagecopyresampled(
|
if (imagecopyresampled(
|
||||||
$image_resized,
|
$image_resized,
|
||||||
$image,
|
$image,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
$new_width,
|
$new_width,
|
||||||
$new_height,
|
$new_height,
|
||||||
$width,
|
$width,
|
||||||
$height
|
$height
|
||||||
) === false) {
|
) === false) {
|
||||||
throw new MediaException("Unable to copy resized image data to new image");
|
throw new MediaException("Unable to copy resized image data to new image");
|
||||||
}
|
}
|
||||||
@ -1047,7 +1051,6 @@ class Media extends Extension
|
|||||||
} else {
|
} else {
|
||||||
throw new MediaException("Unable to open file for byte check: $file_name");
|
throw new MediaException("Unable to open file for byte check: $file_name");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function is_animated_webp(String $image_filename): bool
|
public static function is_animated_webp(String $image_filename): bool
|
||||||
@ -1091,7 +1094,7 @@ class Media extends Extension
|
|||||||
* @param $format
|
* @param $format
|
||||||
* @return string|null The format name that the media extension will recognize.
|
* @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 ($format == "webp") {
|
||||||
if ($lossless === true) {
|
if ($lossless === true) {
|
||||||
@ -1114,7 +1117,7 @@ class Media extends Extension
|
|||||||
* @param string $filename
|
* @param string $filename
|
||||||
* @return array [width, height]
|
* @return array [width, height]
|
||||||
*/
|
*/
|
||||||
static public function video_size(string $filename): array
|
public static function video_size(string $filename): array
|
||||||
{
|
{
|
||||||
global $config;
|
global $config;
|
||||||
$ffmpeg = $config->get_string(MediaConfig::FFMPEG_PATH);
|
$ffmpeg = $config->get_string(MediaConfig::FFMPEG_PATH);
|
||||||
@ -1139,5 +1142,4 @@ class Media extends Extension
|
|||||||
log_debug('Media', "Getting video size with `$cmd`, returns $output -- $size[0], $size[1]");
|
log_debug('Media', "Getting video size with `$cmd`, returns $output -- $size[0], $size[1]");
|
||||||
return $size;
|
return $size;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,5 @@ class MediaTheme extends Themelet
|
|||||||
</div>
|
</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>
|
<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>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ class NotATag extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="tags") {
|
if ($event->parent==="tags") {
|
||||||
if ($user->can(Permissions::BAN_IMAGE)) {
|
if ($user->can(Permissions::BAN_IMAGE)) {
|
||||||
$event->add_nav_link("untags", new Link('untag/list/1'), "UnTags");
|
$event->add_nav_link("untags", new Link('untag/list/1'), "UnTags");
|
||||||
}
|
}
|
||||||
|
@ -218,7 +218,7 @@ class Notes extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Notes";
|
$block->header = "Notes";
|
||||||
$block->body = $this->theme->get_help_html();
|
$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>
|
<p>Returns images with note(s) by user 123.</p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -230,7 +230,7 @@ class NumericScore extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Numeric Score";
|
$block->header = "Numeric Score";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -306,11 +306,10 @@ class NumericScore extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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_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_month", new Link('popular_by_month'), "Popular by Month");
|
||||||
$event->add_nav_link("numeric_score_year", new Link('popular_by_year'), "Popular by Year");
|
$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>
|
<p>Sorts the search results by score, ascending.</p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ class PrivMsg extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="user") {
|
if ($event->parent==="user") {
|
||||||
if (!$user->is_anonymous()) {
|
if (!$user->is_anonymous()) {
|
||||||
$count = $this->count_pms($user);
|
$count = $this->count_pms($user);
|
||||||
$h_count = $count > 0 ? " <span class='unread'>($count)</span>" : "";
|
$h_count = $count > 0 ? " <span class='unread'>($count)</span>" : "";
|
||||||
|
@ -46,7 +46,6 @@ class PoolAddPostsEvent extends Event
|
|||||||
$this->pool_id = $pool_id;
|
$this->pool_id = $pool_id;
|
||||||
$this->posts = $posts;
|
$this->posts = $posts;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PoolCreationEvent extends Event
|
class PoolCreationEvent extends Event
|
||||||
@ -67,7 +66,6 @@ class PoolCreationEvent extends Event
|
|||||||
$this->public = $public;
|
$this->public = $public;
|
||||||
$this->description = $description;
|
$this->description = $description;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Pools extends Extension
|
class Pools extends Extension
|
||||||
@ -152,7 +150,7 @@ class Pools extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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_list", new Link('pool/list'), "List");
|
||||||
$event->add_nav_link("pool_new", new Link('pool/new'), "Create");
|
$event->add_nav_link("pool_new", new Link('pool/new'), "Create");
|
||||||
$event->add_nav_link("pool_updated", new Link('pool/updated'), "Changes");
|
$event->add_nav_link("pool_updated", new Link('pool/updated'), "Changes");
|
||||||
@ -198,7 +196,8 @@ class Pools extends Extension
|
|||||||
$title,
|
$title,
|
||||||
$user,
|
$user,
|
||||||
$_POST["public"] === "Y",
|
$_POST["public"] === "Y",
|
||||||
$_POST["description"]);
|
$_POST["description"]
|
||||||
|
);
|
||||||
|
|
||||||
send_event($event);
|
send_event($event);
|
||||||
$page->set_mode(PageMode::REDIRECT);
|
$page->set_mode(PageMode::REDIRECT);
|
||||||
@ -374,7 +373,7 @@ class Pools extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Pools";
|
$block->header = "Pools";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -443,8 +442,8 @@ class Pools extends Extension
|
|||||||
$pools = $database->get_all("SELECT * FROM pools ORDER BY title ");
|
$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_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_new", "Create Pool", "", "", $this->theme->get_bulk_pool_input($event->search_terms));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onBulkAction(BulkActionEvent $event)
|
public function onBulkAction(BulkActionEvent $event)
|
||||||
@ -461,7 +460,8 @@ class Pools extends Extension
|
|||||||
|
|
||||||
if ($this->have_permission($user, $pool)) {
|
if ($this->have_permission($user, $pool)) {
|
||||||
send_event(
|
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;
|
break;
|
||||||
case "bulk_pool_add_new":
|
case "bulk_pool_add_new":
|
||||||
@ -809,7 +809,7 @@ class Pools extends Extension
|
|||||||
if (ext_is_live("Ratings")) {
|
if (ext_is_live("Ratings")) {
|
||||||
$query .= "AND i.rating IN (".Ratings::privs_to_sql(Ratings::get_user_class_privs($user)).")";
|
$query .= "AND i.rating IN (".Ratings::privs_to_sql(Ratings::get_user_class_privs($user)).")";
|
||||||
}
|
}
|
||||||
if(ext_is_live("trash")) {
|
if (ext_is_live("trash")) {
|
||||||
$query .= $database->scoreql_to_sql(" AND trash = SCORE_BOOL_N ");
|
$query .= $database->scoreql_to_sql(" AND trash = SCORE_BOOL_N ");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -823,10 +823,10 @@ class Pools extends Extension
|
|||||||
);
|
);
|
||||||
|
|
||||||
$totalPages = ceil($database->get_one(
|
$totalPages = ceil($database->get_one(
|
||||||
"
|
"
|
||||||
SELECT COUNT(*) FROM pool_images p
|
SELECT COUNT(*) FROM pool_images p
|
||||||
$query",
|
$query",
|
||||||
["pid" => $poolID]
|
["pid" => $poolID]
|
||||||
) / $imagesPerPage);
|
) / $imagesPerPage);
|
||||||
|
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ class PoolsTheme extends Themelet
|
|||||||
|
|
||||||
public function get_bulk_pool_input(array $search_terms)
|
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>
|
<p>Returns images in the "swimming pool" pool. Note that the underscore becomes a space</p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,4 +6,4 @@ abstract class PostTitlesConfig
|
|||||||
public const VERSION = "ext_post_titles_version";
|
public const VERSION = "ext_post_titles_version";
|
||||||
public const DEFAULT_TO_FILENAME = "post_titles_default_to_filename";
|
public const DEFAULT_TO_FILENAME = "post_titles_default_to_filename";
|
||||||
public const SHOW_IN_WINDOW_TITLE = "post_titles_show_in_window_title";
|
public const SHOW_IN_WINDOW_TITLE = "post_titles_show_in_window_title";
|
||||||
}
|
}
|
||||||
|
@ -10,4 +10,4 @@ class PostTitleSetEvent extends Event
|
|||||||
$this->image = $image;
|
$this->image = $image;
|
||||||
$this->title = $title;
|
$this->title = $title;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ class PostTitles extends Extension
|
|||||||
{
|
{
|
||||||
global $config;
|
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()));
|
$event->set_title(self::get_title($event->get_image()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,8 +73,8 @@ class PostTitles extends Extension
|
|||||||
{
|
{
|
||||||
$sb = new SetupBlock("Post Titles");
|
$sb = new SetupBlock("Post Titles");
|
||||||
$sb->start_table();
|
$sb->start_table();
|
||||||
$sb->add_bool_option(PostTitlesConfig::DEFAULT_TO_FILENAME,"Default to filename", 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->add_bool_option(PostTitlesConfig::SHOW_IN_WINDOW_TITLE, "Show in window title", true);
|
||||||
$sb->end_table();
|
$sb->end_table();
|
||||||
|
|
||||||
$event->panel->add_block($sb);
|
$event->panel->add_block($sb);
|
||||||
@ -94,9 +94,9 @@ class PostTitles extends Extension
|
|||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
$title = $image->title??"";
|
$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);
|
$info = pathinfo($image->filename);
|
||||||
if(array_key_exists("extension",$info)) {
|
if (array_key_exists("extension", $info)) {
|
||||||
$title = basename($image->filename, '.' . $info['extension']);
|
$title = basename($image->filename, '.' . $info['extension']);
|
||||||
} else {
|
} else {
|
||||||
$title = $image->filename;
|
$title = $image->filename;
|
||||||
|
@ -3,8 +3,6 @@ class PostTitlesTheme extends Themelet
|
|||||||
{
|
{
|
||||||
public function get_title_set_html(string $title, bool $can_set): string
|
public function get_title_set_html(string $title, bool $can_set): string
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
$html = "
|
$html = "
|
||||||
<tr>
|
<tr>
|
||||||
<th>Title</th>
|
<th>Title</th>
|
||||||
|
@ -78,7 +78,7 @@ class RandomImage extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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");
|
$event->add_nav_link("posts_random", new Link('random_image/view'), "Random Image");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ class RandomList extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="posts") {
|
if ($event->parent=="posts") {
|
||||||
$event->add_nav_link("posts_random", new Link('random'), "Shuffle");
|
$event->add_nav_link("posts_random", new Link('random'), "Shuffle");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
global $_shm_ratings;
|
global $_shm_ratings;
|
||||||
$_shm_ratings = [];
|
$_shm_ratings = [];
|
||||||
|
|
||||||
class ImageRating {
|
class ImageRating
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
@ -46,9 +47,9 @@ class ImageRating {
|
|||||||
*/
|
*/
|
||||||
public $order = 0;
|
public $order = 0;
|
||||||
|
|
||||||
public function __construct( string $code, string $name, string $search_term, int $order)
|
public function __construct(string $code, string $name, string $search_term, int $order)
|
||||||
{
|
{
|
||||||
if(strlen($code)!=1) {
|
if (strlen($code)!=1) {
|
||||||
throw new Exception("Rating code must be exactly one character");
|
throw new Exception("Rating code must be exactly one character");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,29 +57,30 @@ class ImageRating {
|
|||||||
$this->code = $code;
|
$this->code = $code;
|
||||||
$this->search_term = $search_term;
|
$this->search_term = $search_term;
|
||||||
$this->order = $order;
|
$this->order = $order;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clear_ratings() {
|
function clear_ratings()
|
||||||
|
{
|
||||||
global $_shm_ratings;
|
global $_shm_ratings;
|
||||||
$keys = array_keys($_shm_ratings);
|
$keys = array_keys($_shm_ratings);
|
||||||
foreach ($keys as $key){
|
foreach ($keys as $key) {
|
||||||
if($key=="?") {
|
if ($key=="?") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
unset($_shm_ratings[$key]);
|
unset($_shm_ratings[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_rating(ImageRating $rating) {
|
function add_rating(ImageRating $rating)
|
||||||
|
{
|
||||||
global $_shm_ratings;
|
global $_shm_ratings;
|
||||||
|
|
||||||
if($rating->code=="?"&&array_key_exists("?",$_shm_ratings)) {
|
if ($rating->code=="?"&&array_key_exists("?", $_shm_ratings)) {
|
||||||
throw new Exception("? is a reserved rating code that cannot be overridden");
|
throw new Exception("? is a reserved rating code that cannot be overridden");
|
||||||
}
|
}
|
||||||
|
|
||||||
if($rating->code!="?"&&in_array(strtolower($rating->search_term), Ratings::UNRATED_KEYWORDS)) {
|
if ($rating->code!="?"&&in_array(strtolower($rating->search_term), Ratings::UNRATED_KEYWORDS)) {
|
||||||
throw new Exception("$rating->search_term is a reserved search term");
|
throw new Exception("$rating->search_term is a reserved search term");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +112,8 @@ class RatingSetEvent extends Event
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RatingsConfig {
|
abstract class RatingsConfig
|
||||||
|
{
|
||||||
const VERSION = "ext_ratings2_version";
|
const VERSION = "ext_ratings2_version";
|
||||||
const USER_DEFAULTS = "ratings_default";
|
const USER_DEFAULTS = "ratings_default";
|
||||||
}
|
}
|
||||||
@ -136,7 +139,7 @@ class Ratings extends Extension
|
|||||||
array_push($search_terms, $rating->search_term);
|
array_push($search_terms, $rating->search_term);
|
||||||
}
|
}
|
||||||
$this->search_regexp = "/^rating[=|:](?:(\*|[" . $codes . "]+)|(" .
|
$this->search_regexp = "/^rating[=|:](?:(\*|[" . $codes . "]+)|(" .
|
||||||
implode("|", $search_terms) . "|".implode("|",self::UNRATED_KEYWORDS)."))$/D";
|
implode("|", $search_terms) . "|".implode("|", self::UNRATED_KEYWORDS)."))$/D";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_priority(): int
|
public function get_priority(): int
|
||||||
@ -160,7 +163,8 @@ class Ratings extends Extension
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onInitUserConfig(InitUserConfigEvent $event) {
|
public function onInitUserConfig(InitUserConfigEvent $event)
|
||||||
|
{
|
||||||
$event->user_config->set_default_array(RatingsConfig::USER_DEFAULTS, self::get_user_class_privs($event->user));
|
$event->user_config->set_default_array(RatingsConfig::USER_DEFAULTS, self::get_user_class_privs($event->user));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,9 +173,12 @@ class Ratings extends Extension
|
|||||||
global $user, $user_config;
|
global $user, $user_config;
|
||||||
|
|
||||||
$event->add__html(
|
$event->add__html(
|
||||||
$this->theme->get_user_options($user,
|
$this->theme->get_user_options(
|
||||||
|
$user,
|
||||||
self::get_user_default_ratings($user),
|
self::get_user_default_ratings($user),
|
||||||
self::get_user_class_privs($user)));
|
self::get_user_class_privs($user)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onSetupBuilding(SetupBuildingEvent $event)
|
public function onSetupBuilding(SetupBuildingEvent $event)
|
||||||
@ -254,7 +261,7 @@ class Ratings extends Extension
|
|||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
|
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Ratings";
|
$block->header = "Ratings";
|
||||||
|
|
||||||
@ -279,7 +286,7 @@ class Ratings extends Extension
|
|||||||
if (preg_match($this->search_regexp, strtolower($event->term), $matches)) {
|
if (preg_match($this->search_regexp, strtolower($event->term), $matches)) {
|
||||||
$ratings = $matches[1] ? $matches[1] : $matches[2][0];
|
$ratings = $matches[1] ? $matches[1] : $matches[2][0];
|
||||||
|
|
||||||
if(count($matches)>2&&in_array($matches[2], self::UNRATED_KEYWORDS)) {
|
if (count($matches)>2&&in_array($matches[2], self::UNRATED_KEYWORDS)) {
|
||||||
$ratings = "?";
|
$ratings = "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,7 +309,7 @@ class Ratings extends Extension
|
|||||||
if (preg_match($this->search_regexp, strtolower($event->term), $matches) && $event->parse) {
|
if (preg_match($this->search_regexp, strtolower($event->term), $matches) && $event->parse) {
|
||||||
$ratings = $matches[1] ? $matches[1] : $matches[2][0];
|
$ratings = $matches[1] ? $matches[1] : $matches[2][0];
|
||||||
|
|
||||||
if(count($matches)>2&&in_array($matches[2], self::UNRATED_KEYWORDS)) {
|
if (count($matches)>2&&in_array($matches[2], self::UNRATED_KEYWORDS)) {
|
||||||
$ratings = "?";
|
$ratings = "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,16 +355,16 @@ class Ratings extends Extension
|
|||||||
switch ($action) {
|
switch ($action) {
|
||||||
case "update_ratings":
|
case "update_ratings":
|
||||||
$event->redirect = true;
|
$event->redirect = true;
|
||||||
if(!array_key_exists("rating_old", $_POST) || empty($_POST["rating_old"])) {
|
if (!array_key_exists("rating_old", $_POST) || empty($_POST["rating_old"])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!array_key_exists("rating_new", $_POST) || empty($_POST["rating_new"])) {
|
if (!array_key_exists("rating_new", $_POST) || empty($_POST["rating_new"])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$old = $_POST["rating_old"];
|
$old = $_POST["rating_old"];
|
||||||
$new = $_POST["rating_new"];
|
$new = $_POST["rating_new"];
|
||||||
|
|
||||||
if($user->can("bulk_edit_image_rating")) {
|
if ($user->can("bulk_edit_image_rating")) {
|
||||||
$database->execute("UPDATE images SET rating = :new WHERE rating = :old", ["new"=>$new, "old"=>$old ]);
|
$database->execute("UPDATE images SET rating = :new WHERE rating = :old", ["new"=>$new, "old"=>$old ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +378,7 @@ class Ratings extends Extension
|
|||||||
global $user;
|
global $user;
|
||||||
|
|
||||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_RATING)) {
|
if ($user->can(Permissions::BULK_EDIT_IMAGE_RATING)) {
|
||||||
$event->add_action("bulk_rate", "Set (R)ating", "r","", $this->theme->get_selection_rater_html(["?"]));
|
$event->add_action("bulk_rate", "Set (R)ating", "r", "", $this->theme->get_selection_rater_html(["?"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +462,6 @@ class Ratings extends Extension
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function get_sorted_ratings(): array
|
public static function get_sorted_ratings(): array
|
||||||
@ -490,10 +496,10 @@ class Ratings extends Extension
|
|||||||
public static function privs_to_sql(array $privs): string
|
public static function privs_to_sql(array $privs): string
|
||||||
{
|
{
|
||||||
$arr = [];
|
$arr = [];
|
||||||
foreach($privs as $i) {
|
foreach ($privs as $i) {
|
||||||
$arr[] = "'" . $i . "'";
|
$arr[] = "'" . $i . "'";
|
||||||
}
|
}
|
||||||
if(sizeof($arr)==0) {
|
if (sizeof($arr)==0) {
|
||||||
return "' '";
|
return "' '";
|
||||||
}
|
}
|
||||||
$set = join(', ', $arr);
|
$set = join(', ', $arr);
|
||||||
@ -504,7 +510,7 @@ class Ratings extends Extension
|
|||||||
{
|
{
|
||||||
global $_shm_ratings;
|
global $_shm_ratings;
|
||||||
|
|
||||||
if(array_key_exists($rating, $_shm_ratings)) {
|
if (array_key_exists($rating, $_shm_ratings)) {
|
||||||
return $_shm_ratings[$rating]->name;
|
return $_shm_ratings[$rating]->name;
|
||||||
}
|
}
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
@ -557,7 +563,7 @@ class Ratings extends Extension
|
|||||||
$config->set_int(RatingsConfig::VERSION, 2);
|
$config->set_int(RatingsConfig::VERSION, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($config->get_int(RatingsConfig::VERSION) < 3) {
|
if ($config->get_int(RatingsConfig::VERSION) < 3) {
|
||||||
$database->Execute("UPDATE images SET rating = 'u' WHERE rating is null");
|
$database->Execute("UPDATE images SET rating = 'u' WHERE rating is null");
|
||||||
switch ($database->get_driver_name()) {
|
switch ($database->get_driver_name()) {
|
||||||
case DatabaseDriver::MYSQL:
|
case DatabaseDriver::MYSQL:
|
||||||
@ -568,20 +574,20 @@ class Ratings extends Extension
|
|||||||
$database->Execute("ALTER TABLE images ALTER COLUMN rating SET NOT NULL");
|
$database->Execute("ALTER TABLE images ALTER COLUMN rating SET NOT NULL");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$config->set_int(RatingsConfig::VERSION, 3);
|
$config->set_int(RatingsConfig::VERSION, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($config->get_int(RatingsConfig::VERSION) < 4) {
|
if ($config->get_int(RatingsConfig::VERSION) < 4) {
|
||||||
$value = $config->get_string("ext_rating_anon_privs");
|
$value = $config->get_string("ext_rating_anon_privs");
|
||||||
if(!empty($value)) {
|
if (!empty($value)) {
|
||||||
$config->set_array("ext_rating_anonymous_privs", str_split($value));
|
$config->set_array("ext_rating_anonymous_privs", str_split($value));
|
||||||
}
|
}
|
||||||
$value = $config->get_string("ext_rating_user_privs");
|
$value = $config->get_string("ext_rating_user_privs");
|
||||||
if(!empty($value)) {
|
if (!empty($value)) {
|
||||||
$config->set_array("ext_rating_user_privs", str_split($value));
|
$config->set_array("ext_rating_user_privs", str_split($value));
|
||||||
}
|
}
|
||||||
$value = $config->get_string("ext_rating_admin_privs");
|
$value = $config->get_string("ext_rating_admin_privs");
|
||||||
if(!empty($value)) {
|
if (!empty($value)) {
|
||||||
$config->set_array("ext_rating_admin_privs", str_split($value));
|
$config->set_array("ext_rating_admin_privs", str_split($value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,9 +30,9 @@ class RatingsTheme extends Themelet
|
|||||||
|
|
||||||
$html = make_form(make_link("admin/update_ratings"))."<table class='form'><tr>
|
$html = make_form(make_link("admin/update_ratings"))."<table class='form'><tr>
|
||||||
<th>Change</th><td><select name='rating_old' required='required'><option></option>";
|
<th>Change</th><td><select name='rating_old' required='required'><option></option>";
|
||||||
foreach ($current_ratings as $key=>$value) {
|
foreach ($current_ratings as $key=>$value) {
|
||||||
$html .= "<option value='$key'>$value</option>";
|
$html .= "<option value='$key'>$value</option>";
|
||||||
}
|
}
|
||||||
$html .= "</select></td></tr>
|
$html .= "</select></td></tr>
|
||||||
<tr><th>To</th><td><select name='rating_new' required='required'><option></option>";
|
<tr><th>To</th><td><select name='rating_new' required='required'><option></option>";
|
||||||
foreach ($available_ratings as $value) {
|
foreach ($available_ratings as $value) {
|
||||||
@ -50,37 +50,38 @@ class RatingsTheme extends Themelet
|
|||||||
// {
|
// {
|
||||||
// global $page;
|
// global $page;
|
||||||
// $html = "
|
// $html = "
|
||||||
// ".make_form(make_link("admin/bulk_rate"))."
|
// ".make_form(make_link("admin/bulk_rate"))."
|
||||||
// <input type='hidden' name='query' value='".html_escape($terms)."'>
|
// <input type='hidden' name='query' value='".html_escape($terms)."'>
|
||||||
// <select name='rating'>
|
// <select name='rating'>
|
||||||
// <option value='s'>Safe</option>
|
// <option value='s'>Safe</option>
|
||||||
// <option value='q'>Questionable</option>
|
// <option value='q'>Questionable</option>
|
||||||
// <option value='e'>Explicit</option>
|
// <option value='e'>Explicit</option>
|
||||||
// <option value='u'>Unrated</option>
|
// <option value='u'>Unrated</option>
|
||||||
// </select>
|
// </select>
|
||||||
// <input type='submit' value='Go'>
|
// <input type='submit' value='Go'>
|
||||||
// </form>
|
// </form>
|
||||||
// ";
|
// ";
|
||||||
// $page->add_block(new Block("List Controls", $html, "left"));
|
// $page->add_block(new Block("List Controls", $html, "left"));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public function get_selection_rater_html(array $selected_options, bool $multiple = false, array $available_options = null) {
|
public function get_selection_rater_html(array $selected_options, bool $multiple = false, array $available_options = null)
|
||||||
|
{
|
||||||
global $_shm_ratings;
|
global $_shm_ratings;
|
||||||
|
|
||||||
$output = "<select name='rating".($multiple ? "[]' multiple='multiple'" : "' ")." >";
|
$output = "<select name='rating".($multiple ? "[]' multiple='multiple'" : "' ")." >";
|
||||||
|
|
||||||
$options = Ratings::get_sorted_ratings();
|
$options = Ratings::get_sorted_ratings();
|
||||||
|
|
||||||
foreach($options as $option) {
|
foreach ($options as $option) {
|
||||||
if($available_options!=null && !in_array($option->code, $available_options)) {
|
if ($available_options!=null && !in_array($option->code, $available_options)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$output .= "<option value='".$option->code."' ".
|
$output .= "<option value='".$option->code."' ".
|
||||||
(in_array($option->code,$selected_options) ? "selected='selected'": "")
|
(in_array($option->code, $selected_options) ? "selected='selected'": "")
|
||||||
.">".$option->name."</option>";
|
.">".$option->name."</option>";
|
||||||
}
|
}
|
||||||
return $output."</select>";
|
return $output."</select>";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_help_html(array $ratings)
|
public function get_help_html(array $ratings)
|
||||||
|
@ -69,7 +69,7 @@ class RegenThumb extends Extension
|
|||||||
global $user;
|
global $user;
|
||||||
|
|
||||||
if ($user->can(Permissions::DELETE_IMAGE)) {
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ class ImageRelationshipSetEvent extends Event
|
|||||||
public $parent_id;
|
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->child_id = $child_id;
|
||||||
$this->parent_id = $parent_id;
|
$this->parent_id = $parent_id;
|
||||||
@ -51,7 +51,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__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) {
|
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 {
|
} else {
|
||||||
$this->remove_parent($event->image->id);
|
$this->remove_parent($event->image->id);
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ class Relationships extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Relationships";
|
$block->header = "Relationships";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -139,15 +139,14 @@ class Relationships extends Extension
|
|||||||
|
|
||||||
$old_parent = $database->get_one("SELECT parent_id FROM images WHERE id = :cid", ["cid"=>$event->child_id]);
|
$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])) {
|
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]);
|
$result = $database->execute("UPDATE images SET parent_id = :pid WHERE id = :cid", ["pid" => $event->parent_id, "cid" => $event->child_id]);
|
||||||
|
|
||||||
if ($result->rowCount() > 0) {
|
if ($result->rowCount() > 0) {
|
||||||
$database->execute("UPDATE images SET has_children = TRUE WHERE id = :pid", ["pid" => $event->parent_id]);
|
$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);
|
$this->set_has_children($old_parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +161,7 @@ class Relationships extends Extension
|
|||||||
$results = $database->get_all_iterable("SELECT * FROM images WHERE parent_id = :pid ", ["pid"=>$image->id]);
|
$results = $database->get_all_iterable("SELECT * FROM images WHERE parent_id = :pid ", ["pid"=>$image->id]);
|
||||||
$output = [];
|
$output = [];
|
||||||
foreach ($results as $result) {
|
foreach ($results as $result) {
|
||||||
if($result["id"]==$omit) {
|
if ($result["id"]==$omit) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$output[] = new Image($result);
|
$output[] = new Image($result);
|
||||||
@ -187,13 +186,11 @@ class Relationships extends Extension
|
|||||||
|
|
||||||
// Doesn't work on pgsql
|
// 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)
|
// $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(
|
$database->execute(
|
||||||
"UPDATE images SET has_children = EXISTS (SELECT 1 FROM images WHERE parent_id = :pid) WHERE id = :pid",
|
"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);
|
$image_3 = Image::by_id($image_id_3);
|
||||||
|
|
||||||
$this->assertNull($image_1->parent_id);
|
$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->assertNull($image_3->parent_id);
|
||||||
$this->assertTrue($image_1->has_children);
|
$this->assertTrue($image_1->has_children);
|
||||||
$this->assertFalse($image_2->has_children);
|
$this->assertFalse($image_2->has_children);
|
||||||
@ -56,7 +56,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||||||
$image_3 = Image::by_id($image_id_3);
|
$image_3 = Image::by_id($image_id_3);
|
||||||
|
|
||||||
$this->assertNull($image_1->parent_id);
|
$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->assertNull($image_3->parent_id);
|
||||||
$this->assertFalse($image_2->has_children);
|
$this->assertFalse($image_2->has_children);
|
||||||
$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);
|
$image_3 = Image::by_id($image_id_3);
|
||||||
|
|
||||||
$this->assertNull($image_1->parent_id);
|
$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->assertNull($image_3->parent_id);
|
||||||
$this->assertTrue($image_1->has_children);
|
$this->assertTrue($image_1->has_children);
|
||||||
$this->assertFalse($image_2->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_2 = Image::by_id($image_id_2);
|
||||||
$image_3 = Image::by_id($image_id_3);
|
$image_3 = Image::by_id($image_id_3);
|
||||||
|
|
||||||
$this->assertEquals($image_id_3,$image_1->parent_id);
|
$this->assertEquals($image_id_3, $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->assertNull($image_3->parent_id);
|
||||||
$this->assertTrue($image_1->has_children);
|
$this->assertTrue($image_1->has_children);
|
||||||
$this->assertFalse($image_2->has_children);
|
$this->assertFalse($image_2->has_children);
|
||||||
@ -175,7 +175,7 @@ class RelationshipTest extends ShimmiePHPUnitTestCase
|
|||||||
$image_3 = Image::by_id($image_id_3);
|
$image_3 = Image::by_id($image_id_3);
|
||||||
|
|
||||||
$this->assertNull($image_1->parent_id);
|
$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->assertNull($image_3->parent_id);
|
||||||
$this->assertTrue($image_1->has_children);
|
$this->assertTrue($image_1->has_children);
|
||||||
$this->assertFalse($image_2->has_children);
|
$this->assertFalse($image_2->has_children);
|
||||||
|
@ -72,6 +72,5 @@ class RelationshipsTheme extends Themelet
|
|||||||
<p>Returns images that have no children.</p>
|
<p>Returns images that have no children.</p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ class ReportImage extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::VIEW_IMAGE_REPORT)) {
|
if ($user->can(Permissions::VIEW_IMAGE_REPORT)) {
|
||||||
$count = $this->count_reported_images();
|
$count = $this->count_reported_images();
|
||||||
$h_count = $count > 0 ? " ($count)" : "";
|
$h_count = $count > 0 ? " ($count)" : "";
|
||||||
|
@ -59,7 +59,7 @@ class ResizeImage extends Extension
|
|||||||
{
|
{
|
||||||
$sb = new SetupBlock("Image Resize");
|
$sb = new SetupBlock("Image Resize");
|
||||||
$sb->start_table();
|
$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::ENABLED, "Allow resizing images: ", true);
|
||||||
$sb->add_bool_option(ResizeConfig::UPLOAD, "Resize on upload: ", true);
|
$sb->add_bool_option(ResizeConfig::UPLOAD, "Resize on upload: ", true);
|
||||||
$sb->end_table();
|
$sb->end_table();
|
||||||
@ -192,7 +192,7 @@ class ResizeImage extends Extension
|
|||||||
$engine = $config->get_string(ResizeConfig::ENGINE);
|
$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");
|
throw new ImageResizeException("Engine $engine cannot resize selected image");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,9 +82,8 @@ EOD;
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="comment") {
|
if ($event->parent=="comment") {
|
||||||
$event->add_nav_link("comment_rss", new Link('rss/comments'), "Feed");
|
$event->add_nav_link("comment_rss", new Link('rss/comments'), "Feed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ class RSS_Images extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="posts") {
|
if ($event->parent=="posts") {
|
||||||
$event->add_nav_link("posts_rss", new Link('rss/images'), "Feed");
|
$event->add_nav_link("posts_rss", new Link('rss/images'), "Feed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,4 +9,4 @@ class SetupConfig
|
|||||||
public const THEME = "theme";
|
public const THEME = "theme";
|
||||||
public const WORD_WRAP = "word_wrap";
|
public const WORD_WRAP = "word_wrap";
|
||||||
public const COMMENT_CAPTCHA = "comment_captcha";
|
public const COMMENT_CAPTCHA = "comment_captcha";
|
||||||
}
|
}
|
||||||
|
@ -142,20 +142,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;
|
global $config;
|
||||||
|
|
||||||
if($table_row) $this->start_table_row();
|
if ($table_row) {
|
||||||
if($table_row) $this->start_table_header_cell();
|
$this->start_table_row();
|
||||||
|
}
|
||||||
|
if ($table_row) {
|
||||||
|
$this->start_table_header_cell();
|
||||||
|
}
|
||||||
if (!is_null($label)) {
|
if (!is_null($label)) {
|
||||||
$this->body .= "<label for='{$name}'>{$label}</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;
|
$this->body .= $html;
|
||||||
if($table_row) $this->end_table_cell();
|
if ($table_row) {
|
||||||
if($table_row) $this->end_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)
|
public function add_text_option(string $name, string $label=null, bool $table_row = false)
|
||||||
@ -187,7 +200,7 @@ class SetupBlock extends Block
|
|||||||
$checked = $config->get_bool($name) ? " checked" : "";
|
$checked = $config->get_bool($name) ? " checked" : "";
|
||||||
|
|
||||||
$html = "";
|
$html = "";
|
||||||
if(!$table_row&&!is_null($label)) {
|
if (!$table_row&&!is_null($label)) {
|
||||||
$html .= "<label for='{$name}'>{$label}</label>";
|
$html .= "<label for='{$name}'>{$label}</label>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +229,6 @@ class SetupBlock extends Block
|
|||||||
$html .= "<input type='hidden' name='_type_$name' value='int'>\n";
|
$html .= "<input type='hidden' name='_type_$name' value='int'>\n";
|
||||||
|
|
||||||
$this->format_option($name, $html, $label, $table_row);
|
$this->format_option($name, $html, $label, $table_row);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add_shorthand_int_option(string $name, string $label=null, bool $table_row = false)
|
public function add_shorthand_int_option(string $name, string $label=null, bool $table_row = false)
|
||||||
@ -414,7 +426,7 @@ class Setup extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::CHANGE_SETTING)) {
|
if ($user->can(Permissions::CHANGE_SETTING)) {
|
||||||
$event->add_nav_link("setup", new Link('setup'), "Board Config", null, 0);
|
$event->add_nav_link("setup", new Link('setup'), "Board Config", null, 0);
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ class Source_History extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
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"]));
|
$event->add_nav_link("source_history", new Link('source_history/all/1'), "Source Changes", NavLink::is_active(["source_history"]));
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,4 @@ class System extends Extension
|
|||||||
{
|
{
|
||||||
$event->add_nav_link("system", new Link('system'), "System");
|
$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 VERSION = "ext_tag_categories_version";
|
||||||
|
|
||||||
public const SPLIT_ON_VIEW = "tag_categories_split_on_view";
|
public const SPLIT_ON_VIEW = "tag_categories_split_on_view";
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,8 @@ class TagCategories extends Extension
|
|||||||
$count = $matches[3];
|
$count = $matches[3];
|
||||||
|
|
||||||
$types = $database->get_col(
|
$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)) {
|
if (in_array($type, $types)) {
|
||||||
$event->add_querylet(
|
$event->add_querylet(
|
||||||
new Querylet($database->scoreql_to_sql("EXISTS (
|
new Querylet($database->scoreql_to_sql("EXISTS (
|
||||||
@ -93,7 +94,7 @@ class TagCategories extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Tag Categories";
|
$block->header = "Tag Categories";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
|
@ -113,6 +113,5 @@ class TagCategoriesTheme extends Themelet
|
|||||||
<p>Can use <, <=, >, >=, or =.</p>
|
<p>Can use <, <=, >, >=, or =.</p>
|
||||||
<p>Category name is not case sensitive, category must exist for search to work.</p>
|
<p>Category name is not case sensitive, category must exist for search to work.</p>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,7 +258,7 @@ class TagEdit extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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");
|
$event->add_nav_link("tags_help", new Link('ext_doc/tag_edit'), "Help");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ class Tag_History extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::BULK_EDIT_IMAGE_TAG)) {
|
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"]));
|
$event->add_nav_link("tag_history", new Link('tag_history/all/1'), "Tag Changes", NavLink::is_active(["tag_history"]));
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ class TagList extends Extension
|
|||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
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_map", new Link('tags/map'), "Map");
|
||||||
$event->add_nav_link("tags_alphabetic", new Link('tags/alphabetic'), "Alphabetic");
|
$event->add_nav_link("tags_alphabetic", new Link('tags/alphabetic'), "Alphabetic");
|
||||||
$event->add_nav_link("tags_popularity", new Link('tags/popularity'), "Popularity");
|
$event->add_nav_link("tags_popularity", new Link('tags/popularity'), "Popularity");
|
||||||
|
@ -76,7 +76,7 @@ class Tips extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->is_admin()) {
|
if ($user->is_admin()) {
|
||||||
$event->add_nav_link("tips", new Link('tips/list'), "Tips Editor");
|
$event->add_nav_link("tips", new Link('tips/list'), "Tips Editor");
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ class TranscodeImage extends Extension
|
|||||||
$sb->start_table();
|
$sb->start_table();
|
||||||
$sb->add_bool_option(TranscodeConfig::ENABLED, "Allow transcoding images: ", true);
|
$sb->add_bool_option(TranscodeConfig::ENABLED, "Allow transcoding images: ", true);
|
||||||
$sb->add_bool_option(TranscodeConfig::UPLOAD, "Transcode on upload: ", 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) {
|
foreach (self::INPUT_FORMATS as $display=>$format) {
|
||||||
if (in_array($format, MediaEngine::INPUT_SUPPORT[$engine])) {
|
if (in_array($format, MediaEngine::INPUT_SUPPORT[$engine])) {
|
||||||
$outputs = $this->get_supported_output_formats($engine, $format);
|
$outputs = $this->get_supported_output_formats($engine, $format);
|
||||||
@ -181,7 +181,7 @@ class TranscodeImage extends Extension
|
|||||||
$engine = $config->get_string(TranscodeConfig::ENGINE);
|
$engine = $config->get_string(TranscodeConfig::ENGINE);
|
||||||
|
|
||||||
if ($user->is_admin()) {
|
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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ class TranscodeImage extends Extension
|
|||||||
|
|
||||||
private function get_supported_output_formats($engine, ?String $omit_format = null, ?bool $lossless = null): array
|
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);
|
$omit_format = Media::normalize_format($omit_format, $lossless);
|
||||||
}
|
}
|
||||||
$output = [];
|
$output = [];
|
||||||
@ -241,7 +241,7 @@ class TranscodeImage extends Extension
|
|||||||
$output[$key] = $value;
|
$output[$key] = $value;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(Media::is_output_supported($engine, $value)
|
if (Media::is_output_supported($engine, $value)
|
||||||
&&(empty($omit_format)||$omit_format!=$value)) {
|
&&(empty($omit_format)||$omit_format!=$value)) {
|
||||||
$output[$key] = $value;
|
$output[$key] = $value;
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,13 @@ class TranscodeImageTheme extends Themelet
|
|||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
$html = "
|
$html = "
|
||||||
".make_form(make_link("transcode/{$image->id}"), 'POST', false, "",
|
".make_form(
|
||||||
"return transcodeSubmit()")."
|
make_link("transcode/{$image->id}"),
|
||||||
|
'POST',
|
||||||
|
false,
|
||||||
|
"",
|
||||||
|
"return transcodeSubmit()"
|
||||||
|
)."
|
||||||
<input type='hidden' name='image_id' value='{$image->id}'>
|
<input type='hidden' name='image_id' value='{$image->id}'>
|
||||||
<input type='hidden' id='image_lossless' name='image_lossless' value='{$image->lossless}'>
|
<input type='hidden' id='image_lossless' name='image_lossless' value='{$image->lossless}'>
|
||||||
".$this->get_transcode_picker_html($options)."
|
".$this->get_transcode_picker_html($options)."
|
||||||
|
@ -14,7 +14,6 @@ abstract class TrashConfig
|
|||||||
|
|
||||||
class Trash extends Extension
|
class Trash extends Extension
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $db_support = [DatabaseDriver::MYSQL, DatabaseDriver::PGSQL];
|
protected $db_support = [DatabaseDriver::MYSQL, DatabaseDriver::PGSQL];
|
||||||
|
|
||||||
public function get_priority(): int
|
public function get_priority(): int
|
||||||
@ -59,7 +58,7 @@ class Trash extends Extension
|
|||||||
{
|
{
|
||||||
global $user, $page;
|
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_mode(PageMode::REDIRECT);
|
||||||
$page->set_redirect(make_link("post/list"));
|
$page->set_redirect(make_link("post/list"));
|
||||||
}
|
}
|
||||||
@ -67,7 +66,7 @@ class Trash extends Extension
|
|||||||
|
|
||||||
public function onImageDeletion(ImageDeletionEvent $event)
|
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);
|
self::set_trash($event->image->id, true);
|
||||||
$event->stop_processing = true;
|
$event->stop_processing = true;
|
||||||
}
|
}
|
||||||
@ -87,7 +86,7 @@ class Trash extends Extension
|
|||||||
|
|
||||||
|
|
||||||
if (preg_match(self::SEARCH_REGEXP, strtolower($event->term), $matches)) {
|
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 ")));
|
$event->add_querylet(new Querylet($database->scoreql_to_sql("trash = SCORE_BOOL_Y ")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,8 +95,8 @@ class Trash extends Extension
|
|||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
if($user->can(Permissions::VIEW_TRASH)) {
|
if ($user->can(Permissions::VIEW_TRASH)) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Trash";
|
$block->header = "Trash";
|
||||||
$block->body = $this->theme->get_help_html();
|
$block->body = $this->theme->get_help_html();
|
||||||
@ -117,18 +116,19 @@ class Trash extends Extension
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function set_trash($image_id, $trash) {
|
public static function set_trash($image_id, $trash)
|
||||||
|
{
|
||||||
global $database;
|
global $database;
|
||||||
|
|
||||||
$database->execute("UPDATE images SET trash = :trash WHERE id = :id",
|
$database->execute(
|
||||||
["trash"=>$database->scoresql_value_prepare($trash),"id"=>$image_id]);
|
"UPDATE images SET trash = :trash WHERE id = :id",
|
||||||
|
["trash"=>$database->scoresql_value_prepare($trash),"id"=>$image_id]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event)
|
public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $config, $database, $user;
|
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));
|
$event->add_part($this->theme->get_image_admin_html($event->image->id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ class Trash extends Extension
|
|||||||
global $user;
|
global $user;
|
||||||
|
|
||||||
if ($user->can(Permissions::VIEW_TRASH)&&in_array("in:trash", $event->search_terms)) {
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +172,5 @@ class Trash extends Extension
|
|||||||
$database->Execute("CREATE INDEX images_trash_idx ON images(trash)");
|
$database->Execute("CREATE INDEX images_trash_idx ON images(trash)");
|
||||||
$config->set_int(TrashConfig::VERSION, 1);
|
$config->set_int(TrashConfig::VERSION, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
class TrashTheme extends Themelet
|
class TrashTheme extends Themelet
|
||||||
{
|
{
|
||||||
function get_image_admin_html(int $image_id) {
|
public function get_image_admin_html(int $image_id)
|
||||||
|
{
|
||||||
$html = "
|
$html = "
|
||||||
".make_form(make_link('trash_restore/'.$image_id), 'POST')."
|
".make_form(make_link('trash_restore/'.$image_id), 'POST')."
|
||||||
<input type='hidden' name='image_id' value='$image_id'>
|
<input type='hidden' name='image_id' value='$image_id'>
|
||||||
@ -10,7 +11,8 @@ class TrashTheme extends Themelet
|
|||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
|
|
||||||
return $html; }
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function get_help_html()
|
public function get_help_html()
|
||||||
@ -21,6 +23,5 @@ class TrashTheme extends Themelet
|
|||||||
<p>Returns images that are in the trash.</p>
|
<p>Returns images that are in the trash.</p>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ class Upgrade extends Extension
|
|||||||
$database->execute("ALTER TABLE images ADD COLUMN length INTEGER NULL ");
|
$database->execute("ALTER TABLE images ADD COLUMN length INTEGER NULL ");
|
||||||
|
|
||||||
log_info("upgrade", "Setting indexes for media columns");
|
log_info("upgrade", "Setting indexes for media columns");
|
||||||
switch($database->get_driver_name()) {
|
switch ($database->get_driver_name()) {
|
||||||
case DatabaseDriver::PGSQL:
|
case DatabaseDriver::PGSQL:
|
||||||
case DatabaseDriver::SQLITE:
|
case DatabaseDriver::SQLITE:
|
||||||
$database->execute('CREATE INDEX images_video_idx ON images(video) WHERE video IS NOT NULL');
|
$database->execute('CREATE INDEX images_video_idx ON images(video) WHERE video IS NOT NULL');
|
||||||
@ -223,7 +223,6 @@ class Upgrade extends Extension
|
|||||||
log_info("upgrade", "Database at version 17");
|
log_info("upgrade", "Database at version 17");
|
||||||
$config->set_bool("in_upgrade", false);
|
$config->set_bool("in_upgrade", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_priority(): int
|
public function get_priority(): int
|
||||||
|
@ -141,12 +141,12 @@ class Upload extends Extension
|
|||||||
|
|
||||||
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
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)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="upload") {
|
if ($event->parent=="upload") {
|
||||||
if (class_exists("Wiki")) {
|
if (class_exists("Wiki")) {
|
||||||
$event->add_nav_link("upload_guidelines", new Link('wiki/upload_guidelines'), "Guidelines");
|
$event->add_nav_link("upload_guidelines", new Link('wiki/upload_guidelines'), "Guidelines");
|
||||||
}
|
}
|
||||||
|
@ -341,7 +341,7 @@ class UserPage extends Extension
|
|||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
if($event->parent==="system") {
|
if ($event->parent==="system") {
|
||||||
if ($user->can(Permissions::EDIT_USER_CLASS)) {
|
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"]));
|
$event->add_nav_link("user_admin", new Link('user_admin/list'), "User List", NavLink::is_active(["user_admin"]));
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ class UserPage extends Extension
|
|||||||
|
|
||||||
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
public function onHelpPageBuilding(HelpPageBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->key===HelpPages::SEARCH) {
|
if ($event->key===HelpPages::SEARCH) {
|
||||||
$block = new Block();
|
$block = new Block();
|
||||||
$block->header = "Users";
|
$block->header = "Users";
|
||||||
$block->body = $this->theme->get_help_html();
|
$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->set_heading(html_escape($duser->name)."'s Page");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
$page->add_block(new Block("Stats", join("<br>", $stats), "main", 10));
|
$page->add_block(new Block("Stats", join("<br>", $stats), "main", 10));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build_options(User $duser, UserOptionsBuildingEvent $event)
|
public function build_options(User $duser, UserOptionsBuildingEvent $event)
|
||||||
@ -337,7 +336,6 @@ class UserPageTheme extends Themelet
|
|||||||
foreach ($event->parts as $part) {
|
foreach ($event->parts as $part) {
|
||||||
$html .= $part;
|
$html .= $part;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,13 @@ class UserConfig extends Extension
|
|||||||
{
|
{
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
if ($config->get_int(self::VERSION,0)<1) {
|
if ($config->get_int(self::VERSION, 0)<1) {
|
||||||
$this->install();
|
$this->install();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onInitUserConfig(InitUserConfigEvent $event) {
|
public function onInitUserConfig(InitUserConfigEvent $event)
|
||||||
|
{
|
||||||
global $database, $user_config;
|
global $database, $user_config;
|
||||||
|
|
||||||
$user_config = new DatabaseConfig($database, "user_config", "user_id", $event->user->id);
|
$user_config = new DatabaseConfig($database, "user_config", "user_id", $event->user->id);
|
||||||
@ -43,8 +44,7 @@ class UserConfig extends Extension
|
|||||||
{
|
{
|
||||||
global $config, $database;
|
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");
|
log_info("upgrade", "Adding user config table");
|
||||||
|
|
||||||
$database->create_table("user_config", "
|
$database->create_table("user_config", "
|
||||||
|
@ -17,7 +17,8 @@ class DisplayingImageEvent extends Event
|
|||||||
return $this->image;
|
return $this->image;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set_title(String $title) {
|
public function set_title(String $title)
|
||||||
|
{
|
||||||
$this->title = $title;
|
$this->title = $title;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,4 @@ class ImageAdminBlockBuildingEvent extends Event
|
|||||||
}
|
}
|
||||||
$this->parts[$position] = $html;
|
$this->parts[$position] = $html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,4 @@ class ImageInfoBoxBuildingEvent extends Event
|
|||||||
}
|
}
|
||||||
$this->parts[$position] = $html;
|
$this->parts[$position] = $html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,4 +9,4 @@ class ImageInfoSetEvent extends Event
|
|||||||
{
|
{
|
||||||
$this->image = $image;
|
$this->image = $image;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,13 +179,13 @@ class Wiki extends Extension
|
|||||||
|
|
||||||
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
$event->add_nav_link("wiki",new Link('wiki'), "Wiki");
|
$event->add_nav_link("wiki", new Link('wiki'), "Wiki");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
public function onPageSubNavBuilding(PageSubNavBuildingEvent $event)
|
||||||
{
|
{
|
||||||
if($event->parent=="wiki") {
|
if ($event->parent=="wiki") {
|
||||||
$event->add_nav_link("wiki_rules", new Link('wiki/rules'), "Rules");
|
$event->add_nav_link("wiki_rules", new Link('wiki/rules'), "Rules");
|
||||||
$event->add_nav_link("wiki_help", new Link('ext_doc/wiki'), "Help");
|
$event->add_nav_link("wiki_help", new Link('ext_doc/wiki'), "Help");
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ try {
|
|||||||
$page->display();
|
$page->display();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($database->transaction===true) {
|
if ($database->transaction===true) {
|
||||||
$database->commit();
|
$database->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ try {
|
|||||||
|
|
||||||
$_tracer->end();
|
$_tracer->end();
|
||||||
if (TRACE_FILE) {
|
if (TRACE_FILE) {
|
||||||
if((microtime(true) - $_shm_load_start) > TRACE_THRESHOLD) {
|
if ((microtime(true) - $_shm_load_start) > TRACE_THRESHOLD) {
|
||||||
$_tracer->flush(TRACE_FILE);
|
$_tracer->flush(TRACE_FILE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ class Layout
|
|||||||
}
|
}
|
||||||
|
|
||||||
$custom_sublinks = "";
|
$custom_sublinks = "";
|
||||||
if(!empty($sub_links)) {
|
if (!empty($sub_links)) {
|
||||||
$custom_sublinks = "<div class='sbar'>";
|
$custom_sublinks = "<div class='sbar'>";
|
||||||
foreach ($sub_links as $nav_link) {
|
foreach ($sub_links as $nav_link) {
|
||||||
$custom_sublinks .= "<li>".$this->navlinks($nav_link->link, $nav_link->description, $nav_link->active)."</li>";
|
$custom_sublinks .= "<li>".$this->navlinks($nav_link->link, $nav_link->description, $nav_link->active)."</li>";
|
||||||
|
@ -33,7 +33,7 @@ class CustomViewImageTheme extends ViewImageTheme
|
|||||||
<br>Filesize: $h_filesize
|
<br>Filesize: $h_filesize
|
||||||
<br>Type: $h_type";
|
<br>Type: $h_type";
|
||||||
|
|
||||||
if($image->length!=null) {
|
if ($image->length!=null) {
|
||||||
$h_length = format_milliseconds($image->length);
|
$h_length = format_milliseconds($image->length);
|
||||||
$html .= "<br/>Length: $h_length";
|
$html .= "<br/>Length: $h_length";
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ class Layout
|
|||||||
}
|
}
|
||||||
|
|
||||||
$custom_sublinks = "";
|
$custom_sublinks = "";
|
||||||
if(!empty($sub_links)) {
|
if (!empty($sub_links)) {
|
||||||
$custom_sublinks = "<div class='sbar'>";
|
$custom_sublinks = "<div class='sbar'>";
|
||||||
foreach ($sub_links as $nav_link) {
|
foreach ($sub_links as $nav_link) {
|
||||||
$custom_sublinks .= "<li>".$this->navlinks($nav_link->link, $nav_link->description, $nav_link->active)."</li>";
|
$custom_sublinks .= "<li>".$this->navlinks($nav_link->link, $nav_link->description, $nav_link->active)."</li>";
|
||||||
|
@ -33,7 +33,7 @@ class CustomViewImageTheme extends ViewImageTheme
|
|||||||
<br>Type: $h_type
|
<br>Type: $h_type
|
||||||
";
|
";
|
||||||
|
|
||||||
if($image->length!=null) {
|
if ($image->length!=null) {
|
||||||
$h_length = format_milliseconds($image->length);
|
$h_length = format_milliseconds($image->length);
|
||||||
$html .= "<br/>Length: $h_length";
|
$html .= "<br/>Length: $h_length";
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ class Layout
|
|||||||
}
|
}
|
||||||
|
|
||||||
$custom_sublinks = "";
|
$custom_sublinks = "";
|
||||||
if(!empty($sub_links)) {
|
if (!empty($sub_links)) {
|
||||||
$custom_sublinks = "<div class='sbar'>";
|
$custom_sublinks = "<div class='sbar'>";
|
||||||
foreach ($sub_links as $nav_link) {
|
foreach ($sub_links as $nav_link) {
|
||||||
$custom_sublinks .= $this->navlinks($nav_link->link, $nav_link->description, $nav_link->active);
|
$custom_sublinks .= $this->navlinks($nav_link->link, $nav_link->description, $nav_link->active);
|
||||||
|
@ -33,7 +33,7 @@ class CustomViewImageTheme extends ViewImageTheme
|
|||||||
<br>Filesize: $h_filesize
|
<br>Filesize: $h_filesize
|
||||||
<br>Type: ".$h_type."
|
<br>Type: ".$h_type."
|
||||||
";
|
";
|
||||||
if($image->length!=null) {
|
if ($image->length!=null) {
|
||||||
$h_length = format_milliseconds($image->length);
|
$h_length = format_milliseconds($image->length);
|
||||||
$html .= "<br/>Length: $h_length";
|
$html .= "<br/>Length: $h_length";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user