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'])
# 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,
+ );
}
/**
{
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;
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'];
}
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;
}
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');
}
}
}
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'];
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();
}
public function logout()
{
+ $this->messages->add('s', _('see you soon!'));
Tools::logm('logout');
+ $this->user = array();
Session::logout();
Tools::redirect();
}
$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();
}
$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();
}
// 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();
}
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),
));
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;