123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?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;
- }
-
- }
|