X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=inc%2Fpoche%2FPoche.class.php;h=e0dc0d201daa27532d7aee8c82cfdf00812874a8;hb=fd99a8c02d7c625771656a5c5081560027d8e6e9;hp=38b4a98ea803e7e464c15d4dee166bc0c71ab918;hpb=b916bcfccc5a8b1c1852c0bf39bb6f9837296a4e;p=github%2Fwallabag%2Fwallabag.git diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 38b4a98e..e0dc0d20 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -18,6 +18,10 @@ class Poche function __construct() { + $this->initTpl(); + if (!$this->checkBeforeInstall()) { + exit; + } $this->store = new Database(); $this->init(); $this->messages = new Messages(); @@ -29,6 +33,63 @@ class Poche } } + /** + * all checks before installation. + * @return boolean + */ + private function checkBeforeInstall() + { + $msg = ''; + $allIsGood = TRUE; + + if (!is_writable(CACHE)) { + Tools::logm('you don\'t have write access on cache directory'); + die('You don\'t have write access on cache directory.'); + } + else if (file_exists('./install/update.php') && !DEBUG_POCHE) { + $msg = 'A poche update is needed. Please execute this update by clicking here. If you have already do the update, please delete /install folder.'; + $allIsGood = FALSE; + } + else if (file_exists('./install') && !DEBUG_POCHE) { + $msg = 'If you want to update your poche, you just have to delete /install folder.
To install your poche with sqlite, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.'; + $allIsGood = FALSE; + } + else if (STORAGE == 'sqlite' && !is_writable(STORAGE_SQLITE)) { + Tools::logm('you don\'t have write access on sqlite file'); + $msg = 'You don\'t have write access on sqlite file.'; + $allIsGood = FALSE; + } + + if (!$allIsGood) { + echo $this->tpl->render('error.twig', array( + 'msg' => $msg + )); + } + + return $allIsGood; + } + + private function initTpl() + { + # template engine + $loader = new Twig_Loader_Filesystem(TPL); + 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'); + $this->tpl->addFilter($filter); + + # filter for reading time + $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime'); + $this->tpl->addFilter($filter); + } + private function init() { Tools::initPhp(); @@ -50,20 +111,6 @@ class Poche bindtextdomain($language, LOCALE); textdomain($language); - # template engine - $loader = new Twig_Loader_Filesystem(TPL); - 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'); - $this->tpl->addFilter($filter); - # Pagination $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p'); } @@ -78,10 +125,12 @@ class Poche if (($_POST['password'] == $_POST['password_repeat']) && $_POST['password'] != "" && $_POST['login'] != "") { # let's rock, install poche baby ! - $this->store->install($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login'])); - Session::logout(); - Tools::logm('poche is now installed'); - Tools::redirect(); + if ($this->store->install($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']))) + { + Session::logout(); + Tools::logm('poche is now installed'); + Tools::redirect(); + } } else { Tools::logm('error during installation'); @@ -117,6 +166,8 @@ class Poche $last_id = $this->store->getLastId($sequence); if (DOWNLOAD_PICTURES) { $content = filtre_picture($parametres_url['content'], $url->getUrl(), $last_id); + Tools::logm('updating content article'); + $this->store->updateContent($last_id, $content, $this->user->getId()); } if (!$import) { $this->messages->add('s', _('the link has been added successfully')); @@ -169,6 +220,7 @@ class Poche } break; default: + Tools::logm('action ' . $action . 'doesn\'t exist'); break; } } @@ -208,7 +260,7 @@ class Poche ); } else { - Tools::logm('error in view call : entry is NULL'); + Tools::logm('error in view call : entry is null'); } break; default: # home view @@ -227,6 +279,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) { @@ -251,6 +310,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'])) { @@ -281,6 +347,11 @@ class Poche } } + /** + * log out the poche user. It cleans the session. + * @todo add the return value + * @return boolean + */ public function logout() { $this->user = array(); @@ -290,6 +361,11 @@ class Poche 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 @@ -324,6 +400,11 @@ 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 @@ -358,15 +439,22 @@ 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'); - + $count = 0; foreach ($data as $key => $value) { - $url = ''; + $url = NULL; + $favorite = FALSE; + $archive = FALSE; foreach ($value as $attr => $attr_value) { if ($attr == 'article__url') { $url = new Url(base64_encode($attr_value)); @@ -375,37 +463,57 @@ class Poche if (STORAGE == 'postgres') { $sequence = 'entries_id_seq'; } - // if ($attr_value == 'favorite' && $attr_value == 'true') { - // $last_id = $this->store->getLastId($sequence); - // $this->store->favoriteById($last_id); - // $this->action('toogle_fav', $url, $last_id, TRUE); - // } - if ($attr_value == 'archive' && $attr_value == 'true') { + if ($attr_value == 'true') { + if ($attr == 'favorite') { + $favorite = TRUE; + } + if ($attr == 'archive') { + $archive = TRUE; + } + } + } + # we can add the url + if (!is_null($url) && $url->isCorrect()) { + $this->action('add', $url, 0, TRUE); + $count++; + if ($favorite) { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_fav', $url, $last_id, TRUE); + } + if ($archive) { $last_id = $this->store->getLastId($sequence); $this->action('toggle_archive', $url, $last_id, TRUE); } } - if ($url->isCorrect()) - $this->action('add', $url, 0, TRUE); } - $this->messages->add('s', _('import from Readability completed')); + $this->messages->add('s', _('import from Readability completed. ' . $count . ' new links.')); 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()); @@ -415,9 +523,16 @@ 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 {