]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - inc/poche/Poche.class.php
file to update from 0.x to 1.x \o/
[github/wallabag/wallabag.git] / inc / poche / Poche.class.php
index f9bcf85bf71693902dac5f2734f0ec3b63ffc8b3..0a43df71ff3e7986da61143e6a93c3940744730e 100644 (file)
 
 class Poche
 {
+    public $user;
     public $store;
     public $tpl;
+    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();
 
         # installation
         if(!$this->store->isInstalled())
         {
             $this->install();
         }
-
-        $this->saveUser();
     }
 
     private function init() 
     {
+        Tools::initPhp();
+        Session::init();
+
+        if (isset($_SESSION['poche_user'])) {
+            $this->user = $_SESSION['poche_user'];
+        }
+        else {
+            # fake user, just for install & login screens
+            $this->user = new User();
+            $this->user->setConfig($this->getDefaultConfig());
+        }
+
         # l10n
-        putenv('LC_ALL=' . LANG);
-        setlocale(LC_ALL, LANG);
-        bindtextdomain(LANG, LOCALE); 
-        textdomain(LANG); 
+        $language = $this->user->getConfigValue('language');
+        putenv('LC_ALL=' . $language);
+        setlocale(LC_ALL, $language);
+        bindtextdomain($language, LOCALE); 
+        textdomain($language); 
 
         # 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');
+        $this->tpl->addFilter($filter);
 
-        Tools::initPhp();
-        Session::init();
+        # Pagination
+        $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
     }
 
     private function install() 
     {
         Tools::logm('poche still not installed');
         echo $this->tpl->render('install.twig', array(
-            'token' => Session::getToken(),
+            'token' => Session::getToken()
         ));
         if (isset($_GET['install'])) {
             if (($_POST['password'] == $_POST['password_repeat']) 
@@ -58,16 +80,23 @@ class Poche
                 # 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();
+            }
+            else {
+                Tools::logm('error during installation');
                 Tools::redirect();
             }
         }
         exit();
     }
 
-    private function saveUser()
+    public function getDefaultConfig()
     {
-        $_SESSION['login'] = (isset ($_SESSION['login'])) ? $_SESSION['login'] : $this->store->getLogin();
-        $_SESSION['pass'] = (isset ($_SESSION['pass'])) ? $_SESSION['pass'] : $this->store->getPassword();
+        return array(
+            'pager' => PAGINATION,
+            'language' => LANG,
+            );
     }
 
     /**
@@ -79,44 +108,49 @@ class Poche
         {
             case 'add':
                 if($parametres_url = $url->fetchContent()) {
-                    if ($this->store->add($url->getUrl(), $parametres_url['title'], $parametres_url['content'])) {
+                    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();
                         if (DOWNLOAD_PICTURES) {
                             $content = filtre_picture($parametres_url['content'], $url->getUrl(), $last_id);
                         }
-                        #$msg->add('s', _('the link has been added successfully'));
+                        $this->messages->add('s', _('the link has been added successfully'));
                     }
                     else {
-                        #$msg->add('e', _('error during insertion : the link wasn\'t added'));
+                        $this->messages->add('e', _('error during insertion : the link wasn\'t added'));
                         Tools::logm('error during insertion : the link wasn\'t added');
                     }
                 }
                 else {
-                    #$msg->add('e', _('error during url preparation : the link wasn\'t added'));
+                    $this->messages->add('e', _('error during fetching content : the link wasn\'t added'));
                     Tools::logm('error during content fetch');
                 }
+                Tools::redirect();
                 break;
             case 'delete':
-                if ($this->store->deleteById($id)) {
+                $msg = 'delete link #' . $id;
+                if ($this->store->deleteById($id, $this->user->getId())) {
                     if (DOWNLOAD_PICTURES) {
                         remove_directory(ABS_PATH . $id);
                     }
-                    #$msg->add('s', _('the link has been deleted successfully'));
-                    Tools::logm('delete link #' . $id);
+                    $this->messages->add('s', _('the link has been deleted successfully'));
                 }
                 else {
-                    #$msg->add('e', _('the link wasn\'t deleted'));
-                    Tools::logm('error : can\'t delete link #' . $id);
+                    $this->messages->add('e', _('the link wasn\'t deleted'));
+                    $msg = 'error : can\'t delete link #' . $id;
                 }
+                Tools::logm($msg);
+                Tools::redirect('?');
                 break;
             case 'toggle_fav' :
-                $this->store->favoriteById($id);
+                $this->store->favoriteById($id, $this->user->getId());
                 Tools::logm('mark as favorite link #' . $id);
+                Tools::redirect();
                 break;
             case 'toggle_archive' :
-                $this->store->archiveById($id);
+                $this->store->archiveById($id, $this->user->getId());
                 Tools::logm('archive link #' . $id);
+                Tools::redirect();
                 break;
             default:
                 break;
@@ -143,7 +177,7 @@ class Poche
                 Tools::logm('config view');
                 break;
             case 'view':
-                $entry = $this->store->retrieveOneById($id);
+                $entry = $this->store->retrieveOneById($id, $this->user->getId());
                 if ($entry != NULL) {
                     Tools::logm('view link #' . $id);
                     $content = $entry['content'];
@@ -162,10 +196,15 @@ class Poche
                 }
                 break;
             default: # home view
-                $entries = $this->store->getEntriesByView($view);
+                $entries = $this->store->getEntriesByView($view, $this->user->getId());
+                $this->pagination->set_total(count($entries));
+                $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&');
+                $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit());
                 $tpl_vars = array(
-                    'entries' => $entries,
+                    'entries' => $datas,
+                    'page_links' => $page_links,
                 );
+                Tools::logm('display ' . $view . ' view');
                 break;
         }
 
@@ -174,16 +213,23 @@ class Poche
 
     public function updatePassword()
     {
-        if (isset($_POST['password']) && isset($_POST['password_repeat'])) {
-            if ($_POST['password'] == $_POST['password_repeat'] && $_POST['password'] != "") {
-                if (!MODE_DEMO) {
-                    Tools::logm('password updated');
-                    $this->store->updatePassword(Tools::encodeString($_POST['password'] . $_SESSION['login']));
+        if (MODE_DEMO) {
+            $this->messages->add('i', _('in demo mode, you can\'t update your password'));
+            Tools::logm('in demo mode, you can\'t do this');
+            Tools::redirect('?view=config');
+        }
+        else {
+            if (isset($_POST['password']) && isset($_POST['password_repeat'])) {
+                if ($_POST['password'] == $_POST['password_repeat'] && $_POST['password'] != "") {
+                    $this->messages->add('s', _('your password has been updated'));
+                    $this->store->updatePassword($this->user->getId(), Tools::encodeString($_POST['password'] . $this->user->getUsername()));
                     Session::logout();
+                    Tools::logm('password updated');
                     Tools::redirect();
                 }
                 else {
-                    Tools::logm('in demo mode, you can\'t do this');
+                    $this->messages->add('e', _('the two fields have to be filled & the password must be the same in the two fields'));
+                    Tools::redirect('?view=config');
                 }
             }
         }
@@ -192,9 +238,12 @@ class Poche
     public function login($referer)
     {
         if (!empty($_POST['login']) && !empty($_POST['password'])) {
-            if (Session::login($_SESSION['login'], $_SESSION['pass'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']))) {
-                Tools::logm('login successful');
+            $user = $this->store->login($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']));
+            if ($user != array()) {
+                # Save login into Session
+                Session::login($user['username'], $user['password'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']), array('poche_user' => new User($user)));
 
+                $this->messages->add('s', _('welcome to your poche'));
                 if (!empty($_POST['longlastingsession'])) {
                     $_SESSION['longlastingsession'] = 31536000;
                     $_SESSION['expires_on'] = time() + $_SESSION['longlastingsession'];
@@ -203,11 +252,14 @@ class Poche
                     session_set_cookie_params(0);
                 }
                 session_regenerate_id(true);
+                Tools::logm('login successful');
                 Tools::redirect($referer);
             }
+            $this->messages->add('e', _('login failed: bad login or password'));
             Tools::logm('login failed');
             Tools::redirect();
         } else {
+            $this->messages->add('e', _('login failed: you have to fill all fields'));
             Tools::logm('login failed');
             Tools::redirect();
         }
@@ -215,7 +267,9 @@ class Poche
 
     public function logout()
     {
+        $this->messages->add('s', _('see you soon!'));
         Tools::logm('logout');
+        $this->user = array();
         Session::logout();
         Tools::redirect();
     }
@@ -237,13 +291,14 @@ class Poche
                 $this->action('add', $url);
                 if ($read == '1') {
                     $last_id = $this->store->getLastId();
-                    $this->store->archiveById($last_id);
+                    $this->action('toggle_archive', $url, $last_id);
                 }
             }
 
             # the second <ol> is for read links
             $read = 1;
         }
+        $this->messages->add('s', _('import from instapaper completed'));
         Tools::logm('import from instapaper completed');
         Tools::redirect();
     }
@@ -265,13 +320,14 @@ class Poche
                 $this->action('add', $url);
                 if ($read == '1') {
                     $last_id = $this->store->getLastId();
-                    $this->store->archiveById($last_id);
+                    $this->action('toggle_archive', $url, $last_id);
                 }
             }
             
             # the second <ul> is for read links
             $read = 1;
         }
+        $this->messages->add('s', _('import from pocket completed'));
         Tools::logm('import from pocket completed');
         Tools::redirect();
     }
@@ -291,15 +347,17 @@ class Poche
                 // if ($attr_value == 'favorite' && $attr_value == 'true') {
                 //     $last_id = $this->store->getLastId();
                 //     $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->store->archiveById($last_id);
+                //     $this->action('toggle_archive', $url, $last_id);
                 // }
             }
             if ($url->isCorrect())
                 $this->action('add', $url);
         }
+        $this->messages->add('s', _('import from Readability completed'));
         Tools::logm('import from Readability completed');
         Tools::redirect();
     }
@@ -319,7 +377,7 @@ class Poche
 
     public function export()
     {
-        $entries = $this->store->retrieveAll();
+        $entries = $this->store->retrieveAll($this->user->getId());
         echo $this->tpl->render('export.twig', array(
             'export' => Tools::renderJson($entries),
         ));
@@ -332,7 +390,7 @@ class Poche
         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;