X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fpoche%2FPoche.class.php;h=56910bc03deb94f238a2f8f2a3fb3dfeb861dc97;hb=a3436d4cbaa3ad059e64bd77cfe789beecacf87c;hp=ce5bb54a64b229136896642377ba516e0d69808f;hpb=8d3275bee488d058c6ff0efe6e81d20a584d3709;p=github%2Fwallabag%2Fwallabag.git diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index ce5bb54a..56910bc0 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -16,9 +16,9 @@ class Poche public $messages; public $pagination; - function __construct($storage_type) + function __construct() { - $this->store = new $storage_type(); + $this->store = new Database(); $this->init(); $this->messages = new Messages(); @@ -31,10 +31,15 @@ class Poche private function init() { + if (file_exists('./install') && !DEBUG_POCHE) { + Tools::logm('folder /install exists'); + die('the folder /install exists, you have to delete it before using poche.'); + } + Tools::initPhp(); Session::init(); - if (isset($_SESSION['poche_user'])) { + if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) { $this->user = $_SESSION['poche_user']; } else { @@ -52,9 +57,13 @@ class Poche # template engine $loader = new Twig_Loader_Filesystem(TPL); - $this->tpl = new Twig_Environment($loader, array( - 'cache' => CACHE, - )); + if (DEBUG_POCHE) { + $twig_params = array(); + } + else { + $twig_params = array('cache' => CACHE); + } + $this->tpl = new Twig_Environment($loader, $twig_params); $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); # filter to display domain name of an url $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain'); @@ -98,7 +107,7 @@ class Poche /** * Call action (mark as fav, archive, delete, etc.) */ - public function action($action, Url $url, $id = 0) + public function action($action, Url $url, $id = 0, $import = FALSE) { switch ($action) { @@ -106,46 +115,63 @@ class Poche if($parametres_url = $url->fetchContent()) { if ($this->store->add($url->getUrl(), $parametres_url['title'], $parametres_url['content'], $this->user->getId())) { Tools::logm('add link ' . $url->getUrl()); - $last_id = $this->store->getLastId(); + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } + $last_id = $this->store->getLastId($sequence); if (DOWNLOAD_PICTURES) { $content = filtre_picture($parametres_url['content'], $url->getUrl(), $last_id); } - $this->messages->add('s', _('the link has been added successfully')); + if (!$import) { + $this->messages->add('s', _('the link has been added successfully')); + } } else { - $this->messages->add('e', _('error during insertion : the link wasn\'t added')); - Tools::logm('error during insertion : the link wasn\'t added'); + if (!$import) { + $this->messages->add('e', _('error during insertion : the link wasn\'t added')); + Tools::logm('error during insertion : the link wasn\'t added ' . $url->getUrl()); + } } } else { - $this->messages->add('e', _('error during fetching content : the link wasn\'t added')); - Tools::logm('error during content fetch'); + if (!$import) { + $this->messages->add('e', _('error during fetching content : the link wasn\'t added')); + Tools::logm('error during content fetch ' . $url->getUrl()); + } + } + if (!$import) { + Tools::redirect(); } - Tools::redirect(); break; case 'delete': + $msg = 'delete link #' . $id; if ($this->store->deleteById($id, $this->user->getId())) { if (DOWNLOAD_PICTURES) { remove_directory(ABS_PATH . $id); } $this->messages->add('s', _('the link has been deleted successfully')); - Tools::logm('delete link #' . $id); } else { $this->messages->add('e', _('the link wasn\'t deleted')); - Tools::logm('error : can\'t delete link #' . $id); + $msg = 'error : can\'t delete link #' . $id; } - Tools::redirect(); + Tools::logm($msg); + Tools::redirect('?'); break; case 'toggle_fav' : $this->store->favoriteById($id, $this->user->getId()); Tools::logm('mark as favorite link #' . $id); - Tools::redirect(); + if (!$import) { + Tools::redirect(); + } break; case 'toggle_archive' : $this->store->archiveById($id, $this->user->getId()); Tools::logm('archive link #' . $id); - Tools::redirect(); + if (!$import) { + Tools::redirect(); + } break; default: break; @@ -206,6 +232,13 @@ class Poche return $tpl_vars; } + /** + * update the password of the current user. + * if MODE_DEMO is TRUE, the password can't be updated. + * @todo add the return value + * @todo set the new password in function header like this updatePassword($newPassword) + * @return boolean + */ public function updatePassword() { if (MODE_DEMO) { @@ -230,6 +263,13 @@ class Poche } } + /** + * checks if login & password are correct and save the user in session. + * it redirects the user to the $referer link + * @param string $referer the url to redirect after login + * @todo add the return value + * @return boolean + */ public function login($referer) { if (!empty($_POST['login']) && !empty($_POST['password'])) { @@ -260,20 +300,31 @@ class Poche } } + /** + * log out the poche user. It cleans the session. + * @todo add the return value + * @return boolean + */ public function logout() { - $this->messages->add('s', _('see you soon!')); - Tools::logm('logout'); $this->user = array(); Session::logout(); + $this->messages->add('s', _('see you soon!')); + Tools::logm('logout'); Tools::redirect(); } + /** + * import from Instapaper. poche needs a ./instapaper-export.html file + * @todo add the return value + * @return boolean + */ private function importFromInstapaper() { # TODO gestion des articles favs $html = new simple_html_dom(); $html->load_file('./instapaper-export.html'); + Tools::logm('starting import from instapaper'); $read = 0; $errors = array(); @@ -283,10 +334,14 @@ class Poche { $a = $li->find('a'); $url = new Url(base64_encode($a[0]->href)); - $this->action('add', $url); + $this->action('add', $url, 0, TRUE); if ($read == '1') { - $last_id = $this->store->getLastId(); - $this->action('toggle_archive', $url, $last_id); + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_archive', $url, $last_id, TRUE); } } @@ -298,11 +353,17 @@ class Poche Tools::redirect(); } + /** + * import from Pocket. poche needs a ./ril_export.html file + * @todo add the return value + * @return boolean + */ private function importFromPocket() { # TODO gestion des articles favs $html = new simple_html_dom(); $html->load_file('./ril_export.html'); + Tools::logm('starting import from pocket'); $read = 0; $errors = array(); @@ -312,10 +373,14 @@ class Poche { $a = $li->find('a'); $url = new Url(base64_encode($a[0]->href)); - $this->action('add', $url); + $this->action('add', $url, 0, TRUE); if ($read == '1') { - $last_id = $this->store->getLastId(); - $this->action('toggle_archive', $url, $last_id); + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_archive', $url, $last_id, TRUE); } } @@ -327,11 +392,17 @@ class Poche Tools::redirect(); } + /** + * import from Readability. poche needs a ./readability file + * @todo add the return value + * @return boolean + */ private function importFromReadability() { # TODO gestion des articles lus / favs $str_data = file_get_contents("./readability"); $data = json_decode($str_data,true); + Tools::logm('starting import from Readability'); foreach ($data as $key => $value) { $url = ''; @@ -339,37 +410,51 @@ class Poche if ($attr == 'article__url') { $url = new Url(base64_encode($attr_value)); } + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } // if ($attr_value == 'favorite' && $attr_value == 'true') { - // $last_id = $this->store->getLastId(); + // $last_id = $this->store->getLastId($sequence); // $this->store->favoriteById($last_id); - // $this->action('toogle_fav', $url, $last_id); - // } - // if ($attr_value == 'archive' && $attr_value == 'true') { - // $last_id = $this->store->getLastId(); - // $this->action('toggle_archive', $url, $last_id); + // $this->action('toogle_fav', $url, $last_id, TRUE); // } + if ($attr_value == 'archive' && $attr_value == 'true') { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_archive', $url, $last_id, TRUE); + } } if ($url->isCorrect()) - $this->action('add', $url); + $this->action('add', $url, 0, TRUE); } $this->messages->add('s', _('import from Readability completed')); Tools::logm('import from Readability completed'); Tools::redirect(); } + /** + * import datas into your poche + * @param string $from name of the service to import : pocket, instapaper or readability + * @todo add the return value + * @return boolean + */ public function import($from) { if ($from == 'pocket') { - $this->importFromPocket(); + return $this->importFromPocket(); } else if ($from == 'readability') { - $this->importFromReadability(); + return $this->importFromReadability(); } else if ($from == 'instapaper') { - $this->importFromInstapaper(); + return $this->importFromInstapaper(); } } + /** + * export poche entries in json + * @return json all poche entries + */ public function export() { $entries = $this->store->retrieveAll($this->user->getId()); @@ -379,13 +464,20 @@ class Poche Tools::logm('export view'); } + /** + * Checks online the latest version of poche and cache it + * @param string $which 'prod' or 'dev' + * @return string latest $which version + */ private function getPocheVersion($which = 'prod') { $cache_file = CACHE . '/' . $which; + + # checks if the cached version file exists if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 86400 ))) { $version = file_get_contents($cache_file); } else { - $version = file_get_contents('http://www.inthepoche.com/' . $which); + $version = file_get_contents('http://static.inthepoche.com/versions/' . $which); file_put_contents($cache_file, $version, LOCK_EX); } return $version;