forked from wallabag/wallabag
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 76ee8a9ea5 |
@ -1,10 +0,0 @@
|
||||
{
|
||||
"extends": "airbnb-base",
|
||||
"parser": "babel-eslint",
|
||||
"env": {
|
||||
"browser": true
|
||||
},
|
||||
"rules": {
|
||||
"import/no-extraneous-dependencies": ["error", {"devDependencies": true, "optionalDependencies": true, "peerDependencies": true}]
|
||||
}
|
||||
}
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
@ -21,10 +21,8 @@
|
||||
/vendor/
|
||||
|
||||
# Assets and user uploads
|
||||
web/uploads/
|
||||
!web/bundles
|
||||
web/bundles/*
|
||||
!web/bundles/wallabagcore
|
||||
/web/bundles/
|
||||
/web/uploads/
|
||||
|
||||
# Build
|
||||
/app/build
|
||||
@ -43,10 +41,3 @@ docker/data/
|
||||
|
||||
# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release
|
||||
composer.lock
|
||||
|
||||
# assets stuff
|
||||
node_modules/
|
||||
bin
|
||||
app/Resources/build/
|
||||
!/src/Wallabag/CoreBundle/Resources/public
|
||||
/src/Wallabag/CoreBundle/Resources/public/*
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "stylelint-config-standard"
|
||||
}
|
||||
50
.travis.yml
50
.travis.yml
@ -1,9 +1,5 @@
|
||||
language: php
|
||||
|
||||
services:
|
||||
- rabbitmq
|
||||
- redis
|
||||
|
||||
# faster builds on docker-container setup
|
||||
sudo: false
|
||||
|
||||
@ -19,9 +15,6 @@ cache:
|
||||
directories:
|
||||
- vendor
|
||||
- $HOME/.composer/cache
|
||||
- node_modules
|
||||
- $HOME/.cache/bower
|
||||
- $HOME/.npm
|
||||
|
||||
php:
|
||||
- 5.5
|
||||
@ -30,9 +23,6 @@ php:
|
||||
- 7.1
|
||||
- nightly
|
||||
|
||||
node_js:
|
||||
- "5"
|
||||
|
||||
env:
|
||||
- DB=mysql
|
||||
- DB=pgsql
|
||||
@ -41,10 +31,29 @@ env:
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
# driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
|
||||
- php: hhvm-3.12
|
||||
sudo: required
|
||||
dist: trusty
|
||||
group: edge
|
||||
env: DB=mysql
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- mysql-server-5.6
|
||||
- mysql-client-core-5.6
|
||||
- mysql-client-5.6
|
||||
services:
|
||||
- mysql
|
||||
- php: hhvm-3.12
|
||||
sudo: required
|
||||
dist: trusty
|
||||
group: edge
|
||||
env: DB=sqlite
|
||||
- php: 7.0
|
||||
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run ASSETS=build DB=sqlite
|
||||
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite
|
||||
allow_failures:
|
||||
- php: 7.1
|
||||
- php: hhvm-3.12
|
||||
- php: nightly
|
||||
|
||||
# exclude v1 branches
|
||||
@ -57,22 +66,15 @@ before_script:
|
||||
- if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
|
||||
# xdebug isn't enable for PHP 7.1
|
||||
- if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
|
||||
- if [[ $PHP = 5.5 ]]; then composer require "phpunit/phpunit:4.*" --no-update; fi;
|
||||
- composer self-update --no-progress
|
||||
- if [[ $DB = pgsql ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
|
||||
|
||||
install:
|
||||
- if [[ $ASSETS = build ]]; then source ~/.nvm/nvm.sh && nvm install 5.0; fi;
|
||||
- if [[ $ASSETS = build ]]; then npm install -g npm@latest; fi;
|
||||
- if [[ $ASSETS = build ]]; then npm install; fi;
|
||||
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
|
||||
|
||||
before_install:
|
||||
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
|
||||
|
||||
script:
|
||||
- travis_wait bash composer update --no-interaction --no-progress
|
||||
- travis_wait composer update --no-interaction --no-progress
|
||||
- ant prepare-$DB
|
||||
- if [[ $VALIDATE_TRANSLATION_FILE = '' ]]; then phpunit -v ; fi;
|
||||
- if [[ $CS_FIXER = run ]]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
|
||||
- if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;
|
||||
- if [[ $ASSETS = build ]]; then ./node_modules/grunt-cli/bin/grunt tests; fi;
|
||||
- phpunit -v
|
||||
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
|
||||
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;
|
||||
|
||||
86
CHANGELOG.md
86
CHANGELOG.md
@ -2,92 +2,6 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [2.1.1] - 2016-10-04
|
||||
|
||||
### Changed
|
||||
|
||||
- [#2340](https://github.com/wallabag/wallabag/pull/2340) Updated german translation (Strubbl)
|
||||
- [#2341](https://github.com/wallabag/wallabag/pull/2341) Updated polish translation (Mateusz Rumiński)
|
||||
- [#2354](https://github.com/wallabag/wallabag/pull/2354) Add php-bcmath extension to requirements (Godinez Pablo)
|
||||
|
||||
### Fixed
|
||||
|
||||
- [#2338](https://github.com/wallabag/wallabag/pull/2338) Fixed 2.1 installation (Jeremy Benoist)
|
||||
- [#2345](https://github.com/wallabag/wallabag/issues/2345) Fixed 2.0.x update (Jeremy Benoist)
|
||||
- [#2353](https://github.com/wallabag/wallabag/pull/2353) Fixed assets problem (Thomas Citharel)
|
||||
- [#2359](https://github.com/wallabag/wallabag/pull/2359) Create config even if user is disabled (Jeremy Benoist)
|
||||
|
||||
## [2.1.0] - 2016-10-03
|
||||
|
||||
### Added
|
||||
|
||||
- [#1990](https://github.com/wallabag/wallabag/pull/1990) Added command line import for wallabag files (Nicolas Lœuillet)
|
||||
- [#2142](https://github.com/wallabag/wallabag/pull/2142) Manage assets through npm (Thomas Citharel)
|
||||
- [#2174](https://github.com/wallabag/wallabag/pull/2174) Added filter for tags on API (Thomas Citharel)
|
||||
- [#2176](https://github.com/wallabag/wallabag/pull/2176) Added `since` parameter in API (Thomas Citharel)
|
||||
- [#2170](https://github.com/wallabag/wallabag/pull/2170), [#2183](https://github.com/wallabag/wallabag/pull/2183) Added tags on entries view (Thomas Citharel)
|
||||
- [#2186](https://github.com/wallabag/wallabag/pull/2186) Added option to disable registration (Thomas Citharel)
|
||||
- [#1904](https://github.com/wallabag/wallabag/pull/1904) Share entry with a public URL (Nicolas Lœuillet)
|
||||
- [#2243](https://github.com/wallabag/wallabag/pull/2243) Added list of untagged articles (Nicolas Lœuillet)
|
||||
- [#2255](https://github.com/wallabag/wallabag/pull/2255) Added Readability import (Jeremy Benoist)
|
||||
- [#2002](https://github.com/wallabag/wallabag/pull/2002) Added articles counter in sidebar (Nicolas Lœuillet)
|
||||
- [#2275](https://github.com/wallabag/wallabag/pull/2275) Added date from entries in export (Jeremy Benoist)
|
||||
- [#2266](https://github.com/wallabag/wallabag/pull/2266) Added tags counter in sidebar (Nicolas Lœuillet)
|
||||
- [#1941](https://github.com/wallabag/wallabag/pull/1941) Added asynchronous import (Jeremy Benoist, Nicolas Lœuillet)
|
||||
- [#2192](https://github.com/wallabag/wallabag/pull/2192) Added Firefox / Chrome bookmarks import (Thomas Citharel)
|
||||
- [#2310](https://github.com/wallabag/wallabag/pull/2310) Added Instapaper import (Jeremy Benoist)
|
||||
- [#2322](https://github.com/wallabag/wallabag/pull/2322) Added customized errors templates (Jeremy Benoist)
|
||||
- [#2323](https://github.com/wallabag/wallabag/pull/2323) Added simple stats in footer (Jeremy Benoist)
|
||||
- [#2324](https://github.com/wallabag/wallabag/pull/2324) Added ability to edit a tagging rule (Jeremy Benoist)
|
||||
- [#2325](https://github.com/wallabag/wallabag/pull/2325) Added an `exists` endpoint in API (Jeremy Benoist)
|
||||
|
||||
### Changed
|
||||
|
||||
- [#2170](https://github.com/wallabag/wallabag/pull/2170) Entry titles are now smaller on entry view (Thomas Citharel)
|
||||
- [#2245](https://github.com/wallabag/wallabag/pull/2245) Changed where page title is displayed (Nicolas Lœuillet)
|
||||
- [#2274](https://github.com/wallabag/wallabag/pull/2274) Re use JsonResponse in API (Jeremy Benoist)
|
||||
- [#2257](https://github.com/wallabag/wallabag/pull/2257) Use created date for imported content (Jeremy Benoist)
|
||||
- [#2326](https://github.com/wallabag/wallabag/pull/2326) Quickstart layout (Nicolas Lœuillet)
|
||||
|
||||
### Fixed
|
||||
|
||||
- [#2328](https://github.com/wallabag/wallabag/pull/2328) Fixed duplicate URL with accents (Jeremy Benoist)
|
||||
- [#2319](https://github.com/wallabag/wallabag/pull/2319) Fixed `gd` extension missing in Dockerfile (Pascal Martin)
|
||||
- [#2313](https://github.com/wallabag/wallabag/pull/2313) Fixed long loading on Firefox (Nicolas Lœuillet)
|
||||
- [#2320](https://github.com/wallabag/wallabag/pull/2320) Fixed user config which wasn't created in some cases (Jeremy Benoist)
|
||||
- [#2301](https://github.com/wallabag/wallabag/pull/2301) Fixed feeds not syncing on android application (Thomas Citharel)
|
||||
- [#2308](https://github.com/wallabag/wallabag/pull/2308) Fixed duplicate tags on import (Jeremy Benoist)
|
||||
- [#2297](https://github.com/wallabag/wallabag/pull/2297) Fixed epub export with special characters in title (morhelluin)
|
||||
- [#2292](https://github.com/wallabag/wallabag/pull/2292) Fixed label for mark as read link in entry view (Nicolas Lœuillet)
|
||||
- [#2260](https://github.com/wallabag/wallabag/pull/2260) Fixed different font-size for labels in config screen (Nicolas Lœuillet)
|
||||
- [#2242](https://github.com/wallabag/wallabag/pull/2242) Fixed print / article views (Nicolas Lœuillet)
|
||||
- [#2328](https://github.com/wallabag/wallabag/pull/2328) Avoid duplicate url with accents (Jeremy Benoist)
|
||||
- [#2330](https://github.com/wallabag/wallabag/pull/2330) Remove error message when creating ePub versions (Paulino Michelazzo)
|
||||
- [#2331](https://github.com/wallabag/wallabag/pull/2331) Fix parameters in API links (Jeremy Benoist)
|
||||
|
||||
### Removed
|
||||
|
||||
- [#2318](https://github.com/wallabag/wallabag/pull/2318) Removed duplicated templates files (Nicolas Lœuillet)
|
||||
- [#2287](https://github.com/wallabag/wallabag/pull/2287) Useless area in footer for material theme (Nicolas Lœuillet)
|
||||
|
||||
## [2.0.8] - 2016-09-07
|
||||
|
||||
### Added
|
||||
|
||||
- [#2262](https://github.com/wallabag/wallabag/pull/2262) Added a check for the database connection during installation (Jeremy Benoist)
|
||||
- [#2235](https://github.com/wallabag/wallabag/pull/2235) Added configuration for german documentation website, [available here](http://doc.wallabag.org/de/latest/) (Nicolas Lœuillet)
|
||||
|
||||
### Changed
|
||||
|
||||
- [graby](https://github.com/j0k3r/graby/releases/tag/1.4.3) Update Graby version, which now handles ZIP files (Jeremy Benoist)
|
||||
- [#2230](https://github.com/wallabag/wallabag/pull/2230) Changed title display in card view (Danilow Alexandr)
|
||||
|
||||
### Fixed
|
||||
|
||||
- [#2234](https://github.com/wallabag/wallabag/pull/2234) Fixed mailto link in documentation (Christian Studer)
|
||||
- [#2241](https://github.com/wallabag/wallabag/pull/2241) Fixed the height of the "Add new article" field in Chrome (Danilow Alexandr)
|
||||
- [#2238](https://github.com/wallabag/wallabag/pull/2238) Fixed login page in Qupzilla (Danilow Alexandr)
|
||||
|
||||
## [2.0.7] - 2016-08-22
|
||||
|
||||
### Added
|
||||
|
||||
239
Gruntfile.js
239
Gruntfile.js
@ -1,239 +0,0 @@
|
||||
module.exports = function (grunt) {
|
||||
require('load-grunt-tasks')(grunt);
|
||||
|
||||
grunt.initConfig({
|
||||
appDir: 'app/Resources/static',
|
||||
buildDir: 'app/Resources/build',
|
||||
modulesDir: 'node_modules',
|
||||
releaseDir: 'web/bundles/wallabagcore',
|
||||
|
||||
postcss: {
|
||||
material: {
|
||||
options: {
|
||||
map: {
|
||||
inline: false,
|
||||
},
|
||||
|
||||
processors: [
|
||||
require('pixrem')(),
|
||||
require('autoprefixer')({ browsers: 'last 2 versions' }),
|
||||
require('cssnano')(),
|
||||
],
|
||||
},
|
||||
src: '<%= buildDir %>/material.css',
|
||||
dest: '<%= releaseDir %>/themes/material/css/style.min.css',
|
||||
},
|
||||
baggy: {
|
||||
options: {
|
||||
map: {
|
||||
inline: false,
|
||||
},
|
||||
|
||||
processors: [
|
||||
require('pixrem')(),
|
||||
require('autoprefixer')({ browsers: 'last 2 versions' }),
|
||||
require('cssnano')(),
|
||||
],
|
||||
},
|
||||
src: '<%= buildDir %>/baggy.css',
|
||||
dest: '<%= releaseDir %>/themes/baggy/css/style.min.css',
|
||||
},
|
||||
},
|
||||
concat: {
|
||||
options: {
|
||||
separator: ';',
|
||||
},
|
||||
cssMaterial: {
|
||||
src: [
|
||||
'node_modules/materialize-css/bin/materialize.css',
|
||||
'<%= appDir %>/themes/material/css/*.css',
|
||||
],
|
||||
dest: '<%= buildDir %>/material.css',
|
||||
},
|
||||
cssBaggy: {
|
||||
src: [
|
||||
'<%= appDir %>/themes/baggy/css/*.css',
|
||||
],
|
||||
dest: '<%= buildDir %>/baggy.css',
|
||||
},
|
||||
},
|
||||
browserify: {
|
||||
dist: {
|
||||
files: {
|
||||
'<%= buildDir %>/material.browser.js': ['<%= appDir %>/themes/material/js/init.js'],
|
||||
'<%= buildDir %>/baggy.browser.js': ['<%= appDir %>/themes/baggy/js/init.js']
|
||||
}
|
||||
},
|
||||
options: {
|
||||
sourceType: "module",
|
||||
transform: [
|
||||
["babelify", {
|
||||
presets: ["es2015"]
|
||||
}], ["browserify-shim", {
|
||||
"jquery": {
|
||||
"exports": "$"
|
||||
},
|
||||
"materialize": "materialize",
|
||||
"jquery-ui": {
|
||||
"depends": "jquery",
|
||||
"exports": null
|
||||
}
|
||||
}]
|
||||
],
|
||||
browserifyOptions: {
|
||||
browser: {
|
||||
"jQuery": "./node_modules/jquery/dist/jquery.js",
|
||||
"jquery.tinydot": "./node_modules/jquery.tinydot/src/jquery.tinydot.js",
|
||||
"jquery.ui": "./node_modules/jquery-ui-browserify/dist/jquery-ui.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
uglify: {
|
||||
material: {
|
||||
files: {
|
||||
'<%= releaseDir %>/themes/material/js/material.min.js':
|
||||
['<%= buildDir %>/material.browser.js'],
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
},
|
||||
},
|
||||
baggy: {
|
||||
files: {
|
||||
'<%= releaseDir %>/themes/baggy/js/baggy.min.js':
|
||||
['<%= buildDir %>/baggy.browser.js'],
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
copy: {
|
||||
pickerjs: {
|
||||
expand: true,
|
||||
cwd: '<%= modulesDir %>/pickadate/lib',
|
||||
src: 'picker.js',
|
||||
dest: '<%= buildDir %>',
|
||||
},
|
||||
annotator: {
|
||||
expand: true,
|
||||
cwd: '<%= modulesDir %>/annotator/pkg',
|
||||
src: 'annotator.min.js',
|
||||
dest: '<%= buildDir %>/themes/_global/js/',
|
||||
},
|
||||
baggyfonts: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
|
||||
src: 'IcoMoon-Free.ttf',
|
||||
dest: '<%= releaseDir %>/themes/baggy/fonts/',
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
cwd: '<%= modulesDir %>/ptsans-npm-webfont/fonts',
|
||||
src: 'ptsansbold.woff',
|
||||
dest: '<%= releaseDir %>/themes/baggy/fonts/',
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
|
||||
src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
|
||||
dest: '<%= releaseDir %>/themes/baggy/fonts/',
|
||||
},
|
||||
],
|
||||
},
|
||||
materialfonts: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
overwrite: true,
|
||||
cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
|
||||
src: 'IcoMoon-Free.ttf',
|
||||
dest: '<%= releaseDir %>/themes/material/fonts',
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
overwrite: true,
|
||||
cwd: '<%= modulesDir %>/roboto-fontface/fonts/Roboto',
|
||||
src: '*',
|
||||
dest: '<%= releaseDir %>/themes/material/font/roboto',
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
overwrite: true,
|
||||
cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
|
||||
src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
|
||||
dest: '<%= releaseDir %>/themes/material/fonts/',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
symlink: {
|
||||
pics: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
overwrite: true,
|
||||
cwd: '<%= appDir %>/themes/_global/',
|
||||
src: 'img',
|
||||
dest: '<%= releaseDir %>/themes/_global/',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
clean: {
|
||||
css: {
|
||||
src: ['<%= buildDir %>/**/*.css'],
|
||||
},
|
||||
js: {
|
||||
src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'],
|
||||
},
|
||||
all: {
|
||||
src: ['./<%= buildDir %>'],
|
||||
},
|
||||
release: {
|
||||
src: ['./<%= releaseDir %>/*'],
|
||||
}
|
||||
},
|
||||
eslint: {
|
||||
target: ['<%= appDir %>/themes/material/js/init.js', '<%= appDir %>/themes/baggy/js/init.js']
|
||||
},
|
||||
stylelint: {
|
||||
target: ['<%= appDir %>/themes/material/css/*.css', '<%= appDir %>/themes/baggy/css/*.css']
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
grunt.registerTask(
|
||||
'fonts',
|
||||
'Install fonts',
|
||||
['copy:baggyfonts', 'copy:materialfonts']
|
||||
);
|
||||
|
||||
grunt.registerTask(
|
||||
'js',
|
||||
'Build and install js files',
|
||||
['clean:js', 'copy:pickerjs', 'browserify', 'uglify']
|
||||
);
|
||||
|
||||
grunt.registerTask(
|
||||
'default',
|
||||
'Build and install everything',
|
||||
['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'copy', 'symlink']
|
||||
);
|
||||
|
||||
grunt.registerTask(
|
||||
'css',
|
||||
'Compiles the stylesheets.',
|
||||
['clean:css', 'concat:cssMaterial', 'concat:cssBaggy', 'postcss']
|
||||
);
|
||||
|
||||
grunt.registerTask(
|
||||
'tests',
|
||||
'Test css and js style conformity',
|
||||
['eslint', 'stylelint', 'default']
|
||||
)
|
||||
};
|
||||
@ -10,13 +10,13 @@ More informations on our website: [wallabag.org](https://wallabag.org)
|
||||
|
||||
# Install wallabag
|
||||
|
||||
If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that). Read [our documentation](http://doc.wallabag.org) to have more information about installation.
|
||||
If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that).
|
||||
Then you can install wallabag by executing the following commands:
|
||||
|
||||
```
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.1.1
|
||||
git checkout 2.0.7
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
php bin/console server:run --env=prod
|
||||
|
||||
@ -13,6 +13,7 @@ class AppKernel extends Kernel
|
||||
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
||||
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
||||
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
|
||||
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
|
||||
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
||||
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
||||
new FOS\RestBundle\FOSRestBundle(),
|
||||
@ -38,7 +39,6 @@ class AppKernel extends Kernel
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
|
||||
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
|
||||
];
|
||||
|
||||
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
class Version20160410190541 extends AbstractMigration implements ContainerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
private $container;
|
||||
|
||||
public function setContainer(ContainerInterface $container = null)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
private function getTable($tableName)
|
||||
{
|
||||
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function up(Schema $schema)
|
||||
{
|
||||
$this->addSql('ALTER TABLE `'.$this->getTable('entry').'` ADD `uuid` LONGTEXT DEFAULT NULL');
|
||||
$this->addSql("INSERT INTO `".$this->getTable('craue_config_setting')."` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry')");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function down(Schema $schema)
|
||||
{
|
||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
|
||||
|
||||
$this->addSql('ALTER TABLE `'.$this->getTable('entry').'` DROP `uuid`');
|
||||
$this->addSql("DELETE FROM `".$this->getTable('craue_config_setting')."` WHERE `name` = 'share_public'");
|
||||
}
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
class Version20160812120952 extends AbstractMigration implements ContainerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
private $container;
|
||||
|
||||
public function setContainer(ContainerInterface $container = null)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
private function getTable($tableName)
|
||||
{
|
||||
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function up(Schema $schema)
|
||||
{
|
||||
if ($this->connection->getDatabasePlatform()->getName() == 'sqlite') {
|
||||
$this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext DEFAULT NULL');
|
||||
} else {
|
||||
$this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext COLLATE \'utf8_unicode_ci\' DEFAULT NULL');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function down(Schema $schema)
|
||||
{
|
||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||
|
||||
$this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' DROP COLUMN name');
|
||||
}
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
class Version20160911214952 extends AbstractMigration implements ContainerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
private $container;
|
||||
|
||||
public function setContainer(ContainerInterface $container = null)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
private function getTable($tableName)
|
||||
{
|
||||
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function up(Schema $schema)
|
||||
{
|
||||
$this->addSql('INSERT INTO `'.$this->getTable('craue_config_setting').'` (`name`, `value`, `section`) VALUES (\'import_with_redis\', \'0\', \'import\')');
|
||||
$this->addSql('INSERT INTO `'.$this->getTable('craue_config_setting').'` (`name`, `value`, `section`) VALUES (\'import_with_rabbitmq\', \'0\', \'import\')');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function down(Schema $schema)
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
class Version20160916201049 extends AbstractMigration implements ContainerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var ContainerInterface
|
||||
*/
|
||||
private $container;
|
||||
|
||||
public function setContainer(ContainerInterface $container = null)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
private function getTable($tableName)
|
||||
{
|
||||
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function up(Schema $schema)
|
||||
{
|
||||
$this->addSql('ALTER TABLE '.$this->getTable('config').' ADD pocket_consumer_key VARCHAR(255) DEFAULT NULL');
|
||||
$this->addSql("DELETE FROM `".$this->getTable('craue_config_setting')."` WHERE `name` = 'pocket_consumer_key';");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
*/
|
||||
public function down(Schema $schema)
|
||||
{
|
||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||
|
||||
$this->addSql('ALTER TABLE `'.$this->getTable('config').'` DROP pocket_consumer_key');
|
||||
$this->addSql("INSERT INTO `".$this->getTable('craue_config_setting')."` (`name`, `value`, `section`) VALUES ('pocket_consumer_key', NULL, 'import')");
|
||||
}
|
||||
}
|
||||
@ -8,8 +8,7 @@ export_csv: Aktiver eksport til CSV
|
||||
export_json: Aktiver eksport til JSON
|
||||
export_txt: Aktiver eksport til TXT
|
||||
export_xml: Aktiver eksport til XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Brugers nøgle til Pocket for at importere materialer (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli-URL, hvis tjenesten er aktiv
|
||||
share_diaspora: Aktiver deling til Diaspora
|
||||
share_mail: Aktiver deling med email
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID for din side hos Piwik
|
||||
piwik_enabled: Aktiver Piwik
|
||||
demo_mode_enabled: "Aktiver demo-indstilling? (anvendes kun til wallabags offentlige demo)"
|
||||
demo_mode_username: "Demobruger"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: CSV-Export aktivieren
|
||||
export_json: JSON-Export aktivieren
|
||||
export_txt: TXT-Export aktivieren
|
||||
export_xml: XML-Export aktivieren
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Consumer-Key für Pocket, um Inhalte zu importieren (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli-URL, sofern der Service aktiviert ist
|
||||
share_diaspora: Teilen zu Diaspora aktiveren
|
||||
share_mail: Teilen via E-Mail aktiveren
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID deiner Webseite in Piwik
|
||||
piwik_enabled: Piwik aktivieren
|
||||
demo_mode_enabled: "Test-Modus aktivieren? (nur für die öffentliche wallabag-Demo genutzt)"
|
||||
demo_mode_username: "Test-Benutzer"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Enable CSV export
|
||||
export_json: Enable JSON export
|
||||
export_txt: Enable TXT export
|
||||
export_xml: Enable XML export
|
||||
import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, if the service is enabled
|
||||
share_diaspora: Enable share to Diaspora
|
||||
share_mail: Enable share by email
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID of your website in Piwik
|
||||
piwik_enabled: Enable Piwik
|
||||
demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
demo_mode_username: "Demo user"
|
||||
share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Activar exportación a CSV
|
||||
export_json: Activar exportación a JSON
|
||||
export_txt: Activar exportación a TXT
|
||||
export_xml: Activar exportación a XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, si el servicio está activado
|
||||
share_diaspora: Activar compartir con Diaspora
|
||||
share_mail: Activar compartir con email
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID de tu website de Piwik
|
||||
piwik_enabled: Activar Piwik
|
||||
demo_mode_enabled: "Activar modo demo (sólo usado para la demo de wallabag)"
|
||||
demo_mode_username: "Nombre de usuario demo"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: فعالسازی برونسپاری به CSV
|
||||
export_json: فعالسازی برونسپاری به JSON
|
||||
export_txt: فعالسازی برونسپاری به TXT
|
||||
export_xml: فعالسازی برونسپاری به XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: کلید کاربری Pocket برای درونریزی مطالب (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: نشانی Shaarli، اگر فعال بود
|
||||
share_diaspora: فعالسازی همرسانی به Diaspora
|
||||
share_mail: فعالسازی همرسانی با ایمیل
|
||||
@ -23,9 +22,3 @@ export: "برونسپاری"
|
||||
import: "درونریزی"
|
||||
misc: "غیره"
|
||||
modify_settings: "اعمال"
|
||||
# piwik_host: Host of your website in Piwik
|
||||
# piwik_site_id: ID of your website in Piwik
|
||||
# piwik_enabled: Enable Piwik
|
||||
# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
# demo_mode_username: "Demo user"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Activer l'export CSV
|
||||
export_json: Activer l'export JSON
|
||||
export_txt: Activer l'export TXT
|
||||
export_xml: Activer l'export XML
|
||||
import_with_rabbitmq: Activer RabbitMQ pour gérer les imports de façon asynchrone
|
||||
import_with_redis: Activer Redis pour gérer les imports de façon asynchrone
|
||||
pocket_consumer_key: Clé d'authentification Pocket pour importer les données (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: URL de Shaarli, si le service Shaarli est activé
|
||||
share_diaspora: Activer le partage vers Diaspora
|
||||
share_mail: Activer le partage par email
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID de votre site dans Piwik
|
||||
piwik_enabled: Activer Piwik
|
||||
demo_mode_enabled: "Activer le mode démo ? (utiliser uniquement pour la démo publique de wallabag)"
|
||||
demo_mode_username: "Utilisateur de la démo"
|
||||
share_public: Autoriser une URL publique pour les articles
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Abilita esportazione CSV
|
||||
export_json: Abilita esportazione JSON
|
||||
export_txt: Abilita esportazione TXT
|
||||
export_xml: Abilita esportazione XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, se il servizio è abilitato
|
||||
share_diaspora: Abilita la condivisione con Diaspora
|
||||
share_mail: Abilita la condivisione per email
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID del tuo sito in Piwik
|
||||
piwik_enabled: Abilita Piwik
|
||||
demo_mode_enabled: "Abilita modalità demo ? (usato solo per la demo pubblica di wallabag)"
|
||||
demo_mode_username: "Utente Demo"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Activar l'expòrt CSV
|
||||
export_json: Activar l'expòrt JSON
|
||||
export_txt: Activar l'expòrt TXT
|
||||
export_xml: Activar l'expòrt XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Clau d'autentificacion Pocket per importar las donadas (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
|
||||
share_diaspora: Activar lo partatge cap a Diaspora
|
||||
share_mail: Activar lo partatge per corrièl
|
||||
@ -28,4 +27,3 @@ piwik_site_id: ID de vòstre site dins Piwik
|
||||
piwik_enabled: Activar Piwik
|
||||
demo_mode_enabled: "Activar lo mode demostracion ? (utilizar solament per la demostracion publica de wallabag)"
|
||||
demo_mode_username: "Utilizaire de la demostracion"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Włącz eksport do CSV
|
||||
export_json: Włącz eksport do JSON
|
||||
export_txt: Włącz eksport do TXT
|
||||
export_xml: Włącz eksport do XML
|
||||
import_with_rabbitmq: Włącz RabbitMQ dla asynchronicznego importu danych
|
||||
import_with_redis: Włącz Redis dla asynchronicznego importu danych
|
||||
pocket_consumer_key: Klucz klienta Pocket do importu zawartości (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona
|
||||
share_diaspora: Włącz udostępnianie dla Diaspora
|
||||
share_mail: Włącz udostępnianie przez email
|
||||
@ -23,9 +22,3 @@ export: "eksport"
|
||||
import: "import"
|
||||
misc: "różne"
|
||||
modify_settings: "zatwierdz"
|
||||
piwik_host: Host twojej strony Piwik
|
||||
piwik_site_id: ID twojej strony Piwik
|
||||
piwik_enabled: Włacz Piwik
|
||||
demo_mode_enabled: "Włacz tryb demo? (używany wyłącznie dla publicznej demonstracji Wallabag)"
|
||||
demo_mode_username: "Użytkownik Demonstracyjny"
|
||||
share_public: Zezwalaj na publiczny adres url dla wpisow
|
||||
|
||||
@ -8,8 +8,7 @@ export_csv: Permite exportare CSV
|
||||
export_json: Permite exportare JSON
|
||||
export_txt: Permite exportare TXT
|
||||
export_xml: Permite exportare XML
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
pocket_consumer_key: Cheie consumator pentru importarea contentului din Pocket (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, dacă serviciul este permis
|
||||
share_diaspora: Permite share către Diaspora
|
||||
share_mail: Permite share prin email
|
||||
@ -23,9 +22,3 @@ export: "exportă"
|
||||
import: "importă"
|
||||
misc: "diverse"
|
||||
modify_settings: "aplică"
|
||||
# piwik_host: Host of your website in Piwik
|
||||
# piwik_site_id: ID of your website in Piwik
|
||||
# piwik_enabled: Enable Piwik
|
||||
# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
# demo_mode_username: "Demo user"
|
||||
# share_public: Allow public url for entries
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
# download_pictures: Download pictures on your server
|
||||
# carrot: Enable share to Carrot
|
||||
# diaspora_url: Diaspora URL, if the service is enabled
|
||||
# export_epub: Enable ePub export
|
||||
# export_mobi: Enable .mobi export
|
||||
# export_pdf: Enable PDF export
|
||||
# export_csv: Enable CSV export
|
||||
# export_json: Enable JSON export
|
||||
# export_txt: Enable TXT export
|
||||
# export_xml: Enable XML export
|
||||
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||
# import_with_redis: Enable Redis to import data asynchronously
|
||||
# shaarli_url: Shaarli URL, if the service is enabled
|
||||
# share_diaspora: Enable share to Diaspora
|
||||
# share_mail: Enable share by email
|
||||
# share_shaarli: Enable share to Shaarli
|
||||
# share_twitter: Enable share to Twitter
|
||||
# show_printlink: Display a link to print content
|
||||
# wallabag_support_url: Support URL for wallabag
|
||||
# wallabag_url: URL of *your* wallabag instance
|
||||
# entry: "article"
|
||||
# export: "export"
|
||||
# import: "import"
|
||||
# misc: "misc"
|
||||
# modify_settings: "apply"
|
||||
# piwik_host: Host of your website in Piwik
|
||||
# piwik_site_id: ID of your website in Piwik
|
||||
# piwik_enabled: Enable Piwik
|
||||
# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
# demo_mode_username: "Demo user"
|
||||
# share_public: Allow public url for entries
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.1 KiB |
@ -1,6 +0,0 @@
|
||||
|
||||
top['bookmarklet-url@wallabag.org'] =
|
||||
'<!DOCTYPE html><html><head><title>bag it!</title>' +
|
||||
'<link rel="icon" href="tpl/img/favicon.ico" />' +
|
||||
'</head><body><script>window.onload=function(){window.setTimeout' +
|
||||
'(function(){history.back();},250);};</script></body></html>';
|
||||
@ -1,50 +0,0 @@
|
||||
const $ = require('jquery');
|
||||
|
||||
function supportsLocalStorage() {
|
||||
try {
|
||||
return 'localStorage' in window && window.localStorage !== null;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function savePercent(id, percent) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
localStorage[`wallabag.article.${id}.percent`] = percent;
|
||||
return true;
|
||||
}
|
||||
|
||||
function retrievePercent(id) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
|
||||
const bheight = $(document).height();
|
||||
const percent = localStorage[`wallabag.article.${id}.percent`];
|
||||
const scroll = bheight * percent;
|
||||
|
||||
$('html,body').animate({ scrollTop: scroll }, 'fast');
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function initFilters() {
|
||||
// no display if filters not available
|
||||
if ($('div').is('#filters')) {
|
||||
$('#button_filters').show();
|
||||
$('.button-collapse-right').sideNav({ edge: 'right' });
|
||||
$('#clear_form_filters').on('click', () => {
|
||||
$('#filters input').val('');
|
||||
$('#filters :checked').removeAttr('checked');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function initExport() {
|
||||
// no display if export not available
|
||||
if ($('div').is('#export')) {
|
||||
$('#button_export').show();
|
||||
$('.button-collapse-right').sideNav({ edge: 'right' });
|
||||
}
|
||||
}
|
||||
|
||||
export { savePercent, retrievePercent, initFilters, initExport };
|
||||
@ -1,6 +0,0 @@
|
||||
@font-face {
|
||||
font-family: "PT Sans";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("PT Sans Bold"), local("PTSans-Bold"), url("../fonts/ptsansbold.woff") format("woff");
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
.messages.error.install {
|
||||
border: 1px solid #c42608;
|
||||
color: #c00 !important;
|
||||
background: #fff0ef;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.messages.notice.install {
|
||||
border: 1px solid #ebcd41;
|
||||
color: #000;
|
||||
background: #fffcd3;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.messages.success.install {
|
||||
border: 1px solid #6dc70c;
|
||||
background: #e0fbcc !important;
|
||||
text-align: left;
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
@media print {
|
||||
/* ### Layout ### */
|
||||
|
||||
body {
|
||||
font-family: Serif;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
/* ### Content ### */
|
||||
|
||||
/* Hide useless blocks */
|
||||
body > header,
|
||||
#article_toolbar,
|
||||
#links,
|
||||
#sort,
|
||||
body > footer,
|
||||
.top_link,
|
||||
div.tools,
|
||||
header div,
|
||||
.messages,
|
||||
.entrie + .results,
|
||||
#article .mbm a,
|
||||
#article-informations {
|
||||
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;
|
||||
}
|
||||
|
||||
#main {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-left: 0;
|
||||
padding-right: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
#article {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 307 KiB |
Binary file not shown.
Binary file not shown.
@ -1,8 +0,0 @@
|
||||
function split(val) {
|
||||
return val.split(/,\s*/);
|
||||
}
|
||||
function extractLast(term) {
|
||||
return split(term).pop();
|
||||
}
|
||||
|
||||
export { split, extractLast };
|
||||
@ -1,314 +0,0 @@
|
||||
import { savePercent, retrievePercent } from '../../_global/js/tools';
|
||||
import { toggleSaveLinkForm } from './uiTools';
|
||||
|
||||
const $ = global.jquery = require('jquery');
|
||||
require('jquery.cookie');
|
||||
require('jquery-ui-browserify');
|
||||
const annotator = require('annotator');
|
||||
|
||||
|
||||
$.fn.ready(() => {
|
||||
const $listmode = $('#listmode');
|
||||
const $listentries = $('#list-entries');
|
||||
|
||||
/* ==========================================================================
|
||||
Menu
|
||||
========================================================================== */
|
||||
|
||||
$('#menu').click(() => {
|
||||
$('#links').toggleClass('menu--open');
|
||||
const content = $('#content');
|
||||
if (content.hasClass('opacity03')) {
|
||||
content.removeClass('opacity03');
|
||||
}
|
||||
});
|
||||
|
||||
/* ==========================================================================
|
||||
List mode or Table Mode
|
||||
========================================================================== */
|
||||
|
||||
$listmode.click(() => {
|
||||
if ($.cookie('listmode') === 1) {
|
||||
// Cookie
|
||||
$.removeCookie('listmode');
|
||||
|
||||
$listentries.removeClass('listmode');
|
||||
$listmode.removeClass('tablemode');
|
||||
$listmode.addClass('listmode');
|
||||
} else {
|
||||
// Cookie
|
||||
$.cookie('listmode', 1, { expires: 365 });
|
||||
|
||||
$listentries.addClass('listmode');
|
||||
$listmode.removeClass('listmode');
|
||||
$listmode.addClass('tablemode');
|
||||
}
|
||||
});
|
||||
|
||||
/* ==========================================================================
|
||||
Cookie listmode
|
||||
========================================================================== */
|
||||
|
||||
if ($.cookie('listmode') === 1) {
|
||||
$listentries.addClass('listmode');
|
||||
$listmode.removeClass('listmode');
|
||||
$listmode.addClass('tablemode');
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Add tag panel
|
||||
========================================================================== */
|
||||
|
||||
|
||||
$('#nav-btn-add-tag').on('click', () => {
|
||||
$('.nav-panel-add-tag').toggle(100);
|
||||
$('.nav-panel-menu').addClass('hidden');
|
||||
$('#tag_label').focus();
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* Filters & Export
|
||||
*/
|
||||
// no display if filters not available
|
||||
if ($('div').is('#filters')) {
|
||||
$('#button_filters').show();
|
||||
$('#clear_form_filters').on('click', () => {
|
||||
$('#filters input').val('');
|
||||
$('#filters :checked').removeAttr('checked');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Annotations & Remember position
|
||||
========================================================================== */
|
||||
|
||||
if ($('article').length) {
|
||||
const app = new annotator.App();
|
||||
|
||||
app.include(annotator.ui.main, {
|
||||
element: document.querySelector('article'),
|
||||
});
|
||||
|
||||
const x = JSON.parse($('#annotationroutes').html());
|
||||
app.include(annotator.storage.http, x);
|
||||
|
||||
app.start().then(() => {
|
||||
app.annotations.load({ entry: x.entryId });
|
||||
});
|
||||
|
||||
$(window).scroll(() => {
|
||||
const scrollTop = $(window).scrollTop();
|
||||
const docHeight = $(document).height();
|
||||
const scrollPercent = (scrollTop) / (docHeight);
|
||||
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
|
||||
savePercent(x.entryId, scrollPercentRounded);
|
||||
});
|
||||
|
||||
retrievePercent(x.entryId);
|
||||
|
||||
$(window).resize(() => {
|
||||
retrievePercent(x.entryId);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Close window after adding entry if popup
|
||||
*/
|
||||
const currentUrl = window.location.href;
|
||||
if (currentUrl.match('&closewin=true')) {
|
||||
window.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tags autocomplete
|
||||
*/
|
||||
/**
|
||||
* Not working on v2
|
||||
*
|
||||
|
||||
$('#value').bind('keydown', (event) => {
|
||||
if (event.keyCode === $.ui.keyCode.TAB && $(this).data('ui-autocomplete').menu.active) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}).autocomplete({
|
||||
source: function source(request, response) {
|
||||
$.getJSON('./?view=tags', {
|
||||
term: extractLast(request.term),
|
||||
//id: $(':hidden#entry_id').val()
|
||||
}, response);
|
||||
},
|
||||
search: function search() {
|
||||
// custom minLength
|
||||
const term = extractLast(this.value);
|
||||
return term.length >= 1;
|
||||
},
|
||||
focus: function focus() {
|
||||
// prevent value inserted on focus
|
||||
return false;
|
||||
},
|
||||
select: function select(event, ui) {
|
||||
const terms = split(this.value);
|
||||
// remove the current input
|
||||
terms.pop();
|
||||
// add the selected item
|
||||
terms.push(ui.item.value);
|
||||
// add placeholder to get the comma-and-space at the end
|
||||
terms.push('');
|
||||
this.value = terms.join(', ');
|
||||
return false;
|
||||
},
|
||||
});
|
||||
*/
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Close the message box when the user clicks the close icon
|
||||
//---------------------------------------------------------------------------
|
||||
$('a.closeMessage').on('click', () => {
|
||||
$(this).parents('div.messages').slideUp(300, () => { $(this).remove(); });
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#search-form').hide();
|
||||
$('#bagit-form').hide();
|
||||
$('#filters').hide();
|
||||
$('#download-form').hide();
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Toggle the 'Search' popup in the sidebar
|
||||
//---------------------------------------------------------------------------
|
||||
function toggleSearch() {
|
||||
$('#search-form').toggle();
|
||||
$('#search').toggleClass('current');
|
||||
$('#search').toggleClass('active-current');
|
||||
$('#search-arrow').toggleClass('arrow-down');
|
||||
if ($('#search').hasClass('current')) {
|
||||
$('#content').addClass('opacity03');
|
||||
} else {
|
||||
$('#content').removeClass('opacity03');
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Toggle the 'Filter' popup on entries list
|
||||
//---------------------------------------------------------------------------
|
||||
function toggleFilter() {
|
||||
$('#filters').toggle();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Toggle the 'Download' popup on entries list
|
||||
//---------------------------------------------------------------------------
|
||||
function toggleDownload() {
|
||||
$('#download-form').toggle();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Toggle the 'Save a Link' popup in the sidebar
|
||||
//---------------------------------------------------------------------------
|
||||
function toggleBagit() {
|
||||
$('#bagit-form').toggle();
|
||||
$('#bagit').toggleClass('current');
|
||||
$('#bagit').toggleClass('active-current');
|
||||
$('#bagit-arrow').toggleClass('arrow-down');
|
||||
if ($('#bagit').hasClass('current')) {
|
||||
$('#content').addClass('opacity03');
|
||||
} else {
|
||||
$('#content').removeClass('opacity03');
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Close all #links popups in the sidebar
|
||||
//---------------------------------------------------------------------------
|
||||
function closePopups() {
|
||||
$('#links .messages').hide();
|
||||
$('#links > li > a').removeClass('active-current');
|
||||
$('#links > li > a').removeClass('current');
|
||||
$('[id$=-arrow]').removeClass('arrow-down');
|
||||
$('#content').removeClass('opacity03');
|
||||
}
|
||||
|
||||
$('#search').click(() => {
|
||||
closePopups();
|
||||
toggleSearch();
|
||||
$('#searchfield').focus();
|
||||
});
|
||||
|
||||
$('.filter-btn').click(() => {
|
||||
closePopups();
|
||||
toggleFilter();
|
||||
});
|
||||
|
||||
$('.download-btn').click(() => {
|
||||
closePopups();
|
||||
toggleDownload();
|
||||
});
|
||||
|
||||
$('#bagit').click(() => {
|
||||
closePopups();
|
||||
toggleBagit();
|
||||
$('#plainurl').focus();
|
||||
});
|
||||
|
||||
$('#search-form-close').click(() => {
|
||||
toggleSearch();
|
||||
});
|
||||
|
||||
$('#filter-form-close').click(() => {
|
||||
toggleFilter();
|
||||
});
|
||||
|
||||
$('#download-form-close').click(() => {
|
||||
toggleDownload();
|
||||
});
|
||||
|
||||
$('#bagit-form-close').click(() => {
|
||||
toggleBagit();
|
||||
});
|
||||
|
||||
const $bagitFormForm = $('#bagit-form-form');
|
||||
|
||||
/* ==========================================================================
|
||||
bag it link and close button
|
||||
========================================================================== */
|
||||
|
||||
// send 'bag it link' form request via ajax
|
||||
$bagitFormForm.submit((event) => {
|
||||
$('body').css('cursor', 'wait');
|
||||
$('#add-link-result').empty();
|
||||
|
||||
$.ajax({
|
||||
type: $bagitFormForm.attr('method'),
|
||||
url: $bagitFormForm.attr('action'),
|
||||
data: $bagitFormForm.serialize(),
|
||||
success: function success() {
|
||||
$('#add-link-result').html('Done!');
|
||||
$('#plainurl').val('');
|
||||
$('#plainurl').blur('');
|
||||
$('body').css('cursor', 'auto');
|
||||
},
|
||||
error: function error() {
|
||||
$('#add-link-result').html('Failed!');
|
||||
$('body').css('cursor', 'auto');
|
||||
},
|
||||
});
|
||||
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
/* ==========================================================================
|
||||
Process all links inside an article
|
||||
========================================================================== */
|
||||
|
||||
$('article a[href^="http"]').after(
|
||||
() => `<a href="${$(this).attr('href')}" class="add-to-wallabag-link-after" ` +
|
||||
'alt="add to wallabag" title="add to wallabag"></a>'
|
||||
);
|
||||
|
||||
$('.add-to-wallabag-link-after').click((event) => {
|
||||
toggleSaveLinkForm($(this).attr('href'), event);
|
||||
event.preventDefault();
|
||||
});
|
||||
});
|
||||
@ -1,35 +0,0 @@
|
||||
const $ = require('jquery');
|
||||
|
||||
function toggleSaveLinkForm(url, event) {
|
||||
$('#add-link-result').empty();
|
||||
|
||||
const $bagit = $('#bagit');
|
||||
const $bagitForm = $('#bagit-form');
|
||||
|
||||
$bagit.toggleClass('active-current');
|
||||
|
||||
// only if bag-it link is not presented on page
|
||||
if ($bagit.length === 0) {
|
||||
if (event !== 'undefined' && event) {
|
||||
$bagitForm.css({ position: 'absolute', top: event.pageY, left: event.pageX - 200 });
|
||||
} else {
|
||||
$bagitForm.css({ position: 'relative', top: 'auto', left: 'auto' });
|
||||
}
|
||||
}
|
||||
|
||||
const searchForm = $('#search-form');
|
||||
const plainUrl = $('#plainurl');
|
||||
if (searchForm.length !== 0) {
|
||||
$('#search').removeClass('current');
|
||||
$('#search-arrow').removeClass('arrow-down');
|
||||
searchForm.hide();
|
||||
}
|
||||
$bagitForm.toggle();
|
||||
$('#content').toggleClass('opacity03');
|
||||
if (url !== 'undefined' && url) {
|
||||
plainUrl.val(url);
|
||||
}
|
||||
plainUrl.focus();
|
||||
}
|
||||
|
||||
export { toggleSaveLinkForm };
|
||||
@ -1,751 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Sommaire
|
||||
|
||||
0 = Common
|
||||
1 = Nav
|
||||
2 = Side-nav
|
||||
3 = Filters slider
|
||||
4 = Cards
|
||||
5 = Article
|
||||
6 = Media queries
|
||||
7 = Font
|
||||
8 = Others
|
||||
|
||||
========================================================================== */
|
||||
|
||||
/* ==========================================================================
|
||||
0 = Common
|
||||
========================================================================== */
|
||||
|
||||
@font-face {
|
||||
font-family: icomoon;
|
||||
src: url("../fonts/IcoMoon-Free.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Material Icons';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(../fonts/MaterialIcons-Regular.eot);
|
||||
|
||||
/* For IE6-8 */
|
||||
src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/MaterialIcons-Regular.woff) format("woff"), url(../fonts/MaterialIcons-Regular.ttf) format("truetype");
|
||||
}
|
||||
|
||||
.material-icons {
|
||||
font-family: 'Material Icons';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px; /* Preferred icon size */
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
text-transform: none;
|
||||
letter-spacing: normal;
|
||||
word-wrap: normal;
|
||||
white-space: nowrap;
|
||||
direction: ltr;
|
||||
|
||||
/* Support for all WebKit browsers. */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
|
||||
/* Support for Safari and Chrome. */
|
||||
text-rendering: optimizeLegibility;
|
||||
|
||||
/* Support for Firefox. */
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Support for IE. */
|
||||
font-feature-settings: 'liga';
|
||||
}
|
||||
|
||||
[class^="icon-"]::before,
|
||||
[class*=" icon-"]::before {
|
||||
font-family: icomoon;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
background-size: 24px;
|
||||
|
||||
/* Enable Ligatures ================ */
|
||||
letter-spacing: 0;
|
||||
-webkit-font-feature-settings: "liga";
|
||||
-moz-font-feature-settings: "liga=1";
|
||||
-moz-font-feature-settings: "liga";
|
||||
-ms-font-feature-settings: "liga" 1;
|
||||
-o-font-feature-settings: "liga";
|
||||
font-feature-settings: "liga";
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-image {
|
||||
background-size: 16px;
|
||||
background-repeat: no-repeat;
|
||||
padding-right: 1em !important;
|
||||
padding-left: 1em !important;
|
||||
}
|
||||
|
||||
.icon-eye::before {
|
||||
content: "\e9ce";
|
||||
}
|
||||
|
||||
.icon-no-eye::before {
|
||||
content: "\e9d1";
|
||||
}
|
||||
|
||||
.icon-calendar::before {
|
||||
content: "\e953";
|
||||
}
|
||||
|
||||
.icon-mail::before {
|
||||
content: "\ea86";
|
||||
}
|
||||
|
||||
.icon-time::before {
|
||||
content: "\e952";
|
||||
}
|
||||
|
||||
/* Carrot (http://carrot.org) */
|
||||
.icon-image--carrot {
|
||||
background-image: url("../../_global/img/icons/carrot-icon--black.png");
|
||||
}
|
||||
|
||||
/* Diaspora */
|
||||
.icon-image--diaspora {
|
||||
background-image: url("../../_global/img/icons/diaspora-icon--black.png");
|
||||
}
|
||||
|
||||
/* Shaarli */
|
||||
.icon-image--shaarli {
|
||||
background-image: url("../../_global/img/icons/shaarli.png");
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
flex-direction: column;
|
||||
background: #f0f0f0;
|
||||
}
|
||||
|
||||
body.login main {
|
||||
padding: 0;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
nav,
|
||||
main,
|
||||
footer {
|
||||
padding-left: 240px;
|
||||
}
|
||||
|
||||
main,
|
||||
#content,
|
||||
.valign-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
.results {
|
||||
height: 1em;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.results .nb-results,
|
||||
.results .pagination {
|
||||
margin: 15px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pagination ul {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.pagination li {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.pagination a {
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pagination .disabled {
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
div.pagination ul .prev.disabled,
|
||||
div.pagination ul .next.disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pagination li.active span {
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.page-footer .footer-copyright p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.picker__date-display {
|
||||
display: none;
|
||||
}
|
||||
|
||||
footer.page-footer {
|
||||
margin-top: 10px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
footer .row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
1 = Nav
|
||||
========================================================================== */
|
||||
|
||||
nav input {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.nav-wrapper .button-collapse {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.nav-input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-panels {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nav-panel-buttom li {
|
||||
max-height: 64px;
|
||||
}
|
||||
|
||||
.nav-panels {
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
|
||||
.nav-panel-add .add,
|
||||
.nav-panel-search .search,
|
||||
.nav-panels .close {
|
||||
color: #444 !important;
|
||||
}
|
||||
|
||||
.nav-panels .action {
|
||||
padding-left: 0.75rem;
|
||||
font-size: 2.1rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.nav-panels .input-field input {
|
||||
display: block;
|
||||
line-height: inherit;
|
||||
padding-left: 4rem !important;
|
||||
width: calc(100% - 8rem);
|
||||
}
|
||||
|
||||
.nav-panels .input-field input:focus {
|
||||
background-color: #fff;
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.input-field.nav-panel-add label {
|
||||
left: 1rem;
|
||||
}
|
||||
|
||||
.input-field.nav-panel-add .close {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 1rem;
|
||||
color: transparent;
|
||||
cursor: pointer;
|
||||
font-size: 2rem;
|
||||
transition: 0.3s color;
|
||||
}
|
||||
|
||||
#button_filters {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#button_export {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.input-field.nav-panel-add,
|
||||
.input-field.nav-panel-add form {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
2 = Side-nav
|
||||
========================================================================== */
|
||||
|
||||
.side-nav.fixed a {
|
||||
font-size: 13px;
|
||||
line-height: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
.side-nav .collapsible-header,
|
||||
.side-nav.fixed .collapsible-header {
|
||||
height: 45px;
|
||||
line-height: 44px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.bold > a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.side-nav > li.logo {
|
||||
line-height: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#main .logo a {
|
||||
height: 100pt;
|
||||
}
|
||||
|
||||
#main .logo img {
|
||||
height: 100pt;
|
||||
width: 100pt;
|
||||
}
|
||||
|
||||
#main .logo:hover {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.side-nav li {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.side-nav a {
|
||||
margin: 0 1rem;
|
||||
}
|
||||
|
||||
span.numberItems {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
* 3 = Filters slider
|
||||
* ========================================================================== */
|
||||
|
||||
#filters button {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.side-nav.fixed.right-aligned {
|
||||
right: -250px;
|
||||
left: auto !important;
|
||||
overflow-y: visible;
|
||||
}
|
||||
|
||||
#filters div.with-checkbox {
|
||||
height: 3rem;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
4 = Cards
|
||||
========================================================================== */
|
||||
|
||||
main #content {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
main ul.row {
|
||||
padding: 0 0.75rem;
|
||||
}
|
||||
|
||||
.data .card .card-body {
|
||||
height: 22em;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card .card-content .card-title {
|
||||
line-height: 32px;
|
||||
max-height: 64px;
|
||||
}
|
||||
|
||||
.card .card-content i.right,
|
||||
.card .card-reveal i.right {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.card .card-entry-labels {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
z-index: 90;
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
.card .card-entry-labels li {
|
||||
margin: 10px 10px 10px auto;
|
||||
padding: 5px 12px 5px 16px;
|
||||
background-color: rgba(0, 151, 167, 0.85);
|
||||
border-radius: 0 3px 3px 0;
|
||||
color: #fff;
|
||||
cursor: default;
|
||||
max-height: 2em;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.card .card-entry-labels-hidden {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.card .card-entry-labels-hidden li {
|
||||
display: inline-block;
|
||||
background-color: rgba(0, 151, 167, 0.85);
|
||||
margin: 0 5px;
|
||||
padding: 5px 12px;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
max-height: 2em;
|
||||
max-width: calc(100% - 15px);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.card .card-content .estimatedTime {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.card .card-action .original {
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.card .card-action ul.links {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.card .card-action a {
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.card .card-action a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.quickstart .card .card-action a,
|
||||
.quickstart .card .card-action a:hover {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.settings .div_tabs {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.card.sw {
|
||||
max-width: 370px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.card .card-image {
|
||||
height: 14em;
|
||||
}
|
||||
|
||||
.card .card-image .preview {
|
||||
height: 14em;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50%;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
5 = Article
|
||||
========================================================================== */
|
||||
|
||||
#article {
|
||||
font-size: 20px;
|
||||
margin: 0 auto;
|
||||
max-width: 40em;
|
||||
}
|
||||
|
||||
#article img,
|
||||
#article figure {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#article > header > h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.reader-mode {
|
||||
width: 95px !important;
|
||||
transition: width 0.2s ease;
|
||||
}
|
||||
|
||||
.reader-mode:hover {
|
||||
width: 240px !important;
|
||||
}
|
||||
|
||||
.reader-mode .collapsible-body {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.reader-mode:hover .collapsible-body {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.reader-mode span {
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
.reader-mode:hover span {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.progress {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
margin: 0;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
#article aside .link {
|
||||
color: #000;
|
||||
font-size: 0.8em;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#article aside #list {
|
||||
float: right;
|
||||
margin: 0 15px 10px;
|
||||
}
|
||||
|
||||
#article aside .chip {
|
||||
background-color: rgba(0, 151, 167, 0.85);
|
||||
color: #fff;
|
||||
padding: 0 15px 0 10px;
|
||||
}
|
||||
|
||||
#article aside .chip i {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
6 = Media queries
|
||||
========================================================================== */
|
||||
|
||||
@media only screen and (max-width: 992px) {
|
||||
header,
|
||||
main,
|
||||
footer {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
nav,
|
||||
main,
|
||||
footer {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.reader-mode {
|
||||
width: 240px !important;
|
||||
}
|
||||
|
||||
.reader-mode span {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
display: inline-block;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.tab {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pagination li.prev,
|
||||
.pagination li.next {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 400px) {
|
||||
.nav-panel-buttom {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 993px) and (max-width: 1180px) {
|
||||
.row .col.l1 {
|
||||
width: 25%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l2 {
|
||||
width: 33.33333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l3 {
|
||||
width: 41.66667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l4 {
|
||||
width: 50%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l5 {
|
||||
width: 58.33333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l6 {
|
||||
width: 66.66667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l7 {
|
||||
width: 75%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l8 {
|
||||
width: 83.33333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l9 {
|
||||
width: 91.66667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.row .col.l10 {
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 350px) {
|
||||
.nb-results {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
7 = Font
|
||||
========================================================================== */
|
||||
|
||||
.icon-google-plus2::before {
|
||||
content: "\ea89";
|
||||
}
|
||||
|
||||
.icon-facebook2::before {
|
||||
content: "\ea8d";
|
||||
}
|
||||
|
||||
.icon-twitter::before {
|
||||
content: "\ea96";
|
||||
}
|
||||
|
||||
.icon-apple::before {
|
||||
content: "\eabf";
|
||||
}
|
||||
|
||||
.icon-android::before {
|
||||
content: "\eac1";
|
||||
}
|
||||
|
||||
.icon-chrome::before {
|
||||
content: "\eae5";
|
||||
}
|
||||
|
||||
.icon-firefox::before {
|
||||
content: "\eae6";
|
||||
}
|
||||
|
||||
.icon-link::before {
|
||||
content: "\e9cb";
|
||||
}
|
||||
|
||||
footer [class^="icon-"],
|
||||
footer [class*=" icon-"] {
|
||||
font-size: 2em;
|
||||
transition: text-shadow 0.2s ease;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
footer [class^="icon-"]:hover,
|
||||
footer [class*=" icon-"]:hover {
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
8 = Others
|
||||
========================================================================== */
|
||||
|
||||
/* force height on non-input field in the settings page */
|
||||
div.settings div.input-field div,
|
||||
div.settings div.input-field ul {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
/* but avoid to kill all file input */
|
||||
div.settings div.file-field div {
|
||||
margin-top: inherit;
|
||||
}
|
||||
|
||||
.input-field label.active {
|
||||
font-size: 1rem;
|
||||
}
|
||||
@ -1,77 +0,0 @@
|
||||
@media print {
|
||||
/* ### Layout ### */
|
||||
|
||||
body {
|
||||
font-family: Serif;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
/* ### Content ### */
|
||||
|
||||
/* Hide useless blocks */
|
||||
body > header,
|
||||
#article_toolbar,
|
||||
#links,
|
||||
#sort,
|
||||
body > footer,
|
||||
.top_link,
|
||||
div.tools,
|
||||
header div,
|
||||
.messages,
|
||||
.entry + .results,
|
||||
#slide-out,
|
||||
.progress,
|
||||
.hide-on-large-only,
|
||||
#article > aside,
|
||||
#article .mbm a {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
main {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
#article {
|
||||
margin: inherit !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;
|
||||
}
|
||||
|
||||
#main {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-left: 0;
|
||||
padding-right: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
#article {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@ -1,99 +0,0 @@
|
||||
import { savePercent, retrievePercent, initFilters, initExport } from '../../_global/js/tools';
|
||||
|
||||
const $ = require('jquery');
|
||||
|
||||
global.jQuery = $;
|
||||
require('materialize'); // eslint-disable-line
|
||||
const annotator = require('annotator');
|
||||
|
||||
$(document).ready(() => {
|
||||
// sideNav
|
||||
$('.button-collapse').sideNav();
|
||||
$('select').material_select();
|
||||
$('.collapsible').collapsible({
|
||||
accordion: false,
|
||||
});
|
||||
$('.datepicker').pickadate({
|
||||
selectMonths: true,
|
||||
selectYears: 15,
|
||||
formatSubmit: 'dd/mm/yyyy',
|
||||
hiddenName: true,
|
||||
format: 'dd/mm/yyyy',
|
||||
});
|
||||
initFilters();
|
||||
initExport();
|
||||
|
||||
$('#nav-btn-add-tag').on('click', () => {
|
||||
$('.nav-panel-add-tag').toggle(100);
|
||||
$('.nav-panel-menu').addClass('hidden');
|
||||
$('#tag_label').focus();
|
||||
return false;
|
||||
});
|
||||
$('#nav-btn-add').on('click', () => {
|
||||
$('.nav-panel-buttom').hide(100);
|
||||
$('.nav-panel-add').show(100);
|
||||
$('.nav-panels .action').hide(100);
|
||||
$('.nav-panel-menu').addClass('hidden');
|
||||
$('.nav-panels').css('background', 'white');
|
||||
$('#entry_url').focus();
|
||||
return false;
|
||||
});
|
||||
$('#nav-btn-search').on('click', () => {
|
||||
$('.nav-panel-buttom').hide(100);
|
||||
$('.nav-panel-search').show(100);
|
||||
$('.nav-panels .action').hide(100);
|
||||
$('.nav-panel-menu').addClass('hidden');
|
||||
$('.nav-panels').css('background', 'white');
|
||||
$('#searchfield').focus();
|
||||
return false;
|
||||
});
|
||||
$('.close').on('click', () => {
|
||||
$('.nav-panel-add').hide(100);
|
||||
$('.nav-panel-search').hide(100);
|
||||
$('.nav-panel-buttom').show(100);
|
||||
$('.nav-panels .action').show(100);
|
||||
$('.nav-panel-menu').removeClass('hidden');
|
||||
$('.nav-panels').css('background', 'transparent');
|
||||
return false;
|
||||
});
|
||||
$(window).scroll(() => {
|
||||
const s = $(window).scrollTop();
|
||||
const d = $(document).height();
|
||||
const c = $(window).height();
|
||||
const scrollPercent = (s / (d - c)) * 100;
|
||||
$('.progress .determinate').css('width', `${scrollPercent}%`);
|
||||
});
|
||||
|
||||
/* ==========================================================================
|
||||
Annotations & Remember position
|
||||
========================================================================== */
|
||||
|
||||
if ($('article').length) {
|
||||
const app = new annotator.App();
|
||||
const x = JSON.parse($('#annotationroutes').html());
|
||||
|
||||
app.include(annotator.ui.main, {
|
||||
element: document.querySelector('article'),
|
||||
});
|
||||
|
||||
app.include(annotator.storage.http, x);
|
||||
|
||||
app.start().then(() => {
|
||||
app.annotations.load({ entry: x.entryId });
|
||||
});
|
||||
|
||||
$(window).scroll(() => {
|
||||
const scrollTop = $(window).scrollTop();
|
||||
const docHeight = $(document).height();
|
||||
const scrollPercent = (scrollTop) / (docHeight);
|
||||
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
|
||||
savePercent(x.entryId, scrollPercentRounded);
|
||||
});
|
||||
|
||||
retrievePercent(x.entryId);
|
||||
|
||||
$(window).resize(() => {
|
||||
retrievePercent(x.entryId);
|
||||
});
|
||||
}
|
||||
});
|
||||
0
app/Resources/views/.gitkeep
Normal file
0
app/Resources/views/.gitkeep
Normal file
@ -30,7 +30,7 @@ framework:
|
||||
assets: ~
|
||||
|
||||
wallabag_core:
|
||||
version: 2.1.1
|
||||
version: 2.0.7
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
languages:
|
||||
en: 'English'
|
||||
@ -49,13 +49,9 @@ wallabag_core:
|
||||
language: en
|
||||
rss_limit: 50
|
||||
reading_speed: 1
|
||||
cache_lifetime: 10
|
||||
|
||||
wallabag_user:
|
||||
registration_enabled: "%fosuser_registration%"
|
||||
|
||||
wallabag_import:
|
||||
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain', 'text/csv']
|
||||
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
|
||||
resource_dir: "%kernel.root_dir%/../web/uploads/import"
|
||||
|
||||
# Twig Configuration
|
||||
@ -64,7 +60,19 @@ twig:
|
||||
strict_variables: "%kernel.debug%"
|
||||
form_themes:
|
||||
- "LexikFormFilterBundle:Form:form_div_layout.html.twig"
|
||||
exception_controller: wallabag_core.exception_controller:showAction
|
||||
|
||||
# Assetic Configuration
|
||||
assetic:
|
||||
debug: "%kernel.debug%"
|
||||
use_controller: false
|
||||
bundles: [ ]
|
||||
#java: /usr/bin/java
|
||||
filters:
|
||||
cssrewrite: ~
|
||||
#closure:
|
||||
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
|
||||
#yui_css:
|
||||
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
|
||||
|
||||
# Doctrine Configuration
|
||||
doctrine:
|
||||
@ -216,106 +224,3 @@ lexik_maintenance:
|
||||
response:
|
||||
code: 503
|
||||
status: "wallabag Service Temporarily Unavailable"
|
||||
|
||||
old_sound_rabbit_mq:
|
||||
connections:
|
||||
default:
|
||||
host: "%rabbitmq_host%"
|
||||
port: "%rabbitmq_port%"
|
||||
user: "%rabbitmq_user%"
|
||||
password: "%rabbitmq_password%"
|
||||
vhost: /
|
||||
lazy: true
|
||||
producers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
consumers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
callback: wallabag_import.consumer.amqp.pocket
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.readability'
|
||||
callback: wallabag_import.consumer.amqp.readability
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
callback: wallabag_import.consumer.amqp.instapaper
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
callback: wallabag_import.consumer.amqp.wallabag_v1
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
callback: wallabag_import.consumer.amqp.wallabag_v2
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
callback: wallabag_import.consumer.amqp.firefox
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
callback: wallabag_import.consumer.amqp.chrome
|
||||
|
||||
@ -35,16 +35,11 @@ monolog:
|
||||
VERBOSITY_DEBUG: DEBUG
|
||||
channels: [doctrine]
|
||||
|
||||
assetic:
|
||||
use_controller: true
|
||||
|
||||
swiftmailer:
|
||||
# see http://mailcatcher.me/
|
||||
transport: smtp
|
||||
host: 'localhost'
|
||||
port: 1025
|
||||
|
||||
# If you want to use cache for queries used in WallabagExtension
|
||||
# Uncomment the following lines
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apcu
|
||||
# result_cache_driver: apcu
|
||||
# query_cache_driver: apcu
|
||||
|
||||
@ -34,19 +34,6 @@ parameters:
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_registration: true
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
|
||||
rss_limit: 50
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
# Redis processing
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
@ -5,4 +5,4 @@ parameters:
|
||||
test_database_name: null
|
||||
test_database_user: null
|
||||
test_database_password: null
|
||||
test_database_path: '%kernel.root_dir%/../data/db/wallabag_test.sqlite'
|
||||
test_database_path: '%kernel.root_dir%/../data/db/wallabag_testYO.sqlite'
|
||||
|
||||
@ -7,11 +7,6 @@ wallabag_import:
|
||||
type: annotation
|
||||
prefix: /import
|
||||
|
||||
wallabag_user:
|
||||
resource: "@WallabagUserBundle/Controller/"
|
||||
type: annotation
|
||||
prefix: /users
|
||||
|
||||
wallabag_api:
|
||||
resource: "@WallabagApiBundle/Resources/config/routing.yml"
|
||||
prefix: /
|
||||
|
||||
@ -60,8 +60,6 @@ security:
|
||||
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/share, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/settings, roles: ROLE_SUPER_ADMIN }
|
||||
- { path: ^/annotations, roles: ROLE_USER }
|
||||
- { path: ^/users, roles: ROLE_SUPER_ADMIN }
|
||||
- { path: ^/, roles: ROLE_USER }
|
||||
|
||||
@ -16,12 +16,6 @@ services:
|
||||
wallabag.twig_extension:
|
||||
class: Wallabag\CoreBundle\Twig\WallabagExtension
|
||||
public: false
|
||||
arguments:
|
||||
- "@wallabag_core.entry_repository"
|
||||
- "@wallabag_core.tag_repository"
|
||||
- "@security.token_storage"
|
||||
- "%wallabag_core.cache_lifetime%"
|
||||
- "@translator"
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
|
||||
@ -5,4 +5,4 @@ parameters:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_testHU.sqlite"
|
||||
|
||||
@ -22,6 +22,7 @@ echo '> Checking Symfony requirements:'.PHP_EOL.' ';
|
||||
|
||||
$messages = array();
|
||||
foreach ($symfonyRequirements->getRequirements() as $req) {
|
||||
/** @var $req Requirement */
|
||||
if ($helpText = get_error_message($req, $lineSize)) {
|
||||
echo_style('red', 'E');
|
||||
$messages['error'][] = $helpText;
|
||||
@ -120,14 +121,10 @@ function echo_block($style, $title, $message)
|
||||
|
||||
echo PHP_EOL.PHP_EOL;
|
||||
|
||||
echo_style($style, str_repeat(' ', $width));
|
||||
echo PHP_EOL;
|
||||
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
|
||||
echo PHP_EOL;
|
||||
echo_style($style, $message);
|
||||
echo PHP_EOL;
|
||||
echo_style($style, str_repeat(' ', $width));
|
||||
echo PHP_EOL;
|
||||
echo_style($style, str_repeat(' ', $width).PHP_EOL);
|
||||
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL);
|
||||
echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL);
|
||||
echo_style($style, str_repeat(' ', $width).PHP_EOL);
|
||||
}
|
||||
|
||||
function has_color_support()
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
"doctrine/doctrine-bundle": "^1.6",
|
||||
"doctrine/doctrine-cache-bundle": "^1.2",
|
||||
"twig/extensions": "~1.0",
|
||||
"symfony/assetic-bundle": "~2.3",
|
||||
"symfony/swiftmailer-bundle": "^2.3",
|
||||
"symfony/monolog-bundle": "^2.8",
|
||||
"sensio/distribution-bundle": "^5.0",
|
||||
@ -80,26 +81,22 @@
|
||||
"mnapoli/piwik-twig-extension": "^1.0",
|
||||
"lexik/maintenance-bundle": "~2.1",
|
||||
"ocramius/proxy-manager": "1.*",
|
||||
"white-october/pagerfanta-bundle": "^1.0",
|
||||
"mouf/nodejs-installer": "~1.0",
|
||||
"php-amqplib/rabbitmq-bundle": "^1.8",
|
||||
"predis/predis": "^1.0",
|
||||
"javibravo/simpleue": "^1.0"
|
||||
"white-october/pagerfanta-bundle": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "~2.2",
|
||||
"doctrine/data-fixtures": "~1.1.1",
|
||||
"sensio/generator-bundle": "^3.0",
|
||||
"phpunit/phpunit": "~5.0",
|
||||
"phpunit/phpunit": "~4.4",
|
||||
"symfony/phpunit-bridge": "^3.0",
|
||||
"friendsofphp/php-cs-fixer": "~1.9",
|
||||
"m6web/redis-mock": "^2.0"
|
||||
"friendsofphp/php-cs-fixer": "~1.9"
|
||||
},
|
||||
"scripts": {
|
||||
"post-cmd": [
|
||||
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
|
||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
|
||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
|
||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
|
||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
|
||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
|
||||
],
|
||||
@ -116,6 +113,7 @@
|
||||
"symfony-var-dir": "var",
|
||||
"symfony-web-dir": "web",
|
||||
"symfony-tests-dir": "tests",
|
||||
"symfony-assets-install": "relative",
|
||||
"incenteev-parameters": {
|
||||
"file": "app/config/parameters.yml"
|
||||
}
|
||||
|
||||
1082
composer.lock
generated
1082
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -11,7 +11,6 @@ services:
|
||||
links:
|
||||
- php:php
|
||||
command: nginx -c /nginx.conf
|
||||
|
||||
php:
|
||||
build:
|
||||
context: docker/php
|
||||
@ -31,7 +30,6 @@ services:
|
||||
# If all DBMS are commented out, sqlite will be used as default
|
||||
# - ./docker/postgres/env
|
||||
# - ./docker/mariadb/env
|
||||
|
||||
#postgres:
|
||||
# image: postgres:9
|
||||
# ports:
|
||||
@ -40,7 +38,6 @@ services:
|
||||
# - ./docker/data/pgsql:/var/lib/postgresql/data
|
||||
# env_file:
|
||||
# - ./docker/postgres/env
|
||||
|
||||
#mariadb:
|
||||
# image: mariadb:10
|
||||
# ports:
|
||||
@ -49,13 +46,3 @@ services:
|
||||
# - ./docker/data/mariadb:/var/lib/mysql
|
||||
# env_file:
|
||||
# - ./docker/mariadb/env
|
||||
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-management
|
||||
ports:
|
||||
- "15672:15672"
|
||||
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- "6379:6379"
|
||||
|
||||
@ -4,10 +4,9 @@ FROM php:fpm
|
||||
ARG timezone='Europe/Paris'
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libmcrypt-dev libicu-dev libpq-dev libxml2-dev libpng12-dev libjpeg-dev \
|
||||
&& /usr/local/bin/docker-php-ext-configure gd --with-jpeg-dir=/usr/include \
|
||||
libmcrypt-dev libicu-dev libpq-dev libxml2-dev \
|
||||
&& docker-php-ext-install \
|
||||
iconv mcrypt mbstring intl pdo pdo_mysql pdo_pgsql gd
|
||||
iconv mcrypt mbstring intl pdo pdo_mysql pdo_pgsql
|
||||
|
||||
RUN echo "date.timezone="$timezone > /usr/local/etc/php/conf.d/date_timezone.ini
|
||||
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# wallabag documentation build configuration file, created by
|
||||
# sphinx-quickstart on Fri Oct 16 06:47:23 2015.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
extensions = []
|
||||
templates_path = ['_templates']
|
||||
source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
project = u'wallabag-fr'
|
||||
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
|
||||
version = '2.1.0'
|
||||
release = version
|
||||
exclude_patterns = ['_build']
|
||||
pygments_style = 'sphinx'
|
||||
html_theme = 'default'
|
||||
html_static_path = ['_static']
|
||||
htmlhelp_basename = 'wallabagdedoc'
|
||||
|
||||
latex_elements = {
|
||||
}
|
||||
|
||||
latex_documents = [
|
||||
('index', 'wallabag-de.tex', u'wallabag Documentation',
|
||||
u'Nicolas Lœuillet', 'manual'),
|
||||
]
|
||||
|
||||
man_pages = [
|
||||
('index', 'wallabagde', u'wallabag Documentation',
|
||||
[u'Nicolas Lœuillet'], 1)
|
||||
]
|
||||
|
||||
texinfo_documents = [
|
||||
('index', 'wallabag', u'wallabag Documentation',
|
||||
u'Nicolas Lœuillet', 'wallabag', 'wallabag is an opensource read-it-later.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
##### Guzzle sphinx theme
|
||||
|
||||
import guzzle_sphinx_theme
|
||||
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
|
||||
html_theme_path = guzzle_sphinx_theme.html_theme_path()
|
||||
html_theme = 'guzzle_sphinx_theme'
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
html_sidebars = {
|
||||
'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']
|
||||
}
|
||||
|
||||
# Register the theme as an extension to generate a sitemap.xml
|
||||
extensions.append("guzzle_sphinx_theme")
|
||||
@ -44,7 +44,7 @@ wallabag laufen lassen
|
||||
Eigenschaften mit den kommentierten zu ersetzen (mit Werten
|
||||
mit ``env.`` Präfix)
|
||||
#. ``composer install`` die Projektabhängigkeiten
|
||||
#. ``php bin/console wallabag:install``, um das Schema zu erstellen
|
||||
#. ``php app/console wallabag:install``, um das Schema zu erstellen
|
||||
#. ``docker-compose up`` um die Container laufen zu lassen
|
||||
#. Schließlich öffne http://localhost:8080/, um dein frisch
|
||||
installiertes wallabag zu finden.
|
||||
|
||||
@ -1,77 +0,0 @@
|
||||
Installiere RabbitMQ für asynchrone Aufgaben
|
||||
============================================
|
||||
|
||||
Um asynchrone Aufgaben zu starten (nützlich z.B. für große Imports), können wir RabbitMQ nutzen.
|
||||
|
||||
Voraussetzungen
|
||||
---------------
|
||||
|
||||
Du musst RabbitMQ auf deinem Server installiert haben.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
|
||||
apt-key add rabbitmq-signing-key-public.asc
|
||||
apt-get update
|
||||
apt-get install rabbitmq-server
|
||||
|
||||
Konfiguration und Starten
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
|
||||
rabbitmq-server -detached
|
||||
|
||||
RabbitMQ stoppen
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmqctl stop
|
||||
|
||||
|
||||
Konfigure RabbitMQ in wallabag
|
||||
------------------------------
|
||||
|
||||
Bearbeite die Datei ``parameters.yml``, um die RabbitMQ Konfiguration einzurichten. Die Standardkonfiguration sollte ok sein:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
|
||||
Starte den RabbitMQ Consumer
|
||||
----------------------------
|
||||
|
||||
Abhängig von welchem Service du importieren möchtest, solltest du einen Cron Job aktivieren (oder mehrere, wenn du viele unterstützen willst):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console rabbitmq:consumer import_pocket -w
|
||||
|
||||
# for Readability import
|
||||
bin/console rabbitmq:consumer import_readability -w
|
||||
|
||||
# for Instapaper import
|
||||
bin/console rabbitmq:consumer import_instapaper -w
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v1 -w
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v2 -w
|
||||
|
||||
# for Firefox import
|
||||
bin/console rabbitmq:consumer import_firefox -w
|
||||
|
||||
# for Chrome import
|
||||
bin/console rabbitmq:consumer import_chrome -w
|
||||
|
||||
@ -1,71 +0,0 @@
|
||||
Installiere Redis für asynchrone Aufgaben
|
||||
=========================================
|
||||
|
||||
Um asynchrone Aufgaben zu starten (nützlich z.B. für große Imports), können wir Redis nutzen.
|
||||
|
||||
Voraussetzungen
|
||||
---------------
|
||||
|
||||
Du musst Redis auf deinem Server installiert haben.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
apt-get install redis-server
|
||||
|
||||
Starten
|
||||
~~~~~~
|
||||
|
||||
Der Redis Service läuft eventuell schon direkt nach der Installation. Falls nicht kannst du ihn wie folgt starten:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server
|
||||
|
||||
|
||||
Konfigure Redis in wallabag
|
||||
---------------------------
|
||||
|
||||
Bearbeite die Datei ``parameters.yml``, um die RabbitMQ Konfiguration einzurichten. Die Standardkonfiguration sollte ok sein:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
|
||||
Starte den Redis Consumer
|
||||
-------------------------
|
||||
|
||||
Abhängig von welchem Service du importieren möchtest, solltest du einen Cron Job aktivieren (oder mehrere, wenn du viele unterstützen willst):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
|
||||
|
||||
# for Readability import
|
||||
bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
|
||||
|
||||
# for Instapaper import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
|
||||
|
||||
# for Firefox import
|
||||
bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
|
||||
|
||||
# for Chrome import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
|
||||
|
||||
Wenn du den Import nur für ein paar Nachrichten und nicht für alle starten willst, kannst du die Nummer (im folgenden Beispiel 12) angeben. Der Redis Worker wird dann nach der 12. Nachricht stoppen:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
|
||||
@ -17,11 +17,6 @@ Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organis
|
||||
* :ref:`user-docs`
|
||||
* :ref:`dev-docs`
|
||||
|
||||
Die Dokumentation ist in anderen Sprachen verfügbar :
|
||||
|
||||
* `Documentation in english <http://doc.wallabag.org/en/master/>`_
|
||||
* `Documentation en français <http://doc.wallabag.org/fr/master/>`_
|
||||
|
||||
.. _user-docs:
|
||||
|
||||
.. toctree::
|
||||
@ -30,8 +25,7 @@ Die Dokumentation ist in anderen Sprachen verfügbar :
|
||||
|
||||
user/faq
|
||||
user/installation
|
||||
user/upgrade-2.0.x-2.1.y
|
||||
user/upgrade-2.0.x-2.0.y
|
||||
user/upgrade
|
||||
user/migration
|
||||
user/import
|
||||
user/create_account
|
||||
@ -56,5 +50,3 @@ Die Dokumentation ist in anderen Sprachen verfügbar :
|
||||
developer/documentation
|
||||
developer/translate
|
||||
developer/maintenance
|
||||
developer/redis
|
||||
developer/rabbitmq
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
Sphinx>=1.3.0,<1.4.0
|
||||
guzzle_sphinx_theme>=0.7.0,<0.8.0
|
||||
@ -12,7 +12,7 @@ Das kann verschiedene Ursachen haben:
|
||||
Wie kann ich helfen das zu beheben?
|
||||
-----------------------------------
|
||||
|
||||
- `indem du uns eine Mail mit der URL des Artikels sendest <mailto:hello@wallabag.org>`_
|
||||
- `indem du uns eine Mail mit der URL des Artikels sendest <mailto:hello\@wallabag.org>`_
|
||||
- indem du versuchst das Laden des Artikels durch Erstellen einer Datei für den Artikel
|
||||
selbst zu beheben
|
||||
Du kannst `dieses Tool <http://siteconfig.fivefilters.org/>`__ nutzen.
|
||||
|
||||
@ -23,7 +23,6 @@ nicht alle folgenden Pakete installieren.
|
||||
- php-curl
|
||||
- php-gettext
|
||||
- php-tokenizer
|
||||
- php-bcmath
|
||||
|
||||
wallabag nutzt PDO, um sich mit der Datenbank zu verbinden, darum benötigst du eines der folgenden Komponenten:
|
||||
|
||||
@ -47,7 +46,7 @@ Composer installieren:
|
||||
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
|
||||
Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden.
|
||||
Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden:
|
||||
|
||||
Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
|
||||
|
||||
@ -55,7 +54,7 @@ Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
|
||||
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.1.1 --force
|
||||
git checkout 2.0.7
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
|
||||
@ -87,8 +86,6 @@ Führe dieses Kommando aus, um das neueste Paket herunterzuladen und zu entpacke
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash: ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Jetzt lese die Dokumentation, um einen Virtualhost zu erstellen, dann greife auf dein wallabag zu.
|
||||
Wenn du die Datenbankkonfiguration eingestellt hast, MySQL oder PostgreSQL zu nutzen, musst du einen Nutzer über das folgende Kommando erstellen ``php bin/console wallabag:install --env=prod``.
|
||||
|
||||
|
||||
@ -1,65 +0,0 @@
|
||||
Wallabag updaten
|
||||
================
|
||||
|
||||
.. warning::
|
||||
Wenn du den Import von Pocket durch das Hinzufügen des Consumer Key in den internen Einstellungen konfiguriert hast, fertige bitte ein Backup deines Keys an, bevor du auf das neue Release migrierst: Du wirst den Key nach dem Update in der Konfiguration erneut eintragen müssen.
|
||||
|
||||
Update auf einem dedizierten Webserver
|
||||
--------------------------------------
|
||||
|
||||
Das neueste Release ist auf https://www.wallabag.org/pages/download-wallabag.html veröffentlicht. Um deine wallabag-Installation auf die neueste Version zu aktualisieren, führe die folgenden Kommandos in deinem wallabag-Ordner aus (ersetze ``2.1.1`` mit der neuesten Releasenummer):
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.1.1 --force
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console doctrine:migrations:migrate --env=prod
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
Update auf einem Shared Webhosting
|
||||
----------------------------------
|
||||
|
||||
Sichere deine ``app/config/parameters.yml`` Datei.
|
||||
|
||||
Lade das neueste Release von wallabag herunter:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash: ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Entpacke das Archiv in deinen wallabag-Ordner und ersetze ``app/config/parameters.yml`` mit deiner Datei.
|
||||
|
||||
Bitte beachte, dass wir in dieser Version neue Parameter hinzugefügt haben. Du musst die Datei ``app/config/parameters.yml`` bearbeiten und die folgenden Zeilen hinzufügen (ersetze die Werte mit deiner Konfiguration):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
# Redis processing
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
Wenn du SQLite nutzt, musst auch das ``data/`` Verzeichnis in die neue Installation kopieren.
|
||||
|
||||
Leere den ``var/cache`` Ordner.
|
||||
|
||||
Du musst einige SQL-Abfragen ausführen, um die Datenbank zu aktualisieren. Wir nehmen in diesem Fall an, dass das Tabellenpräfix ``wallabag_`` ist und eine MySQL-Datenbank genutzt wird:
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
|
||||
ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
|
||||
ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
|
||||
DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
|
||||
@ -1,17 +1,16 @@
|
||||
Wallabag updaten 2.0.x -> 2.1.x
|
||||
===============================
|
||||
Wallabag updaten
|
||||
================
|
||||
|
||||
Update auf einem dedizierten Webserver
|
||||
--------------------------------------
|
||||
|
||||
Das neueste Release ist auf https://www.wallabag.org/pages/download-wallabag.html veröffentlicht. Um deine wallabag Installation auf die neueste Version upzudaten, führe die folgenden Kommandos in deinem wallabag Ordner aus (ersetze ``2.0.8`` mit der neuesten Releasenummer):
|
||||
Das neueste Release ist auf https://www.wallabag.org/pages/download-wallabag.html veröffentlicht. Um deine wallabag Installation auf die neueste Version upzudaten, führe die folgenden Kommandos in deinem wallabag Ordner aus (ersetze ``2.0.3`` mit der neuesten Releasenummer):
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.0.8
|
||||
git checkout 2.0.3
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
@ -26,8 +25,6 @@ Lade das neueste Release von wallabag herunter:
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash: ``4f84c725d1d6e3345eae0a406115e5ff``)
|
||||
|
||||
Entpacke das Archiv in deinen wallabag Ordner und ersetze ``app/config/parameters.yml`` mit deiner Datei.
|
||||
|
||||
Wenn du SQLite nutzt, musst auch das ``data/`` Verzeichnis in die neue Installation kopieren.
|
||||
@ -12,7 +12,7 @@ source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
project = u'wallabag'
|
||||
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
|
||||
version = '2.1.0'
|
||||
version = '2.0.0'
|
||||
release = version
|
||||
exclude_patterns = ['_build']
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
@ -40,7 +40,7 @@ Run wallabag
|
||||
#. Edit ``app/config/parameters.yml`` to replace ``database_*``
|
||||
properties with commented ones (with values prefixed by ``env.``)
|
||||
#. ``composer install`` the project dependencies
|
||||
#. ``php bin/console wallabag:install`` to create the schema
|
||||
#. ``php app/console wallabag:install`` to create the schema
|
||||
#. ``docker-compose up`` to run the containers
|
||||
#. Finally, browse to http://localhost:8080/ to find your freshly
|
||||
installed wallabag.
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
Install RabbitMQ for asynchronous tasks
|
||||
=======================================
|
||||
|
||||
In order to launch asynchronous tasks (useful for huge imports for example), we can use RabbitMQ.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to have RabbitMQ installed on your server.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
|
||||
apt-key add rabbitmq-signing-key-public.asc
|
||||
apt-get update
|
||||
apt-get install rabbitmq-server
|
||||
|
||||
Configuration and launch
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
|
||||
rabbitmq-server -detached
|
||||
|
||||
Stop RabbitMQ
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmqctl stop
|
||||
|
||||
|
||||
Configure RabbitMQ in wallabag
|
||||
------------------------------
|
||||
|
||||
Edit your ``parameters.yml`` file to edit RabbitMQ configuration. The default one should be ok:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
|
||||
Launch RabbitMQ consumer
|
||||
------------------------
|
||||
|
||||
Depending on which service you want to import from you need to enable one (or many if you want to support many) cron job:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console rabbitmq:consumer import_pocket -w
|
||||
|
||||
# for Readability import
|
||||
bin/console rabbitmq:consumer import_readability -w
|
||||
|
||||
# for Instapaper import
|
||||
bin/console rabbitmq:consumer import_instapaper -w
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v1 -w
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v2 -w
|
||||
|
||||
# for Firefox import
|
||||
bin/console rabbitmq:consumer import_firefox -w
|
||||
|
||||
# for Chrome import
|
||||
bin/console rabbitmq:consumer import_chrome -w
|
||||
@ -1,71 +0,0 @@
|
||||
Install Redis for asynchronous tasks
|
||||
====================================
|
||||
|
||||
In order to launch asynchronous tasks (useful for huge imports for example), we can use Redis.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to have Redis installed on your server.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
apt-get install redis-server
|
||||
|
||||
Launch
|
||||
~~~~~~
|
||||
|
||||
The server might be already running after installing, if not you can launch it using:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server
|
||||
|
||||
|
||||
Configure Redis in wallabag
|
||||
---------------------------
|
||||
|
||||
Edit your ``parameters.yml`` file to edit Redis configuration. The default one should be ok:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
|
||||
Launch Redis consumer
|
||||
---------------------
|
||||
|
||||
Depending on which service you want to import from you need to enable one (or many if you want to support many) cron job:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
|
||||
|
||||
# for Readability import
|
||||
bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
|
||||
|
||||
# for Instapaper import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
|
||||
|
||||
# for Firefox import
|
||||
bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
|
||||
|
||||
# for Chrome import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
|
||||
|
||||
If you want to launch the import only for some messages and not all, you can specify this number (here 12) and the worker will stop right after the 12th message :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
|
||||
@ -17,11 +17,6 @@ The main documentation for this application is organized into a couple sections:
|
||||
* :ref:`user-docs`
|
||||
* :ref:`dev-docs`
|
||||
|
||||
The documentation is available in other languages:
|
||||
|
||||
* `Documentation en français <http://doc.wallabag.org/fr/master/>`_
|
||||
* `Deutsch Dokumentation <http://doc.wallabag.org/de/master/>`_
|
||||
|
||||
.. _user-docs:
|
||||
|
||||
.. toctree::
|
||||
@ -30,8 +25,7 @@ The documentation is available in other languages:
|
||||
|
||||
user/faq
|
||||
user/installation
|
||||
user/upgrade-2.0.x-2.1.y
|
||||
user/upgrade-2.0.x-2.0.y
|
||||
user/upgrade
|
||||
user/migration
|
||||
user/import
|
||||
user/create_account
|
||||
@ -41,7 +35,6 @@ The documentation is available in other languages:
|
||||
user/errors_during_fetching
|
||||
user/annotations
|
||||
user/download_articles
|
||||
user/share
|
||||
user/filters
|
||||
user/tags
|
||||
user/android
|
||||
@ -57,5 +50,3 @@ The documentation is available in other languages:
|
||||
developer/documentation
|
||||
developer/translate
|
||||
developer/maintenance
|
||||
developer/redis
|
||||
developer/rabbitmq
|
||||
|
||||
@ -12,7 +12,7 @@ There may be several reasons:
|
||||
How can I help to fix that?
|
||||
---------------------------
|
||||
|
||||
- `by sending us an email with the article's URL <mailto:hello@wallabag.org>`_
|
||||
- `by sending us an email with the article's URL <mailto:hello\@wallabag.org>`_
|
||||
- by trying to fix this article by yourself :) by creating a file for the article.
|
||||
You can use `this tool <http://siteconfig.fivefilters.org/>`__.
|
||||
|
||||
|
||||
@ -23,43 +23,22 @@ Now, all is fine to migrate from Pocket.
|
||||
Import your data into wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Click on ``Import`` link in the menu, on ``Import contents`` in Pocket section
|
||||
Click on ``Import`` link in the menu, on ``Import contents`` in Pocket section
|
||||
and then on ``Connect to Pocket and import data``.
|
||||
|
||||
You need to authorize wallabag to interact with your Pocket account.
|
||||
Your data will be imported. Data import can be a demanding process for your server.
|
||||
|
||||
From Readability
|
||||
----------------
|
||||
|
||||
Export your Readability data
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
On the tools (`https://www.readability.com/tools/<https://www.readability.com/tools/>`_) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).
|
||||
|
||||
Import your data into wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Click on ``Import`` link in the menu, on ``Import contents`` in Readability section
|
||||
and then select your json file and upload it.
|
||||
|
||||
Your data will be imported. Data import can be a demanding process for your server.
|
||||
Your data will be imported. Data import can be a demanding process for your server
|
||||
(we need to work on this import to improve it).
|
||||
|
||||
From Instapaper
|
||||
---------------
|
||||
|
||||
Export your Instapaper data
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*Feature not yet implemented in wallabag v2.*
|
||||
|
||||
On the settings (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like ``instapaper-export.csv``).
|
||||
From Readability
|
||||
----------------
|
||||
|
||||
Import your data into wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Click on ``Import`` link in the menu, on ``Import contents`` in Instapaper section
|
||||
and then select your CSV file and upload it.
|
||||
|
||||
Your data will be imported. Data import can be a demanding process for your server.
|
||||
*Feature not yet implemented in wallabag v2.*
|
||||
|
||||
From HTML or JSON file
|
||||
----------------------
|
||||
|
||||
@ -22,7 +22,6 @@ You'll need the following extensions for wallabag to work. Some of these may alr
|
||||
- php-curl
|
||||
- php-gettext
|
||||
- php-tokenizer
|
||||
- php-bcmath
|
||||
|
||||
wallabag uses PDO to connect to the database, so you'll need one of the following:
|
||||
|
||||
@ -38,7 +37,7 @@ Installation
|
||||
On a dedicated web server (recommended way)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
wallabag uses a large number of PHP libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``).
|
||||
wallabag uses a large number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``).
|
||||
|
||||
Install Composer:
|
||||
|
||||
@ -46,7 +45,7 @@ Install Composer:
|
||||
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
|
||||
You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__.
|
||||
You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__:
|
||||
|
||||
To install wallabag itself, you must run the following commands:
|
||||
|
||||
@ -54,7 +53,7 @@ To install wallabag itself, you must run the following commands:
|
||||
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.1.1 --force
|
||||
git checkout 2.0.7
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
|
||||
@ -86,8 +85,6 @@ Execute this command to download and extract the latest package:
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash of the 2.1.0 package: ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Now, read the following documentation to create your virtual host, then access your wallabag.
|
||||
If you changed the database configuration to use MySQL or PostgreSQL, you need to create a user via this command ``php bin/console wallabag:install --env=prod``.
|
||||
|
||||
|
||||
@ -24,6 +24,29 @@ After creating an user account on your new wallabag v2 instance, you must head o
|
||||
:alt: Import from wallabag v1
|
||||
:align: center
|
||||
|
||||
Import via command-line interface (CLI)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
|
||||
|
||||
::
|
||||
|
||||
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
|
||||
|
||||
Please replace values:
|
||||
|
||||
* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
|
||||
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
|
||||
|
||||
You'll have this in return:
|
||||
|
||||
::
|
||||
|
||||
Start : 05-04-2016 11:36:07 ---
|
||||
403 imported
|
||||
0 already saved
|
||||
End : 05-04-2016 11:36:09 ---
|
||||
|
||||
From wallabag 2.x
|
||||
-----------------
|
||||
|
||||
@ -37,30 +60,3 @@ From your new wallabag instance, create your user account and click on the link
|
||||
|
||||
.. note::
|
||||
If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.
|
||||
|
||||
Import via command-line interface (CLI)
|
||||
---------------------------------------
|
||||
|
||||
If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
|
||||
|
||||
::
|
||||
|
||||
bin/console wallabag:import 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
|
||||
|
||||
Please replace values:
|
||||
|
||||
* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
|
||||
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
|
||||
|
||||
If you want to mark all these entries as read, you can add the ``--markAsRead`` option.
|
||||
|
||||
To import a wallabag v2 file, you need to add the option ``--importer=v2``.
|
||||
|
||||
You'll have this in return:
|
||||
|
||||
::
|
||||
|
||||
Start : 05-04-2016 11:36:07 ---
|
||||
403 imported
|
||||
0 already saved
|
||||
End : 05-04-2016 11:36:09 ---
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
Share articles
|
||||
==============
|
||||
|
||||
When you're reading an article, you can share it. Just click on the share button:
|
||||
|
||||
.. image:: ../../img/user/share.png
|
||||
:alt: share article
|
||||
:align: center
|
||||
|
||||
Now, you can share the article:
|
||||
|
||||
- with a public URL (you'll have a light view of the article)
|
||||
- with a tweet
|
||||
- into your Shaarli
|
||||
- with a post in Diaspora*
|
||||
- to Carrot
|
||||
- with an email
|
||||
@ -1,65 +0,0 @@
|
||||
Upgrading from 2.0.x to 2.1.y
|
||||
=============================
|
||||
|
||||
.. warning::
|
||||
Before this migration, if you configured the Pocket import by adding your consumer key in Internal settings, please do a backup of it: you'll have to add it into the Config page after the upgrade.
|
||||
|
||||
Upgrade on a dedicated web server
|
||||
---------------------------------
|
||||
|
||||
The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.1.1`` by the last release number):
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.1.1 --force
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console doctrine:migrations:migrate --env=prod
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
Upgrade on a shared hosting
|
||||
---------------------------
|
||||
|
||||
Backup your ``app/config/parameters.yml`` file.
|
||||
|
||||
Download the last release of wallabag:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash of the 2.1.0 package: ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
|
||||
|
||||
Please note that we added new parameters in this version. You have to edit ``app/config/parameters.yml`` by adding these lines (replace with your configuration) :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
# Redis processing
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
If you use SQLite, you must also copy your ``data/`` folder inside the new installation.
|
||||
|
||||
Empty ``var/cache`` folder.
|
||||
|
||||
You must run some SQL queries to upgrade your database. We assume that the table prefix is ``wallabag_`` and the database server is a MySQL one:
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
|
||||
ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
|
||||
ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
|
||||
DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
|
||||
@ -1,33 +1,30 @@
|
||||
Upgrade from 2.0.x to 2.0.y
|
||||
===========================
|
||||
Upgrade wallabag
|
||||
================
|
||||
|
||||
Upgrade on a dedicated web server
|
||||
---------------------------------
|
||||
|
||||
The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.0.8`` by the last release number):
|
||||
The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.0.3`` by the last release number):
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.0.8
|
||||
git checkout 2.0.3
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
Upgrade on a shared hosting
|
||||
Upgrade on a shared hosting
|
||||
---------------------------
|
||||
|
||||
Backup your ``app/config/parameters.yml`` file.
|
||||
|
||||
Download the last release of wallabag:
|
||||
Download the last release of wallabag:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(md5 hash of the 2.0.8 package: ``4f84c725d1d6e3345eae0a406115e5ff``)
|
||||
|
||||
Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
|
||||
|
||||
If you use SQLite, you must also copy your ``data/`` folder inside the new installation.
|
||||
@ -12,7 +12,7 @@ source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
project = u'wallabag-fr'
|
||||
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
|
||||
version = '2.1.0'
|
||||
version = '2.0.0'
|
||||
release = version
|
||||
exclude_patterns = ['_build']
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
@ -39,7 +39,7 @@ Exécuter wallabag
|
||||
#. Editer ``app/config/parameters.yml`` pour remplacer les propriétés ``database_*``
|
||||
par les lignes commentées (celles avec des valeurs préfixées par ``env.``)
|
||||
#. ``composer install`` pour installer les dépendances
|
||||
#. ``php bin/console wallabag:install`` pour créer le schéma de la BDD
|
||||
#. ``php app/console wallabag:install`` pour créer le schéma de la BDD
|
||||
#. ``docker-compose up`` pour démarrer les conteneurs
|
||||
#. Enfin, se rendre sur http://localhost:8080/ pour accéder à une installation
|
||||
tout propre de wallabag.
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
Installer RabbitMQ pour des tâches asynchrones
|
||||
==============================================
|
||||
|
||||
Pour lancer des tâches asynchrones (utile pour des imports importants par exemple), nous pouvons utiliser RabbitMQ.
|
||||
|
||||
Pré-requis
|
||||
----------
|
||||
|
||||
Vous devez installer RabbitMQ sur votre serveur.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
|
||||
apt-key add rabbitmq-signing-key-public.asc
|
||||
apt-get update
|
||||
apt-get install rabbitmq-server
|
||||
|
||||
Configuration et démarrage
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
|
||||
rabbitmq-server -detached
|
||||
|
||||
Arrêter RabbitMQ
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
rabbitmqctl stop
|
||||
|
||||
|
||||
Configurer RabbitMQ dans wallabag
|
||||
---------------------------------
|
||||
|
||||
Modifiez votre fichier ``parameters.yml`` pour éditer la configuration RabbitMQ. Celle par défaut devrait convenir :
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
|
||||
Démarrer les clients RabbitMQ
|
||||
-----------------------------
|
||||
|
||||
En fonction du service dont vous souhaitez importer vos données, vous devez activer un (ou plusieurs si vous souhaitez en supporter plusieurs) cron job :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console rabbitmq:consumer import_pocket -w
|
||||
|
||||
# for Readability import
|
||||
bin/console rabbitmq:consumer import_readability -w
|
||||
|
||||
# for Instapaper import
|
||||
bin/console rabbitmq:consumer import_instapaper -w
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v1 -w
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console rabbitmq:consumer import_wallabag_v2 -w
|
||||
|
||||
# for Firefox import
|
||||
bin/console rabbitmq:consumer import_firefox -w
|
||||
|
||||
# for Chrome import
|
||||
bin/console rabbitmq:consumer import_chrome -w
|
||||
@ -1,71 +0,0 @@
|
||||
Installer Redis pour des tâches asynchrones
|
||||
===========================================
|
||||
|
||||
Pour lancer des tâches asynchrones (utile pour des imports importants par exemple), nous pouvons utiliser Redis.
|
||||
|
||||
Pré-requis
|
||||
----------
|
||||
|
||||
Vous devez installer Redis sur votre serveur.
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. code:: bash
|
||||
|
||||
apt-get install redis-server
|
||||
|
||||
Démarrage
|
||||
~~~~~~~~~
|
||||
|
||||
Le serveur devrait déjà être démarré après l'installation. Si ce n'est pas le cas, vous pouvez le démarrer ainsi :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server
|
||||
|
||||
|
||||
Configurer Redis dans wallabag
|
||||
-------------------------------
|
||||
|
||||
Modifiez votre fichier ``parameters.yml`` pour éditer la configuration Redis. Celle par défaut devrait convenir :
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
|
||||
Démarrer les clients Redis
|
||||
--------------------------
|
||||
|
||||
En fonction du service dont vous souhaitez importer vos données, vous devez activer un (ou plusieurs si vous souhaitez en supporter plusieurs) cron job :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# for Pocket import
|
||||
bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
|
||||
|
||||
# for Readability import
|
||||
bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
|
||||
|
||||
# for Instapaper import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
|
||||
|
||||
# for wallabag v1 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
|
||||
|
||||
# for wallabag v2 import
|
||||
bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
|
||||
|
||||
# for Firefox import
|
||||
bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
|
||||
|
||||
# for Chrome import
|
||||
bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
|
||||
|
||||
Si vous souhaitez démarrer l'import pour quelques messages uniquement, vous pouvez spécifier cette valeur en paramètre (ici 12) et le client va s'arrêter après le 12ème message :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
|
||||
@ -18,11 +18,6 @@ La documentation principale de cette application est découpée en plusieurs sec
|
||||
* :ref:`user-docs`
|
||||
* :ref:`dev-docs`
|
||||
|
||||
La documentation est disponible dans d'autres langues :
|
||||
|
||||
* `Documentation in english <http://doc.wallabag.org/en/master/>`_
|
||||
* `Deutsch Dokumentation <http://doc.wallabag.org/de/master/>`_
|
||||
|
||||
.. _user-docs:
|
||||
|
||||
.. toctree::
|
||||
@ -31,8 +26,7 @@ La documentation est disponible dans d'autres langues :
|
||||
|
||||
user/faq
|
||||
user/installation
|
||||
user/upgrade-2.0.x-2.1.y
|
||||
user/upgrade-2.0.x-2.0.y
|
||||
user/upgrade
|
||||
user/migration
|
||||
user/import
|
||||
user/create_account
|
||||
@ -42,7 +36,6 @@ La documentation est disponible dans d'autres langues :
|
||||
user/errors_during_fetching
|
||||
user/annotations
|
||||
user/download_articles
|
||||
user/share
|
||||
user/filters
|
||||
user/tags
|
||||
|
||||
@ -57,5 +50,3 @@ La documentation est disponible dans d'autres langues :
|
||||
developer/documentation
|
||||
developer/translate
|
||||
developer/maintenance
|
||||
developer/redis
|
||||
developer/rabbitmq
|
||||
|
||||
@ -12,7 +12,7 @@ Il peut y avoir plusieurs raisons :
|
||||
Comment puis-je aider pour réparer ça ?
|
||||
---------------------------------------
|
||||
|
||||
- `en nous envoyant un email avec l'URL de l'article <mailto:hello@wallabag.org>`_
|
||||
- `en nous envoyant un email avec l'URL de l'article <mailto:hello\@wallabag.org>`_
|
||||
- en essayant de réparer cet article par vous-même :) en créant un fichier pour l'article.
|
||||
Vous pouvez utiliser `cet outil <http://siteconfig.fivefilters.org/>`__.
|
||||
|
||||
|
||||
@ -28,40 +28,17 @@ la section Pocket puis sur ``Se connecter à Pocket et importer les données``.
|
||||
|
||||
Vous devez autoriser wallabag à se connecter à votre compte Pocket.
|
||||
Vos données vont être importées. L'import de données est une action qui peut être couteuse
|
||||
pour votre serveur.
|
||||
|
||||
Depuis Readability
|
||||
------------------
|
||||
|
||||
Exportez vos données de Readability
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sur la page des outils (`https://www.readability.com/tools/<https://www.readability.com/tools/>`_), cliquez sur "Export your data" dans la section "Data Export". Vous allez recevoir un email avec un lien pour télécharger le json.
|
||||
|
||||
Importez vos données dans wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Cliquez sur le lien ``Importer`` dans le menu, sur ``Importer les contenus`` dans
|
||||
la section Readability et ensuite sélectionnez votre fichier json pour l'uploader.
|
||||
|
||||
Vos données vont être importées. L'import de données est une action qui peut être couteuse pour votre serveur.
|
||||
pour votre serveur (nous devons encore travailler pour améliorer cet import).
|
||||
|
||||
Depuis Instapaper
|
||||
-----------------
|
||||
|
||||
Exportez vos données de Instapaper
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*Fonctionnalité pas encore implémentée dans wallabag v2.*
|
||||
|
||||
Sur la page des paramètres (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_), cliquez sur "Download .CSV file" dans la section "Export". Un fichier CSV se téléchargera (``instapaper-export.csv``).
|
||||
|
||||
Importez vos données dans wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Cliquez sur le lien ``Importer`` dans le menu, sur ``Importer les contenus`` dans
|
||||
la section Instapaper et ensuite sélectionnez votre fichier CSV pour l'uploader.
|
||||
|
||||
Vos données vont être importées. L'import de données est une action qui peut être couteuse pour votre serveur.
|
||||
Depuis Readability
|
||||
------------------
|
||||
|
||||
*Fonctionnalité pas encore implémentée dans wallabag v2.*
|
||||
|
||||
Depuis un fichier HTML ou JSON
|
||||
------------------------------
|
||||
|
||||
@ -22,7 +22,6 @@ Vous aurez besoin des extensions suivantes pour que wallabag fonctionne. Il est
|
||||
- php-curl
|
||||
- php-gettext
|
||||
- php-tokenizer
|
||||
- php-bcmath
|
||||
|
||||
wallabag utilise PDO afin de se connecter à une base de données, donc vous aurez besoin d'une extension et d'un système de bases de données parmi :
|
||||
|
||||
@ -36,7 +35,7 @@ Installation
|
||||
Sur un serveur dédié (méthode conseillée)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
wallabag utilise un grand nombre de bibliothèques PHP pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``).
|
||||
wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``).
|
||||
|
||||
Installation de Composer :
|
||||
|
||||
@ -44,15 +43,15 @@ Installation de Composer :
|
||||
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
|
||||
Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__.
|
||||
Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__ :
|
||||
|
||||
Pour installer wallabag, vous devez exécuter ces commandes :
|
||||
Pour installer wallabag, vous devez exécuter ces deux commandes :
|
||||
|
||||
::
|
||||
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.1.1 --force
|
||||
git checkout 2.0.7
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
|
||||
@ -83,8 +82,6 @@ Exécutez cette commande pour télécharger et décompresser l'archive :
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(hash md5 de l'archive 2.1.0 : ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Maintenant, lisez la documentation ci-dessous pour crééer un virtual host. Accédez ensuite à votre installation de wallabag.
|
||||
Si vous avez changé la configuration pour modifier le type de stockage (MySQL ou PostgreSQL), vous devrez vous créer un utilisateur via la commande ``php bin/console wallabag:install --env=prod``.
|
||||
|
||||
|
||||
@ -24,6 +24,29 @@ Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance
|
||||
:alt: Import depuis wallabag v1
|
||||
:align: center
|
||||
|
||||
Import via via la ligne de commande (CLI)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
|
||||
|
||||
::
|
||||
|
||||
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
|
||||
|
||||
Remplacez les valeurs :
|
||||
|
||||
* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
|
||||
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
|
||||
|
||||
Vous obtiendrez :
|
||||
|
||||
::
|
||||
|
||||
Start : 05-04-2016 11:36:07 ---
|
||||
403 imported
|
||||
0 already saved
|
||||
End : 05-04-2016 11:36:09 ---
|
||||
|
||||
Depuis wallabag 2.x
|
||||
-------------------
|
||||
|
||||
@ -37,30 +60,3 @@ Depuis votre nouvelle instance de wallabag, créez votre compte utilisateur puis
|
||||
|
||||
.. note::
|
||||
S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.
|
||||
|
||||
Import via la ligne de commande (CLI)
|
||||
-------------------------------------
|
||||
|
||||
Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
|
||||
|
||||
::
|
||||
|
||||
bin/console wallabag:import 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
|
||||
|
||||
Remplacez les valeurs :
|
||||
|
||||
* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
|
||||
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
|
||||
|
||||
Si vous voulez marquer tous ces articles comme lus, vous pouvez ajouter l'option ``--markAsRead``.
|
||||
|
||||
Pour importer un fichier wallabag v2, vous devez ajouter l'option ``--importer=v2``.
|
||||
|
||||
Vous obtiendrez :
|
||||
|
||||
::
|
||||
|
||||
Start : 05-04-2016 11:36:07 ---
|
||||
403 imported
|
||||
0 already saved
|
||||
End : 05-04-2016 11:36:09 ---
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
Partager des articles
|
||||
=====================
|
||||
|
||||
Quand vous lisez un article, vous pouvez le partager. Cliquez sur le bouton de partage :
|
||||
|
||||
.. image:: ../../img/user/share.png
|
||||
:alt: partager un article
|
||||
:align: center
|
||||
|
||||
Vous pouvez maintenant le partager :
|
||||
|
||||
- avec une URL publique (vous obtiendrez une vue allégée de l'article)
|
||||
- avec un tweet
|
||||
- dans votre Shaarli
|
||||
- avec un message dans Diaspora*
|
||||
- sur Carrot
|
||||
- avec un email
|
||||
@ -1,66 +0,0 @@
|
||||
Mettre à jour de la 2.0.x à la 2.1.y
|
||||
====================================
|
||||
|
||||
.. warning::
|
||||
Avant cette migration, si vous aviez configuré l'import depuis Pocket en ajoutant votre consumer key dans les paramètres internes, pensez à effectuer une sauvegarde de celle-ci : vous devrez l'ajouter dans la configuration de wallabag après la mise à jour.
|
||||
|
||||
Mise à jour sur un serveur dédié
|
||||
--------------------------------
|
||||
|
||||
La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.1.1`` par le numéro de la dernière version) :
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.1.1 --force
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console doctrine:migrations:migrate --env=prod
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
Mise à jour sur un hébergement mutualisé
|
||||
----------------------------------------
|
||||
|
||||
Effectuez une sauvegarde du fichier ``app/config/parameters.yml``.
|
||||
|
||||
Téléchargez la dernière version de wallabag :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(hash md5 de l'archive 2.1.0 : ``6c33520e29cc754b687f9cee0398dede``)
|
||||
|
||||
Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
|
||||
|
||||
Nous avons ajouté de nouveaux paramètres dans cette nouvelle version. Vous devez donc éditer le fichier ``app/config/parameters.yml`` en ajoutant ces lignes (et en remplaçant par votre configuration) :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
|
||||
# Redis processing
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
|
||||
Si vous utilisez SQLite, vous devez également conserver le contenu du répertoire ``data/``.
|
||||
|
||||
Videz le répertoire ``var/cache``.
|
||||
|
||||
Vous allez devoir également exécuter des requêtes SQL pour mettre à jour votre base de données. Nous partons du principe que le préfixe de vos tables est ``wallabag_`` et que le serveur SQL est un serveur MySQL :
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
|
||||
ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
|
||||
INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
|
||||
ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
|
||||
DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
|
||||
|
||||
@ -1,17 +1,16 @@
|
||||
Mettre à jour de la 2.0.x à la 2.0.y
|
||||
====================================
|
||||
Mettre à jour wallabag
|
||||
======================
|
||||
|
||||
Mise à jour sur un serveur dédié
|
||||
--------------------------------
|
||||
|
||||
La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.0.8`` par le numéro de la dernière version) :
|
||||
La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.0.3`` par le numéro de la dernière version) :
|
||||
|
||||
::
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
git checkout 2.0.8
|
||||
git checkout 2.0.3
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console cache:clear --env=prod
|
||||
|
||||
@ -20,14 +19,12 @@ Mise à jour sur un hébergement mutualisé
|
||||
|
||||
Effectuez une sauvegarde du fichier ``app/config/parameters.yml``.
|
||||
|
||||
Téléchargez la dernière version de wallabag :
|
||||
Téléchargez la dernière version de wallabag :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
(hash md5 de l'archive 2.0.8 : ``4f84c725d1d6e3345eae0a406115e5ff``)
|
||||
|
||||
Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
|
||||
|
||||
Si vous utilisez SQLite, vous devez également conserver le contenu du répertoire ``data/``.
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
103
package.json
103
package.json
@ -1,103 +0,0 @@
|
||||
{
|
||||
"name": "wallabag",
|
||||
"version": "2.1.0",
|
||||
"description": "wallabag is a self hostable application for saving web pages",
|
||||
"main": "index.js",
|
||||
"private": true,
|
||||
"directories": {
|
||||
"doc": "docs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">0.12"
|
||||
},
|
||||
"browser": {
|
||||
"jquery": "./node_modules/jquery/dist/jquery.js",
|
||||
"jQuery": "./node_modules/jquery/dist/jquery.js",
|
||||
"materialize": "./node_modules/materialize-css/bin/materialize.js"
|
||||
},
|
||||
"browserify-shim": {
|
||||
"jquery": {
|
||||
"exports": "$"
|
||||
},
|
||||
"materialize": "materialize",
|
||||
"jquery-ui": {
|
||||
"depends": "jquery",
|
||||
"exports": null
|
||||
}
|
||||
},
|
||||
"browserify": {
|
||||
"transform": [
|
||||
"browserify-shim"
|
||||
]
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/wallabag/wallabag"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Nicolas Lœuillet",
|
||||
"email": "nicolas@loeuillet.org",
|
||||
"homepage": "http://www.cdetc.fr",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Thomas Citharel",
|
||||
"homepage": "http://tcit.fr",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Jérémy Benoist",
|
||||
"homepage": "http://www.j0k3r.net",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/wallabag/wallabag/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"annotator": "git://github.com/wallabag/annotator.git#0f076c7d371ed25eb0793346f46982d90f2c4c85",
|
||||
"autoprefixer": "^6.3.6",
|
||||
"babel-eslint": "^6.1.2",
|
||||
"babel-preset-es2015": "^6.14.0",
|
||||
"babelify": "^7.3.0",
|
||||
"browserify": "^13.0.0",
|
||||
"browserify-shim": "^3.8.12",
|
||||
"cssnano": "^3.5.2",
|
||||
"es6-promise": "^3.2.1",
|
||||
"eslint": "^3.7.1",
|
||||
"eslint-config-airbnb-base": "^8.0.0",
|
||||
"eslint-plugin-import": "^1.16.0",
|
||||
"grunt": ">=0.4.0",
|
||||
"grunt-browserify": "^5.0.0",
|
||||
"grunt-cli": "^1.2.0",
|
||||
"grunt-contrib-clean": "^1.0.0",
|
||||
"grunt-contrib-concat": "^1.0.0",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-contrib-symlink": "^1.0.0",
|
||||
"grunt-contrib-uglify": "^1.0.0",
|
||||
"grunt-eslint": "^19.0.0",
|
||||
"grunt-postcss": "^0.8.0",
|
||||
"grunt-stylelint": "^0.6.0",
|
||||
"hammerjs": "^2.0.6",
|
||||
"icomoon-free-npm": "0.0.0",
|
||||
"jquery": "^2.2.4",
|
||||
"jquery-ui-browserify": "^1.11.0-pre-seelio",
|
||||
"jquery.cookie": "^1.4.1",
|
||||
"jquery.tinydot": "^0.2.1",
|
||||
"load-grunt-tasks": "^3.4.1",
|
||||
"material-design-icons-iconfont": "^3.0.0",
|
||||
"materialize-css": "0.97.5",
|
||||
"npm": "^3.8.3",
|
||||
"pickadate": "^3.5.6",
|
||||
"pixrem": "^3.0.0",
|
||||
"postcss-cssnext": "^2.5.1",
|
||||
"prismjs": "^1.4.1",
|
||||
"ptsans-npm-webfont": "0.0.4",
|
||||
"roboto-fontface": "^0.6.0",
|
||||
"stylelint": "^7.3.1",
|
||||
"stylelint-config-standard": "^13.0.2",
|
||||
"through": "^2.3.8"
|
||||
}
|
||||
}
|
||||
@ -16,7 +16,6 @@
|
||||
<php>
|
||||
<ini name="error_reporting" value="-1" />
|
||||
<server name="KERNEL_DIR" value="app/" />
|
||||
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
|
||||
</php>
|
||||
|
||||
<filter>
|
||||
|
||||
@ -7,7 +7,7 @@ use Hateoas\Configuration\Route;
|
||||
use Hateoas\Representation\Factory\PagerfantaFactory;
|
||||
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
@ -22,38 +22,6 @@ class WallabagRestController extends FOSRestController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an entry exist by url.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* parameters={
|
||||
* {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function getEntriesExistsAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
||||
$url = $request->query->get('url', '');
|
||||
|
||||
if (empty($url)) {
|
||||
throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$user->getId());
|
||||
}
|
||||
|
||||
$res = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findByUrlAndUserId($url, $this->getUser()->getId());
|
||||
|
||||
$exists = false === $res ? false : true;
|
||||
|
||||
$json = $this->get('serializer')->serialize(['exists' => $exists], 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all entries. It could be filtered by many options.
|
||||
*
|
||||
@ -66,11 +34,10 @@ class WallabagRestController extends FOSRestController
|
||||
* {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."},
|
||||
* {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."},
|
||||
* {"name"="tags", "dataType"="string", "required"=false, "format"="api,rest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."},
|
||||
* {"name"="since", "dataType"="integer", "required"=false, "format"="default '0'", "description"="The timestamp since when you want entries updated."},
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function getEntriesAction(Request $request)
|
||||
{
|
||||
@ -82,12 +49,10 @@ class WallabagRestController extends FOSRestController
|
||||
$order = $request->query->get('order', 'desc');
|
||||
$page = (int) $request->query->get('page', 1);
|
||||
$perPage = (int) $request->query->get('perPage', 30);
|
||||
$tags = $request->query->get('tags', '');
|
||||
$since = $request->query->get('since', 0);
|
||||
|
||||
$pager = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order, $since, $tags);
|
||||
->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order);
|
||||
|
||||
$pager->setCurrentPage($page);
|
||||
$pager->setMaxPerPage($perPage);
|
||||
@ -95,25 +60,12 @@ class WallabagRestController extends FOSRestController
|
||||
$pagerfantaFactory = new PagerfantaFactory('page', 'perPage');
|
||||
$paginatedCollection = $pagerfantaFactory->createRepresentation(
|
||||
$pager,
|
||||
new Route(
|
||||
'api_get_entries',
|
||||
[
|
||||
'archive' => $isArchived,
|
||||
'starred' => $isStarred,
|
||||
'sort' => $sort,
|
||||
'order' => $order,
|
||||
'page' => $page,
|
||||
'perPage' => $perPage,
|
||||
'tags' => $tags,
|
||||
'since' => $since,
|
||||
],
|
||||
UrlGeneratorInterface::ABSOLUTE_URL
|
||||
)
|
||||
new Route('api_get_entries', [], UrlGeneratorInterface::ABSOLUTE_URL)
|
||||
);
|
||||
|
||||
$json = $this->get('serializer')->serialize($paginatedCollection, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -125,7 +77,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function getEntryAction(Entry $entry)
|
||||
{
|
||||
@ -134,7 +86,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -150,7 +102,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function postEntriesAction(Request $request)
|
||||
{
|
||||
@ -194,7 +146,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -212,7 +164,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function patchEntriesAction(Entry $entry, Request $request)
|
||||
{
|
||||
@ -245,7 +197,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -257,7 +209,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteEntriesAction(Entry $entry)
|
||||
{
|
||||
@ -270,7 +222,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -282,7 +234,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function getEntriesTagsAction(Entry $entry)
|
||||
{
|
||||
@ -291,7 +243,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry->getTags(), 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -306,7 +258,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function postEntriesTagsAction(Request $request, Entry $entry)
|
||||
{
|
||||
@ -324,7 +276,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -337,7 +289,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteEntriesTagsAction(Entry $entry, Tag $tag)
|
||||
{
|
||||
@ -351,7 +303,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -359,7 +311,7 @@ class WallabagRestController extends FOSRestController
|
||||
*
|
||||
* @ApiDoc()
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function getTagsAction()
|
||||
{
|
||||
@ -367,82 +319,11 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$tags = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Tag')
|
||||
->findAllTagsWithEntries($this->getUser()->getId());
|
||||
->findAllTags($this->getUser()->getId());
|
||||
|
||||
$json = $this->get('serializer')->serialize($tags, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove one tag from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tag", "dataType"="string", "required"=true, "requirement"="\w+", "description"="Tag as a string"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function deleteTagLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
$label = $request->request->get('tag', '');
|
||||
|
||||
$tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
|
||||
|
||||
if (empty($tag)) {
|
||||
throw $this->createNotFoundException('Tag not found');
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTag($this->getUser()->getId(), $tag);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tag, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently remove some tags from **every** entry.
|
||||
*
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="Tags as strings (comma splitted)"}
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function deleteTagsLabelAction(Request $request)
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
||||
$tagsLabels = $request->request->get('tags', '');
|
||||
|
||||
$tags = [];
|
||||
|
||||
foreach (explode(',', $tagsLabels) as $tagLabel) {
|
||||
$tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
|
||||
|
||||
if (!empty($tagEntity)) {
|
||||
$tags[] = $tagEntity;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($tags)) {
|
||||
throw $this->createNotFoundException('Tags not found');
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTags($this->getUser()->getId(), $tags);
|
||||
|
||||
$json = $this->get('serializer')->serialize($tags, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -454,7 +335,7 @@ class WallabagRestController extends FOSRestController
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function deleteTagAction(Tag $tag)
|
||||
{
|
||||
@ -466,15 +347,14 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($tag, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve version number.
|
||||
*
|
||||
* @ApiDoc()
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @return Response
|
||||
*/
|
||||
public function getVersionAction()
|
||||
{
|
||||
@ -482,7 +362,7 @@ class WallabagRestController extends FOSRestController
|
||||
|
||||
$json = $this->get('serializer')->serialize($version, 'json');
|
||||
|
||||
return (new JsonResponse())->setJson($json);
|
||||
return $this->renderJsonResponse($json);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -498,4 +378,17 @@ class WallabagRestController extends FOSRestController
|
||||
throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$user->getId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a JSON Response.
|
||||
* We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string.
|
||||
*
|
||||
* @param string $json
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function renderJsonResponse($json)
|
||||
{
|
||||
return new Response($json, 200, ['application/json']);
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,39 +18,8 @@ class Client extends BaseClient
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="name", type="text", nullable=true)
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set name.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return Client
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
|
||||
namespace Wallabag\CoreBundle\Command;
|
||||
|
||||
use FOS\UserBundle\Event\UserEvent;
|
||||
use FOS\UserBundle\FOSUserEvents;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||
use Symfony\Component\Console\Helper\Table;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
@ -63,6 +61,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
->setupDatabase()
|
||||
->setupAdmin()
|
||||
->setupConfig()
|
||||
->setupAsset()
|
||||
;
|
||||
|
||||
$output->writeln('<info>Wallabag has been successfully installed.</info>');
|
||||
@ -71,12 +70,10 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
protected function checkRequirements()
|
||||
{
|
||||
$this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>');
|
||||
$this->defaultOutput->writeln('<info><comment>Step 1 of 5.</comment> Checking system requirements.</info>');
|
||||
|
||||
$rows = [];
|
||||
|
||||
// testing if database driver exists
|
||||
$fulfilled = true;
|
||||
|
||||
$label = '<comment>PDO Driver</comment>';
|
||||
$status = '<info>OK!</info>';
|
||||
$help = '';
|
||||
@ -87,23 +84,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
$help = 'Database driver "'.$this->getContainer()->getParameter('database_driver').'" is not installed.';
|
||||
}
|
||||
|
||||
$rows[] = [$label, $status, $help];
|
||||
|
||||
// testing if connection to the database can be etablished
|
||||
$label = '<comment>Database connection</comment>';
|
||||
$status = '<info>OK!</info>';
|
||||
$help = '';
|
||||
|
||||
try {
|
||||
$this->getContainer()->get('doctrine')->getManager()->getConnection()->connect();
|
||||
} catch (\Exception $e) {
|
||||
if (false === strpos($e->getMessage(), 'Unknown database')) {
|
||||
$fulfilled = false;
|
||||
$status = '<error>ERROR!</error>';
|
||||
$help = 'Can\'t connect to the database: '.$e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
$rows = [];
|
||||
$rows[] = [$label, $status, $help];
|
||||
|
||||
foreach ($this->functionExists as $functionRequired) {
|
||||
@ -139,7 +120,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
protected function setupDatabase()
|
||||
{
|
||||
$this->defaultOutput->writeln('<info><comment>Step 2 of 4.</comment> Setting up database.</info>');
|
||||
$this->defaultOutput->writeln('<info><comment>Step 2 of 5.</comment> Setting up database.</info>');
|
||||
|
||||
// user want to reset everything? Don't care about what is already here
|
||||
if (true === $this->defaultInput->getOption('reset')) {
|
||||
@ -210,7 +191,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
protected function setupAdmin()
|
||||
{
|
||||
$this->defaultOutput->writeln('<info><comment>Step 3 of 4.</comment> Administration setup.</info>');
|
||||
$this->defaultOutput->writeln('<info><comment>Step 3 of 5.</comment> Administration setup.</info>');
|
||||
|
||||
$questionHelper = $this->getHelperSet()->get('question');
|
||||
$question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true);
|
||||
@ -238,9 +219,14 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
$em->persist($user);
|
||||
|
||||
// dispatch a created event so the associated config will be created
|
||||
$event = new UserEvent($user);
|
||||
$this->getContainer()->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event);
|
||||
$config = new Config($user);
|
||||
$config->setTheme($this->getContainer()->getParameter('wallabag_core.theme'));
|
||||
$config->setItemsPerPage($this->getContainer()->getParameter('wallabag_core.items_on_page'));
|
||||
$config->setRssLimit($this->getContainer()->getParameter('wallabag_core.rss_limit'));
|
||||
$config->setReadingSpeed($this->getContainer()->getParameter('wallabag_core.reading_speed'));
|
||||
$config->setLanguage($this->getContainer()->getParameter('wallabag_core.language'));
|
||||
|
||||
$em->persist($config);
|
||||
|
||||
$this->defaultOutput->writeln('');
|
||||
|
||||
@ -249,18 +235,13 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
protected function setupConfig()
|
||||
{
|
||||
$this->defaultOutput->writeln('<info><comment>Step 4 of 4.</comment> Config setup.</info>');
|
||||
$this->defaultOutput->writeln('<info><comment>Step 4 of 5.</comment> Config setup.</info>');
|
||||
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
|
||||
|
||||
// cleanup before insert new stuff
|
||||
$em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute();
|
||||
|
||||
$settings = [
|
||||
[
|
||||
'name' => 'share_public',
|
||||
'value' => '1',
|
||||
'section' => 'entry',
|
||||
],
|
||||
[
|
||||
'name' => 'carrot',
|
||||
'value' => '1',
|
||||
@ -332,13 +313,8 @@ class InstallCommand extends ContainerAwareCommand
|
||||
'section' => 'export',
|
||||
],
|
||||
[
|
||||
'name' => 'import_with_redis',
|
||||
'value' => '0',
|
||||
'section' => 'import',
|
||||
],
|
||||
[
|
||||
'name' => 'import_with_rabbitmq',
|
||||
'value' => '0',
|
||||
'name' => 'pocket_consumer_key',
|
||||
'value' => null,
|
||||
'section' => 'import',
|
||||
],
|
||||
[
|
||||
@ -398,6 +374,20 @@ class InstallCommand extends ContainerAwareCommand
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function setupAsset()
|
||||
{
|
||||
$this->defaultOutput->writeln('<info><comment>Step 5 of 5.</comment> Installing assets.</info>');
|
||||
|
||||
$this
|
||||
->runCommand('assets:install')
|
||||
->runCommand('assetic:dump')
|
||||
;
|
||||
|
||||
$this->defaultOutput->writeln('');
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run a command.
|
||||
*
|
||||
@ -466,7 +456,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
}
|
||||
|
||||
// custom verification for sqlite, since `getListDatabasesSQL` doesn't work for sqlite
|
||||
if ('sqlite' === $schemaManager->getDatabasePlatform()->getName()) {
|
||||
if ('sqlite' == $schemaManager->getDatabasePlatform()->getName()) {
|
||||
$params = $this->getContainer()->get('doctrine.dbal.default_connection')->getParams();
|
||||
|
||||
if (isset($params['path']) && file_exists($params['path'])) {
|
||||
|
||||
@ -11,6 +11,7 @@ use Wallabag\CoreBundle\Entity\Config;
|
||||
use Wallabag\CoreBundle\Entity\TaggingRule;
|
||||
use Wallabag\CoreBundle\Form\Type\ConfigType;
|
||||
use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
|
||||
use Wallabag\CoreBundle\Form\Type\NewUserType;
|
||||
use Wallabag\CoreBundle\Form\Type\RssType;
|
||||
use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
|
||||
use Wallabag\CoreBundle\Form\Type\UserInformationType;
|
||||
@ -105,21 +106,7 @@ class ConfigController extends Controller
|
||||
|
||||
// handle tagging rule
|
||||
$taggingRule = new TaggingRule();
|
||||
$action = $this->generateUrl('config').'#set5';
|
||||
|
||||
if ($request->query->has('tagging-rule')) {
|
||||
$taggingRule = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:TaggingRule')
|
||||
->find($request->query->get('tagging-rule'));
|
||||
|
||||
if ($this->getUser()->getId() !== $taggingRule->getConfig()->getUser()->getId()) {
|
||||
return $this->redirect($action);
|
||||
}
|
||||
|
||||
$action = $this->generateUrl('config').'?tagging-rule='.$taggingRule->getId().'#set5';
|
||||
}
|
||||
|
||||
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $action]);
|
||||
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']);
|
||||
$newTaggingRule->handleRequest($request);
|
||||
|
||||
if ($newTaggingRule->isValid()) {
|
||||
@ -135,12 +122,45 @@ class ConfigController extends Controller
|
||||
return $this->redirect($this->generateUrl('config').'#set5');
|
||||
}
|
||||
|
||||
// handle adding new user
|
||||
$newUser = $userManager->createUser();
|
||||
// enable created user by default
|
||||
$newUser->setEnabled(true);
|
||||
$newUserForm = $this->createForm(NewUserType::class, $newUser, [
|
||||
'validation_groups' => ['Profile'],
|
||||
'action' => $this->generateUrl('config').'#set6',
|
||||
]);
|
||||
$newUserForm->handleRequest($request);
|
||||
|
||||
if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
|
||||
$userManager->updateUser($newUser, true);
|
||||
|
||||
$config = new Config($newUser);
|
||||
$config->setTheme($this->getParameter('wallabag_core.theme'));
|
||||
$config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page'));
|
||||
$config->setRssLimit($this->getParameter('wallabag_core.rss_limit'));
|
||||
$config->setLanguage($this->getParameter('wallabag_core.language'));
|
||||
$config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed'));
|
||||
|
||||
$em->persist($config);
|
||||
|
||||
$em->flush();
|
||||
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$this->get('translator')->trans('flashes.config.notice.user_added', ['%username%' => $newUser->getUsername()])
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('config').'#set6');
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Config:index.html.twig', [
|
||||
'form' => [
|
||||
'config' => $configForm->createView(),
|
||||
'rss' => $rssForm->createView(),
|
||||
'pwd' => $pwdForm->createView(),
|
||||
'user' => $userForm->createView(),
|
||||
'new_user' => $newUserForm->createView(),
|
||||
'new_tagging_rule' => $newTaggingRule->createView(),
|
||||
],
|
||||
'rss' => [
|
||||
@ -190,7 +210,9 @@ class ConfigController extends Controller
|
||||
*/
|
||||
public function deleteTaggingRuleAction(TaggingRule $rule)
|
||||
{
|
||||
$this->validateRuleAction($rule);
|
||||
if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
|
||||
throw $this->createAccessDeniedException('You can not access this tagging rule.');
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->remove($rule);
|
||||
@ -204,34 +226,6 @@ class ConfigController extends Controller
|
||||
return $this->redirect($this->generateUrl('config').'#set5');
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a tagging rule.
|
||||
*
|
||||
* @param TaggingRule $rule
|
||||
*
|
||||
* @Route("/tagging-rule/edit/{id}", requirements={"id" = "\d+"}, name="edit_tagging_rule")
|
||||
*
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
public function editTaggingRuleAction(TaggingRule $rule)
|
||||
{
|
||||
$this->validateRuleAction($rule);
|
||||
|
||||
return $this->redirect($this->generateUrl('config').'?tagging-rule='.$rule->getId().'#set5');
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a rule can be edited/deleted by the current user.
|
||||
*
|
||||
* @param TaggingRule $rule
|
||||
*/
|
||||
private function validateRuleAction(TaggingRule $rule)
|
||||
{
|
||||
if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
|
||||
throw $this->createAccessDeniedException('You can not access this tagging rule.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve config for the current user.
|
||||
* If no config were found, create a new one.
|
||||
@ -244,7 +238,6 @@ class ConfigController extends Controller
|
||||
->getRepository('WallabagCoreBundle:Config')
|
||||
->findOneByUser($this->getUser());
|
||||
|
||||
// should NEVER HAPPEN ...
|
||||
if (!$config) {
|
||||
$config = new Config($this->getUser());
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@ class DeveloperController extends Controller
|
||||
{
|
||||
$clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll();
|
||||
|
||||
return $this->render('@WallabagCore/themes/common/Developer/index.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:index.html.twig', [
|
||||
'clients' => $clients,
|
||||
]);
|
||||
}
|
||||
@ -49,17 +49,16 @@ class DeveloperController extends Controller
|
||||
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$this->get('translator')->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()])
|
||||
'flashes.developer.notice.client_created'
|
||||
);
|
||||
|
||||
return $this->render('@WallabagCore/themes/common/Developer/client_parameters.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', [
|
||||
'client_id' => $client->getPublicId(),
|
||||
'client_secret' => $client->getSecret(),
|
||||
'client_name' => $client->getName(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->render('@WallabagCore/themes/common/Developer/client.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:client.html.twig', [
|
||||
'form' => $clientForm->createView(),
|
||||
]);
|
||||
}
|
||||
@ -81,7 +80,7 @@ class DeveloperController extends Controller
|
||||
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$this->get('translator')->trans('flashes.developer.notice.client_deleted', ['%name%' => $client->getName()])
|
||||
'flashes.developer.notice.client_deleted'
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('developer'));
|
||||
@ -96,6 +95,6 @@ class DeveloperController extends Controller
|
||||
*/
|
||||
public function howtoFirstAppAction()
|
||||
{
|
||||
return $this->render('@WallabagCore/themes/common/Developer/howto_app.html.twig');
|
||||
return $this->render('WallabagCoreBundle:Developer:howto_app.html.twig');
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ namespace Wallabag\CoreBundle\Controller;
|
||||
|
||||
use Pagerfanta\Adapter\DoctrineORMAdapter;
|
||||
use Pagerfanta\Exception\OutOfRangeCurrentPageException;
|
||||
use Pagerfanta\Pagerfanta;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@ -12,40 +13,30 @@ use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Form\Type\EntryFilterType;
|
||||
use Wallabag\CoreBundle\Form\Type\EditEntryType;
|
||||
use Wallabag\CoreBundle\Form\Type\NewEntryType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
||||
|
||||
class EntryController extends Controller
|
||||
{
|
||||
/**
|
||||
* Fetch content and update entry.
|
||||
* In case it fails, entry will return to avod loosing the data.
|
||||
*
|
||||
* @param Entry $entry
|
||||
* @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded
|
||||
*
|
||||
* @return Entry
|
||||
* @param Entry $entry
|
||||
*/
|
||||
private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved')
|
||||
private function updateEntry(Entry $entry)
|
||||
{
|
||||
// put default title in case of fetching content failed
|
||||
$entry->setTitle('No title found');
|
||||
|
||||
$message = 'flashes.entry.notice.'.$prefixMessage;
|
||||
|
||||
try {
|
||||
$entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl());
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
} catch (\Exception $e) {
|
||||
$this->get('logger')->error('Error while saving an entry', [
|
||||
'exception' => $e,
|
||||
'entry' => $entry,
|
||||
]);
|
||||
|
||||
$message = 'flashes.entry.notice.'.$prefixMessage.'_failed';
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->get('session')->getFlashBag()->add('notice', $message);
|
||||
|
||||
return $entry;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -75,11 +66,12 @@ class EntryController extends Controller
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
|
||||
}
|
||||
|
||||
$this->updateEntry($entry);
|
||||
$message = 'flashes.entry.notice.entry_saved';
|
||||
if (false === $this->updateEntry($entry)) {
|
||||
$message = 'flashes.entry.notice.entry_saved_failed';
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
$this->get('session')->getFlashBag()->add('notice', $message);
|
||||
|
||||
return $this->redirect($this->generateUrl('homepage'));
|
||||
}
|
||||
@ -103,10 +95,6 @@ class EntryController extends Controller
|
||||
|
||||
if (false === $this->checkIfEntryAlreadyExists($entry)) {
|
||||
$this->updateEntry($entry);
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
return $this->redirect($this->generateUrl('homepage'));
|
||||
@ -238,10 +226,6 @@ class EntryController extends Controller
|
||||
$repository = $this->get('wallabag_core.entry_repository');
|
||||
|
||||
switch ($type) {
|
||||
case 'untagged':
|
||||
$qb = $repository->getBuilderForUntaggedByUser($this->getUser()->getId());
|
||||
|
||||
break;
|
||||
case 'starred':
|
||||
$qb = $repository->getBuilderForStarredByUser($this->getUser()->getId());
|
||||
break;
|
||||
@ -273,10 +257,9 @@ class EntryController extends Controller
|
||||
}
|
||||
|
||||
$pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
|
||||
$entries = new Pagerfanta($pagerAdapter);
|
||||
|
||||
$entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
|
||||
->prepare($pagerAdapter, $page);
|
||||
|
||||
$entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
|
||||
try {
|
||||
$entries->setCurrentPage($page);
|
||||
} catch (OutOfRangeCurrentPageException $e) {
|
||||
@ -328,11 +311,15 @@ class EntryController extends Controller
|
||||
{
|
||||
$this->checkUserAction($entry);
|
||||
|
||||
$this->updateEntry($entry, 'entry_reloaded');
|
||||
$message = 'flashes.entry.notice.entry_reloaded';
|
||||
if (false === $this->updateEntry($entry)) {
|
||||
$message = 'flashes.entry.notice.entry_reload_failed';
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$message
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
|
||||
}
|
||||
@ -447,7 +434,7 @@ class EntryController extends Controller
|
||||
*/
|
||||
private function checkUserAction(Entry $entry)
|
||||
{
|
||||
if (null === $this->getUser() || $this->getUser()->getId() != $entry->getUser()->getId()) {
|
||||
if ($this->getUser()->getId() != $entry->getUser()->getId()) {
|
||||
throw $this->createAccessDeniedException('You can not access this entry.');
|
||||
}
|
||||
}
|
||||
@ -463,91 +450,4 @@ class EntryController extends Controller
|
||||
{
|
||||
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get public URL for entry (and generate it if necessary).
|
||||
*
|
||||
* @param Entry $entry
|
||||
*
|
||||
* @Route("/share/{id}", requirements={"id" = "\d+"}, name="share")
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function shareAction(Entry $entry)
|
||||
{
|
||||
$this->checkUserAction($entry);
|
||||
|
||||
if (null === $entry->getUuid()) {
|
||||
$entry->generateUuid();
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
return $this->redirect($this->generateUrl('share_entry', [
|
||||
'uuid' => $entry->getUuid(),
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable public sharing for an entry.
|
||||
*
|
||||
* @param Entry $entry
|
||||
*
|
||||
* @Route("/share/delete/{id}", requirements={"id" = "\d+"}, name="delete_share")
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function deleteShareAction(Entry $entry)
|
||||
{
|
||||
$this->checkUserAction($entry);
|
||||
|
||||
$entry->cleanUuid();
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('view', [
|
||||
'id' => $entry->getId(),
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ability to view a content publicly.
|
||||
*
|
||||
* @param Entry $entry
|
||||
*
|
||||
* @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry")
|
||||
* @Cache(maxage="25200", smaxage="25200", public=true)
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function shareEntryAction(Entry $entry)
|
||||
{
|
||||
if (!$this->get('craue_config')->get('share_public')) {
|
||||
throw $this->createAccessDeniedException('Sharing an entry is disabled for this user.');
|
||||
}
|
||||
|
||||
return $this->render(
|
||||
'@WallabagCore/themes/common/Entry/share.html.twig',
|
||||
['entry' => $entry]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows untagged articles for current user.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $page
|
||||
*
|
||||
* @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"})
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function showUntaggedEntriesAction(Request $request, $page)
|
||||
{
|
||||
return $this->showEntries('untagged', $request, $page);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Wallabag\CoreBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
/**
|
||||
* This controller allow us to customize the error template.
|
||||
* The only modified line from the parent template is for "WallabagCoreBundle".
|
||||
*/
|
||||
class ExceptionController extends BaseExceptionController
|
||||
{
|
||||
protected function findTemplate(Request $request, $format, $code, $showException)
|
||||
{
|
||||
$name = $showException ? 'exception' : 'error';
|
||||
if ($showException && 'html' == $format) {
|
||||
$name = 'exception_full';
|
||||
}
|
||||
|
||||
// For error pages, try to find a template for the specific HTTP status code and format
|
||||
if (!$showException) {
|
||||
$template = sprintf('WallabagCoreBundle:Exception:%s.%s.twig', $name, $format);
|
||||
if ($this->templateExists($template)) {
|
||||
return $template;
|
||||
}
|
||||
}
|
||||
|
||||
// try to find a template for the given format
|
||||
$template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format);
|
||||
if ($this->templateExists($template)) {
|
||||
return $template;
|
||||
}
|
||||
|
||||
// default to a generic HTML exception
|
||||
$request->setRequestFormat('html');
|
||||
|
||||
return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name);
|
||||
}
|
||||
}
|
||||
@ -46,7 +46,7 @@ class ExportController extends Controller
|
||||
*
|
||||
* @Route("/export/{category}.{format}", name="export_entries", requirements={
|
||||
* "format": "epub|mobi|pdf|json|xml|txt|csv",
|
||||
* "category": "all|unread|starred|archive|tag_entries|untagged"
|
||||
* "category": "all|unread|starred|archive"
|
||||
* })
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
|
||||
27
src/Wallabag/CoreBundle/Controller/FooterController.php
Normal file
27
src/Wallabag/CoreBundle/Controller/FooterController.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Wallabag\CoreBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
|
||||
class FooterController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the footer.
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function indexAction()
|
||||
{
|
||||
$addonsUrl = $this->container->getParameter('addons_url');
|
||||
$socialsUrl = $this->container->getParameter('socials_url');
|
||||
|
||||
return $this->render(
|
||||
'WallabagCoreBundle::footer.html.twig',
|
||||
[
|
||||
'addonsUrl' => $addonsUrl,
|
||||
'socialsUrl' => $socialsUrl,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -87,7 +87,7 @@ class RssController extends Controller
|
||||
$perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
|
||||
$entries->setMaxPerPage($perPage);
|
||||
|
||||
return $this->render('@WallabagCore/themes/common/Entry/entries.xml.twig', [
|
||||
return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', [
|
||||
'type' => $type,
|
||||
'entries' => $entries,
|
||||
]);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user