diff options
Diffstat (limited to 'inc/poche')
-rwxr-xr-x | inc/poche/Database.class.php | 165 | ||||
-rwxr-xr-x | inc/poche/Poche.class.php | 177 | ||||
-rwxr-xr-x | inc/poche/Routing.class.php | 16 | ||||
-rwxr-xr-x | inc/poche/Tools.class.php | 39 | ||||
-rw-r--r-- | inc/poche/WallabagEBooks.class.php | 16 | ||||
-rwxr-xr-x | inc/poche/config.inc.default.php | 3 |
6 files changed, 295 insertions, 121 deletions
diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php index 65675afe..7ec1602d 100755 --- a/inc/poche/Database.class.php +++ b/inc/poche/Database.class.php | |||
@@ -156,11 +156,14 @@ class Database { | |||
156 | { | 156 | { |
157 | $sql = "SELECT * FROM users_config WHERE user_id = ?"; | 157 | $sql = "SELECT * FROM users_config WHERE user_id = ?"; |
158 | $query = $this->executeQuery($sql, array($id)); | 158 | $query = $this->executeQuery($sql, array($id)); |
159 | $result = $query->fetchAll(); | 159 | $result = ($query) ? $query->fetchAll() : false; |
160 | $user_config = array(); | 160 | $user_config = false; |
161 | if ($query) { | ||
162 | $user_config = array(); | ||
161 | 163 | ||
162 | foreach ($result as $key => $value) { | 164 | foreach ($result as $key => $value) { |
163 | $user_config[$value['name']] = $value['value']; | 165 | $user_config[$value['name']] = $value['value']; |
166 | } | ||
164 | } | 167 | } |
165 | 168 | ||
166 | return $user_config; | 169 | return $user_config; |
@@ -171,11 +174,7 @@ class Database { | |||
171 | $sql = "SELECT * FROM users WHERE username=?"; | 174 | $sql = "SELECT * FROM users WHERE username=?"; |
172 | $query = $this->executeQuery($sql, array($username)); | 175 | $query = $this->executeQuery($sql, array($username)); |
173 | $login = $query->fetchAll(); | 176 | $login = $query->fetchAll(); |
174 | if (isset($login[0])) { | 177 | return (isset($login[0]) && $query) ? true : false; |
175 | return true; | ||
176 | } else { | ||
177 | return false; | ||
178 | } | ||
179 | } | 178 | } |
180 | 179 | ||
181 | public function login($username, $password, $isauthenticated = FALSE) | 180 | public function login($username, $password, $isauthenticated = FALSE) |
@@ -187,10 +186,10 @@ class Database { | |||
187 | $sql = "SELECT * FROM users WHERE username=? AND password=?"; | 186 | $sql = "SELECT * FROM users WHERE username=? AND password=?"; |
188 | $query = $this->executeQuery($sql, array($username, $password)); | 187 | $query = $this->executeQuery($sql, array($username, $password)); |
189 | } | 188 | } |
190 | $login = $query->fetchAll(); | 189 | $login = ($query) ? $query->fetchAll() : false; |
191 | 190 | ||
192 | $user = array(); | 191 | $user = array(); |
193 | if (isset($login[0])) { | 192 | if ($login[0]) { |
194 | $user['id'] = $login[0]['id']; | 193 | $user['id'] = $login[0]['id']; |
195 | $user['username'] = $login[0]['username']; | 194 | $user['username'] = $login[0]['username']; |
196 | $user['password'] = $login[0]['password']; | 195 | $user['password'] = $login[0]['password']; |
@@ -243,7 +242,7 @@ class Database { | |||
243 | { | 242 | { |
244 | $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : ''); | 243 | $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : ''); |
245 | $query = $this->executeQuery($sql, ( $username ? array($username) : array())); | 244 | $query = $this->executeQuery($sql, ( $username ? array($username) : array())); |
246 | list($count) = $query->fetch(); | 245 | list($count) = ($query) ? $query->fetch() : false; |
247 | return $count; | 246 | return $count; |
248 | } | 247 | } |
249 | 248 | ||
@@ -252,7 +251,7 @@ class Database { | |||
252 | $sql = "SELECT * FROM users WHERE id=?"; | 251 | $sql = "SELECT * FROM users WHERE id=?"; |
253 | $query = $this->executeQuery($sql, array($userID)); | 252 | $query = $this->executeQuery($sql, array($userID)); |
254 | $password = $query->fetchAll(); | 253 | $password = $query->fetchAll(); |
255 | return isset($password[0]['password']) ? $password[0]['password'] : null; | 254 | return ($query) ? $password[0]['password'] : false; |
256 | } | 255 | } |
257 | 256 | ||
258 | public function deleteUserConfig($userID) | 257 | public function deleteUserConfig($userID) |
@@ -260,18 +259,22 @@ class Database { | |||
260 | $sql_action = 'DELETE from users_config WHERE user_id=?'; | 259 | $sql_action = 'DELETE from users_config WHERE user_id=?'; |
261 | $params_action = array($userID); | 260 | $params_action = array($userID); |
262 | $query = $this->executeQuery($sql_action, $params_action); | 261 | $query = $this->executeQuery($sql_action, $params_action); |
263 | return $query; | 262 | return ($query) ? $query : false; |
264 | } | 263 | } |
265 | 264 | ||
266 | public function deleteTagsEntriesAndEntries($userID) | 265 | public function deleteTagsEntriesAndEntries($userID) |
267 | { | 266 | { |
268 | $entries = $this->retrieveAll($userID); | 267 | $entries = $this->retrieveAll($userID); |
269 | foreach($entries as $entryid) { | 268 | if ($entries) { |
270 | $tags = $this->retrieveTagsByEntry($entryid); | 269 | foreach($entries as $entry) { |
271 | foreach($tags as $tag) { | 270 | $tags = $this->retrieveTagsByEntry($entry['id']); |
272 | $this->removeTagForEntry($entryid,$tags); | 271 | foreach($tags as $tag) { |
272 | $this->removeTagForEntry($entry['id'], $tags); | ||
273 | } | ||
274 | $this->deleteById($entryid,$userID); | ||
273 | } | 275 | } |
274 | $this->deleteById($entryid,$userID); | 276 | } else { |
277 | return false; | ||
275 | } | 278 | } |
276 | } | 279 | } |
277 | 280 | ||
@@ -302,7 +305,7 @@ class Database { | |||
302 | $query = $this->executeQuery($sql, array($user_id)); | 305 | $query = $this->executeQuery($sql, array($user_id)); |
303 | $entries = $query->fetchAll(); | 306 | $entries = $query->fetchAll(); |
304 | 307 | ||
305 | return $entries; | 308 | return ($query) ? $entries : false; |
306 | } | 309 | } |
307 | 310 | ||
308 | public function retrieveUnfetchedEntriesCount($user_id) | 311 | public function retrieveUnfetchedEntriesCount($user_id) |
@@ -320,29 +323,44 @@ class Database { | |||
320 | $query = $this->executeQuery($sql, array($user_id)); | 323 | $query = $this->executeQuery($sql, array($user_id)); |
321 | $entries = $query->fetchAll(); | 324 | $entries = $query->fetchAll(); |
322 | 325 | ||
326 | return ($query) ? $entries : false; | ||
327 | } | ||
328 | |||
329 | public function retrieveAllWithTags($user_id) | ||
330 | { | ||
331 | $entries = $this->retrieveAll($user_id); | ||
332 | if ($entries) { | ||
333 | $count = count($entries); | ||
334 | for ($i = 0; $i < $count; $i++) { | ||
335 | $tag_entries = $this->retrieveTagsByEntry($entries[$i]['id']); | ||
336 | $tags = []; | ||
337 | foreach ($tag_entries as $tag) { | ||
338 | $tags[] = $tag[1]; | ||
339 | } | ||
340 | $entries[$i]['tags'] = implode(',', $tags); | ||
341 | } | ||
342 | } | ||
323 | return $entries; | 343 | return $entries; |
324 | } | 344 | } |
325 | 345 | ||
326 | public function retrieveOneById($id, $user_id) | 346 | public function retrieveOneById($id, $user_id) |
327 | { | 347 | { |
328 | $entry = NULL; | ||
329 | $sql = "SELECT * FROM entries WHERE id=? AND user_id=?"; | 348 | $sql = "SELECT * FROM entries WHERE id=? AND user_id=?"; |
330 | $params = array(intval($id), $user_id); | 349 | $params = array(intval($id), $user_id); |
331 | $query = $this->executeQuery($sql, $params); | 350 | $query = $this->executeQuery($sql, $params); |
332 | $entry = $query->fetchAll(); | 351 | $entry = $query->fetchAll(); |
333 | 352 | ||
334 | return isset($entry[0]) ? $entry[0] : null; | 353 | return ($query) ? $entry[0] : false; |
335 | } | 354 | } |
336 | 355 | ||
337 | public function retrieveOneByURL($url, $user_id) | 356 | public function retrieveOneByURL($url, $user_id) |
338 | { | 357 | { |
339 | $entry = NULL; | ||
340 | $sql = "SELECT * FROM entries WHERE url=? AND user_id=?"; | 358 | $sql = "SELECT * FROM entries WHERE url=? AND user_id=?"; |
341 | $params = array($url, $user_id); | 359 | $params = array($url, $user_id); |
342 | $query = $this->executeQuery($sql, $params); | 360 | $query = $this->executeQuery($sql, $params); |
343 | $entry = $query->fetchAll(); | 361 | $entry = $query->fetchAll(); |
344 | 362 | ||
345 | return isset($entry[0]) ? $entry[0] : null; | 363 | return ($query) ? $entry[0] : false; |
346 | } | 364 | } |
347 | 365 | ||
348 | public function reassignTags($old_entry_id, $new_entry_id) | 366 | public function reassignTags($old_entry_id, $new_entry_id) |
@@ -380,7 +398,8 @@ class Database { | |||
380 | $query = $this->executeQuery($sql, $params); | 398 | $query = $this->executeQuery($sql, $params); |
381 | $entries = $query->fetchAll(); | 399 | $entries = $query->fetchAll(); |
382 | 400 | ||
383 | return $entries; | 401 | return ($query) ? $entries : false; |
402 | |||
384 | } | 403 | } |
385 | 404 | ||
386 | public function getEntriesByViewCount($view, $user_id, $tag_id = 0) | 405 | public function getEntriesByViewCount($view, $user_id, $tag_id = 0) |
@@ -407,17 +426,57 @@ class Database { | |||
407 | } | 426 | } |
408 | 427 | ||
409 | $query = $this->executeQuery($sql, $params); | 428 | $query = $this->executeQuery($sql, $params); |
410 | list($count) = $query->fetch(); | 429 | list($count) = ($query) ? $query->fetch() : array(false); |
411 | 430 | ||
412 | return $count; | 431 | return $count; |
413 | } | 432 | } |
414 | public function getRandomId($user_id) { | 433 | public function getRandomId($user_id, $view) { |
415 | $random = (STORAGE == 'mysql') ? 'RAND()' : 'RANDOM()'; | 434 | $random = (STORAGE == 'mysql') ? 'RAND()' : 'RANDOM()'; |
416 | $sql = "SELECT id FROM entries WHERE user_id=? ORDER BY ". $random . " LIMIT 1"; | 435 | switch ($view) { |
417 | $params = array($user_id); | 436 | case 'archive': |
437 | $sql = "SELECT id FROM entries WHERE user_id=? AND is_read=? ORDER BY ". $random . " LIMIT 1"; | ||
438 | $params = array($user_id,1); | ||
439 | break; | ||
440 | case 'fav': | ||
441 | $sql = "SELECT id FROM entries WHERE user_id=? AND is_fav=? ORDER BY ". $random . " LIMIT 1"; | ||
442 | $params = array($user_id,1); | ||
443 | break; | ||
444 | default: | ||
445 | $sql = "SELECT id FROM entries WHERE user_id=? AND is_read=? ORDER BY ". $random . " LIMIT 1"; | ||
446 | $params = array($user_id,0); | ||
447 | break; | ||
448 | } | ||
418 | $query = $this->executeQuery($sql, $params); | 449 | $query = $this->executeQuery($sql, $params); |
419 | $id = $query->fetchAll(); | 450 | $id = $query->fetchAll(); |
420 | 451 | ||
452 | return ($query) ? $id : false; | ||
453 | } | ||
454 | |||
455 | public function getPreviousArticle($id, $user_id) | ||
456 | { | ||
457 | $sqlcondition = "is_read=0"; | ||
458 | if (STORAGE == 'postgres') { | ||
459 | $sqlcondition = "is_read=false"; | ||
460 | } | ||
461 | $sql = "SELECT id FROM entries WHERE id = (SELECT max(id) FROM entries WHERE id < ? AND " . $sqlcondition . ") AND user_id=? AND " . $sqlcondition; | ||
462 | $params = array($id, $user_id); | ||
463 | $query = $this->executeQuery($sql, $params); | ||
464 | $id_entry = ($query) ? $query->fetchAll() : false; | ||
465 | $id = ($query) ? $id_entry[0][0] : false; | ||
466 | return $id; | ||
467 | } | ||
468 | |||
469 | public function getNextArticle($id, $user_id) | ||
470 | { | ||
471 | $sqlcondition = "is_read=0"; | ||
472 | if (STORAGE == 'postgres') { | ||
473 | $sqlcondition = "is_read=false"; | ||
474 | } | ||
475 | $sql = "SELECT id FROM entries WHERE id = (SELECT min(id) FROM entries WHERE id > ? AND " . $sqlcondition . ") AND user_id=? AND " . $sqlcondition; | ||
476 | $params = array($id, $user_id); | ||
477 | $query = $this->executeQuery($sql, $params); | ||
478 | $id_entry = ($query) ? $query->fetchAll() : false; | ||
479 | $id = ($query) ? $id_entry[0][0] : false; | ||
421 | return $id; | 480 | return $id; |
422 | } | 481 | } |
423 | 482 | ||
@@ -493,7 +552,7 @@ class Database { | |||
493 | $sql_action .= $this->getEntriesOrder().' ' . $limit; | 552 | $sql_action .= $this->getEntriesOrder().' ' . $limit; |
494 | $params_action = array($user_id, $search, $search, $search); | 553 | $params_action = array($user_id, $search, $search, $search); |
495 | $query = $this->executeQuery($sql_action, $params_action); | 554 | $query = $this->executeQuery($sql_action, $params_action); |
496 | return $query->fetchAll(); | 555 | return ($query) ? $query->fetchAll() : false; |
497 | } | 556 | } |
498 | 557 | ||
499 | public function retrieveAllTags($user_id, $term = NULL) | 558 | public function retrieveAllTags($user_id, $term = NULL) |
@@ -506,23 +565,23 @@ class Database { | |||
506 | GROUP BY tags.id, tags.value | 565 | GROUP BY tags.id, tags.value |
507 | ORDER BY tags.value"; | 566 | ORDER BY tags.value"; |
508 | $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) )); | 567 | $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) )); |
509 | $tags = $query->fetchAll(); | 568 | $tags = ($query) ? $query->fetchAll() : false; |
510 | 569 | ||
511 | return $tags; | 570 | return $tags; |
512 | } | 571 | } |
513 | 572 | ||
514 | public function retrieveTag($id, $user_id) | 573 | public function retrieveTag($id, $user_id) |
515 | { | 574 | { |
516 | $tag = NULL; | ||
517 | $sql = "SELECT DISTINCT tags.* FROM tags | 575 | $sql = "SELECT DISTINCT tags.* FROM tags |
518 | LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id | 576 | LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id |
519 | LEFT JOIN entries ON tags_entries.entry_id=entries.id | 577 | LEFT JOIN entries ON tags_entries.entry_id=entries.id |
520 | WHERE tags.id=? AND entries.user_id=?"; | 578 | WHERE tags.id=? AND entries.user_id=?"; |
521 | $params = array(intval($id), $user_id); | 579 | $params = array(intval($id), $user_id); |
522 | $query = $this->executeQuery($sql, $params); | 580 | $query = $this->executeQuery($sql, $params); |
523 | $tag = $query->fetchAll(); | 581 | $tags = ($query) ? $query->fetchAll() : false; |
582 | $tag = ($query) ? $tags[0] : false; | ||
524 | 583 | ||
525 | return isset($tag[0]) ? $tag[0] : NULL; | 584 | return $tag[0]; |
526 | } | 585 | } |
527 | 586 | ||
528 | public function retrieveEntriesByTag($tag_id, $user_id) | 587 | public function retrieveEntriesByTag($tag_id, $user_id) |
@@ -532,7 +591,7 @@ class Database { | |||
532 | LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id | 591 | LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id |
533 | WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC"; | 592 | WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC"; |
534 | $query = $this->executeQuery($sql, array($tag_id, $user_id)); | 593 | $query = $this->executeQuery($sql, array($tag_id, $user_id)); |
535 | $entries = $query->fetchAll(); | 594 | $entries = ($query) ? $query->fetchAll() : false; |
536 | 595 | ||
537 | return $entries; | 596 | return $entries; |
538 | } | 597 | } |
@@ -544,7 +603,7 @@ class Database { | |||
544 | LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id | 603 | LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id |
545 | WHERE tags_entries.entry_id = ?"; | 604 | WHERE tags_entries.entry_id = ?"; |
546 | $query = $this->executeQuery($sql, array($entry_id)); | 605 | $query = $this->executeQuery($sql, array($entry_id)); |
547 | $tags = $query->fetchAll(); | 606 | $tags = ($query) ? $query->fetchAll() : false; |
548 | 607 | ||
549 | return $tags; | 608 | return $tags; |
550 | } | 609 | } |
@@ -554,38 +613,40 @@ class Database { | |||
554 | $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?"; | 613 | $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?"; |
555 | $params_action = array($tag_id, $entry_id); | 614 | $params_action = array($tag_id, $entry_id); |
556 | $query = $this->executeQuery($sql_action, $params_action); | 615 | $query = $this->executeQuery($sql_action, $params_action); |
557 | return $query; | 616 | return ($query) ? $query : false; |
558 | } | 617 | } |
559 | 618 | ||
560 | public function cleanUnusedTag($tag_id) | 619 | public function cleanUnusedTag($tag_id) |
561 | { | 620 | { |
562 | $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; | 621 | $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; |
563 | $query = $this->executeQuery($sql_action,array($tag_id)); | 622 | $query = $this->executeQuery($sql_action,array($tag_id)); |
564 | $tagstokeep = $query->fetchAll(); | 623 | $tagstokeep = ($query) ? $query->fetchAll() : false; |
565 | $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; | 624 | $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; |
566 | $query = $this->executeQuery($sql_action,array($tag_id)); | 625 | $query = $this->executeQuery($sql_action,array($tag_id)); |
567 | $alltags = $query->fetchAll(); | 626 | $alltags = ($query) ? $query->fetchAll() : false; |
568 | 627 | ||
569 | foreach ($alltags as $tag) { | 628 | if ($tagstokeep && $alltags) { |
570 | if ($tag && !in_array($tag,$tagstokeep)) { | 629 | foreach ($alltags as $tag) { |
571 | $sql_action = "DELETE FROM tags WHERE id=?"; | 630 | if ($tag && !in_array($tag,$tagstokeep)) { |
572 | $params_action = array($tag[0]); | 631 | $sql_action = "DELETE FROM tags WHERE id=?"; |
573 | $this->executeQuery($sql_action, $params_action); | 632 | $params_action = array($tag[0]); |
574 | return true; | 633 | $this->executeQuery($sql_action, $params_action); |
634 | return true; | ||
635 | } | ||
575 | } | 636 | } |
637 | } else { | ||
638 | return false; | ||
576 | } | 639 | } |
577 | |||
578 | } | 640 | } |
579 | 641 | ||
580 | public function retrieveTagByValue($value) | 642 | public function retrieveTagByValue($value) |
581 | { | 643 | { |
582 | $tag = NULL; | ||
583 | $sql = "SELECT * FROM tags WHERE value=?"; | 644 | $sql = "SELECT * FROM tags WHERE value=?"; |
584 | $params = array($value); | 645 | $params = array($value); |
585 | $query = $this->executeQuery($sql, $params); | 646 | $query = $this->executeQuery($sql, $params); |
586 | $tag = $query->fetchAll(); | 647 | $tag = ($query) ? $query->fetchAll() : false; |
587 | 648 | ||
588 | return isset($tag[0]) ? $tag[0] : null; | 649 | return ($query) ? $tag[0] : false; |
589 | } | 650 | } |
590 | 651 | ||
591 | public function createTag($value) | 652 | public function createTag($value) |
@@ -593,7 +654,7 @@ class Database { | |||
593 | $sql_action = 'INSERT INTO tags ( value ) VALUES (?)'; | 654 | $sql_action = 'INSERT INTO tags ( value ) VALUES (?)'; |
594 | $params_action = array($value); | 655 | $params_action = array($value); |
595 | $query = $this->executeQuery($sql_action, $params_action); | 656 | $query = $this->executeQuery($sql_action, $params_action); |
596 | return $query; | 657 | return ($query) ? $query : false; |
597 | } | 658 | } |
598 | 659 | ||
599 | public function setTagToEntry($tag_id, $entry_id) | 660 | public function setTagToEntry($tag_id, $entry_id) |
@@ -601,7 +662,7 @@ class Database { | |||
601 | $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)'; | 662 | $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)'; |
602 | $params_action = array($tag_id, $entry_id); | 663 | $params_action = array($tag_id, $entry_id); |
603 | $query = $this->executeQuery($sql_action, $params_action); | 664 | $query = $this->executeQuery($sql_action, $params_action); |
604 | return $query; | 665 | return ($query) ? $query : false; |
605 | } | 666 | } |
606 | 667 | ||
607 | private function getEntriesOrder() | 668 | private function getEntriesOrder() |
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index fd2600f3..9014f455 100755 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php | |||
@@ -200,27 +200,34 @@ class Poche | |||
200 | 200 | ||
201 | //search for possible duplicate | 201 | //search for possible duplicate |
202 | $duplicate = NULL; | 202 | $duplicate = NULL; |
203 | $duplicate = $this->store->retrieveOneByURL($url->getUrl(), $this->user->getId()); | 203 | $clean_url = $url->getUrl(); |
204 | 204 | ||
205 | $last_id = $this->store->add($url->getUrl(), $title, $body, $this->user->getId()); | 205 | // Clean URL to remove parameters from feedburner and all this stuff. Taken from Shaarli. |
206 | $i=strpos($clean_url,'&utm_source='); if ($i!==false) $clean_url=substr($clean_url,0,$i); | ||
207 | $i=strpos($clean_url,'?utm_source='); if ($i!==false) $clean_url=substr($clean_url,0,$i); | ||
208 | $i=strpos($clean_url,'#xtor=RSS-'); if ($i!==false) $clean_url=substr($clean_url,0,$i); | ||
209 | |||
210 | $duplicate = $this->store->retrieveOneByURL($clean_url, $this->user->getId()); | ||
211 | |||
212 | $last_id = $this->store->add($clean_url, $title, $body, $this->user->getId()); | ||
206 | if ( $last_id ) { | 213 | if ( $last_id ) { |
207 | Tools::logm('add link ' . $url->getUrl()); | 214 | Tools::logm('add link ' . $clean_url); |
208 | if (DOWNLOAD_PICTURES) { | 215 | if (DOWNLOAD_PICTURES) { |
209 | $content = Picture::filterPicture($body, $url->getUrl(), $last_id); | 216 | $content = Picture::filterPicture($body, $clean_url, $last_id); |
210 | Tools::logm('updating content article'); | 217 | Tools::logm('updating content article'); |
211 | $this->store->updateContent($last_id, $content, $this->user->getId()); | 218 | $this->store->updateContent($last_id, $content, $this->user->getId()); |
212 | } | 219 | } |
213 | 220 | ||
214 | if ($duplicate != NULL) { | 221 | if ($duplicate != NULL) { |
215 | // duplicate exists, so, older entry needs to be deleted (as new entry should go to the top of list), BUT favorite mark and tags should be preserved | 222 | // duplicate exists, so, older entry needs to be deleted (as new entry should go to the top of list), BUT favorite mark and tags should be preserved |
216 | Tools::logm('link ' . $url->getUrl() . ' is a duplicate'); | 223 | Tools::logm('link ' . $clean_url . ' is a duplicate'); |
217 | // 1) - preserve tags and favorite, then drop old entry | 224 | // 1) - preserve tags and favorite, then drop old entry |
218 | $this->store->reassignTags($duplicate['id'], $last_id); | 225 | $this->store->reassignTags($duplicate['id'], $last_id); |
219 | if ($duplicate['is_fav']) { | 226 | if ($duplicate['is_fav']) { |
220 | $this->store->favoriteById($last_id, $this->user->getId()); | 227 | $this->store->favoriteById($last_id, $this->user->getId()); |
221 | } | 228 | } |
222 | if ($this->store->deleteById($duplicate['id'], $this->user->getId())) { | 229 | if ($this->store->deleteById($duplicate['id'], $this->user->getId())) { |
223 | Tools::logm('previous link ' . $url->getUrl() .' entry deleted'); | 230 | Tools::logm('previous link ' . $clean_url .' entry deleted'); |
224 | } | 231 | } |
225 | } | 232 | } |
226 | 233 | ||
@@ -235,7 +242,7 @@ class Poche | |||
235 | } | 242 | } |
236 | else { | 243 | else { |
237 | $this->messages->add('e', _('error during insertion : the link wasn\'t added')); | 244 | $this->messages->add('e', _('error during insertion : the link wasn\'t added')); |
238 | Tools::logm('error during insertion : the link wasn\'t added ' . $url->getUrl()); | 245 | Tools::logm('error during insertion : the link wasn\'t added ' . $clean_url); |
239 | } | 246 | } |
240 | 247 | ||
241 | if ($autoclose == TRUE) { | 248 | if ($autoclose == TRUE) { |
@@ -259,6 +266,15 @@ class Poche | |||
259 | } | 266 | } |
260 | foreach($entry_ids as $id) { | 267 | foreach($entry_ids as $id) { |
261 | $msg = 'delete link #' . $id; | 268 | $msg = 'delete link #' . $id; |
269 | |||
270 | // deleting tags and tags_entries | ||
271 | $tags = $this->store->retrieveTagsByEntry($id); | ||
272 | foreach ($tags as $tag) { | ||
273 | $this->store->removeTagForEntry($id, $tag['id']); | ||
274 | $this->store->cleanUnusedTag($tag['id']); | ||
275 | } | ||
276 | |||
277 | // deleting pictures | ||
262 | if ($this->store->deleteById($id, $this->user->getId())) { | 278 | if ($this->store->deleteById($id, $this->user->getId())) { |
263 | if (DOWNLOAD_PICTURES) { | 279 | if (DOWNLOAD_PICTURES) { |
264 | Picture::removeDirectory(ABS_PATH . $id); | 280 | Picture::removeDirectory(ABS_PATH . $id); |
@@ -303,11 +319,16 @@ class Poche | |||
303 | if ( Tools::isAjaxRequest() ) { | 319 | if ( Tools::isAjaxRequest() ) { |
304 | echo 1; | 320 | echo 1; |
305 | exit; | 321 | exit; |
306 | } | 322 | } else { |
307 | else { | ||
308 | Tools::redirect(); | 323 | Tools::redirect(); |
309 | } | 324 | } |
310 | break; | 325 | break; |
326 | case 'archive_and_next' : | ||
327 | $nextid = $this->store->getPreviousArticle($id, $this->user->getId()); | ||
328 | $this->store->archiveById($id, $this->user->getId()); | ||
329 | Tools::logm('archive link #' . $id); | ||
330 | Tools::redirect('?view=view&id=' . $nextid); | ||
331 | break; | ||
311 | case 'archive_all' : | 332 | case 'archive_all' : |
312 | $this->store->archiveAll($this->user->getId()); | 333 | $this->store->archiveAll($this->user->getId()); |
313 | Tools::logm('archive all links'); | 334 | Tools::logm('archive all links'); |
@@ -394,8 +415,9 @@ class Poche | |||
394 | /* For some unknown reason I can't get displayView() to work here (it redirects to home view afterwards). So here's a dirty fix which redirects directly to URL */ | 415 | /* For some unknown reason I can't get displayView() to work here (it redirects to home view afterwards). So here's a dirty fix which redirects directly to URL */ |
395 | case 'random': | 416 | case 'random': |
396 | Tools::logm('get a random article'); | 417 | Tools::logm('get a random article'); |
397 | if ($this->store->getRandomId($this->user->getId())) { | 418 | $view = $_GET['view']; |
398 | $id_array = $this->store->getRandomId($this->user->getId()); | 419 | if ($this->store->getRandomId($this->user->getId(),$view)) { |
420 | $id_array = $this->store->getRandomId($this->user->getId(),$view); | ||
399 | $id = $id_array[0]; | 421 | $id = $id_array[0]; |
400 | Tools::redirect('?view=view&id=' . $id[0]); | 422 | Tools::redirect('?view=view&id=' . $id[0]); |
401 | Tools::logm('got the article with id ' . $id[0]); | 423 | Tools::logm('got the article with id ' . $id[0]); |
@@ -426,8 +448,9 @@ class Poche | |||
426 | $themes = $this->tpl->getInstalledThemes(); | 448 | $themes = $this->tpl->getInstalledThemes(); |
427 | $languages = $this->language->getInstalledLanguages(); | 449 | $languages = $this->language->getInstalledLanguages(); |
428 | $token = $this->user->getConfigValue('token'); | 450 | $token = $this->user->getConfigValue('token'); |
429 | $http_auth = (isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['REMOTE_USER'])) ? true : false; | 451 | $http_auth = isset($_SERVER['REMOTE_USER']); |
430 | $only_user = ($this->store->listUsers() > 1) ? false : true; | 452 | $only_user = ($this->store->listUsers() > 1) ? false : true; |
453 | $https = substr(Tools::getPocheUrl(), 0, 5) == 'https'; | ||
431 | $tpl_vars = array( | 454 | $tpl_vars = array( |
432 | 'themes' => $themes, | 455 | 'themes' => $themes, |
433 | 'languages' => $languages, | 456 | 'languages' => $languages, |
@@ -440,7 +463,8 @@ class Poche | |||
440 | 'token' => $token, | 463 | 'token' => $token, |
441 | 'user_id' => $this->user->getId(), | 464 | 'user_id' => $this->user->getId(), |
442 | 'http_auth' => $http_auth, | 465 | 'http_auth' => $http_auth, |
443 | 'only_user' => $only_user | 466 | 'only_user' => $only_user, |
467 | 'https' => $https | ||
444 | ); | 468 | ); |
445 | Tools::logm('config view'); | 469 | Tools::logm('config view'); |
446 | break; | 470 | break; |
@@ -453,9 +477,31 @@ class Poche | |||
453 | Tools::redirect(); | 477 | Tools::redirect(); |
454 | } | 478 | } |
455 | $tags = $this->store->retrieveTagsByEntry($id); | 479 | $tags = $this->store->retrieveTagsByEntry($id); |
480 | $all_tags = $this->store->retrieveAllTags($this->user->getId()); | ||
481 | $maximus = 0; | ||
482 | foreach ($all_tags as $eachtag) { // search for the most times a tag is present | ||
483 | if ($eachtag["entriescount"] > $maximus) $maximus = $eachtag["entriescount"]; | ||
484 | } | ||
485 | foreach ($all_tags as $key => $eachtag) { // get the percentage of presence of each tag | ||
486 | $percent = floor(($eachtag["entriescount"] / $maximus) * 100); | ||
487 | |||
488 | if ($percent < 20): // assign a css class, depending on the number of entries count | ||
489 | $cssclass = 'smallesttag'; | ||
490 | elseif ($percent >= 20 and $percent < 40): | ||
491 | $cssclass = 'smalltag'; | ||
492 | elseif ($percent >= 40 and $percent < 60): | ||
493 | $cssclass = 'mediumtag'; | ||
494 | elseif ($percent >= 60 and $percent < 80): | ||
495 | $cssclass = 'largetag'; | ||
496 | else: | ||
497 | $cssclass = 'largesttag'; | ||
498 | endif; | ||
499 | $all_tags[$key]['cssclass'] = $cssclass; | ||
500 | } | ||
456 | $tpl_vars = array( | 501 | $tpl_vars = array( |
457 | 'entry_id' => $id, | 502 | 'entry_id' => $id, |
458 | 'tags' => $tags, | 503 | 'tags' => $tags, |
504 | 'alltags' => $all_tags, | ||
459 | 'entry' => $entry, | 505 | 'entry' => $entry, |
460 | ); | 506 | ); |
461 | break; | 507 | break; |
@@ -509,6 +555,20 @@ class Poche | |||
509 | $flattr->checkItem($entry['url'], $entry['id']); | 555 | $flattr->checkItem($entry['url'], $entry['id']); |
510 | } | 556 | } |
511 | 557 | ||
558 | # previous and next | ||
559 | $previous = FALSE; | ||
560 | $previous_id = $this->store->getPreviousArticle($id, $this->user->getId()); | ||
561 | $next = FALSE; | ||
562 | $next_id = $this->store->getNextArticle($id, $this->user->getId()); | ||
563 | |||
564 | if ($this->store->retrieveOneById($previous_id, $this->user->getId())) { | ||
565 | $previous = TRUE; | ||
566 | } | ||
567 | if ($this->store->retrieveOneById($next_id, $this->user->getId())) { | ||
568 | $next = TRUE; | ||
569 | } | ||
570 | $navigate = array('previous' => $previous, 'previousid' => $previous_id, 'next' => $next, 'nextid' => $next_id); | ||
571 | |||
512 | # tags | 572 | # tags |
513 | $tags = $this->store->retrieveTagsByEntry($entry['id']); | 573 | $tags = $this->store->retrieveTagsByEntry($entry['id']); |
514 | 574 | ||
@@ -516,7 +576,8 @@ class Poche | |||
516 | 'entry' => $entry, | 576 | 'entry' => $entry, |
517 | 'content' => $content, | 577 | 'content' => $content, |
518 | 'flattr' => $flattr, | 578 | 'flattr' => $flattr, |
519 | 'tags' => $tags | 579 | 'tags' => $tags, |
580 | 'navigate' => $navigate | ||
520 | ); | 581 | ); |
521 | } | 582 | } |
522 | else { | 583 | else { |
@@ -529,6 +590,7 @@ class Poche | |||
529 | 'page_links' => '', | 590 | 'page_links' => '', |
530 | 'nb_results' => '', | 591 | 'nb_results' => '', |
531 | 'listmode' => (isset($_COOKIE['listmode']) ? true : false), | 592 | 'listmode' => (isset($_COOKIE['listmode']) ? true : false), |
593 | 'view' => $view, | ||
532 | ); | 594 | ); |
533 | 595 | ||
534 | //if id is given - we retrieve entries by tag: id is tag id | 596 | //if id is given - we retrieve entries by tag: id is tag id |
@@ -539,7 +601,7 @@ class Poche | |||
539 | 601 | ||
540 | $count = $this->store->getEntriesByViewCount($view, $this->user->getId(), $id); | 602 | $count = $this->store->getEntriesByViewCount($view, $this->user->getId(), $id); |
541 | 603 | ||
542 | if ($count > 0) { | 604 | if ($count && $count > 0) { |
543 | $this->pagination->set_total($count); | 605 | $this->pagination->set_total($count); |
544 | $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')), | 606 | $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')), |
545 | $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . (($id)?'&id='.$id:'') . '&' )); | 607 | $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . (($id)?'&id='.$id:'') . '&' )); |
@@ -593,9 +655,6 @@ class Poche | |||
593 | */ | 655 | */ |
594 | private function credentials() | 656 | private function credentials() |
595 | { | 657 | { |
596 | if (isset($_SERVER['PHP_AUTH_USER'])) { | ||
597 | return array($_SERVER['PHP_AUTH_USER'], 'php_auth', true); | ||
598 | } | ||
599 | if (!empty($_POST['login']) && !empty($_POST['password'])) { | 658 | if (!empty($_POST['login']) && !empty($_POST['password'])) { |
600 | return array($_POST['login'], $_POST['password'], false); | 659 | return array($_POST['login'], $_POST['password'], false); |
601 | } | 660 | } |
@@ -635,6 +694,7 @@ class Poche | |||
635 | setlocale(LC_ALL, $language); | 694 | setlocale(LC_ALL, $language); |
636 | bindtextdomain($language, LOCALE); | 695 | bindtextdomain($language, LOCALE); |
637 | textdomain($language); | 696 | textdomain($language); |
697 | bind_textdomain_codeset($language, 'UTF-8'); | ||
638 | 698 | ||
639 | $this->messages->add('s', _('welcome to your wallabag')); | 699 | $this->messages->add('s', _('welcome to your wallabag')); |
640 | Tools::logm('login successful'); | 700 | Tools::logm('login successful'); |
@@ -681,23 +741,45 @@ class Poche | |||
681 | $html->load_file($_FILES['file']['tmp_name']); | 741 | $html->load_file($_FILES['file']['tmp_name']); |
682 | $data = array(); | 742 | $data = array(); |
683 | $read = 0; | 743 | $read = 0; |
684 | foreach (array('ol','ul') as $list) { | 744 | |
685 | foreach ($html->find($list) as $ul) { | 745 | if (Tools::get_doctype($html)->innertext == "<!DOCTYPE NETSCAPE-Bookmark-file-1>") { |
686 | foreach ($ul->find('li') as $li) { | 746 | // Firefox-bookmarks HTML |
687 | $tmpEntry = array(); | 747 | foreach (array('DL','ul') as $list) { |
688 | $a = $li->find('a'); | 748 | foreach ($html->find($list) as $ul) { |
689 | $tmpEntry['url'] = $a[0]->href; | 749 | foreach ($ul->find('DT') as $li) { |
690 | $tmpEntry['tags'] = $a[0]->tags; | 750 | $tmpEntry = array(); |
691 | $tmpEntry['is_read'] = $read; | 751 | $a = $li->find('A'); |
692 | if ($tmpEntry['url']) { | 752 | $tmpEntry['url'] = $a[0]->href; |
693 | $data[] = $tmpEntry; | 753 | $tmpEntry['tags'] = $a[0]->tags; |
754 | $tmpEntry['is_read'] = $read; | ||
755 | if ($tmpEntry['url']) { | ||
756 | $data[] = $tmpEntry; | ||
757 | } | ||
694 | } | 758 | } |
695 | } | 759 | # the second <ol/ul> is for read links |
696 | # the second <ol/ul> is for read links | 760 | $read = ((sizeof($data) && $read)?0:1); |
697 | $read = ((sizeof($data) && $read)?0:1); | 761 | } |
698 | } | 762 | } |
699 | } | 763 | } else { |
700 | } | 764 | // regular HTML |
765 | foreach (array('ol','ul') as $list) { | ||
766 | foreach ($html->find($list) as $ul) { | ||
767 | foreach ($ul->find('li') as $li) { | ||
768 | $tmpEntry = array(); | ||
769 | $a = $li->find('a'); | ||
770 | $tmpEntry['url'] = $a[0]->href; | ||
771 | $tmpEntry['tags'] = $a[0]->tags; | ||
772 | $tmpEntry['is_read'] = $read; | ||
773 | if ($tmpEntry['url']) { | ||
774 | $data[] = $tmpEntry; | ||
775 | } | ||
776 | } | ||
777 | # the second <ol/ul> is for read links | ||
778 | $read = ((sizeof($data) && $read)?0:1); | ||
779 | } | ||
780 | } | ||
781 | } | ||
782 | } | ||
701 | 783 | ||
702 | // for readability structure | 784 | // for readability structure |
703 | 785 | ||
@@ -715,7 +797,7 @@ class Poche | |||
715 | $urlsInserted = array(); //urls of articles inserted | 797 | $urlsInserted = array(); //urls of articles inserted |
716 | foreach($data as $record) { | 798 | foreach($data as $record) { |
717 | $url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : '')); | 799 | $url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : '')); |
718 | if ($url and !in_array($url, $urlsInserted)) { | 800 | if (filter_var($url, FILTER_VALIDATE_URL) and !in_array($url, $urlsInserted)) { |
719 | $title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>'); | 801 | $title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>'); |
720 | $body = (isset($record['content']) ? $record['content'] : ''); | 802 | $body = (isset($record['content']) ? $record['content'] : ''); |
721 | $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0)); | 803 | $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0)); |
@@ -820,14 +902,18 @@ class Poche | |||
820 | */ | 902 | */ |
821 | public function export() | 903 | public function export() |
822 | { | 904 | { |
823 | $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json"; | 905 | $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json"; |
824 | header('Content-Disposition: attachment; filename='.$filename); | 906 | header('Content-Disposition: attachment; filename='.$filename); |
825 | 907 | ||
826 | $entries = $this->store->retrieveAll($this->user->getId()); | 908 | $entries = $this->store->retrieveAllWithTags($this->user->getId()); |
827 | echo $this->tpl->render('export.twig', array( | 909 | if ($entries) { |
828 | 'export' => Tools::renderJson($entries), | 910 | echo $this->tpl->render('export.twig', array( |
829 | )); | 911 | 'export' => Tools::renderJson($entries), |
830 | Tools::logm('export view'); | 912 | )); |
913 | Tools::logm('export view'); | ||
914 | } else { | ||
915 | Tools::logm('error accessing database while exporting'); | ||
916 | } | ||
831 | } | 917 | } |
832 | 918 | ||
833 | /** | 919 | /** |
@@ -903,7 +989,7 @@ class Poche | |||
903 | if (0 == $limit) { | 989 | if (0 == $limit) { |
904 | $limit = count($entries); | 990 | $limit = count($entries); |
905 | } | 991 | } |
906 | if (count($entries) > 0) { | 992 | if ($entries && count($entries) > 0) { |
907 | for ($i = 0; $i < min(count($entries), $limit); $i++) { | 993 | for ($i = 0; $i < min(count($entries), $limit); $i++) { |
908 | $entry = $entries[$i]; | 994 | $entry = $entries[$i]; |
909 | $newItem = $feed->createNewItem(); | 995 | $newItem = $feed->createNewItem(); |
@@ -915,7 +1001,10 @@ class Poche | |||
915 | $feed->addItem($newItem); | 1001 | $feed->addItem($newItem); |
916 | } | 1002 | } |
917 | } | 1003 | } |
918 | 1004 | else | |
1005 | { | ||
1006 | Tools::logm("database error while generating feeds"); | ||
1007 | } | ||
919 | $feed->genarateFeed(); | 1008 | $feed->genarateFeed(); |
920 | exit; | 1009 | exit; |
921 | } | 1010 | } |
diff --git a/inc/poche/Routing.class.php b/inc/poche/Routing.class.php index 177b74d5..fb37a838 100755 --- a/inc/poche/Routing.class.php +++ b/inc/poche/Routing.class.php | |||
@@ -15,6 +15,7 @@ class Routing | |||
15 | protected $view; | 15 | protected $view; |
16 | protected $action; | 16 | protected $action; |
17 | protected $id; | 17 | protected $id; |
18 | protected $autoclose; | ||
18 | protected $url; | 19 | protected $url; |
19 | protected $file; | 20 | protected $file; |
20 | protected $defaultVars = array(); | 21 | protected $defaultVars = array(); |
@@ -74,15 +75,6 @@ class Routing | |||
74 | } elseif (ALLOW_REGISTER && isset($_GET['register'])){ | 75 | } elseif (ALLOW_REGISTER && isset($_GET['register'])){ |
75 | $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser'], $_POST['newuseremail']); | 76 | $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser'], $_POST['newuseremail']); |
76 | Tools::redirect(); | 77 | Tools::redirect(); |
77 | } elseif(isset($_SERVER['PHP_AUTH_USER'])) { | ||
78 | if($this->wallabag->store->userExists($_SERVER['PHP_AUTH_USER'])) { | ||
79 | $this->wallabag->login($this->referer); | ||
80 | } else { | ||
81 | $this->wallabag->messages->add('e', _('login failed: user doesn\'t exist')); | ||
82 | Tools::logm('user doesn\'t exist'); | ||
83 | $tplFile = Tools::getTplFile('login'); | ||
84 | $tplVars['http_auth'] = 1; | ||
85 | } | ||
86 | } elseif(isset($_SERVER['REMOTE_USER'])) { | 78 | } elseif(isset($_SERVER['REMOTE_USER'])) { |
87 | if($this->wallabag->store->userExists($_SERVER['REMOTE_USER'])) { | 79 | if($this->wallabag->store->userExists($_SERVER['REMOTE_USER'])) { |
88 | $this->wallabag->login($this->referer); | 80 | $this->wallabag->login($this->referer); |
@@ -111,9 +103,7 @@ class Routing | |||
111 | $tag_id = (isset($_GET['tag_id']) ? intval($_GET['tag_id']) : 0); | 103 | $tag_id = (isset($_GET['tag_id']) ? intval($_GET['tag_id']) : 0); |
112 | $limit = (isset($_GET['limit']) ? intval($_GET['limit']) : 0); | 104 | $limit = (isset($_GET['limit']) ? intval($_GET['limit']) : 0); |
113 | $this->wallabag->generateFeeds($_GET['token'], filter_var($_GET['user_id'],FILTER_SANITIZE_NUMBER_INT), $tag_id, $_GET['type'], $limit); | 105 | $this->wallabag->generateFeeds($_GET['token'], filter_var($_GET['user_id'],FILTER_SANITIZE_NUMBER_INT), $tag_id, $_GET['type'], $limit); |
114 | } //elseif (ALLOW_REGISTER && isset($_GET['register'])) { | 106 | } |
115 | //$this->wallabag->register | ||
116 | //} | ||
117 | 107 | ||
118 | //allowed ONLY to logged in user | 108 | //allowed ONLY to logged in user |
119 | if (\Session::isLogged() === true) | 109 | if (\Session::isLogged() === true) |
@@ -142,7 +132,7 @@ class Routing | |||
142 | $pdf->producePDF(); | 132 | $pdf->producePDF(); |
143 | } elseif (isset($_GET['import'])) { | 133 | } elseif (isset($_GET['import'])) { |
144 | $import = $this->wallabag->import(); | 134 | $import = $this->wallabag->import(); |
145 | $tplVars = array_merge($this->vars, $import); | 135 | $this->vars = array_merge($this->vars, $import); |
146 | } elseif (isset($_GET['empty-cache'])) { | 136 | } elseif (isset($_GET['empty-cache'])) { |
147 | Tools::emptyCache(); | 137 | Tools::emptyCache(); |
148 | } elseif (isset($_GET['export'])) { | 138 | } elseif (isset($_GET['export'])) { |
diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index d0b31d4f..9c748391 100755 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php | |||
@@ -40,6 +40,8 @@ final class Tools | |||
40 | */ | 40 | */ |
41 | public static function getPocheUrl() | 41 | public static function getPocheUrl() |
42 | { | 42 | { |
43 | $baseUrl = ""; | ||
44 | |||
43 | $https = (!empty($_SERVER['HTTPS']) | 45 | $https = (!empty($_SERVER['HTTPS']) |
44 | && (strtolower($_SERVER['HTTPS']) == 'on')) | 46 | && (strtolower($_SERVER['HTTPS']) == 'on')) |
45 | || (isset($_SERVER["SERVER_PORT"]) | 47 | || (isset($_SERVER["SERVER_PORT"]) |
@@ -72,8 +74,15 @@ final class Tools | |||
72 | $serverport = ''; | 74 | $serverport = ''; |
73 | } | 75 | } |
74 | 76 | ||
75 | return 'http' . ($https ? 's' : '') . '://' | 77 | // check if BASE_URL is configured |
76 | . $host . $serverport . $scriptname; | 78 | if(BASE_URL) { |
79 | $baseUrl = BASE_URL; | ||
80 | } else { | ||
81 | $baseUrl = 'http' . ($https ? 's' : '') . '://' . $host . $serverport; | ||
82 | } | ||
83 | |||
84 | return $baseUrl . $scriptname; | ||
85 | |||
77 | } | 86 | } |
78 | 87 | ||
79 | /** | 88 | /** |
@@ -392,8 +401,11 @@ final class Tools | |||
392 | ); | 401 | ); |
393 | 402 | ||
394 | foreach ($files as $fileInfo) { | 403 | foreach ($files as $fileInfo) { |
395 | $todo = ($fileInfo->isDir() ? 'rmdir' : 'unlink'); | 404 | $filename = $fileInfo->getFilename(); |
396 | $todo($fileInfo->getRealPath()); | 405 | if (!$filename[0] == '.') { |
406 | $todo = ($fileInfo->isDir() ? 'rmdir' : 'unlink'); | ||
407 | $todo($fileInfo->getRealPath()); | ||
408 | } | ||
397 | } | 409 | } |
398 | 410 | ||
399 | Tools::logm('empty cache'); | 411 | Tools::logm('empty cache'); |
@@ -417,4 +429,23 @@ final class Tools | |||
417 | return str_replace('+', '', $token); | 429 | return str_replace('+', '', $token); |
418 | } | 430 | } |
419 | 431 | ||
432 | /** | ||
433 | * | ||
434 | * Returns the doctype for an HTML document (used for Mozilla Bookmarks) | ||
435 | * @param simple_html_dom $doc | ||
436 | * @return doctype $el | ||
437 | * | ||
438 | */ | ||
439 | |||
440 | public static function get_doctype($doc) | ||
441 | { | ||
442 | $els = $doc->find('unknown'); | ||
443 | |||
444 | foreach ($els as $e => $el) | ||
445 | if ($el->parent()->tag == 'root') | ||
446 | return $el; | ||
447 | |||
448 | return NULL; | ||
449 | } | ||
450 | |||
420 | } | 451 | } |
diff --git a/inc/poche/WallabagEBooks.class.php b/inc/poche/WallabagEBooks.class.php index 55831571..ec1e4b27 100644 --- a/inc/poche/WallabagEBooks.class.php +++ b/inc/poche/WallabagEBooks.class.php | |||
@@ -96,7 +96,6 @@ class WallabagEpub extends WallabagEBooks | |||
96 | $bookEnd = "</body>\n</html>\n"; | 96 | $bookEnd = "</body>\n</html>\n"; |
97 | 97 | ||
98 | $log = new Logger("wallabag", TRUE); | 98 | $log = new Logger("wallabag", TRUE); |
99 | $fileDir = CACHE; | ||
100 | 99 | ||
101 | $book = new EPub(EPub::BOOK_VERSION_EPUB3, DEBUG_POCHE); | 100 | $book = new EPub(EPub::BOOK_VERSION_EPUB3, DEBUG_POCHE); |
102 | $log->logLine("new EPub()"); | 101 | $log->logLine("new EPub()"); |
@@ -121,8 +120,12 @@ class WallabagEpub extends WallabagEBooks | |||
121 | $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "PHP"); | 120 | $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "PHP"); |
122 | $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "wallabag"); | 121 | $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "wallabag"); |
123 | 122 | ||
124 | $cssData = "body {\n margin-left: .5em;\n margin-right: .5em;\n text-align: justify;\n}\n\np {\n font-family: serif;\n font-size: 10pt;\n text-align: justify;\n text-indent: 1em;\n margin-top: 0px;\n margin-bottom: 1ex;\n}\n\nh1, h2 {\n font-family: sans-serif;\n font-style: italic;\n text-align: center;\n background-color: #6b879c;\n color: white;\n width: 100%;\n}\n\nh1 {\n margin-bottom: 2px;\n}\n\nh2 {\n margin-top: -2px;\n margin-bottom: 2px;\n}\n"; | 123 | /* |
125 | 124 | * Line not used but planned to be used | |
125 | * | ||
126 | *$cssData = "body {\n margin-left: .5em;\n margin-right: .5em;\n text-align: justify;\n}\n\np {\n font-family: serif;\n font-size: 10pt;\n text-align: justify;\n text-indent: 1em;\n margin-top: 0px;\n margin-bottom: 1ex;\n}\n\nh1, h2 {\n font-family: sans-serif;\n font-style: italic;\n text-align: center;\n background-color: #6b879c;\n color: white;\n width: 100%;\n}\n\nh1 {\n margin-bottom: 2px;\n}\n\nh2 {\n margin-top: -2px;\n margin-bottom: 2px;\n}\n"; | ||
127 | */ | ||
128 | |||
126 | $log->logLine("Add Cover"); | 129 | $log->logLine("Add Cover"); |
127 | 130 | ||
128 | $fullTitle = "<h1> " . $this->bookTitle . "</h1>\n"; | 131 | $fullTitle = "<h1> " . $this->bookTitle . "</h1>\n"; |
@@ -180,8 +183,6 @@ class WallabagMobi extends WallabagEBooks | |||
180 | $mobi = new MOBI(); | 183 | $mobi = new MOBI(); |
181 | $content = new MOBIFile(); | 184 | $content = new MOBIFile(); |
182 | 185 | ||
183 | $messages = new Messages(); // for later | ||
184 | |||
185 | Tools::logm('Filling metadata for Mobi...'); | 186 | Tools::logm('Filling metadata for Mobi...'); |
186 | 187 | ||
187 | $content->set("title", $this->bookTitle); | 188 | $content->set("title", $this->bookTitle); |
@@ -243,10 +244,9 @@ class WallabagPDF extends WallabagEbooks | |||
243 | 244 | ||
244 | $pdf->writeHTMLCell(0, 0, '', '', $intro, 0, 1, 0, true, '', true); | 245 | $pdf->writeHTMLCell(0, 0, '', '', $intro, 0, 1, 0, true, '', true); |
245 | 246 | ||
246 | $i = 1; | ||
247 | Tools::logm('Adding actual content...'); | 247 | Tools::logm('Adding actual content...'); |
248 | foreach ($this->entries as $item) { | 248 | foreach ($this->entries as $item) { |
249 | $tags = $this->wallabag->store->retrieveTagsByEntry($entry['id']); | 249 | $tags = $this->wallabag->store->retrieveTagsByEntry($item['id']); |
250 | foreach ($tags as $tag) { | 250 | foreach ($tags as $tag) { |
251 | $pdf->SetKeywords($tag['value']); | 251 | $pdf->SetKeywords($tag['value']); |
252 | } | 252 | } |
@@ -260,7 +260,7 @@ class WallabagPDF extends WallabagEbooks | |||
260 | $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); | 260 | $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); |
261 | 261 | ||
262 | 262 | ||
263 | $pdf->Output($this->bookFileName . '.pdf', 'FD'); | 263 | $pdf->Output('cache/' . $this->bookFileName . '.pdf', 'FD'); |
264 | } | 264 | } |
265 | catch (Exception $e) { | 265 | catch (Exception $e) { |
266 | Tools::logm('TCPDF has encountered an error : '.$e->getMessage()); | 266 | Tools::logm('TCPDF has encountered an error : '.$e->getMessage()); |
diff --git a/inc/poche/config.inc.default.php b/inc/poche/config.inc.default.php index 09d3aa9a..5d889ffd 100755 --- a/inc/poche/config.inc.default.php +++ b/inc/poche/config.inc.default.php | |||
@@ -31,6 +31,9 @@ | |||
31 | // Change this if not using the standart port for SSL - i.e you server is behind sslh | 31 | // Change this if not using the standart port for SSL - i.e you server is behind sslh |
32 | @define ('SSL_PORT', 443); | 32 | @define ('SSL_PORT', 443); |
33 | 33 | ||
34 | // Define this only if you use wallabag behind a proxy and if you encounter problems | ||
35 | @define ('BASE_URL', ''); | ||
36 | |||
34 | @define ('MODE_DEMO', FALSE); | 37 | @define ('MODE_DEMO', FALSE); |
35 | @define ('DEBUG_POCHE', FALSE); | 38 | @define ('DEBUG_POCHE', FALSE); |
36 | 39 | ||