1<?php 2 3namespace dokuwiki\plugin\sqlite; 4 5use dokuwiki\Extension\Event; 6 7class QuerySaver 8{ 9 10 protected $db; 11 protected $upstream; 12 13 /** 14 * @param string $dbname The database the queries are saved for 15 */ 16 public function __construct($dbname) 17 { 18 $this->db = new SQLiteDB('sqlite', DOKU_PLUGIN . 'sqlite/db/'); 19 $this->upstream = $dbname; 20 } 21 22 /** 23 * Save a query 24 * 25 * @param string $name 26 * @param string $query 27 */ 28 public function saveQuery($name, $query) 29 { 30 $eventData = [ 31 'sqlitedb' => $this->db, 32 'upstream' => $this->upstream, 33 'name' => &$name, 34 'query' => &$query 35 ]; 36 $event = new Event('PLUGIN_SQLITE_QUERY_SAVE', $eventData); 37 if ($event->advise_before()) { 38 $sql = 'INSERT INTO queries (db, name, sql) VALUES (?, ?, ?)'; 39 $this->db->exec($sql, [$this->upstream, $name, $query]); 40 } 41 $event->advise_after(); 42 } 43 44 /** 45 * Get a saved query 46 * 47 * @param string $name 48 * @return string The SQL query 49 */ 50 public function getQuery($name) 51 { 52 $sql = 'SELECT sql FROM queries WHERE db = ? AND name = ?'; 53 return $this->db->queryValue($sql, [$this->upstream, $name]); 54 } 55 56 /** 57 * Delete a saved query 58 * 59 * @param string $name 60 */ 61 public function deleteQuery($name) 62 { 63 $eventData = [ 64 'sqlitedb' => $this->db, 65 'upstream' => $this->upstream, 66 'name' => &$name 67 ]; 68 $event = new Event('PLUGIN_SQLITE_QUERY_DELETE', $eventData); 69 if ($event->advise_before()) { 70 $sql = 'DELETE FROM queries WHERE db = ? AND name = ?'; 71 $this->db->exec($sql, [$this->upstream, $name]); 72 } 73 $event->advise_after(); 74 } 75 76 /** 77 * Get all saved queries 78 * 79 * @return array 80 */ 81 public function getQueries() 82 { 83 $sql = 'SELECT name, sql FROM queries WHERE db = ?'; 84 return $this->db->queryAll($sql, [$this->upstream]); 85 } 86} 87