composer.phar
db/poche.sqlite
output
-phpdoc*
\ No newline at end of file
+phpdoc*
+inc/config/myconfig.inc.php
\ No newline at end of file
--- /dev/null
+# 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.
\ No newline at end of file
# 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
-```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
-```
+Download this file http://static.inthepoche.com/files/poche-1.0-latest-with-twig.zip
+
+Extract this file on your server.
-poche must have write access on assets, cache and db directories.
+## you want to install twig by yourself
-[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.
+Download the latest version here : http://www.inthepoche.com/?pages/T%C3%A9l%C3%A9charger-poche
-## twig
-poche now uses twig for templating. You have to install twig.
+Extract this file on your server.
-Install composer in your project :
-```bash
+```php
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
+
+Copy / paste install/poche.sqlite in db folder.
+
+### using mysql or postgresql
+
+Execute the sql file in /install (mysql.sql or postgres.sql)
+
+Then, go to step 3.
+
+# Upgrading poche
+
+Replace all the files except **db/poche.sqlite**. Also remember to edit the file /inc/poche/config.inc.php.
+
+## 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
-## storage in sqlite
-You have to install [sqlite for php](http://www.php.net/manual/en/book.sqlite.php) on your server.
+You must have write access on assets, cache and db directories. These directories may not exist, you'll have to create them.
-Copy /install/poche.sqlite in /db
+You can use poche ! Enjoy.
-## storage in mysql
-Execute /install/mysql.sql file in your database.
+# Some problems you may encounter
-## storage in postgres
-Execute /install/postgres.sql file in your database.
+## Blank page
-## upgrading from poche <= 0.3
-With poche <= 0.3, all your datas were stored in a sqlite file. The structure of this file changed.
+Be sure to have write access on assets, cache and db directories.
-You have to execute http://yourpoche/install/update_sqlite_from_0_to_1.php before using this new version.
+## 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
-## installing poche
-you can go on your poche http://yourpoche. You have to fill the fields and that's all !
\ No newline at end of file
+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.
\ No newline at end of file
-# 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.
-
-![poche](http://inthepoche.com/img/logo.png)
-
-The website of poche is [inthepoche.com](http://inthepoche.com).
+# 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.
+
+## Some features
+
+* 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>
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();
}
}
- private function init()
+ /**
+ * all checks before installation.
+ * @return boolean
+ */
+ private function checkBeforeInstall()
{
- Tools::initPhp();
- Session::init();
+ $msg = '';
+ $allIsGood = TRUE;
- if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) {
- $this->user = $_SESSION['poche_user'];
+ 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 {
- # fake user, just for install & login screens
- $this->user = new User();
- $this->user->setConfig($this->getDefaultConfig());
+ 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
+ ));
}
- # l10n
- $language = $this->user->getConfigValue('language');
- putenv('LC_ALL=' . $language);
- setlocale(LC_ALL, $language);
- bindtextdomain($language, LOCALE);
- textdomain($language);
+ return $allIsGood;
+ }
+ private function initTpl()
+ {
# template engine
$loader = new Twig_Loader_Filesystem(TPL);
if (DEBUG_POCHE) {
# filter for reading time
$filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
$this->tpl->addFilter($filter);
+ }
+
+ private function init()
+ {
+ Tools::initPhp();
+ Session::init();
+
+ if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) {
+ $this->user = $_SESSION['poche_user'];
+ }
+ else {
+ # fake user, just for install & login screens
+ $this->user = new User();
+ $this->user->setConfig($this->getDefaultConfig());
+ }
+
+ # l10n
+ $language = $this->user->getConfigValue('language');
+ putenv('LC_ALL=' . $language);
+ setlocale(LC_ALL, $language);
+ bindtextdomain($language, LOCALE);
+ textdomain($language);
# Pagination
$this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
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');
}
break;
default:
+ Tools::logm('action ' . $action . 'doesn\'t exist');
break;
}
}
$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));
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();
}
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);
+ }
+ }
+ }
}
\ No newline at end of file
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);
}
* @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();
--- /dev/null
+<?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');
\ No newline at end of file
* @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
--- /dev/null
+<?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>
\ No newline at end of file
--- /dev/null
+#
+# 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."
--- /dev/null
+#
+# 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"
--- /dev/null
+User-agent: *
+Disallow: /
\ No newline at end of file
<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>
\ No newline at end of file
--- /dev/null
+{% 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 %}
\ No newline at end of file
<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>