Compare commits

..

93 Commits

Author SHA1 Message Date
7a4482b8a4 1.2.0: here we go 2013-11-25 09:57:10 +01:00
defa7754a4 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-11-25 09:49:08 +01:00
1bf152a551 add italian language 2013-11-25 09:48:51 +01:00
99c8761b75 fix russian directory 2013-11-25 09:43:45 +01:00
0c2f453750 Fix Undefined offset Notice (thx @vjousse) 2013-11-20 10:22:21 +01:00
d7aec74403 [change] reuse existing class for article_toolbar 2013-11-14 11:14:15 +01:00
760d44d194 Merge branch 'DmitrySandalov-master' into dev 2013-11-13 15:23:52 +01:00
f2d3ee98a6 [fix] bug fix #287: test if open_basedir & safe_mode are active to use CURLOPT_FOLLOWLOCATION 2013-11-13 15:17:34 +01:00
705f04937f Merge branch 'master' of git://github.com/DmitrySandalov/poche into DmitrySandalov-master 2013-11-13 14:52:28 +01:00
5862c872c6 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-11-13 14:51:14 +01:00
b7066c0333 [fix] bug fix #311: remove toolbar when printing article 2013-11-13 14:50:56 +01:00
e4178da65c Merge pull request #310 from jn0/dev
dark theme images replaced to visible set, no executable bits for pictures
2013-11-12 08:38:24 -08:00
jno
c7abf20bbe dark theme images replaced to visible set, no executable bits for pictures 2013-11-12 20:34:55 +04:00
b3a2586ecf [add] russian language 2013-11-12 13:05:27 +01:00
45e9e0f565 fix #270 access from remote machine
Replacing SERVER_NAME with HTTP_HOST allows me to use Poche on remote machines
2013-11-05 12:13:55 +03:00
352523640d compatibility with 5.3.3 2013-11-04 08:44:56 +01:00
05824223a9 Merge pull request #291 from banux/dev
Autoclose
2013-10-28 00:38:05 -07:00
f616ab60ef use 2 seprate variable for autoclosing windows to avoid to quick closing when sharing, the popup can be close before the link is save 2013-10-27 07:47:14 +01:00
363bc4eb86 Add a autoclose parameters. When we use sharing method in plugins like the tiny tiny rss one or the firefox plugins we can passe the autoclose=true parameters that close the popup. 2013-10-27 07:37:05 +01:00
2b191d8c37 fix download links 2013-10-26 13:23:31 +02:00
7d7ed6a0ee change link to themes 2013-10-26 12:59:55 +02:00
83020b993c parse dilbert.com 2013-10-25 15:50:16 +02:00
985ce3ec53 bug fix #259: Deleting article doesn't redirect 2013-10-25 14:25:37 +02:00
33fe6a46a4 bug fix #278: mysql collation not UTF8 2013-10-25 14:20:18 +02:00
cd8a344156 Merge pull request #289 from inthepoche/dev
1.1.0
2013-10-24 23:51:59 -07:00
6ae804853f on the road to 1.1.0 2013-10-25 08:45:28 +02:00
b6d859fa92 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-10-22 08:51:30 +02:00
1a0d776394 fix #286: german translation updated 2013-10-22 08:51:22 +02:00
1ba1628ed6 Merge pull request #285 from dsacchet/dev
Adding support for http_auth
2013-10-21 08:31:24 -07:00
027b4e1568 Adding support for http_auth 2013-10-20 23:28:45 +02:00
df6afaf090 Added support for http_auth 2013-10-20 16:53:54 +02:00
c1e24b0461 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-10-17 17:04:12 +02:00
36b9219842 bug fix #251: login failure 2013-10-17 17:03:55 +02:00
8e76eaad19 Update CONTRIBUTING.md 2013-10-17 11:39:19 +02:00
fad925644f Merge pull request #278 from tcitworld/dev
Updated Screenshots URLs
2013-10-13 23:13:31 -07:00
a84f77d6ba Updated Screenshots URLs
From the poche-themes repository to the poche repository, folder themes.
2013-10-13 20:39:12 +02:00
0c994bd934 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-10-10 14:07:13 +02:00
18889e230a remove empty file 2013-10-10 14:06:53 +02:00
e557b7bb44 Merge pull request #274 from NumEricR/select-theme
Update select theme filter and sort names (dev branch PR)
2013-10-08 23:33:48 -07:00
3ae9190e78 Merge branch 'dev' of https://github.com/inthepoche/poche into dev 2013-10-08 13:38:03 +02:00
e231f3f023 add czech locale, thanks to @dstancl 2013-10-08 13:37:46 +02:00
2502e1359c Merge pull request #273 from jcsaaddupuy/emded-dependencies
Emdeded Roboto webfont
2013-10-08 04:10:37 -07:00
20f00edd15 Merge branch 'dev' into emded-dependencies 2013-10-08 13:04:05 +02:00
2f3425dff6 Added font-face linked to local font 2013-10-08 13:00:43 +02:00
272600ff80 Removed google font link 2013-10-08 12:57:33 +02:00
1745ebc832 Added Roboto font from https://themes.googleusercontent.com/static/fonts/roboto/v9/2UX7WLTfW3W8TclTUvlFyQ.woff 2013-10-08 12:57:02 +02:00
5188585864 Merge pull request #272 from jcsaaddupuy/custom_ssl_port
Custom ssl port
2013-10-08 03:48:49 -07:00
1e98ee1de0 bug fix: changing password was buggy 2013-10-07 14:56:21 +02:00
5011388f39 bug fix #215: change language from config screen 2013-10-07 14:26:25 +02:00
5e07dc8b51 Merge remote branch 'upstream/dev' into dev
Conflicts:
	themes/default/_head.twig
2013-10-07 14:25:24 +02:00
894c36ea32 what this f* F? 2013-10-07 14:00:45 +02:00
031df528b6 bug fix #268: move POCHE_VERSION in index.php and change the name to avoid conflicts when updating 2013-10-07 13:19:34 +02:00
9d3b88b379 bug fix #266: make installation steps easier 2013-10-07 13:12:28 +02:00
5eebe4e50d delete href 2013-10-07 13:06:10 +02:00
2916d24b20 Added support for custom SSL port 2013-10-07 12:47:13 +02:00
3352332f3f Merge branch 'dev' into custom_port 2013-10-07 12:39:29 +02:00
2621569200 missing } 2013-10-07 12:39:11 +02:00
93eed12505 Fixed typo 2013-10-07 12:31:46 +02:00
125f9ee838 Added support for custom ssl port 2013-10-07 12:30:40 +02:00
8df8eb6c95 Merge pull request #264 from jcsaaddupuy/dev
Embeding jquery
2013-10-07 00:31:42 -07:00
bf7516112f Embeded jquery 2.0.3 dependancie 2013-10-06 20:31:11 +02:00
5a26af476e Merge pull request #261 from NumEricR/toolbar-height
Fix #255 : increase article toolbar height if necessary
2013-10-06 11:07:24 -07:00
2287bf06f5 Sort themes alphabetically in config list 2013-10-05 11:08:38 +02:00
89812ec81c Remove useless filter on .git folder 2013-10-05 10:52:08 +02:00
06fef43180 Fix #255 : increase article toolbar height if necessary 2013-10-05 10:51:25 +02:00
01e671f4d1 Merge pull request #256 from inthepoche/dev
merge 1.0.0
2013-10-03 10:14:54 -07:00
d47d2533ac change doc link 2013-10-03 19:03:52 +02:00
27a74816da change export link 2013-10-03 18:33:20 +02:00
47baa1077e reopen #219 when archive last poched links from a page, redirect to an other page 2013-10-03 15:43:24 +02:00
f0f7b94362 remove print_r 2013-10-03 14:53:08 +02:00
747c6698b6 Merge branch 'dev' of git://github.com/tcitworld/poche into tcitworld-dev 2013-10-03 14:51:20 +02:00
8f91e10faa preparing to 1.0.0 2013-10-03 14:51:04 +02:00
6cd8af85da bug fix #227: Deleting element in archive redirect to home 2013-10-03 14:48:53 +02:00
34d67c835e bug fix #219: when archive last poched links from a page, redirect to an other page 2013-10-03 14:46:46 +02:00
7f17a38d35 change instructions messages 2013-10-03 14:23:03 +02:00
07ae20eeed change reading time displaying 2013-10-03 14:17:45 +02:00
4cc3c2ac17 embed themes 2013-10-03 14:10:44 +02:00
66e074b43d remove themes 2013-10-03 14:09:58 +02:00
eb44ca4213 embed themes with poche 2013-10-03 14:06:20 +02:00
dfbbc14b33 remove themes 2013-10-03 14:05:50 +02:00
34bf601a56 change submodule & gitignore 2013-10-03 13:59:52 +02:00
969a91a1e3 site_config is now embedded with poche 2013-10-03 13:48:58 +02:00
fbe8e27568 Merge pull request #250 from NumEricR/dl-export
Force download on poche export
2013-10-03 01:52:07 -07:00
4ee705a79c Add .htaccess file to force download of poche export 2013-09-28 11:15:35 +02:00
8623a53200 Merge pull request #245 from NumEricR/themes-list
Avoid ".git" option in themes list of config page
2013-09-27 02:19:26 -07:00
4e5b04113d Changed Flattr Caching System
From md5(url) to the ID of an article. Easier and faster.
2013-09-27 11:11:45 +02:00
3cc22aab82 Avoid ".git" option in themes list of config page 2013-09-26 23:37:07 +02:00
be2b9055b9 Changed url's encryption from base64 to md5
Fixes Issue #243.
md5 hashes are only coded on 32 hexadecimal characters, so it won't make
too long file names.
2013-09-26 22:00:44 +02:00
92cd6e9af8 change import files constants 2013-09-21 21:44:49 +02:00
58ace4941e bug fix #229: theme not stored on updated poches 2013-09-21 14:37:53 +02:00
37527034ab unactivate debug 2013-09-21 14:18:28 +02:00
79026b73a8 Merge pull request #226 from inthepoche/dev
beta5
2013-09-20 04:36:35 -07:00
c51be6b697 Merge pull request #181 from inthepoche/dev
beta4
2013-08-25 12:12:53 -07:00
157 changed files with 2614 additions and 379 deletions

2
.gitignore vendored
View File

@ -3,6 +3,4 @@ cache/*
vendor vendor
composer.phar composer.phar
db/poche.sqlite db/poche.sqlite
output
phpdoc*
inc/poche/config.inc.php inc/poche/config.inc.php

6
.gitmodules vendored
View File

@ -1,6 +0,0 @@
[submodule "inc/3rdparty/site_config"]
path = inc/3rdparty/site_config
url = git@github.com:inthepoche/site_config.git
[submodule "themes"]
path = themes
url = git://github.com/inthepoche/poche-themes.git

View File

@ -8,4 +8,4 @@ To fix the bug quickly, we need some infos:
* the link you want to poche and which causes problem * the link you want to poche and which causes problem
## You want to fix a bug or to add a feature ## You want to fix a bug or to add a feature
Please fork poche and work with the dev branch. Do not work on master branch. Please fork poche and work with **the dev branch** only. Do not work on master branch.

View File

@ -12,7 +12,7 @@ Abandon Pocket, Instapaper and other Readability service : adopt poche. It is th
* multi users (very soon!) * multi users (very soon!)
* update notification in configuration screen * update notification in configuration screen
* many storage modes (sqlite, mysql, postgresql) * many storage modes (sqlite, mysql, postgresql)
* many templates: [have a look here](https://github.com/inthepoche/poche-themes). * many templates: [have a look here](https://github.com/inthepoche/poche/tree/master/themes).
* ... * ...
To test poche, a demo website is online : [demo.inthepoche.com](http://demo.inthepoche.com) (login poche, password poche). To test poche, a demo website is online : [demo.inthepoche.com](http://demo.inthepoche.com) (login poche, password poche).
@ -26,4 +26,4 @@ Read the [INSTALL.md file](https://github.com/inthepoche/poche/blob/master/INSTA
Copyright © 2010-2013 Nicolas Lœuillet <nicolas.loeuillet@gmail.com> Copyright © 2010-2013 Nicolas Lœuillet <nicolas.loeuillet@gmail.com>
This work is free. You can redistribute it and/or modify it under the This work is free. You can redistribute it and/or modify it under the
terms of the Do What The Fuck You Want To Public License, Version 2, terms of the Do What The Fuck You Want To Public License, Version 2,
as published by Sam Hocevar. See the COPYING file for more details. as published by Sam Hocevar. See the COPYING file for more details.

View File

@ -9,9 +9,9 @@ class FlattrItem {
public $flattrItemURL; public $flattrItemURL;
public $numflattrs; public $numflattrs;
public function checkItem($urltoflattr) { public function checkItem($urltoflattr,$id) {
$this->cacheflattrfile($urltoflattr); $this->cacheflattrfile($urltoflattr, $id);
$flattrResponse = file_get_contents(CACHE . "/flattr/".base64_encode($urltoflattr).".cache"); $flattrResponse = file_get_contents(CACHE . "/flattr/".$id.".cache");
if($flattrResponse != FALSE) { if($flattrResponse != FALSE) {
$result = json_decode($flattrResponse); $result = json_decode($flattrResponse);
if (isset($result->message)){ if (isset($result->message)){
@ -33,15 +33,15 @@ class FlattrItem {
} }
} }
private function cacheflattrfile($urltoflattr) { private function cacheflattrfile($urltoflattr, $id) {
if (!is_dir(CACHE . '/flattr')) { if (!is_dir(CACHE . '/flattr')) {
mkdir(CACHE . '/flattr', 0777); mkdir(CACHE . '/flattr', 0777);
} }
// if a cache flattr file for this url already exists and it's been less than one day than it have been updated, see in /cache // if a cache flattr file for this url already exists and it's been less than one day than it have been updated, see in /cache
if ((!file_exists(CACHE . "/flattr/".base64_encode($urltoflattr).".cache")) || (time() - filemtime(CACHE . "/flattr/".base64_encode($urltoflattr).".cache") > 86400)) { if ((!file_exists(CACHE . "/flattr/".$id.".cache")) || (time() - filemtime(CACHE . "/flattr/".$id.".cache") > 86400)) {
$askForFlattr = Tools::getFile(FLATTR_API . $urltoflattr); $askForFlattr = Tools::getFile(FLATTR_API . $urltoflattr);
$flattrCacheFile = fopen(CACHE . "/flattr/".base64_encode($urltoflattr).".cache", 'w+'); $flattrCacheFile = fopen(CACHE . "/flattr/".$id.".cache", 'w+');
fwrite($flattrCacheFile, $askForFlattr); fwrite($flattrCacheFile, $askForFlattr);
fclose($flattrCacheFile); fclose($flattrCacheFile);
} }

View File

@ -1613,6 +1613,7 @@ class SimplePie_Misc
case 'utf7': case 'utf7':
return 'UTF-7'; return 'UTF-7';
case 'utf8lias':
case 'utf8': case 'utf8':
return 'UTF-8'; return 'UTF-8';

6
inc/3rdparty/site_config/README.md vendored Normal file
View File

@ -0,0 +1,6 @@
Full-Text RSS Site Patterns
---------------------------
Site patterns allow you to specify what should be extracted from specific sites.
Please see http://help.fivefilters.org/customer/portal/articles/223153-site-patterns for more information.

View File

@ -0,0 +1,6 @@
title: //title
body: //h2 | //span[@class='masque'] | //article[@class='corps_article_right']
prune: no
tidy: no
test_url: http://www.bfmtv.com/societe/cigarette-electronique-dangers-588622.html

View File

@ -0,0 +1,4 @@
title: //div[contains(@class, 'SB_Title')]//a
body: //div[contains(@class, 'STR_Content')]
test_url: http://dilbert.com/strips/comic/2013-10-22

View File

@ -0,0 +1,7 @@
title: //title
body: //div[@class='post-content']
prune: no
tidy: no
test_url: http://www.inthepoche.com/?post/poche-hosting

View File

@ -0,0 +1,6 @@
title: //title
body: //h2 | //p | //ul
prune: no
tidy: no
test_url: http://www.tldp.org/HOWTO/Plug-and-Play-HOWTO-7.html

3
inc/3rdparty/site_config/index.php vendored Normal file
View File

@ -0,0 +1,3 @@
<?php
// this is here to prevent directory listing over the web
?>

View File

@ -0,0 +1,19 @@
title: //h1[@id='firstHeading']
body: //div[@id = 'bodyContent']
strip_id_or_class: editsection
#strip_id_or_class: toc
strip_id_or_class: vertical-navbox
strip: //table[@id='toc']
strip: //div[@id='catlinks']
strip: //div[@id='jump-to-nav']
strip: //div[@class='thumbcaption']//div[@class='magnify']
strip: //table[@class='navbox']
strip: //table[contains(@class, 'infobox')]
strip: //div[@class='dablink']
strip: //div[@id='contentSub']
strip: //table[contains(@class, 'metadata')]
strip: //*[contains(@class, 'noprint')]
strip: //span[@title='pronunciation:']
prune: no
tidy: no
test_url: http://en.wikipedia.org/wiki/Christopher_Lloyd

View File

@ -0,0 +1,3 @@
<?php
// this is here to prevent directory listing over the web
?>

View File

@ -0,0 +1,2 @@
<?php
return 1;

View File

@ -87,6 +87,17 @@ class Database {
return $user_config; 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) { public function login($username, $password) {
$sql = "SELECT * FROM users WHERE username=? AND password=?"; $sql = "SELECT * FROM users WHERE username=? AND password=?";
$query = $this->executeQuery($sql, array($username, $password)); $query = $this->executeQuery($sql, array($username, $password));
@ -108,14 +119,22 @@ class Database {
public function updatePassword($userId, $password) public function updatePassword($userId, $password)
{ {
$sql_update = "UPDATE users SET password=? WHERE id=?"; $sql_update = "UPDATE users SET password=? WHERE id=?";
$params_update = array($password, $id); $params_update = array($password, $userId);
$this->updateUserConfig($userId, 'password', $password); $query = $this->executeQuery($sql_update, $params_update);
} }
public function updateUserConfig($userId, $key, $value) { public function updateUserConfig($userId, $key, $value) {
$sql_update = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?"; $config = $this->getConfigUser($userId);
$params_update = array($value, $userId, $key);
$query = $this->executeQuery($sql_update, $params_update); if (!isset ($user_config[$key])) {
$sql = "INSERT INTO users_config (`value`, `user_id`, `name`) VALUES (?, ?, ?)";
}
else {
$sql = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?";
}
$params = array($value, $userId, $key);
$query = $this->executeQuery($sql, $params);
} }
private function executeQuery($sql, $params) { private function executeQuery($sql, $params) {
@ -147,7 +166,7 @@ class Database {
$query = $this->executeQuery($sql, $params); $query = $this->executeQuery($sql, $params);
$entry = $query->fetchAll(); $entry = $query->fetchAll();
return $entry[0]; return isset($entry[0]) ? $entry[0] : null;
} }
public function getEntriesByView($view, $user_id, $limit = '') { public function getEntriesByView($view, $user_id, $limit = '') {

View File

@ -20,7 +20,8 @@ class Poche
public $pagination; public $pagination;
private $currentTheme = ''; 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) # @todo make this dynamic (actually install themes and save them in the database including author information et cetera)
private $installedThemes = array( private $installedThemes = array(
@ -33,28 +34,21 @@ class Poche
public function __construct() public function __construct()
{ {
if (! $this->configFileIsAvailable()) { if ($this->configFileIsAvailable()) {
return; $this->init();
} }
$this->init(); if ($this->themeIsInstalled()) {
$this->initTpl();
if (! $this->themeIsInstalled()) {
return;
} }
$this->initTpl(); if ($this->systemIsInstalled()) {
$this->store = new Database();
if (! $this->systemIsInstalled()) { $this->messages = new Messages();
return; # installation
} if (! $this->store->isInstalled()) {
$this->install();
$this->store = new Database(); }
$this->messages = new Messages();
# installation
if (! $this->store->isInstalled()) {
$this->install();
} }
} }
@ -90,11 +84,20 @@ class Poche
} }
$this->currentTheme = $themeDirectory; $this->currentTheme = $themeDirectory;
# Set up language
$languageDirectory = $this->user->getConfigValue('language');
if ($languageDirectory === false) {
$languageDirectory = DEFAULT_THEME;
}
$this->currentLanguage = $languageDirectory;
} }
public function configFileIsAvailable() { public function configFileIsAvailable() {
if (! self::$configFileAvailable) { 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; return false;
} }
@ -103,31 +106,44 @@ class Poche
} }
public function themeIsInstalled() { 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 # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet
if (! self::$canRenderTemplates) { if (! self::$canRenderTemplates) {
$this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://inthepoche.com/?pages/Documentation">the documentation.</a>'; $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;
return false;
} }
if (! is_writable(CACHE)) {
$this->notInstalledMessage[] = 'You don\'t have write access on cache directory.';
self::$canRenderTemplates = false;
$passTheme = FALSE;
}
# Check if the selected theme and its requirements are present # Check if the selected theme and its requirements are present
if (! is_dir(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() . ')'; $this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
self::$canRenderTemplates = false; self::$canRenderTemplates = false;
return false; $passTheme = FALSE;
} }
foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
if (! is_dir(THEME . '/' . $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; self::$canRenderTemplates = false;
return false; $passTheme = FALSE;
} }
} }
if (!$passTheme) {
return FALSE;
}
return true; return true;
} }
@ -139,30 +155,30 @@ class Poche
*/ */
public function systemIsInstalled() public function systemIsInstalled()
{ {
$msg = ''; $msg = TRUE;
$configSalt = defined('SALT') ? constant('SALT') : ''; $configSalt = defined('SALT') ? constant('SALT') : '';
if (empty($configSalt)) { if (empty($configSalt)) {
$msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>'; $this->notInstalledMessage[] = 'You have not yet filled in the SALT value in the config.inc.php file.';
} else if (! is_writable(CACHE)) { $msg = FALSE;
Tools::logm('you don\'t have write access on cache directory'); }
$msg = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>'; if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
} else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
Tools::logm('sqlite file doesn\'t exist'); 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>'; $this->notInstalledMessage[] = 'sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.';
} else if (file_exists(ROOT . '/install/update.php') && ! DEBUG_POCHE) { $msg = FALSE;
$msg = '<h1>setup</h1><p><strong>It\'s your first time here?</strong> Please copy /install/poche.sqlite in db folder. Then, delete install folder.<br /><strong>If you have already installed poche</strong>, an update is needed <a href="install/update.php">by clicking here</a>.</p>'; }
} else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) { if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
$msg = '<h1>setup</h1><p><strong>If you want to update your poche</strong>, you just have to delete /install folder. <br /><strong>To install your poche with sqlite</strong>, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.</p>'; $this->notInstalledMessage[] = 'you have to delete the /install folder before using poche.';
} else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) { $msg = FALSE;
}
if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
Tools::logm('you don\'t have write access on sqlite file'); 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)) { if (! $msg) {
$this->notInstalledMessage = $msg;
return false; return false;
} }
@ -247,6 +263,10 @@ class Poche
public function getTheme() { public function getTheme() {
return $this->currentTheme; return $this->currentTheme;
} }
public function getLanguage() {
return $this->currentLanguage;
}
public function getInstalledThemes() { public function getInstalledThemes() {
$handle = opendir(THEME); $handle = opendir(THEME);
@ -268,9 +288,33 @@ class Poche
$themes[] = array('name' => $theme, 'current' => $current); $themes[] = array('name' => $theme, 'current' => $current);
} }
sort($themes);
return $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() public function getDefaultConfig()
{ {
return array( return array(
@ -283,7 +327,7 @@ class Poche
/** /**
* Call action (mark as fav, archive, delete, etc.) * Call action (mark as fav, archive, delete, etc.)
*/ */
public function action($action, Url $url, $id = 0, $import = FALSE) public function action($action, Url $url, $id = 0, $import = FALSE, $autoclose = FALSE)
{ {
switch ($action) switch ($action)
{ {
@ -314,7 +358,11 @@ class Poche
} }
if (!$import) { if (!$import) {
Tools::redirect('?view=home'); if ($autoclose == TRUE) {
Tools::redirect('?view=home');
} else {
Tools::redirect('?view=home&closewin=true');
}
} }
break; break;
case 'delete': case 'delete':
@ -360,15 +408,19 @@ class Poche
case 'config': case 'config':
$dev = $this->getPocheVersion('dev'); $dev = $this->getPocheVersion('dev');
$prod = $this->getPocheVersion('prod'); $prod = $this->getPocheVersion('prod');
$compare_dev = version_compare(POCHE_VERSION, $dev); $compare_dev = version_compare(POCHE, $dev);
$compare_prod = version_compare(POCHE_VERSION, $prod); $compare_prod = version_compare(POCHE, $prod);
$themes = $this->getInstalledThemes(); $themes = $this->getInstalledThemes();
$languages = $this->getInstalledLanguages();
$http_auth = (isset($_SERVER['PHP_AUTH_USER']))?true:false;
$tpl_vars = array( $tpl_vars = array(
'themes' => $themes, 'themes' => $themes,
'languages' => $languages,
'dev' => $dev, 'dev' => $dev,
'prod' => $prod, 'prod' => $prod,
'compare_dev' => $compare_dev, 'compare_dev' => $compare_dev,
'compare_prod' => $compare_prod, 'compare_prod' => $compare_prod,
'http_auth' => $http_auth,
); );
Tools::logm('config view'); Tools::logm('config view');
break; break;
@ -385,7 +437,7 @@ class Poche
# flattr checking # flattr checking
$flattr = new FlattrItem(); $flattr = new FlattrItem();
$flattr->checkItem($entry['url']); $flattr->checkItem($entry['url'],$entry['id']);
$tpl_vars = array( $tpl_vars = array(
'entry' => $entry, 'entry' => $entry,
@ -404,6 +456,7 @@ class Poche
'page_links' => '', 'page_links' => '',
'nb_results' => '', 'nb_results' => '',
); );
if (count($entries) > 0) { if (count($entries) > 0) {
$this->pagination->set_total(count($entries)); $this->pagination->set_total(count($entries));
$page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&'); $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&');
@ -488,6 +541,59 @@ class Poche
Tools::redirect('?view=config'); 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. * checks if login & password are correct and save the user in session.
* it redirects the user to the $referer link * it redirects the user to the $referer link
@ -497,11 +603,17 @@ class Poche
*/ */
public function login($referer) public function login($referer)
{ {
if (!empty($_POST['login']) && !empty($_POST['password'])) { list($login,$password)=$this->credentials();
$user = $this->store->login($_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login'])); 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()) { if ($user != array()) {
# Save login into Session # 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')); $this->messages->add('s', _('welcome to your poche'));
Tools::logm('login successful'); Tools::logm('login successful');
Tools::redirect($referer); Tools::redirect($referer);
@ -509,10 +621,6 @@ class Poche
$this->messages->add('e', _('login failed: bad login or password')); $this->messages->add('e', _('login failed: bad login or password'));
Tools::logm('login failed'); Tools::logm('login failed');
Tools::redirect(); Tools::redirect();
} else {
$this->messages->add('e', _('login failed: you have to fill all fields'));
Tools::logm('login failed');
Tools::redirect();
} }
} }
@ -729,4 +837,4 @@ class Poche
} }
return $version; return $version;
} }
} }

View File

@ -41,20 +41,24 @@ class Tools
$https = (!empty($_SERVER['HTTPS']) $https = (!empty($_SERVER['HTTPS'])
&& (strtolower($_SERVER['HTTPS']) == 'on')) && (strtolower($_SERVER['HTTPS']) == 'on'))
|| (isset($_SERVER["SERVER_PORT"]) || (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"]) $serverport = (!isset($_SERVER["SERVER_PORT"])
|| $_SERVER["SERVER_PORT"] == '80' || $_SERVER["SERVER_PORT"] == '80'
|| ($https && $_SERVER["SERVER_PORT"] == '443') || ($https && $_SERVER["SERVER_PORT"] == '443')
|| ($https && $_SERVER["SERVER_PORT"]==SSL_PORT) //Custom HTTPS port detection
? '' : ':' . $_SERVER["SERVER_PORT"]); ? '' : ':' . $_SERVER["SERVER_PORT"]);
$scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]); $scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]);
if (!isset($_SERVER["SERVER_NAME"])) { if (!isset($_SERVER["HTTP_HOST"])) {
return $scriptname; return $scriptname;
} }
return 'http' . ($https ? 's' : '') . '://' return 'http' . ($https ? 's' : '') . '://'
. $_SERVER["SERVER_NAME"] . $serverport . $scriptname; . $_SERVER["HTTP_HOST"] . $serverport . $scriptname;
} }
public static function redirect($url = '') public static function redirect($url = '')
@ -129,7 +133,9 @@ class Tools
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); if (!ini_get('open_basedir') && !ini_get('safe_mode')) {
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_HEADER, false);
@ -243,4 +249,4 @@ class Tools
$lang = explode('.', $userlanguage); $lang = explode('.', $userlanguage);
return str_replace('_', '-', $lang[0]); return str_replace('_', '-', $lang[0]);
} }
} }

View File

@ -25,8 +25,11 @@ define ('STORAGE_PASSWORD', 'poche');
# Do not trespass unless you know what you are doing # 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 ('MODE_DEMO', FALSE);
define ('DEBUG_POCHE', true); define ('DEBUG_POCHE', FALSE);
define ('DOWNLOAD_PICTURES', FALSE); define ('DOWNLOAD_PICTURES', FALSE);
define ('CONVERT_LINKS_FOOTNOTES', FALSE); define ('CONVERT_LINKS_FOOTNOTES', FALSE);
define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE); define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
@ -49,8 +52,10 @@ define ('CACHE', ROOT . '/cache');
define ('PAGINATION', '10'); define ('PAGINATION', '10');
define ('POCHE_VERSION', '1.0-beta5'); define ('POCKET_FILE', '/ril_export.html');
define ('READABILITY_FILE', '/readability');
define ('INSTAPAPER_FILE', '/instapaper-export.html');
define ('IMPORT_POCKET_FILE', ROOT . '/ril_export.html'); define ('IMPORT_POCKET_FILE', ROOT . POCKET_FILE);
define ('IMPORT_READABILITY_FILE', ROOT . '/readability'); define ('IMPORT_READABILITY_FILE', ROOT . READABILITY_FILE);
define ('IMPORT_INSTAPAPER_FILE', ROOT . '/instapaper-export.html'); define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE);

View File

@ -8,7 +8,9 @@
* @license http://www.wtfpl.net/ see COPYING file * @license http://www.wtfpl.net/ see COPYING file
*/ */
define ('POCHE', '1.2.0');
require_once 'inc/poche/global.inc.php'; require_once 'inc/poche/global.inc.php';
session_start();
# Start Poche # Start Poche
$poche = new Poche(); $poche = new Poche();
@ -35,7 +37,12 @@ $tpl_vars = array(
if (! empty($notInstalledMessage)) { if (! empty($notInstalledMessage)) {
if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) { if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) {
# We cannot use Twig to display the error message # 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 { } else {
# Twig is installed, put the error message in the template # Twig is installed, put the error message in the template
$tpl_file = Tools::getTplFile('error'); $tpl_file = Tools::getTplFile('error');
@ -61,7 +68,10 @@ if (isset($_GET['login'])) {
$poche->export(); $poche->export();
} elseif (isset($_GET['updatetheme'])) { } elseif (isset($_GET['updatetheme'])) {
$poche->updateTheme(); $poche->updateTheme();
} elseif (isset($_GET['updatelanguage'])) {
$poche->updateLanguage();
} }
elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) { elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) {
$plain_url = new Url(base64_encode($_GET['plainurl'])); $plain_url = new Url(base64_encode($_GET['plainurl']));
$poche->action('add', $plain_url); $poche->action('add', $plain_url);
@ -71,8 +81,18 @@ if (Session::isLogged()) {
$poche->action($action, $url, $id); $poche->action($action, $url, $id);
$tpl_file = Tools::getTplFile($view); $tpl_file = Tools::getTplFile($view);
$tpl_vars = array_merge($tpl_vars, $poche->displayView($view, $id)); $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 { } else {
$tpl_file = Tools::getTplFile('login'); $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) # 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)); $tpl_vars = array_merge($tpl_vars, array('messages' => $messages));
# display poche # display poche
echo $poche->tpl->render($tpl_file, $tpl_vars); echo $poche->tpl->render($tpl_file, $tpl_vars);

View File

@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS `config` (
`name` varchar(255) NOT NULL, `name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL, `value` varchar(255) NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `entries` ( CREATE TABLE IF NOT EXISTS `entries` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `entries` (
`content` blob NOT NULL, `content` blob NOT NULL,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `users` ( CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS `users` (
`name` int(255) NOT NULL, `name` int(255) NOT NULL,
`email` varchar(255) NOT NULL, `email` varchar(255) NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `users_config` ( CREATE TABLE IF NOT EXISTS `users_config` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
@ -31,4 +31,4 @@ CREATE TABLE IF NOT EXISTS `users_config` (
`name` varchar(255) NOT NULL, `name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL, `value` varchar(255) NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1,77 +0,0 @@
<?php
require_once dirname(__FILE__).'/../inc/poche/Tools.class.php';
include dirname(__FILE__).'/../inc/poche/define.inc.php';
include dirname(__FILE__).'/../inc/poche/myconfig.inc.php';
require_once __DIR__ . '/../inc/poche/Database.class.php';
$store = new Database();
?>
<!DOCTYPE html>
<!--[if lte IE 6]> <html class="no-js ie6 ie67 ie678" lang="en"> <![endif]-->
<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<html lang="en">
<head>
<meta charset="utf-8">
<title>updating poche</title>
</head>
<body>
<h1>update poche to 1.0-beta4</h1>
<h2>Changelog</h2>
<ul>
<li>enhancement: updating and installing poche are more easier</li>
<li>enhancement: poche now uses Full Text RSS to fetch content</li>
<li>enhancement: css and twig files are more clean, thanks to NumEricR and nicofrand</li>
<li>enhancement: updated german translation, thanks to HLFH</li>
<li>enhancement: add db/, cache/ and assets/ directories in versioning</li>
<li>enhancement: display messages when error with import, thanks to EliasZ</li>
<li>enhancement: poche compatibility test file</li>
<li>enhancement: <a href="https://github.com/inthepoche/poche/issues/112">#112</a>: link with shaarli</li>
<li>enhancement: <a href="https://github.com/inthepoche/poche/issues/162">#162</a>: links to firefox / chrome / android apps in config screen</li>
<li>bug: encode url to share with twitter / email / shaarli</li>
<li>bug: Add IPv4 url support (and others beginning by a digit)</li>
<li>bug: title page in article view was wrong</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/148">#148</a>: use of undefined constant POCHE_VERSION</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/148">#149</a>: can't poche theguardian.com</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/150">#150</a>: default title for untitled articles</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/150">#151</a>: HTML entities in titles are encoded twice</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/169">#169</a>: entries height with short description</li>
<li>bug: <a href="https://github.com/inthepoche/poche/issues/175">#175</a>: IP addresses do not appear in "view original"</li>
</ul>
<p>To update your poche, please fill the following fields.</p>
<p>
<form name="update" method="post">
<div><label for="login">login:</label> <input type="text" name="login" id="login" /></div>
<div><label for="password">password:</label> <input type="password" name="password" id="password" /></div>
<div><input type="hidden" name="go" value="ok" /><input type="submit" value="update" /></div>
</form>
</p>
<?php
if (isset($_POST['go'])) {
if (!empty($_POST['login']) && !empty($_POST['password'])) {
$user = $store->login($_POST['login'], sha1($_POST['password'] . $_POST['login'] . SALT));
if ($user != array()) {
$myconfig_file = '../inc/poche/myconfig.inc.php';
# just change version number in config file
if (!is_writable('../inc/poche/myconfig.inc.php')) {
die('You don\'t have write access to open ./inc/poche/myconfig.inc.php.');
}
if (file_exists($myconfig_file))
{
$content = str_replace('1.0-beta3', '1.0-beta4', file_get_contents($myconfig_file));
file_put_contents($myconfig_file, $content);
}
?>
<p><span style="color: green;">your poche is up to date!</span></p>
<p><span style="color: red;">don't forget to delete ./install/ folder after the update.</span></p>
<p><a href="../">go back to your poche</a></p>
<?php
}
}
}
?>
</body>
</html>

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" "Project-Id-Version: \n"
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n" "Last-Translator: Square252\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Poedit 1.5.7\n"
msgid "config" msgid "config"
msgstr "Konfig" msgstr "Konfiguration"
msgid "Poching a link" msgid "Poching a link"
msgstr "" msgstr "Poche einen Link"
msgid "read the documentation" msgid "read the documentation"
msgstr "" msgstr "Die Dokumentation lesen"
msgid "by filling this field" msgid "by filling this field"
msgstr "" msgstr "durch das ausfüllen dieses Feldes:"
msgid "poche it!" msgid "poche it!"
msgstr "Pochert es!" msgstr "Poche es!"
msgid "Updating poche" msgid "Updating poche"
msgstr "Poche aktualisieren" msgstr "Poche aktualisieren"
msgid "your version" msgid "your version"
msgstr "Ihre Version" msgstr "Deine Version"
msgid "latest stable version" msgid "latest stable version"
msgstr "letzte stabile Version" msgstr "Neuste stabile Version"
msgid "a more recent stable version is available." 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." msgid "you are up to date."
msgstr "Sie sind auf den neuesten Stand." msgstr "Du bist auf den neuesten Stand."
msgid "latest dev version" msgid "latest dev version"
msgstr "letzte Entwicklungsversion" msgstr "Neuste Entwicklungsversion"
msgid "a more recent development version is available." 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" msgid "Change your password"
msgstr "Ihr Passwort ändern" msgstr "Passwort ändern"
msgid "New password:" msgid "New password:"
msgstr "Neues Passwort:" msgstr "Neues Passwort:"
@ -56,7 +56,7 @@ msgid "Password"
msgstr "Passwort" msgstr "Passwort"
msgid "Repeat your new password:" msgid "Repeat your new password:"
msgstr "neues Passwort wiederholen:" msgstr "Neues Passwort wiederholen:"
msgid "Update" msgid "Update"
msgstr "Aktualisieren" msgstr "Aktualisieren"
@ -65,114 +65,113 @@ msgid "Import"
msgstr "Import" msgstr "Import"
msgid "Please execute the import script locally, it can take a very long time." msgid "Please execute the import script locally, it can take a very long time."
msgstr "" msgstr "Bitte führe das Import Script lokal aus, dies kann eine Weile dauern."
"Wir danken Ihnen, den Import in lokal zu ausführen, kann es einige Zeit "
"dauern."
msgid "More infos in the official doc:" 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" msgid "import from Pocket"
msgstr "import aus Pocket" msgstr "Import aus Pocket"
msgid "import from Readability" msgid "import from Readability"
msgstr "import aus Readability" msgstr "Import aus Readability"
msgid "import from Instapaper" msgid "import from Instapaper"
msgstr "import aus Instapaper" msgstr "Import aus Instapaper"
msgid "Export your poche datas" msgid "Export your poche datas"
msgstr "Exportieren Sie Ihre Daten aus Poche." msgstr "Exportieren Sie Ihre Poche Daten."
msgid "Click here" msgid "Click here"
msgstr "klicken Sie hier" msgstr "Klicke hier"
msgid "to export your poche datas." 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" msgid "back to home"
msgstr "züruck zur Hauptseite" msgstr "züruck zur Hauptseite"
msgid "installation" msgid "installation"
msgstr "Installierung" msgstr "Installieren"
msgid "install your poche" msgid "install your poche"
msgstr "installieren Sie Poche" msgstr "Installiere dein Poche"
msgid "" msgid ""
"poche is still not installed. Please fill the below form to install it. " "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 " "Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
"on poche website</a>." "on poche website</a>."
msgstr "" msgstr ""
"Poche ist noch nicht installiert. Wir danken Ihnen, die Felder unten zu " "Poche ist noch nicht installiert. Bitte fülle die Felder unten aus, um die "
"befüllen, um es zu machen. Zögern sie nicht, <a href='http://inthepoche.com/" "Installation durchzuführen. Zögere nicht, <a href='http://inthepoche.com/"
"doc'>die Dokumentation auf der Website von Poche zu lesen." "doc'>die Dokumentation auf der Website von Poche zu lesen falls du Probleme "
"haben solltest."
msgid "Login" msgid "Login"
msgstr "Benutzername" msgstr "Benutzername"
msgid "Repeat your password" msgid "Repeat your password"
msgstr "Wiederholen Sie Ihr Passwort" msgstr "Wiederhole dein Passwort"
msgid "Install" msgid "Install"
msgstr "Installieren" msgstr "Installieren"
msgid "back to top" msgid "back to top"
msgstr "zurück nach oben" msgstr "Nach Oben"
msgid "favoris" msgid "favoris"
msgstr "" msgstr ""
msgid "archive" msgid "archive"
msgstr "Archive" msgstr "Archiv"
msgid "unread" msgid "unread"
msgstr "" msgstr "ungelesen"
msgid "by date asc" msgid "by date asc"
msgstr "nach Datum asc" msgstr "nach Datum aufsteigend"
msgid "by date" msgid "by date"
msgstr "nach Datum" msgstr "nach Datum"
msgid "by date desc" msgid "by date desc"
msgstr "nach Datum desc" msgstr "nach Datum absteigend"
msgid "by title asc" msgid "by title asc"
msgstr "nach Titel asc" msgstr "nach Titel aufsteigend"
msgid "by title" msgid "by title"
msgstr "nach Titel" msgstr "nach Titel"
msgid "by title desc" msgid "by title desc"
msgstr "nach Titel desc" msgstr "nach Titel absteigend"
msgid "No link available here!" msgid "No link available here!"
msgstr "" msgstr "Kein Link verfügbar!"
msgid "toggle mark as read" msgid "toggle mark as read"
msgstr "als gelesen markieren" msgstr "Als gelesen markieren"
msgid "toggle favorite" msgid "toggle favorite"
msgstr "Favorit" msgstr "Favorit"
msgid "delete" msgid "delete"
msgstr "löschen" msgstr "Löschen"
msgid "original" msgid "original"
msgstr "Original" msgstr "Original"
msgid "results" msgid "results"
msgstr "" msgstr "Ergebnisse"
msgid "tweet" msgid "tweet"
msgstr "twittern" msgstr "Twittern"
msgid "email" msgid "email"
msgstr "senden per E-Mail" msgstr "senden per E-Mail"
msgid "shaarli" msgid "shaarli"
msgstr "shaarli" msgstr "Shaarli"
msgid "flattr" msgid "flattr"
msgstr "flattr" msgstr "flattr"
@ -193,37 +192,38 @@ msgid "plop"
msgstr "plop" msgstr "plop"
msgid "home" msgid "home"
msgstr "Hause" msgstr "Start"
msgid "favorites" msgid "favorites"
msgstr "Favoriten" msgstr "Favoriten"
msgid "logout" msgid "logout"
msgstr "Trennung" msgstr "Logout"
msgid "powered by" msgid "powered by"
msgstr "bereitgestellt von" msgstr "bereitgestellt von"
msgid "debug mode is on so cache is off." msgid "debug mode is on so cache is off."
msgstr "" msgstr "Debug Modus ist aktiviert, das Caching ist somit deaktiviert"
msgid "your poche version:" msgid "your poche version:"
msgstr "" msgstr "Deine Poche Version"
msgid "storage:" msgid "storage:"
msgstr "" msgstr "Speicher:"
msgid "login to your poche" msgid "login to your poche"
msgstr "Verbinden zu Poche" msgstr "Bei Poche anmelden"
msgid "you are in demo mode, some features may be disabled." 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" msgid "Stay signed in"
msgstr "bleiben Sie verbunden" msgstr "Angemeldet bleiben"
msgid "(Do not check on public computers)" 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" msgid "Sign in"
msgstr "Einloggen" msgstr "Einloggen"

Binary file not shown.

View File

@ -0,0 +1,237 @@
#
# Translators:
# Damtux <sun_lion@live.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: poche\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2013-11-25 09:47+0100\n"
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/poche/language/"
"it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
msgid "config"
msgstr "configurazione"
msgid "Poching a link"
msgstr "Pochare un link"
msgid "read the documentation"
msgstr "leggi la documentazione"
msgid "by filling this field"
msgstr "compilando questo campo"
msgid "poche it!"
msgstr "pochalo!"
msgid "Updating poche"
msgstr "Aggiornamento poche"
msgid "your version"
msgstr "la tua versione"
msgid "latest stable version"
msgstr "ultima versione stabile"
msgid "a more recent stable version is available."
msgstr "è disponibile una versione stabile più recente."
msgid "you are up to date."
msgstr "sei aggiornato."
msgid "latest dev version"
msgstr "ultima versione di sviluppo"
msgid "a more recent development version is available."
msgstr "è disponibile una versione di sviluppo più recente."
msgid "Change your password"
msgstr "Cambia la tua password"
msgid "New password:"
msgstr "Nuova password:"
msgid "Password"
msgstr "Password"
msgid "Repeat your new password:"
msgstr "Ripeti la nuova password:"
msgid "Update"
msgstr "Aggiorna"
msgid "Import"
msgstr "Importa"
msgid "Please execute the import script locally, it can take a very long time."
msgstr ""
"Si prega di eseguire lo script di importazione a livello locale, può "
"richiedere un tempo molto lungo."
msgid "More infos in the official doc:"
msgstr "Maggiori info nella documentazione ufficiale"
msgid "import from Pocket"
msgstr "Importa da Pocket"
msgid "import from Readability"
msgstr "Importa da Readability"
msgid "import from Instapaper"
msgstr "Importa da Instapaper"
msgid "Export your poche datas"
msgstr "Esporta i tuoi dati di poche"
msgid "Click here"
msgstr "Fai clic qui"
msgid "to export your poche datas."
msgstr "per esportare i tuoi dati di poche."
msgid "back to home"
msgstr "torna alla home"
msgid "installation"
msgstr "installazione"
msgid "install your poche"
msgstr "installa il tuo poche"
msgid ""
"poche is still not installed. Please fill the below form to install it. "
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
"on poche website</a>."
msgstr ""
"poche non è ancora installato. Si prega di riempire il modulo sottostante "
"per completare l'installazione. <a href='http://inthepoche.com/doc'>Leggere "
"la documentazione sul sito di poche</a>."
msgid "Login"
msgstr "Nome utente"
msgid "Repeat your password"
msgstr "Ripeti la tua password"
msgid "Install"
msgstr "Installa"
msgid "back to top"
msgstr "torna a inizio pagina"
msgid "favoris"
msgstr "preferiti"
msgid "archive"
msgstr "archivio"
msgid "unread"
msgstr "non letti"
msgid "by date asc"
msgstr "per data cresc"
msgid "by date"
msgstr "per data"
msgid "by date desc"
msgstr "per data decr"
msgid "by title asc"
msgstr "per titolo cresc"
msgid "by title"
msgstr "per titolo"
msgid "by title desc"
msgstr "per titolo decr"
msgid "No link available here!"
msgstr "Nessun link disponibile!"
msgid "toggle mark as read"
msgstr "segna come letto / non letto"
msgid "toggle favorite"
msgstr "segna come preferito"
msgid "delete"
msgstr "elimina"
msgid "original"
msgstr "originale"
msgid "results"
msgstr "risultati"
msgid "tweet"
msgstr "twitta"
msgid "email"
msgstr "email"
msgid "shaarli"
msgstr "shaarli"
msgid "flattr"
msgstr "flattr"
msgid "this article appears wrong?"
msgstr "articolo non visualizzato correttamente?"
msgid "create an issue"
msgstr "crea una segnalazione"
msgid "or"
msgstr "oppure"
msgid "contact us by mail"
msgstr "contattaci via email"
msgid "plop"
msgstr "plop"
msgid "home"
msgstr "home"
msgid "favorites"
msgstr "preferiti"
msgid "logout"
msgstr "esci"
msgid "powered by"
msgstr "realizzato con"
msgid "debug mode is on so cache is off."
msgstr "modalità di debug attiva, cache disattivata."
msgid "your poche version:"
msgstr "la tua versione di poche:"
msgid "storage:"
msgstr "memoria:"
msgid "login to your poche"
msgstr "accedi al tuo poche"
msgid "you are in demo mode, some features may be disabled."
msgstr ""
"sei in modalità dimostrazione, alcune funzionalità potrebbero essere "
"disattivate."
msgid "Stay signed in"
msgstr "Resta connesso"
msgid "(Do not check on public computers)"
msgstr "(non selezionare su computer pubblici)"
msgid "Sign in"
msgstr "Accedi"

Binary file not shown.

View File

@ -0,0 +1,228 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Nicolas Lœuillet <nicolas.loeuillet@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
msgid "config"
msgstr "настройки"
msgid "Poching a link"
msgstr "Сохраняю ссылку"
msgid "read the documentation"
msgstr "читать инструкцию"
msgid "by filling this field"
msgstr "заполнением этого поля"
msgid "poche it!"
msgstr "Прикарманить!"
msgid "Updating poche"
msgstr "Обновляю poche"
msgid "your version"
msgstr "Ваша версия"
msgid "latest stable version"
msgstr "крайняя стабильная версия"
msgid "a more recent stable version is available."
msgstr "есть более новая стабильная версия."
msgid "you are up to date."
msgstr "у Вас всё самое новое."
msgid "latest dev version"
msgstr "крайняя версия разработчиков"
msgid "a more recent development version is available."
msgstr "есть более свежая версия разработчиков."
msgid "Change your password"
msgstr "Смени пароль"
msgid "New password:"
msgstr "Новый пароль:"
msgid "Password"
msgstr "Пароль"
msgid "Repeat your new password:"
msgstr "Ещё раз новый пароль:"
msgid "Update"
msgstr "Обновить"
msgid "Import"
msgstr "Импортировать"
msgid "Please execute the import script locally, it can take a very long time."
msgstr ""
"Выполните сценарий импорта локально - он может занять слишком много времени."
msgid "More infos in the official doc:"
msgstr "Больше сведений в официальной документации:"
msgid "import from Pocket"
msgstr "импортировать из Pocket"
msgid "import from Readability"
msgstr "импортировать из Readability"
msgid "import from Instapaper"
msgstr "импортировать из Instapaper"
msgid "Export your poche datas"
msgstr "Экспортировать данные poche"
msgid "Click here"
msgstr "Кликни сюда"
msgid "to export your poche datas."
msgstr "чтобы экспортировать твои записи из poche."
msgid "back to home"
msgstr "домой"
msgid "installation"
msgstr "установка"
msgid "install your poche"
msgstr "установить твой poche"
msgid ""
"poche is still not installed. Please fill the below form to install it. "
"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
"on poche website</a>."
msgstr ""
"poche всё ещё не установлен. Надо заполнить форму ниже, чтобы установить "
"его. Неплохо также <a href='http://inthepoche.com/doc'>прочесть документацию "
"на сайте poche</a>."
msgid "Login"
msgstr "Регистрационное имя"
msgid "Repeat your password"
msgstr "Повтори пароль"
msgid "Install"
msgstr "Установить"
msgid "back to top"
msgstr "наверх"
msgid "favoris"
msgstr "избранное"
msgid "archive"
msgstr "архив"
msgid "unread"
msgstr "нечитанное"
msgid "by date asc"
msgstr "по дате, сперва старые"
msgid "by date"
msgstr "по дате"
msgid "by date desc"
msgstr "по дате, сперва новые"
msgid "by title asc"
msgstr "по заголовку (прямой)"
msgid "by title"
msgstr "по заголовку"
msgid "by title desc"
msgstr "по заголовку (обратный)"
msgid "No link available here!"
msgstr "Здесь нет линка!"
msgid "toggle mark as read"
msgstr "изменить отметку 'прочитано'"
msgid "toggle favorite"
msgstr "изменить избранность"
msgid "delete"
msgstr "удалить"
msgid "original"
msgstr "исходный"
msgid "results"
msgstr "найдено"
msgid "tweet"
msgstr "твитнуть"
msgid "email"
msgstr "отправить по почте"
msgid "shaarli"
msgstr "Шаарли"
msgid "flattr"
msgstr "проспонсировать"
msgid "this article appears wrong?"
msgstr "статья выглядит криво?"
msgid "create an issue"
msgstr "оповестить об ошибке"
msgid "or"
msgstr "или"
msgid "contact us by mail"
msgstr "связаться по почте"
msgid "plop"
msgstr "plop"
msgid "home"
msgstr "домой"
msgid "favorites"
msgstr "избранное"
msgid "logout"
msgstr "выйти"
msgid "powered by"
msgstr "на основе"
msgid "debug mode is on so cache is off."
msgstr "включён режим отладки - кеш выключен."
msgid "your poche version:"
msgstr "Ваша версия poche:"
msgid "storage:"
msgstr "хранилище:"
msgid "login to your poche"
msgstr "войти в свой poche"
msgid "you are in demo mode, some features may be disabled."
msgstr "демонстрационный режим - работают не все возможности."
msgid "Stay signed in"
msgstr "Оставаться зарегистрированным"
msgid "(Do not check on public computers)"
msgstr "(Не отмечай на чужих компьютерах)"
msgid "Sign in"
msgstr "Зарегистрироваться"

View File

@ -1,7 +1,7 @@
<?php <?php
$app_name = 'poche 1.0'; $app_name = 'poche 1.0';
$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.2.0', '>=')); $php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.3.3', '>='));
$pcre_ok = extension_loaded('pcre'); $pcre_ok = extension_loaded('pcre');
$zlib_ok = extension_loaded('zlib'); $zlib_ok = extension_loaded('zlib');
$mbstring_ok = extension_loaded('mbstring'); $mbstring_ok = extension_loaded('mbstring');

1
themes

Submodule themes deleted from c6406013d5

31
themes/README.md Normal file
View File

@ -0,0 +1,31 @@
# poche-themes
themes created by poche users
## list of themes
* dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/dark/screenshot.jpg))
* dmagenta ([preview](https://raw.github.com/inthepoche/poche/master/themes/dmagenta/screenshot.jpg))
* solarized ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized/screenshot.jpg))
* solarized-dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized-dark/screenshot.jpg))
## installation
In your poche folder:
```
git submodule init
git submodule update
```
Then, in your config screen, select your favorite theme.
That's all !
## create a theme
Just have a look to this short documentation : http://inthepoche.com/doc/doku.php?id=designers:creating_theme
## send a theme
Send your theme by email at support@inthepoche.com.

3
themes/dark/README.md Normal file
View File

@ -0,0 +1,3 @@
# dark theme
theme created by Nicolas Lœuillet aka nico_somb

View File

@ -0,0 +1,74 @@
body {
color: #d4d4d4;
background-color: #262627;
}
a,
a:hover,
a:visited {
color: #d4d4d4;
}
a.back span {
background-image: url('../img/dark/left.png');
}
a.top span {
background-image: url('../img/dark/top.png');
}
a.fav span,
a.fav-off span:hover {
background-image: url('../img/dark/star-on.png');
}
a.fav span:hover,
a.fav-off span {
background-image: url('../img/dark/star-off.png');
}
a.archive span,
a.archive-off span:hover {
background-image: url('../img/dark/checkmark-on.png');
}
a.archive span:hover,
a.archive-off span {
background-image: url('../img/dark/checkmark-off.png');
}
a.twitter span {
background-image: url('../img/dark/twitter.png');
}
a.shaarli span {
background-image: url('../img/dark/shaarli.png');
}
a.flattr span {
background-image: url('../img/dark/flattr.png');
}
a.email span {
background-image: url('../img/dark/envelop.png');
}
a.delete span {
background-image: url('../img/dark/remove.png');
}
a.link span {
background-image: url('../img/dark/link.png');
}
a.bad-display span {
background-image: url('../img/dark/bad-display.png');
}
.pagination a {
color: #aaa;
}
#article_toolbar {
background: #262627;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

BIN
themes/dark/screenshot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

View File

@ -0,0 +1,3 @@
<script type="text/javascript">
top["bookmarklet-url@inthepoche.com"]=""+"<!DOCTYPE html>"+"<html>"+"<head>"+"<title>poche it !</title>"+'<link rel="icon" href="{{poche_url}}tpl/img/favicon.ico" />'+"</head>"+"<body>"+"<script>"+"window.onload=function(){"+"window.setTimeout(function(){"+"history.back();"+"},250);"+"};"+"</scr"+"ipt>"+"</body>"+"</html>"
</script>

View File

@ -0,0 +1,4 @@
<footer class="w600p center mt3 mb3 smaller txtright">
<p>{% trans "powered by" %} <a href="http://inthepoche.com">poche</a></p>
{% if constant('DEBUG_POCHE') == 1 %}<p><strong>{% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE')}}. {% trans "storage:" %} {{constant('STORAGE')}}</strong></p>{% endif %}
</footer>

11
themes/default/_head.twig Normal file
View File

@ -0,0 +1,11 @@
<link rel="shortcut icon" type="image/x-icon" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/favicon.ico" />
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-144x144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-72x72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/apple-touch-icon-precomposed.png">
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/knacss.css" media="all">
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/style.css" media="all">
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ theme }}/css/style-{{ theme }}.css" media="all" title="{{ theme }} theme">
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/messages.css" media="all">
<link rel="stylesheet" href="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/css/print.css" media="print">
<script src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/js/jquery-2.0.3.min.js"></script>
<script src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/js/autoClose.js"></script>

View File

@ -0,0 +1,7 @@
<ul id="links">
<li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "home" %}</a></li>
<li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
<li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
<li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
<li><a href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
</ul>

View File

@ -0,0 +1 @@
{{ messages | raw }}

7
themes/default/_top.twig Normal file
View File

@ -0,0 +1,7 @@
<header class="w600p center mbm">
<h1>
{% if view == 'home' %}{% block logo %}<img src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/logo.png" alt="logo poche" />{% endblock %}
{% else %}<a href="./" title="{% trans "back to home" %}" >{{ block('logo') }}</a>
{% endif %}
</h1>
</header>

102
themes/default/config.twig Normal file
View File

@ -0,0 +1,102 @@
{% extends "layout.twig" %}
{% block title %}{% trans "config" %}{% endblock %}
{% block menu %}
{% include '_menu.twig' %}
{% endblock %}
{% block content %}
<h2>{% trans "Poching a link" %}</h2>
<p>{% trans "You can poche a link by several methods:" %} (<a href="http://inthepoche.com/doc" title="{% trans "read the documentation" %}">?</a>)</p>
<ul>
<li>firefox: <a href="https://addons.mozilla.org/fr/firefox/addon/poche/" title="download the firefox extension">{% trans "download the extension" %}</a></li>
<li>chrome: <a href="http://doc.inthepoche.com/doku.php?id=users:chrome_extension" title="download the chrome extension">{% trans "download the extension" %}</a></li>
<li>android: <a href="https://f-droid.org/repository/browse/?fdid=fr.gaulupeau.apps.Poche" title="download the application">{% trans "via f-droid" %}</a>{% trans "or" %}<a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.Poche" title="download the application">{% trans "via google play" %}</a></li>
<li>windows phone: <a href="http://www.windowsphone.com/en-us/store/app/poche/334de2f0-51b5-4826-8549-a3d805a37e83" title="download the window phone application">{% trans "download the application" %}</a></li>
<li>
<form method="get" action="index.php">
<label class="addurl" for="plainurl">{% trans "by filling this field" %}:</label>
<input required placeholder="Ex:mywebsite.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
<input type="submit" value="{% trans "poche it!" %}" />
</form>
</li>
<li>{% trans "bookmarklet: drag & drop this link to your bookmarks bar" %} <a id="bookmarklet" ondragend="this.click();" title="i am a bookmarklet, use me !" href="javascript:if(top['bookmarklet-url@inthepoche.com']){top['bookmarklet-url@inthepoche.com'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "poche it!" %}</a></li>
</ul>
<h2>{% trans "Updating poche" %}</h2>
<ul>
<li>{% trans "your version" %} : <strong>{{ constant('POCHE') }}</strong></li>
<li>{% trans "latest stable version" %} : {{ prod }}. {% if compare_prod == -1 %}<strong><a href="http://inthepoche.com/">{% trans "a more recent stable version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>
{% if constant('DEBUG_POCHE') == 1 %}<li>{% trans "latest dev version" %} : {{ dev }}. {% if compare_dev == -1 %}<strong><a href="http://inthepoche.com/">{% trans "a more recent development version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>{% endif %}
</ul>
<h2>{% trans "Change your theme" %}</h2>
<form method="post" action="?updatetheme" name="changethemeform">
<fieldset class="w500p">
<div class="row">
<label class="col w150p" for="theme">{% trans "Theme:" %}</label>
<select class="col" id="theme" name="theme">
{% for theme in themes %}
<option value="{{ theme.name }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
{% endfor %}
</select>
</div>
<div class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
</div>
</fieldset>
<input type="hidden" name="returnurl" value="{{ referer }}">
<input type="hidden" name="token" value="{{ token }}">
</form>
<h2>{% trans "Change your language" %}</h2>
<form method="post" action="?updatelanguage" name="changelanguageform">
<fieldset class="w500p">
<div class="row">
<label class="col w150p" for="language">{% trans "Language:" %}</label>
<select class="col" id="language" name="language">
{% for language in languages %}
<option value="{{ language.name }}" {{ language.current ? 'selected' : '' }}>{{ language.name }}</option>
{% endfor %}
</select>
</div>
<div class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
</div>
</fieldset>
<input type="hidden" name="returnurl" value="{{ referer }}">
<input type="hidden" name="token" value="{{ token }}">
</form>
{% if http_auth == 0 %}
<h2>{% trans "Change your password" %}</h2>
<form method="post" action="?config" name="loginform">
<fieldset class="w500p">
<div class="row">
<label class="col w150p" for="password">{% trans "New password:" %}</label>
<input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2">
</div>
<div class="row">
<label class="col w150p" for="password_repeat">{% trans "Repeat your new password:" %}</label>
<input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="{% trans "Password" %}" tabindex="3">
</div>
<div class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
</div>
</fieldset>
<input type="hidden" name="returnurl" value="{{ referer }}">
<input type="hidden" name="token" value="{{ token }}">
</form>
{% endif %}
<h2>{% trans "Import" %}</h2>
<p>{% trans "Please execute the import script locally, it can take a very long time." %}</p>
<p>{% trans "More infos in the official doc:" %} <a href="http://inthepoche.com/doc">inthepoche.com</a></p>
<ul>
<li><a href="./?import&amp;from=pocket">{% trans "import from Pocket" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('POCKET_FILE')) }}</li>
<li><a href="./?import&amp;from=readability">{% trans "import from Readability" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('READABILITY_FILE')) }}</li>
<li><a href="./?import&amp;from=instapaper">{% trans "import from Instapaper" %}</a> {{ '(you must have a %s file on your server)'|trans|format(constant('INSTAPAPER_FILE')) }}</li>
</ul>
<h2>{% trans "Export your poche datas" %}</h2>
<p><a href="?export" target="_blank">{% trans "Click here" %}</a> {% trans "to export your poche datas." %}</p>
{% endblock %}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,75 @@
.messages {
display: block;
clear: both;
width: 400px;
margin: 10px auto 10px;
padding: 10px 0;
-moz-border-radius: 4px;
border-radius: 4px;
}
.messages a.closeMessage {
display: none;
float: right;
width: 16px;
height: 16px;
margin: -14px -8px 0 0;
background: url(../img/messages/close.png) no-repeat;
}
/*.messages:hover a.closeMessage { visibility:visible; }*/
.messages p {
margin: 3px 0 3px 10px !important;
padding: 0 10px 0 23px !important;
font-size: 14px;
line-height: 16px;
}
.messages.error {
border: 1px solid #c42608;
color: #c00 !important;
background: #fff0ef;
}
.messages.error p {
color: #c00 !important;
background: url(../img/messages/cross.png) no-repeat 0 50%;
}
.messages.success {
border: 1px solid #6dc70c;
background: #e0fbcc;
}
.messages.success p {
color: #2b6301 !important;
background: url(../img/messages/tick.png) no-repeat 0 50%;
}
.messages.warning {
border: 1px solid #ebcd41;
color: #000;
background: #fffcd3;
}
.messages.warning p {
color: #5f4e01;
background: url(../img/messages/warning.png) no-repeat 0 50%;
}
.messages.information,
.messages.info {
border: 1px solid #82aee7;
background: #dfebfb;
}
.messages.information p,
.messages.info p {
color: #064393;
background: url(../img/messages/help.png) no-repeat 0 50%;
}
.messages.information a {
text-decoration: underline;
}

View File

@ -0,0 +1,49 @@
/* ### Layout ### */
body {
font-family: Serif;
background-color: #fff;
}
@page {
margin: 1cm;
}
img {
max-width: 100% !important;
}
/* ### Content ### */
/* Hide useless blocks */
body > header,
#links,
#sort,
body > footer,
.top_link,
div.tools,
header div,
.messages,
.entrie + .results,
#article_toolbar {
display: none !important;
}
article {
border: none !important;
}
/* Add URL after links */
.vieworiginal a:after {
content: " (" attr(href) ")";
}
/* Add explanation after abbr */
abbr[title]:after {
content: " (" attr(title) ")";
}
/* Change border on current pager item */
.pagination span.current {
border-style: dashed;
}

View File

@ -0,0 +1,55 @@
a.back span {
background-image: url('../img/default/left.png');
}
a.top span {
background-image: url('../img/default/top.png');
}
a.fav span,
a.fav-off span:hover {
background-image: url('../img/default/star-on.png');
}
a.fav span:hover,
a.fav-off span {
background-image: url('../img/default/star-off.png');
}
a.archive span,
a.archive-off span:hover {
background-image: url('../img/default/checkmark-on.png');
}
a.archive span:hover,
a.archive-off span {
background-image: url('../img/default/checkmark-off.png');
}
a.twitter span {
background-image: url('../img/default/twitter.png');
}
a.shaarli span {
background-image: url('../img/default/shaarli.png');
}
a.flattr span {
background-image: url('../img/default/flattr.png');
}
a.email span {
background-image: url('../img/default/envelop.png');
}
a.delete span {
background-image: url('../img/default/remove.png');
}
a.link span {
background-image: url('../img/default/link.png');
}
a.bad-display span {
background-image: url('../img/default/bad-display.png');
}

View File

@ -0,0 +1,330 @@
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto Regular'), local('Roboto-Regular'), url(../fonts/Roboto.woff) format('woff');
}
body {
margin: 10px;
font-family: 'Roboto',Verdana,Geneva,sans-serif;
font-size: 16px;
color: #000;
}
header {
text-align: center;
}
header h1 {
font-size: 1.3em;
}
a,
a:hover,
a:visited {
color: #000;
}
.bouton {
border: none;
border-radius: 2px;
color: #fff;
background-color: #000;
}
.bouton:hover {
color: #f1f1f1;
background-color: #222;
cursor: pointer;
}
#main {
margin: 0 auto;
}
#main #links {
padding: 0;
text-align: center;
font-size: 0.9em;
list-style-type: none;
}
#main #links li {
display: inline;
}
#main #links li .current {
-webkit-border-radius: 2px;
border-radius: 2px;
color: #fff;
background-color: #000;
}
#main #sort {
padding: 0;
text-align: center;
list-style-type: none;
opacity: 0.5;
}
#main #sort li {
display: inline;
font-size: 0.9em;
}
#main #sort li + li {
margin-left: 10px;
}
#main #sort a {
padding: 2px 2px 0;
vertical-align: middle;
}
#main #sort img {
vertical-align: baseline;
}
#main #sort img:hover {
cursor: pointer;
}
#links a {
padding: 5px 10px;
text-decoration: none;
}
#links a:hover {
-webkit-border-radius: 2px;
border-radius: 2px;
color: #f1f1f1;
background-color: #040707;
}
/*** ***/
/*** LINKS DISPLAY ***/
#main .tool {
text-decoration: none;
cursor: pointer;
}
#main #content {
margin-top: 20px;
}
#main #content h2 {
text-decoration: none;
font-size: 1.3em;
}
#main #content .entrie {
margin-top: 15px;
padding-bottom: 15px;
border-bottom: 1px dashed #222;
overflow: hidden;
}
/* First entry */
#main #content .results + .entrie {
clear: both;
margin-top: 0;
}
#main .entrie .tools {
float: right;
text-align: right;
list-style-type: none;
opacity: 0.5;
}
#main .entrie .tools .tool span {
display: inline-block;
width: 16px;
height: 16px;
/* Hide textual content */
overflow: hidden;
text-align: left;
text-indent: -9999px;
}
/*** ***/
/*** ARTICLE PAGE ***/
#article {
margin: 0 auto;
}
#article header {
border-bottom: 1px solid #222;
}
#article header {
text-align: left;
}
#article header h1 small {
float: right;
font-size: 0.6em;
}
#article header a {
text-decoration: none;
}
.backhome {
display: inline;
}
.results {
padding: 15px 0;
overflow: hidden;
}
.nb-results {
float: left;
font-size: 0.9em;
line-height: 24px;
vertical-align: middle;
}
#article_toolbar {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
min-height: 50px;
padding-top: 17px;
text-align: center;
color: #fff;
opacity: 0.8;
background: #fff;
}
#article_toolbar li {
display: inline;
padding-right: 30px;
}
#article_toolbar .tool {
padding: 0 2px;
}
#article_toolbar .tool span {
display: inline-block;
width: 16px;
height: 16px;
/* Hide textual content */
overflow: hidden;
text-align: left;
text-indent: -9999px;
}
/*** ***/
/*** PAGINATION ***/
.pagination {
float: right;
text-align: right;
}
.pagination a {
height: 25px;
margin: 2px;
padding: 4px 8px;
border: 1px solid #d5d5d5;
text-decoration: none;
font-size: 11px;
font-weight: bold;
color: #333;
}
.pagination a:hover,
.pagination a:active {
background-color: #efefef;
}
.pagination .current {
height: 25px;
margin: 2px;
padding: 4px 8px;
border: 1px solid #d5d5d5;
text-decoration: none;
font-size: 11px;
font-weight: bold;
color: #000;
background-color: #ccc;
}
.pagination .disabled {
display: none;
}
#bookmarklet {
padding: 5px;
border: 1px dashed #808080;
background: #fff;
cursor: move;
}
.top_link {
display: none;
z-index: 2000;
position: fixed;
right: 15px;
bottom: 15px;
padding: 20px;
-webkit-border-radius: 40px;
-moz-border-radius: 40px;
border-radius: 40px;
opacity: 0.9;
background: #ccc;
}
footer {
clear: both;
}
.reading-time {
font-size: 0.8em;
}
#inputform {
display: none;
margin-top: 5px;
margin-right: auto;
margin-left: auto;
padding-bottom: 5px;
max-width: 300px;
border-radius: 3px;
text-align: center;
color: #fff;
opacity: 0.8;
background-color: rgba(0,0,0,0.9);
}
a.back span,
a.top span,
a.fav span,
a.fav span:hover,
a.fav-off span,
a.fav-off span:hover,
a.archive span,
a.archive span:hover,
a.archive-off span,
a.archive-off span:hover,
a.twitter span,
a.shaarli span,
a.flattr span,
a.email span,
a.delete span,
a.link span,
a.bad-display span,
a.reading-time span {
background-repeat: no-repeat;
}

11
themes/default/error.twig Normal file
View File

@ -0,0 +1,11 @@
{% extends "layout.twig" %}
{% block title %}{% trans "plop" %}{% endblock %}
{% block content %}
<h1>Errors</h1>
<ol>
{% for message in msg %}
<li>{{message}}</li>
{% endfor %}
</ol>
<p>Don't forget <a href="http://inthepoche.com/doc">the documentation</a>.</p>
{% endblock %}

View File

@ -0,0 +1 @@
{{ export }}

Binary file not shown.

49
themes/default/home.twig Normal file
View File

@ -0,0 +1,49 @@
{% extends "layout.twig" %}
{% block title %}
{% if view == 'fav' %}
{% trans "favoris" %}
{% elseif view == 'archive' %}
{% trans "archive" %}
{% else %}
{% trans "unread" %}
{% endif %}
{% endblock %}
{% block menu %}
{% include '_menu.twig' %}
{% endblock %}
{% block precontent %}
{% if entries|length > 1 %}
<ul id="sort">
<li><a href="./?sort=ia&amp;view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by date asc" %}" title="{% trans "by date asc" %}" /></a> {% trans "by date" %} <a href="./?sort=id&amp;view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by date desc" %}" title="{% trans "by date desc" %}" /></a></li>
<li><a href="./?sort=ta&amp;view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by title asc" %}" title="{% trans "by title asc" %}" /></a> {% trans "by title" %} <a href="./?sort=td&amp;view={{ view }}"><img src="{{ poche_url }}/themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by title desc" %}" title="{% trans "by title desc" %}" /></a></li>
</ul>
{% endif %}
{% endblock %}
{% block content %}
{% if entries is empty %}
<div class="messages warning"><p>{% trans "No link available here!" %}</p></div>
{% else %}
{% block pager %}
{% if nb_results > 1 %}
<div class="results">
<div class="nb-results">{{ nb_results }} {% trans "results" %}</div>
{{ page_links | raw }}
</div>
{% endif %}
{% endblock %}
{% for entry in entries %}
<div id="entry-{{ entry.id|e }}" class="entrie">
<h2><a href="index.php?view=view&amp;id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2>
<ul class="tools">
<li><a title="{% trans "toggle mark as read" %}" class="tool {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "toggle mark as read" %}</span></a></li>
<li><a title="{% trans "toggle favorite" %}" class="tool {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
<li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
<li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link"><span>{{ entry.url | e | getDomain }}</span></a></li>
<li><a target="_blank" title="{% trans "estimated reading time:" %} {{ entry.content| getReadingTime }} min" class="reading-time"><span>{{ entry.content| getReadingTime }} min</span></a></li>
</ul>
<p>{{ entry.content|striptags|slice(0, 300) }}...</p>
</div>
{% endfor %}
{% endif %}
{{ block('pager') }}
{% endblock %}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

BIN
themes/default/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

View File

@ -0,0 +1,28 @@
{% extends "layout.twig" %}
{% block title %}{% trans "installation" %}{% endblock %}
{% block content %}
<form method="post" action="?install" name="loginform">
<fieldset class="w500p center">
<h2 class="mbs txtcenter">{% trans "install your poche" %}</h2>
<p>
{% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation on poche website</a>." %}
</p>
<p class="row">
<label class="col w150p" for="login">{% trans "Login" %}</label>
<input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus />
</p>
<p class="row">
<label class="col w150p" for="password">{% trans "Password" %}</label>
<input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2">
</p>
<p class="row">
<label class="col w150p" for="password_repeat">{% trans "Repeat your password" %}</label>
<input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="Password" tabindex="3">
</p>
<p class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Install" %}</button>
</p>
</fieldset>
<input type="hidden" name="token" value="{{ token }}">
</form>
{% endblock %}

View File

@ -0,0 +1,6 @@
$(document).ready(function() {
current_url = window.location.href
if (current_url.match("&closewin=true")) {
window.close();
}
});

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

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,25 @@
function supportsLocalStorage() {
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
return false;
}
}
function savePercent(id, percent) {
if (!supportsLocalStorage()) { return false; }
localStorage["poche.article." + id + ".percent"] = percent;
return true;
}
function retrievePercent(id) {
if (!supportsLocalStorage()) { return false; }
var bheight = $(document).height();
var percent = localStorage["poche.article." + id + ".percent"];
var scroll = bheight * percent;
$('html,body').animate({scrollTop: scroll}, 'fast');
return true;
}

View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="{{ lang }}"><![endif]-->
<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="{{ lang }}"><![endif]-->
<!--[if IE 8]><html class="no-js ie8 ie678" lang="{{ lang }}"><![endif]-->
<!--[if gt IE 8]><html class="no-js" lang="{{ lang }}"><![endif]-->
<html lang="{{ lang }}">
<head>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<!--[if IE]>
<meta http-equiv="X-UA-Compatible" content="IE=10">
<![endif]-->
<title>{% block title %}{% endblock %} - poche</title>
{% include '_head.twig' %}
{% include '_bookmarklet.twig' %}
</head>
<body>
{% include '_top.twig' %}
<div id="main">
{% block menu %}{% endblock %}
{% block precontent %}{% endblock %}
{% block messages %}
{% include '_messages.twig' %}
{% endblock %}
<div id="content" class="w600p center">
{% block content %}{% endblock %}
</div>
</div>
{% include '_footer.twig' %}
</body>
</html>

34
themes/default/login.twig Normal file
View File

@ -0,0 +1,34 @@
{% extends "layout.twig" %}
{% block title %}{% trans "login to your poche" %}{% endblock %}
{% block content %}
{% if http_auth == 0 %}
<form method="post" action="?login" name="loginform">
<fieldset class="w500p center">
<h2 class="mbs txtcenter">{% trans "login to your poche" %}</h2>
{% if constant('MODE_DEMO') == 1 %}<p>{% trans "you are in demo mode, some features may be disabled." %}</p>{% endif %}
<div class="row">
<label class="col w150p" for="login">{% trans "Login" %}</label>
<input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
</div>
<div class="row">
<label class="col w150p" for="password">{% trans "Password" %}</label>
<input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2" {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
</div>
<div class="row">
<label class="col w150p" for="longlastingsession">{% trans "Stay signed in" %}</label>
<div class="col">
<input type="checkbox" id="longlastingsession" name="longlastingsession" tabindex="3">
<small class="inbl">{% trans "(Do not check on public computers)" %}</small>
</div>
</div>
<div class="row mts txtcenter">
<button class="bouton" type="submit" tabindex="4">{% trans "Login" %}</button>
</div>
</fieldset>
<input type="hidden" name="returnurl" value="{{ referer }}">
<input type="hidden" name="token" value="{{ token }}">
</form>
{% endif %}
{% endblock %}

Some files were not shown because too many files have changed in this diff Show More