diff --git a/inc/3rdparty/paginator.php b/inc/3rdparty/paginator.php
index e880155..306756c 100644
--- a/inc/3rdparty/paginator.php
+++ b/inc/3rdparty/paginator.php
@@ -9,99 +9,103 @@
class Paginator{
/**
- * set the number of items per page.
- *
- * @var numeric
- */
- private $_perPage;
+ * set the number of items per page.
+ *
+ * @var numeric
+ */
+ private $_perPage;
- /**
- * set get parameter for fetching the page number
- *
- * @var string
- */
- private $_instance;
+ /**
+ * set get parameter for fetching the page number
+ *
+ * @var string
+ */
+ private $_instance;
- /**
- * sets the page number.
- *
- * @var numeric
- */
- private $_page;
+ /**
+ * sets the page number.
+ *
+ * @var numeric
+ */
+ private $_page;
- /**
- * set the limit for the data source
- *
- * @var string
- */
- private $_limit;
+ /**
+ * set the limit for the data source
+ *
+ * @var string
+ */
+ private $_limit;
- /**
- * set the total number of records/items.
- *
- * @var numeric
- */
- private $_totalRows = 0;
+ /**
+ * set the total number of records/items.
+ *
+ * @var numeric
+ */
+ private $_totalRows = 0;
- /**
- * __construct
- *
- * pass values when class is istantiated
- *
- * @param numeric $_perPage sets the number of iteems per page
- * @param numeric $_instance sets the instance for the GET parameter
- */
- public function __construct($perPage,$instance){
- $this->_instance = $instance;
- $this->_perPage = $perPage;
- $this->set_instance();
- }
+ /**
+ * __construct
+ *
+ * pass values when class is istantiated
+ *
+ * @param numeric $_perPage sets the number of iteems per page
+ * @param numeric $_instance sets the instance for the GET parameter
+ */
+ public function __construct($perPage,$instance){
+ $this->_instance = $instance;
+ $this->_perPage = $perPage;
+ $this->set_instance();
+ }
- /**
- * get_start
- *
- * creates the starting point for limiting the dataset
- * @return numeric
- */
- private function get_start(){
- return ($this->_page * $this->_perPage) - $this->_perPage;
- }
+ /**
+ * get_start
+ *
+ * creates the starting point for limiting the dataset
+ * @return numeric
+ */
+ private function get_start(){
+ return ($this->_page * $this->_perPage) - $this->_perPage;
+ }
- /**
- * set_instance
- *
- * sets the instance parameter, if numeric value is 0 then set to 1
- *
- * @var numeric
- */
- private function set_instance(){
- $this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]);
- $this->_page = ($this->_page == 0 ? 1 : $this->_page);
- }
+ /**
+ * set_instance
+ *
+ * sets the instance parameter, if numeric value is 0 then set to 1
+ *
+ * @var numeric
+ */
+ private function set_instance(){
+ $this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]);
+ $this->_page = ($this->_page == 0 ? 1 : $this->_page);
+ }
- /**
- * set_total
- *
- * collect a numberic value and assigns it to the totalRows
- *
- * @var numeric
- */
- public function set_total($_totalRows){
- $this->_totalRows = $_totalRows;
- }
+ /**
+ * set_total
+ *
+ * collect a numberic value and assigns it to the totalRows
+ *
+ * @var numeric
+ */
+ public function set_total($_totalRows){
+ $this->_totalRows = $_totalRows;
+ }
- /**
- * get_limit
- *
- * returns the limit for the data source, calling the get_start method and passing in the number of items perp page
- *
- * @return string
- */
- public function get_limit(){
- return "LIMIT ".$this->get_start().",$this->_perPage";
+ /**
+ * get_limit
+ *
+ * returns the limit for the data source, calling the get_start method and passing in the number of items perp page
+ *
+ * @return string
+ */
+ public function get_limit(){
+ if (STORAGE == 'postgres') {
+ return "LIMIT ".$this->_perPage." OFFSET ".$this->get_start();
+ } else {
+ return "LIMIT ".$this->get_start().",".$this->_perPage;
}
+ }
/**
* page_links
@@ -112,87 +116,87 @@ class Paginator{
* @var sting $ext optionally pass in extra parameters to the GET
* @return string returns the html menu
*/
- public function page_links($path='?',$ext=null)
- {
- $adjacents = "2";
- $prev = $this->_page - 1;
- $next = $this->_page + 1;
- $lastpage = ceil($this->_totalRows/$this->_perPage);
- $lpm1 = $lastpage - 1;
+ public function page_links($path='?',$ext=null)
+ {
+ $adjacents = "2";
+ $prev = $this->_page - 1;
+ $next = $this->_page + 1;
+ $lastpage = ceil($this->_totalRows/$this->_perPage);
+ $lpm1 = $lastpage - 1;
- $pagination = "";
- if($lastpage > 1)
- {
- $pagination .= "
\n";
+ }
- return $pagination;
- }
+ return $pagination;
+ }
}
diff --git a/inc/store/sqlite.class.php b/inc/poche/Database.class.php
similarity index 86%
rename from inc/store/sqlite.class.php
rename to inc/poche/Database.class.php
index 4c628dc..a226b31 100644
--- a/inc/store/sqlite.class.php
+++ b/inc/poche/Database.class.php
@@ -8,15 +8,25 @@
* @license http://www.wtfpl.net/ see COPYING file
*/
-class Sqlite extends Store {
+class Database {
+
+ #postgresql
+ public static $db_path = 'pgsql:host=localhost;dbname=poche';
+ public static $user = 'postgres';
+ public static $password = 'postgres';
+ #sqlite
+ // public static $db_path = 'sqlite:./db/poche.sqlite';
+ // public static $user = '';
+ // public static $password = '';
+ #mysql
+ // public static $db_path = 'mysql:host=localhost;dbname=poche';
+ // public static $user = 'root';
+ // public static $password = 'root';
- public static $db_path = 'sqlite:./db/poche.sqlite';
var $handle;
function __construct() {
- parent::__construct();
-
- $this->handle = new PDO(self::$db_path);
+ $this->handle = new PDO(self::$db_path, self::$user, self::$password);
$this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
@@ -91,6 +101,7 @@ class Sqlite extends Store {
catch (Exception $e)
{
Tools::logm('execute query error : '.$e->getMessage());
+ return FALSE;
}
}
@@ -103,8 +114,6 @@ class Sqlite extends Store {
}
public function retrieveOneById($id, $user_id) {
- parent::__construct();
-
$entry = NULL;
$sql = "SELECT * FROM entries WHERE id=? AND user_id=?";
$params = array(intval($id), $user_id);
@@ -115,8 +124,6 @@ class Sqlite extends Store {
}
public function getEntriesByView($view, $user_id, $limit = '') {
- parent::__construct();
-
switch ($_SESSION['sort'])
{
case 'ia':
@@ -140,11 +147,11 @@ class Sqlite extends Store {
{
case 'archive':
$sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? " . $order;
- $params = array($user_id, -1);
+ $params = array($user_id, 1);
break;
case 'fav' :
$sql = "SELECT * FROM entries WHERE user_id=? AND is_fav=? " . $order;
- $params = array($user_id, -1);
+ $params = array($user_id, 1);
break;
default:
$sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? " . $order;
@@ -161,7 +168,6 @@ class Sqlite extends Store {
}
public function add($url, $title, $content, $user_id) {
- parent::__construct();
$sql_action = 'INSERT INTO entries ( url, title, content, user_id ) VALUES (?, ?, ?, ?)';
$params_action = array($url, $title, $content, $user_id);
$query = $this->executeQuery($sql_action, $params_action);
@@ -169,7 +175,6 @@ class Sqlite extends Store {
}
public function deleteById($id, $user_id) {
- parent::__construct();
$sql_action = "DELETE FROM entries WHERE id=? AND user_id=?";
$params_action = array($id, $user_id);
$query = $this->executeQuery($sql_action, $params_action);
@@ -177,21 +182,18 @@ class Sqlite extends Store {
}
public function favoriteById($id, $user_id) {
- parent::__construct();
- $sql_action = "UPDATE entries SET is_fav=~is_fav WHERE id=? AND user_id=?";
+ $sql_action = "UPDATE entries SET is_fav=NOT is_fav WHERE id=? AND user_id=?";
$params_action = array($id, $user_id);
$query = $this->executeQuery($sql_action, $params_action);
}
public function archiveById($id, $user_id) {
- parent::__construct();
- $sql_action = "UPDATE entries SET is_read=~is_read WHERE id=? AND user_id=?";
+ $sql_action = "UPDATE entries SET is_read=NOT is_read WHERE id=? AND user_id=?";
$params_action = array($id, $user_id);
$query = $this->executeQuery($sql_action, $params_action);
}
public function getLastId() {
- parent::__construct();
return $this->getHandle()->lastInsertId();
}
}
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php
index ce5bb54..0a43df7 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();
@@ -52,9 +52,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');
@@ -124,18 +128,19 @@ class Poche
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());
@@ -385,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;
diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php
index 8b339ea..d0e4316 100644
--- a/inc/poche/Tools.class.php
+++ b/inc/poche/Tools.class.php
@@ -77,6 +77,7 @@ class Tools
$url = $ref;
}
}
+ self::logm('redirect to ' . $url);
header('Location: '.$url);
exit();
}
@@ -198,6 +199,7 @@ class Tools
if (DEBUG_POCHE) {
$t = strval(date('Y/m/d_H:i:s')) . ' - ' . $_SERVER["REMOTE_ADDR"] . ' - ' . strval($message) . "\n";
file_put_contents(CACHE . '/log.txt', $t, FILE_APPEND);
+ error_log('DEBUG POCHE : ' . $message);
}
}
diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php
index a8a9c03..834b18e 100644
--- a/inc/poche/config.inc.php
+++ b/inc/poche/config.inc.php
@@ -24,7 +24,7 @@ define ('CACHE', './cache');
define ('LANG', 'en_EN.UTF8');
define ('PAGINATION', '10');
define ('THEME', 'light');
-$storage_type = 'sqlite'; # sqlite, mysql, (file, not yet)
+define ('STORAGE','postgres'); # postgres, mysql, sqlite
# /!\ Be careful if you change the lines below /!\
require_once './inc/poche/User.class.php';
@@ -34,8 +34,7 @@ require_once './inc/3rdparty/class.messages.php';
require_once './inc/poche/Poche.class.php';
require_once './inc/3rdparty/Readability.php';
require_once './inc/3rdparty/Encoding.php';
-require_once './inc/store/store.class.php';
-require_once './inc/store/' . $storage_type . '.class.php';
+require_once './inc/poche/Database.class.php';
require_once './vendor/autoload.php';
require_once './inc/3rdparty/simple_html_dom.php';
require_once './inc/3rdparty/paginator.php';
@@ -45,7 +44,7 @@ if (DOWNLOAD_PICTURES) {
require_once './inc/poche/pochePictures.php';
}
-$poche = new Poche($storage_type);
+$poche = new Poche();
#XSRF protection with token
// if (!empty($_POST)) {
diff --git a/inc/store/file.class.php b/inc/store/file.class.php
deleted file mode 100644
index c9d85dc..0000000
--- a/inc/store/file.class.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- * @copyright 2013
- * @license http://www.wtfpl.net/ see COPYING file
- */
-
-class File extends Store {
- function __construct() {
-
- }
-
- public function add() {
-
- }
-
- public function retrieveOneById($id) {
-
- }
-
- public function retrieveOneByURL($url) {
-
- }
-
- public function deleteById($id) {
-
- }
-
- public function favoriteById($id) {
-
- }
-
- public function archiveById($id) {
-
- }
-
- public function getEntriesByView($view) {
-
- }
-
- public function getLastId() {
-
- }
-}
diff --git a/inc/store/mysql.class.php b/inc/store/mysql.class.php
deleted file mode 100644
index 8b7f83d..0000000
--- a/inc/store/mysql.class.php
+++ /dev/null
@@ -1,195 +0,0 @@
-
- * @copyright 2013
- * @license http://www.wtfpl.net/ see COPYING file
- */
-
-class Mysql extends Store {
-
- public static $db_path = 'mysql:host=localhost;dbname=poche';
- public static $user = 'root';
- public static $password = 'root';
- var $handle;
-
- function __construct() {
- parent::__construct();
-
- $this->handle = new PDO(self::$db_path, self::$user, self::$password);
- $this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- }
-
- private function getHandle() {
- return $this->handle;
- }
-
- public function isInstalled() {
- // $sql = "SELECT name FROM sqlite_sequence WHERE name=?";
- // $query = $this->executeQuery($sql, array('config'));
- // $hasConfig = $query->fetchAll();
-
- // if (count($hasConfig) == 0)
- // return FALSE;
-
- // if (!$this->getLogin() || !$this->getPassword())
- // return FALSE;
-
- return TRUE;
- }
-
- public function install($login, $password) {
- $this->getHandle()->exec('CREATE TABLE IF NOT EXISTS "config" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "name" VARCHAR UNIQUE, "value" BLOB)');
-
- $this->handle->exec('CREATE TABLE IF NOT EXISTS "entries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "title" VARCHAR, "url" VARCHAR UNIQUE , "is_read" INTEGER DEFAULT 0, "is_fav" INTEGER DEFAULT 0, "content" BLOB)');
-
- if (!$this->getLogin()) {
- $sql_login = 'INSERT INTO config ( name, value ) VALUES (?, ?)';
- $params_login = array('login', $login);
- $query = $this->executeQuery($sql_login, $params_login);
- }
-
- if (!$this->getPassword()) {
- $sql_pass = 'INSERT INTO config ( name, value ) VALUES (?, ?)';
- $params_pass = array('password', $password);
- $query = $this->executeQuery($sql_pass, $params_pass);
- }
-
- return TRUE;
- }
-
- public function getLogin() {
- $sql = "SELECT value FROM config WHERE name=?";
- $query = $this->executeQuery($sql, array('login'));
- $login = $query->fetchAll();
-
- return isset($login[0]['value']) ? $login[0]['value'] : FALSE;
- }
-
- public function getPassword() {
- $sql = "SELECT value FROM config WHERE name=?";
- $query = $this->executeQuery($sql, array('password'));
- $pass = $query->fetchAll();
-
- return isset($pass[0]['value']) ? $pass[0]['value'] : FALSE;
- }
-
- public function updatePassword($password)
- {
- $sql_update = "UPDATE config SET value=? WHERE name='password'";
- $params_update = array($password);
- $query = $this->executeQuery($sql_update, $params_update);
- }
-
- private function executeQuery($sql, $params) {
- try
- {
- $query = $this->getHandle()->prepare($sql);
- $query->execute($params);
- return $query;
- }
- catch (Exception $e)
- {
- Tools::logm('execute query error : '.$e->getMessage());
- }
- }
-
- public function retrieveAll() {
- $sql = "SELECT * FROM entries ORDER BY id";
- $query = $this->executeQuery($sql, array());
- $entries = $query->fetchAll();
-
- return $entries;
- }
-
- public function retrieveOneById($id) {
- parent::__construct();
-
- $entry = NULL;
- $sql = "SELECT * FROM entries WHERE id=?";
- $params = array(intval($id));
- $query = $this->executeQuery($sql, $params);
- $entry = $query->fetchAll();
-
- return $entry[0];
- }
-
- public function getEntriesByView($view) {
- parent::__construct();
-
- switch ($_SESSION['sort'])
- {
- case 'ia':
- $order = 'ORDER BY id';
- break;
- case 'id':
- $order = 'ORDER BY id DESC';
- break;
- case 'ta':
- $order = 'ORDER BY lower(title)';
- break;
- case 'td':
- $order = 'ORDER BY lower(title) DESC';
- break;
- default:
- $order = 'ORDER BY id';
- break;
- }
-
- switch ($view)
- {
- case 'archive':
- $sql = "SELECT * FROM entries WHERE is_read=? " . $order;
- $params = array(1);
- break;
- case 'fav' :
- $sql = "SELECT * FROM entries WHERE is_fav=? " . $order;
- $params = array(1);
- break;
- default:
- $sql = "SELECT * FROM entries WHERE is_read=? " . $order;
- $params = array(0);
- break;
- }
-
- $query = $this->executeQuery($sql, $params);
- $entries = $query->fetchAll();
-
- return $entries;
- }
-
- public function add($url, $title, $content) {
- parent::__construct();
- $sql_action = 'INSERT INTO entries ( url, title, content ) VALUES (?, ?, ?)';
- $params_action = array($url, $title, $content);
- $query = $this->executeQuery($sql_action, $params_action);
- return $query;
- }
-
- public function deleteById($id) {
- parent::__construct();
- $sql_action = "DELETE FROM entries WHERE id=?";
- $params_action = array($id);
- $query = $this->executeQuery($sql_action, $params_action);
- return $query;
- }
-
- public function favoriteById($id) {
- parent::__construct();
- $sql_action = "UPDATE entries SET is_fav = IF (is_fav, 0, 1)";
- $query = $this->executeQuery($sql_action, array());
- }
-
- public function archiveById($id) {
- parent::__construct();
- $sql_action = "UPDATE entries SET is_read = IF (is_read, 0, 1)";
- $query = $this->executeQuery($sql_action, array());
- }
-
- public function getLastId() {
- parent::__construct();
- return $this->getHandle()->lastInsertId();
- }
-}
diff --git a/inc/store/store.class.php b/inc/store/store.class.php
deleted file mode 100644
index d6e6301..0000000
--- a/inc/store/store.class.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @copyright 2013
- * @license http://www.wtfpl.net/ see COPYING file
- */
-
-class Store {
- function __construct() {
-
- }
-
- public function login() {
-
- }
-
- public function add() {
-
- }
-
- public function retrieveAll() {
-
- }
-
- public function retrieveOneById($id) {
-
- }
-
- public function retrieveOneByURL($url) {
-
- }
-
- public function deleteById($id) {
-
- }
-
- public function favoriteById($id) {
-
- }
-
- public function archiveById($id) {
-
- }
-
- public function getEntriesByView($view) {
-
- }
-
- public function getLastId() {
-
- }
-}
diff --git a/tpl/_footer.twig b/tpl/_footer.twig
index a541e6e..b74d907 100644
--- a/tpl/_footer.twig
+++ b/tpl/_footer.twig
@@ -1,3 +1,4 @@
\ No newline at end of file