Compare commits
93 Commits
1.0-beta5.
...
1.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a4482b8a4 | |||
| defa7754a4 | |||
| 1bf152a551 | |||
| 99c8761b75 | |||
| 0c2f453750 | |||
| d7aec74403 | |||
| 760d44d194 | |||
| f2d3ee98a6 | |||
| 705f04937f | |||
| 5862c872c6 | |||
| b7066c0333 | |||
| e4178da65c | |||
| c7abf20bbe | |||
| b3a2586ecf | |||
| 45e9e0f565 | |||
| 352523640d | |||
| 05824223a9 | |||
| f616ab60ef | |||
| 363bc4eb86 | |||
| 2b191d8c37 | |||
| 7d7ed6a0ee | |||
| 83020b993c | |||
| 985ce3ec53 | |||
| 33fe6a46a4 | |||
| cd8a344156 | |||
| 6ae804853f | |||
| b6d859fa92 | |||
| 1a0d776394 | |||
| 1ba1628ed6 | |||
| 027b4e1568 | |||
| df6afaf090 | |||
| c1e24b0461 | |||
| 36b9219842 | |||
| 8e76eaad19 | |||
| fad925644f | |||
| a84f77d6ba | |||
| 0c994bd934 | |||
| 18889e230a | |||
| e557b7bb44 | |||
| 3ae9190e78 | |||
| e231f3f023 | |||
| 2502e1359c | |||
| 20f00edd15 | |||
| 2f3425dff6 | |||
| 272600ff80 | |||
| 1745ebc832 | |||
| 5188585864 | |||
| 1e98ee1de0 | |||
| 5011388f39 | |||
| 5e07dc8b51 | |||
| 894c36ea32 | |||
| 031df528b6 | |||
| 9d3b88b379 | |||
| 5eebe4e50d | |||
| 2916d24b20 | |||
| 3352332f3f | |||
| 2621569200 | |||
| 93eed12505 | |||
| 125f9ee838 | |||
| 8df8eb6c95 | |||
| bf7516112f | |||
| 5a26af476e | |||
| 2287bf06f5 | |||
| 89812ec81c | |||
| 06fef43180 | |||
| 01e671f4d1 | |||
| d47d2533ac | |||
| 27a74816da | |||
| 47baa1077e | |||
| f0f7b94362 | |||
| 747c6698b6 | |||
| 8f91e10faa | |||
| 6cd8af85da | |||
| 34d67c835e | |||
| 7f17a38d35 | |||
| 07ae20eeed | |||
| 4cc3c2ac17 | |||
| 66e074b43d | |||
| eb44ca4213 | |||
| dfbbc14b33 | |||
| 34bf601a56 | |||
| 969a91a1e3 | |||
| fbe8e27568 | |||
| 4ee705a79c | |||
| 8623a53200 | |||
| 4e5b04113d | |||
| 3cc22aab82 | |||
| be2b9055b9 | |||
| 92cd6e9af8 | |||
| 58ace4941e | |||
| 37527034ab | |||
| 79026b73a8 | |||
| c51be6b697 |
2
.gitignore
vendored
@ -3,6 +3,4 @@ cache/*
|
||||
vendor
|
||||
composer.phar
|
||||
db/poche.sqlite
|
||||
output
|
||||
phpdoc*
|
||||
inc/poche/config.inc.php
|
||||
6
.gitmodules
vendored
@ -1,6 +0,0 @@
|
||||
[submodule "inc/3rdparty/site_config"]
|
||||
path = inc/3rdparty/site_config
|
||||
url = git@github.com:inthepoche/site_config.git
|
||||
[submodule "themes"]
|
||||
path = themes
|
||||
url = git://github.com/inthepoche/poche-themes.git
|
||||
@ -8,4 +8,4 @@ To fix the bug quickly, we need some infos:
|
||||
* the link you want to poche and which causes problem
|
||||
|
||||
## You want to fix a bug or to add a feature
|
||||
Please fork poche and work with the dev branch. Do not work on master branch.
|
||||
Please fork poche and work with **the dev branch** only. Do not work on master branch.
|
||||
|
||||
@ -12,7 +12,7 @@ Abandon Pocket, Instapaper and other Readability service : adopt poche. It is th
|
||||
* multi users (very soon!)
|
||||
* update notification in configuration screen
|
||||
* many storage modes (sqlite, mysql, postgresql)
|
||||
* many templates: [have a look here](https://github.com/inthepoche/poche-themes).
|
||||
* many templates: [have a look here](https://github.com/inthepoche/poche/tree/master/themes).
|
||||
* ...
|
||||
|
||||
To test poche, a demo website is online : [demo.inthepoche.com](http://demo.inthepoche.com) (login poche, password poche).
|
||||
@ -26,4 +26,4 @@ Read the [INSTALL.md file](https://github.com/inthepoche/poche/blob/master/INSTA
|
||||
Copyright © 2010-2013 Nicolas Lœuillet <nicolas.loeuillet@gmail.com>
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the Do What The Fuck You Want To Public License, Version 2,
|
||||
as published by Sam Hocevar. See the COPYING file for more details.
|
||||
as published by Sam Hocevar. See the COPYING file for more details.
|
||||
|
||||
12
inc/3rdparty/FlattrItem.class.php
vendored
@ -9,9 +9,9 @@ class FlattrItem {
|
||||
public $flattrItemURL;
|
||||
public $numflattrs;
|
||||
|
||||
public function checkItem($urltoflattr) {
|
||||
$this->cacheflattrfile($urltoflattr);
|
||||
$flattrResponse = file_get_contents(CACHE . "/flattr/".base64_encode($urltoflattr).".cache");
|
||||
public function checkItem($urltoflattr,$id) {
|
||||
$this->cacheflattrfile($urltoflattr, $id);
|
||||
$flattrResponse = file_get_contents(CACHE . "/flattr/".$id.".cache");
|
||||
if($flattrResponse != FALSE) {
|
||||
$result = json_decode($flattrResponse);
|
||||
if (isset($result->message)){
|
||||
@ -33,15 +33,15 @@ class FlattrItem {
|
||||
}
|
||||
}
|
||||
|
||||
private function cacheflattrfile($urltoflattr) {
|
||||
private function cacheflattrfile($urltoflattr, $id) {
|
||||
if (!is_dir(CACHE . '/flattr')) {
|
||||
mkdir(CACHE . '/flattr', 0777);
|
||||
}
|
||||
|
||||
// if a cache flattr file for this url already exists and it's been less than one day than it have been updated, see in /cache
|
||||
if ((!file_exists(CACHE . "/flattr/".base64_encode($urltoflattr).".cache")) || (time() - filemtime(CACHE . "/flattr/".base64_encode($urltoflattr).".cache") > 86400)) {
|
||||
if ((!file_exists(CACHE . "/flattr/".$id.".cache")) || (time() - filemtime(CACHE . "/flattr/".$id.".cache") > 86400)) {
|
||||
$askForFlattr = Tools::getFile(FLATTR_API . $urltoflattr);
|
||||
$flattrCacheFile = fopen(CACHE . "/flattr/".base64_encode($urltoflattr).".cache", 'w+');
|
||||
$flattrCacheFile = fopen(CACHE . "/flattr/".$id.".cache", 'w+');
|
||||
fwrite($flattrCacheFile, $askForFlattr);
|
||||
fclose($flattrCacheFile);
|
||||
}
|
||||
|
||||
1
inc/3rdparty/simplepie/SimplePie/Misc.php
vendored
@ -1613,6 +1613,7 @@ class SimplePie_Misc
|
||||
case 'utf7':
|
||||
return 'UTF-7';
|
||||
|
||||
case 'utf8lias':
|
||||
case 'utf8':
|
||||
return 'UTF-8';
|
||||
|
||||
|
||||
6
inc/3rdparty/site_config/README.md
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
Full-Text RSS Site Patterns
|
||||
---------------------------
|
||||
|
||||
Site patterns allow you to specify what should be extracted from specific sites.
|
||||
|
||||
Please see http://help.fivefilters.org/customer/portal/articles/223153-site-patterns for more information.
|
||||
6
inc/3rdparty/site_config/custom/bfmtv.com.txt
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
title: //title
|
||||
body: //h2 | //span[@class='masque'] | //article[@class='corps_article_right']
|
||||
prune: no
|
||||
tidy: no
|
||||
|
||||
test_url: http://www.bfmtv.com/societe/cigarette-electronique-dangers-588622.html
|
||||
4
inc/3rdparty/site_config/custom/dilbert.com.txt
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
title: //div[contains(@class, 'SB_Title')]//a
|
||||
body: //div[contains(@class, 'STR_Content')]
|
||||
|
||||
test_url: http://dilbert.com/strips/comic/2013-10-22
|
||||
7
inc/3rdparty/site_config/custom/inthepoche.com.txt
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
title: //title
|
||||
body: //div[@class='post-content']
|
||||
|
||||
prune: no
|
||||
tidy: no
|
||||
|
||||
test_url: http://www.inthepoche.com/?post/poche-hosting
|
||||
6
inc/3rdparty/site_config/custom/tldp.org.txt
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
title: //title
|
||||
body: //h2 | //p | //ul
|
||||
prune: no
|
||||
tidy: no
|
||||
|
||||
test_url: http://www.tldp.org/HOWTO/Plug-and-Play-HOWTO-7.html
|
||||
3
inc/3rdparty/site_config/index.php
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
// this is here to prevent directory listing over the web
|
||||
?>
|
||||
19
inc/3rdparty/site_config/standard/.wikipedia.org.txt
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
title: //h1[@id='firstHeading']
|
||||
body: //div[@id = 'bodyContent']
|
||||
strip_id_or_class: editsection
|
||||
#strip_id_or_class: toc
|
||||
strip_id_or_class: vertical-navbox
|
||||
strip: //table[@id='toc']
|
||||
strip: //div[@id='catlinks']
|
||||
strip: //div[@id='jump-to-nav']
|
||||
strip: //div[@class='thumbcaption']//div[@class='magnify']
|
||||
strip: //table[@class='navbox']
|
||||
strip: //table[contains(@class, 'infobox')]
|
||||
strip: //div[@class='dablink']
|
||||
strip: //div[@id='contentSub']
|
||||
strip: //table[contains(@class, 'metadata')]
|
||||
strip: //*[contains(@class, 'noprint')]
|
||||
strip: //span[@title='pronunciation:']
|
||||
prune: no
|
||||
tidy: no
|
||||
test_url: http://en.wikipedia.org/wiki/Christopher_Lloyd
|
||||
3
inc/3rdparty/site_config/standard/index.php
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
// this is here to prevent directory listing over the web
|
||||
?>
|
||||
2
inc/3rdparty/site_config/standard/version.php
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
return 1;
|
||||
@ -87,6 +87,17 @@ class Database {
|
||||
return $user_config;
|
||||
}
|
||||
|
||||
public function userExists($username) {
|
||||
$sql = "SELECT * FROM users WHERE username=?";
|
||||
$query = $this->executeQuery($sql, array($username));
|
||||
$login = $query->fetchAll();
|
||||
if (isset($login[0])) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function login($username, $password) {
|
||||
$sql = "SELECT * FROM users WHERE username=? AND password=?";
|
||||
$query = $this->executeQuery($sql, array($username, $password));
|
||||
@ -108,14 +119,22 @@ class Database {
|
||||
public function updatePassword($userId, $password)
|
||||
{
|
||||
$sql_update = "UPDATE users SET password=? WHERE id=?";
|
||||
$params_update = array($password, $id);
|
||||
$this->updateUserConfig($userId, 'password', $password);
|
||||
$params_update = array($password, $userId);
|
||||
$query = $this->executeQuery($sql_update, $params_update);
|
||||
}
|
||||
|
||||
public function updateUserConfig($userId, $key, $value) {
|
||||
$sql_update = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?";
|
||||
$params_update = array($value, $userId, $key);
|
||||
$query = $this->executeQuery($sql_update, $params_update);
|
||||
$config = $this->getConfigUser($userId);
|
||||
|
||||
if (!isset ($user_config[$key])) {
|
||||
$sql = "INSERT INTO users_config (`value`, `user_id`, `name`) VALUES (?, ?, ?)";
|
||||
}
|
||||
else {
|
||||
$sql = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?";
|
||||
}
|
||||
|
||||
$params = array($value, $userId, $key);
|
||||
$query = $this->executeQuery($sql, $params);
|
||||
}
|
||||
|
||||
private function executeQuery($sql, $params) {
|
||||
@ -147,7 +166,7 @@ class Database {
|
||||
$query = $this->executeQuery($sql, $params);
|
||||
$entry = $query->fetchAll();
|
||||
|
||||
return $entry[0];
|
||||
return isset($entry[0]) ? $entry[0] : null;
|
||||
}
|
||||
|
||||
public function getEntriesByView($view, $user_id, $limit = '') {
|
||||
|
||||
@ -20,7 +20,8 @@ class Poche
|
||||
public $pagination;
|
||||
|
||||
private $currentTheme = '';
|
||||
private $notInstalledMessage = '';
|
||||
private $currentLanguage = '';
|
||||
private $notInstalledMessage = array();
|
||||
|
||||
# @todo make this dynamic (actually install themes and save them in the database including author information et cetera)
|
||||
private $installedThemes = array(
|
||||
@ -33,28 +34,21 @@ class Poche
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
if (! $this->configFileIsAvailable()) {
|
||||
return;
|
||||
if ($this->configFileIsAvailable()) {
|
||||
$this->init();
|
||||
}
|
||||
|
||||
$this->init();
|
||||
|
||||
if (! $this->themeIsInstalled()) {
|
||||
return;
|
||||
if ($this->themeIsInstalled()) {
|
||||
$this->initTpl();
|
||||
}
|
||||
|
||||
$this->initTpl();
|
||||
|
||||
if (! $this->systemIsInstalled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->store = new Database();
|
||||
$this->messages = new Messages();
|
||||
|
||||
# installation
|
||||
if (! $this->store->isInstalled()) {
|
||||
$this->install();
|
||||
if ($this->systemIsInstalled()) {
|
||||
$this->store = new Database();
|
||||
$this->messages = new Messages();
|
||||
# installation
|
||||
if (! $this->store->isInstalled()) {
|
||||
$this->install();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,11 +84,20 @@ class Poche
|
||||
}
|
||||
|
||||
$this->currentTheme = $themeDirectory;
|
||||
|
||||
# Set up language
|
||||
$languageDirectory = $this->user->getConfigValue('language');
|
||||
|
||||
if ($languageDirectory === false) {
|
||||
$languageDirectory = DEFAULT_THEME;
|
||||
}
|
||||
|
||||
$this->currentLanguage = $languageDirectory;
|
||||
}
|
||||
|
||||
public function configFileIsAvailable() {
|
||||
if (! self::$configFileAvailable) {
|
||||
$this->notInstalledMessage = 'You have to rename <strong>inc/poche/config.inc.php.new</strong> to <strong>inc/poche/config.inc.php</strong>.';
|
||||
$this->notInstalledMessage[] = 'You have to rename inc/poche/config.inc.php.new to inc/poche/config.inc.php.';
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -103,31 +106,44 @@ class Poche
|
||||
}
|
||||
|
||||
public function themeIsInstalled() {
|
||||
$passTheme = TRUE;
|
||||
# Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet
|
||||
if (! self::$canRenderTemplates) {
|
||||
$this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://inthepoche.com/?pages/Documentation">the documentation.</a>';
|
||||
|
||||
return false;
|
||||
$this->notInstalledMessage[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://doc.inthepoche.com/doku.php?id=users:begin:install">the documentation.</a>';
|
||||
$passTheme = FALSE;
|
||||
}
|
||||
|
||||
if (! is_writable(CACHE)) {
|
||||
$this->notInstalledMessage[] = 'You don\'t have write access on cache directory.';
|
||||
|
||||
self::$canRenderTemplates = false;
|
||||
|
||||
$passTheme = FALSE;
|
||||
}
|
||||
|
||||
# Check if the selected theme and its requirements are present
|
||||
if (! is_dir(THEME . '/' . $this->getTheme())) {
|
||||
$this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
|
||||
if ($this->getTheme() != '' && ! is_dir(THEME . '/' . $this->getTheme())) {
|
||||
$this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
|
||||
|
||||
self::$canRenderTemplates = false;
|
||||
|
||||
return false;
|
||||
$passTheme = FALSE;
|
||||
}
|
||||
|
||||
foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
|
||||
if (! is_dir(THEME . '/' . $requiredTheme)) {
|
||||
$this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
|
||||
$this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
|
||||
|
||||
self::$canRenderTemplates = false;
|
||||
|
||||
return false;
|
||||
$passTheme = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$passTheme) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -139,30 +155,30 @@ class Poche
|
||||
*/
|
||||
public function systemIsInstalled()
|
||||
{
|
||||
$msg = '';
|
||||
$msg = TRUE;
|
||||
|
||||
$configSalt = defined('SALT') ? constant('SALT') : '';
|
||||
|
||||
if (empty($configSalt)) {
|
||||
$msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>';
|
||||
} else if (! is_writable(CACHE)) {
|
||||
Tools::logm('you don\'t have write access on cache directory');
|
||||
$msg = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>';
|
||||
} else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
|
||||
$this->notInstalledMessage[] = 'You have not yet filled in the SALT value in the config.inc.php file.';
|
||||
$msg = FALSE;
|
||||
}
|
||||
if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
|
||||
Tools::logm('sqlite file doesn\'t exist');
|
||||
$msg = '<h1>error</h1><p>sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.</p>';
|
||||
} else if (file_exists(ROOT . '/install/update.php') && ! DEBUG_POCHE) {
|
||||
$msg = '<h1>setup</h1><p><strong>It\'s your first time here?</strong> Please copy /install/poche.sqlite in db folder. Then, delete install folder.<br /><strong>If you have already installed poche</strong>, an update is needed <a href="install/update.php">by clicking here</a>.</p>';
|
||||
} else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
|
||||
$msg = '<h1>setup</h1><p><strong>If you want to update your poche</strong>, you just have to delete /install folder. <br /><strong>To install your poche with sqlite</strong>, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.</p>';
|
||||
} else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
|
||||
$this->notInstalledMessage[] = 'sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.';
|
||||
$msg = FALSE;
|
||||
}
|
||||
if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
|
||||
$this->notInstalledMessage[] = 'you have to delete the /install folder before using poche.';
|
||||
$msg = FALSE;
|
||||
}
|
||||
if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
|
||||
Tools::logm('you don\'t have write access on sqlite file');
|
||||
$msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>';
|
||||
$this->notInstalledMessage[] = 'You don\'t have write access on sqlite file.';
|
||||
$msg = FALSE;
|
||||
}
|
||||
|
||||
if (! empty($msg)) {
|
||||
$this->notInstalledMessage = $msg;
|
||||
|
||||
if (! $msg) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -247,6 +263,10 @@ class Poche
|
||||
public function getTheme() {
|
||||
return $this->currentTheme;
|
||||
}
|
||||
|
||||
public function getLanguage() {
|
||||
return $this->currentLanguage;
|
||||
}
|
||||
|
||||
public function getInstalledThemes() {
|
||||
$handle = opendir(THEME);
|
||||
@ -268,9 +288,33 @@ class Poche
|
||||
$themes[] = array('name' => $theme, 'current' => $current);
|
||||
}
|
||||
|
||||
sort($themes);
|
||||
return $themes;
|
||||
}
|
||||
|
||||
public function getInstalledLanguages() {
|
||||
$handle = opendir(LOCALE);
|
||||
$languages = array();
|
||||
|
||||
while (($language = readdir($handle)) !== false) {
|
||||
# Languages are stored in a directory, so all directory names are languages
|
||||
# @todo move language installation data to database
|
||||
if (! is_dir(LOCALE . '/' . $language) || in_array($language, array('..', '.'))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$current = false;
|
||||
|
||||
if ($language === $this->getLanguage()) {
|
||||
$current = true;
|
||||
}
|
||||
|
||||
$languages[] = array('name' => $language, 'current' => $current);
|
||||
}
|
||||
|
||||
return $languages;
|
||||
}
|
||||
|
||||
public function getDefaultConfig()
|
||||
{
|
||||
return array(
|
||||
@ -283,7 +327,7 @@ class Poche
|
||||
/**
|
||||
* Call action (mark as fav, archive, delete, etc.)
|
||||
*/
|
||||
public function action($action, Url $url, $id = 0, $import = FALSE)
|
||||
public function action($action, Url $url, $id = 0, $import = FALSE, $autoclose = FALSE)
|
||||
{
|
||||
switch ($action)
|
||||
{
|
||||
@ -314,7 +358,11 @@ class Poche
|
||||
}
|
||||
|
||||
if (!$import) {
|
||||
Tools::redirect('?view=home');
|
||||
if ($autoclose == TRUE) {
|
||||
Tools::redirect('?view=home');
|
||||
} else {
|
||||
Tools::redirect('?view=home&closewin=true');
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'delete':
|
||||
@ -360,15 +408,19 @@ class Poche
|
||||
case 'config':
|
||||
$dev = $this->getPocheVersion('dev');
|
||||
$prod = $this->getPocheVersion('prod');
|
||||
$compare_dev = version_compare(POCHE_VERSION, $dev);
|
||||
$compare_prod = version_compare(POCHE_VERSION, $prod);
|
||||
$compare_dev = version_compare(POCHE, $dev);
|
||||
$compare_prod = version_compare(POCHE, $prod);
|
||||
$themes = $this->getInstalledThemes();
|
||||
$languages = $this->getInstalledLanguages();
|
||||
$http_auth = (isset($_SERVER['PHP_AUTH_USER']))?true:false;
|
||||
$tpl_vars = array(
|
||||
'themes' => $themes,
|
||||
'languages' => $languages,
|
||||
'dev' => $dev,
|
||||
'prod' => $prod,
|
||||
'compare_dev' => $compare_dev,
|
||||
'compare_prod' => $compare_prod,
|
||||
'http_auth' => $http_auth,
|
||||
);
|
||||
Tools::logm('config view');
|
||||
break;
|
||||
@ -385,7 +437,7 @@ class Poche
|
||||
|
||||
# flattr checking
|
||||
$flattr = new FlattrItem();
|
||||
$flattr->checkItem($entry['url']);
|
||||
$flattr->checkItem($entry['url'],$entry['id']);
|
||||
|
||||
$tpl_vars = array(
|
||||
'entry' => $entry,
|
||||
@ -404,6 +456,7 @@ class Poche
|
||||
'page_links' => '',
|
||||
'nb_results' => '',
|
||||
);
|
||||
|
||||
if (count($entries) > 0) {
|
||||
$this->pagination->set_total(count($entries));
|
||||
$page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&');
|
||||
@ -488,6 +541,59 @@ class Poche
|
||||
Tools::redirect('?view=config');
|
||||
}
|
||||
|
||||
public function updateLanguage()
|
||||
{
|
||||
# no data
|
||||
if (empty($_POST['language'])) {
|
||||
}
|
||||
|
||||
# we are not going to change it to the current language...
|
||||
if ($_POST['language'] == $this->getLanguage()) {
|
||||
$this->messages->add('w', _('still using the "' . $this->getLanguage() . '" language!'));
|
||||
Tools::redirect('?view=config');
|
||||
}
|
||||
|
||||
$languages = $this->getInstalledLanguages();
|
||||
$actualLanguage = false;
|
||||
|
||||
foreach ($languages as $language) {
|
||||
if ($language['name'] == $_POST['language']) {
|
||||
$actualLanguage = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $actualLanguage) {
|
||||
$this->messages->add('e', _('that language does not seem to be installed'));
|
||||
Tools::redirect('?view=config');
|
||||
}
|
||||
|
||||
$this->store->updateUserConfig($this->user->getId(), 'language', $_POST['language']);
|
||||
$this->messages->add('s', _('you have changed your language preferences'));
|
||||
|
||||
$currentConfig = $_SESSION['poche_user']->config;
|
||||
$currentConfig['language'] = $_POST['language'];
|
||||
|
||||
$_SESSION['poche_user']->setConfig($currentConfig);
|
||||
|
||||
Tools::redirect('?view=config');
|
||||
}
|
||||
|
||||
/**
|
||||
* get credentials from differents sources
|
||||
* it redirects the user to the $referer link
|
||||
* @return array
|
||||
*/
|
||||
private function credentials() {
|
||||
if(isset($_SERVER['PHP_AUTH_USER'])) {
|
||||
return array($_SERVER['PHP_AUTH_USER'],'php_auth');
|
||||
}
|
||||
if(!empty($_POST['login']) && !empty($_POST['password'])) {
|
||||
return array($_POST['login'],$_POST['password']);
|
||||
}
|
||||
return array(false,false);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if login & password are correct and save the user in session.
|
||||
* it redirects the user to the $referer link
|
||||
@ -497,11 +603,17 @@ class Poche
|
||||
*/
|
||||
public function login($referer)
|
||||
{
|
||||
if (!empty($_POST['login']) && !empty($_POST['password'])) {
|
||||
$user = $this->store->login($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']));
|
||||
list($login,$password)=$this->credentials();
|
||||
if($login === false || $password === false) {
|
||||
$this->messages->add('e', _('login failed: you have to fill all fields'));
|
||||
Tools::logm('login failed');
|
||||
Tools::redirect();
|
||||
}
|
||||
if (!empty($login) && !empty($password)) {
|
||||
$user = $this->store->login($login, Tools::encodeString($password . $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)));
|
||||
Session::login($user['username'], $user['password'], $login, Tools::encodeString($password . $login), array('poche_user' => new User($user)));
|
||||
$this->messages->add('s', _('welcome to your poche'));
|
||||
Tools::logm('login successful');
|
||||
Tools::redirect($referer);
|
||||
@ -509,10 +621,6 @@ class Poche
|
||||
$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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -729,4 +837,4 @@ class Poche
|
||||
}
|
||||
return $version;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,20 +41,24 @@ class Tools
|
||||
$https = (!empty($_SERVER['HTTPS'])
|
||||
&& (strtolower($_SERVER['HTTPS']) == 'on'))
|
||||
|| (isset($_SERVER["SERVER_PORT"])
|
||||
&& $_SERVER["SERVER_PORT"] == '443'); // HTTPS detection.
|
||||
&& $_SERVER["SERVER_PORT"] == '443') // HTTPS detection.
|
||||
|| (isset($_SERVER["SERVER_PORT"]) //Custom HTTPS port detection
|
||||
&& $_SERVER["SERVER_PORT"] == SSL_PORT);
|
||||
|
||||
$serverport = (!isset($_SERVER["SERVER_PORT"])
|
||||
|| $_SERVER["SERVER_PORT"] == '80'
|
||||
|| ($https && $_SERVER["SERVER_PORT"] == '443')
|
||||
|| ($https && $_SERVER["SERVER_PORT"]==SSL_PORT) //Custom HTTPS port detection
|
||||
? '' : ':' . $_SERVER["SERVER_PORT"]);
|
||||
|
||||
$scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]);
|
||||
|
||||
if (!isset($_SERVER["SERVER_NAME"])) {
|
||||
if (!isset($_SERVER["HTTP_HOST"])) {
|
||||
return $scriptname;
|
||||
}
|
||||
|
||||
return 'http' . ($https ? 's' : '') . '://'
|
||||
. $_SERVER["SERVER_NAME"] . $serverport . $scriptname;
|
||||
. $_SERVER["HTTP_HOST"] . $serverport . $scriptname;
|
||||
}
|
||||
|
||||
public static function redirect($url = '')
|
||||
@ -129,7 +133,9 @@ class Tools
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
if (!ini_get('open_basedir') && !ini_get('safe_mode')) {
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
}
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_HEADER, false);
|
||||
|
||||
@ -243,4 +249,4 @@ class Tools
|
||||
$lang = explode('.', $userlanguage);
|
||||
return str_replace('_', '-', $lang[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,8 +25,11 @@ define ('STORAGE_PASSWORD', 'poche');
|
||||
# Do not trespass unless you know what you are doing
|
||||
#################################################################################
|
||||
|
||||
// Change this if not using the standart port for SSL - i.e you server is behind sslh
|
||||
define ('SSL_PORT', 443);
|
||||
|
||||
define ('MODE_DEMO', FALSE);
|
||||
define ('DEBUG_POCHE', true);
|
||||
define ('DEBUG_POCHE', FALSE);
|
||||
define ('DOWNLOAD_PICTURES', FALSE);
|
||||
define ('CONVERT_LINKS_FOOTNOTES', FALSE);
|
||||
define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
|
||||
@ -49,8 +52,10 @@ define ('CACHE', ROOT . '/cache');
|
||||
|
||||
define ('PAGINATION', '10');
|
||||
|
||||
define ('POCHE_VERSION', '1.0-beta5');
|
||||
define ('POCKET_FILE', '/ril_export.html');
|
||||
define ('READABILITY_FILE', '/readability');
|
||||
define ('INSTAPAPER_FILE', '/instapaper-export.html');
|
||||
|
||||
define ('IMPORT_POCKET_FILE', ROOT . '/ril_export.html');
|
||||
define ('IMPORT_READABILITY_FILE', ROOT . '/readability');
|
||||
define ('IMPORT_INSTAPAPER_FILE', ROOT . '/instapaper-export.html');
|
||||
define ('IMPORT_POCKET_FILE', ROOT . POCKET_FILE);
|
||||
define ('IMPORT_READABILITY_FILE', ROOT . READABILITY_FILE);
|
||||
define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE);
|
||||
|
||||
24
index.php
@ -8,7 +8,9 @@
|
||||
* @license http://www.wtfpl.net/ see COPYING file
|
||||
*/
|
||||
|
||||
define ('POCHE', '1.2.0');
|
||||
require_once 'inc/poche/global.inc.php';
|
||||
session_start();
|
||||
|
||||
# Start Poche
|
||||
$poche = new Poche();
|
||||
@ -35,7 +37,12 @@ $tpl_vars = array(
|
||||
if (! empty($notInstalledMessage)) {
|
||||
if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) {
|
||||
# We cannot use Twig to display the error message
|
||||
die($notInstalledMessage);
|
||||
echo '<h1>Errors</h1><ol>';
|
||||
foreach ($notInstalledMessage as $message) {
|
||||
echo '<li>' . $message . '</li>';
|
||||
}
|
||||
echo '</ol>';
|
||||
die();
|
||||
} else {
|
||||
# Twig is installed, put the error message in the template
|
||||
$tpl_file = Tools::getTplFile('error');
|
||||
@ -61,7 +68,10 @@ if (isset($_GET['login'])) {
|
||||
$poche->export();
|
||||
} elseif (isset($_GET['updatetheme'])) {
|
||||
$poche->updateTheme();
|
||||
} elseif (isset($_GET['updatelanguage'])) {
|
||||
$poche->updateLanguage();
|
||||
}
|
||||
|
||||
elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) {
|
||||
$plain_url = new Url(base64_encode($_GET['plainurl']));
|
||||
$poche->action('add', $plain_url);
|
||||
@ -71,8 +81,18 @@ if (Session::isLogged()) {
|
||||
$poche->action($action, $url, $id);
|
||||
$tpl_file = Tools::getTplFile($view);
|
||||
$tpl_vars = array_merge($tpl_vars, $poche->displayView($view, $id));
|
||||
} elseif(isset($_SERVER['PHP_AUTH_USER'])) {
|
||||
if($poche->store->userExists($_SERVER['PHP_AUTH_USER'])) {
|
||||
$poche->login($referer);
|
||||
} else {
|
||||
$poche->messages->add('e', _('login failed: user doesn\'t exist'));
|
||||
Tools::logm('user doesn\'t exist');
|
||||
$tpl_file = Tools::getTplFile('login');
|
||||
$tpl_vars['http_auth'] = 1;
|
||||
}
|
||||
} else {
|
||||
$tpl_file = Tools::getTplFile('login');
|
||||
$tpl_vars['http_auth'] = 0;
|
||||
}
|
||||
|
||||
# because messages can be added in $poche->action(), we have to add this entry now (we can add it before)
|
||||
@ -80,4 +100,4 @@ $messages = $poche->messages->display('all', FALSE);
|
||||
$tpl_vars = array_merge($tpl_vars, array('messages' => $messages));
|
||||
|
||||
# display poche
|
||||
echo $poche->tpl->render($tpl_file, $tpl_vars);
|
||||
echo $poche->tpl->render($tpl_file, $tpl_vars);
|
||||
|
||||
@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS `config` (
|
||||
`name` varchar(255) NOT NULL,
|
||||
`value` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `entries` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `entries` (
|
||||
`content` blob NOT NULL,
|
||||
`user_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS `users` (
|
||||
`name` int(255) NOT NULL,
|
||||
`email` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users_config` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
@ -31,4 +31,4 @@ CREATE TABLE IF NOT EXISTS `users_config` (
|
||||
`name` varchar(255) NOT NULL,
|
||||
`value` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
@ -1,77 +0,0 @@
|
||||
<?php
|
||||
require_once dirname(__FILE__).'/../inc/poche/Tools.class.php';
|
||||
include dirname(__FILE__).'/../inc/poche/define.inc.php';
|
||||
include dirname(__FILE__).'/../inc/poche/myconfig.inc.php';
|
||||
require_once __DIR__ . '/../inc/poche/Database.class.php';
|
||||
$store = new Database();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<!--[if lte IE 6]> <html class="no-js ie6 ie67 ie678" lang="en"> <![endif]-->
|
||||
<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]-->
|
||||
<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>updating poche</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>update poche to 1.0-beta4</h1>
|
||||
|
||||
<h2>Changelog</h2>
|
||||
<ul>
|
||||
<li>enhancement: updating and installing poche are more easier</li>
|
||||
<li>enhancement: poche now uses Full Text RSS to fetch content</li>
|
||||
<li>enhancement: css and twig files are more clean, thanks to NumEricR and nicofrand</li>
|
||||
<li>enhancement: updated german translation, thanks to HLFH</li>
|
||||
<li>enhancement: add db/, cache/ and assets/ directories in versioning</li>
|
||||
<li>enhancement: display messages when error with import, thanks to EliasZ</li>
|
||||
<li>enhancement: poche compatibility test file</li>
|
||||
<li>enhancement: <a href="https://github.com/inthepoche/poche/issues/112">#112</a>: link with shaarli</li>
|
||||
<li>enhancement: <a href="https://github.com/inthepoche/poche/issues/162">#162</a>: links to firefox / chrome / android apps in config screen</li>
|
||||
<li>bug: encode url to share with twitter / email / shaarli</li>
|
||||
<li>bug: Add IPv4 url support (and others beginning by a digit)</li>
|
||||
<li>bug: title page in article view was wrong</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/148">#148</a>: use of undefined constant POCHE_VERSION</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/148">#149</a>: can't poche theguardian.com</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/150">#150</a>: default title for untitled articles</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/150">#151</a>: HTML entities in titles are encoded twice</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/169">#169</a>: entries height with short description</li>
|
||||
<li>bug: <a href="https://github.com/inthepoche/poche/issues/175">#175</a>: IP addresses do not appear in "view original"</li>
|
||||
</ul>
|
||||
<p>To update your poche, please fill the following fields.</p>
|
||||
<p>
|
||||
<form name="update" method="post">
|
||||
<div><label for="login">login:</label> <input type="text" name="login" id="login" /></div>
|
||||
<div><label for="password">password:</label> <input type="password" name="password" id="password" /></div>
|
||||
<div><input type="hidden" name="go" value="ok" /><input type="submit" value="update" /></div>
|
||||
</form>
|
||||
</p>
|
||||
<?php
|
||||
if (isset($_POST['go'])) {
|
||||
if (!empty($_POST['login']) && !empty($_POST['password'])) {
|
||||
$user = $store->login($_POST['login'], sha1($_POST['password'] . $_POST['login'] . SALT));
|
||||
if ($user != array()) {
|
||||
$myconfig_file = '../inc/poche/myconfig.inc.php';
|
||||
# just change version number in config file
|
||||
|
||||
if (!is_writable('../inc/poche/myconfig.inc.php')) {
|
||||
die('You don\'t have write access to open ./inc/poche/myconfig.inc.php.');
|
||||
}
|
||||
|
||||
if (file_exists($myconfig_file))
|
||||
{
|
||||
$content = str_replace('1.0-beta3', '1.0-beta4', file_get_contents($myconfig_file));
|
||||
file_put_contents($myconfig_file, $content);
|
||||
}
|
||||
?>
|
||||
<p><span style="color: green;">your poche is up to date!</span></p>
|
||||
<p><span style="color: red;">don't forget to delete ./install/ folder after the update.</span></p>
|
||||
<p><a href="../">go back to your poche</a></p>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,72 +0,0 @@
|
||||
<?php
|
||||
# import script to upgrade from poche 0.3
|
||||
$db_path = 'sqlite:../db/poche.sqlite';
|
||||
$handle = new PDO($db_path);
|
||||
$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
# Requêtes à exécuter pour mettre à jour poche.sqlite en 1.x
|
||||
|
||||
# ajout d'un champ user_id sur la table entries
|
||||
$sql = 'ALTER TABLE entries RENAME TO tempEntries;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'CREATE TABLE entries (id INTEGER PRIMARY KEY, title TEXT, url TEXT, is_read NUMERIC DEFAULT 0, is_fav NUMERIC DEFAULT 0, content BLOB, user_id NUMERIC);';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'INSERT INTO entries (id, title, url, is_read, is_fav, content) SELECT id, title, url, is_read, is_fav, content FROM tempEntries;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Update tout pour mettre user_id = 1
|
||||
$sql = 'UPDATE entries SET user_id = 1;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Changement des flags pour les lus / favoris
|
||||
$sql = 'UPDATE entries SET is_read = 1 WHERE is_read = -1;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'UPDATE entries SET is_fav = 1 WHERE is_fav = -1;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Création de la table users
|
||||
$sql = 'CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT, password TEXT, name TEXT, email TEXT);';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'INSERT INTO users (username) SELECT value FROM config WHERE name = "login";';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = "UPDATE users SET password = (SELECT value FROM config WHERE name = 'password')";
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Création de la table users_config
|
||||
$sql = 'CREATE TABLE users_config (id INTEGER PRIMARY KEY, user_id NUMERIC, name TEXT, value TEXT);';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'INSERT INTO users_config (user_id, name, value) VALUES (1, "pager", "10");';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
$sql = 'INSERT INTO users_config (user_id, name, value) VALUES (1, "language", "en_EN.UTF8");';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Suppression de la table temporaire
|
||||
$sql = 'DROP TABLE tempEntries;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
# Vidage de la table de config
|
||||
$sql = 'DELETE FROM config;';
|
||||
$query = $handle->prepare($sql);
|
||||
$query->execute();
|
||||
|
||||
echo 'welcome to poche 1.0 !';
|
||||
@ -1,79 +0,0 @@
|
||||
<?php
|
||||
require_once dirname(__FILE__).'/../inc/poche/Tools.class.php';
|
||||
include dirname(__FILE__).'/../inc/poche/define.inc.php';
|
||||
require_once __DIR__ . '/../inc/poche/Database.class.php';
|
||||
$store = new Database();
|
||||
$old_salt = '464v54gLLw928uz4zUBqkRJeiPY68zCX';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<!--[if lte IE 6]> <html class="no-js ie6 ie67 ie678" lang="en"> <![endif]-->
|
||||
<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]-->
|
||||
<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>updating poche</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>update poche to 1.0-beta3</h1>
|
||||
|
||||
<h2>Changelog</h2>
|
||||
<p>
|
||||
<ul>
|
||||
<li>this awesome updating step</li>
|
||||
<li>error message when install folder exists</li>
|
||||
<li>more tests before installation (write access, etc.)</li>
|
||||
<li>updated README to make installation easier</li>
|
||||
<li>german language thanks to HLFH</li>
|
||||
<li>spanish language thanks to Nitche</li>
|
||||
<li>new file ./inc/poche/myconfig.inc.php created to store language and salt</li>
|
||||
<li><a href="https://github.com/inthepoche/poche/issues/119">#119</a>: salt is now created when installing poche</li>
|
||||
<li><a href="https://github.com/inthepoche/poche/issues/130">#130</a>: robots.txt added</li>
|
||||
<li><a href="https://github.com/inthepoche/poche/issues/136">#136</a>: error during readability import</li>
|
||||
<li><a href="https://github.com/inthepoche/poche/issues/137">#137</a>: mixed content alert in https</li>
|
||||
<li><a href="https://github.com/inthepoche/poche/issues/138">#138</a>: change pattern to parse url with #</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>To update your poche, please fill the following fields.</p>
|
||||
<p>
|
||||
<form name="update" method="post">
|
||||
<div><label for="login">login:</label> <input type="text" name="login" id="login" /></div>
|
||||
<div><label for="password">password:</label> <input type="password" name="password" id="password" /></div>
|
||||
<div><input type="hidden" name="go" value="ok" /><input type="submit" value="update" /></div>
|
||||
</form>
|
||||
</p>
|
||||
<?php
|
||||
if (isset($_POST['go'])) {
|
||||
if (!empty($_POST['login']) && !empty($_POST['password'])) {
|
||||
$user = $store->login($_POST['login'], sha1($_POST['password'] . $_POST['login'] . $old_salt));
|
||||
if ($user != array()) {
|
||||
$new_salt = md5(time() . $_SERVER['SCRIPT_FILENAME'] . rand());
|
||||
$myconfig_file = '../inc/poche/myconfig.inc.php';
|
||||
if (!is_writable('../inc/poche/')) {
|
||||
die('You don\'t have write access to create ./inc/poche/myconfig.inc.php.');
|
||||
}
|
||||
|
||||
if (!file_exists($myconfig_file))
|
||||
{
|
||||
$fp = fopen($myconfig_file, 'w');
|
||||
|
||||
fwrite($fp, '<?php'."\r\n");
|
||||
fwrite($fp, "define ('POCHE_VERSION', '1.0-beta3');" . "\r\n");
|
||||
fwrite($fp, "define ('SALT', '" . $new_salt . "');" . "\r\n");
|
||||
fwrite($fp, "define ('LANG', 'en_EN.utf8');" . "\r\n");
|
||||
fclose($fp);
|
||||
}
|
||||
# faire une mise à jour de la table users en prenant en compte le nouveau SALT généré
|
||||
$store->updatePassword($user['id'], sha1($_POST['password'] . $_POST['login'] . $new_salt));
|
||||
?>
|
||||
<p><span style="color: green;">your poche is up to date!</span></p>
|
||||
<p><span style="color: red;">don't forget to delete ./install/ folder after the update.</span></p>
|
||||
<p><a href="../">go back to your poche</a></p>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
BIN
locale/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.mo
Normal file
233
locale/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.po
Normal file
@ -0,0 +1,233 @@
|
||||
#
|
||||
# Translators:
|
||||
# David Štancl <dstancl@gmail.com>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: poche\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2013-10-08 13:25+0100\n"
|
||||
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/poche/language/"
|
||||
"cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
msgid "config"
|
||||
msgstr "nastavení"
|
||||
|
||||
msgid "Poching a link"
|
||||
msgstr "Odkaz se ukládá"
|
||||
|
||||
msgid "read the documentation"
|
||||
msgstr "číst dokumentaci"
|
||||
|
||||
msgid "by filling this field"
|
||||
msgstr "vyplněním tohoto pole"
|
||||
|
||||
msgid "poche it!"
|
||||
msgstr "uložit!"
|
||||
|
||||
msgid "Updating poche"
|
||||
msgstr "Poche se aktualizuje"
|
||||
|
||||
msgid "your version"
|
||||
msgstr "vaše verze"
|
||||
|
||||
msgid "latest stable version"
|
||||
msgstr "poslední stabilní verze"
|
||||
|
||||
msgid "a more recent stable version is available."
|
||||
msgstr "je k dispozici novější stabilní verze."
|
||||
|
||||
msgid "you are up to date."
|
||||
msgstr "je aktuální"
|
||||
|
||||
msgid "latest dev version"
|
||||
msgstr "poslední vývojová verze"
|
||||
|
||||
msgid "a more recent development version is available."
|
||||
msgstr "je k dispozici novější vývojová verze."
|
||||
|
||||
msgid "Change your password"
|
||||
msgstr "Změnit heslo"
|
||||
|
||||
msgid "New password:"
|
||||
msgstr "Nové heslo:"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
msgid "Repeat your new password:"
|
||||
msgstr "Znovu nové heslo:"
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Aktualizovat"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importovat"
|
||||
|
||||
msgid "Please execute the import script locally, it can take a very long time."
|
||||
msgstr "Spusťte importní skript lokálně, může to dlouho trvat."
|
||||
|
||||
msgid "More infos in the official doc:"
|
||||
msgstr "Více informací v oficiální dokumentaci:"
|
||||
|
||||
msgid "import from Pocket"
|
||||
msgstr "importovat z Pocket"
|
||||
|
||||
msgid "import from Readability"
|
||||
msgstr "importovat z Readability"
|
||||
|
||||
msgid "import from Instapaper"
|
||||
msgstr "importovat z Instapaper"
|
||||
|
||||
msgid "Export your poche datas"
|
||||
msgstr "Export dat"
|
||||
|
||||
msgid "Click here"
|
||||
msgstr "Klikněte zde"
|
||||
|
||||
msgid "to export your poche datas."
|
||||
msgstr "pro export vašich dat."
|
||||
|
||||
msgid "back to home"
|
||||
msgstr "zpět na úvod"
|
||||
|
||||
msgid "installation"
|
||||
msgstr "instalace"
|
||||
|
||||
msgid "install your poche"
|
||||
msgstr "instalovat"
|
||||
|
||||
msgid ""
|
||||
"poche is still not installed. Please fill the below form to install it. "
|
||||
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
|
||||
"on poche website</a>."
|
||||
msgstr ""
|
||||
"poche ještě není nainstalováno. Pro instalaci vyplňte níže uvedený formulář. "
|
||||
"Nezapomeňte <a href='http://inthepoche.com/doc'>si přečíst dokumentaci</a> "
|
||||
"na stránkách programu."
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Jméno"
|
||||
|
||||
msgid "Repeat your password"
|
||||
msgstr "Zopakujte heslo"
|
||||
|
||||
msgid "Install"
|
||||
msgstr "Instalovat"
|
||||
|
||||
msgid "back to top"
|
||||
msgstr "zpět na začátek"
|
||||
|
||||
msgid "favoris"
|
||||
msgstr "oblíbené"
|
||||
|
||||
msgid "archive"
|
||||
msgstr "archív"
|
||||
|
||||
msgid "unread"
|
||||
msgstr "nepřečtené"
|
||||
|
||||
msgid "by date asc"
|
||||
msgstr "podle data od nejstarších"
|
||||
|
||||
msgid "by date"
|
||||
msgstr "podle data"
|
||||
|
||||
msgid "by date desc"
|
||||
msgstr "podle data od nejnovějších"
|
||||
|
||||
msgid "by title asc"
|
||||
msgstr "podle nadpisu vzestupně"
|
||||
|
||||
msgid "by title"
|
||||
msgstr "podle nadpisu"
|
||||
|
||||
msgid "by title desc"
|
||||
msgstr "podle nadpisu sestupně"
|
||||
|
||||
msgid "No link available here!"
|
||||
msgstr "Není k dispozici žádný odkaz!"
|
||||
|
||||
msgid "toggle mark as read"
|
||||
msgstr "označit jako přečtené"
|
||||
|
||||
msgid "toggle favorite"
|
||||
msgstr "označit jako oblíbené"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "smazat"
|
||||
|
||||
msgid "original"
|
||||
msgstr "originál"
|
||||
|
||||
msgid "results"
|
||||
msgstr "výsledky"
|
||||
|
||||
msgid "tweet"
|
||||
msgstr "tweetnout"
|
||||
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
msgid "shaarli"
|
||||
msgstr "shaarli"
|
||||
|
||||
msgid "flattr"
|
||||
msgstr "flattr"
|
||||
|
||||
msgid "this article appears wrong?"
|
||||
msgstr "vypadá tento článek špatně?"
|
||||
|
||||
msgid "create an issue"
|
||||
msgstr "odeslat požadavek"
|
||||
|
||||
msgid "or"
|
||||
msgstr "nebo"
|
||||
|
||||
msgid "contact us by mail"
|
||||
msgstr "kontaktovat e-mailem"
|
||||
|
||||
msgid "plop"
|
||||
msgstr ""
|
||||
|
||||
msgid "home"
|
||||
msgstr "domů"
|
||||
|
||||
msgid "favorites"
|
||||
msgstr "oblíbené"
|
||||
|
||||
msgid "logout"
|
||||
msgstr "odhlásit se"
|
||||
|
||||
msgid "powered by"
|
||||
msgstr "běží na"
|
||||
|
||||
msgid "debug mode is on so cache is off."
|
||||
msgstr "je zapnut ladicí mód, proto je keš vypnuta."
|
||||
|
||||
msgid "your poche version:"
|
||||
msgstr "verze:"
|
||||
|
||||
msgid "storage:"
|
||||
msgstr "úložiště:"
|
||||
|
||||
msgid "login to your poche"
|
||||
msgstr "přihlásit se k poche"
|
||||
|
||||
msgid "you are in demo mode, some features may be disabled."
|
||||
msgstr "používáte ukázkový mód, některé funkce jsou zakázány."
|
||||
|
||||
msgid "Stay signed in"
|
||||
msgstr "Zůstat přihlášen(a)"
|
||||
|
||||
msgid "(Do not check on public computers)"
|
||||
msgstr "(Nezaškrtávejte na veřejně dostupných počítačích)"
|
||||
|
||||
msgid "Sign in"
|
||||
msgstr "Přihlásit se"
|
||||
@ -3,51 +3,51 @@ msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
|
||||
"Last-Translator: Square252\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
"X-Generator: Poedit 1.5.7\n"
|
||||
|
||||
msgid "config"
|
||||
msgstr "Konfig"
|
||||
msgstr "Konfiguration"
|
||||
|
||||
msgid "Poching a link"
|
||||
msgstr ""
|
||||
msgstr "Poche einen Link"
|
||||
|
||||
msgid "read the documentation"
|
||||
msgstr ""
|
||||
msgstr "Die Dokumentation lesen"
|
||||
|
||||
msgid "by filling this field"
|
||||
msgstr ""
|
||||
msgstr "durch das ausfüllen dieses Feldes:"
|
||||
|
||||
msgid "poche it!"
|
||||
msgstr "Pochert es!"
|
||||
msgstr "Poche es!"
|
||||
|
||||
msgid "Updating poche"
|
||||
msgstr "Poche aktualisieren"
|
||||
|
||||
msgid "your version"
|
||||
msgstr "Ihre Version"
|
||||
msgstr "Deine Version"
|
||||
|
||||
msgid "latest stable version"
|
||||
msgstr "letzte stabile Version"
|
||||
msgstr "Neuste stabile Version"
|
||||
|
||||
msgid "a more recent stable version is available."
|
||||
msgstr "eine neuere stabile Version ist verfügbar."
|
||||
msgstr "Eine neuere stabile Version ist verfügbar."
|
||||
|
||||
msgid "you are up to date."
|
||||
msgstr "Sie sind auf den neuesten Stand."
|
||||
msgstr "Du bist auf den neuesten Stand."
|
||||
|
||||
msgid "latest dev version"
|
||||
msgstr "letzte Entwicklungsversion"
|
||||
msgstr "Neuste Entwicklungsversion"
|
||||
|
||||
msgid "a more recent development version is available."
|
||||
msgstr "eine neuere Entwicklungsversion ist verfügbar."
|
||||
msgstr "Eine neuere Entwicklungsversion ist verfügbar."
|
||||
|
||||
msgid "Change your password"
|
||||
msgstr "Ihr Passwort ändern"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
msgid "New password:"
|
||||
msgstr "Neues Passwort:"
|
||||
@ -56,7 +56,7 @@ msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
msgid "Repeat your new password:"
|
||||
msgstr "neues Passwort wiederholen:"
|
||||
msgstr "Neues Passwort wiederholen:"
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Aktualisieren"
|
||||
@ -65,114 +65,113 @@ msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
msgid "Please execute the import script locally, it can take a very long time."
|
||||
msgstr ""
|
||||
"Wir danken Ihnen, den Import in lokal zu ausführen, kann es einige Zeit "
|
||||
"dauern."
|
||||
msgstr "Bitte führe das Import Script lokal aus, dies kann eine Weile dauern."
|
||||
|
||||
msgid "More infos in the official doc:"
|
||||
msgstr "Mehr Informationen auf der offiziellen Dokumentation:"
|
||||
msgstr "Mehr Informationen in der offiziellen Dokumentation:"
|
||||
|
||||
msgid "import from Pocket"
|
||||
msgstr "import aus Pocket"
|
||||
msgstr "Import aus Pocket"
|
||||
|
||||
msgid "import from Readability"
|
||||
msgstr "import aus Readability"
|
||||
msgstr "Import aus Readability"
|
||||
|
||||
msgid "import from Instapaper"
|
||||
msgstr "import aus Instapaper"
|
||||
msgstr "Import aus Instapaper"
|
||||
|
||||
msgid "Export your poche datas"
|
||||
msgstr "Exportieren Sie Ihre Daten aus Poche."
|
||||
msgstr "Exportieren Sie Ihre Poche Daten."
|
||||
|
||||
msgid "Click here"
|
||||
msgstr "klicken Sie hier"
|
||||
msgstr "Klicke hier"
|
||||
|
||||
msgid "to export your poche datas."
|
||||
msgstr "um Ihre Daten aus Poche zu exportieren."
|
||||
msgstr "um deine Daten aus Poche zu exportieren."
|
||||
|
||||
msgid "back to home"
|
||||
msgstr "züruck zur Hauptseite"
|
||||
|
||||
msgid "installation"
|
||||
msgstr "Installierung"
|
||||
msgstr "Installieren"
|
||||
|
||||
msgid "install your poche"
|
||||
msgstr "installieren Sie Poche"
|
||||
msgstr "Installiere dein Poche"
|
||||
|
||||
msgid ""
|
||||
"poche is still not installed. Please fill the below form to install it. "
|
||||
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
|
||||
"on poche website</a>."
|
||||
msgstr ""
|
||||
"Poche ist noch nicht installiert. Wir danken Ihnen, die Felder unten zu "
|
||||
"befüllen, um es zu machen. Zögern sie nicht, <a href='http://inthepoche.com/"
|
||||
"doc'>die Dokumentation auf der Website von Poche zu lesen."
|
||||
"Poche ist noch nicht installiert. Bitte fülle die Felder unten aus, um die "
|
||||
"Installation durchzuführen. Zögere nicht, <a href='http://inthepoche.com/"
|
||||
"doc'>die Dokumentation auf der Website von Poche zu lesen falls du Probleme "
|
||||
"haben solltest."
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Benutzername"
|
||||
|
||||
msgid "Repeat your password"
|
||||
msgstr "Wiederholen Sie Ihr Passwort"
|
||||
msgstr "Wiederhole dein Passwort"
|
||||
|
||||
msgid "Install"
|
||||
msgstr "Installieren"
|
||||
|
||||
msgid "back to top"
|
||||
msgstr "zurück nach oben"
|
||||
msgstr "Nach Oben"
|
||||
|
||||
msgid "favoris"
|
||||
msgstr ""
|
||||
|
||||
msgid "archive"
|
||||
msgstr "Archive"
|
||||
msgstr "Archiv"
|
||||
|
||||
msgid "unread"
|
||||
msgstr ""
|
||||
msgstr "ungelesen"
|
||||
|
||||
msgid "by date asc"
|
||||
msgstr "nach Datum asc"
|
||||
msgstr "nach Datum aufsteigend"
|
||||
|
||||
msgid "by date"
|
||||
msgstr "nach Datum"
|
||||
|
||||
msgid "by date desc"
|
||||
msgstr "nach Datum desc"
|
||||
msgstr "nach Datum absteigend"
|
||||
|
||||
msgid "by title asc"
|
||||
msgstr "nach Titel asc"
|
||||
msgstr "nach Titel aufsteigend"
|
||||
|
||||
msgid "by title"
|
||||
msgstr "nach Titel"
|
||||
|
||||
msgid "by title desc"
|
||||
msgstr "nach Titel desc"
|
||||
msgstr "nach Titel absteigend"
|
||||
|
||||
msgid "No link available here!"
|
||||
msgstr ""
|
||||
msgstr "Kein Link verfügbar!"
|
||||
|
||||
msgid "toggle mark as read"
|
||||
msgstr "als gelesen markieren"
|
||||
msgstr "Als gelesen markieren"
|
||||
|
||||
msgid "toggle favorite"
|
||||
msgstr "Favorit"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "löschen"
|
||||
msgstr "Löschen"
|
||||
|
||||
msgid "original"
|
||||
msgstr "Original"
|
||||
|
||||
msgid "results"
|
||||
msgstr ""
|
||||
msgstr "Ergebnisse"
|
||||
|
||||
msgid "tweet"
|
||||
msgstr "twittern"
|
||||
msgstr "Twittern"
|
||||
|
||||
msgid "email"
|
||||
msgstr "senden per E-Mail"
|
||||
|
||||
msgid "shaarli"
|
||||
msgstr "shaarli"
|
||||
msgstr "Shaarli"
|
||||
|
||||
msgid "flattr"
|
||||
msgstr "flattr"
|
||||
@ -193,37 +192,38 @@ msgid "plop"
|
||||
msgstr "plop"
|
||||
|
||||
msgid "home"
|
||||
msgstr "Hause"
|
||||
msgstr "Start"
|
||||
|
||||
msgid "favorites"
|
||||
msgstr "Favoriten"
|
||||
|
||||
msgid "logout"
|
||||
msgstr "Trennung"
|
||||
msgstr "Logout"
|
||||
|
||||
msgid "powered by"
|
||||
msgstr "bereitgestellt von"
|
||||
|
||||
msgid "debug mode is on so cache is off."
|
||||
msgstr ""
|
||||
msgstr "Debug Modus ist aktiviert, das Caching ist somit deaktiviert"
|
||||
|
||||
msgid "your poche version:"
|
||||
msgstr ""
|
||||
msgstr "Deine Poche Version"
|
||||
|
||||
msgid "storage:"
|
||||
msgstr ""
|
||||
msgstr "Speicher:"
|
||||
|
||||
msgid "login to your poche"
|
||||
msgstr "Verbinden zu Poche"
|
||||
msgstr "Bei Poche anmelden"
|
||||
|
||||
msgid "you are in demo mode, some features may be disabled."
|
||||
msgstr "Sie sind im Demomodus, können einige Funktionen deaktiviert werden."
|
||||
msgstr ""
|
||||
"Du befindest dich im Demomodus, einige Funktionen könnten deaktiviert sein."
|
||||
|
||||
msgid "Stay signed in"
|
||||
msgstr "bleiben Sie verbunden"
|
||||
msgstr "Angemeldet bleiben"
|
||||
|
||||
msgid "(Do not check on public computers)"
|
||||
msgstr "(nicht auf einem öffentlichen Computer überprüfen)"
|
||||
msgstr "(nicht auf einem öffentlichen Computer anhaken)"
|
||||
|
||||
msgid "Sign in"
|
||||
msgstr "Einloggen"
|
||||
|
||||
BIN
locale/it_IT.utf8/LC_MESSAGES/it_IT.utf8.mo
Normal file
237
locale/it_IT.utf8/LC_MESSAGES/it_IT.utf8.po
Normal file
@ -0,0 +1,237 @@
|
||||
#
|
||||
# Translators:
|
||||
# Damtux <sun_lion@live.com>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: poche\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2013-11-25 09:47+0100\n"
|
||||
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/projects/p/poche/language/"
|
||||
"it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
msgid "config"
|
||||
msgstr "configurazione"
|
||||
|
||||
msgid "Poching a link"
|
||||
msgstr "Pochare un link"
|
||||
|
||||
msgid "read the documentation"
|
||||
msgstr "leggi la documentazione"
|
||||
|
||||
msgid "by filling this field"
|
||||
msgstr "compilando questo campo"
|
||||
|
||||
msgid "poche it!"
|
||||
msgstr "pochalo!"
|
||||
|
||||
msgid "Updating poche"
|
||||
msgstr "Aggiornamento poche"
|
||||
|
||||
msgid "your version"
|
||||
msgstr "la tua versione"
|
||||
|
||||
msgid "latest stable version"
|
||||
msgstr "ultima versione stabile"
|
||||
|
||||
msgid "a more recent stable version is available."
|
||||
msgstr "è disponibile una versione stabile più recente."
|
||||
|
||||
msgid "you are up to date."
|
||||
msgstr "sei aggiornato."
|
||||
|
||||
msgid "latest dev version"
|
||||
msgstr "ultima versione di sviluppo"
|
||||
|
||||
msgid "a more recent development version is available."
|
||||
msgstr "è disponibile una versione di sviluppo più recente."
|
||||
|
||||
msgid "Change your password"
|
||||
msgstr "Cambia la tua password"
|
||||
|
||||
msgid "New password:"
|
||||
msgstr "Nuova password:"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
msgid "Repeat your new password:"
|
||||
msgstr "Ripeti la nuova password:"
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importa"
|
||||
|
||||
msgid "Please execute the import script locally, it can take a very long time."
|
||||
msgstr ""
|
||||
"Si prega di eseguire lo script di importazione a livello locale, può "
|
||||
"richiedere un tempo molto lungo."
|
||||
|
||||
msgid "More infos in the official doc:"
|
||||
msgstr "Maggiori info nella documentazione ufficiale"
|
||||
|
||||
msgid "import from Pocket"
|
||||
msgstr "Importa da Pocket"
|
||||
|
||||
msgid "import from Readability"
|
||||
msgstr "Importa da Readability"
|
||||
|
||||
msgid "import from Instapaper"
|
||||
msgstr "Importa da Instapaper"
|
||||
|
||||
msgid "Export your poche datas"
|
||||
msgstr "Esporta i tuoi dati di poche"
|
||||
|
||||
msgid "Click here"
|
||||
msgstr "Fai clic qui"
|
||||
|
||||
msgid "to export your poche datas."
|
||||
msgstr "per esportare i tuoi dati di poche."
|
||||
|
||||
msgid "back to home"
|
||||
msgstr "torna alla home"
|
||||
|
||||
msgid "installation"
|
||||
msgstr "installazione"
|
||||
|
||||
msgid "install your poche"
|
||||
msgstr "installa il tuo poche"
|
||||
|
||||
msgid ""
|
||||
"poche is still not installed. Please fill the below form to install it. "
|
||||
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
|
||||
"on poche website</a>."
|
||||
msgstr ""
|
||||
"poche non è ancora installato. Si prega di riempire il modulo sottostante "
|
||||
"per completare l'installazione. <a href='http://inthepoche.com/doc'>Leggere "
|
||||
"la documentazione sul sito di poche</a>."
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Nome utente"
|
||||
|
||||
msgid "Repeat your password"
|
||||
msgstr "Ripeti la tua password"
|
||||
|
||||
msgid "Install"
|
||||
msgstr "Installa"
|
||||
|
||||
msgid "back to top"
|
||||
msgstr "torna a inizio pagina"
|
||||
|
||||
msgid "favoris"
|
||||
msgstr "preferiti"
|
||||
|
||||
msgid "archive"
|
||||
msgstr "archivio"
|
||||
|
||||
msgid "unread"
|
||||
msgstr "non letti"
|
||||
|
||||
msgid "by date asc"
|
||||
msgstr "per data cresc"
|
||||
|
||||
msgid "by date"
|
||||
msgstr "per data"
|
||||
|
||||
msgid "by date desc"
|
||||
msgstr "per data decr"
|
||||
|
||||
msgid "by title asc"
|
||||
msgstr "per titolo cresc"
|
||||
|
||||
msgid "by title"
|
||||
msgstr "per titolo"
|
||||
|
||||
msgid "by title desc"
|
||||
msgstr "per titolo decr"
|
||||
|
||||
msgid "No link available here!"
|
||||
msgstr "Nessun link disponibile!"
|
||||
|
||||
msgid "toggle mark as read"
|
||||
msgstr "segna come letto / non letto"
|
||||
|
||||
msgid "toggle favorite"
|
||||
msgstr "segna come preferito"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "elimina"
|
||||
|
||||
msgid "original"
|
||||
msgstr "originale"
|
||||
|
||||
msgid "results"
|
||||
msgstr "risultati"
|
||||
|
||||
msgid "tweet"
|
||||
msgstr "twitta"
|
||||
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
msgid "shaarli"
|
||||
msgstr "shaarli"
|
||||
|
||||
msgid "flattr"
|
||||
msgstr "flattr"
|
||||
|
||||
msgid "this article appears wrong?"
|
||||
msgstr "articolo non visualizzato correttamente?"
|
||||
|
||||
msgid "create an issue"
|
||||
msgstr "crea una segnalazione"
|
||||
|
||||
msgid "or"
|
||||
msgstr "oppure"
|
||||
|
||||
msgid "contact us by mail"
|
||||
msgstr "contattaci via email"
|
||||
|
||||
msgid "plop"
|
||||
msgstr "plop"
|
||||
|
||||
msgid "home"
|
||||
msgstr "home"
|
||||
|
||||
msgid "favorites"
|
||||
msgstr "preferiti"
|
||||
|
||||
msgid "logout"
|
||||
msgstr "esci"
|
||||
|
||||
msgid "powered by"
|
||||
msgstr "realizzato con"
|
||||
|
||||
msgid "debug mode is on so cache is off."
|
||||
msgstr "modalità di debug attiva, cache disattivata."
|
||||
|
||||
msgid "your poche version:"
|
||||
msgstr "la tua versione di poche:"
|
||||
|
||||
msgid "storage:"
|
||||
msgstr "memoria:"
|
||||
|
||||
msgid "login to your poche"
|
||||
msgstr "accedi al tuo poche"
|
||||
|
||||
msgid "you are in demo mode, some features may be disabled."
|
||||
msgstr ""
|
||||
"sei in modalità dimostrazione, alcune funzionalità potrebbero essere "
|
||||
"disattivate."
|
||||
|
||||
msgid "Stay signed in"
|
||||
msgstr "Resta connesso"
|
||||
|
||||
msgid "(Do not check on public computers)"
|
||||
msgstr "(non selezionare su computer pubblici)"
|
||||
|
||||
msgid "Sign in"
|
||||
msgstr "Accedi"
|
||||
BIN
locale/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.mo
Normal file
228
locale/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.po
Normal file
@ -0,0 +1,228 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
msgid "config"
|
||||
msgstr "настройки"
|
||||
|
||||
msgid "Poching a link"
|
||||
msgstr "Сохраняю ссылку"
|
||||
|
||||
msgid "read the documentation"
|
||||
msgstr "читать инструкцию"
|
||||
|
||||
msgid "by filling this field"
|
||||
msgstr "заполнением этого поля"
|
||||
|
||||
msgid "poche it!"
|
||||
msgstr "Прикарманить!"
|
||||
|
||||
msgid "Updating poche"
|
||||
msgstr "Обновляю poche"
|
||||
|
||||
msgid "your version"
|
||||
msgstr "Ваша версия"
|
||||
|
||||
msgid "latest stable version"
|
||||
msgstr "крайняя стабильная версия"
|
||||
|
||||
msgid "a more recent stable version is available."
|
||||
msgstr "есть более новая стабильная версия."
|
||||
|
||||
msgid "you are up to date."
|
||||
msgstr "у Вас всё самое новое."
|
||||
|
||||
msgid "latest dev version"
|
||||
msgstr "крайняя версия разработчиков"
|
||||
|
||||
msgid "a more recent development version is available."
|
||||
msgstr "есть более свежая версия разработчиков."
|
||||
|
||||
msgid "Change your password"
|
||||
msgstr "Смени пароль"
|
||||
|
||||
msgid "New password:"
|
||||
msgstr "Новый пароль:"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
msgid "Repeat your new password:"
|
||||
msgstr "Ещё раз новый пароль:"
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Обновить"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Импортировать"
|
||||
|
||||
msgid "Please execute the import script locally, it can take a very long time."
|
||||
msgstr ""
|
||||
"Выполните сценарий импорта локально - он может занять слишком много времени."
|
||||
|
||||
msgid "More infos in the official doc:"
|
||||
msgstr "Больше сведений в официальной документации:"
|
||||
|
||||
msgid "import from Pocket"
|
||||
msgstr "импортировать из Pocket"
|
||||
|
||||
msgid "import from Readability"
|
||||
msgstr "импортировать из Readability"
|
||||
|
||||
msgid "import from Instapaper"
|
||||
msgstr "импортировать из Instapaper"
|
||||
|
||||
msgid "Export your poche datas"
|
||||
msgstr "Экспортировать данные poche"
|
||||
|
||||
msgid "Click here"
|
||||
msgstr "Кликни сюда"
|
||||
|
||||
msgid "to export your poche datas."
|
||||
msgstr "чтобы экспортировать твои записи из poche."
|
||||
|
||||
msgid "back to home"
|
||||
msgstr "домой"
|
||||
|
||||
msgid "installation"
|
||||
msgstr "установка"
|
||||
|
||||
msgid "install your poche"
|
||||
msgstr "установить твой poche"
|
||||
|
||||
msgid ""
|
||||
"poche is still not installed. Please fill the below form to install it. "
|
||||
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
|
||||
"on poche website</a>."
|
||||
msgstr ""
|
||||
"poche всё ещё не установлен. Надо заполнить форму ниже, чтобы установить "
|
||||
"его. Неплохо также <a href='http://inthepoche.com/doc'>прочесть документацию "
|
||||
"на сайте poche</a>."
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Регистрационное имя"
|
||||
|
||||
msgid "Repeat your password"
|
||||
msgstr "Повтори пароль"
|
||||
|
||||
msgid "Install"
|
||||
msgstr "Установить"
|
||||
|
||||
msgid "back to top"
|
||||
msgstr "наверх"
|
||||
|
||||
msgid "favoris"
|
||||
msgstr "избранное"
|
||||
|
||||
msgid "archive"
|
||||
msgstr "архив"
|
||||
|
||||
msgid "unread"
|
||||
msgstr "нечитанное"
|
||||
|
||||
msgid "by date asc"
|
||||
msgstr "по дате, сперва старые"
|
||||
|
||||
msgid "by date"
|
||||
msgstr "по дате"
|
||||
|
||||
msgid "by date desc"
|
||||
msgstr "по дате, сперва новые"
|
||||
|
||||
msgid "by title asc"
|
||||
msgstr "по заголовку (прямой)"
|
||||
|
||||
msgid "by title"
|
||||
msgstr "по заголовку"
|
||||
|
||||
msgid "by title desc"
|
||||
msgstr "по заголовку (обратный)"
|
||||
|
||||
msgid "No link available here!"
|
||||
msgstr "Здесь нет линка!"
|
||||
|
||||
msgid "toggle mark as read"
|
||||
msgstr "изменить отметку 'прочитано'"
|
||||
|
||||
msgid "toggle favorite"
|
||||
msgstr "изменить избранность"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "удалить"
|
||||
|
||||
msgid "original"
|
||||
msgstr "исходный"
|
||||
|
||||
msgid "results"
|
||||
msgstr "найдено"
|
||||
|
||||
msgid "tweet"
|
||||
msgstr "твитнуть"
|
||||
|
||||
msgid "email"
|
||||
msgstr "отправить по почте"
|
||||
|
||||
msgid "shaarli"
|
||||
msgstr "Шаарли"
|
||||
|
||||
msgid "flattr"
|
||||
msgstr "проспонсировать"
|
||||
|
||||
msgid "this article appears wrong?"
|
||||
msgstr "статья выглядит криво?"
|
||||
|
||||
msgid "create an issue"
|
||||
msgstr "оповестить об ошибке"
|
||||
|
||||
msgid "or"
|
||||
msgstr "или"
|
||||
|
||||
msgid "contact us by mail"
|
||||
msgstr "связаться по почте"
|
||||
|
||||
msgid "plop"
|
||||
msgstr "plop"
|
||||
|
||||
msgid "home"
|
||||
msgstr "домой"
|
||||
|
||||
msgid "favorites"
|
||||
msgstr "избранное"
|
||||
|
||||
msgid "logout"
|
||||
msgstr "выйти"
|
||||
|
||||
msgid "powered by"
|
||||
msgstr "на основе"
|
||||
|
||||
msgid "debug mode is on so cache is off."
|
||||
msgstr "включён режим отладки - кеш выключен."
|
||||
|
||||
msgid "your poche version:"
|
||||
msgstr "Ваша версия poche:"
|
||||
|
||||
msgid "storage:"
|
||||
msgstr "хранилище:"
|
||||
|
||||
msgid "login to your poche"
|
||||
msgstr "войти в свой poche"
|
||||
|
||||
msgid "you are in demo mode, some features may be disabled."
|
||||
msgstr "демонстрационный режим - работают не все возможности."
|
||||
|
||||
msgid "Stay signed in"
|
||||
msgstr "Оставаться зарегистрированным"
|
||||
|
||||
msgid "(Do not check on public computers)"
|
||||
msgstr "(Не отмечай на чужих компьютерах)"
|
||||
|
||||
msgid "Sign in"
|
||||
msgstr "Зарегистрироваться"
|
||||
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
$app_name = 'poche 1.0';
|
||||
|
||||
$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.2.0', '>='));
|
||||
$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.3.3', '>='));
|
||||
$pcre_ok = extension_loaded('pcre');
|
||||
$zlib_ok = extension_loaded('zlib');
|
||||
$mbstring_ok = extension_loaded('mbstring');
|
||||
|
||||
1
themes
31
themes/README.md
Normal file
@ -0,0 +1,31 @@
|
||||
# poche-themes
|
||||
|
||||
themes created by poche users
|
||||
|
||||
## list of themes
|
||||
|
||||
* dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/dark/screenshot.jpg))
|
||||
* dmagenta ([preview](https://raw.github.com/inthepoche/poche/master/themes/dmagenta/screenshot.jpg))
|
||||
* solarized ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized/screenshot.jpg))
|
||||
* solarized-dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized-dark/screenshot.jpg))
|
||||
|
||||
## installation
|
||||
|
||||
In your poche folder:
|
||||
|
||||
```
|
||||
git submodule init
|
||||
git submodule update
|
||||
```
|
||||
|
||||
Then, in your config screen, select your favorite theme.
|
||||
|
||||
That's all !
|
||||
|
||||
## create a theme
|
||||
|
||||
Just have a look to this short documentation : http://inthepoche.com/doc/doku.php?id=designers:creating_theme
|
||||
|
||||
## send a theme
|
||||
|
||||
Send your theme by email at support@inthepoche.com.
|
||||
3
themes/dark/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# dark theme
|
||||
|
||||
theme created by Nicolas Lœuillet aka nico_somb
|
||||
74
themes/dark/css/style-dark.css
Normal file
@ -0,0 +1,74 @@
|
||||
body {
|
||||
color: #d4d4d4;
|
||||
background-color: #262627;
|
||||
}
|
||||
|
||||
a,
|
||||
a:hover,
|
||||
a:visited {
|
||||
color: #d4d4d4;
|
||||
}
|
||||
|
||||
a.back span {
|
||||
background-image: url('../img/dark/left.png');
|
||||
}
|
||||
|
||||
a.top span {
|
||||
background-image: url('../img/dark/top.png');
|
||||
}
|
||||
|
||||
a.fav span,
|
||||
a.fav-off span:hover {
|
||||
background-image: url('../img/dark/star-on.png');
|
||||
}
|
||||
|
||||
a.fav span:hover,
|
||||
a.fav-off span {
|
||||
background-image: url('../img/dark/star-off.png');
|
||||
}
|
||||
|
||||
a.archive span,
|
||||
a.archive-off span:hover {
|
||||
background-image: url('../img/dark/checkmark-on.png');
|
||||
}
|
||||
|
||||
a.archive span:hover,
|
||||
a.archive-off span {
|
||||
background-image: url('../img/dark/checkmark-off.png');
|
||||
}
|
||||
|
||||
a.twitter span {
|
||||
background-image: url('../img/dark/twitter.png');
|
||||
}
|
||||
|
||||
a.shaarli span {
|
||||
background-image: url('../img/dark/shaarli.png');
|
||||
}
|
||||
|
||||
a.flattr span {
|
||||
background-image: url('../img/dark/flattr.png');
|
||||
}
|
||||
|
||||
a.email span {
|
||||
background-image: url('../img/dark/envelop.png');
|
||||
}
|
||||
|
||||
a.delete span {
|
||||
background-image: url('../img/dark/remove.png');
|
||||
}
|
||||
|
||||
a.link span {
|
||||
background-image: url('../img/dark/link.png');
|
||||
}
|
||||
|
||||
a.bad-display span {
|
||||
background-image: url('../img/dark/bad-display.png');
|
||||
}
|
||||
|
||||
.pagination a {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
#article_toolbar {
|
||||
background: #262627;
|
||||
}
|
||||
BIN
themes/dark/img/dark/backtotop.png
Normal file
|
After Width: | Height: | Size: 250 B |
BIN
themes/dark/img/dark/bad-display.png
Normal file
|
After Width: | Height: | Size: 403 B |
BIN
themes/dark/img/dark/checkmark-off.png
Normal file
|
After Width: | Height: | Size: 339 B |
BIN
themes/dark/img/dark/checkmark-on.png
Normal file
|
After Width: | Height: | Size: 288 B |
BIN
themes/dark/img/dark/down.png
Normal file
|
After Width: | Height: | Size: 269 B |
BIN
themes/dark/img/dark/envelop.png
Normal file
|
After Width: | Height: | Size: 361 B |
BIN
themes/dark/img/dark/flattr.png
Normal file
|
After Width: | Height: | Size: 331 B |
BIN
themes/dark/img/dark/left.png
Normal file
|
After Width: | Height: | Size: 264 B |
BIN
themes/dark/img/dark/link.png
Normal file
|
After Width: | Height: | Size: 404 B |
BIN
themes/dark/img/dark/remove.png
Normal file
|
After Width: | Height: | Size: 300 B |
BIN
themes/dark/img/dark/shaarli.png
Normal file
|
After Width: | Height: | Size: 841 B |
BIN
themes/dark/img/dark/star-off.png
Normal file
|
After Width: | Height: | Size: 382 B |
BIN
themes/dark/img/dark/star-on.png
Normal file
|
After Width: | Height: | Size: 327 B |
BIN
themes/dark/img/dark/top.png
Normal file
|
After Width: | Height: | Size: 250 B |
BIN
themes/dark/img/dark/twitter.png
Normal file
|
After Width: | Height: | Size: 375 B |
BIN
themes/dark/screenshot.jpg
Normal file
|
After Width: | Height: | Size: 649 KiB |
3
themes/default/_bookmarklet.twig
Normal file
@ -0,0 +1,3 @@
|
||||
<script type="text/javascript">
|
||||
top["bookmarklet-url@inthepoche.com"]=""+"<!DOCTYPE html>"+"<html>"+"<head>"+"<title>poche it !</title>"+'<link rel="icon" href="{{poche_url}}tpl/img/favicon.ico" />'+"</head>"+"<body>"+"<script>"+"window.onload=function(){"+"window.setTimeout(function(){"+"history.back();"+"},250);"+"};"+"</scr"+"ipt>"+"</body>"+"</html>"
|
||||
</script>
|
||||
4
themes/default/_footer.twig
Normal file
@ -0,0 +1,4 @@
|
||||
<footer class="w600p center mt3 mb3 smaller txtright">
|
||||
<p>{% trans "powered by" %} <a href="http://inthepoche.com">poche</a></p>
|
||||
{% if constant('DEBUG_POCHE') == 1 %}<p><strong>{% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE')}}. {% trans "storage:" %} {{constant('STORAGE')}}</strong></p>{% endif %}
|
||||
</footer>
|
||||
11
themes/default/_head.twig
Normal file
@ -0,0 +1,11 @@
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/favicon.ico" />
|
||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-144x144-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-72x72-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-precomposed.png">
|
||||
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/knacss.css" media="all">
|
||||
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/style.css" media="all">
|
||||
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ theme }}/css/style-{{ theme }}.css" media="all" title="{{ theme }} theme">
|
||||
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/messages.css" media="all">
|
||||
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/print.css" media="print">
|
||||
<script src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/js/jquery-2.0.3.min.js"></script>
|
||||
<script src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/js/autoClose.js"></script>
|
||||
7
themes/default/_menu.twig
Normal file
@ -0,0 +1,7 @@
|
||||
<ul id="links">
|
||||
<li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "home" %}</a></li>
|
||||
<li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
|
||||
<li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
|
||||
<li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
|
||||
<li><a href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
|
||||
</ul>
|
||||
1
themes/default/_messages.twig
Normal file
@ -0,0 +1 @@
|
||||
{{ messages | raw }}
|
||||
7
themes/default/_top.twig
Normal file
@ -0,0 +1,7 @@
|
||||
<header class="w600p center mbm">
|
||||
<h1>
|
||||
{% if view == 'home' %}{% block logo %}<img src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/logo.png" alt="logo poche" />{% endblock %}
|
||||
{% else %}<a href="./" title="{% trans "back to home" %}" >{{ block('logo') }}</a>
|
||||
{% endif %}
|
||||
</h1>
|
||||
</header>
|
||||
102
themes/default/config.twig
Normal file
@ -0,0 +1,102 @@
|
||||
{% extends "layout.twig" %}
|
||||
|
||||
{% block title %}{% trans "config" %}{% endblock %}
|
||||
{% block menu %}
|
||||
{% include '_menu.twig' %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<h2>{% trans "Poching a link" %}</h2>
|
||||
<p>{% trans "You can poche a link by several methods:" %} (<a href="http://inthepoche.com/doc" title="{% trans "read the documentation" %}">?</a>)</p>
|
||||
<ul>
|
||||
<li>firefox: <a href="https://addons.mozilla.org/fr/firefox/addon/poche/" title="download the firefox extension">{% trans "download the extension" %}</a></li>
|
||||
<li>chrome: <a href="http://doc.inthepoche.com/doku.php?id=users:chrome_extension" title="download the chrome extension">{% trans "download the extension" %}</a></li>
|
||||
<li>android: <a href="https://f-droid.org/repository/browse/?fdid=fr.gaulupeau.apps.Poche" title="download the application">{% trans "via f-droid" %}</a>{% trans "or" %}<a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.Poche" title="download the application">{% trans "via google play" %}</a></li>
|
||||
<li>windows phone: <a href="http://www.windowsphone.com/en-us/store/app/poche/334de2f0-51b5-4826-8549-a3d805a37e83" title="download the window phone application">{% trans "download the application" %}</a></li>
|
||||
<li>
|
||||
<form method="get" action="index.php">
|
||||
<label class="addurl" for="plainurl">{% trans "by filling this field" %}:</label>
|
||||
<input required placeholder="Ex:mywebsite.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
|
||||
<input type="submit" value="{% trans "poche it!" %}" />
|
||||
</form>
|
||||
</li>
|
||||
<li>{% trans "bookmarklet: drag & drop this link to your bookmarks bar" %} <a id="bookmarklet" ondragend="this.click();" title="i am a bookmarklet, use me !" href="javascript:if(top['bookmarklet-url@inthepoche.com']){top['bookmarklet-url@inthepoche.com'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "poche it!" %}</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>{% trans "Updating poche" %}</h2>
|
||||
<ul>
|
||||
<li>{% trans "your version" %} : <strong>{{ constant('POCHE') }}</strong></li>
|
||||
<li>{% trans "latest stable version" %} : {{ prod }}. {% if compare_prod == -1 %}<strong><a href="http://inthepoche.com/">{% trans "a more recent stable version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>
|
||||
{% if constant('DEBUG_POCHE') == 1 %}<li>{% trans "latest dev version" %} : {{ dev }}. {% if compare_dev == -1 %}<strong><a href="http://inthepoche.com/">{% trans "a more recent development version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>{% endif %}
|
||||
</ul>
|
||||
|
||||
<h2>{% trans "Change your theme" %}</h2>
|
||||
<form method="post" action="?updatetheme" name="changethemeform">
|
||||
<fieldset class="w500p">
|
||||
<div class="row">
|
||||
<label class="col w150p" for="theme">{% trans "Theme:" %}</label>
|
||||
<select class="col" id="theme" name="theme">
|
||||
{% for theme in themes %}
|
||||
<option value="{{ theme.name }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="row mts txtcenter">
|
||||
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<input type="hidden" name="returnurl" value="{{ referer }}">
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
</form>
|
||||
|
||||
<h2>{% trans "Change your language" %}</h2>
|
||||
<form method="post" action="?updatelanguage" name="changelanguageform">
|
||||
<fieldset class="w500p">
|
||||
<div class="row">
|
||||
<label class="col w150p" for="language">{% trans "Language:" %}</label>
|
||||
<select class="col" id="language" name="language">
|
||||
{% for language in languages %}
|
||||
<option value="{{ language.name }}" {{ language.current ? 'selected' : '' }}>{{ language.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="row mts txtcenter">
|
||||
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<input type="hidden" name="returnurl" value="{{ referer }}">
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
</form>
|
||||
|
||||
{% if http_auth == 0 %}
|
||||
<h2>{% trans "Change your password" %}</h2>
|
||||
<form method="post" action="?config" name="loginform">
|
||||
<fieldset class="w500p">
|
||||
<div class="row">
|
||||
<label class="col w150p" for="password">{% trans "New password:" %}</label>
|
||||
<input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2">
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col w150p" for="password_repeat">{% trans "Repeat your new password:" %}</label>
|
||||
<input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="{% trans "Password" %}" tabindex="3">
|
||||
</div>
|
||||
<div class="row mts txtcenter">
|
||||
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<input type="hidden" name="returnurl" value="{{ referer }}">
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<h2>{% trans "Import" %}</h2>
|
||||
<p>{% trans "Please execute the import script locally, it can take a very long time." %}</p>
|
||||
<p>{% trans "More infos in the official doc:" %} <a href="http://inthepoche.com/doc">inthepoche.com</a></p>
|
||||
<ul>
|
||||
<li><a href="./?import&from=pocket">{% trans "import from Pocket" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('POCKET_FILE')) }}</li>
|
||||
<li><a href="./?import&from=readability">{% trans "import from Readability" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('READABILITY_FILE')) }}</li>
|
||||
<li><a href="./?import&from=instapaper">{% trans "import from Instapaper" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('INSTAPAPER_FILE')) }}</li>
|
||||
</ul>
|
||||
|
||||
<h2>{% trans "Export your poche datas" %}</h2>
|
||||
<p><a href="?export" target="_blank">{% trans "Click here" %}</a> {% trans "to export your poche datas." %}</p>
|
||||
{% endblock %}
|
||||
1
themes/default/css/knacss.css
Normal file
75
themes/default/css/messages.css
Normal file
@ -0,0 +1,75 @@
|
||||
.messages {
|
||||
display: block;
|
||||
clear: both;
|
||||
width: 400px;
|
||||
margin: 10px auto 10px;
|
||||
padding: 10px 0;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.messages a.closeMessage {
|
||||
display: none;
|
||||
float: right;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: -14px -8px 0 0;
|
||||
background: url(../img/messages/close.png) no-repeat;
|
||||
}
|
||||
|
||||
/*.messages:hover a.closeMessage { visibility:visible; }*/
|
||||
|
||||
.messages p {
|
||||
margin: 3px 0 3px 10px !important;
|
||||
padding: 0 10px 0 23px !important;
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
}
|
||||
|
||||
.messages.error {
|
||||
border: 1px solid #c42608;
|
||||
color: #c00 !important;
|
||||
background: #fff0ef;
|
||||
}
|
||||
|
||||
.messages.error p {
|
||||
color: #c00 !important;
|
||||
background: url(../img/messages/cross.png) no-repeat 0 50%;
|
||||
}
|
||||
|
||||
.messages.success {
|
||||
border: 1px solid #6dc70c;
|
||||
background: #e0fbcc;
|
||||
}
|
||||
|
||||
.messages.success p {
|
||||
color: #2b6301 !important;
|
||||
background: url(../img/messages/tick.png) no-repeat 0 50%;
|
||||
}
|
||||
|
||||
.messages.warning {
|
||||
border: 1px solid #ebcd41;
|
||||
color: #000;
|
||||
background: #fffcd3;
|
||||
}
|
||||
|
||||
.messages.warning p {
|
||||
color: #5f4e01;
|
||||
background: url(../img/messages/warning.png) no-repeat 0 50%;
|
||||
}
|
||||
|
||||
.messages.information,
|
||||
.messages.info {
|
||||
border: 1px solid #82aee7;
|
||||
background: #dfebfb;
|
||||
}
|
||||
|
||||
.messages.information p,
|
||||
.messages.info p {
|
||||
color: #064393;
|
||||
background: url(../img/messages/help.png) no-repeat 0 50%;
|
||||
}
|
||||
|
||||
.messages.information a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
49
themes/default/css/print.css
Normal file
@ -0,0 +1,49 @@
|
||||
/* ### Layout ### */
|
||||
|
||||
body {
|
||||
font-family: Serif;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
/* ### Content ### */
|
||||
|
||||
/* Hide useless blocks */
|
||||
body > header,
|
||||
#links,
|
||||
#sort,
|
||||
body > footer,
|
||||
.top_link,
|
||||
div.tools,
|
||||
header div,
|
||||
.messages,
|
||||
.entrie + .results,
|
||||
#article_toolbar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
article {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* Add URL after links */
|
||||
.vieworiginal a:after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
||||
|
||||
/* Add explanation after abbr */
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
|
||||
/* Change border on current pager item */
|
||||
.pagination span.current {
|
||||
border-style: dashed;
|
||||
}
|
||||
55
themes/default/css/style-default.css
Normal file
@ -0,0 +1,55 @@
|
||||
a.back span {
|
||||
background-image: url('../img/default/left.png');
|
||||
}
|
||||
|
||||
a.top span {
|
||||
background-image: url('../img/default/top.png');
|
||||
}
|
||||
|
||||
a.fav span,
|
||||
a.fav-off span:hover {
|
||||
background-image: url('../img/default/star-on.png');
|
||||
}
|
||||
|
||||
a.fav span:hover,
|
||||
a.fav-off span {
|
||||
background-image: url('../img/default/star-off.png');
|
||||
}
|
||||
|
||||
a.archive span,
|
||||
a.archive-off span:hover {
|
||||
background-image: url('../img/default/checkmark-on.png');
|
||||
}
|
||||
|
||||
a.archive span:hover,
|
||||
a.archive-off span {
|
||||
background-image: url('../img/default/checkmark-off.png');
|
||||
}
|
||||
|
||||
a.twitter span {
|
||||
background-image: url('../img/default/twitter.png');
|
||||
}
|
||||
|
||||
a.shaarli span {
|
||||
background-image: url('../img/default/shaarli.png');
|
||||
}
|
||||
|
||||
a.flattr span {
|
||||
background-image: url('../img/default/flattr.png');
|
||||
}
|
||||
|
||||
a.email span {
|
||||
background-image: url('../img/default/envelop.png');
|
||||
}
|
||||
|
||||
a.delete span {
|
||||
background-image: url('../img/default/remove.png');
|
||||
}
|
||||
|
||||
a.link span {
|
||||
background-image: url('../img/default/link.png');
|
||||
}
|
||||
|
||||
a.bad-display span {
|
||||
background-image: url('../img/default/bad-display.png');
|
||||
}
|
||||
330
themes/default/css/style.css
Normal file
@ -0,0 +1,330 @@
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Regular'), local('Roboto-Regular'), url(../fonts/Roboto.woff) format('woff');
|
||||
}
|
||||
|
||||
|
||||
|
||||
body {
|
||||
margin: 10px;
|
||||
font-family: 'Roboto',Verdana,Geneva,sans-serif;
|
||||
font-size: 16px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
a,
|
||||
a:hover,
|
||||
a:visited {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.bouton {
|
||||
border: none;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
.bouton:hover {
|
||||
color: #f1f1f1;
|
||||
background-color: #222;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#main {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#main #links {
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
font-size: 0.9em;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#main #links li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#main #links li .current {
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
color: #fff;
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
#main #sort {
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
list-style-type: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#main #sort li {
|
||||
display: inline;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
#main #sort li + li {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#main #sort a {
|
||||
padding: 2px 2px 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#main #sort img {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
#main #sort img:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#links a {
|
||||
padding: 5px 10px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#links a:hover {
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
color: #f1f1f1;
|
||||
background-color: #040707;
|
||||
}
|
||||
|
||||
/*** ***/
|
||||
|
||||
/*** LINKS DISPLAY ***/
|
||||
|
||||
#main .tool {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#main #content {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#main #content h2 {
|
||||
text-decoration: none;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
#main #content .entrie {
|
||||
margin-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px dashed #222;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* First entry */
|
||||
#main #content .results + .entrie {
|
||||
clear: both;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#main .entrie .tools {
|
||||
float: right;
|
||||
text-align: right;
|
||||
list-style-type: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#main .entrie .tools .tool span {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
/* Hide textual content */
|
||||
overflow: hidden;
|
||||
text-align: left;
|
||||
text-indent: -9999px;
|
||||
}
|
||||
|
||||
/*** ***/
|
||||
|
||||
/*** ARTICLE PAGE ***/
|
||||
|
||||
#article {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#article header {
|
||||
border-bottom: 1px solid #222;
|
||||
}
|
||||
|
||||
#article header {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#article header h1 small {
|
||||
float: right;
|
||||
font-size: 0.6em;
|
||||
}
|
||||
|
||||
#article header a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.backhome {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.results {
|
||||
padding: 15px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nb-results {
|
||||
float: left;
|
||||
font-size: 0.9em;
|
||||
line-height: 24px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#article_toolbar {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
min-height: 50px;
|
||||
padding-top: 17px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
opacity: 0.8;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#article_toolbar li {
|
||||
display: inline;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
#article_toolbar .tool {
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#article_toolbar .tool span {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
/* Hide textual content */
|
||||
overflow: hidden;
|
||||
text-align: left;
|
||||
text-indent: -9999px;
|
||||
}
|
||||
|
||||
/*** ***/
|
||||
|
||||
/*** PAGINATION ***/
|
||||
|
||||
.pagination {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.pagination a {
|
||||
height: 25px;
|
||||
margin: 2px;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #d5d5d5;
|
||||
text-decoration: none;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.pagination a:hover,
|
||||
.pagination a:active {
|
||||
background-color: #efefef;
|
||||
}
|
||||
|
||||
.pagination .current {
|
||||
height: 25px;
|
||||
margin: 2px;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #d5d5d5;
|
||||
text-decoration: none;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
.pagination .disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#bookmarklet {
|
||||
padding: 5px;
|
||||
border: 1px dashed #808080;
|
||||
background: #fff;
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.top_link {
|
||||
display: none;
|
||||
z-index: 2000;
|
||||
position: fixed;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
padding: 20px;
|
||||
-webkit-border-radius: 40px;
|
||||
-moz-border-radius: 40px;
|
||||
border-radius: 40px;
|
||||
opacity: 0.9;
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
footer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.reading-time {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
#inputform {
|
||||
display: none;
|
||||
margin-top: 5px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-bottom: 5px;
|
||||
max-width: 300px;
|
||||
border-radius: 3px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
opacity: 0.8;
|
||||
background-color: rgba(0,0,0,0.9);
|
||||
}
|
||||
|
||||
a.back span,
|
||||
a.top span,
|
||||
a.fav span,
|
||||
a.fav span:hover,
|
||||
a.fav-off span,
|
||||
a.fav-off span:hover,
|
||||
a.archive span,
|
||||
a.archive span:hover,
|
||||
a.archive-off span,
|
||||
a.archive-off span:hover,
|
||||
a.twitter span,
|
||||
a.shaarli span,
|
||||
a.flattr span,
|
||||
a.email span,
|
||||
a.delete span,
|
||||
a.link span,
|
||||
a.bad-display span,
|
||||
a.reading-time span {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
11
themes/default/error.twig
Normal file
@ -0,0 +1,11 @@
|
||||
{% extends "layout.twig" %}
|
||||
{% block title %}{% trans "plop" %}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>Errors</h1>
|
||||
<ol>
|
||||
{% for message in msg %}
|
||||
<li>{{message}}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
<p>Don't forget <a href="http://inthepoche.com/doc">the documentation</a>.</p>
|
||||
{% endblock %}
|
||||
1
themes/default/export.twig
Normal file
@ -0,0 +1 @@
|
||||
{{ export }}
|
||||
BIN
themes/default/fonts/Roboto.woff
Normal file
49
themes/default/home.twig
Normal file
@ -0,0 +1,49 @@
|
||||
{% extends "layout.twig" %}
|
||||
{% block title %}
|
||||
{% if view == 'fav' %}
|
||||
{% trans "favoris" %}
|
||||
{% elseif view == 'archive' %}
|
||||
{% trans "archive" %}
|
||||
{% else %}
|
||||
{% trans "unread" %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block menu %}
|
||||
{% include '_menu.twig' %}
|
||||
{% endblock %}
|
||||
{% block precontent %}
|
||||
{% if entries|length > 1 %}
|
||||
<ul id="sort">
|
||||
<li><a href="./?sort=ia&view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by date asc" %}" title="{% trans "by date asc" %}" /></a> {% trans "by date" %} <a href="./?sort=id&view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by date desc" %}" title="{% trans "by date desc" %}" /></a></li>
|
||||
<li><a href="./?sort=ta&view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by title asc" %}" title="{% trans "by title asc" %}" /></a> {% trans "by title" %} <a href="./?sort=td&view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by title desc" %}" title="{% trans "by title desc" %}" /></a></li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% if entries is empty %}
|
||||
<div class="messages warning"><p>{% trans "No link available here!" %}</p></div>
|
||||
{% else %}
|
||||
{% block pager %}
|
||||
{% if nb_results > 1 %}
|
||||
<div class="results">
|
||||
<div class="nb-results">{{ nb_results }} {% trans "results" %}</div>
|
||||
{{ page_links | raw }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% for entry in entries %}
|
||||
<div id="entry-{{ entry.id|e }}" class="entrie">
|
||||
<h2><a href="index.php?view=view&id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2>
|
||||
<ul class="tools">
|
||||
<li><a title="{% trans "toggle mark as read" %}" class="tool {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="./?action=toggle_archive&id={{ entry.id|e }}"><span>{% trans "toggle mark as read" %}</span></a></li>
|
||||
<li><a title="{% trans "toggle favorite" %}" class="tool {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="./?action=toggle_fav&id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
|
||||
<li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
|
||||
<li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link"><span>{{ entry.url | e | getDomain }}</span></a></li>
|
||||
<li><a target="_blank" title="{% trans "estimated reading time:" %} {{ entry.content| getReadingTime }} min" class="reading-time"><span>{{ entry.content| getReadingTime }} min</span></a></li>
|
||||
</ul>
|
||||
<p>{{ entry.content|striptags|slice(0, 300) }}...</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{{ block('pager') }}
|
||||
{% endblock %}
|
||||
BIN
themes/default/img/apple-touch-icon-144x144-precomposed.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
themes/default/img/apple-touch-icon-72x72-precomposed.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
themes/default/img/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
themes/default/img/default/backtotop.png
Normal file
|
After Width: | Height: | Size: 326 B |
BIN
themes/default/img/default/bad-display.png
Executable file
|
After Width: | Height: | Size: 343 B |
BIN
themes/default/img/default/checkmark-off.png
Normal file
|
After Width: | Height: | Size: 277 B |
BIN
themes/default/img/default/checkmark-on.png
Normal file
|
After Width: | Height: | Size: 235 B |
BIN
themes/default/img/default/down.png
Normal file
|
After Width: | Height: | Size: 216 B |
BIN
themes/default/img/default/envelop.png
Normal file
|
After Width: | Height: | Size: 285 B |
BIN
themes/default/img/default/flattr.png
Executable file
|
After Width: | Height: | Size: 270 B |
BIN
themes/default/img/default/left.png
Normal file
|
After Width: | Height: | Size: 196 B |
BIN
themes/default/img/default/link.png
Executable file
|
After Width: | Height: | Size: 341 B |
BIN
themes/default/img/default/remove.png
Normal file
|
After Width: | Height: | Size: 252 B |
BIN
themes/default/img/default/shaarli.png
Normal file
|
After Width: | Height: | Size: 729 B |
BIN
themes/default/img/default/star-off.png
Normal file
|
After Width: | Height: | Size: 314 B |
BIN
themes/default/img/default/star-on.png
Normal file
|
After Width: | Height: | Size: 281 B |
BIN
themes/default/img/default/top.png
Normal file
|
After Width: | Height: | Size: 212 B |
BIN
themes/default/img/default/twitter.png
Normal file
|
After Width: | Height: | Size: 297 B |
BIN
themes/default/img/favicon.ico
Normal file
|
After Width: | Height: | Size: 346 B |
BIN
themes/default/img/logo.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
themes/default/img/messages/close.png
Normal file
|
After Width: | Height: | Size: 662 B |
BIN
themes/default/img/messages/cross.png
Normal file
|
After Width: | Height: | Size: 655 B |
BIN
themes/default/img/messages/help.png
Normal file
|
After Width: | Height: | Size: 786 B |
BIN
themes/default/img/messages/tick.png
Normal file
|
After Width: | Height: | Size: 537 B |
BIN
themes/default/img/messages/warning.png
Normal file
|
After Width: | Height: | Size: 666 B |
28
themes/default/install.twig
Normal file
@ -0,0 +1,28 @@
|
||||
{% extends "layout.twig" %}
|
||||
{% block title %}{% trans "installation" %}{% endblock %}
|
||||
{% block content %}
|
||||
<form method="post" action="?install" name="loginform">
|
||||
<fieldset class="w500p center">
|
||||
<h2 class="mbs txtcenter">{% trans "install your poche" %}</h2>
|
||||
<p>
|
||||
{% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation on poche website</a>." %}
|
||||
</p>
|
||||
<p class="row">
|
||||
<label class="col w150p" for="login">{% trans "Login" %}</label>
|
||||
<input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus />
|
||||
</p>
|
||||
<p class="row">
|
||||
<label class="col w150p" for="password">{% trans "Password" %}</label>
|
||||
<input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2">
|
||||
</p>
|
||||
<p class="row">
|
||||
<label class="col w150p" for="password_repeat">{% trans "Repeat your password" %}</label>
|
||||
<input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="Password" tabindex="3">
|
||||
</p>
|
||||
<p class="row mts txtcenter">
|
||||
<button class="bouton" type="submit" tabindex="4">{% trans "Install" %}</button>
|
||||
</p>
|
||||
</fieldset>
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
</form>
|
||||
{% endblock %}
|
||||
6
themes/default/js/autoClose.js
Normal file
@ -0,0 +1,6 @@
|
||||
$(document).ready(function() {
|
||||
current_url = window.location.href
|
||||
if (current_url.match("&closewin=true")) {
|
||||
window.close();
|
||||
}
|
||||
});
|
||||
1
themes/default/js/jquery-2.0.3.min.js
vendored
Normal file
25
themes/default/js/restoreScroll.js
Normal file
@ -0,0 +1,25 @@
|
||||
function supportsLocalStorage() {
|
||||
try {
|
||||
return 'localStorage' in window && window['localStorage'] !== null;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function savePercent(id, percent) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
localStorage["poche.article." + id + ".percent"] = percent;
|
||||
return true;
|
||||
}
|
||||
|
||||
function retrievePercent(id) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
|
||||
var bheight = $(document).height();
|
||||
var percent = localStorage["poche.article." + id + ".percent"];
|
||||
var scroll = bheight * percent;
|
||||
|
||||
$('html,body').animate({scrollTop: scroll}, 'fast');
|
||||
|
||||
return true;
|
||||
}
|
||||
31
themes/default/layout.twig
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="{{ lang }}"><![endif]-->
|
||||
<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="{{ lang }}"><![endif]-->
|
||||
<!--[if IE 8]><html class="no-js ie8 ie678" lang="{{ lang }}"><![endif]-->
|
||||
<!--[if gt IE 8]><html class="no-js" lang="{{ lang }}"><![endif]-->
|
||||
<html lang="{{ lang }}">
|
||||
<head>
|
||||
<meta name="viewport" content="initial-scale=1.0">
|
||||
<meta charset="utf-8">
|
||||
<!--[if IE]>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=10">
|
||||
<![endif]-->
|
||||
<title>{% block title %}{% endblock %} - poche</title>
|
||||
{% include '_head.twig' %}
|
||||
{% include '_bookmarklet.twig' %}
|
||||
</head>
|
||||
<body>
|
||||
{% include '_top.twig' %}
|
||||
<div id="main">
|
||||
{% block menu %}{% endblock %}
|
||||
{% block precontent %}{% endblock %}
|
||||
{% block messages %}
|
||||
{% include '_messages.twig' %}
|
||||
{% endblock %}
|
||||
<div id="content" class="w600p center">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% include '_footer.twig' %}
|
||||
</body>
|
||||
</html>
|
||||
34
themes/default/login.twig
Normal file
@ -0,0 +1,34 @@
|
||||
{% extends "layout.twig" %}
|
||||
|
||||
{% block title %}{% trans "login to your poche" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if http_auth == 0 %}
|
||||
<form method="post" action="?login" name="loginform">
|
||||
<fieldset class="w500p center">
|
||||
<h2 class="mbs txtcenter">{% trans "login to your poche" %}</h2>
|
||||
{% if constant('MODE_DEMO') == 1 %}<p>{% trans "you are in demo mode, some features may be disabled." %}</p>{% endif %}
|
||||
<div class="row">
|
||||
<label class="col w150p" for="login">{% trans "Login" %}</label>
|
||||
<input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<label class="col w150p" for="password">{% trans "Password" %}</label>
|
||||
<input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2" {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="col w150p" for="longlastingsession">{% trans "Stay signed in" %}</label>
|
||||
<div class="col">
|
||||
<input type="checkbox" id="longlastingsession" name="longlastingsession" tabindex="3">
|
||||
<small class="inbl">{% trans "(Do not check on public computers)" %}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mts txtcenter">
|
||||
<button class="bouton" type="submit" tabindex="4">{% trans "Login" %}</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<input type="hidden" name="returnurl" value="{{ referer }}">
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||