Merge pull request #141 from inthepoche/dev

beta3
This commit is contained in:
Nicolas Lœuillet 2013-08-17 11:27:13 -07:00
commit 7ba37bd91a
21 changed files with 831 additions and 153 deletions

3
.gitignore vendored
View file

@ -2,4 +2,5 @@ vendor
composer.phar
db/poche.sqlite
output
phpdoc*
phpdoc*
inc/config/myconfig.inc.php

3
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,3 @@
# How contributing
When you create an issue on github, don't forget to give us your poche version. You can find it in config screen or in ./inc/poche/config.inc.php.

View file

@ -1,53 +1,64 @@
# Installing poche
Get the [latest version](https://github.com/inthepoche/poche/archive/1.0-beta1.zip) of poche on github. Unzip it and upload it on your server.
## requirements
your datas can be stored on sqlite, postgres or mysql databases.
it's highly recommended to have php cURL and tidy_parse_string to fetch articles content.
Edit /inc/poche/config.inc.php :
## you don't want to install twig (the template engine) by yourself
Download this file http://static.inthepoche.com/files/poche-1.0-latest-with-twig.zip
Extract this file on your server.
## you want to install twig by yourself
Download the latest version here : http://www.inthepoche.com/?pages/T%C3%A9l%C3%A9charger-poche
Extract this file on your server.
```php
define ('STORAGE','sqlite'); # postgres, mysql, sqlite
define ('STORAGE_SERVER', 'localhost'); # leave blank for sqlite
define ('STORAGE_DB', 'poche'); # only for postgres & mysql
define ('STORAGE_SQLITE', './db/poche.sqlite');
define ('STORAGE_USER', 'user'); # leave blank for sqlite
define ('STORAGE_PASSWORD', 'pass'); # leave blank for sqlite
```
poche must have write access on assets, cache and db directories.
[PHP cURL](http://www.php.net/manual/en/book.curl.php) & [tidy_parse_string](http://www.php.net/manual/en/tidy.parsestring.php) are recommended.
## twig
poche now uses twig for templating. You have to install twig.
Install composer in your project :
```bash
curl -s http://getcomposer.org/installer | php
```
Install via composer :
```bash
php composer.phar install
```
If you don't want to install twig by yourself, you can download [this file](http://static.inthepoche.com/files/poche-1.0-latest-with-twig.zip).
### using sqlite
## storage in sqlite
You have to install [sqlite for php](http://www.php.net/manual/en/book.sqlite.php) on your server.
Copy / paste install/poche.sqlite in db folder.
Copy /install/poche.sqlite in /db
### using mysql or postgresql
## storage in mysql
Execute /install/mysql.sql file in your database.
Execute the sql file in /install (mysql.sql or postgres.sql)
## storage in postgres
Execute /install/postgres.sql file in your database.
Then, go to step 3.
## upgrading from poche <= 0.3
With poche <= 0.3, all your datas were stored in a sqlite file. The structure of this file changed.
# Upgrading poche
You have to execute http://yourpoche/install/update_sqlite_from_0_to_1.php before using this new version.
Replace all the files except **db/poche.sqlite**. Also remember to edit the file /inc/poche/config.inc.php.
## installing poche
you can go on your poche http://yourpoche. You have to fill the fields and that's all !
## Upgrading from poche <= 0.3
You have to execute http://yourpoche/install/update_sqlite_from_0_to_1.php
Then, go to step 3.
## Upgrading from poche >= 1.0 beta1
Nothing to do here.
Then, go to step 3.
# Here is the step 3
You must have write access on assets, cache and db directories. These directories may not exist, you'll have to create them.
You can use poche ! Enjoy.
# Some problems you may encounter
## Blank page
Be sure to have write access on assets, cache and db directories.
## PHP Fatal error: Call to a member function fetchAll() on a non-object in /var/www/poche/inc/poche/Database.class.php on line 42
If you want to install poche, delete the db/poche.sqlite file and copy / paste the install/poche.sqlite in /db. Be sure to have write access.

View file

@ -1,42 +1,26 @@
# poche
Abandon Pocket, Instapaper and other Readability service : adopt poche. It is the same, but it is open source. Moreover, you can migrate from Pocket & Readability.
# what is poche ?
Abandon Pocket, Instapaper and other Readability service : adopt poche. It is the same, but it is free (like in freedom) and open source.
![poche](http://inthepoche.com/img/logo.png)
## Some features
The website of poche is [inthepoche.com](http://inthepoche.com).
* adding, deleting, archiving and setting as favorite a link
* import from pocket / readability / instapaper
* share links by email and on twitter
* a design adapted to tablets and smartphones
* extensions for Chrome and Firefox
* Android application
* multi languages (very soon!)
* multi users (very soon!)
* update notification in configuration screen
* many storage modes (sqlite, mysql, postgresql)
* many templates
* ...
To test poche, a demo website is online : [demo.inthepoche.com](http://demo.inthepoche.com) (login poche, password poche).
To get news from poche, [follow us on twitter](http://twitter.com/getpoche) or [read the poche blog](http://inthepoche.com/blog). A Google Group is also available : [poche-users](https://groups.google.com/forum/#!forum/poche-users).
[![flattr](http://api.flattr.com/button/flattr-badge-large.png)](http://flattr.com/thing/1265480/poche-a-read-it-later-open-source-system)
## Installation
Read the INSTALL.md file.
## Security
You **have** to protect your db/poche.sqlite file. Modify the virtual host of your website to add this condition :
```apache
<Files ~ "\.sqlite$">
Order allow,deny
Deny from all
</Files>
```
Nginx version:
```nginx
location ~ /(db) {
deny all;
return 404;
}
```
## Usage
See the documentation on our website : [inthepoche.com](http://inthepoche.com).
## Travis
[![Build Status](https://api.travis-ci.org/inthepoche/poche.png?branch=dev)](http://travis-ci.org/#!/inthepoche/poche)
Read the [INSTALL.md file](https://github.com/inthepoche/poche/blob/master/INSTALL.md).
## License
Copyright © 2010-2013 Nicolas Lœuillet <nicolas.loeuillet@gmail.com>

View file

@ -18,11 +18,10 @@ class Poche
function __construct()
{
if (file_exists('./install') && !DEBUG_POCHE) {
Tools::logm('folder /install exists');
die('To install your poche with sqlite, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.');
$this->initTpl();
if (!$this->checkBeforeInstall()) {
exit;
}
$this->store = new Database();
$this->init();
$this->messages = new Messages();
@ -34,6 +33,63 @@ class Poche
}
}
/**
* all checks before installation.
* @return boolean
*/
private function checkBeforeInstall()
{
$msg = '';
$allIsGood = TRUE;
if (!is_writable(CACHE)) {
Tools::logm('you don\'t have write access on cache directory');
die('You don\'t have write access on cache directory.');
}
else if (file_exists('./install/update.php') && !DEBUG_POCHE) {
$msg = 'A poche update is needed. Please execute this update <a href="install/update.php">by clicking here</a>. If you have already do the update, please delete /install folder.';
$allIsGood = FALSE;
}
else if (file_exists('./install') && !DEBUG_POCHE) {
$msg = 'If you want to update your poche, you just have to delete /install folder. <br />To install your poche with sqlite, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.';
$allIsGood = FALSE;
}
else if (STORAGE == 'sqlite' && !is_writable(STORAGE_SQLITE)) {
Tools::logm('you don\'t have write access on sqlite file');
$msg = 'You don\'t have write access on sqlite file.';
$allIsGood = FALSE;
}
if (!$allIsGood) {
echo $this->tpl->render('error.twig', array(
'msg' => $msg
));
}
return $allIsGood;
}
private function initTpl()
{
# template engine
$loader = new Twig_Loader_Filesystem(TPL);
if (DEBUG_POCHE) {
$twig_params = array();
}
else {
$twig_params = array('cache' => CACHE);
}
$this->tpl = new Twig_Environment($loader, $twig_params);
$this->tpl->addExtension(new Twig_Extensions_Extension_I18n());
# filter to display domain name of an url
$filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
$this->tpl->addFilter($filter);
# filter for reading time
$filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
$this->tpl->addFilter($filter);
}
private function init()
{
Tools::initPhp();
@ -55,24 +111,6 @@ class Poche
bindtextdomain($language, LOCALE);
textdomain($language);
# template engine
$loader = new Twig_Loader_Filesystem(TPL);
if (DEBUG_POCHE) {
$twig_params = array();
}
else {
$twig_params = array('cache' => CACHE);
}
$this->tpl = new Twig_Environment($loader, $twig_params);
$this->tpl->addExtension(new Twig_Extensions_Extension_I18n());
# filter to display domain name of an url
$filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
$this->tpl->addFilter($filter);
# filter for reading time
$filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
$this->tpl->addFilter($filter);
# Pagination
$this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
}
@ -87,10 +125,12 @@ class Poche
if (($_POST['password'] == $_POST['password_repeat'])
&& $_POST['password'] != "" && $_POST['login'] != "") {
# let's rock, install poche baby !
$this->store->install($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']));
Session::logout();
Tools::logm('poche is now installed');
Tools::redirect();
if ($this->store->install($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login'])))
{
Session::logout();
Tools::logm('poche is now installed');
Tools::redirect();
}
}
else {
Tools::logm('error during installation');
@ -180,6 +220,7 @@ class Poche
}
break;
default:
Tools::logm('action ' . $action . 'doesn\'t exist');
break;
}
}
@ -409,9 +450,11 @@ class Poche
$str_data = file_get_contents("./readability");
$data = json_decode($str_data,true);
Tools::logm('starting import from Readability');
$count = 0;
foreach ($data as $key => $value) {
$url = '';
$url = NULL;
$favorite = FALSE;
$archive = FALSE;
foreach ($value as $attr => $attr_value) {
if ($attr == 'article__url') {
$url = new Url(base64_encode($attr_value));
@ -420,20 +463,30 @@ class Poche
if (STORAGE == 'postgres') {
$sequence = 'entries_id_seq';
}
// if ($attr_value == 'favorite' && $attr_value == 'true') {
// $last_id = $this->store->getLastId($sequence);
// $this->store->favoriteById($last_id);
// $this->action('toogle_fav', $url, $last_id, TRUE);
// }
if ($attr_value == 'archive' && $attr_value == 'true') {
if ($attr_value == 'true') {
if ($attr == 'favorite') {
$favorite = TRUE;
}
if ($attr == 'archive') {
$archive = TRUE;
}
}
}
# we can add the url
if (!is_null($url) && $url->isCorrect()) {
$this->action('add', $url, 0, TRUE);
$count++;
if ($favorite) {
$last_id = $this->store->getLastId($sequence);
$this->action('toggle_fav', $url, $last_id, TRUE);
}
if ($archive) {
$last_id = $this->store->getLastId($sequence);
$this->action('toggle_archive', $url, $last_id, TRUE);
}
}
if ($url->isCorrect())
$this->action('add', $url, 0, TRUE);
}
$this->messages->add('s', _('import from Readability completed'));
$this->messages->add('s', _('import from Readability completed. ' . $count . ' new links.'));
Tools::logm('import from Readability completed');
Tools::redirect();
}

View file

@ -233,4 +233,30 @@ class Tools
return $minutes;
}
public static function createMyConfig()
{
$myconfig_file = './inc/poche/myconfig.inc.php';
if (version_compare(POCHE_VERSION, '1.0-beta3') == 1) {
# $myconfig_file is only created with poche > 1.0-beta3
# in 1.0-beta3, the update script creates $myconfig_file
if (!is_writable('./inc/poche/')) {
self::logm('you don\'t have write access to create ./inc/poche/myconfig.inc.php');
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', '" . md5(time() . $_SERVER['SCRIPT_FILENAME'] . rand()) . "');" . "\r\n");
fwrite($fp, "define ('LANG', 'en_EN.utf8');" . "\r\n");
fclose($fp);
}
}
}
}

View file

@ -27,7 +27,7 @@ class Url
public function isCorrect()
{
$pattern = '|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i';
$pattern = '|^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*)$|i';
return preg_match($pattern, $this->url);
}

57
inc/poche/config.inc.php Normal file → Executable file
View file

@ -8,47 +8,30 @@
* @license http://www.wtfpl.net/ see COPYING file
*/
# storage
define ('STORAGE','sqlite'); # postgres, mysql, sqlite
define ('STORAGE_SERVER', 'localhost'); # leave blank for sqlite
define ('STORAGE_DB', 'poche'); # only for postgres & mysql
define ('STORAGE_SQLITE', './db/poche.sqlite');
define ('STORAGE_USER', 'postgres'); # leave blank for sqlite
define ('STORAGE_PASSWORD', 'postgres'); # leave blank for sqlite
define ('POCHE_VERSION', '1.0-beta1');
define ('MODE_DEMO', FALSE);
define ('DEBUG_POCHE', FALSE);
define ('CONVERT_LINKS_FOOTNOTES', FALSE);
define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
define ('DOWNLOAD_PICTURES', FALSE);
define ('SHARE_TWITTER', TRUE);
define ('SHARE_MAIL', TRUE);
define ('SALT', '464v54gLLw928uz4zUBqkRJeiPY68zCX');
define ('ABS_PATH', 'assets/');
define ('TPL', './tpl');
define ('LOCALE', './locale');
define ('CACHE', './cache');
define ('LANG', 'en_EN.UTF8');
define ('PAGINATION', '10');
define ('THEME', 'light');
require_once __DIR__ . '/../../inc/poche/define.inc.php';
# /!\ Be careful if you change the lines below /!\
require_once './inc/poche/User.class.php';
require_once './inc/poche/Tools.class.php';
require_once './inc/poche/Url.class.php';
require_once './inc/3rdparty/class.messages.php';
require_once './inc/poche/Poche.class.php';
require_once './inc/3rdparty/Readability.php';
require_once './inc/3rdparty/Encoding.php';
require_once './inc/poche/Database.class.php';
require_once './vendor/autoload.php';
require_once './inc/3rdparty/simple_html_dom.php';
require_once './inc/3rdparty/paginator.php';
require_once './inc/3rdparty/Session.class.php';
if (!file_exists(__DIR__ . '/../../vendor/autoload.php')) {
die('Twig does not seem installed. Have a look at <a href="http://inthepoche.com/?pages/Documentation">the documentation.</a>');
}
if (file_exists(__DIR__ . '/../../inc/poche/myconfig.inc.php')) {
require_once __DIR__ . '/../../inc/poche/myconfig.inc.php';
}
require_once __DIR__ . '/../../inc/poche/User.class.php';
require_once __DIR__ . '/../../inc/poche/Url.class.php';
require_once __DIR__ . '/../../inc/3rdparty/class.messages.php';
require_once __DIR__ . '/../../inc/poche/Poche.class.php';
require_once __DIR__ . '/../../inc/3rdparty/Readability.php';
require_once __DIR__ . '/../../inc/3rdparty/Encoding.php';
require_once __DIR__ . '/../../inc/poche/Database.class.php';
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../../inc/3rdparty/simple_html_dom.php';
require_once __DIR__ . '/../../inc/3rdparty/paginator.php';
require_once __DIR__ . '/../../inc/3rdparty/Session.class.php';
if (DOWNLOAD_PICTURES) {
require_once './inc/poche/pochePictures.php';
require_once __DIR__ . '/../../inc/poche/pochePictures.php';
}
$poche = new Poche();

30
inc/poche/define.inc.php Normal file
View file

@ -0,0 +1,30 @@
<?php
/**
* poche, a read it later open source system
*
* @category poche
* @author Nicolas Lœuillet <nicolas@loeuillet.org>
* @copyright 2013
* @license http://www.wtfpl.net/ see COPYING file
*/
define ('STORAGE','sqlite'); # postgres, mysql, sqlite
define ('STORAGE_SERVER', 'localhost'); # leave blank for sqlite
define ('STORAGE_DB', 'poche'); # only for postgres & mysql
define ('STORAGE_SQLITE', __DIR__ . '/../../db/poche.sqlite');
define ('STORAGE_USER', 'postgres'); # leave blank for sqlite
define ('STORAGE_PASSWORD', 'postgres'); # leave blank for sqlite
define ('MODE_DEMO', FALSE);
define ('DEBUG_POCHE', FALSE);
define ('CONVERT_LINKS_FOOTNOTES', FALSE);
define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
define ('DOWNLOAD_PICTURES', FALSE);
define ('SHARE_TWITTER', TRUE);
define ('SHARE_MAIL', TRUE);
define ('ABS_PATH', 'assets/');
define ('TPL', __DIR__ . '/../../tpl');
define ('LOCALE', __DIR__ . '/../../locale');
define ('CACHE', __DIR__ . '/../../cache');
define ('PAGINATION', '10');
define ('THEME', 'light');

View file

@ -8,6 +8,9 @@
* @license http://www.wtfpl.net/ see COPYING file
*/
require_once './inc/poche/Tools.class.php';
Tools::createMyConfig();
include dirname(__FILE__).'/inc/poche/config.inc.php';
# Parse GET & REFERER vars

79
install/update.php Normal file
View file

@ -0,0 +1,79 @@
<?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>
<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>

Binary file not shown.

View file

@ -0,0 +1,114 @@
#
# Translators:
# HLFH <gaspard.dhautefeuille@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: poche\n"
"POT-Creation-Date: 2013-08-02 10:26+0100\n"
"PO-Revision-Date: 2013-08-06 11:48+0100\n"
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/poche/language/"
"de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
"X-Poedit-Basepath: /\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: /var/www/poche-i18n\n"
#: /var/www/poche-i18n/import.php:17
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."
#: /var/www/poche-i18n/import.php:17
msgid "Please choose between Pocket & Readabilty :"
msgstr "Wir danken Ihnen, zwischen Pocket und Readability zu wählen:"
#: /var/www/poche-i18n/import.php:17
msgid "Bye bye Pocket, let's go !"
msgstr "Auf wiedersehen Pocket, auf geht's!"
#: /var/www/poche-i18n/import.php:17
msgid "Bye bye Readability, let's go !"
msgstr "Auf wiedersehen Readability, auf geht's!"
#: /var/www/poche-i18n/import.php:48
msgid "Import from Pocket completed."
msgstr "Der Import aus Poche ist abgeschlossen."
#: /var/www/poche-i18n/import.php:48 /var/www/poche-i18n/import.php:66
msgid "Welcome to poche !"
msgstr "Willkommen in Poche!"
#: /var/www/poche-i18n/import.php:66
msgid "Import from Readability completed."
msgstr "Der Import aus Readability ist abgeschlossen."
#: /var/www/poche-i18n/import.php:70
msgid "Error with the import."
msgstr "Fehler beim Import."
#: /var/www/poche-i18n/import.php:70
msgid "Back to poche"
msgstr "Rückkehr zu Poche"
#: /var/www/poche-i18n/index.php:18
msgid "Wrong token."
msgstr "Ungültiges Token."
#: /var/www/poche-i18n/index.php:43
msgid "Login failed !"
msgstr "Fehler bei der Anmeldung."
#: /var/www/poche-i18n/index.php:59
msgid "your password has been updated"
msgstr "Ihr Passwort wurde aktualisiert."
#: /var/www/poche-i18n/index.php:62
msgid "in demo mode, you can't update password"
msgstr "Im Demo-Modus kann das Passwort nicht geändert werden."
#: /var/www/poche-i18n/index.php:66
msgid ""
"your password can't be empty and you have to repeat it in the second field"
msgstr ""
"Ihr Passwort darf nicht leer sein, und Sie müssen es in das zweite Feld zu "
"wiederholen."
#: /var/www/poche-i18n/index.php:83
msgid "poche, a read it later open source system"
msgstr "Poche, eine Opensourceanwendung, um später zu lesen"
#: /var/www/poche-i18n/inc/MyTool.class.php:18
msgid "Oops, it seems you don't have PHP 5."
msgstr "Hoppla, scheint es, dass PHP 5 nicht installiert ist."
#: /var/www/poche-i18n/inc/functions.php:352
msgid "the link has been added successfully"
msgstr "der Link wurde erfolgreich hinzugefügt"
#: /var/www/poche-i18n/inc/functions.php:355
msgid "error during insertion : the link wasn't added"
msgstr "Fehler beim Einfügen: der Link wurde nicht hinzugefügt"
#: /var/www/poche-i18n/inc/functions.php:359
msgid "error during url preparation : the link wasn't added"
msgstr "Fehler beim Einfügen: der Link wurde nicht hinzugefügt"
#: /var/www/poche-i18n/inc/functions.php:364
msgid "error during url preparation : the link is not valid"
msgstr "Fehler bei der Herstellung der URL: der Link ist nicht gültig"
#: /var/www/poche-i18n/inc/functions.php:373
msgid "the link has been deleted successfully"
msgstr "der Link wurde erfolgreich hinzugefügt"
#: /var/www/poche-i18n/inc/functions.php:377
msgid "the link wasn't deleted"
msgstr "der Link wurde nicht entfernt."

Binary file not shown.

View file

@ -0,0 +1,382 @@
#
# Translators:
# Nitche <nicolas.canseco@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: poche\n"
"POT-Creation-Date: 2013-08-06 08:35+0100\n"
"PO-Revision-Date: 2013-08-16 19:09+0100\n"
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/poche/language/"
"es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
"X-Poedit-Basepath: /\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: /var/www/poche-i18n\n"
#: /var/www/poche-i18n/index.php:43
msgid "poche, a read it later open source system"
msgstr "poche, a read it later open source system"
#: /var/www/poche-i18n/inc/poche/Poche.class.php:101
msgid "the link has been added successfully"
msgstr "el enlace a sido agregado con éxito"
#: /var/www/poche-i18n/inc/poche/Poche.class.php:104
msgid "error during insertion : the link wasn't added"
msgstr "error en la inserción : el enlace no ha sido agregado"
#: /var/www/poche-i18n/inc/poche/Poche.class.php:109
msgid "error during fetching content : the link wasn't added"
msgstr ""
"error durante la recuperación del contenido : el enlace no a sido agregado"
#: /var/www/poche-i18n/inc/poche/Poche.class.php:119
msgid "the link has been deleted successfully"
msgstr "el enlace a sido suprimido con éxito"
#: /var/www/poche-i18n/inc/poche/Poche.class.php:123
msgid "the link wasn't deleted"
msgstr "el enlace no ha sido suprimido"
#: /var/www/poche-i18n/inc/poche/Tools.class.php:18
msgid "Oops, it seems you don't have PHP 5."
msgstr "Parece que PHP 5 no está instalado"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50
msgid "config"
msgstr "configuración"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34
msgid "home"
msgstr "inicio"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34
msgid "favorites"
msgstr "favoritos"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42
msgid "archive"
msgstr "archivos"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54
#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56
msgid "logout"
msgstr "desconexión "
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87
msgid "Bookmarklet"
msgstr "Bookmarklet"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91
msgid ""
"Thanks to the bookmarklet, you will be able to easily add a link to your "
"poche."
msgstr ""
"Gracias a tu bookmarklet, puedes agregar fácilmente un enlace en tu bolsillo"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93
msgid "Have a look to this documentation:"
msgstr "échale un ojo a la documentación :"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97
msgid "Drag & drop this link to your bookmarks bar and have fun with poche."
msgstr ""
"Arrastra y suelta ese enlace en tu barra de favoritos en tu navegador y "
"disfruta de tu poche."
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103
msgid "poche it!"
msgstr "pochéalo!"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108
msgid "Updating poche"
msgstr "Actualizar"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113
msgid "your version"
msgstr "su versión"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119
msgid "latest stable version"
msgstr "ultima versión estable"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125
msgid "a more recent stable version is available."
msgstr "una versión estable más reciente está disponible"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142
msgid "you are up to date."
msgstr "estás al día"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133
msgid "latest dev version"
msgstr "ultima versión de desarollo"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139
msgid "a more recent development version is available."
msgstr "una versión de desarollo más reciente está disponible"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150
msgid "Change your password"
msgstr "Modificar tu contraseña"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157
msgid "New password:"
msgstr "Nueva contraseña :"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68
msgid "Password"
msgstr "Contraseña"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167
msgid "Repeat your new password:"
msgstr "Repetir la nueva contraseña :"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177
msgid "Update"
msgstr "Poner al día"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193
msgid "Import"
msgstr "Importar"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197
msgid "Please execute the import script locally, it can take a very long time."
msgstr ""
"Gracias por ejecutar la importación en local, esto puede demorar un tiempo"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201
msgid "More infos in the official doc:"
msgstr "Más información en la documentación oficial :"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206
msgid "import from Pocket"
msgstr "la importación desde Pocket está terminada"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210
msgid "import from Readability"
msgstr "la importación desde Readability está terminada"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214
msgid "import from Instapaper"
msgstr "Importar desde Instapaper"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220
msgid "Export your poche datas"
msgstr "Exportar sus datos de poche"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224
msgid "Click here"
msgstr "Haga clic aquí"
#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226
msgid "to export your poche datas."
msgstr "Para exportar sus datos de poche"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139
#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22
msgid "back to home"
msgstr "volver a la pagina de inicio"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119
msgid "toggle mark as read"
msgstr "marcar como leído"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129
msgid "toggle favorite"
msgstr "favorito"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139
msgid "delete"
msgstr "suprimir"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179
msgid "tweet"
msgstr "tweetear"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190
msgid "email"
msgstr "enviar por mail"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153
msgid "original"
msgstr "original"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143
msgid "back to top"
msgstr "volver arriba"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198
msgid "this article appears wrong?"
msgstr "este articulo no se ve bien ?"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200
msgid "create an issue"
msgstr "crear un ticket"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202
msgid "or"
msgstr "o"
#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206
msgid "contact us by mail"
msgstr "contactarnos por mail"
#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22
msgid "powered by"
msgstr "propulsado por"
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31
msgid "installation"
msgstr "instalacion"
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42
msgid "install your poche"
msgstr "instala tu poche"
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47
msgid ""
"poche is still not installed. Please fill the below form to install it. "
"Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read "
"the documentation on poche website</a>."
msgstr ""
"poche todavia no està instalado. Gracias de llenar los campos siguientes "
"para instalarlo. No dudes de <a href='http://inthepoche.com/?pages/"
"Documentation'>leer la documentacion en el sitio de poche</a>."
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55
msgid "Login"
msgstr "Nombre de usuario"
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67
msgid "Repeat your password"
msgstr "repita su contraseña"
#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74
msgid "Install"
msgstr "Instalar"
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42
msgid "login to your poche"
msgstr "conectarse a tu poche"
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48
msgid "you are in demo mode, some features may be disabled."
msgstr ""
"este es el modo de demostración, algunas funcionalidades pueden estar "
"desactivadas."
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80
msgid "Stay signed in"
msgstr "seguir conectado"
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86
msgid "(Do not check on public computers)"
msgstr "(no marcar en un ordenador publico)"
#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93
msgid "Sign in"
msgstr "conectarse"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57
msgid "by date asc"
msgstr "por fecha ascendiente"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59
msgid "by date"
msgstr "por fecha"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67
msgid "by date desc"
msgstr "por fecha descendiente"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77
msgid "by title asc"
msgstr "por titulo ascendiente"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79
msgid "by title"
msgstr "por titulo"
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85
#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87
msgid "by title desc"
msgstr "por titulo descendiente"
#~ msgid "Please choose between Pocket & Readabilty :"
#~ msgstr "Merci de choisir entre Pocket & Readability :"
#~ msgid "Bye bye Pocket, let's go !"
#~ msgstr "Bye bye Pocket, en route !"
#~ msgid "Bye bye Readability, let's go !"
#~ msgstr "Bye bye Readability, en route !"
#~ msgid "Welcome to poche !"
#~ msgstr "Bienvenue dans poche !"
#~ msgid "Error with the import."
#~ msgstr "Erreur durant l'import."
#~ msgid "Wrong token."
#~ msgstr "Mauvais jeton."
#~ msgid "Login failed !"
#~ msgstr "Connexion échouée."
#~ msgid "your password has been updated"
#~ msgstr "Votre mot de passe a été mis à jour. "
#~ msgid "in demo mode, you can't update password"
#~ msgstr "En mode démo, le mot de passe ne peut être modifié."
#~ msgid ""
#~ "your password can't be empty and you have to repeat it in the second field"
#~ msgstr ""
#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le "
#~ "second champ."
#~ msgid "error during url preparation : the link wasn't added"
#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté"
#~ msgid "error during url preparation : the link is not valid"
#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide"
#~ msgid "TEST"
#~ msgstr "NICOLAS"

2
robots.txt Normal file
View file

@ -0,0 +1,2 @@
User-agent: *
Disallow: /

View file

@ -6,6 +6,6 @@
<link rel="stylesheet" href="./tpl/css/style.css" media="all">
<link rel="stylesheet" href="./tpl/css/style-{{ constant('THEME') }}.css" media="all" title="{{ constant('THEME') }} theme">
<link rel="stylesheet" href="./tpl/css/messages.css" media="all">
<link href='http://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
<script src="./tpl/js/jquery-2.0.3.min.js"></script>
<script type="text/javascript">$(document).ready(function(){$("body").prepend('<a href="#top" class="top_link" title="{% trans "back to top" %}"><img src="./tpl/img/{{ constant("THEME") }}/backtotop.png" alt={% trans "back to top" %}"/></a>');$(".top_link").css({position:"fixed",right:"15px",bottom:"15px",display:"none",padding:"20px",background:"#ccc","-moz-border-radius":"40px","-webkit-border-radius":"40px","border-radius":"40px",opacity:"0.9","z-index":"2000"});$(window).scroll(function(){posScroll=$(document).scrollTop();if(posScroll>=400)$(".top_link").fadeIn(600);else $(".top_link").fadeOut(600)})})</script>

7
tpl/error.twig Normal file
View file

@ -0,0 +1,7 @@
{% extends "layout.twig" %}
{% block title %}{% trans "error" %}{% endblock %}
{% block content %}
<h1>error</h1>
<p>{{ msg|raw }}</p>
<p>Don't forget <a href="http://inthepoche.com/?pages/Documentation">the documentation</a>.</p>
{% endblock %}

View file

@ -7,21 +7,21 @@
<p>
{% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read the documentation on poche website</a>." %}
</p>
<div class="row">
<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 />
</div>
<div class="row">
</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">
</div>
<div class="row">
</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">
</div>
<div class="row mts txtcenter">
</p>
<p class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Install" %}</button>
</div>
</p>
</fieldset>
<input type="hidden" name="token" value="{{ token }}">
</form>