mirror of https://github.com/YGGverse/Yoda.git
yggverse
4 months ago
17 changed files with 657 additions and 515 deletions
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class Auth |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `auth` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`active` INTEGER NOT NULL, |
||||
`identity` INTEGER NOT NULL, |
||||
`request` VARCHAR(1024) NOT NULL |
||||
) |
||||
'); |
||||
} |
||||
} |
@ -0,0 +1,155 @@
@@ -0,0 +1,155 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class Bookmark |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `bookmark` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`request` VARCHAR(1024) UNIQUE, |
||||
`title` VARCHAR(255) |
||||
) |
||||
'); |
||||
} |
||||
|
||||
public function add( |
||||
?string $request = null, |
||||
?string $title = null, |
||||
?int $time = null |
||||
): int |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'INSERT INTO `bookmark` ( |
||||
`time`, |
||||
`request`, |
||||
`title` |
||||
) VALUES ( |
||||
:time, |
||||
:request, |
||||
:title |
||||
)' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':time' => $time ? $time : time(), |
||||
':request' => $request, |
||||
':title' => $title |
||||
] |
||||
); |
||||
|
||||
return intval( |
||||
$this->connection->lastInsertId() |
||||
); |
||||
} |
||||
|
||||
public function get( |
||||
?string $request = null |
||||
): ?object |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'SELECT * FROM `bookmark` WHERE `request` LIKE :request' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':request' => $request |
||||
] |
||||
); |
||||
|
||||
if ($record = $query->fetch()) |
||||
{ |
||||
return $record; |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
public function find( |
||||
?string $value = null, |
||||
int $start = 0, |
||||
int $limit = 1000 |
||||
): array |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
sprintf( |
||||
'SELECT * FROM `bookmark` |
||||
WHERE `request` LIKE :value OR `title` LIKE :value |
||||
ORDER BY `id` DESC |
||||
LIMIT %d,%d', |
||||
$start, |
||||
$limit |
||||
) |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':value' => sprintf( |
||||
'%%%s%%', |
||||
strval( |
||||
$value |
||||
) |
||||
) |
||||
] |
||||
); |
||||
|
||||
return $query->fetchAll(); |
||||
} |
||||
|
||||
public function delete( |
||||
int $id |
||||
): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
sprintf( |
||||
'DELETE FROM `bookmark` WHERE `id` = %d', |
||||
$id |
||||
) |
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
|
||||
public function toggle( |
||||
?string $request = null, |
||||
?string $title = null, |
||||
?int $time = null |
||||
): bool |
||||
{ |
||||
if ($record = $this->get($request)) |
||||
{ |
||||
$this->delete( |
||||
$record->id |
||||
); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
else |
||||
{ |
||||
$this->add( |
||||
$request, |
||||
$title, |
||||
$time |
||||
); |
||||
|
||||
return true; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,173 @@
@@ -0,0 +1,173 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class Cache |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `cache` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`request` VARCHAR(1024) UNIQUE, |
||||
`mime` VARCHAR(255), |
||||
`title` VARCHAR(255), |
||||
`subtitle` VARCHAR(255), |
||||
`tooltip` VARCHAR(255), |
||||
`data` BLOB |
||||
) |
||||
'); |
||||
} |
||||
|
||||
public function add( |
||||
?string $request = null, |
||||
?string $mime = null, |
||||
?string $title = null, |
||||
?string $subtitle = null, |
||||
?string $tooltip = null, |
||||
?string $data = null, |
||||
?int $time = null |
||||
): int |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'INSERT INTO `cache` ( |
||||
`time`, |
||||
`request`, |
||||
`mime`, |
||||
`title`, |
||||
`subtitle`, |
||||
`tooltip`, |
||||
`data` |
||||
) VALUES ( |
||||
:time, |
||||
:request, |
||||
:mime, |
||||
:title, |
||||
:subtitle, |
||||
:tooltip, |
||||
:data |
||||
)' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':time' => $time ? $time : time(), |
||||
':request' => $request, |
||||
':mime' => $mime, |
||||
':title' => $title, |
||||
':subtitle' => $subtitle, |
||||
':tooltip' => $tooltip, |
||||
':data' => $data |
||||
] |
||||
); |
||||
|
||||
return intval( |
||||
$this->connection->lastInsertId() |
||||
); |
||||
} |
||||
|
||||
public function get( |
||||
string $request = '' |
||||
): ?object |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'SELECT * FROM `cache` WHERE `request` LIKE :request' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':request' => $request |
||||
] |
||||
); |
||||
|
||||
if ($cache = $query->fetch()) |
||||
{ |
||||
return $cache; |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
public function delete( |
||||
int $id |
||||
): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
sprintf( |
||||
'DELETE FROM `cache` WHERE `id` = %d', |
||||
$id |
||||
) |
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
|
||||
public function clean( |
||||
int $timeout = 0 |
||||
): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
sprintf( |
||||
'DELETE FROM `cache` WHERE `time` + %d < %d', |
||||
$timeout, |
||||
time() |
||||
) |
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
|
||||
public function renew( |
||||
string $request, |
||||
?string $mime = null, |
||||
?string $title = null, |
||||
?string $subtitle = null, |
||||
?string $tooltip = null, |
||||
?string $data = null, |
||||
?int $time = null |
||||
): void |
||||
{ |
||||
// Find same records match URL |
||||
$query = $this->connection->prepare( |
||||
'SELECT * FROM `cache` WHERE `request` LIKE :request' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':request' => $request |
||||
] |
||||
); |
||||
|
||||
// Drop previous records |
||||
foreach ($query->fetchAll() as $record) |
||||
{ |
||||
$this->delete( |
||||
$record->id |
||||
); |
||||
} |
||||
|
||||
// Add new record |
||||
$this->add( |
||||
$request, |
||||
$mime, |
||||
$title, |
||||
$subtitle, |
||||
$tooltip, |
||||
$data, |
||||
$time |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,142 @@
@@ -0,0 +1,142 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class History |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `history` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`url` VARCHAR(1024) NOT NULL, |
||||
`title` VARCHAR(255) |
||||
) |
||||
'); |
||||
} |
||||
|
||||
public function add( |
||||
string $url, |
||||
?string $title = null |
||||
): int |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'INSERT INTO `history` (`time`, `url`, `title`) VALUES (:time, :url, :title)' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':time' => time(), |
||||
':url' => $url, |
||||
':title' => $title |
||||
] |
||||
); |
||||
|
||||
return intval( |
||||
$this->connection->lastInsertId() |
||||
); |
||||
} |
||||
|
||||
public function find( |
||||
string $value = '', |
||||
int $start = 0, |
||||
int $limit = 1000 |
||||
): array |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
sprintf( |
||||
'SELECT * FROM `history` |
||||
WHERE `url` LIKE :value OR `title` LIKE :value |
||||
ORDER BY `id` DESC |
||||
LIMIT %d,%d', |
||||
$start, |
||||
$limit |
||||
) |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':value' => sprintf( |
||||
'%%%s%%', |
||||
$value |
||||
) |
||||
] |
||||
); |
||||
|
||||
return $query->fetchAll(); |
||||
} |
||||
|
||||
public function delete( |
||||
int $id |
||||
): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
sprintf( |
||||
'DELETE FROM `history` WHERE `id` = %d', |
||||
$id |
||||
) |
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
|
||||
public function clean( |
||||
int $timeout = 0 |
||||
): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
sprintf( |
||||
'DELETE FROM `history` WHERE `time` + %d < %d', |
||||
$timeout, |
||||
time() |
||||
) |
||||
|
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
|
||||
public function renew( |
||||
string $url, |
||||
?string $title = null |
||||
): void |
||||
{ |
||||
// Find same records match URL |
||||
$query = $this->connection->prepare( |
||||
'SELECT * FROM `history` WHERE `url` LIKE :url' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':url' => $url |
||||
] |
||||
); |
||||
|
||||
// Drop previous records |
||||
foreach ($query->fetchAll() as $record) |
||||
{ |
||||
$this->delete( |
||||
$record->id |
||||
); |
||||
} |
||||
|
||||
// Add new record |
||||
$this->add( |
||||
$url, |
||||
$title |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class Identity |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `identity` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`active` INTEGER NOT NULL, |
||||
`name` VARCHAR(255), |
||||
`crt` TEXT NOT NULL, |
||||
`key` TEXT NOT NULL |
||||
) |
||||
'); |
||||
} |
||||
} |
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Yggverse\Yoda\Model\Database; |
||||
|
||||
use \Pdo; |
||||
|
||||
class Session |
||||
{ |
||||
public Pdo $connection; |
||||
|
||||
public function __construct( |
||||
Pdo $connection |
||||
) { |
||||
// Init parent connection |
||||
$this->connection = $connection; |
||||
|
||||
// Init database structure |
||||
$this->connection->query(' |
||||
CREATE TABLE IF NOT EXISTS `session` |
||||
( |
||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
`time` INTEGER NOT NULL, |
||||
`request` VARCHAR(1024) |
||||
) |
||||
'); |
||||
} |
||||
|
||||
public function add( |
||||
?string $request = null, |
||||
?int $time = null |
||||
): int |
||||
{ |
||||
$query = $this->connection->prepare( |
||||
'INSERT INTO `session` (`time`, `request`) VALUES (:time, :request)' |
||||
); |
||||
|
||||
$query->execute( |
||||
[ |
||||
':time' => $time ? $time : time(), |
||||
':request' => $request |
||||
] |
||||
); |
||||
|
||||
return intval( |
||||
$this->connection->lastInsertId() |
||||
); |
||||
} |
||||
|
||||
public function get(): array |
||||
{ |
||||
$query = $this->connection->query( |
||||
'SELECT * FROM `session`' |
||||
); |
||||
|
||||
if ($session = $query->fetchAll()) |
||||
{ |
||||
return $session; |
||||
} |
||||
|
||||
return []; |
||||
} |
||||
|
||||
public function clean(): int |
||||
{ |
||||
$query = $this->connection->query( |
||||
'DELETE FROM `session`' |
||||
); |
||||
|
||||
return $query->rowCount(); |
||||
} |
||||
} |
Loading…
Reference in new issue