crud update

This commit is contained in:
Shish 2019-12-26 00:36:32 +00:00
parent 67afe948bd
commit bafdb1c769
7 changed files with 124 additions and 71 deletions

50
composer.lock generated
View File

@ -11,7 +11,7 @@
"version": "1.12.4", "version": "1.12.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/jquery/jquery-dist.git", "url": "git@github.com:jquery/jquery-dist.git",
"reference": "5e89585e0121e72ff47de177c5ef604f3089a53d" "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d"
}, },
"dist": { "dist": {
@ -388,12 +388,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/shish/microcrud.git", "url": "https://github.com/shish/microcrud.git",
"reference": "f64681c605922909d57e9c17c0b63311f3c8a5d6" "reference": "1f9d64bf0ff8c035b0709273a86f4ff9b791fe6e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/shish/microcrud/zipball/f64681c605922909d57e9c17c0b63311f3c8a5d6", "url": "https://api.github.com/repos/shish/microcrud/zipball/1f9d64bf0ff8c035b0709273a86f4ff9b791fe6e",
"reference": "f64681c605922909d57e9c17c0b63311f3c8a5d6", "reference": "1f9d64bf0ff8c035b0709273a86f4ff9b791fe6e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -429,7 +429,7 @@
"crud", "crud",
"generator" "generator"
], ],
"time": "2019-12-16T00:07:35+00:00" "time": "2019-12-25T17:02:45+00:00"
}, },
{ {
"name": "shish/microhtml", "name": "shish/microhtml",
@ -485,12 +485,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/instantiator.git", "url": "https://github.com/doctrine/instantiator.git",
"reference": "eca6c638ef64433b2e36a9221826e75e39c65eb9" "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/eca6c638ef64433b2e36a9221826e75e39c65eb9", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6a1471ddbf2f448b35f3a8e390c903435e6dd5de",
"reference": "eca6c638ef64433b2e36a9221826e75e39c65eb9", "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -533,7 +533,7 @@
"constructor", "constructor",
"instantiate" "instantiate"
], ],
"time": "2019-12-06T20:47:21+00:00" "time": "2019-12-23T19:18:31+00:00"
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
@ -695,12 +695,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" "reference": "b0843c8cbcc2dc5eda5158e583c7199a5e44c86d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/b0843c8cbcc2dc5eda5158e583c7199a5e44c86d",
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "reference": "b0843c8cbcc2dc5eda5158e583c7199a5e44c86d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -739,7 +739,7 @@
"reflection", "reflection",
"static analysis" "static analysis"
], ],
"time": "2018-08-07T13:53:10+00:00" "time": "2019-12-20T12:45:35+00:00"
}, },
{ {
"name": "phpdocumentor/reflection-docblock", "name": "phpdocumentor/reflection-docblock",
@ -747,12 +747,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "1aef412299c8901c2a80c384f026574557975894" "reference": "c19ab7ef57e75b5790aa912fd1cd14708e811970"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/1aef412299c8901c2a80c384f026574557975894", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/c19ab7ef57e75b5790aa912fd1cd14708e811970",
"reference": "1aef412299c8901c2a80c384f026574557975894", "reference": "c19ab7ef57e75b5790aa912fd1cd14708e811970",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -792,7 +792,7 @@
} }
], ],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2019-12-13T15:12:00+00:00" "time": "2019-12-20T13:36:14+00:00"
}, },
{ {
"name": "phpdocumentor/type-resolver", "name": "phpdocumentor/type-resolver",
@ -842,33 +842,33 @@
}, },
{ {
"name": "phpspec/prophecy", "name": "phpspec/prophecy",
"version": "1.9.0", "version": "dev-master",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpspec/prophecy.git", "url": "https://github.com/phpspec/prophecy.git",
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.0.2", "doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0", "php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
"sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/comparator": "^1.2.3|^2.0|^3.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0" "sebastian/recursion-context": "^1.0|^2.0|^3.0"
}, },
"require-dev": { "require-dev": {
"phpspec/phpspec": "^2.5|^3.2", "phpspec/phpspec": "^2.5 || ^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.8.x-dev" "dev-master": "1.10.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -901,7 +901,7 @@
"spy", "spy",
"stub" "stub"
], ],
"time": "2019-10-03T11:07:50+00:00" "time": "2019-12-22T21:05:45+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",

View File

@ -1,5 +1,6 @@
<?php <?php
use MicroCRUD\ActionColumn;
use MicroCRUD\TextColumn; use MicroCRUD\TextColumn;
use MicroCRUD\Table; use MicroCRUD\Table;
@ -13,10 +14,11 @@ class AliasTable extends Table
$this->primary_key = "oldtag"; $this->primary_key = "oldtag";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new TextColumn("oldtag", "Old Tag"), new TextColumn("oldtag", "Old Tag"),
new TextColumn("newtag", "New Tag"), new TextColumn("newtag", "New Tag"),
]; new ActionColumn("oldtag"),
]);
$this->order_by = ["oldtag"]; $this->order_by = ["oldtag"];
$this->table_attrs = ["class" => "zebra"]; $this->table_attrs = ["class" => "zebra"];
} }

View File

@ -1,5 +1,6 @@
<?php <?php
use MicroCRUD\ActionColumn;
use MicroCRUD\StringColumn; use MicroCRUD\StringColumn;
use MicroCRUD\DateColumn; use MicroCRUD\DateColumn;
use MicroCRUD\TextColumn; use MicroCRUD\TextColumn;
@ -15,11 +16,12 @@ class HashBanTable extends Table
$this->primary_key = "hash"; $this->primary_key = "hash";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new StringColumn("hash", "Hash"), new StringColumn("hash", "Hash"),
new TextColumn("reason", "Reason"), new TextColumn("reason", "Reason"),
new DateColumn("date", "Date"), new DateColumn("date", "Date"),
]; new ActionColumn("id"),
]);
$this->order_by = ["date DESC", "id"]; $this->order_by = ["date DESC", "id"];
$this->create_url = make_link("image_hash_ban/add"); $this->create_url = make_link("image_hash_ban/add");
$this->delete_url = make_link("image_hash_ban/remove"); $this->delete_url = make_link("image_hash_ban/remove");

View File

@ -1,5 +1,6 @@
<?php <?php
use MicroCRUD\ActionColumn;
use MicroCRUD\InetColumn; use MicroCRUD\InetColumn;
use MicroCRUD\StringColumn; use MicroCRUD\StringColumn;
use MicroCRUD\DateColumn; use MicroCRUD\DateColumn;
@ -21,7 +22,7 @@ class IPBanTable extends Table
"; ";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new InetColumn("ip", "IP"), new InetColumn("ip", "IP"),
new EnumColumn("mode", "Mode", [ new EnumColumn("mode", "Mode", [
"Block"=>"block", "Block"=>"block",
@ -33,7 +34,8 @@ class IPBanTable extends Table
new StringColumn("banner", "Banner"), new StringColumn("banner", "Banner"),
new DateColumn("added", "Added"), new DateColumn("added", "Added"),
new DateColumn("expires", "Expires"), new DateColumn("expires", "Expires"),
]; new ActionColumn("id"),
]);
$this->order_by = ["expires", "id"]; $this->order_by = ["expires", "id"];
$this->flags = [ $this->flags = [
"all" => ["((expires > CURRENT_TIMESTAMP) OR (expires IS NULL))", null], "all" => ["((expires > CURRENT_TIMESTAMP) OR (expires IS NULL))", null],

View File

@ -8,6 +8,7 @@ use function MicroHTML\BR;
use function MicroHTML\SELECT; use function MicroHTML\SELECT;
use function MicroHTML\OPTION; use function MicroHTML\OPTION;
use function MicroHTML\rawHTML; use function MicroHTML\rawHTML;
use MicroCRUD\ActionColumn;
use MicroCRUD\Column; use MicroCRUD\Column;
use MicroCRUD\DateTimeColumn; use MicroCRUD\DateTimeColumn;
use MicroCRUD\TextColumn; use MicroCRUD\TextColumn;
@ -37,10 +38,55 @@ class ActorColumn extends Column
{ {
public function __construct($name, $title) public function __construct($name, $title)
{ {
parent::__construct($name, $title, "((LOWER(username) LIKE LOWER(:{$name})) OR (address::text LIKE :{$name}))"); parent::__construct($name, $title);
$this->input_mod = function ($var) { $this->sortable = false;
return "%$var%"; }
};
public function get_sql_filter(): string
{
$driver = $this->table->db->getAttribute(\PDO::ATTR_DRIVER_NAME);
switch ($driver) {
case "pgsql":
return "((username = :{$this->name}_0) OR (address && inet :{$this->name}_1))";
default:
return "((username = :{$this->name}_0) OR (address = :{$this->name}_1))";
}
}
public function read_input($inputs)
{
return emptyHTML(
INPUT([
"type" => "text",
"name" => "r_{$this->name}[]",
"placeholder" => "Username",
"value" => @$inputs["r_{$this->name}"][0]
]),
BR(),
INPUT([
"type" => "text",
"name" => "r_{$this->name}[]",
"placeholder" => "IP Address",
"value" => @$inputs["r_{$this->name}"][1]
])
);
}
public function modify_input_for_read($input)
{
list($un, $ip) = $input;
if (empty($un)) {
$un = null;
}
if (empty($ip)) {
$driver = $this->table->db->getAttribute(\PDO::ATTR_DRIVER_NAME);
switch ($driver) {
case "pgsql": $ip = "0.0.0.0/0"; break;
default: $ip = null; break;
}
}
return [$un, $ip];
>>>>>>> crud update
} }
public function display($row) public function display($row)
@ -59,23 +105,13 @@ class MessageColumn extends Column
{ {
public function __construct($name, $title) public function __construct($name, $title)
{ {
parent::__construct( parent::__construct($name, $title);
$name, $this->sortable = false;
$title,
"($name LIKE :{$name}_0 AND priority >= :{$name}_1)"
);
$this->input_mod = function ($var) {
list($m, $l) = $var;
if (empty($m)) {
$m = "%";
} else {
$m = "%$m%";
} }
if (empty($l)) {
$l = 0; public function get_sql_filter(): string
} {
return [$m, $l]; return "({$this->name} LIKE :{$this->name}_0 AND priority >= :{$this->name}_1)";
};
} }
public function read_input($inputs) public function read_input($inputs)
@ -109,6 +145,20 @@ class MessageColumn extends Column
return $ret; return $ret;
} }
public function modify_input_for_read($input)
{
list($m, $l) = $input;
if (empty($m)) {
$m = "%";
} else {
$m = "%$m%";
}
if (empty($l)) {
$l = 0;
}
return [$m, $l];
}
public function display($row) public function display($row)
{ {
$c = "#000"; $c = "#000";
@ -143,12 +193,13 @@ class LogTable extends Table
$this->base_query = "SELECT * FROM score_log"; $this->base_query = "SELECT * FROM score_log";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new ShortDateTimeColumn("date_sent", "Time"), new ShortDateTimeColumn("date_sent", "Time"),
new TextColumn("section", "Module"), new TextColumn("section", "Module"),
new ActorColumn("username_or_address", "User"), new ActorColumn("username_or_address", "User"),
new MessageColumn("message", "Message") new MessageColumn("message", "Message"),
]; new ActionColumn("id"),
]);
$this->order_by = ["date_sent DESC"]; $this->order_by = ["date_sent DESC"];
$this->table_attrs = ["class" => "zebra"]; $this->table_attrs = ["class" => "zebra"];
} }

View File

@ -1,5 +1,6 @@
<?php <?php
use MicroCRUD\ActionColumn;
use MicroCRUD\TextColumn; use MicroCRUD\TextColumn;
use MicroCRUD\Table; use MicroCRUD\Table;
@ -13,10 +14,11 @@ class NotATagTable extends Table
$this->primary_key = "tag"; $this->primary_key = "tag";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new TextColumn("tag", "Tag"), new TextColumn("tag", "Tag"),
new TextColumn("redirect", "Redirect"), new TextColumn("redirect", "Redirect"),
]; new ActionColumn("id"),
]);
$this->order_by = ["tag", "redirect"]; $this->order_by = ["tag", "redirect"];
$this->create_url = make_link("untag/add"); $this->create_url = make_link("untag/add");
$this->delete_url = make_link("untag/remove"); $this->delete_url = make_link("untag/remove");
@ -116,6 +118,7 @@ class NotATag extends Extension
$database->scoreql_to_sql( $database->scoreql_to_sql(
"DELETE FROM untags WHERE LOWER(tag) = LOWER(:tag)" "DELETE FROM untags WHERE LOWER(tag) = LOWER(:tag)"
), ),
["tag"=>$input['d_tag']] ["tag"=>$input['d_tag']]
); );
$page->flash("Image ban removed"); $page->flash("Image ban removed");

View File

@ -3,7 +3,7 @@
require_once "events.php"; require_once "events.php";
use function MicroHTML\A; use function MicroHTML\A;
use MicroCRUD\Column; use MicroCRUD\ActionColumn;
use MicroCRUD\EnumColumn; use MicroCRUD\EnumColumn;
use MicroCRUD\TextColumn; use MicroCRUD\TextColumn;
use MicroCRUD\Table; use MicroCRUD\Table;
@ -16,21 +16,14 @@ class UserNameColumn extends TextColumn
} }
} }
class UserLinksColumn extends Column class UserActionColumn extends ActionColumn
{ {
public function __construct() public function __construct()
{ {
parent::__construct("links", "User Links", "(1=1)"); parent::__construct("id", "User Links");
$this->sortable = false; $this->sortable = false;
} }
public function create_input(array $inputs)
{
return "";
}
public function read_input(array $inputs)
{
return "";
}
public function display(array $row) public function display(array $row)
{ {
return A(["href"=>make_link("post/list/user={$row['name']}/1")], "Posts"); return A(["href"=>make_link("post/list/user={$row['name']}/1")], "Posts");
@ -52,13 +45,13 @@ class UserTable extends Table
$this->base_query = "SELECT * FROM users"; $this->base_query = "SELECT * FROM users";
$this->size = 100; $this->size = 100;
$this->limit = 1000000; $this->limit = 1000000;
$this->columns = [ $this->set_columns([
new UserNameColumn("name", "Name"), new UserNameColumn("name", "Name"),
new EnumColumn("class", "Class", $classes), new EnumColumn("class", "Class", $classes),
// Added later, for admins only // Added later, for admins only
// new TextColumn("email", "Email"), // new TextColumn("email", "Email"),
new UserLinksColumn(), new UserActionColumn(),
]; ]);
$this->order_by = ["name"]; $this->order_by = ["name"];
$this->table_attrs = ["class" => "zebra"]; $this->table_attrs = ["class" => "zebra"];
} }