1
0
mirror of https://github.com/moparisthebest/wallabag synced 2024-08-13 16:54:00 -04:00

Merge pull request #289 from inthepoche/dev

1.1.0
This commit is contained in:
Nicolas Lœuillet 2013-10-24 23:51:59 -07:00
commit cd8a344156
21 changed files with 534 additions and 279 deletions

View File

@ -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,8 +119,8 @@ 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) {

View File

@ -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,39 +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://doc.inthepoche.com/doku.php?id=users:begin:install">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 = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>';
$this->notInstalledMessage[] = 'You don\'t have write access on cache directory.';
self::$canRenderTemplates = false;
return 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;
}
@ -147,25 +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 (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 (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
$msg = '<h1>install folder</h1><p>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;
}
@ -250,6 +263,10 @@ class Poche
public function getTheme() {
return $this->currentTheme;
}
public function getLanguage() {
return $this->currentLanguage;
}
public function getInstalledThemes() {
$handle = opendir(THEME);
@ -258,7 +275,7 @@ class Poche
while (($theme = readdir($handle)) !== false) {
# Themes are stored in a directory, so all directory names are themes
# @todo move theme installation data to database
if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.', '.git'))) {
if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.'))) {
continue;
}
@ -271,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(
@ -363,15 +404,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;
@ -492,6 +537,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
@ -501,11 +599,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);
@ -513,10 +617,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();
}
}
@ -733,4 +833,4 @@ class Poche
}
return $version;
}
}
}

View File

@ -41,10 +41,14 @@ 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"]);
@ -243,4 +247,4 @@ class Tools
$lang = explode('.', $userlanguage);
return str_replace('_', '-', $lang[0]);
}
}
}

View File

@ -25,6 +25,9 @@ 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', FALSE);
define ('DOWNLOAD_PICTURES', FALSE);
@ -49,12 +52,10 @@ define ('CACHE', ROOT . '/cache');
define ('PAGINATION', '10');
define ('POCHE_VERSION', '1.0.0');
define ('POCKET_FILE', '/ril_export.html');
define ('READABILITY_FILE', '/readability');
define ('INSTAPAPER_FILE', '/instapaper-export.html');
define ('IMPORT_POCKET_FILE', ROOT . POCKET_FILE);
define ('IMPORT_READABILITY_FILE', ROOT . READABILITY_FILE);
define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE);
define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE);

View File

@ -8,7 +8,9 @@
* @license http://www.wtfpl.net/ see COPYING file
*/
define ('POCHE', '1.1.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);

View File

@ -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 !';

View File

@ -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>

Binary file not shown.

View 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"

View File

@ -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"

View File

@ -4,10 +4,10 @@ themes created by poche users
## list of themes
* dark ([preview](https://raw.github.com/inthepoche/poche-themes/master/dark/screenshot.jpg))
* dmagenta ([preview](https://raw.github.com/inthepoche/poche-themes/master/dmagenta/screenshot.jpg))
* solarized ([preview](https://raw.github.com/inthepoche/poche-themes/master/solarized/screenshot.jpg))
* solarized-dark ([preview](https://raw.github.com/inthepoche/poche-themes/master/solarized-dark/screenshot.jpg))
* 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

View File

@ -1,4 +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_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}</strong></p>{% endif %}
{% 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>

View File

@ -7,5 +7,4 @@
<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">
<link href='//fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
<script src="//codeorigin.jquery.com/jquery-2.0.3.min.js"></script>
<script src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/js/jquery-2.0.3.min.js"></script>

View File

@ -23,7 +23,7 @@
<h2>{% trans "Updating poche" %}</h2>
<ul>
<li>{% trans "your version" %} : <strong>{{ constant('POCHE_VERSION') }}</strong></li>
<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>
@ -47,6 +47,26 @@
<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">
@ -65,6 +85,7 @@
<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>
@ -77,4 +98,4 @@
<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 %}
{% endblock %}

View File

@ -1,3 +1,12 @@
@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;
@ -188,7 +197,7 @@ a:visited {
bottom: 0;
left: 0;
width: 100%;
height: 50px;
min-height: 50px;
padding-top: 17px;
text-align: center;
color: #fff;
@ -318,4 +327,4 @@ a.link span,
a.bad-display span,
a.reading-time span {
background-repeat: no-repeat;
}
}

View File

@ -1,6 +1,11 @@
{% extends "layout.twig" %}
{% block title %}{% trans "plop" %}{% endblock %}
{% block content %}
{{ msg|raw }}
<p>Don't forget <a href="http://inthepoche.com/doc">the documentation</a>.</p>
<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 %}

Binary file not shown.

1
themes/default/js/jquery-2.0.3.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
{% 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>
@ -29,4 +30,5 @@
<input type="hidden" name="returnurl" value="{{ referer }}">
<input type="hidden" name="token" value="{{ token }}">
</form>
{% endblock %}
{% endif %}
{% endblock %}