Soshot/app/DataBase/DataBase.php

148 lines
4.4 KiB
PHP

<?php
namespace App\DataBase;
use Exception;
use PDO;
if (!function_exists('n_print')) {
function n_print($data, $name = '') {
print_r($data, 1);
}
}
class DataBase {
private $dataBase = __DIR__ . '/../../datas/soshot.sqlite';
private $db;
private $params = [
'id' => '',
'url' => '',
'complete' => '',
'full' => '',
'hd' => '',
'thumb' => '',
'fav' => '',
'og' => '',
'pdf' => '',
'created' => ''
];
function __construct($params = null) {
try {
if (!file_exists($this->dataBase)) {
$this->db = new PDO('sqlite:' . $this->dataBase);
$this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ERRMODE_WARNING | ERRMODE_EXCEPTION | ERRMODE_SILENT
$this->db->query("CREATE TABLE IF NOT EXISTS soshot (
id string PRIMARY KEY NOT NULL,
url text,
complete tinyint,
full tinyint,
hd tinyint,
thumb tinyint,
fav tinyint,
og tinyint,
pdf tinyint,
created DATETIME
);");
} else {
$this->db = new PDO('sqlite:' . $this->dataBase);
$this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ERRMODE_WARNING | ERRMODE_EXCEPTION | ERRMODE_SILENT
}
} catch (Exception $e) {
echo $e->getMessage();
die();
}
if (!empty($params)) {
$this->setParams($params);
}
return $this;
}
public function setParams($params) {
$this->params = (object)$this->params;
$this->params->id = $params->hmac;
$this->params->url = $params->url;
$this->params->type = $params->type;
$this->params->created = date("Y-m-d H:i:s");
$this->params = $this->params;
}
public function addUpdate($update, $type = '') {
if (!empty($type)) {
$this->params->type = $type;
}
if ($this->testExit($this->params->id)) {
$this->update($update);
} else {
$this->insert($update);
}
}
public function insert($update) {
$stmt = $this->db->prepare("INSERT INTO soshot (id, url, " . $this->params->type . ", created) VALUES
(:id, :url, :" . $this->params->type . ", :created)");
//$stmt->debugDumpParams();
$result = $stmt->execute(array(
'id' => $this->params->id,
'url' => $this->params->url,
$this->params->type => $update,
'created' => $this->params->created
));
}
private function update($update) {
$stmt = $this->db->prepare("UPDATE soshot
SET " . $this->params->type . "=:" . $this->params->type . "
WHERE id=:id;");
$result = $stmt->execute([
':' . $this->params->type => $update,
':id' => $this->params->id
]);
//$stmt->debugDumpParams();
}
private function testExit($id) {
$stmt = $this->db->prepare("SELECT id FROM soshot WHERE id=:id LIMIT 1;");
$stmt->execute(array(':id' => $id));
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
if (!empty($result)) {
return true;
}
return false;
}
public function getTotal() {
$stmt = $this->db->prepare("SELECT COUNT(id) AS nb FROM soshot;");
$stmt->execute();
$result = $stmt->fetch();
return $result['nb'];
}
public function getInError() {
$stmt = $this->db->prepare("SELECT COUNT(DISTINCT id) AS nb FROM soshot WHERE
complete = 2 OR
full = 2 OR
hd = 2 OR
thumb = 2 OR
fav = 2 OR
og = 2 OR
pdf = 2;");
$stmt->execute();
$result = $stmt->fetch();
return $result['nb'];
}
public function getList($start, $end) {
$stmt = $this->db->prepare("SELECT * FROM soshot ORDER BY created DESC limit :start, :end;");
$stmt->execute(array(':start' => $start, ':end' => $end));
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
return $result;
}
}