]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/Wallabag/Database.php
new folders
[github/wallabag/wallabag.git] / src / Wallabag / Wallabag / Database.php
CommitLineData
14890de3 1<?php
2/**
c95b78a8 3 * wallabag, self hostable application allowing you to not miss any content anymore
14890de3 4 *
c95b78a8
NL
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
14890de3 7 * @copyright 2013
3602405e 8 * @license http://opensource.org/licenses/MIT see COPYING file
14890de3 9 */
10
6ad93dff
NL
11namespace Wallabag\Wallabag;
12
bc1ee852 13class Database {
b3cda72e 14
14890de3 15 var $handle;
4e067cea
NL
16 private $order = array (
17 'ia' => 'ORDER BY entries.id',
18 'id' => 'ORDER BY entries.id DESC',
19 'ta' => 'ORDER BY lower(entries.title)',
20 'td' => 'ORDER BY lower(entries.title) DESC',
21 'default' => 'ORDER BY entries.id'
032e0ca1
MR
22 );
23
182faf26 24 function __construct()
68857cea
NL
25 {
26 switch (STORAGE) {
27 case 'sqlite':
211068ce 28 // Check if /db is writeable
b668db24 29 if ( !is_writable(STORAGE_SQLITE) || !is_writable(dirname(STORAGE_SQLITE))) {
6ad93dff 30 die('An error occured: ' . STORAGE_SQLITE . ' directory must be writeable for your web server user!');
211068ce 31 }
68857cea
NL
32 $db_path = 'sqlite:' . STORAGE_SQLITE;
33 $this->handle = new PDO($db_path);
34 break;
35 case 'mysql':
b668db24
RR
36 $db_path = 'mysql:host=' . STORAGE_SERVER . ';dbname=' . STORAGE_DB . ';charset=utf8mb4';
37 $this->handle = new PDO($db_path, STORAGE_USER, STORAGE_PASSWORD, array(
38 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
39 ));
68857cea
NL
40 break;
41 case 'postgres':
42 $db_path = 'pgsql:host=' . STORAGE_SERVER . ';dbname=' . STORAGE_DB;
182faf26 43 $this->handle = new PDO($db_path, STORAGE_USER, STORAGE_PASSWORD);
68857cea 44 break;
8af31ae0 45 default:
46 die(STORAGE . ' is not a recognised database system !');
68857cea
NL
47 }
48
14890de3 49 $this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
3602405e 50 $this->_checkTags();
580d60b9 51 Tools::logm('storage type ' . STORAGE);
14890de3 52 }
53
b3cda72e
NL
54 private function getHandle()
55 {
14890de3 56 return $this->handle;
57 }
58
b3cda72e
NL
59 private function _checkTags()
60 {
5cfafc61
NL
61
62 if (STORAGE == 'sqlite') {
63 $sql = '
64 CREATE TABLE IF NOT EXISTS tags (
65 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
66 value TEXT
67 )';
68 }
69 elseif(STORAGE == 'mysql') {
70 $sql = '
71 CREATE TABLE IF NOT EXISTS `tags` (
72 `id` int(11) NOT NULL AUTO_INCREMENT,
73 `value` varchar(255) NOT NULL,
74 PRIMARY KEY (`id`)
75 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
76 ';
77 }
78 else {
79 $sql = '
5ce39784 80 CREATE TABLE IF NOT EXISTS tags (
5cfafc61
NL
81 id bigserial primary key,
82 value varchar(255) NOT NULL
83 );
84 ';
85 }
aa8c9f2a 86
5cfafc61
NL
87 $query = $this->executeQuery($sql, array());
88
89 if (STORAGE == 'sqlite') {
90 $sql = '
a562e390 91 CREATE TABLE IF NOT EXISTS tags_entries (
5cfafc61
NL
92 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
93 entry_id INTEGER,
94 tag_id INTEGER,
95 FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
96 FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE
97 )';
98 }
99 elseif(STORAGE == 'mysql') {
100 $sql = '
101 CREATE TABLE IF NOT EXISTS `tags_entries` (
102 `id` int(11) NOT NULL AUTO_INCREMENT,
103 `entry_id` int(11) NOT NULL,
104 `tag_id` int(11) NOT NULL,
105 FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
106 FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE,
107 PRIMARY KEY (`id`)
108 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
109 ';
110 }
111 else {
112 $sql = '
5ce39784 113 CREATE TABLE IF NOT EXISTS tags_entries (
5cfafc61
NL
114 id bigserial primary key,
115 entry_id integer NOT NULL,
116 tag_id integer NOT NULL
117 )
118 ';
119 }
120
121 $query = $this->executeQuery($sql, array());
aa8c9f2a
NL
122 }
123
046b9316 124 public function install($login, $password, $email = '')
b3cda72e 125 {
b916bcfc 126 $sql = 'INSERT INTO users ( username, password, name, email) VALUES (?, ?, ?, ?)';
046b9316 127 $params = array($login, $password, $login, $email);
b916bcfc
NL
128 $query = $this->executeQuery($sql, $params);
129
130 $sequence = '';
131 if (STORAGE == 'postgres') {
132 $sequence = 'users_id_seq';
133 }
134
135 $id_user = intval($this->getLastId($sequence));
136
137 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
00dbaf90 138 $params = array($id_user, 'pager', PAGINATION);
b916bcfc
NL
139 $query = $this->executeQuery($sql, $params);
140
141 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
00dbaf90
NL
142 $params = array($id_user, 'language', LANG);
143 $query = $this->executeQuery($sql, $params);
182faf26 144
00dbaf90
NL
145 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
146 $params = array($id_user, 'theme', DEFAULT_THEME);
7ce7ec4c 147 $query = $this->executeQuery($sql, $params);
aa8c9f2a 148
7ce7ec4c
NL
149 return TRUE;
150 }
aa8c9f2a 151
b3cda72e
NL
152 public function getConfigUser($id)
153 {
7ce7ec4c
NL
154 $sql = "SELECT * FROM users_config WHERE user_id = ?";
155 $query = $this->executeQuery($sql, array($id));
156 $result = $query->fetchAll();
157 $user_config = array();
182faf26 158
7ce7ec4c
NL
159 foreach ($result as $key => $value) {
160 $user_config[$value['name']] = $value['value'];
aa8c9f2a
NL
161 }
162
7ce7ec4c 163 return $user_config;
aa8c9f2a
NL
164 }
165
b3cda72e
NL
166 public function userExists($username)
167 {
027b4e15
DS
168 $sql = "SELECT * FROM users WHERE username=?";
169 $query = $this->executeQuery($sql, array($username));
170 $login = $query->fetchAll();
171 if (isset($login[0])) {
172 return true;
173 } else {
174 return false;
175 }
176 }
177
b3cda72e
NL
178 public function login($username, $password, $isauthenticated = FALSE)
179 {
6af66b11 180 if ($isauthenticated) {
4e067cea
NL
181 $sql = "SELECT * FROM users WHERE username=?";
182 $query = $this->executeQuery($sql, array($username));
6af66b11 183 } else {
4e067cea
NL
184 $sql = "SELECT * FROM users WHERE username=? AND password=?";
185 $query = $this->executeQuery($sql, array($username, $password));
6af66b11 186 }
8d3275be 187 $login = $query->fetchAll();
aa8c9f2a 188
7ce7ec4c
NL
189 $user = array();
190 if (isset($login[0])) {
191 $user['id'] = $login[0]['id'];
192 $user['username'] = $login[0]['username'];
193 $user['password'] = $login[0]['password'];
194 $user['name'] = $login[0]['name'];
195 $user['email'] = $login[0]['email'];
196 $user['config'] = $this->getConfigUser($login[0]['id']);
197 }
aa8c9f2a 198
7ce7ec4c 199 return $user;
aa8c9f2a
NL
200 }
201
00dbaf90 202 public function updatePassword($userId, $password)
6499b26a 203 {
8d3275be 204 $sql_update = "UPDATE users SET password=? WHERE id=?";
1e98ee1d
NL
205 $params_update = array($password, $userId);
206 $query = $this->executeQuery($sql_update, $params_update);
00dbaf90 207 }
182faf26 208
b3cda72e
NL
209 public function updateUserConfig($userId, $key, $value)
210 {
58ace494 211 $config = $this->getConfigUser($userId);
182faf26 212
d1d3498b 213 if (! isset($config[$key])) {
da5fc42f 214 $sql = "INSERT INTO users_config (value, user_id, name) VALUES (?, ?, ?)";
58ace494
NL
215 }
216 else {
da5fc42f 217 $sql = "UPDATE users_config SET value=? WHERE user_id=? AND name=?";
58ace494
NL
218 }
219
220 $params = array($value, $userId, $key);
221 $query = $this->executeQuery($sql, $params);
6499b26a
NL
222 }
223
b3cda72e
NL
224 private function executeQuery($sql, $params)
225 {
14890de3 226 try
227 {
228 $query = $this->getHandle()->prepare($sql);
229 $query->execute($params);
230 return $query;
231 }
232 catch (Exception $e)
233 {
eb1af592 234 Tools::logm('execute query error : '.$e->getMessage());
bc1ee852 235 return FALSE;
14890de3 236 }
237 }
4d99bae8 238
b3cda72e
NL
239 public function listUsers($username = NULL)
240 {
4d99bae8 241 $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : '');
242 $query = $this->executeQuery($sql, ( $username ? array($username) : array()));
243 list($count) = $query->fetch();
244 return $count;
245 }
246
b3cda72e
NL
247 public function getUserPassword($userID)
248 {
4d99bae8 249 $sql = "SELECT * FROM users WHERE id=?";
250 $query = $this->executeQuery($sql, array($userID));
251 $password = $query->fetchAll();
252 return isset($password[0]['password']) ? $password[0]['password'] : null;
253 }
254
b3cda72e
NL
255 public function deleteUserConfig($userID)
256 {
4d99bae8 257 $sql_action = 'DELETE from users_config WHERE user_id=?';
258 $params_action = array($userID);
259 $query = $this->executeQuery($sql_action, $params_action);
260 return $query;
261 }
262
b3cda72e
NL
263 public function deleteTagsEntriesAndEntries($userID)
264 {
4d99bae8 265 $entries = $this->retrieveAll($userID);
266 foreach($entries as $entryid) {
267 $tags = $this->retrieveTagsByEntry($entryid);
268 foreach($tags as $tag) {
269 $this->removeTagForEntry($entryid,$tags);
270 }
271 $this->deleteById($entryid,$userID);
272 }
273 }
274
b3cda72e
NL
275 public function deleteUser($userID)
276 {
4d99bae8 277 $sql_action = 'DELETE from users WHERE id=?';
278 $params_action = array($userID);
279 $query = $this->executeQuery($sql_action, $params_action);
280 }
14890de3 281
b3cda72e
NL
282 public function updateContentAndTitle($id, $title, $body, $user_id)
283 {
53e3158d
NL
284 $sql_action = 'UPDATE entries SET content = ?, title = ? WHERE id=? AND user_id=?';
285 $params_action = array($body, $title, $id, $user_id);
286 $query = $this->executeQuery($sql_action, $params_action);
53e3158d
NL
287 return $query;
288 }
289
b3cda72e
NL
290 public function retrieveUnfetchedEntries($user_id, $limit)
291 {
53e3158d
NL
292
293 $sql_limit = "LIMIT 0,".$limit;
294 if (STORAGE == 'postgres') {
295 $sql_limit = "LIMIT ".$limit." OFFSET 0";
296 }
297
0f859c6f 298 $sql = "SELECT * FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=? ORDER BY id " . $sql_limit;
53e3158d
NL
299 $query = $this->executeQuery($sql, array($user_id));
300 $entries = $query->fetchAll();
301
302 return $entries;
303 }
304
b3cda72e
NL
305 public function retrieveUnfetchedEntriesCount($user_id)
306 {
0f859c6f 307 $sql = "SELECT count(*) FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=?";
182faf26
MR
308 $query = $this->executeQuery($sql, array($user_id));
309 list($count) = $query->fetch();
310
311 return $count;
312 }
313
b3cda72e
NL
314 public function retrieveAll($user_id)
315 {
182faf26 316 $sql = "SELECT * FROM entries WHERE user_id=? ORDER BY id";
8d3275be 317 $query = $this->executeQuery($sql, array($user_id));
44e77bfa 318 $entries = $query->fetchAll();
319
320 return $entries;
321 }
322
b3cda72e
NL
323 public function retrieveOneById($id, $user_id)
324 {
14890de3 325 $entry = NULL;
8d3275be
NL
326 $sql = "SELECT * FROM entries WHERE id=? AND user_id=?";
327 $params = array(intval($id), $user_id);
14890de3 328 $query = $this->executeQuery($sql, $params);
329 $entry = $query->fetchAll();
330
0c2f4537 331 return isset($entry[0]) ? $entry[0] : null;
14890de3 332 }
333
b3cda72e
NL
334 public function retrieveOneByURL($url, $user_id)
335 {
488fc63b 336 $entry = NULL;
182faf26 337 $sql = "SELECT * FROM entries WHERE url=? AND user_id=?";
488fc63b
MR
338 $params = array($url, $user_id);
339 $query = $this->executeQuery($sql, $params);
340 $entry = $query->fetchAll();
341
342 return isset($entry[0]) ? $entry[0] : null;
343 }
344
b3cda72e
NL
345 public function reassignTags($old_entry_id, $new_entry_id)
346 {
488fc63b
MR
347 $sql = "UPDATE tags_entries SET entry_id=? WHERE entry_id=?";
348 $params = array($new_entry_id, $old_entry_id);
349 $query = $this->executeQuery($sql, $params);
350 }
351
b3cda72e
NL
352 public function getEntriesByView($view, $user_id, $limit = '', $tag_id = 0)
353 {
032e0ca1
MR
354 switch ($view) {
355 case 'archive':
182faf26 356 $sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
032e0ca1 357 $params = array($user_id, 1);
14890de3 358 break;
032e0ca1 359 case 'fav' :
182faf26 360 $sql = "SELECT * FROM entries WHERE user_id=? AND is_fav=? ";
032e0ca1 361 $params = array($user_id, 1);
14890de3 362 break;
032e0ca1
MR
363 case 'tag' :
364 $sql = "SELECT entries.* FROM entries
365 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
182faf26 366 WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
032e0ca1 367 $params = array($user_id, $tag_id);
14890de3 368 break;
369 default:
182faf26 370 $sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
032e0ca1 371 $params = array($user_id, 0);
14890de3 372 break;
373 }
374
032e0ca1
MR
375 $sql .= $this->getEntriesOrder().' ' . $limit;
376
377 $query = $this->executeQuery($sql, $params);
378 $entries = $query->fetchAll();
379
380 return $entries;
b3cda72e 381 }
032e0ca1 382
b3cda72e
NL
383 public function getEntriesByViewCount($view, $user_id, $tag_id = 0)
384 {
53e3158d 385 switch ($view) {
14890de3 386 case 'archive':
182faf26 387 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
bc1ee852 388 $params = array($user_id, 1);
14890de3 389 break;
390 case 'fav' :
182faf26 391 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_fav=? ";
bc1ee852 392 $params = array($user_id, 1);
14890de3 393 break;
53e3158d
NL
394 case 'tag' :
395 $sql = "SELECT count(*) FROM entries
396 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
182faf26 397 WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
53e3158d
NL
398 $params = array($user_id, $tag_id);
399 break;
14890de3 400 default:
182faf26 401 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
8d3275be 402 $params = array($user_id, 0);
14890de3 403 break;
404 }
405
8d3275be 406 $query = $this->executeQuery($sql, $params);
032e0ca1 407 list($count) = $query->fetch();
14890de3 408
53e3158d 409 return $count;
14890de3 410 }
411
b3cda72e
NL
412 public function updateContent($id, $content, $user_id)
413 {
b58e261d
NL
414 $sql_action = 'UPDATE entries SET content = ? WHERE id=? AND user_id=?';
415 $params_action = array($content, $id, $user_id);
416 $query = $this->executeQuery($sql_action, $params_action);
417 return $query;
418 }
419
182faf26
MR
420 /**
421 *
422 * @param string $url
423 * @param string $title
424 * @param string $content
425 * @param integer $user_id
426 * @return integer $id of inserted record
427 */
b3cda72e
NL
428 public function add($url, $title, $content, $user_id, $isFavorite=0, $isRead=0)
429 {
6400371f
NL
430 $sql_action = 'INSERT INTO entries ( url, title, content, user_id, is_fav, is_read ) VALUES (?, ?, ?, ?, ?, ?)';
431 $params_action = array($url, $title, $content, $user_id, $isFavorite, $isRead);
5425b0dd 432
182faf26
MR
433 if ( !$this->executeQuery($sql_action, $params_action) ) {
434 $id = null;
435 }
436 else {
1bcbe8be 437 $id = intval($this->getLastId( (STORAGE == 'postgres') ? 'entries_id_seq' : '') );
182faf26
MR
438 }
439 return $id;
14890de3 440 }
441
b3cda72e
NL
442 public function deleteById($id, $user_id)
443 {
8d3275be
NL
444 $sql_action = "DELETE FROM entries WHERE id=? AND user_id=?";
445 $params_action = array($id, $user_id);
14890de3 446 $query = $this->executeQuery($sql_action, $params_action);
29c6fd46 447 return $query;
14890de3 448 }
449
b3cda72e
NL
450 public function favoriteById($id, $user_id)
451 {
bc1ee852 452 $sql_action = "UPDATE entries SET is_fav=NOT is_fav WHERE id=? AND user_id=?";
8d3275be 453 $params_action = array($id, $user_id);
14890de3 454 $query = $this->executeQuery($sql_action, $params_action);
455 }
456
b3cda72e
NL
457 public function archiveById($id, $user_id)
458 {
bc1ee852 459 $sql_action = "UPDATE entries SET is_read=NOT is_read WHERE id=? AND user_id=?";
8d3275be 460 $params_action = array($id, $user_id);
14890de3 461 $query = $this->executeQuery($sql_action, $params_action);
462 }
463
b3cda72e
NL
464 public function archiveAll($user_id)
465 {
f14807de
NL
466 $sql_action = "UPDATE entries SET is_read=? WHERE user_id=? AND is_read=?";
467 $params_action = array($user_id, 1, 0);
468 $query = $this->executeQuery($sql_action, $params_action);
469 }
470
b3cda72e
NL
471 public function getLastId($column = '')
472 {
b916bcfc 473 return $this->getHandle()->lastInsertId($column);
14890de3 474 }
5ce39784 475
b3cda72e
NL
476 public function search($term, $user_id, $limit = '')
477 {
a4585f7e
MR
478 $search = '%'.$term.'%';
479 $sql_action = "SELECT * FROM entries WHERE user_id=? AND (content LIKE ? OR title LIKE ? OR url LIKE ?) "; //searches in content, title and URL
480 $sql_action .= $this->getEntriesOrder().' ' . $limit;
481 $params_action = array($user_id, $search, $search, $search);
482 $query = $this->executeQuery($sql_action, $params_action);
483 return $query->fetchAll();
484 }
5bea1a4d 485
b3cda72e
NL
486 public function retrieveAllTags($user_id, $term = NULL)
487 {
fb26cc93 488 $sql = "SELECT DISTINCT tags.*, count(entries.id) AS entriescount FROM tags
b89d5a2b
NL
489 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
490 LEFT JOIN entries ON tags_entries.entry_id=entries.id
182faf26 491 WHERE entries.user_id=?
fb26cc93
MR
492 ". (($term) ? "AND lower(tags.value) LIKE ?" : '') ."
493 GROUP BY tags.id, tags.value
494 ORDER BY tags.value";
495 $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) ));
2e2ebe5e
NL
496 $tags = $query->fetchAll();
497
498 return $tags;
499 }
500
b3cda72e
NL
501 public function retrieveTag($id, $user_id)
502 {
4886ed6d 503 $tag = NULL;
e83cf5a7 504 $sql = "SELECT DISTINCT tags.* FROM tags
b89d5a2b
NL
505 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
506 LEFT JOIN entries ON tags_entries.entry_id=entries.id
182faf26 507 WHERE tags.id=? AND entries.user_id=?";
b89d5a2b 508 $params = array(intval($id), $user_id);
4886ed6d
NL
509 $query = $this->executeQuery($sql, $params);
510 $tag = $query->fetchAll();
511
b3cda72e 512 return isset($tag[0]) ? $tag[0] : NULL;
4886ed6d
NL
513 }
514
b3cda72e
NL
515 public function retrieveEntriesByTag($tag_id, $user_id)
516 {
182faf26 517 $sql =
9de34d4e 518 "SELECT entries.* FROM entries
4886ed6d 519 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
25052a76 520 WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC";
b89d5a2b 521 $query = $this->executeQuery($sql, array($tag_id, $user_id));
4886ed6d
NL
522 $entries = $query->fetchAll();
523
524 return $entries;
525 }
526
b3cda72e
NL
527 public function retrieveTagsByEntry($entry_id)
528 {
182faf26 529 $sql =
9de34d4e 530 "SELECT tags.* FROM tags
5bea1a4d
NL
531 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
532 WHERE tags_entries.entry_id = ?";
2e2ebe5e
NL
533 $query = $this->executeQuery($sql, array($entry_id));
534 $tags = $query->fetchAll();
5bea1a4d
NL
535
536 return $tags;
537 }
c432fa16 538
b3cda72e
NL
539 public function removeTagForEntry($entry_id, $tag_id)
540 {
c432fa16
NL
541 $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?";
542 $params_action = array($tag_id, $entry_id);
543 $query = $this->executeQuery($sql_action, $params_action);
544 return $query;
545 }
9c743ab9 546
b3cda72e
NL
547 public function cleanUnusedTag($tag_id)
548 {
24696800 549 $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
550 $query = $this->executeQuery($sql_action,array($tag_id));
9c743ab9 551 $tagstokeep = $query->fetchAll();
24696800 552 $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
553 $query = $this->executeQuery($sql_action,array($tag_id));
9c743ab9 554 $alltags = $query->fetchAll();
24696800 555
9c743ab9 556 foreach ($alltags as $tag) {
557 if ($tag && !in_array($tag,$tagstokeep)) {
9c743ab9 558 $sql_action = "DELETE FROM tags WHERE id=?";
559 $params_action = array($tag[0]);
24696800 560 $this->executeQuery($sql_action, $params_action);
561 return true;
9c743ab9 562 }
563 }
24696800 564
9c743ab9 565 }
c432fa16 566
b3cda72e
NL
567 public function retrieveTagByValue($value)
568 {
c432fa16
NL
569 $tag = NULL;
570 $sql = "SELECT * FROM tags WHERE value=?";
571 $params = array($value);
572 $query = $this->executeQuery($sql, $params);
573 $tag = $query->fetchAll();
574
575 return isset($tag[0]) ? $tag[0] : null;
576 }
577
b3cda72e
NL
578 public function createTag($value)
579 {
c432fa16
NL
580 $sql_action = 'INSERT INTO tags ( value ) VALUES (?)';
581 $params_action = array($value);
582 $query = $this->executeQuery($sql_action, $params_action);
583 return $query;
584 }
585
b3cda72e
NL
586 public function setTagToEntry($tag_id, $entry_id)
587 {
c432fa16
NL
588 $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)';
589 $params_action = array($tag_id, $entry_id);
590 $query = $this->executeQuery($sql_action, $params_action);
591 return $query;
592 }
032e0ca1 593
b3cda72e
NL
594 private function getEntriesOrder()
595 {
596 if (isset($_SESSION['sort']) and array_key_exists($_SESSION['sort'], $this->order)) {
597 return $this->order[$_SESSION['sort']];
032e0ca1 598 }
b3cda72e
NL
599 else {
600 return $this->order['default'];
601 }
602 }
2cd263e0 603}