aboutsummaryrefslogblamecommitdiffhomepage
path: root/inc/poche/Routing.class.php
blob: 6643397a0be1cbf553556a2c68052ce72e8b111c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                                                                   

                       









































                                                                                                                      
                                                 
















































                                                                                                      
                                                                                           
                                            
                                                                                                                      
                                            
                                                                         
                                         
                                                                                       
                         





                                                         
                                









                                                                          
                                               











                                                                                                                                                
                                         



                                                        
<?php
/**
 * wallabag, self hostable application allowing you to not miss any content anymore
 *
 * @category   wallabag
 * @author     Nicolas Lœuillet <nicolas@loeuillet.org>
 * @copyright  2013
 * @license    http://opensource.org/licenses/MIT see COPYING file
 */

class Routing
{
    protected $wallabag;
    protected $referer;
    protected $view;
    protected $action;
    protected $id;
    protected $url;
    protected $file;
    protected $defaultVars = array();
    protected $vars = array();

    public function __construct(Poche $wallabag)
    {
        $this->wallabag = $wallabag;
        $this->_init();
    }

    private function _init()
    {
        # Parse GET & REFERER vars
        $this->referer      = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
        $this->view         = Tools::checkVar('view', 'home');
        $this->action       = Tools::checkVar('action');
        $this->id           = Tools::checkVar('id');
        $_SESSION['sort']   = Tools::checkVar('sort', 'id');
        $this->url          = new Url((isset ($_GET['url'])) ? $_GET['url'] : '');
    }

    public function run()
    {
        # vars to _always_ send to templates
        $this->defaultVars = array(
            'referer' => $this->referer,
            'view' => $this->view,
            'poche_url' => Tools::getPocheUrl(),
            'title' => _('wallabag, a read it later open source system'),
            'token' => \Session::getToken(),
            'theme' => $this->wallabag->tpl->getTheme()
        );

        $this->_launchAction();
        $this->_defineTplInformation();

        # because messages can be added in $poche->action(), we have to add this entry now (we can add it before)
        $this->vars = array_merge($this->vars, array('messages' => $this->wallabag->messages->display('all', FALSE)));

        $this->_render($this->file, $this->vars);
    }

    private function _defineTplInformation()
    {
        $tplFile = array();
        $tplVars = array();

        if (\Session::isLogged()) {
            $this->wallabag->action($this->action, $this->url, $this->id);
            $tplFile = Tools::getTplFile($this->view);
            $tplVars = array_merge($this->vars, $this->wallabag->displayView($this->view, $this->id));
        } elseif(isset($_SERVER['PHP_AUTH_USER'])) {
            if($this->wallabag->store->userExists($_SERVER['PHP_AUTH_USER'])) {
                $this->wallabag->login($this->referer);
            } else {
                $this->wallabag->messages->add('e', _('login failed: user doesn\'t exist'));
                Tools::logm('user doesn\'t exist');
                $tplFile = Tools::getTplFile('login');
                $tplVars['http_auth'] = 1;
            }
        } elseif(isset($_SERVER['REMOTE_USER'])) {
            if($this->wallabag->store->userExists($_SERVER['REMOTE_USER'])) {
                $this->wallabag->login($this->referer);
            } else {
                $this->wallabag->messages->add('e', _('login failed: user doesn\'t exist'));
                Tools::logm('user doesn\'t exist');
                $tplFile = Tools::getTplFile('login');
                $tplVars['http_auth'] = 1;
            }
        } else {
            $tplFile = Tools::getTplFile('login');
            $tplVars['http_auth'] = 0;
            \Session::logout();
        }

        $this->file = $tplFile;
        $this->vars = array_merge($this->defaultVars, $tplVars);
    }

    private function _launchAction()
    {
        if (isset($_GET['login'])) {
            // hello you
            $this->wallabag->login($this->referer);
        } elseif (isset($_GET['logout'])) {
            // see you soon !
            $this->wallabag->logout();
        } elseif (isset($_GET['config'])) {
            // update password
            $this->wallabag->updatePassword($_POST['password'], $_POST['password_repeat']);
        } elseif (isset($_GET['newuser'])) {
            $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser'], $_POST['newuseremail']);
        } elseif (isset($_GET['deluser'])) {
            $this->wallabag->deleteUser($_POST['password4deletinguser']);
        } elseif (isset($_GET['epub'])) {
            $epub = new WallabagEpub($this->wallabag, $_GET['method'], $_GET['value']);
            $epub->run();
        } elseif (isset($_GET['import'])) {
            $import = $this->wallabag->import();
            $tplVars = array_merge($this->vars, $import);
        } elseif (isset($_GET['download'])) {
            Tools::downloadDb();
        } elseif (isset($_GET['empty-cache'])) {
            Tools::emptyCache();
        } elseif (isset($_GET['export'])) {
            $this->wallabag->export();
        } elseif (isset($_GET['updatetheme'])) {
            $this->wallabag->tpl->updateTheme($_POST['theme']);
        } elseif (isset($_GET['updatelanguage'])) {
            $this->wallabag->language->updateLanguage($_POST['language']);
        } elseif (isset($_GET['uploadfile'])) {
            $this->wallabag->uploadFile();
        } elseif (isset($_GET['feed'])) {
            if (isset($_GET['action']) && $_GET['action'] == 'generate') {
                $this->wallabag->updateToken();
            }
            else {
                $tag_id = (isset($_GET['tag_id']) ? intval($_GET['tag_id']) : 0);
                $this->wallabag->generateFeeds($_GET['token'], filter_var($_GET['user_id'],FILTER_SANITIZE_NUMBER_INT), $tag_id, $_GET['type']);
            }
        }
        elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) {
            $plainUrl = new Url(base64_encode($_GET['plainurl']));
            $this->wallabag->action('add', $plainUrl);
        }
    }

    public function _render($file, $vars)
    {
        echo $this->wallabag->tpl->render($file, $vars);
    }
}