|
@@ -0,0 +1,268 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+class DB extends SQLite3 {
|
|
|
+
|
|
|
+ private $open = false;
|
|
|
+
|
|
|
+ public function __construct () {}
|
|
|
+
|
|
|
+
|
|
|
+ private function ensure_connection () {
|
|
|
+
|
|
|
+ if (!$this->open) {
|
|
|
+ $this->open('db.sqlite');
|
|
|
+ $this->open = true;
|
|
|
+ } else {
|
|
|
+ $this->close();
|
|
|
+ $this->open('db.sqlite');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!@$this->query('SELECT * FROM dossiers LIMIT 1')) {
|
|
|
+ $res = $this->query('
|
|
|
+ CREATE TABLE dossiers (
|
|
|
+ name varchar(128),
|
|
|
+ slugname varchar(128),
|
|
|
+ cloud_link varchar(1024),
|
|
|
+ wiki_link varchar(1024),
|
|
|
+ last_edit_date datetime
|
|
|
+ )
|
|
|
+ ');
|
|
|
+ if ($res)
|
|
|
+ echo "<pre>created dossiers table</pre>";
|
|
|
+ else
|
|
|
+ echo "<pre>error creating dossiers table: ".$this->lastErrorMsg()."</pre>";
|
|
|
+ }
|
|
|
+ if (!@$this->query('SELECT * FROM projects LIMIT 1')) {
|
|
|
+ $res = $this->query('
|
|
|
+ CREATE TABLE projects (
|
|
|
+ name varchar(128),
|
|
|
+ slugname varchar(128),
|
|
|
+ dossier_id integer,
|
|
|
+ main_pad varchar(1024),
|
|
|
+ cover_pad varchar(1024),
|
|
|
+ pads text,
|
|
|
+ last_edit_date datetime
|
|
|
+ )
|
|
|
+ ');
|
|
|
+ if ($res)
|
|
|
+ echo "<pre>created projects table</pre>";
|
|
|
+ else
|
|
|
+ echo "<pre>error creating projects table: ".$this->lastErrorMsg()."</pre>";
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function GetObjects ($type) {
|
|
|
+ $this->ensure_connection();
|
|
|
+
|
|
|
+ if (!in_array($type,['dossiers','projects'])) {
|
|
|
+ echo "<pre>mistake '$type'</pre>";
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ $results = $this->query("SELECT rowid, * FROM $type");
|
|
|
+ $objects = [];
|
|
|
+
|
|
|
+ while ($o = $results->fetchArray(SQLITE3_ASSOC))
|
|
|
+ $objects[$o['rowid']] = $o;
|
|
|
+
|
|
|
+ return $objects;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function GetEmptyObject ($type) {
|
|
|
+ switch ($type) {
|
|
|
+ case 'dossier':
|
|
|
+ return [
|
|
|
+ 'rowid'=>'',
|
|
|
+ 'name'=>'',
|
|
|
+ 'slugname'=>'',
|
|
|
+ 'cloud_link'=>'',
|
|
|
+ 'wiki_link'=>'',
|
|
|
+ 'last_edit_date'=>'',
|
|
|
+ ];
|
|
|
+
|
|
|
+ case 'project':
|
|
|
+ return [
|
|
|
+ 'rowid'=>'',
|
|
|
+ 'name'=>'',
|
|
|
+ 'slugname'=>'',
|
|
|
+ 'dossier_id'=>'',
|
|
|
+ 'dossier'=>'',
|
|
|
+ 'main_pad'=>'',
|
|
|
+ 'cover_pad'=>'',
|
|
|
+ 'last_edit_date'=>'',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function CreateOrEdit ($type,$params) {
|
|
|
+ switch ($type) {
|
|
|
+ case 'dossier':
|
|
|
+ return $this->CreateOrEditDossier($params);
|
|
|
+ case 'project':
|
|
|
+ return $this->CreateOrEditProject($params);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function CreateOrEditDossier ($params) {
|
|
|
+ $this->ensure_connection();
|
|
|
+
|
|
|
+ // EDITION
|
|
|
+ if (isset($params['rowid']) && $params['rowid']) {
|
|
|
+
|
|
|
+ $q = $this->prepare("
|
|
|
+ UPDATE dossiers
|
|
|
+ SET
|
|
|
+ name = :name,
|
|
|
+ cloud_link = :cloud_link,
|
|
|
+ wiki_link = :wiki_link,
|
|
|
+ last_edit_date = datetime('now')
|
|
|
+ WHERE
|
|
|
+ rowid = :rowid
|
|
|
+ ");
|
|
|
+
|
|
|
+ $q->bindValue(':name', $params['name'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':cloud_link', $params['cloud_link'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':wiki_link', $params['wiki_link'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':rowid', $params['rowid'], SQLITE3_INTEGER);
|
|
|
+
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if (!$result)
|
|
|
+ echo "<pre>Erreur à l'édition: ".$this->lastErrorMsg()."</pre>";
|
|
|
+ else
|
|
|
+ return $params['rowid'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // CREATION
|
|
|
+ else {
|
|
|
+ $slug = preg_replace('_\W+_','-',strtolower($params['name']));
|
|
|
+ $slug = preg_replace('_^-|-$_','',$slug);
|
|
|
+
|
|
|
+ $q = $this->prepare("
|
|
|
+ INSERT INTO dossiers
|
|
|
+ (name, slugname, cloud_link, wiki_link, last_edit_date)
|
|
|
+ VALUES
|
|
|
+ (:name, :slugname, :cloud_link, :wiki_link, datetime('now'))
|
|
|
+ ");
|
|
|
+
|
|
|
+ $q->bindValue(':name', $params['name'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':slugname', $slug, SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':cloud_link', $params['cloud_link'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':wiki_link', $params['wiki_link'], SQLITE3_TEXT);
|
|
|
+
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if ($result)
|
|
|
+ return $this->lastInsertRowID();
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function CreateOrEditProject ($params) {
|
|
|
+ $this->ensure_connection();
|
|
|
+
|
|
|
+ $params['pads'] = json_encode($params['pads']);
|
|
|
+
|
|
|
+ // EDITION
|
|
|
+ if (isset($params['rowid']) && $params['rowid']) {
|
|
|
+
|
|
|
+ $q = $this->prepare("
|
|
|
+ UPDATE projects
|
|
|
+ SET
|
|
|
+ name = :name,
|
|
|
+ dossier_id = :dossier_id,
|
|
|
+ main_pad = :main_pad,
|
|
|
+ cover_pad = :cover_pad,
|
|
|
+ pads = :pads,
|
|
|
+ last_edit_date = datetime('now')
|
|
|
+ WHERE
|
|
|
+ rowid = :rowid
|
|
|
+ ");
|
|
|
+
|
|
|
+ $q->bindValue(':name', $params['name'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':dossier_id', $params['dossier_id'], SQLITE3_INTEGER);
|
|
|
+ $q->bindValue(':main_pad', $params['main_pad'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':cover_pad', $params['cover_pad'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':pads', 'TODO', SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':rowid', $params['rowid'], SQLITE3_INTEGER);
|
|
|
+
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if (!$result)
|
|
|
+ echo "<pre>Erreur à l'édition: ".$this->lastErrorMsg()."</pre>";
|
|
|
+ else
|
|
|
+ return $params['rowid'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // CREATION
|
|
|
+ else {
|
|
|
+ $slug = preg_replace('_\W+_','-',strtolower($params['name']));
|
|
|
+ $slug = preg_replace('_^-|-$_','',$slug);
|
|
|
+
|
|
|
+ $q = $this->prepare("
|
|
|
+ INSERT INTO projects
|
|
|
+ (name, slugname, dossier_id, main_pad, cover_pad, last_edit_date)
|
|
|
+ VALUES
|
|
|
+ (:name, :slugname, :dossier_id, :main_pad, :cover_pad, datetime('now'))
|
|
|
+ ");
|
|
|
+
|
|
|
+ $q->bindValue(':name', $params['name'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':slugname', $slug, SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':dossier_id', $params['dossier_id'], SQLITE3_INTEGER);
|
|
|
+ $q->bindValue(':main_pad', $params['main_pad'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':cover_pad', $params['cover_pad'], SQLITE3_TEXT);
|
|
|
+ $q->bindValue(':pads', $params['pads'], SQLITE3_TEXT);
|
|
|
+
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if ($result)
|
|
|
+ return $this->lastInsertRowID();
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function Delete ($type,$id) {
|
|
|
+ switch ($type) {
|
|
|
+ case 'dossier':
|
|
|
+ return $this->DeleteDossier($id);
|
|
|
+ case 'project':
|
|
|
+ return $this->DeleteProject($id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function DeleteDossier ($id) {
|
|
|
+ $this->ensure_connection();
|
|
|
+
|
|
|
+ $q = $this->prepare("DELETE FROM dossiers WHERE rowid = :rowid");
|
|
|
+ $q->bindValue(':rowid', $id, SQLITE3_INTEGER);
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if (!$result)
|
|
|
+ echo "<pre>Error deleting dossier $id: ".$this->lastErrorMsg()."</pre>";
|
|
|
+
|
|
|
+ return $result?true:false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function DeleteProject ($id) {
|
|
|
+ $this->ensure_connection();
|
|
|
+
|
|
|
+ $q = $this->prepare("DELETE FROM projects WHERE rowid = :rowid");
|
|
|
+ $q->bindValue(':rowid', $id, SQLITE3_INTEGER);
|
|
|
+ $result = $q->execute();
|
|
|
+
|
|
|
+ if (!$result)
|
|
|
+ echo "<pre>Error deleting project $id: ".$this->lastErrorMsg()."</pre>";
|
|
|
+
|
|
|
+ return $result?true:false;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|