Compare commits
1 Commits
upgrade-ma
...
2.3.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 79ad373d33 |
@ -9,15 +9,9 @@ indent_size = 4
|
|||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.{js,css,scss}]
|
[*.{js,css}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[*akefile]
|
[Makefile]
|
||||||
indent_style = tab
|
|
||||||
|
|
||||||
[.github/**.yml]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[phpstan-baseline.neon]
|
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
|
|||||||
@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
"extends": "airbnb-base",
|
"extends": "airbnb-base",
|
||||||
"parser": "@babel/eslint-parser",
|
"parser": "babel-eslint",
|
||||||
"parserOptions": {
|
|
||||||
"requireConfigFile": false
|
|
||||||
},
|
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"es6": true
|
"es6": true
|
||||||
|
|||||||
7
.gitattributes
vendored
@ -1,7 +0,0 @@
|
|||||||
/.editorconfig export-ignore
|
|
||||||
/.gitattributes export-ignore
|
|
||||||
/.github export-ignore
|
|
||||||
/.gitignore export-ignore
|
|
||||||
/phpstan.neon export-ignore
|
|
||||||
/phpunit.xml.dist export-ignore
|
|
||||||
/tests export-ignore
|
|
||||||
50
.github/CONTRIBUTING.md
vendored
@ -1,61 +1,13 @@
|
|||||||
# How to contribute
|
# How to contribute
|
||||||
|
|
||||||
## Test it locally
|
|
||||||
|
|
||||||
### Using Docker
|
|
||||||
|
|
||||||
- Clone the repository
|
|
||||||
- Ensure your Docker daemon is running
|
|
||||||
- Copy `docker/php/env.example` to `docker/php/env` and customize
|
|
||||||
- Launch `docker compose run --rm php composer install` to bootstrap php dependencies
|
|
||||||
- Launch `docker compose run --rm php bin/console wallabag:install` to bootstrap your installation
|
|
||||||
- Launch `docker compose run --rm php yarn install` to bootstrap dependencies for the frontend
|
|
||||||
- Launch `docker compose run --rm php yarn build:dev` to build assets for the frontend
|
|
||||||
- Launch `docker compose up -d` to start the stack
|
|
||||||
|
|
||||||
You'll then have:
|
|
||||||
- a PHP daemon with standalone web server
|
|
||||||
- a Redis database (to handle imports)
|
|
||||||
- a SQLite database to store articles
|
|
||||||
|
|
||||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
|
||||||
|
|
||||||
If you want to test using an other database than SQLite, uncomment the `postgres` or `mariadb` code from the `compose.yaml` file at the root of the repo. Also uncomment related line in the `php` section so the database will be linked to your PHP instance.
|
|
||||||
|
|
||||||
### Using your own PHP server
|
|
||||||
|
|
||||||
- Ensure you are running PHP >= 7.4.
|
|
||||||
- Clone the repository
|
|
||||||
- Launch `composer install`
|
|
||||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
|
||||||
- Then `php bin/console wallabag:install`
|
|
||||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
|
||||||
- Run `php bin/console server:run`
|
|
||||||
|
|
||||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
|
||||||
|
|
||||||
## You found a bug
|
## You found a bug
|
||||||
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
|
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
|
||||||
|
|
||||||
To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
|
To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
|
||||||
|
|
||||||
If you have the skills, look for errors into PHP, server and application logs (see `var/logs`).
|
If you have the skills, look for errors into php, server and application (see `var/logs`) logs.
|
||||||
|
|
||||||
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
|
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
|
||||||
|
|
||||||
## You want to fix a bug or to add a feature
|
## You want to fix a bug or to add a feature
|
||||||
Please fork wallabag and work with **the master branch**.
|
Please fork wallabag and work with **the master branch**.
|
||||||
|
|
||||||
## Run Tests and PHP formatter
|
|
||||||
|
|
||||||
All pull requests need to pass the tests and the code needs match the style guide.
|
|
||||||
|
|
||||||
To run the tests locally run `make test`.
|
|
||||||
|
|
||||||
To run the PHP formatter run `make fix-cs`.
|
|
||||||
|
|
||||||
To run the PHPStan static analysis run `make phpstan`.
|
|
||||||
|
|
||||||
To run the JS linter run `make lint-js`.
|
|
||||||
|
|
||||||
To run the SCSS linter run `make lint-scss`.
|
|
||||||
|
|||||||
2
.github/FUNDING.yml
vendored
@ -1,2 +0,0 @@
|
|||||||
# github: [nicosomb, j0k3r, tcitworld, Kdecherf]
|
|
||||||
liberapay: wallabag
|
|
||||||
21
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
:warning: If your issue is about an error during fetching a link, please read: http://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that
|
||||||
|
|
||||||
|
### Issue details
|
||||||
|
|
||||||
|
Please provide issue details here.
|
||||||
|
Remember, this is _not_ a place to ask questions. For that, go to https://community.wallabag.org/ (forum) or http://gitter.im/wallabag/wallabag (chat).
|
||||||
|
|
||||||
|
### Environment
|
||||||
|
|
||||||
|
* wallabag version (or git revision) that exhibits the issue:
|
||||||
|
* How did you install wallabag? Via `git clone` or by downloading the package?
|
||||||
|
* Last wallabag version that did not exhibit the issue (if applicable):
|
||||||
|
* php version:
|
||||||
|
* OS:
|
||||||
|
* type of hosting (shared or dedicated):
|
||||||
|
* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL):
|
||||||
|
|
||||||
|
### Steps to reproduce/test case
|
||||||
|
|
||||||
|
Please provide necessary steps for reproduction of this issue, or better the
|
||||||
|
reduced test case (without any external dependencies, if possible).
|
||||||
30
.github/ISSUE_TEMPLATE/1-fetching-content.md
vendored
@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
name: Fetching content
|
|
||||||
about: If wallabag can't extract content for an URL
|
|
||||||
title: Wrong display in wallabag (HOST)
|
|
||||||
labels: Site Config
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Thank you for reporting a fetching issue.
|
|
||||||
|
|
||||||
Please fill in as much of the template below as you're able.
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Before submitting the issue, please read:**
|
|
||||||
If wallabag can't parse / extract content for a given link, please first read the documentation about it:
|
|
||||||
http://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that
|
|
||||||
|
|
||||||
We have a lot of requests about fetching config issue. It'll help us A LOT if you give a try to fix it on your own following the doc.
|
|
||||||
If you failed to fix it yourself, tick the following boxes:
|
|
||||||
- [ ] I've tried myself without success
|
|
||||||
- [ ] I've replaced `HOST` in the issue title with the host of the URL that can't be fetched (ie: `nytimes.com`, `20minutes.fr`, `bbc.com`, etc.)
|
|
||||||
|
|
||||||
**Content related:**
|
|
||||||
- URL: [full url of the content]
|
|
||||||
- wallabag version: [e.g. 2.4.0]
|
|
||||||
|
|
||||||
**Describe what's wrong:**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
43
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
@ -1,43 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Thank you for reporting an issue.
|
|
||||||
|
|
||||||
Please fill in as much of the template below as you're able.
|
|
||||||
|
|
||||||
Version: if you know it, otherwise use the git revision
|
|
||||||
Installation: How did you install wallabag? Using git clone, the docker image, an installer, downloading the package, etc.
|
|
||||||
PHP version: The version of PHP you are using
|
|
||||||
OS: The host running wallabag
|
|
||||||
Database: The storage system your instance is using (SQLite, MySQL/MariaDB or PostgreSQL) with the version
|
|
||||||
Parameters: Paste the content of your app/config/parameters.yml (hide sensitive stuff if you want)
|
|
||||||
-->
|
|
||||||
### Environment
|
|
||||||
|
|
||||||
* **Version**:
|
|
||||||
* **Installation**:
|
|
||||||
* **PHP version**:
|
|
||||||
* **OS**:
|
|
||||||
* **Database**:
|
|
||||||
* **Parameters**:
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>My <code>app/config/parameters.yml</code> is:</summary>
|
|
||||||
|
|
||||||
```
|
|
||||||
PASTE HERE
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### What steps will reproduce the bug?
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Enter details about your bug and how to reproduce it
|
|
||||||
-->
|
|
||||||
26
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: Feature
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Thank you for suggesting an idea to make wallabag better.
|
|
||||||
|
|
||||||
Please fill in as much of the template below as you're able.
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Want to ask something?
|
|
||||||
url: https://matrix.to/#/#wallabag:matrix.org
|
|
||||||
about: Use Matrix to ask questions.
|
|
||||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -8,15 +8,9 @@
|
|||||||
| Documentation | yes/no
|
| Documentation | yes/no
|
||||||
| Translation | yes/no
|
| Translation | yes/no
|
||||||
| CHANGELOG.md | yes/no
|
| CHANGELOG.md | yes/no
|
||||||
|
| Fixed tickets | #...
|
||||||
| License | MIT
|
| License | MIT
|
||||||
|
|
||||||
<!--
|
|
||||||
Please list the issues your PR fixes using special keywords, see
|
|
||||||
https://help.github.com/articles/closing-issues-using-keywords/
|
|
||||||
|
|
||||||
Fixes #…
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
- Please fill in this template according to the PR you're about to submit.
|
- Please fill in this template according to the PR you're about to submit.
|
||||||
- Replace this comment by a description of what your PR is solving.
|
- Replace this comment by a description of what your PR is solving.
|
||||||
|
|||||||
56
.github/dependabot.yml
vendored
@ -1,56 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
time: "04:00"
|
|
||||||
timezone: Europe/Paris
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
groups:
|
|
||||||
babel-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "*babel*"
|
|
||||||
fontsource-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "*fontsource*"
|
|
||||||
ignore:
|
|
||||||
- dependency-name: @materializecss/materialize
|
|
||||||
versions:
|
|
||||||
- "> 1.2.2"
|
|
||||||
- package-ecosystem: composer
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "04:00"
|
|
||||||
timezone: Europe/Paris
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
groups:
|
|
||||||
symfony-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "symfony/*"
|
|
||||||
twig-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "twig/*"
|
|
||||||
phpstan-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "phpstan/*"
|
|
||||||
reviewers:
|
|
||||||
- j0k3r
|
|
||||||
- yguedidi
|
|
||||||
- Kdecherf
|
|
||||||
ignore:
|
|
||||||
- dependency-name: lcobucci/jwt
|
|
||||||
versions:
|
|
||||||
- ">= 4.2.0"
|
|
||||||
# until we add support for Symfony 5+
|
|
||||||
- dependency-name: symfony/*
|
|
||||||
versions:
|
|
||||||
- ">= 5.0.0"
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
time: "04:00"
|
|
||||||
timezone: Europe/Paris
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
BIN
.github/images/screenshot.png
vendored
|
Before Width: | Height: | Size: 837 KiB |
7
.github/release.yml
vendored
@ -1,7 +0,0 @@
|
|||||||
changelog:
|
|
||||||
exclude:
|
|
||||||
labels:
|
|
||||||
- Dependencies
|
|
||||||
authors:
|
|
||||||
- dependabot
|
|
||||||
- weblate
|
|
||||||
90
.github/workflows/coding-standards.yml
vendored
@ -1,90 +0,0 @@
|
|||||||
name: "CS"
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- "2.**"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
coding-standards:
|
|
||||||
name: "CS Fixer, PHPStan & TwigCS"
|
|
||||||
runs-on: "ubuntu-20.04"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
coverage: "none"
|
|
||||||
php-version: "7.4"
|
|
||||||
tools: cs2pr, pecl
|
|
||||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
env:
|
|
||||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: "Install Node"
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: "Setup MySQL"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start mysql.service
|
|
||||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
|
||||||
cp app/config/tests/parameters_test.mysql.yml app/config/parameters_test.yml
|
|
||||||
|
|
||||||
- name: "Install dependencies with Composer"
|
|
||||||
id: composer-install
|
|
||||||
uses: "ramsey/composer-install@v3"
|
|
||||||
with:
|
|
||||||
composer-options: "--optimize-autoloader --prefer-dist"
|
|
||||||
|
|
||||||
- name: "Install dependencies with Yarn"
|
|
||||||
id: yarn-install
|
|
||||||
run: yarn install
|
|
||||||
|
|
||||||
- name: "Run Composer validate"
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "composer validate"
|
|
||||||
|
|
||||||
- name: "Run Composer dependency analyser"
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "bin/composer-dependency-analyser"
|
|
||||||
|
|
||||||
- name: "Run PHP CS Fixer"
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "bin/php-cs-fixer fix --verbose --dry-run --format=checkstyle | cs2pr"
|
|
||||||
|
|
||||||
- name: "Generate test cache for PHPStan"
|
|
||||||
id: test-cache
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "php bin/console cache:clear --env=test"
|
|
||||||
|
|
||||||
- name: "Run PHPStan"
|
|
||||||
if: always() && steps.test-cache.outcome == 'success'
|
|
||||||
run: "php bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr"
|
|
||||||
|
|
||||||
- name: "Run TwigCS"
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle app/ src/ | cs2pr"
|
|
||||||
|
|
||||||
- name: "Run ergebnis/composer-normalize"
|
|
||||||
if: always() && steps.composer-install.outcome == 'success'
|
|
||||||
run: "composer normalize --dry-run --no-check-lock"
|
|
||||||
|
|
||||||
- name: "Run ESLint"
|
|
||||||
if: always() && steps.yarn-install.outcome == 'success'
|
|
||||||
run: "yarn lint:js"
|
|
||||||
|
|
||||||
- name: "Run Stylelint"
|
|
||||||
if: always() && steps.yarn-install.outcome == 'success'
|
|
||||||
run: "yarn lint:scss"
|
|
||||||
241
.github/workflows/continuous-integration.yml
vendored
@ -1,241 +0,0 @@
|
|||||||
name: "CI"
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- "2.**"
|
|
||||||
|
|
||||||
env:
|
|
||||||
# Force disabling the reporting of Doctrine deprecation notices for now
|
|
||||||
DOCTRINE_DEPRECATIONS: none
|
|
||||||
PGPASSWORD: wallabagrocks
|
|
||||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
phpunit:
|
|
||||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }}"
|
|
||||||
runs-on: "ubuntu-20.04"
|
|
||||||
services:
|
|
||||||
rabbitmq:
|
|
||||||
image: rabbitmq:3-alpine
|
|
||||||
ports:
|
|
||||||
- 5672:5672
|
|
||||||
redis:
|
|
||||||
image: redis:6-alpine
|
|
||||||
ports:
|
|
||||||
- 6379:6379
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php:
|
|
||||||
- "7.4"
|
|
||||||
- "8.0"
|
|
||||||
- "8.1"
|
|
||||||
- "8.2"
|
|
||||||
- "8.3"
|
|
||||||
- "8.4"
|
|
||||||
database:
|
|
||||||
- "sqlite"
|
|
||||||
- "mysql"
|
|
||||||
- "pgsql"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
php-version: "${{ matrix.php }}"
|
|
||||||
coverage: none
|
|
||||||
tools: pecl
|
|
||||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
|
|
||||||
- name: "Install Node"
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: "Setup MySQL"
|
|
||||||
if: "${{ matrix.database == 'mysql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start mysql.service
|
|
||||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
|
||||||
|
|
||||||
- name: "Setup PostgreSQL"
|
|
||||||
if: "${{ matrix.database == 'pgsql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start postgresql
|
|
||||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
|
||||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
|
||||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
|
||||||
|
|
||||||
- name: "Install dependencies with Composer"
|
|
||||||
uses: "ramsey/composer-install@v3"
|
|
||||||
with:
|
|
||||||
composer-options: "--optimize-autoloader --prefer-dist"
|
|
||||||
|
|
||||||
- name: "Install dependencies with Yarn"
|
|
||||||
run: yarn install
|
|
||||||
|
|
||||||
- name: "Build assets with Yarn"
|
|
||||||
run: yarn build:dev
|
|
||||||
|
|
||||||
- name: "Prepare database configuration"
|
|
||||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
|
||||||
|
|
||||||
- name: "Run PHPUnit"
|
|
||||||
run: "php bin/phpunit -v"
|
|
||||||
|
|
||||||
phpunit_no_prefix:
|
|
||||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without prefix"
|
|
||||||
runs-on: "ubuntu-20.04"
|
|
||||||
services:
|
|
||||||
rabbitmq:
|
|
||||||
image: rabbitmq:3-alpine
|
|
||||||
ports:
|
|
||||||
- 5672:5672
|
|
||||||
redis:
|
|
||||||
image: redis:6-alpine
|
|
||||||
ports:
|
|
||||||
- 6379:6379
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: true
|
|
||||||
matrix:
|
|
||||||
php:
|
|
||||||
- "8.2"
|
|
||||||
database:
|
|
||||||
- "sqlite"
|
|
||||||
- "mysql"
|
|
||||||
- "pgsql"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
php-version: "${{ matrix.php }}"
|
|
||||||
coverage: none
|
|
||||||
tools: pecl
|
|
||||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
|
|
||||||
- name: "Install Node"
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: "Remove database prefix"
|
|
||||||
run: |
|
|
||||||
pip install --user yq
|
|
||||||
yq -Y --in-place '.parameters.database_table_prefix = ""' app/config/parameters.yml.dist
|
|
||||||
|
|
||||||
- name: "Setup MySQL"
|
|
||||||
if: "${{ matrix.database == 'mysql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start mysql.service
|
|
||||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
|
||||||
|
|
||||||
- name: "Setup PostgreSQL"
|
|
||||||
if: "${{ matrix.database == 'pgsql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start postgresql
|
|
||||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
|
||||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
|
||||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
|
||||||
|
|
||||||
- name: "Install dependencies with Composer"
|
|
||||||
uses: "ramsey/composer-install@v3"
|
|
||||||
with:
|
|
||||||
composer-options: "--optimize-autoloader --prefer-dist"
|
|
||||||
|
|
||||||
- name: "Install dependencies with Yarn"
|
|
||||||
run: yarn install
|
|
||||||
|
|
||||||
- name: "Build assets with Yarn"
|
|
||||||
run: yarn build:dev
|
|
||||||
|
|
||||||
- name: "Prepare database configuration"
|
|
||||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
|
||||||
|
|
||||||
- name: "Run PHPUnit"
|
|
||||||
run: "php bin/phpunit -v"
|
|
||||||
|
|
||||||
phpunit-without-rmq-redis:
|
|
||||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without Rabbit & Redis"
|
|
||||||
runs-on: "ubuntu-20.04"
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php:
|
|
||||||
- "8.3"
|
|
||||||
database:
|
|
||||||
- "sqlite"
|
|
||||||
- "mysql"
|
|
||||||
- "pgsql"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
php-version: "${{ matrix.php }}"
|
|
||||||
coverage: none
|
|
||||||
tools: pecl
|
|
||||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
|
|
||||||
- name: "Install Node"
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: "Setup MySQL"
|
|
||||||
if: "${{ matrix.database == 'mysql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start mysql.service
|
|
||||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
|
||||||
|
|
||||||
- name: "Setup PostgreSQL"
|
|
||||||
if: "${{ matrix.database == 'pgsql' }}"
|
|
||||||
run: |
|
|
||||||
sudo systemctl start postgresql
|
|
||||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
|
||||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
|
||||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
|
||||||
|
|
||||||
- name: "Install dependencies with Composer"
|
|
||||||
uses: "ramsey/composer-install@v3"
|
|
||||||
with:
|
|
||||||
composer-options: "--optimize-autoloader --prefer-dist"
|
|
||||||
|
|
||||||
- name: "Install dependencies with Yarn"
|
|
||||||
run: yarn install
|
|
||||||
|
|
||||||
- name: "Build assets with Yarn"
|
|
||||||
run: yarn build:dev
|
|
||||||
|
|
||||||
- name: "Prepare database configuration"
|
|
||||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
|
||||||
|
|
||||||
- name: "Run PHPUnit"
|
|
||||||
run: "php bin/phpunit -v"
|
|
||||||
25
.github/workflows/dependabot-automerge-js.yml
vendored
@ -1,25 +0,0 @@
|
|||||||
name: Auto-merge Dependabot JS
|
|
||||||
on: pull_request_target
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
dependabot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
|
||||||
steps:
|
|
||||||
- name: Dependabot metadata
|
|
||||||
id: metadata
|
|
||||||
uses: dependabot/fetch-metadata@v2.3.0
|
|
||||||
with:
|
|
||||||
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
|
||||||
- name: Approve and merge minor updates
|
|
||||||
if: ${{ steps.metadata.outputs.package-ecosystem == 'npm_and_yarn' && (steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch') }}
|
|
||||||
run: |
|
|
||||||
gh pr review --approve "$PR_URL"
|
|
||||||
gh pr merge --auto --merge "$PR_URL"
|
|
||||||
env:
|
|
||||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
44
.github/workflows/translations.yml
vendored
@ -1,44 +0,0 @@
|
|||||||
name: "Translations"
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- "2.**"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
translations:
|
|
||||||
name: "Translations"
|
|
||||||
runs-on: "ubuntu-20.04"
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
php:
|
|
||||||
- "7.4"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
coverage: "none"
|
|
||||||
php-version: "${{ matrix.php }}"
|
|
||||||
tools: pecl
|
|
||||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
env:
|
|
||||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: "Install dependencies with Composer"
|
|
||||||
uses: "ramsey/composer-install@v3"
|
|
||||||
with:
|
|
||||||
composer-options: "--optimize-autoloader --prefer-dist"
|
|
||||||
|
|
||||||
- name: "Validate translations"
|
|
||||||
run: "php bin/console lint:yaml translations -v"
|
|
||||||
45
.github/workflows/upload-release-package.yml
vendored
@ -1,45 +0,0 @@
|
|||||||
name: "Upload release package"
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- created
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
php:
|
|
||||||
- "7.4"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
|
|
||||||
- name: "Install PHP"
|
|
||||||
uses: "shivammathur/setup-php@v2"
|
|
||||||
with:
|
|
||||||
coverage: "none"
|
|
||||||
php-version: "${{ matrix.php }}"
|
|
||||||
tools: pecl, composer:2.2
|
|
||||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
|
||||||
ini-values: "date.timezone=Europe/Paris"
|
|
||||||
env:
|
|
||||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: "Install Node"
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
- name: Create the package
|
|
||||||
run: make release VERSION=${{ github.event.release.tag_name }}
|
|
||||||
|
|
||||||
- name: Upload the package to the release
|
|
||||||
uses: shogo82148/actions-upload-release-asset@v1
|
|
||||||
with:
|
|
||||||
upload_url: ${{ github.event.release.upload_url }}
|
|
||||||
asset_path: /tmp/wllbg-release/wallabag-${{ github.event.release.tag_name }}.tar.gz
|
|
||||||
33
.gitignore
vendored
@ -9,13 +9,11 @@
|
|||||||
!/var/sessions
|
!/var/sessions
|
||||||
/var/sessions/*
|
/var/sessions/*
|
||||||
!var/sessions/.gitkeep
|
!var/sessions/.gitkeep
|
||||||
|
!var/SymfonyRequirements.php
|
||||||
/bin/*
|
/bin/*
|
||||||
!/bin/console
|
!/bin/console
|
||||||
.php-cs-fixer.php
|
!/bin/symfony_requirements
|
||||||
.php-cs-fixer.cache
|
.php_cs.cache
|
||||||
.phpunit.result.cache
|
|
||||||
phpunit.xml
|
|
||||||
compose.override.yaml
|
|
||||||
|
|
||||||
# Parameters
|
# Parameters
|
||||||
/app/config/parameters.yml
|
/app/config/parameters.yml
|
||||||
@ -29,16 +27,11 @@ web/uploads/
|
|||||||
!/web/bundles/.gitkeep
|
!/web/bundles/.gitkeep
|
||||||
/web/assets/images/*
|
/web/assets/images/*
|
||||||
!web/assets/images/.gitkeep
|
!web/assets/images/.gitkeep
|
||||||
/web/build/*
|
/web/wallassets/*.dev.js
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
/app/build
|
/app/build
|
||||||
/build
|
/build
|
||||||
/coverage
|
|
||||||
|
|
||||||
# Development
|
|
||||||
docker/php/env
|
|
||||||
docker/php/blackfire
|
|
||||||
|
|
||||||
# Composer PHAR
|
# Composer PHAR
|
||||||
/composer.phar
|
/composer.phar
|
||||||
@ -46,19 +39,21 @@ docker/php/blackfire
|
|||||||
# Data for wallabag
|
# Data for wallabag
|
||||||
data/db/wallabag*.sqlite
|
data/db/wallabag*.sqlite
|
||||||
|
|
||||||
|
# Docker container logs and data
|
||||||
|
docker/logs/
|
||||||
|
docker/data/
|
||||||
|
|
||||||
|
# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release
|
||||||
|
composer.lock
|
||||||
|
|
||||||
# assets stuff
|
# assets stuff
|
||||||
node_modules/
|
node_modules/
|
||||||
bin
|
bin
|
||||||
package-lock.json
|
app/Resources/build/
|
||||||
|
!/src/Wallabag/CoreBundle/Resources/public
|
||||||
|
/src/Wallabag/CoreBundle/Resources/public/*
|
||||||
|
|
||||||
# Test-generated files
|
# Test-generated files
|
||||||
admin-export.json
|
admin-export.json
|
||||||
specialexport.json
|
specialexport.json
|
||||||
/data/site-credentials-secret-key.txt
|
/data/site-credentials-secret-key.txt
|
||||||
|
|
||||||
# Custom CSS file
|
|
||||||
web/custom.css
|
|
||||||
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
yarn-error.log
|
|
||||||
|
|||||||
@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$config = new PhpCsFixer\Config();
|
|
||||||
|
|
||||||
return $config
|
|
||||||
->setRiskyAllowed(true)
|
|
||||||
->setRules([
|
|
||||||
'@Symfony' => true,
|
|
||||||
'@Symfony:risky' => true,
|
|
||||||
'array_syntax' => [
|
|
||||||
'syntax' => 'short',
|
|
||||||
],
|
|
||||||
'combine_consecutive_unsets' => true,
|
|
||||||
'heredoc_to_nowdoc' => true,
|
|
||||||
'no_extra_blank_lines' => [
|
|
||||||
'tokens' => [
|
|
||||||
'break',
|
|
||||||
'continue',
|
|
||||||
'extra',
|
|
||||||
'return',
|
|
||||||
'throw',
|
|
||||||
'use',
|
|
||||||
'parenthesis_brace_block',
|
|
||||||
'square_brace_block',
|
|
||||||
'curly_brace_block',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'no_unreachable_default_argument_value' => true,
|
|
||||||
'no_useless_concat_operator' => false,
|
|
||||||
'no_useless_else' => true,
|
|
||||||
'no_useless_return' => true,
|
|
||||||
'ordered_class_elements' => true,
|
|
||||||
'ordered_imports' => true,
|
|
||||||
'php_unit_strict' => true,
|
|
||||||
'phpdoc_order' => true,
|
|
||||||
'phpdoc_separation' => false,
|
|
||||||
// 'psr_autoloading' => true,
|
|
||||||
'strict_comparison' => true,
|
|
||||||
'strict_param' => true,
|
|
||||||
// We override next rule because of current @Symfony ruleSet
|
|
||||||
// 'parameters' element is breaking PHP 7.4
|
|
||||||
// https://cs.symfony.com/doc/rules/control_structure/trailing_comma_in_multiline.html
|
|
||||||
// TODO: remove this configuration after dropping support of PHP 7.4
|
|
||||||
'trailing_comma_in_multiline' => [
|
|
||||||
'elements' => [
|
|
||||||
'arrays',
|
|
||||||
'array_destructuring',
|
|
||||||
'match',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'concat_space' => [
|
|
||||||
'spacing' => 'one',
|
|
||||||
],
|
|
||||||
])
|
|
||||||
->setFinder(
|
|
||||||
PhpCsFixer\Finder::create()
|
|
||||||
->exclude([
|
|
||||||
'node_modules',
|
|
||||||
'vendor',
|
|
||||||
'var',
|
|
||||||
'web',
|
|
||||||
])
|
|
||||||
->in(__DIR__)
|
|
||||||
)
|
|
||||||
->setCacheFile('.php-cs-fixer.cache')
|
|
||||||
;
|
|
||||||
47
.php_cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return PhpCsFixer\Config::create()
|
||||||
|
->setRiskyAllowed(true)
|
||||||
|
->setRules([
|
||||||
|
'@Symfony' => true,
|
||||||
|
'@Symfony:risky' => true,
|
||||||
|
'array_syntax' => [
|
||||||
|
'syntax' => 'short'
|
||||||
|
],
|
||||||
|
'combine_consecutive_unsets' => true,
|
||||||
|
'heredoc_to_nowdoc' => true,
|
||||||
|
'no_extra_consecutive_blank_lines' => [
|
||||||
|
'break',
|
||||||
|
'continue',
|
||||||
|
'extra',
|
||||||
|
'return',
|
||||||
|
'throw',
|
||||||
|
'use',
|
||||||
|
'parenthesis_brace_block',
|
||||||
|
'square_brace_block',
|
||||||
|
'curly_brace_block'
|
||||||
|
],
|
||||||
|
'no_unreachable_default_argument_value' => true,
|
||||||
|
'no_useless_else' => true,
|
||||||
|
'no_useless_return' => true,
|
||||||
|
'ordered_class_elements' => true,
|
||||||
|
'ordered_imports' => true,
|
||||||
|
'php_unit_strict' => true,
|
||||||
|
'phpdoc_order' => true,
|
||||||
|
// 'psr4' => true,
|
||||||
|
'strict_comparison' => true,
|
||||||
|
'strict_param' => true,
|
||||||
|
'concat_space' => [
|
||||||
|
'spacing' => 'one'
|
||||||
|
],
|
||||||
|
])
|
||||||
|
->setFinder(
|
||||||
|
PhpCsFixer\Finder::create()
|
||||||
|
->exclude([
|
||||||
|
'vendor',
|
||||||
|
'var',
|
||||||
|
'web'
|
||||||
|
])
|
||||||
|
->in(__DIR__)
|
||||||
|
)
|
||||||
|
;
|
||||||
28
.scrutinizer.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
filter:
|
||||||
|
paths:
|
||||||
|
- src/*
|
||||||
|
excluded_paths:
|
||||||
|
- 'vendor/*'
|
||||||
|
- 'app/*'
|
||||||
|
- 'var/*'
|
||||||
|
- 'web/*'
|
||||||
|
- 'src/Wallabag/*Bundle/Tests/*'
|
||||||
|
- '*Test.php'
|
||||||
|
|
||||||
|
tools:
|
||||||
|
php_cs_fixer: true
|
||||||
|
php_analyzer: true
|
||||||
|
php_mess_detector: true
|
||||||
|
php_changetracking: true
|
||||||
|
php_code_sniffer: true
|
||||||
|
php_pdepend: true
|
||||||
|
sensiolabs_security_checker: true
|
||||||
|
#external_code_coverage:
|
||||||
|
# timeout: 3600
|
||||||
|
php_code_coverage: true
|
||||||
|
php_sim: false
|
||||||
|
php_cpd: false
|
||||||
|
|
||||||
|
checks:
|
||||||
|
php:
|
||||||
|
code_rating: true
|
||||||
3
.stylelintrc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "stylelint-config-standard"
|
||||||
|
}
|
||||||
86
.travis.yml
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
language: php
|
||||||
|
|
||||||
|
services:
|
||||||
|
- rabbitmq
|
||||||
|
- redis
|
||||||
|
|
||||||
|
# faster builds on docker-container setup
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
# used for HHVM
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- tidy
|
||||||
|
|
||||||
|
# cache vendor dirs
|
||||||
|
cache:
|
||||||
|
apt: true
|
||||||
|
directories:
|
||||||
|
- vendor
|
||||||
|
- $HOME/.composer/cache
|
||||||
|
- node_modules
|
||||||
|
- $HOME/.npm
|
||||||
|
- $HOME/.yarn-cache
|
||||||
|
|
||||||
|
php:
|
||||||
|
- 5.6
|
||||||
|
- 7.0
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- nightly
|
||||||
|
|
||||||
|
node_js:
|
||||||
|
- "5"
|
||||||
|
|
||||||
|
env:
|
||||||
|
- DB=mysql
|
||||||
|
- DB=pgsql
|
||||||
|
- DB=sqlite
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
include:
|
||||||
|
- php: 7.0
|
||||||
|
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run ASSETS=build DB=sqlite
|
||||||
|
allow_failures:
|
||||||
|
- php: 7.2
|
||||||
|
- php: nightly
|
||||||
|
|
||||||
|
# exclude v1 branches
|
||||||
|
branches:
|
||||||
|
except:
|
||||||
|
- legacy
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- PHP=$TRAVIS_PHP_VERSION
|
||||||
|
- 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
|
||||||
|
- 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 6.10; fi;
|
||||||
|
- if [[ $ASSETS = build ]]; then npm install -g yarn@latest; fi;
|
||||||
|
- if [[ $ASSETS = build ]]; then yarn install; fi;
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
|
||||||
|
|
||||||
|
script:
|
||||||
|
- travis_wait composer update --no-interaction --no-progress
|
||||||
|
- echo "travis_fold:start:prepare"
|
||||||
|
- make prepare DB=$DB
|
||||||
|
- echo "travis_fold:end:prepare"
|
||||||
|
|
||||||
|
- echo "travis_fold:start:fixtures"
|
||||||
|
- php bin/console doctrine:fixtures:load --no-interaction --env=test
|
||||||
|
- echo "travis_fold:end:fixtures"
|
||||||
|
|
||||||
|
- if [[ $VALIDATE_TRANSLATION_FILE = '' ]]; then ./bin/simple-phpunit -v ; fi;
|
||||||
|
- if [[ $CS_FIXER = run ]]; then php bin/php-cs-fixer fix --verbose --dry-run ; fi;
|
||||||
|
- if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;
|
||||||
|
- if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml app/Resources/CraueConfigBundle/translations -v ; fi;
|
||||||
|
- if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/UserBundle/Resources/translations -v ; fi;
|
||||||
|
- if [[ $ASSETS = build ]]; then yarn run build:prod; fi;
|
||||||
26
.zappr.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# see https://zappr.opensource.zalan.do/
|
||||||
|
autobranch: false
|
||||||
|
commit: false
|
||||||
|
approvals:
|
||||||
|
minimum: 1
|
||||||
|
ignore: pr_opener
|
||||||
|
pattern: "^(:\\+1:|👍)$"
|
||||||
|
veto:
|
||||||
|
pattern: "^(:\\-1:|👎)$"
|
||||||
|
from:
|
||||||
|
orgs:
|
||||||
|
- wallabag
|
||||||
|
collaborators: true
|
||||||
|
specification:
|
||||||
|
title:
|
||||||
|
minimum-length:
|
||||||
|
enabled: true
|
||||||
|
length: 8
|
||||||
|
body:
|
||||||
|
minimum-length:
|
||||||
|
enabled: true
|
||||||
|
length: 8
|
||||||
|
contains-url: false
|
||||||
|
contains-issue-number: false
|
||||||
|
template:
|
||||||
|
differs-from-body: true
|
||||||
642
CHANGELOG.md
@ -1,642 +1,6 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## Upcoming changes
|
## [2.3.0](https://github.com/wallabag/wallabag/tree/2.3.0) (2017-10-21)
|
||||||
|
|
||||||
* `wallassets/` folder renamed to `build/`
|
|
||||||
|
|
||||||
## [2.6.10](https://github.com/wallabag/wallabag/tree/2.6.10)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.9...2.6.10)
|
|
||||||
|
|
||||||
### Improvement
|
|
||||||
|
|
||||||
* Add Omnivore import by @nicosomb in https://github.com/wallabag/wallabag/pull/7754
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
* Update site config & tests by @j0k3r in https://github.com/wallabag/wallabag/pull/7582 (fixes "Key provided is shorter
|
|
||||||
than 256 bits, only 240 bits provided" https://github.com/wallabag/wallabag/issues/7531)
|
|
||||||
* Update site config by @yguedidi in https://github.com/wallabag/wallabag/pull/7623
|
|
||||||
* Replace gitter with matrix by @nicosomb in https://github.com/wallabag/wallabag/pull/7753
|
|
||||||
|
|
||||||
## [2.6.9](https://github.com/wallabag/wallabag/tree/2.6.9)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.8...2.6.9)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Fix same domain pagination by @yguedidi in https://github.com/wallabag/wallabag/pull/7266
|
|
||||||
* Upgrade PHP dependencies by @yguedidi in https://github.com/wallabag/wallabag/pull/7272
|
|
||||||
* Use a proper "how to" for elCurator by @j0k3r in https://github.com/wallabag/wallabag/pull/7323
|
|
||||||
|
|
||||||
## [2.6.8](https://github.com/wallabag/wallabag/tree/2.6.8)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.7...2.6.8)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Update deps & Node 20 by @j0k3r in https://github.com/wallabag/wallabag/pull/7134
|
|
||||||
* Fix dark mode disabled url 2.6 by @Simounet in https://github.com/wallabag/wallabag/pull/7133
|
|
||||||
* Make database dependent commands lazy by @yguedidi in https://github.com/wallabag/wallabag/pull/7142
|
|
||||||
* Fix docker setup by @yguedidi in https://github.com/wallabag/wallabag/pull/7141
|
|
||||||
* Remove session-based redirection by @yguedidi in https://github.com/wallabag/wallabag/pull/7140
|
|
||||||
|
|
||||||
## [2.6.7](https://github.com/wallabag/wallabag/tree/2.6.7)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.6...2.6.7)
|
|
||||||
|
|
||||||
### Security fix
|
|
||||||
* A user can disable her 2FA unintentionally by @kdecherf in https://github.com/wallabag/wallabag/commit/0cfdddc2eb0aee5ffb69bf499d377d75655ba157
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Fix deprecated null tag parameter by @Simounet in https://github.com/wallabag/wallabag/pull/6985
|
|
||||||
* Full clickable card on mass action by @Simounet in https://github.com/wallabag/wallabag/pull/6991
|
|
||||||
* Add tag form submit button always displayed by @Simounet in https://github.com/wallabag/wallabag/pull/6986
|
|
||||||
|
|
||||||
## [2.6.6](https://github.com/wallabag/wallabag/tree/2.6.6)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.5...2.6.6)
|
|
||||||
|
|
||||||
### Security fix
|
|
||||||
* Force secure cookie on HTTPS connection by @j0k3r in https://github.com/wallabag/wallabag/pull/6924
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Fix checkboxes pointer events issue by @Simounet in https://github.com/wallabag/wallabag/pull/6897
|
|
||||||
* Add Google mailer by @j0k3r in https://github.com/wallabag/wallabag/pull/6899
|
|
||||||
* Improve performance on homepage by @Simounet in https://github.com/wallabag/wallabag/pull/6909
|
|
||||||
* Mass action layout improved by @Simounet in https://github.com/wallabag/wallabag/pull/6912
|
|
||||||
|
|
||||||
## [2.6.5](https://github.com/wallabag/wallabag/tree/2.6.5)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.4...2.6.5)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* "Fix checkboxes pointer-events disabled" by @Simounet https://github.com/wallabag/wallabag/pull/6874
|
|
||||||
* "Fix nav input styles" by @Simounet https://github.com/wallabag/wallabag/pull/6877
|
|
||||||
* "Change domain status filters html types" by @Simounet https://github.com/wallabag/wallabag/pull/6888
|
|
||||||
|
|
||||||
## [2.6.4](https://github.com/wallabag/wallabag/tree/2.6.4)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.3...2.6.4)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Fix API token generation by @nicosomb https://github.com/wallabag/wallabag/pull/6869
|
|
||||||
* Fix checkboxes which were broken by @nicosomb https://github.com/wallabag/wallabag/pull/6864
|
|
||||||
|
|
||||||
## [2.6.3](https://github.com/wallabag/wallabag/tree/2.6.3)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.2...2.6.3)
|
|
||||||
|
|
||||||
### Security fixes
|
|
||||||
* Replace GET way to POST way to reset data user by @nicosomb https://github.com/wallabag/wallabag/commit/78b0b55c40511e1f22d5bbb4897aa10fca68441c
|
|
||||||
* Replace GET way to POST way to delete API client by @nicosomb https://github.com/wallabag/wallabag/commit/ffcc5c9062fcc8cd922d7d6d65edbe5efae96806
|
|
||||||
|
|
||||||
### Improvement
|
|
||||||
* Add confirmation before reload entry by @nicosomb https://github.com/wallabag/wallabag/pull/6778
|
|
||||||
* Remove external dependencies on howto page by @viktoriussuwandi https://github.com/wallabag/wallabag/pull/6775
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Use Session instead of Referrer for Redirection by @Spoons https://github.com/wallabag/wallabag/pull/6119
|
|
||||||
* Reduce risk of collision for #content by @kdecherf https://github.com/wallabag/wallabag/pull/6829
|
|
||||||
* Update dependencies to fix vulnerabilities by @nicosomb https://github.com/wallabag/wallabag/pull/6783
|
|
||||||
* Fix failing randomly test by @nicosomb https://github.com/wallabag/wallabag/pull/6763
|
|
||||||
|
|
||||||
### Technical stuff
|
|
||||||
* Add check if git is installed by @nicosomb https://github.com/wallabag/wallabag/pull/6788
|
|
||||||
* Replace kernel.root_dir by kernel.project_dir by @yguedidi https://github.com/wallabag/wallabag/pull/6809
|
|
||||||
* Split symfony/symfony by @yguedidi https://github.com/wallabag/wallabag/pull/6817
|
|
||||||
* Make Crawler::extract get an array by @yguedidi https://github.com/wallabag/wallabag/pull/6812
|
|
||||||
* Use PSR-17 and PSR-18 by @yguedidi https://github.com/wallabag/wallabag/pull/6816
|
|
||||||
* Replace Client by KernelBrowser by @yguedidi https://github.com/wallabag/wallabag/pull/6813
|
|
||||||
* Replace Debug component by ErrorHandler component by @yguedidi https://github.com/wallabag/wallabag/pull/6810
|
|
||||||
* Make ImportController extends AbstractController by @yguedidi https://github.com/wallabag/wallabag/pull/6808
|
|
||||||
* Use Twig instead of templating by @yguedidi https://github.com/wallabag/wallabag/pull/6797
|
|
||||||
* Identify platforms by their class by @yguedidi https://github.com/wallabag/wallabag/pull/6799
|
|
||||||
* Move from transchoice to trans by @yguedidi https://github.com/wallabag/wallabag/pull/6800
|
|
||||||
* Replace GetResponseEvent by RequestEvent by @yguedidi https://github.com/wallabag/wallabag/pull/6811
|
|
||||||
* Ensure the kernel is shut down before calling createClient by @yguedidi https://github.com/wallabag/wallabag/pull/6803
|
|
||||||
* Ignore docker-compose.override.yml by @yguedidi https://github.com/wallabag/wallabag/pull/6814
|
|
||||||
* Add composer normalizer by @nicosomb https://github.com/wallabag/wallabag/pull/6762
|
|
||||||
|
|
||||||
## [2.6.2](https://github.com/wallabag/wallabag/tree/2.6.2)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.1...2.6.2)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Fix mass action input on dark theme by @simounet https://github.com/wallabag/wallabag/pull/6673
|
|
||||||
* Fix undefined variable by @nicosomb https://github.com/wallabag/wallabag/pull/6672
|
|
||||||
* Fix table name in migration by @nicosomb https://github.com/wallabag/wallabag/pull/6653
|
|
||||||
|
|
||||||
### Technical stuff
|
|
||||||
* Add a new build to test when no database table prefix are defined by @j0k3r https://github.com/wallabag/wallabag/pull/6731
|
|
||||||
* Keep escaped table name while migrating by @Glandos https://github.com/wallabag/wallabag/pull/6710
|
|
||||||
* Remove twofactor_auth parameter by @nicosomb https://github.com/wallabag/wallabag/pull/6723
|
|
||||||
* ApiDoc: Add response description to UserRestController by @caspermeijn https://github.com/wallabag/wallabag/pull/6684
|
|
||||||
* ApiDoc: Add response description to WallabagRestController by @caspermeijn https://github.com/wallabag/wallabag/pull/6102
|
|
||||||
* Skip migration if the table was already renamed by @gramakri https://github.com/wallabag/wallabag/pull/6678
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Document how to run tests and formatter for new contributors by @caspermeijn https://github.com/wallabag/wallabag/pull/6685
|
|
||||||
* Add link to wallabag ecosystem resources by @nicosomb https://github.com/wallabag/wallabag/pull/6700
|
|
||||||
|
|
||||||
## [2.6.1](https://github.com/wallabag/wallabag/tree/2.6.1)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.0...2.6.1)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Do not autoload fixtures by @j0k3r https://github.com/wallabag/wallabag/pull/6648
|
|
||||||
* Add confirmation alert when deleting articles from list view by @nicosomb https://github.com/wallabag/wallabag/pull/6644
|
|
||||||
|
|
||||||
## [2.6.0](https://github.com/wallabag/wallabag/tree/2.6.0)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.4...2.6.0)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
* Add tag deletion from tags list by @nicosomb https://github.com/wallabag/wallabag/pull/5861
|
|
||||||
* Add support of mass action to tag entries by @kdecherf https://github.com/wallabag/wallabag/pull/5838
|
|
||||||
* Mass action interface by @Simounet https://github.com/wallabag/wallabag/pull/6547
|
|
||||||
* Empty space on the top bar used for more add url toggle clickable target by @Simounet https://github.com/wallabag/wallabag/pull/6612
|
|
||||||
* Add new setting to show / hide articles thumbnails by @nicosomb https://github.com/wallabag/wallabag/pull/6609
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Add prefix for tag slugs by @kdecherf https://github.com/wallabag/wallabag/pull/6226
|
|
||||||
* Fix open all external links in new tab in Config by @wyntonfranklin https://github.com/wallabag/wallabag/pull/6256
|
|
||||||
* Fix dark theme for pre HTML tags by @Simounet https://github.com/wallabag/wallabag/pull/6495
|
|
||||||
* Fix dark mode top bar contrast by @Simounet https://github.com/wallabag/wallabag/pull/6510
|
|
||||||
* Dark mode contrast improved by @Simounet https://github.com/wallabag/wallabag/pull/6512
|
|
||||||
* Fix dark mode URL add input color by @Simounet https://github.com/wallabag/wallabag/pull/6525
|
|
||||||
* Fix round reading time in export by @mart-e https://github.com/wallabag/wallabag/pull/6545
|
|
||||||
* Fix images downloading with numeric HTML entity by @Simounet https://github.com/wallabag/wallabag/pull/6563
|
|
||||||
* Fix DownloadImages not following redirections by @Simounet https://github.com/wallabag/wallabag/pull/6562
|
|
||||||
* Fix auto dark theme detection flickering by @Simounet https://github.com/wallabag/wallabag/pull/6584
|
|
||||||
* Fix RSS feed_route not set by @Simounet https://github.com/wallabag/wallabag/pull/6606
|
|
||||||
* Add flash message when we try to add too much tags by @nicosomb https://github.com/wallabag/wallabag/pull/6607
|
|
||||||
* Changed default value for domain_name parameter by @nicosomb https://github.com/wallabag/wallabag/pull/6616
|
|
||||||
* Improved tags display by @Simounet https://github.com/wallabag/wallabag/pull/6613
|
|
||||||
* Fix mousetrap enter issue by @Simounet https://github.com/wallabag/wallabag/pull/6624
|
|
||||||
* Fix duplicate tags creation when assigning search results to tag by @nicosomb https://github.com/wallabag/wallabag/pull/6629
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Removed Carrot & Scuttle share by @nicosomb https://github.com/wallabag/wallabag/pull/6047
|
|
||||||
* Remove old, not so maintained and buggy baggy theme by @nicosomb https://github.com/wallabag/wallabag/pull/4332
|
|
||||||
* Remove Scrutinizer badge by @j0k3r https://github.com/wallabag/wallabag/pull/6179
|
|
||||||
* Add mention to unofficial linux client by @imhemish https://github.com/wallabag/wallabag/pull/6203
|
|
||||||
|
|
||||||
### Technical stuff
|
|
||||||
* Remove SensioDistributionBundle by @yguedidi https://github.com/wallabag/wallabag/pull/5761
|
|
||||||
* Back to latest composer version by @yguedidi https://github.com/wallabag/wallabag/pull/5810
|
|
||||||
* Clean composer.lock after SensioDistributionBundle removal by @yguedidi https://github.com/wallabag/wallabag/pull/5839
|
|
||||||
* Remove transitive dependencies by @yguedidi https://github.com/wallabag/wallabag/pull/5784
|
|
||||||
* Register missed commands by @yguedidi https://github.com/wallabag/wallabag/pull/5928
|
|
||||||
* Extend right FOSRestBundle controller class by @yguedidi https://github.com/wallabag/wallabag/pull/5929
|
|
||||||
* Remove PHP-CS-Fixer deprecations by @yguedidi https://github.com/wallabag/wallabag/pull/5914
|
|
||||||
* Upgrade FOSUserBundle to 2.1 by @yguedidi https://github.com/wallabag/wallabag/pull/5782
|
|
||||||
* Add TwigCS by @yguedidi https://github.com/wallabag/wallabag/pull/5759
|
|
||||||
* Use FQCN as service name by @yguedidi https://github.com/wallabag/wallabag/pull/5748
|
|
||||||
* Migrate to new template reference notation by @yguedidi https://github.com/wallabag/wallabag/pull/5758
|
|
||||||
* Migrate from old colon notation to FQCN by @yguedidi https://github.com/wallabag/wallabag/pull/5943
|
|
||||||
* Use autowiring by @yguedidi https://github.com/wallabag/wallabag/pull/5946
|
|
||||||
* Use FQCN to fetch services by @yguedidi https://github.com/wallabag/wallabag/pull/5951
|
|
||||||
* Run tests without memory limit by @yguedidi https://github.com/wallabag/wallabag/pull/5953
|
|
||||||
* Import used classes by @yguedidi https://github.com/wallabag/wallabag/pull/5952
|
|
||||||
* Rework command tests by @yguedidi https://github.com/wallabag/wallabag/pull/5954
|
|
||||||
* Switch to Swagger for api documentation by @caspermeijn https://github.com/wallabag/wallabag/pull/6062
|
|
||||||
* Remove some deprecation by @j0k3r https://github.com/wallabag/wallabag/pull/6085
|
|
||||||
* Remove deprecated options from FOSRest by @j0k3r https://github.com/wallabag/wallabag/pull/6095
|
|
||||||
* Remove LiipThemeBundle by @j0k3r https://github.com/wallabag/wallabag/pull/6097
|
|
||||||
* Upgrade PHPStan and move to level 2 with baseline by @j0k3r https://github.com/wallabag/wallabag/pull/6098
|
|
||||||
* Upgrade to Symfony 4.4 by @j0k3r https://github.com/wallabag/wallabag/pull/6099
|
|
||||||
* Update to FOSUserBundle 3.1 by @j0k3r https://github.com/wallabag/wallabag/pull/6136
|
|
||||||
* Update to scheb/2fa-bundle by @j0k3r https://github.com/wallabag/wallabag/pull/6144
|
|
||||||
* Upgrade to Twig 3 by @j0k3r https://github.com/wallabag/wallabag/pull/6151
|
|
||||||
* Move translations files to /translations by @j0k3r https://github.com/wallabag/wallabag/pull/6153
|
|
||||||
* Fix EventDispatcher & events by @j0k3r https://github.com/wallabag/wallabag/pull/6154
|
|
||||||
* Replace SwiftMailer by Symfony Mailer by @j0k3r https://github.com/wallabag/wallabag/pull/6150
|
|
||||||
* Remove ContainerAwareCommand from commands by @j0k3r https://github.com/wallabag/wallabag/pull/6152
|
|
||||||
* Update all Doctrine deps by @j0k3r https://github.com/wallabag/wallabag/pull/6143
|
|
||||||
* Update PagerFanta by @j0k3r https://github.com/wallabag/wallabag/pull/6145
|
|
||||||
* Move to controller as a service by @j0k3r https://github.com/wallabag/wallabag/pull/6159
|
|
||||||
* Add RabbitMQConsumerTotalProxy to lazy RabbitMQ services for messages by @j0k3r https://github.com/wallabag/wallabag/pull/6166
|
|
||||||
* Properly handle json_array type removal by @j0k3r https://github.com/wallabag/wallabag/pull/6171
|
|
||||||
* Fix database_path in Docker env by @j0k3r https://github.com/wallabag/wallabag/pull/6174
|
|
||||||
* Docker: database_table_prefix may be configured from environment by @fcatt https://github.com/wallabag/wallabag/pull/6196
|
|
||||||
* Update annotations to OpenApi 3 by @caspermeijn https://github.com/wallabag/wallabag/pull/6182
|
|
||||||
* Fix public folder for Symfony 4+ by @kdecherf https://github.com/wallabag/wallabag/pull/6217
|
|
||||||
* Fix API allowed_registration by @caspermeijn https://github.com/wallabag/wallabag/pull/6315
|
|
||||||
* Enable PHP 8.2 in CI by @j0k3r https://github.com/wallabag/wallabag/pull/6469
|
|
||||||
* Fix/build stylelint error by @Simounet https://github.com/wallabag/wallabag/pull/6586
|
|
||||||
|
|
||||||
## [2.5.4](https://github.com/wallabag/wallabag/tree/2.5.4)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.3...2.5.4)
|
|
||||||
|
|
||||||
### Security fixes
|
|
||||||
* Fix adding tag to entries from other people by @j0k3r in https://github.com/wallabag/wallabag/pull/6290
|
|
||||||
* Fix XSS on username on share page by @j0k3r in https://github.com/wallabag/wallabag/pull/6288
|
|
||||||
* Fix CSRF on user deletion by @j0k3r in https://github.com/wallabag/wallabag/pull/6289
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Fix release script by @j0k3r in https://github.com/wallabag/wallabag/pull/6275
|
|
||||||
|
|
||||||
## [2.5.3](https://github.com/wallabag/wallabag/tree/2.5.3)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.2...2.5.3)
|
|
||||||
|
|
||||||
### Security fixes
|
|
||||||
* Fix GHSA-qwx8-mxxx-mg96 https://github.com/wallabag/wallabag/commit/0f7460dbab9e29f4f7d2944aca20210f828b6abb by @Kdecherf, thanks to @bAuh0lz
|
|
||||||
* Fix GHSA-mrqx-mjc4-vfh3 https://github.com/wallabag/wallabag/commit/5ac6b6bff9e2e3a87fd88c2904ff3c6aac40722e by @Kdecherf, thanks to @bAuh0lz
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Update deps before 2.5.3 by @j0k3r in https://github.com/wallabag/wallabag/pull/6241
|
|
||||||
|
|
||||||
## [2.5.2](https://github.com/wallabag/wallabag/tree/2.5.2)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.1...2.5.2)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Add `nbEntries` to the API tags list response by @j0k3r in https://github.com/wallabag/wallabag/pull/5984
|
|
||||||
* Typofixes by @nexxai in https://github.com/wallabag/wallabag/pull/6004
|
|
||||||
* Add `domain_name` to entries api endpoint by @yotamN in https://github.com/wallabag/wallabag/pull/6019
|
|
||||||
* Add support to download SVG locally by @j0k3r in https://github.com/wallabag/wallabag/pull/5992
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Automatically create the package after a release by @j0k3r in https://github.com/wallabag/wallabag/pull/5851
|
|
||||||
* Add .gitattributes, exclude tests from archive by @iamvar in https://github.com/wallabag/wallabag/pull/5910
|
|
||||||
* Allow auto merging of Dependabot JS minor or patch by @j0k3r in https://github.com/wallabag/wallabag/pull/6003
|
|
||||||
* Fix random failing tests by @j0k3r in https://github.com/wallabag/wallabag/pull/6013
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/wallabag/wallabag/tree/2.5.1)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.5.0...2.5.1)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
- Jump to Node 16 to build assets by @j0k3r in https://github.com/wallabag/wallabag/pull/5822
|
|
||||||
- Update some deps by @j0k3r in https://github.com/wallabag/wallabag/pull/5834
|
|
||||||
- Fix error about template not found in 2fa form by @j0k3r in https://github.com/wallabag/wallabag/pull/5833
|
|
||||||
- Translations update from Hosted Weblate by @weblate in https://github.com/wallabag/wallabag/pull/5846
|
|
||||||
- material: fix "untagged entries" chip style by @Kdecherf in https://github.com/wallabag/wallabag/pull/5840
|
|
||||||
|
|
||||||
## [2.5.0](https://github.com/wallabag/wallabag/tree/2.5.0)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.4.3...2.5.0)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Add Delicious import by @j0k3r in https://github.com/wallabag/wallabag/pull/5022
|
|
||||||
- Add route to list entries with annotations by @nicosomb in https://github.com/wallabag/wallabag/pull/4341
|
|
||||||
- Add an option to sort the feed entries by `updated_at` by @agallou in https://github.com/wallabag/wallabag/pull/5659
|
|
||||||
- Add support to download webp image locally by @j0k3r in https://github.com/wallabag/wallabag/pull/5687
|
|
||||||
- Update readme and docker development env by @Kdecherf in https://github.com/wallabag/wallabag/pull/5662
|
|
||||||
- Add action to assign a search as a tag to each result by @nicosomb in https://github.com/wallabag/wallabag/pull/5381
|
|
||||||
- Drop PHP prior to 7.4 by @yguedidi in https://github.com/wallabag/wallabag/pull/5791
|
|
||||||
|
|
||||||
### Deprecated features
|
|
||||||
- Deprecate Baggy theme by @j0k3r in https://github.com/wallabag/wallabag/pull/5742
|
|
||||||
- Deprecate mobi export by @Kdecherf in https://github.com/wallabag/wallabag/pull/5775
|
|
||||||
|
|
||||||
### API
|
|
||||||
|
|
||||||
- Add new endpoint for API: config by @nicosomb in https://github.com/wallabag/wallabag/pull/5673
|
|
||||||
|
|
||||||
### Technical stuff
|
|
||||||
|
|
||||||
- Fix test with `usinenouvelle.com` being flaky these times by @j0k3r in https://github.com/wallabag/wallabag/pull/5686
|
|
||||||
- Replace `iconv()` calls with Transliterator by @Kdecherf in https://github.com/wallabag/wallabag/pull/5680
|
|
||||||
- Composer 2.3 isn't compatible with wallabag by @j0k3r in https://github.com/wallabag/wallabag/pull/5708
|
|
||||||
- CI workaround for PHP < 7.4 & MySQL 8 by @j0k3r in https://github.com/wallabag/wallabag/pull/5729
|
|
||||||
- Set permissions for GitHub actions by @naveensrinivasan in https://github.com/wallabag/wallabag/pull/5732
|
|
||||||
- Included githubactions in the dependabot config by @naveensrinivasan in https://github.com/wallabag/wallabag/pull/5737
|
|
||||||
- Remove bundle inheritance by @yguedidi in https://github.com/wallabag/wallabag/pull/5746
|
|
||||||
- Fix SQLite database location by @yguedidi in https://github.com/wallabag/wallabag/pull/5771
|
|
||||||
- Disable XDebug in test make recipe by @yguedidi in https://github.com/wallabag/wallabag/pull/5770
|
|
||||||
- Exclude local phpunit.xml by @yguedidi in https://github.com/wallabag/wallabag/pull/5757
|
|
||||||
- Upgrade PHP dependencies by @yguedidi in https://github.com/wallabag/wallabag/pull/5778
|
|
||||||
|
|
||||||
### Translations
|
|
||||||
|
|
||||||
- Enabled greek translation by @nicosomb in https://github.com/wallabag/wallabag/pull/5656
|
|
||||||
- Translations update from Hosted Weblate by @weblate see https://github.com/wallabag/wallabag/pulls?q=is%3Apr+author%3Aweblate+milestone%3A2.5.0+is%3Amerged
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Fix tagging rule match when user has a custom reading speed by @j0k3r in https://github.com/wallabag/wallabag/pull/5646
|
|
||||||
- Feat/home entries updated by @Simounet in https://github.com/wallabag/wallabag/pull/5664
|
|
||||||
- Fix row and card style regressions by @Simounet in https://github.com/wallabag/wallabag/pull/5676
|
|
||||||
- Fix epub language by @j0k3r in https://github.com/wallabag/wallabag/pull/5647
|
|
||||||
- material: improve mass buttons style, mostly for smartphone screens by @Kdecherf in https://github.com/wallabag/wallabag/pull/5695
|
|
||||||
- Fix composer version in docker dev configuration by @nicosomb in https://github.com/wallabag/wallabag/pull/5715
|
|
||||||
- Use site with subdomain as tagging rule example by @jonas-hagen in https://github.com/wallabag/wallabag/pull/5744
|
|
||||||
- Fix PHP Docker image by @yguedidi in https://github.com/wallabag/wallabag/pull/5772
|
|
||||||
|
|
||||||
## [2.4.3](https://github.com/wallabag/wallabag/tree/2.4.3)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.4.2...2.4.3)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
* Tag view: order tags by label @Kdecherf in https://github.com/wallabag/wallabag/pull/5296
|
|
||||||
* Pagination style updated by @Simounet in https://github.com/wallabag/wallabag/pull/5202
|
|
||||||
* Improve performance of REST exists call by @Kdecherf in https://github.com/wallabag/wallabag/pull/5261
|
|
||||||
* Make RSS feed entry links valid and accessible by @hennevogel in https://github.com/wallabag/wallabag/pull/5347
|
|
||||||
* Fixed search on homepage by @nicosomb in https://github.com/wallabag/wallabag/pull/5379
|
|
||||||
* Fixed timeout when assigning tags to entry by @nicosomb in https://github.com/wallabag/wallabag/pull/5156
|
|
||||||
* Fixed reading time in epub/pdf exports by @nicosomb in https://github.com/wallabag/wallabag/pull/5405
|
|
||||||
* Fix dark theme developper page by @Simounet in https://github.com/wallabag/wallabag/pull/5453
|
|
||||||
* Fix dark mode background color for pre tags by @Kdecherf in https://github.com/wallabag/wallabag/pull/5465
|
|
||||||
* Show when articles is read by @nicosomb in https://github.com/wallabag/wallabag/pull/5378
|
|
||||||
* Added random button on article view by @nicosomb in https://github.com/wallabag/wallabag/pull/5380
|
|
||||||
* Fixed wrong number of entries for tag feeds by @christianjunk in https://github.com/wallabag/wallabag/pull/5585
|
|
||||||
* Add support for RTL content by @Monirzadeh in https://github.com/wallabag/wallabag/pull/5599
|
|
||||||
* Avoid overlapping images when downloading them by @j0k3r in https://github.com/wallabag/wallabag/pull/5594
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
* Fix/tests by @Simounet in https://github.com/wallabag/wallabag/pull/5217
|
|
||||||
* dependabot: change schedule to check updates once a month by @Kdecherf in https://github.com/wallabag/wallabag/pull/5260
|
|
||||||
* Update dependencies by @Kdecherf in https://github.com/wallabag/wallabag/pull/5326
|
|
||||||
* Create SECURITY.md by @zidingz in https://github.com/wallabag/wallabag/pull/5406
|
|
||||||
* Add build test on PHP 8.0 & 8.1 by @j0k3r in https://github.com/wallabag/wallabag/pull/5591
|
|
||||||
* Fix Dependabot alerts for `tar` & `json-schema` by @j0k3r in https://github.com/wallabag/wallabag/pull/5541
|
|
||||||
* Change the name of the static package's root directory by @oupala in https://github.com/wallabag/wallabag/pull/5542
|
|
||||||
* Fixed unavailable russian website in test by @nicosomb in https://github.com/wallabag/wallabag/pull/5376
|
|
||||||
* Update deps by @j0k3r in https://github.com/wallabag/wallabag/pull/5540
|
|
||||||
|
|
||||||
### Translations
|
|
||||||
* Translations update from Weblate by @weblate in https://github.com/wallabag/wallabag/pull/5187
|
|
||||||
* Translations update from Weblate by @weblate in https://github.com/wallabag/wallabag/pull/5391
|
|
||||||
* Add Czech language by @marapavelka in https://github.com/wallabag/wallabag/pull/5535
|
|
||||||
* Translations update from Hosted Weblate by @weblate in https://github.com/wallabag/wallabag/pull/5580
|
|
||||||
* Translations update from Hosted Weblate by @weblate in https://github.com/wallabag/wallabag/pull/5581
|
|
||||||
|
|
||||||
## [2.4.2](https://github.com/wallabag/wallabag/tree/2.4.2)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.4.1...2.4.2)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
- Fix nav lang filter [#4908](https://github.com/wallabag/wallabag/pull/4908)
|
|
||||||
- Fix accessibility problem with the 2FA QR code [#4915](https://github.com/wallabag/wallabag/pull/4915)
|
|
||||||
- Preselect currently active section in the filter menu [#4972](https://github.com/wallabag/wallabag/pull/4972)
|
|
||||||
- Fix translation of date in the footer using IntlDateFormatter [#4971](https://github.com/wallabag/wallabag/pull/4971)
|
|
||||||
- Update dark theme [#4921](https://github.com/wallabag/wallabag/pull/4921)
|
|
||||||
- Dark theme updated [#4983](https://github.com/wallabag/wallabag/pull/4983)
|
|
||||||
- Fix account dropdown width [#4969](https://github.com/wallabag/wallabag/pull/4969)
|
|
||||||
- Fix auto prefered color scheme [#5071](https://github.com/wallabag/wallabag/pull/5071)
|
|
||||||
- Convert tag label to lowercase in RuleBasedTagger [#5111](https://github.com/wallabag/wallabag/pull/5111)
|
|
||||||
- Fix myreadspeed links [#5113](https://github.com/wallabag/wallabag/pull/5113)
|
|
||||||
- Internal server error while exporting to epub [#5052](https://github.com/wallabag/wallabag/issues/5052)
|
|
||||||
- Error parsing image URL (with scrset) [#4914](https://github.com/wallabag/wallabag/issues/4914)
|
|
||||||
|
|
||||||
## [2.4.1](https://github.com/wallabag/wallabag/tree/2.4.1)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.4.0...2.4.1)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
- Fix path icons from manifest.json [#4811](https://github.com/wallabag/wallabag/pull/4811)
|
|
||||||
- Fix missing apple-touch-icon-512.png from manifest.json [#4823](https://github.com/wallabag/wallabag/pull/4823)
|
|
||||||
- migrations: fix mysql migration for an edge case [#4832](https://github.com/wallabag/wallabag/pull/4832)
|
|
||||||
- Add a command to clean downloaded images [#4844](https://github.com/wallabag/wallabag/pull/4844)
|
|
||||||
- Add a query to parse only non-hashed URL [#4865](https://github.com/wallabag/wallabag/pull/4865) [#4878](https://github.com/wallabag/wallabag/pull/4878)
|
|
||||||
- material: fix issue with cookie check for light/dark theme [#4866](https://github.com/wallabag/wallabag/pull/4866)
|
|
||||||
- Show OTP secret next to the QR Code [#4868](https://github.com/wallabag/wallabag/pull/4868)
|
|
||||||
- views: add title to tag li elements, for consistency [#4894](https://github.com/wallabag/wallabag/pull/4894)
|
|
||||||
- Add label and issuer to otp config [#4301](https://github.com/wallabag/wallabag/pull/4301)
|
|
||||||
|
|
||||||
### Meta
|
|
||||||
- Update release process and introduce 2.4.1-dev [#4808](https://github.com/wallabag/wallabag/pull/4808)
|
|
||||||
- Remove community.wallabag.org from the issue template [#4817](https://github.com/wallabag/wallabag/pull/4817)
|
|
||||||
- Update issue templates [#4843](https://github.com/wallabag/wallabag/pull/4843)
|
|
||||||
- Allow GitHub Actions to run on 2.* branches [#4896](https://github.com/wallabag/wallabag/pull/4896)
|
|
||||||
- Prepare 2.4.1 [#4904](https://github.com/wallabag/wallabag/pull/4904)
|
|
||||||
|
|
||||||
## [2.4.0](https://github.com/wallabag/wallabag/tree/2.4.0)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.8...2.4.0)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Allow to rename tags from the web interface [#3574](https://github.com/wallabag/wallabag/pull/3574)
|
|
||||||
- Added possibility to change locale from login/register pages [#3216](https://github.com/wallabag/wallabag/pull/3216)
|
|
||||||
- Add ability to import/export tagging rules [#4028](https://github.com/wallabag/wallabag/pull/4028)
|
|
||||||
- Add quickstart into the menu [#3992](https://github.com/wallabag/wallabag/pull/3992)
|
|
||||||
- Enable OTP 2FA via third apps (Google Authenticator, Authy or FreeOTP) [#3798](https://github.com/wallabag/wallabag/pull/3798)
|
|
||||||
- Show untagged entries count on tag list [#3993](https://github.com/wallabag/wallabag/pull/3993)
|
|
||||||
- Add random feature [#3526](https://github.com/wallabag/wallabag/pull/3526)
|
|
||||||
- Added ability to revoke feed token [#3994](https://github.com/wallabag/wallabag/pull/3994)
|
|
||||||
- Display login in config / user [#3995](https://github.com/wallabag/wallabag/pull/3995)
|
|
||||||
- Move Ignore Origin rules to database [#4026](https://github.com/wallabag/wallabag/pull/4026)
|
|
||||||
- Add ability to manually define the reading speed [#4053](https://github.com/wallabag/wallabag/pull/4053)
|
|
||||||
- Added MathJax support [#4128](https://github.com/wallabag/wallabag/pull/4128)
|
|
||||||
- Improved tags list [#4136](https://github.com/wallabag/wallabag/pull/4136)
|
|
||||||
- Add untagged list link to filter menu [#4150](https://github.com/wallabag/wallabag/pull/4150)
|
|
||||||
- Allow custom styles system wide [#4151](https://github.com/wallabag/wallabag/pull/4151)
|
|
||||||
- Added elCurator import [#4175](https://github.com/wallabag/wallabag/pull/4175)
|
|
||||||
- Added language support for Simplified Chinese(简体中文)[#4281](https://github.com/wallabag/wallabag/pull/4281)
|
|
||||||
- Added publication date on epub export [#4315](https://github.com/wallabag/wallabag/pull/4315)
|
|
||||||
- Enhanced article display [#4317](https://github.com/wallabag/wallabag/pull/4317)
|
|
||||||
- Added mass actions for Material design in list view [#4326](https://github.com/wallabag/wallabag/pull/4326)
|
|
||||||
- Added a button to disable 2FA when enabled [#4329](https://github.com/wallabag/wallabag/pull/4329)
|
|
||||||
- Enhanced navigation menu in material theme [#4343](https://github.com/wallabag/wallabag/pull/4343)
|
|
||||||
- Copy client info to clipboard [#4058](https://github.com/wallabag/wallabag/pull/4058)
|
|
||||||
- Upgrade Piwik Twig Extension to Matomo [#4363](https://github.com/wallabag/wallabag/pull/4363)
|
|
||||||
- Dark theme to Material [#4725](https://github.com/wallabag/wallabag/pull/4725)
|
|
||||||
|
|
||||||
### API
|
|
||||||
|
|
||||||
- Storage of hash of URL to check if pages already saved [#3158](https://github.com/wallabag/wallabag/pull/3158)
|
|
||||||
- Added a basic search endpoint [#3627](https://github.com/wallabag/wallabag/pull/3627)
|
|
||||||
- Entries: added add parameter detail to exclude or include content in response [#3960](https://github.com/wallabag/wallabag/pull/3960)
|
|
||||||
- Add a new endpoint to retrieve information from the wallabag instance [#3845](https://github.com/wallabag/wallabag/pull/3845)
|
|
||||||
- API return an error with empty quote [#4161](https://github.com/wallabag/wallabag/pull/4161)
|
|
||||||
- Fixed bug when we delete entry via API [#4316](https://github.com/wallabag/wallabag/pull/4316)
|
|
||||||
- Add ability to define lifetime token for the API [#4319](https://github.com/wallabag/wallabag/pull/4319)
|
|
||||||
- Added archived_at property and updateArchived method [#3630](https://github.com/wallabag/wallabag/pull/3630)
|
|
||||||
- Add `given_url` in Entry table to check if a redirected url has already added [#3271](https://github.com/wallabag/wallabag/pull/3271)
|
|
||||||
|
|
||||||
### Technical stuff
|
|
||||||
|
|
||||||
- Added support for secured emails via SMTP [#3596](https://github.com/wallabag/wallabag/pull/3596)
|
|
||||||
- Changed RSS to Atom feed and improve paging [#3223](https://github.com/wallabag/wallabag/pull/3223)
|
|
||||||
- MySQL: change collation of tag label [#3959](https://github.com/wallabag/wallabag/pull/3959)
|
|
||||||
- Use httplug and graby 2.0 [#3390](https://github.com/wallabag/wallabag/pull/3390)
|
|
||||||
- Use Imagick to keep GIF animation [#3955](https://github.com/wallabag/wallabag/pull/3955)
|
|
||||||
- Jump to Symfony 3.4 [#3731](https://github.com/wallabag/wallabag/pull/3731)
|
|
||||||
- Removed hardcoded database version [#3864](https://github.com/wallabag/wallabag/pull/3864)
|
|
||||||
- Dropping PHP < 7.1 [#3758](https://github.com/wallabag/wallabag/pull/3758)
|
|
||||||
- Dropping PHP < 7.2 [#4441](https://github.com/wallabag/wallabag/pull/4441)
|
|
||||||
- Force default_protocol to generate an url input [#3879](https://github.com/wallabag/wallabag/pull/3879)
|
|
||||||
- Cascade delete on oauth2 table when deleting a user [#3956](https://github.com/wallabag/wallabag/pull/3956)
|
|
||||||
- Preview picture: use the 1st pic retrieved if no og:image set [#3965](https://github.com/wallabag/wallabag/pull/3965)
|
|
||||||
- Force PHP version in Dockerfile [#3977](https://github.com/wallabag/wallabag/pull/3977)
|
|
||||||
- Add Sentry support [#3990](https://github.com/wallabag/wallabag/pull/3990)
|
|
||||||
- Fix slow/unindexed queries [#4081](https://github.com/wallabag/wallabag/pull/4081)
|
|
||||||
- Rename internal settings table [#4084](https://github.com/wallabag/wallabag/pull/4084)
|
|
||||||
- Add environment variables to control scripts/dev.sh behavior [#4152](https://github.com/wallabag/wallabag/pull/4152)
|
|
||||||
- Increase php memory limit PHP Docker [#4163](https://github.com/wallabag/wallabag/pull/4163)
|
|
||||||
- Ensure ENV is well defined when using make [#4249](https://github.com/wallabag/wallabag/pull/4249)
|
|
||||||
- Update translations from Weblate [#4442](https://github.com/wallabag/wallabag/pull/4442)
|
|
||||||
- Ditch Travis to use GitHub Actions [#4747](https://github.com/wallabag/wallabag/pull/4747)
|
|
||||||
- Upgrade Webpack from v4 to v5 [#4727](https://github.com/wallabag/wallabag/pull/4727)
|
|
||||||
|
|
||||||
### Translations
|
|
||||||
|
|
||||||
- Add Japanese translation [#4274](https://github.com/wallabag/wallabag/pull/4274)
|
|
||||||
- Add Croatian translation [#4518](https://github.com/wallabag/wallabag/pull/4518), [#4517](https://github.com/wallabag/wallabag/pull/4517)
|
|
||||||
- Add Ukrainian translation [#4489](https://github.com/wallabag/wallabag/pull/4489)
|
|
||||||
- Add language support for Simplified Chinese(简体中文)[#4281](https://github.com/wallabag/wallabag/pull/4281)
|
|
||||||
- Add Dutch translation to the settings [#4632](https://github.com/wallabag/wallabag/pull/4632)
|
|
||||||
- Support for Weblate [#4442](https://github.com/wallabag/wallabag/pull/4442) & [#4447](https://github.com/wallabag/wallabag/pull/4447)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Fixed Instapaper import date order [#3980](https://github.com/wallabag/wallabag/pull/3980)
|
|
||||||
- Add missing entries in craue_config_setting. [#3868](https://github.com/wallabag/wallabag/pull/3868)
|
|
||||||
- Fix `reading_time` being NULL on SQLite [#4020](https://github.com/wallabag/wallabag/pull/4020)
|
|
||||||
- Fix createdAt filter on material [#4299](https://github.com/wallabag/wallabag/pull/4299)
|
|
||||||
- Fix duplicated icons on "Search engine" and "new link" forms [#4149](https://github.com/wallabag/wallabag/pull/4149)
|
|
||||||
- Fix entries export from search view [#4278](https://github.com/wallabag/wallabag/pull/4278)
|
|
||||||
- Fixed URL to share entry via twitter [#4250](https://github.com/wallabag/wallabag/pull/4250)
|
|
||||||
- Sidebar sub entries not conditioned by hover anymore [#4254](https://github.com/wallabag/wallabag/pull/4254)
|
|
||||||
- Fix print of long pages [#4263](https://github.com/wallabag/wallabag/pull/4263)
|
|
||||||
- Fixed duplicated tags when renaming them [#4310](https://github.com/wallabag/wallabag/pull/4310)
|
|
||||||
- Added authentication during import command for paywalled websites [#4325](https://github.com/wallabag/wallabag/pull/4325)
|
|
||||||
- Added more coherence with color links for material theme [#4346](https://github.com/wallabag/wallabag/pull/4346)
|
|
||||||
- Changed visibility for article stats [#4347](https://github.com/wallabag/wallabag/pull/4347)
|
|
||||||
- PHP 7.4 support [#4309](https://github.com/wallabag/wallabag/pull/4309)
|
|
||||||
|
|
||||||
## [2.3.8](https://github.com/wallabag/wallabag/tree/2.3.8)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.7...2.3.8)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Jump to 2.3.8-dev [#3897](https://github.com/wallabag/wallabag/pull/3897)
|
|
||||||
- material: fix left padding on non-entry pages [#3901](https://github.com/wallabag/wallabag/pull/3901)
|
|
||||||
- Make dev/install/update script posix compatible [#3860](https://github.com/wallabag/wallabag/pull/3860)
|
|
||||||
- epub: fix exception when articles have the same title [#3908](https://github.com/wallabag/wallabag/pull/3908)
|
|
||||||
- Fix PHP warning [#3909](https://github.com/wallabag/wallabag/pull/3909)
|
|
||||||
- Add ability to match many domains for credentials [#3937](https://github.com/wallabag/wallabag/pull/3937)
|
|
||||||
- material: add metadata to list view [#3942](https://github.com/wallabag/wallabag/pull/3942)
|
|
||||||
- Enable no-referrer on img tags, enable strict-origin-when-cross-origin by default [#3943](https://github.com/wallabag/wallabag/pull/3943)
|
|
||||||
- Remove preview picture from share view page#3922
|
|
||||||
- Fix Intl Locale issue [#3964](https://github.com/wallabag/wallabag/pull/3964)
|
|
||||||
|
|
||||||
## [2.3.7](https://github.com/wallabag/wallabag/tree/2.3.7)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.6...2.3.7)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Jump to 2.3.7-dev [#3837](https://github.com/wallabag/wallabag/pull/3837)
|
|
||||||
- Fix bad order parameter in the API [#3841](https://github.com/wallabag/wallabag/pull/3841)
|
|
||||||
- Update composer.json to add php-tidy (ext-tidy) [#3853](https://github.com/wallabag/wallabag/pull/3853)
|
|
||||||
- Add dedicated email for site config issue [#3861](https://github.com/wallabag/wallabag/pull/3861)
|
|
||||||
- Fix read & starred status in Pocket import [#3819](https://github.com/wallabag/wallabag/pull/3819)
|
|
||||||
- Fix broken 2 factor auth logo image [#3869](https://github.com/wallabag/wallabag/pull/3869)
|
|
||||||
- Fix CORS for API [#3882](https://github.com/wallabag/wallabag/pull/3882)
|
|
||||||
- Add support of expect parameter to change return object when deleting entry [#3887](https://github.com/wallabag/wallabag/pull/3887)
|
|
||||||
- epub export: fix missing cover image, only for exports of one article [#3886](https://github.com/wallabag/wallabag/pull/3886)
|
|
||||||
- Allow optional --ignore-root-warning [#3885](https://github.com/wallabag/wallabag/pull/3885)
|
|
||||||
- material: fix left padding of content on medium screens [#3893](https://github.com/wallabag/wallabag/pull/3893)
|
|
||||||
- material: hide creation date from card actions on specific sizes [#3894](https://github.com/wallabag/wallabag/pull/3894)
|
|
||||||
|
|
||||||
## [2.3.6](https://github.com/wallabag/wallabag/tree/2.3.6)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.5...2.3.6)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Jump to 2.3.6-dev and update release process [#3814](https://github.com/wallabag/wallabag/pull/3814)
|
|
||||||
- Fix tag API leak [#3823](https://github.com/wallabag/wallabag/pull/3823)
|
|
||||||
- Validate imported entry to avoid error on import [#3816](https://github.com/wallabag/wallabag/pull/3816)
|
|
||||||
- Fix incorrect reading time calculation for entries with CJK characters [#3820](https://github.com/wallabag/wallabag/pull/3820)
|
|
||||||
- EntriesExport/epub: replace epub identifier with unique urn [#3827](https://github.com/wallabag/wallabag/pull/3827)
|
|
||||||
- Fix settings field inverted [#3833](https://github.com/wallabag/wallabag/pull/3833)
|
|
||||||
- Cast client id to avoid PG error [#3831](https://github.com/wallabag/wallabag/pull/3831)
|
|
||||||
- Rework of EPUB/PDF exports [#3826](https://github.com/wallabag/wallabag/pull/3826)
|
|
||||||
|
|
||||||
## [2.3.5](https://github.com/wallabag/wallabag/tree/2.3.5)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.4...2.3.5)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Jump to 2.3.5-dev and update release process [#3778](https://github.com/wallabag/wallabag/pull/3778)
|
|
||||||
- Remove preview picture from single entry view page [#3765](https://github.com/wallabag/wallabag/pull/3765)
|
|
||||||
- Fix Android app login issue [#3784](https://github.com/wallabag/wallabag/pull/3784)
|
|
||||||
- material: fix missing thumbnail on list view [#3782](https://github.com/wallabag/wallabag/pull/3782)
|
|
||||||
- material: decrease size of tags on list view [#3783](https://github.com/wallabag/wallabag/pull/3783)
|
|
||||||
- build: upgrade yarn dependencies, update prod assets [#3781](https://github.com/wallabag/wallabag/pull/3781)
|
|
||||||
- No more dev for guzzle-site-authenticator [#3810](https://github.com/wallabag/wallabag/pull/3810)
|
|
||||||
|
|
||||||
## [2.3.4](https://github.com/wallabag/wallabag/tree/2.3.4)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.3...2.3.4)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Fix image downloading on null image path [#3684](https://github.com/wallabag/wallabag/pull/3684)
|
|
||||||
- Remove remaining deprecation notices [#3686](https://github.com/wallabag/wallabag/pull/3686)
|
|
||||||
- Fix mobile viewport on big iframe and video elements [#3683](https://github.com/wallabag/wallabag/pull/3683)
|
|
||||||
- Autofocus the username field on the login page [#3691](https://github.com/wallabag/wallabag/pull/3691)
|
|
||||||
- Feature/svg logo [#3692](https://github.com/wallabag/wallabag/pull/3692)
|
|
||||||
- Fixes a typo [#3702](https://github.com/wallabag/wallabag/pull/3702)
|
|
||||||
- Update release script [#3705](https://github.com/wallabag/wallabag/pull/3705)
|
|
||||||
- Removing failing test from Travis [#3707](https://github.com/wallabag/wallabag/pull/3707)
|
|
||||||
- Replace SO url by lemonde.fr to avoid random failing test [#3685](https://github.com/wallabag/wallabag/pull/3685)
|
|
||||||
- php-cs-fixer: native_function_invocation [#3716](https://github.com/wallabag/wallabag/pull/3716)
|
|
||||||
- PHP 7.2 shouldn't fail [#3717](https://github.com/wallabag/wallabag/pull/3717)
|
|
||||||
- Liberation goes https [#3726](https://github.com/wallabag/wallabag/pull/3726)
|
|
||||||
- Bugfix: Sanitize the title of a saved webpage from invalid UTF-8 characters. [#3725](https://github.com/wallabag/wallabag/pull/3725)
|
|
||||||
- Fix dockerfile php72 [#3734](https://github.com/wallabag/wallabag/pull/3734)
|
|
||||||
- Fix sort parameters [#3719](https://github.com/wallabag/wallabag/pull/3719)
|
|
||||||
- Add note on GitHub PR template to auto-close issues [#3763](https://github.com/wallabag/wallabag/pull/3763)
|
|
||||||
- Fix link to wallabag requirements in documentation [#3766](https://github.com/wallabag/wallabag/pull/3766)
|
|
||||||
- Update translation when marking as read [#3772](https://github.com/wallabag/wallabag/pull/3772)
|
|
||||||
- Makefile fixes for non GNU systems [#3706](https://github.com/wallabag/wallabag/pull/3706)
|
|
||||||
- Card no preview replaced by wallabag logo [#3774](https://github.com/wallabag/wallabag/pull/3774)
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
|
|
||||||
- Propose YunoHost badge for installing [#3678](https://github.com/wallabag/wallabag/pull/3678)
|
|
||||||
- More robust srcset image attribute handling [#3690](https://github.com/wallabag/wallabag/pull/3690)
|
|
||||||
- Rename getBuilderByUser and refactor query for untagged entries [#3712](https://github.com/wallabag/wallabag/pull/3712)
|
|
||||||
- Show tags on non-image gallery preview card [#3743](https://github.com/wallabag/wallabag/pull/3743)
|
|
||||||
- add manifest.json for android pwa [#3606](https://github.com/wallabag/wallabag/pull/3606)
|
|
||||||
- Add placeholder image to card-based gallery entries page [#3745](https://github.com/wallabag/wallabag/pull/3745)
|
|
||||||
- Abort running install and update script if root [#3733](https://github.com/wallabag/wallabag/pull/3733)
|
|
||||||
- Swap entry url with origin url if graby provides an updated one [#3553](https://github.com/wallabag/wallabag/pull/3553)
|
|
||||||
|
|
||||||
## [2.3.3](https://github.com/wallabag/wallabag/tree/2.3.3)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.2...2.3.3)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Fix error when withRemove variable is not defined. [#3573](https://github.com/wallabag/wallabag/pull/3573)
|
|
||||||
- Fix title card HTML parsing [#3592](https://github.com/wallabag/wallabag/pull/3592)
|
|
||||||
- Fix tests [#3597](https://github.com/wallabag/wallabag/pull/3597)
|
|
||||||
- Fix tests [#3619](https://github.com/wallabag/wallabag/pull/3619)
|
|
||||||
- Better encoding of the URI for the bookmarklet [#3616](https://github.com/wallabag/wallabag/pull/3616)
|
|
||||||
- Fix overflow wrap issue [#3652](https://github.com/wallabag/wallabag/pull/3652)
|
|
||||||
- Fix/firefox mobile unneeded resize [#3653](https://github.com/wallabag/wallabag/pull/3653)
|
|
||||||
- Fix srcset attribute on images downloaded [#3661](https://github.com/wallabag/wallabag/pull/3661)
|
|
||||||
- Fix authors and preview alt encoding display [#3664](https://github.com/wallabag/wallabag/pull/3664)
|
|
||||||
- Spelling: GitHub, Log out, of the dev [#3614](https://github.com/wallabag/wallabag/pull/3614)
|
|
||||||
- Fix tests [#3668](https://github.com/wallabag/wallabag/pull/3668)
|
|
||||||
- Fixed migrations with dash into db names [#3538](https://github.com/wallabag/wallabag/pull/3538)
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
|
|
||||||
- Allow login by email [#3615](https://github.com/wallabag/wallabag/pull/3615)
|
|
||||||
- Occitan update [#3646](https://github.com/wallabag/wallabag/pull/3646)
|
|
||||||
- Highlight code in articles using highlight.js [#3636](https://github.com/wallabag/wallabag/pull/3636)
|
|
||||||
|
|
||||||
## [2.3.2](https://github.com/wallabag/wallabag/tree/2.3.2)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.1...2.3.2)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Add `set -eu` to update.sh [#3546](https://github.com/wallabag/wallabag/pull/3546)
|
|
||||||
- Fix broken link to remove tags from entries [#3536](https://github.com/wallabag/wallabag/pull/3536)
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
|
|
||||||
- Nav actions updated [#3541](https://github.com/wallabag/wallabag/pull/3541)
|
|
||||||
- Replaced Create new client link with a button [#3539](https://github.com/wallabag/wallabag/pull/3539)
|
|
||||||
|
|
||||||
## [2.3.1](https://github.com/wallabag/wallabag/tree/2.3.1)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.0...2.3.1)
|
|
||||||
|
|
||||||
### Fixes
|
|
||||||
|
|
||||||
- Changed the way to check for initial migration [#3487](https://github.com/wallabag/wallabag/pull/3487)
|
|
||||||
- Displayed the RSS icon on homepage route [#3490](https://github.com/wallabag/wallabag/pull/3490)
|
|
||||||
- Hided the share toggle button if no service is enabled [#3492](https://github.com/wallabag/wallabag/pull/3492)
|
|
||||||
- Updated robots.txt to prevent crawling [#3510](https://github.com/wallabag/wallabag/pull/3510)
|
|
||||||
- Fixed lower case tags migration [#3507](https://github.com/wallabag/wallabag/pull/3507)
|
|
||||||
- Fixed initial migration when using custom table prefix [#3504](https://github.com/wallabag/wallabag/pull/3504)
|
|
||||||
- Fixed assets for subfolder install [#3524](https://github.com/wallabag/wallabag/pull/3524)
|
|
||||||
- Fixed empty card title link [#3525](https://github.com/wallabag/wallabag/pull/3525)
|
|
||||||
- Fixed empty title and domain_name when exception is thrown during fetch [#3442](https://github.com/wallabag/wallabag/pull/3442)
|
|
||||||
- API: copied entry object before sending, to keep id [#3516](https://github.com/wallabag/wallabag/pull/3516)
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
|
|
||||||
- Added custom driver & schema manager for PostgreSQL 10 [#3488](https://github.com/wallabag/wallabag/pull/3488)
|
|
||||||
- Replaced exit_to_app, redo and autorenew icons [#3513](https://github.com/wallabag/wallabag/pull/3513)
|
|
||||||
- Added PHP 7.2 compatibility [#3515](https://github.com/wallabag/wallabag/pull/3515)
|
|
||||||
|
|
||||||
## [2.3.0](https://github.com/wallabag/wallabag/tree/2.3.0) (2017-12-11)
|
|
||||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.2.3...2.3.0)
|
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.2.3...2.3.0)
|
||||||
|
|
||||||
### API
|
### API
|
||||||
@ -668,7 +32,7 @@
|
|||||||
### Features
|
### Features
|
||||||
|
|
||||||
- Share articles to Scuttle (https://github.com/scronide/scuttle) instance [#2999](https://github.com/wallabag/wallabag/pull/2999)
|
- Share articles to Scuttle (https://github.com/scronide/scuttle) instance [#2999](https://github.com/wallabag/wallabag/pull/2999)
|
||||||
- Allow to remove all archived entries [#3020](https://github.com/wallabag/wallabag/pull/3020)
|
- Allow to remove all archived entries [#3020](https://github.com/wallabag/wallabag/pull/3020)
|
||||||
- Added publication date and author [#3024](https://github.com/wallabag/wallabag/pull/3024)
|
- Added publication date and author [#3024](https://github.com/wallabag/wallabag/pull/3024)
|
||||||
- Added `notmatches` operator for automatic tagging rule [#3047](https://github.com/wallabag/wallabag/pull/3047)
|
- Added `notmatches` operator for automatic tagging rule [#3047](https://github.com/wallabag/wallabag/pull/3047)
|
||||||
- Search & paginate users [#3060](https://github.com/wallabag/wallabag/pull/3060)
|
- Search & paginate users [#3060](https://github.com/wallabag/wallabag/pull/3060)
|
||||||
@ -691,7 +55,7 @@
|
|||||||
- Changed default value for list mode (grid instead of list) [#3014](https://github.com/wallabag/wallabag/pull/3014)
|
- Changed default value for list mode (grid instead of list) [#3014](https://github.com/wallabag/wallabag/pull/3014)
|
||||||
- Remove `isPublic` from Entry entity [#3030](https://github.com/wallabag/wallabag/pull/3030)
|
- Remove `isPublic` from Entry entity [#3030](https://github.com/wallabag/wallabag/pull/3030)
|
||||||
- Use username to import [#3080](https://github.com/wallabag/wallabag/pull/3080)
|
- Use username to import [#3080](https://github.com/wallabag/wallabag/pull/3080)
|
||||||
- Adds Webpack support and remove Grunt [#3022](https://github.com/wallabag/wallabag/pull/3022)
|
- Adds Webpack support and remove Grunt [#3022](https://github.com/wallabag/wallabag/pull/3022)
|
||||||
- Improved Guzzle subscribers extensibility [#2751](https://github.com/wallabag/wallabag/pull/2751)
|
- Improved Guzzle subscribers extensibility [#2751](https://github.com/wallabag/wallabag/pull/2751)
|
||||||
- Added logger when we match Tagging rules [#3110](https://github.com/wallabag/wallabag/pull/3110)
|
- Added logger when we match Tagging rules [#3110](https://github.com/wallabag/wallabag/pull/3110)
|
||||||
- unify Download/Export wording. [#3130](https://github.com/wallabag/wallabag/pull/3130)
|
- unify Download/Export wording. [#3130](https://github.com/wallabag/wallabag/pull/3130)
|
||||||
|
|||||||
@ -1,76 +0,0 @@
|
|||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as
|
|
||||||
contributors and maintainers pledge to making participation in our project and
|
|
||||||
our community a harassment-free experience for everyone, regardless of age, body
|
|
||||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
|
||||||
level of experience, education, socio-economic status, nationality, personal
|
|
||||||
appearance, race, religion, or sexual identity and orientation.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment
|
|
||||||
include:
|
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
|
||||||
* Being respectful of differing viewpoints and experiences
|
|
||||||
* Gracefully accepting constructive criticism
|
|
||||||
* Focusing on what is best for the community
|
|
||||||
* Showing empathy towards other community members
|
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
|
||||||
advances
|
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
|
||||||
* Publishing others' private information, such as a physical or electronic
|
|
||||||
address, without explicit permission
|
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
|
||||||
professional setting
|
|
||||||
|
|
||||||
## Our Responsibilities
|
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable
|
|
||||||
behavior and are expected to take appropriate and fair corrective action in
|
|
||||||
response to any instances of unacceptable behavior.
|
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or
|
|
||||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
||||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
|
||||||
permanently any contributor for other behaviors that they deem inappropriate,
|
|
||||||
threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces
|
|
||||||
when an individual is representing the project or its community. Examples of
|
|
||||||
representing a project or community include using an official project e-mail
|
|
||||||
address, posting via an official social media account, or acting as an appointed
|
|
||||||
representative at an online or offline event. Representation of a project may be
|
|
||||||
further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported by contacting the project team at hello@wallabag.org. All
|
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
|
||||||
is deemed necessary and appropriate to the circumstances. The project team is
|
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
|
||||||
Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
|
||||||
faith may face temporary or permanent repercussions as determined by other
|
|
||||||
members of the project's leadership.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
|
||||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see
|
|
||||||
https://www.contributor-covenant.org/faq
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2013-current Nicolas Lœuillet
|
Copyright (c) 2013-2017 Nicolas Lœuillet
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r), [@tcitworld](https://github.com/tcitworld) and [@Kdecherf](https://github.com/Kdecherf) under the MIT License.
|
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r) and [@tcitworld](https://github.com/tcitworld) under the MIT License.
|
||||||
|
|
||||||
Thank you [to others contributors](https://github.com/wallabag/wallabag/graphs/contributors).
|
Thank you [to others contributors](https://github.com/wallabag/wallabag/graphs/contributors).
|
||||||
|
|||||||
15
Capfile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
set :deploy_config_path, 'app/config/capistrano/deploy.rb'
|
||||||
|
set :stage_config_path, 'app/config/capistrano/deploy'
|
||||||
|
|
||||||
|
# Load DSL and set up stages
|
||||||
|
require 'capistrano/setup'
|
||||||
|
|
||||||
|
# Include default deployment tasks
|
||||||
|
require 'capistrano/deploy'
|
||||||
|
|
||||||
|
require 'capistrano/composer'
|
||||||
|
require 'capistrano/file-permissions'
|
||||||
|
require 'capistrano/symfony'
|
||||||
|
|
||||||
|
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
|
||||||
|
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
|
||||||
72
GNUmakefile
@ -1,72 +0,0 @@
|
|||||||
SHELL=bash
|
|
||||||
TMP_FOLDER=/tmp
|
|
||||||
RELEASE_FOLDER=wllbg-release
|
|
||||||
|
|
||||||
# ensure the ENV variable is well defined
|
|
||||||
AVAILABLE_ENV := prod dev test
|
|
||||||
ifneq ($(filter $(ENV),$(AVAILABLE_ENV)),)
|
|
||||||
# all good
|
|
||||||
else
|
|
||||||
# not good, force it to "prod"
|
|
||||||
override ENV = prod
|
|
||||||
endif
|
|
||||||
|
|
||||||
DOCKER_COMPOSE_RUNNING := $(shell docker compose ps -q | grep -q . && echo 1 || echo 0)
|
|
||||||
|
|
||||||
ifeq ($(DOCKER_COMPOSE_RUNNING), 1)
|
|
||||||
PHP := docker compose run --rm php php
|
|
||||||
PHP_NO_XDEBUG := docker compose run -e XDEBUG_MODE=off --rm php php
|
|
||||||
YARN := docker compose run --rm php yarn
|
|
||||||
else
|
|
||||||
PHP := php
|
|
||||||
PHP_NO_XDEBUG := XDEBUG_MODE=off php
|
|
||||||
YARN := yarn
|
|
||||||
endif
|
|
||||||
|
|
||||||
help: ## Display this help menu
|
|
||||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
||||||
|
|
||||||
install: ## Install wallabag with the latest version
|
|
||||||
@./scripts/install.sh $(ENV)
|
|
||||||
|
|
||||||
update: ## Update the wallabag installation to the latest version
|
|
||||||
@./scripts/update.sh $(ENV)
|
|
||||||
|
|
||||||
dev: ENV=dev
|
|
||||||
dev: build ## Install the latest dev version
|
|
||||||
@./scripts/dev.sh
|
|
||||||
|
|
||||||
run: ## Run the wallabag built-in server
|
|
||||||
@$(PHP) bin/console server:run --env=dev
|
|
||||||
|
|
||||||
build: ## Run webpack
|
|
||||||
@$(YARN) install
|
|
||||||
@$(YARN) build:$(ENV)
|
|
||||||
|
|
||||||
test: ## Launch wallabag testsuite
|
|
||||||
@$(PHP_NO_XDEBUG) -dmemory_limit=-1 bin/phpunit -v
|
|
||||||
|
|
||||||
fix-cs: ## Run PHP-CS-Fixer
|
|
||||||
@$(PHP_NO_XDEBUG) bin/php-cs-fixer fix
|
|
||||||
|
|
||||||
phpstan: ## Run PHPStan
|
|
||||||
@$(PHP_NO_XDEBUG) bin/phpstan analyse
|
|
||||||
|
|
||||||
lint-js: ## Run ESLint
|
|
||||||
@$(YARN) lint:js
|
|
||||||
|
|
||||||
lint-scss: ## Run Stylelint
|
|
||||||
@$(YARN) lint:scss
|
|
||||||
|
|
||||||
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
|
|
||||||
ifndef VERSION
|
|
||||||
$(error VERSION is not set)
|
|
||||||
endif
|
|
||||||
@./scripts/release.sh $(VERSION) $(TMP_FOLDER) $(RELEASE_FOLDER) $(ENV)
|
|
||||||
|
|
||||||
deploy: ## Deploy wallabag
|
|
||||||
@bundle exec cap staging deploy
|
|
||||||
|
|
||||||
.PHONY: help install update build test release deploy run dev fix-cs phpstan
|
|
||||||
|
|
||||||
.DEFAULT_GOAL := install
|
|
||||||
6
Gemfile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem 'capistrano', '~> 3.4'
|
||||||
|
gem 'capistrano-composer'
|
||||||
|
gem 'capistrano-symfony', '~> 1.0.0.rc1'
|
||||||
|
gem 'capistrano-file-permissions'
|
||||||
37
Gemfile.lock
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
capistrano (3.4.0)
|
||||||
|
i18n
|
||||||
|
rake (>= 10.0.0)
|
||||||
|
sshkit (~> 1.3)
|
||||||
|
capistrano-composer (0.0.6)
|
||||||
|
capistrano (>= 3.0.0.pre)
|
||||||
|
capistrano-file-permissions (1.0.0)
|
||||||
|
capistrano (~> 3.0)
|
||||||
|
capistrano-symfony (1.0.0.rc1)
|
||||||
|
capistrano (~> 3.1)
|
||||||
|
capistrano-composer (~> 0.0.3)
|
||||||
|
capistrano-file-permissions (~> 1.0)
|
||||||
|
colorize (0.7.7)
|
||||||
|
i18n (0.7.0)
|
||||||
|
net-scp (1.2.1)
|
||||||
|
net-ssh (>= 2.6.5)
|
||||||
|
net-ssh (2.9.2)
|
||||||
|
rake (10.4.2)
|
||||||
|
sshkit (1.7.1)
|
||||||
|
colorize (>= 0.7.0)
|
||||||
|
net-scp (>= 1.1.2)
|
||||||
|
net-ssh (>= 2.8.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
capistrano (~> 3.4)
|
||||||
|
capistrano-composer
|
||||||
|
capistrano-file-permissions
|
||||||
|
capistrano-symfony (~> 1.0.0.rc1)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.13.5
|
||||||
54
Makefile
Normal file → Executable file
@ -1,2 +1,52 @@
|
|||||||
.DEFAULT:
|
TMP_FOLDER=/tmp
|
||||||
gmake $@
|
RELEASE_FOLDER=wllbg-release
|
||||||
|
|
||||||
|
ENV ?= prod
|
||||||
|
|
||||||
|
help: ## Display this help menu
|
||||||
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||||
|
|
||||||
|
clean: ## Clear the application cache
|
||||||
|
rm -rf var/cache/*
|
||||||
|
|
||||||
|
install: ## Install wallabag with the latest version
|
||||||
|
@sh scripts/install.sh $(ENV)
|
||||||
|
|
||||||
|
update: ## Update the wallabag installation to the latest version
|
||||||
|
@sh scripts/update.sh $(ENV)
|
||||||
|
|
||||||
|
dev: ## Install the latest dev version
|
||||||
|
@sh scripts/dev.sh
|
||||||
|
|
||||||
|
run: ## Run the wallabag built-in server
|
||||||
|
@php bin/console server:run --env=$(ENV)
|
||||||
|
|
||||||
|
build: ## Run webpack
|
||||||
|
@npm run build:$(ENV)
|
||||||
|
|
||||||
|
prepare: clean ## Prepare database for testsuite
|
||||||
|
ifdef DB
|
||||||
|
cp app/config/tests/parameters_test.$(DB).yml app/config/parameters_test.yml
|
||||||
|
endif
|
||||||
|
-php bin/console doctrine:database:drop --force --env=test
|
||||||
|
php bin/console doctrine:database:create --env=test
|
||||||
|
php bin/console doctrine:migrations:migrate --no-interaction --env=test
|
||||||
|
|
||||||
|
fixtures: ## Load fixtures into database
|
||||||
|
php bin/console doctrine:fixtures:load --no-interaction --env=test
|
||||||
|
|
||||||
|
test: prepare fixtures ## Launch wallabag testsuite
|
||||||
|
bin/simple-phpunit -v
|
||||||
|
|
||||||
|
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
|
||||||
|
ifndef VERSION
|
||||||
|
$(error VERSION is not set)
|
||||||
|
endif
|
||||||
|
@sh scripts/release.sh $(VERSION) $(TMP_FOLDER) $(RELEASE_FOLDER) $(ENV)
|
||||||
|
|
||||||
|
deploy: ## Deploy wallabag
|
||||||
|
@bundle exec cap staging deploy
|
||||||
|
|
||||||
|
.PHONY: help clean prepare install fixtures update build test release deploy run dev
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := install
|
||||||
|
|||||||
69
README.md
@ -1,66 +1,29 @@
|
|||||||
# wallabag
|
[](https://travis-ci.org/wallabag/wallabag)
|
||||||
|
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=master)
|
||||||
|
[](https://gitter.im/wallabag/wallabag)
|
||||||
|
|
||||||

|
# What is wallabag?
|
||||||
[](https://matrix.to/#/#wallabag:matrix.org)
|
wallabag is a self-hostable PHP application allowing you to not miss any content anymore.
|
||||||
[](https://liberapay.com/wallabag/donate)
|
Click, save and read it when you can. It extracts content so that you can read it when you have time.
|
||||||
[](https://hosted.weblate.org/engage/wallabag/?utm_source=widget)
|
|
||||||

|
|
||||||
|
|
||||||
wallabag is a web application allowing you to save web pages for later reading.
|
More information on our website: [wallabag.org](https://wallabag.org).
|
||||||
Click, save and read it when you want. It extracts content so that you won't be distracted by pop-ups and cie.
|
|
||||||
|
|
||||||
You can install it on your own server, or you can create an account on [wallabag.it](https://wallabag.it).
|
If you do not have your own server, consider [the wallabag.it hosting solution](https://wallabag.it).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
* Website: [wallabag.org](https://wallabag.org)
|
# Install wallabag
|
||||||
* Android app: [wallabag/android-app](https://github.com/wallabag/android-app)
|
Please read [the documentation to see the wallabag requirements](http://doc.wallabag.org/en/master/user/installation.html#requirements).
|
||||||
* iOS app: [wallabag/ios-app](https://github.com/wallabag/ios-app)
|
|
||||||
* Browser extension: [wallabag/wallabagger](https://github.com/wallabag/wallabagger)
|
|
||||||
* GNOME (Linux) app: [read-it-later](https://gitlab.gnome.org/World/read-it-later) (not maintained by this project)
|
|
||||||
* All resources about wallabag ecosystem are listed here: https://github.com/wallabag/wallabag/wiki/wallabag-ecosystem
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
The documentation is available at https://doc.wallabag.org.
|
|
||||||
|
|
||||||
You can contribute to it through its dedicated repository, available here: https://github.com/wallabag/doc.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Please read [the documentation to see the wallabag requirements](https://doc.wallabag.org/en/admin/installation/requirements.html).
|
|
||||||
|
|
||||||
Then you can install wallabag by executing the following commands:
|
Then you can install wallabag by executing the following commands:
|
||||||
|
|
||||||
```bash
|
```
|
||||||
git clone https://github.com/wallabag/wallabag.git
|
git clone https://github.com/wallabag/wallabag.git
|
||||||
cd wallabag && make install
|
cd wallabag && make install
|
||||||
|
make run
|
||||||
```
|
```
|
||||||
|
|
||||||
Now, [configure a virtual host](https://doc.wallabag.org/en/admin/installation/virtualhosts.html) to use your wallabag.
|
# License
|
||||||
|
Copyright © 2013-2017 Nicolas Lœuillet <nicolas@loeuillet.org>
|
||||||
### Other methods
|
|
||||||
|
|
||||||
Refer to the [installation documentation](https://doc.wallabag.org/en/admin/installation/installation.html) for other installation methods.
|
|
||||||
|
|
||||||
## Translation
|
|
||||||
|
|
||||||
This project uses [Weblate](https://weblate.org/) for translation.
|
|
||||||
|
|
||||||
Feel free to help us [translating wallabag](https://hosted.weblate.org/projects/wallabag/).
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
To learn more about developing wallabag, please refer to the [contribution guide](./.github/CONTRIBUTING.md).
|
|
||||||
|
|
||||||
Content extraction relies on [Graby](https://github.com/j0k3r/graby), [php-readability](https://github.com/j0k3r/php-readability) and [ftr-site-config](https://github.com/fivefilters/ftr-site-config).
|
|
||||||
|
|
||||||
## Sponsors
|
|
||||||
|
|
||||||
<img src="https://api.blackfire.io/blackfire-logo.png" alt="Blackfire" width="200" />
|
|
||||||
|
|
||||||
## License
|
|
||||||
Copyright © 2013-current Nicolas Lœuillet <nicolas@loeuillet.org>
|
|
||||||
|
|
||||||
This work is free. You can redistribute it and/or modify it under the
|
This work is free. You can redistribute it and/or modify it under the
|
||||||
terms of the MIT License. See the [COPYING.md](./COPYING.md) file for more details.
|
terms of the MIT License. See the COPYING file for more details.
|
||||||
|
|||||||
@ -4,34 +4,74 @@ A release is mostly a git tag of http://github.com/wallabag/wallabag, following
|
|||||||
|
|
||||||
### Steps to release
|
### Steps to release
|
||||||
|
|
||||||
During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE` (like 2.3.4).
|
During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE`.
|
||||||
|
|
||||||
#### Prepare the release
|
#### Files to edit
|
||||||
|
|
||||||
- Update these files with new information
|
- `app/config/wallabag.yml` (`wallabag_core.version`)
|
||||||
- `app/config/wallabag.yml` (`wallabag.version`)
|
- `CHANGELOG.md`
|
||||||
- `CHANGELOG.md`
|
|
||||||
- Create a PR named "Prepare $LAST_WALLABAG_RELEASE release".
|
|
||||||
- Wait for test to be ok, merge it.
|
|
||||||
|
|
||||||
#### Create a new release on GitHub
|
#### Create release on GitHub
|
||||||
|
|
||||||
- [Create the new release on GitHub](https://github.com/wallabag/wallabag/releases/new) by targetting the `master` branch or any appropriate branch (for instance backports).
|
- Run these commands to create the tag:
|
||||||
- Update [website](https://github.com/wallabag/website) to change MD5 sum and create the release blog post (based on the changelog).
|
|
||||||
|
```
|
||||||
|
git checkout master
|
||||||
|
git pull origin master
|
||||||
|
git checkout -b release-$LAST_WALLABAG_RELEASE
|
||||||
|
SYMFONY_ENV=prod composer up --no-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
- Update `.travis.yml` file and replace the composer line with this one:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
script:
|
||||||
|
- - travis_wait bash composer install -o --no-interaction --no-progress --prefer-dist
|
||||||
|
+ - travis_wait composer update --no-interaction --no-progress
|
||||||
|
```
|
||||||
|
|
||||||
|
- Then continue with these commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
git add --force composer.lock .travis.yml
|
||||||
|
git commit -m "Release wallabag $LAST_WALLABAG_RELEASE"
|
||||||
|
git push origin release-$LAST_WALLABAG_RELEASE
|
||||||
|
```
|
||||||
|
|
||||||
|
- Create a new pull request with this title `DON'T MERGE Release wallabag $LAST_WALLABAG_RELEASE`. This pull request is used to launch builds on Travis-CI.
|
||||||
|
- Run these command to create the package:
|
||||||
|
|
||||||
|
```
|
||||||
|
make release master /tmp wllbg-release prod
|
||||||
|
```
|
||||||
|
|
||||||
|
- [Create the new release on GitHub](https://github.com/wallabag/wallabag/releases/new). You have to upload on this page the package.
|
||||||
|
- Delete the `release-$LAST_WALLABAG_RELEASE` branch and close the pull request (**DO NOT MERGE IT**).
|
||||||
|
- Update the URL shortener (used on `wllbg.org` to generate links like `https://wllbg.org/latest-v2-package` or `http://wllbg.org/latest-v2`)
|
||||||
|
- Update [the downloads page](https://github.com/wallabag/wallabag.org/blob/master/content/pages/download.md) on the website (MD5 sum, release date)
|
||||||
- Update Dockerfile https://github.com/wallabag/docker (and create a new tag)
|
- Update Dockerfile https://github.com/wallabag/docker (and create a new tag)
|
||||||
- Put the next patch version suffixed with `-dev` in `app/config/wallabag.yml` (`wallabag.version`)
|
- Update wallabag.org website (downloads, releases and new blog post)
|
||||||
|
- Put the next patch version suffixed with `-dev` in `app/config/config.yml` (`wallabag_core.version`)
|
||||||
- Drink a :beer:!
|
- Drink a :beer:!
|
||||||
|
|
||||||
|
### `composer.lock`
|
||||||
|
A release tag must contain a `composer.lock` file. It sets which dependencies were available at the time a release was done,
|
||||||
|
making it easier to fix issues after the release. It also speeds up `composer install` on stable versions a LOT, by skipping the
|
||||||
|
dependencies resolution part.
|
||||||
|
|
||||||
|
Since `composer.lock` is ignored by default, either it must be removed from `.gitignore` _in the release branch_,
|
||||||
|
or it must be added using `git add --force composer.lock`.
|
||||||
|
|
||||||
### Target PHP version
|
### Target PHP version
|
||||||
`composer.lock` is _always_ built for a particular version, by default the one it is generated (with `composer update`).
|
`composer.lock` is _always_ built for a particular version, by default the one it is generated (with `composer update`).
|
||||||
|
|
||||||
If the PHP version used to generate the .lock isn't a widely available one (like PHP 8), a more common one should
|
If the PHP version used to generate the .lock isn't a widely available one (like PHP 7), a more common one should
|
||||||
be locally specified in `composer.lock`:
|
be locally specified in `composer.lock`:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"config": {
|
"config": {
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": "7.4.29",
|
"php": "5.5.9",
|
||||||
"ext-something": "4.0"
|
"ext-something": "4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +0,0 @@
|
|||||||
# Security Policy
|
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
|
||||||
|
|
||||||
Please report security issues to `hello@wallabag.org`
|
|
||||||
@ -1,9 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
use Symfony\Component\HttpKernel\Kernel;
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
use Wallabag\Import\ImportCompilerPass;
|
|
||||||
|
|
||||||
class AppKernel extends Kernel
|
class AppKernel extends Kernel
|
||||||
{
|
{
|
||||||
@ -14,6 +12,7 @@ class AppKernel extends Kernel
|
|||||||
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
|
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
|
||||||
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
||||||
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
||||||
|
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
|
||||||
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
||||||
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
||||||
new FOS\RestBundle\FOSRestBundle(),
|
new FOS\RestBundle\FOSRestBundle(),
|
||||||
@ -21,35 +20,39 @@ class AppKernel extends Kernel
|
|||||||
new JMS\SerializerBundle\JMSSerializerBundle(),
|
new JMS\SerializerBundle\JMSSerializerBundle(),
|
||||||
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
|
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
|
||||||
new Nelmio\CorsBundle\NelmioCorsBundle(),
|
new Nelmio\CorsBundle\NelmioCorsBundle(),
|
||||||
|
new Liip\ThemeBundle\LiipThemeBundle(),
|
||||||
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
||||||
new Spiriit\Bundle\FormFilterBundle\SpiriitFormFilterBundle(),
|
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
|
||||||
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
||||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||||
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
||||||
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
||||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||||
new Craue\ConfigBundle\CraueConfigBundle(),
|
new Craue\ConfigBundle\CraueConfigBundle(),
|
||||||
new BabDev\PagerfantaBundle\BabDevPagerfantaBundle(),
|
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
|
||||||
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
|
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
|
||||||
|
new BD\GuzzleSiteAuthenticatorBundle\BDGuzzleSiteAuthenticatorBundle(),
|
||||||
|
|
||||||
|
// wallabag bundles
|
||||||
|
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||||
|
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||||
|
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||||
|
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||||
|
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
|
||||||
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
|
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
|
||||||
new Sentry\SentryBundle\SentryBundle(),
|
|
||||||
new Twig\Extra\TwigExtraBundle\TwigExtraBundle(),
|
|
||||||
new Symfony\WebpackEncoreBundle\WebpackEncoreBundle(),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
||||||
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
||||||
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
||||||
|
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
|
||||||
|
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
|
||||||
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
|
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
|
||||||
|
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
|
||||||
|
|
||||||
if ('test' === $this->getEnvironment()) {
|
if ('test' === $this->getEnvironment()) {
|
||||||
$bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
|
$bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('dev' === $this->getEnvironment()) {
|
|
||||||
$bundles[] = new Symfony\Bundle\MakerBundle\MakerBundle();
|
|
||||||
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $bundles;
|
return $bundles;
|
||||||
@ -68,48 +71,14 @@ class AppKernel extends Kernel
|
|||||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||||
{
|
{
|
||||||
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
|
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
|
||||||
|
$loader->load(function ($container) {
|
||||||
$loader->load(function (ContainerBuilder $container) {
|
if ($container->getParameter('use_webpack_dev_server')) {
|
||||||
// $container->setParameter('container.autowiring.strict_mode', true);
|
$container->loadFromExtension('framework', [
|
||||||
// $container->setParameter('container.dumper.inline_class_loader', true);
|
'assets' => [
|
||||||
$container->addObjectResource($this);
|
'base_url' => 'http://localhost:8080/',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$loader->load(function (ContainerBuilder $container) {
|
|
||||||
$this->processDatabaseParameters($container);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function build(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
$container->addCompilerPass(new ImportCompilerPass());
|
|
||||||
}
|
|
||||||
|
|
||||||
private function processDatabaseParameters(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
switch ($container->getParameter('database_driver')) {
|
|
||||||
case 'pdo_mysql':
|
|
||||||
$scheme = 'mysql';
|
|
||||||
break;
|
|
||||||
case 'pdo_pgsql':
|
|
||||||
$scheme = 'pgsql';
|
|
||||||
break;
|
|
||||||
case 'pdo_sqlite':
|
|
||||||
$scheme = 'sqlite';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException('Unsupported database driver: ' . $container->getParameter('database_driver'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$container->setParameter('database_scheme', $scheme);
|
|
||||||
|
|
||||||
if ('sqlite' === $scheme) {
|
|
||||||
$container->setParameter('database_name', $container->getParameter('database_path'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$container->setParameter('database_user', (string) $container->getParameter('database_user'));
|
|
||||||
$container->setParameter('database_password', (string) $container->getParameter('database_password'));
|
|
||||||
$container->setParameter('database_port', (string) $container->getParameter('database_port'));
|
|
||||||
$container->setParameter('database_socket', (string) $container->getParameter('database_socket'));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
191
app/DoctrineMigrations/Version20160401000000.php
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial database structure.
|
||||||
|
*/
|
||||||
|
class Version20160401000000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
if ($this->version->getConfiguration()->getNumberOfExecutedMigrations() > 0) {
|
||||||
|
$this->version->markMigrated();
|
||||||
|
$this->skipIf(true, 'Database already initialized');
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
case 'sqlite':
|
||||||
|
$sql = <<<'SQL'
|
||||||
|
CREATE TABLE wallabag_craue_config_setting (name VARCHAR(255) NOT NULL, value VARCHAR(255) DEFAULT NULL, section VARCHAR(255) DEFAULT NULL, PRIMARY KEY(name));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_5D9649505E237E06 ON wallabag_craue_config_setting (name);
|
||||||
|
CREATE TABLE "wallabag_tagging_rule" (id INTEGER NOT NULL, config_id INTEGER DEFAULT NULL, rule VARCHAR(255) NOT NULL, tags CLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_2D9B3C5424DB0683 FOREIGN KEY (config_id) REFERENCES "wallabag_config" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE INDEX IDX_2D9B3C5424DB0683 ON "wallabag_tagging_rule" (config_id);
|
||||||
|
CREATE TABLE "wallabag_tag" (id INTEGER NOT NULL, label CLOB NOT NULL, slug VARCHAR(128) NOT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_4CA58A8C989D9B62 ON "wallabag_tag" (slug);
|
||||||
|
CREATE TABLE "wallabag_entry" (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, title CLOB DEFAULT NULL, url CLOB DEFAULT NULL, is_archived BOOLEAN NOT NULL, is_starred BOOLEAN NOT NULL, content CLOB DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, mimetype CLOB DEFAULT NULL, language CLOB DEFAULT NULL, reading_time INTEGER DEFAULT NULL, domain_name CLOB DEFAULT NULL, preview_picture CLOB DEFAULT NULL, is_public BOOLEAN DEFAULT '0', PRIMARY KEY(id), CONSTRAINT FK_F4D18282A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE INDEX IDX_F4D18282A76ED395 ON "wallabag_entry" (user_id);
|
||||||
|
CREATE TABLE wallabag_entry_tag (entry_id INTEGER NOT NULL, tag_id INTEGER NOT NULL, PRIMARY KEY(entry_id, tag_id), CONSTRAINT FK_C9F0DD7CBA364942 FOREIGN KEY (entry_id) REFERENCES "wallabag_entry" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_C9F0DD7CBAD26311 FOREIGN KEY (tag_id) REFERENCES "wallabag_tag" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE INDEX IDX_C9F0DD7CBA364942 ON wallabag_entry_tag (entry_id);
|
||||||
|
CREATE INDEX IDX_C9F0DD7CBAD26311 ON wallabag_entry_tag (tag_id);
|
||||||
|
CREATE TABLE "wallabag_config" (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, theme VARCHAR(255) NOT NULL, items_per_page INTEGER NOT NULL, language VARCHAR(255) NOT NULL, rss_token VARCHAR(255) DEFAULT NULL, rss_limit INTEGER DEFAULT NULL, reading_speed DOUBLE PRECISION DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_87E64C53A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_87E64C53A76ED395 ON "wallabag_config" (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_refresh_tokens (id INTEGER NOT NULL, client_id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INTEGER DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_20C9FB2419EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_20C9FB24A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_20C9FB245F37A13B ON wallabag_oauth2_refresh_tokens (token);
|
||||||
|
CREATE INDEX IDX_20C9FB2419EB6921 ON wallabag_oauth2_refresh_tokens (client_id);
|
||||||
|
CREATE INDEX IDX_20C9FB24A76ED395 ON wallabag_oauth2_refresh_tokens (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_access_tokens (id INTEGER NOT NULL, client_id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INTEGER DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_368A420919EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_368A4209A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_368A42095F37A13B ON wallabag_oauth2_access_tokens (token);
|
||||||
|
CREATE INDEX IDX_368A420919EB6921 ON wallabag_oauth2_access_tokens (client_id);
|
||||||
|
CREATE INDEX IDX_368A4209A76ED395 ON wallabag_oauth2_access_tokens (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_auth_codes (id INTEGER NOT NULL, client_id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, token VARCHAR(255) NOT NULL, redirect_uri CLOB NOT NULL, expires_at INTEGER DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_EE52E3FA19EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_EE52E3FAA76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_EE52E3FA5F37A13B ON wallabag_oauth2_auth_codes (token);
|
||||||
|
CREATE INDEX IDX_EE52E3FA19EB6921 ON wallabag_oauth2_auth_codes (client_id);
|
||||||
|
CREATE INDEX IDX_EE52E3FAA76ED395 ON wallabag_oauth2_auth_codes (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_clients (id INTEGER NOT NULL, random_id VARCHAR(255) NOT NULL, redirect_uris CLOB NOT NULL, secret VARCHAR(255) NOT NULL, allowed_grant_types CLOB NOT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE TABLE "wallabag_user" (id INTEGER NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, last_login DATETIME DEFAULT NULL, locked BOOLEAN NOT NULL, expired BOOLEAN NOT NULL, expires_at DATETIME DEFAULT NULL, confirmation_token VARCHAR(255) DEFAULT NULL, password_requested_at DATETIME DEFAULT NULL, roles CLOB NOT NULL, credentials_expired BOOLEAN NOT NULL, credentials_expire_at DATETIME DEFAULT NULL, name CLOB DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, authCode INTEGER DEFAULT NULL, twoFactorAuthentication BOOLEAN NOT NULL, trusted CLOB DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON "wallabag_user" (username_canonical);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON "wallabag_user" (email_canonical);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON "wallabag_user" (confirmation_token);
|
||||||
|
CREATE TABLE wallabag_annotation (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, entry_id INTEGER DEFAULT NULL, text CLOB NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, quote VARCHAR(255) NOT NULL, ranges CLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_A7AED006A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_A7AED006BA364942 FOREIGN KEY (entry_id) REFERENCES "wallabag_entry" (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
|
||||||
|
CREATE INDEX IDX_A7AED006A76ED395 ON wallabag_annotation (user_id);
|
||||||
|
CREATE INDEX IDX_A7AED006BA364942 ON wallabag_annotation (entry_id);
|
||||||
|
SQL
|
||||||
|
;
|
||||||
|
|
||||||
|
foreach (explode("\n", $sql) as $query) {
|
||||||
|
$this->addSql($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'mysql':
|
||||||
|
$sql = <<<'SQL'
|
||||||
|
CREATE TABLE wallabag_craue_config_setting (name VARCHAR(255) NOT NULL, value VARCHAR(255) DEFAULT NULL, section VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_5D9649505E237E06 (name), PRIMARY KEY(name)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE `wallabag_entry` (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, title LONGTEXT DEFAULT NULL, url LONGTEXT DEFAULT NULL, is_archived TINYINT(1) NOT NULL, is_starred TINYINT(1) NOT NULL, content LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, mimetype LONGTEXT DEFAULT NULL, language LONGTEXT DEFAULT NULL, reading_time INT DEFAULT NULL, domain_name LONGTEXT DEFAULT NULL, preview_picture LONGTEXT DEFAULT NULL, is_public TINYINT(1) DEFAULT '0', INDEX IDX_F4D18282A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_entry_tag (entry_id INT NOT NULL, tag_id INT NOT NULL, INDEX IDX_C9F0DD7CBA364942 (entry_id), INDEX IDX_C9F0DD7CBAD26311 (tag_id), PRIMARY KEY(entry_id, tag_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE `wallabag_config` (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, theme VARCHAR(255) NOT NULL, items_per_page INT NOT NULL, language VARCHAR(255) NOT NULL, rss_token VARCHAR(255) DEFAULT NULL, rss_limit INT DEFAULT NULL, reading_speed DOUBLE PRECISION DEFAULT NULL, UNIQUE INDEX UNIQ_87E64C53A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE `wallabag_tagging_rule` (id INT AUTO_INCREMENT NOT NULL, config_id INT DEFAULT NULL, rule VARCHAR(255) NOT NULL, tags LONGTEXT NOT NULL COMMENT '(DC2Type:simple_array)', INDEX IDX_2D9B3C5424DB0683 (config_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE `wallabag_tag` (id INT AUTO_INCREMENT NOT NULL, `label` LONGTEXT NOT NULL, slug VARCHAR(128) NOT NULL, UNIQUE INDEX UNIQ_4CA58A8C989D9B62 (slug), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_oauth2_clients (id INT AUTO_INCREMENT NOT NULL, random_id VARCHAR(255) NOT NULL, redirect_uris LONGTEXT NOT NULL COMMENT '(DC2Type:array)', secret VARCHAR(255) NOT NULL, allowed_grant_types LONGTEXT NOT NULL COMMENT '(DC2Type:array)', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_oauth2_access_tokens (id INT AUTO_INCREMENT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_368A42095F37A13B (token), INDEX IDX_368A420919EB6921 (client_id), INDEX IDX_368A4209A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_oauth2_refresh_tokens (id INT AUTO_INCREMENT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_20C9FB245F37A13B (token), INDEX IDX_20C9FB2419EB6921 (client_id), INDEX IDX_20C9FB24A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_oauth2_auth_codes (id INT AUTO_INCREMENT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, redirect_uri LONGTEXT NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_EE52E3FA5F37A13B (token), INDEX IDX_EE52E3FA19EB6921 (client_id), INDEX IDX_EE52E3FAA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE `wallabag_user` (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled TINYINT(1) NOT NULL, salt VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, last_login DATETIME DEFAULT NULL, locked TINYINT(1) NOT NULL, expired TINYINT(1) NOT NULL, expires_at DATETIME DEFAULT NULL, confirmation_token VARCHAR(255) DEFAULT NULL, password_requested_at DATETIME DEFAULT NULL, roles LONGTEXT NOT NULL COMMENT '(DC2Type:array)', credentials_expired TINYINT(1) NOT NULL, credentials_expire_at DATETIME DEFAULT NULL, name LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, authCode INT DEFAULT NULL, twoFactorAuthentication TINYINT(1) NOT NULL, trusted LONGTEXT DEFAULT NULL COMMENT '(DC2Type:json_array)', UNIQUE INDEX UNIQ_1D63E7E592FC23A8 (username_canonical), UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF (email_canonical), UNIQUE INDEX UNIQ_1D63E7E5C05FB297 (confirmation_token), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
CREATE TABLE wallabag_annotation (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, entry_id INT DEFAULT NULL, text LONGTEXT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, quote VARCHAR(255) NOT NULL, ranges LONGTEXT NOT NULL COMMENT '(DC2Type:array)', INDEX IDX_A7AED006A76ED395 (user_id), INDEX IDX_A7AED006BA364942 (entry_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||||
|
ALTER TABLE `wallabag_entry` ADD CONSTRAINT FK_F4D18282A76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE wallabag_entry_tag ADD CONSTRAINT FK_C9F0DD7CBA364942 FOREIGN KEY (entry_id) REFERENCES `wallabag_entry` (id);
|
||||||
|
ALTER TABLE wallabag_entry_tag ADD CONSTRAINT FK_C9F0DD7CBAD26311 FOREIGN KEY (tag_id) REFERENCES `wallabag_tag` (id);
|
||||||
|
ALTER TABLE `wallabag_config` ADD CONSTRAINT FK_87E64C53A76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE `wallabag_tagging_rule` ADD CONSTRAINT FK_2D9B3C5424DB0683 FOREIGN KEY (config_id) REFERENCES `wallabag_config` (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_access_tokens ADD CONSTRAINT FK_368A420919EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_access_tokens ADD CONSTRAINT FK_368A4209A76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_refresh_tokens ADD CONSTRAINT FK_20C9FB2419EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_refresh_tokens ADD CONSTRAINT FK_20C9FB24A76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_auth_codes ADD CONSTRAINT FK_EE52E3FA19EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id);
|
||||||
|
ALTER TABLE wallabag_oauth2_auth_codes ADD CONSTRAINT FK_EE52E3FAA76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE wallabag_annotation ADD CONSTRAINT FK_A7AED006A76ED395 FOREIGN KEY (user_id) REFERENCES `wallabag_user` (id);
|
||||||
|
ALTER TABLE wallabag_annotation ADD CONSTRAINT FK_A7AED006BA364942 FOREIGN KEY (entry_id) REFERENCES `wallabag_entry` (id);
|
||||||
|
SQL
|
||||||
|
;
|
||||||
|
foreach (explode("\n", $sql) as $query) {
|
||||||
|
$this->addSql($query);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'postgresql':
|
||||||
|
$sql = <<<'SQL'
|
||||||
|
CREATE TABLE wallabag_craue_config_setting (name VARCHAR(255) NOT NULL, value VARCHAR(255) DEFAULT NULL, section VARCHAR(255) DEFAULT NULL, PRIMARY KEY(name));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_5D9649505E237E06 ON wallabag_craue_config_setting (name);
|
||||||
|
CREATE TABLE "wallabag_entry" (id INT NOT NULL, user_id INT DEFAULT NULL, title TEXT DEFAULT NULL, url TEXT DEFAULT NULL, is_archived BOOLEAN NOT NULL, is_starred BOOLEAN NOT NULL, content TEXT DEFAULT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, mimetype TEXT DEFAULT NULL, language TEXT DEFAULT NULL, reading_time INT DEFAULT NULL, domain_name TEXT DEFAULT NULL, preview_picture TEXT DEFAULT NULL, is_public BOOLEAN DEFAULT 'false', PRIMARY KEY(id));
|
||||||
|
CREATE INDEX IDX_F4D18282A76ED395 ON "wallabag_entry" (user_id);
|
||||||
|
CREATE TABLE wallabag_entry_tag (entry_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY(entry_id, tag_id));
|
||||||
|
CREATE INDEX IDX_C9F0DD7CBA364942 ON wallabag_entry_tag (entry_id);
|
||||||
|
CREATE INDEX IDX_C9F0DD7CBAD26311 ON wallabag_entry_tag (tag_id);
|
||||||
|
CREATE TABLE "wallabag_config" (id INT NOT NULL, user_id INT DEFAULT NULL, theme VARCHAR(255) NOT NULL, items_per_page INT NOT NULL, language VARCHAR(255) NOT NULL, rss_token VARCHAR(255) DEFAULT NULL, rss_limit INT DEFAULT NULL, reading_speed DOUBLE PRECISION DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_87E64C53A76ED395 ON "wallabag_config" (user_id);
|
||||||
|
CREATE TABLE "wallabag_tagging_rule" (id INT NOT NULL, config_id INT DEFAULT NULL, rule VARCHAR(255) NOT NULL, tags TEXT NOT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE INDEX IDX_2D9B3C5424DB0683 ON "wallabag_tagging_rule" (config_id);
|
||||||
|
COMMENT ON COLUMN "wallabag_tagging_rule".tags IS '(DC2Type:simple_array)';
|
||||||
|
CREATE TABLE "wallabag_tag" (id INT NOT NULL, label TEXT NOT NULL, slug VARCHAR(128) NOT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_4CA58A8C989D9B62 ON "wallabag_tag" (slug);
|
||||||
|
CREATE TABLE wallabag_oauth2_clients (id INT NOT NULL, random_id VARCHAR(255) NOT NULL, redirect_uris TEXT NOT NULL, secret VARCHAR(255) NOT NULL, allowed_grant_types TEXT NOT NULL, PRIMARY KEY(id));
|
||||||
|
COMMENT ON COLUMN wallabag_oauth2_clients.redirect_uris IS '(DC2Type:array)';
|
||||||
|
COMMENT ON COLUMN wallabag_oauth2_clients.allowed_grant_types IS '(DC2Type:array)';
|
||||||
|
CREATE TABLE wallabag_oauth2_access_tokens (id INT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_368A42095F37A13B ON wallabag_oauth2_access_tokens (token);
|
||||||
|
CREATE INDEX IDX_368A420919EB6921 ON wallabag_oauth2_access_tokens (client_id);
|
||||||
|
CREATE INDEX IDX_368A4209A76ED395 ON wallabag_oauth2_access_tokens (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_refresh_tokens (id INT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_20C9FB245F37A13B ON wallabag_oauth2_refresh_tokens (token);
|
||||||
|
CREATE INDEX IDX_20C9FB2419EB6921 ON wallabag_oauth2_refresh_tokens (client_id);
|
||||||
|
CREATE INDEX IDX_20C9FB24A76ED395 ON wallabag_oauth2_refresh_tokens (user_id);
|
||||||
|
CREATE TABLE wallabag_oauth2_auth_codes (id INT NOT NULL, client_id INT NOT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, redirect_uri TEXT NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_EE52E3FA5F37A13B ON wallabag_oauth2_auth_codes (token);
|
||||||
|
CREATE INDEX IDX_EE52E3FA19EB6921 ON wallabag_oauth2_auth_codes (client_id);
|
||||||
|
CREATE INDEX IDX_EE52E3FAA76ED395 ON wallabag_oauth2_auth_codes (user_id);
|
||||||
|
CREATE TABLE "wallabag_user" (id INT NOT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, last_login TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, locked BOOLEAN NOT NULL, expired BOOLEAN NOT NULL, expires_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, confirmation_token VARCHAR(255) DEFAULT NULL, password_requested_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, roles TEXT NOT NULL, credentials_expired BOOLEAN NOT NULL, credentials_expire_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, name TEXT DEFAULT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, authCode INT DEFAULT NULL, twoFactorAuthentication BOOLEAN NOT NULL, trusted TEXT DEFAULT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON "wallabag_user" (username_canonical);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON "wallabag_user" (email_canonical);
|
||||||
|
CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON "wallabag_user" (confirmation_token);
|
||||||
|
COMMENT ON COLUMN "wallabag_user".roles IS '(DC2Type:array)';
|
||||||
|
COMMENT ON COLUMN "wallabag_user".trusted IS '(DC2Type:json_array)';
|
||||||
|
CREATE TABLE wallabag_annotation (id INT NOT NULL, user_id INT DEFAULT NULL, entry_id INT DEFAULT NULL, text TEXT NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, quote VARCHAR(255) NOT NULL, ranges TEXT NOT NULL, PRIMARY KEY(id));
|
||||||
|
CREATE INDEX IDX_A7AED006A76ED395 ON wallabag_annotation (user_id);
|
||||||
|
CREATE INDEX IDX_A7AED006BA364942 ON wallabag_annotation (entry_id);
|
||||||
|
COMMENT ON COLUMN wallabag_annotation.ranges IS '(DC2Type:array)';
|
||||||
|
CREATE SEQUENCE "entry_id_seq" INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE "config_id_seq" INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE "tagging_rule_id_seq" INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE "tag_id_seq" INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE oauth2_clients_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE oauth2_access_tokens_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE oauth2_refresh_tokens_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE oauth2_auth_codes_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE "user_id_seq" INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
CREATE SEQUENCE annotation_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
|
||||||
|
ALTER TABLE "wallabag_entry" ADD CONSTRAINT FK_F4D18282A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_entry_tag ADD CONSTRAINT FK_C9F0DD7CBA364942 FOREIGN KEY (entry_id) REFERENCES "wallabag_entry" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_entry_tag ADD CONSTRAINT FK_C9F0DD7CBAD26311 FOREIGN KEY (tag_id) REFERENCES "wallabag_tag" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE "wallabag_config" ADD CONSTRAINT FK_87E64C53A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE "wallabag_tagging_rule" ADD CONSTRAINT FK_2D9B3C5424DB0683 FOREIGN KEY (config_id) REFERENCES "wallabag_config" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_access_tokens ADD CONSTRAINT FK_368A420919EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_access_tokens ADD CONSTRAINT FK_368A4209A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_refresh_tokens ADD CONSTRAINT FK_20C9FB2419EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_refresh_tokens ADD CONSTRAINT FK_20C9FB24A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_auth_codes ADD CONSTRAINT FK_EE52E3FA19EB6921 FOREIGN KEY (client_id) REFERENCES wallabag_oauth2_clients (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_oauth2_auth_codes ADD CONSTRAINT FK_EE52E3FAA76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_annotation ADD CONSTRAINT FK_A7AED006A76ED395 FOREIGN KEY (user_id) REFERENCES "wallabag_user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
ALTER TABLE wallabag_annotation ADD CONSTRAINT FK_A7AED006BA364942 FOREIGN KEY (entry_id) REFERENCES "wallabag_entry" (id) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
||||||
|
SQL
|
||||||
|
;
|
||||||
|
foreach (explode("\n", $sql) as $query) {
|
||||||
|
$this->addSql($query);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DROP TABLE wallabag_craue_config_setting');
|
||||||
|
$this->addSql('DROP TABLE "wallabag_tagging_rule"');
|
||||||
|
$this->addSql('DROP TABLE "wallabag_config"');
|
||||||
|
$this->addSql('DROP TABLE "wallabag_entry"');
|
||||||
|
$this->addSql('DROP TABLE wallabag_entry_tag');
|
||||||
|
$this->addSql('DROP TABLE "wallabag_tag"');
|
||||||
|
$this->addSql('DROP TABLE wallabag_oauth2_refresh_tokens');
|
||||||
|
$this->addSql('DROP TABLE wallabag_oauth2_access_tokens');
|
||||||
|
$this->addSql('DROP TABLE wallabag_oauth2_clients');
|
||||||
|
$this->addSql('DROP TABLE wallabag_oauth2_auth_codes');
|
||||||
|
$this->addSql('DROP TABLE "wallabag_user"');
|
||||||
|
$this->addSql('DROP TABLE wallabag_annotation');
|
||||||
|
}
|
||||||
|
}
|
||||||
64
app/DoctrineMigrations/Version20160410190541.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added foreign keys for account resetting.
|
||||||
|
*/
|
||||||
|
class Version20160410190541 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf($entryTable->hasColumn('uid') || $entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addColumn('uid', 'string', [
|
||||||
|
'notnull' => false,
|
||||||
|
'length' => 23,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$sharePublic = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_public'");
|
||||||
|
|
||||||
|
if (false === $sharePublic) {
|
||||||
|
$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)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$entryTable->dropColumn('uid');
|
||||||
|
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_public'");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
73
app/DoctrineMigrations/Version20160812120952.php
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added name field on wallabag_oauth2_clients.
|
||||||
|
*/
|
||||||
|
class Version20160812120952 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
|
||||||
|
$this->skipIf($clientsTable->hasColumn('name'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
if ('sqlite' === $this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
// Can't use $clientsTable->addColumn('name', 'blob');
|
||||||
|
// because of the error:
|
||||||
|
// SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL
|
||||||
|
$databaseTablePrefix = $this->container->getParameter('database_table_prefix');
|
||||||
|
$this->addSql('CREATE TEMPORARY TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients AS SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM ' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('DROP TABLE ' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('CREATE TABLE ' . $databaseTablePrefix . 'oauth2_clients (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, random_id VARCHAR(255) NOT NULL COLLATE BINARY, secret VARCHAR(255) NOT NULL COLLATE BINARY, redirect_uris CLOB NOT NULL, allowed_grant_types CLOB NOT NULL, name CLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_635D765EA76ED395 FOREIGN KEY (user_id) REFERENCES "' . $databaseTablePrefix . 'user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||||
|
$this->addSql('INSERT INTO ' . $databaseTablePrefix . 'oauth2_clients (id, random_id, redirect_uris, secret, allowed_grant_types) SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM __temp__' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('DROP TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('CREATE INDEX IDX_635D765EA76ED395 ON ' . $databaseTablePrefix . 'oauth2_clients (user_id)');
|
||||||
|
} else {
|
||||||
|
$clientsTable->addColumn('name', 'blob');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
|
||||||
|
|
||||||
|
if ('sqlite' === $this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
$databaseTablePrefix = $this->container->getParameter('database_table_prefix');
|
||||||
|
$this->addSql('DROP INDEX IDX_635D765EA76ED395');
|
||||||
|
$this->addSql('CREATE TEMPORARY TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients AS SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM ' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('DROP TABLE ' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('CREATE TABLE ' . $databaseTablePrefix . 'oauth2_clients (id INTEGER NOT NULL, random_id VARCHAR(255) NOT NULL, secret VARCHAR(255) NOT NULL, redirect_uris CLOB NOT NULL COLLATE BINARY, allowed_grant_types CLOB NOT NULL COLLATE BINARY, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('INSERT INTO ' . $databaseTablePrefix . 'oauth2_clients (id, random_id, redirect_uris, secret, allowed_grant_types) SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM __temp__' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
$this->addSql('DROP TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients');
|
||||||
|
} else {
|
||||||
|
$clientsTable->dropColumn('name');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
64
app/DoctrineMigrations/Version20160911214952.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added settings for RabbitMQ and Redis imports.
|
||||||
|
*/
|
||||||
|
class Version20160911214952 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$redis = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'import_with_redis'");
|
||||||
|
|
||||||
|
if (false === $redis) {
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('import_with_redis', 0, 'import')");
|
||||||
|
}
|
||||||
|
|
||||||
|
$rabbitmq = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'import_with_rabbitmq'");
|
||||||
|
|
||||||
|
if (false === $rabbitmq) {
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('import_with_rabbitmq', 0, 'import')");
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->skipIf(false !== $rabbitmq && false !== $redis, 'It seems that you already played this migration.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'import_with_redis';");
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'import_with_rabbitmq';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,15 +2,30 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Added pocket_consumer_key field on wallabag_config.
|
* Added pocket_consumer_key field on wallabag_config.
|
||||||
*/
|
*/
|
||||||
class Version20160916201049 extends WallabagMigration
|
class Version20160916201049 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$configTable = $schema->getTable($this->getTable('config'));
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
|
|
||||||
@ -20,10 +35,18 @@ class Version20160916201049 extends WallabagMigration
|
|||||||
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'pocket_consumer_key';");
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'pocket_consumer_key';");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$configTable = $schema->getTable($this->getTable('config'));
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
$configTable->dropColumn('pocket_consumer_key');
|
$configTable->dropColumn('pocket_consumer_key');
|
||||||
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('pocket_consumer_key', NULL, 'import')");
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('pocket_consumer_key', NULL, 'import')");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -2,43 +2,50 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
use Doctrine\DBAL\Migrations\SkipMigrationException;
|
||||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Doctrine\Migrations\Exception\SkipMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Added pocket_consumer_key field on wallabag_config.
|
* Added pocket_consumer_key field on wallabag_config.
|
||||||
*/
|
*/
|
||||||
class Version20161001072726 extends WallabagMigration
|
class Version20161001072726 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
{
|
{
|
||||||
$platform = $this->connection->getDatabasePlatform();
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
if ($platform instanceof SqlitePlatform) {
|
/**
|
||||||
$this->write('Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
return;
|
public function up(Schema $schema)
|
||||||
}
|
{
|
||||||
|
$this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||||
|
|
||||||
// remove all FK from entry_tag
|
// remove all FK from entry_tag
|
||||||
switch (true) {
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
case $platform instanceof MySQLPlatform:
|
case 'mysql':
|
||||||
$query = $this->connection->query("
|
$query = $this->connection->query("
|
||||||
SELECT CONSTRAINT_NAME
|
SELECT CONSTRAINT_NAME
|
||||||
FROM information_schema.key_column_usage
|
FROM information_schema.key_column_usage
|
||||||
WHERE TABLE_NAME = '" . $this->getTable('entry_tag', WallabagMigration::UN_ESCAPED_TABLE) . "' AND CONSTRAINT_NAME LIKE 'FK_%'
|
WHERE TABLE_NAME = '" . $this->getTable('entry_tag') . "' AND CONSTRAINT_NAME LIKE 'FK_%'
|
||||||
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
|
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
|
||||||
);
|
);
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
foreach ($query->fetchAllAssociative() as $fk) {
|
foreach ($query->fetchAll() as $fk) {
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' DROP FOREIGN KEY ' . $fk['CONSTRAINT_NAME']);
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' DROP FOREIGN KEY ' . $fk['CONSTRAINT_NAME']);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case $platform instanceof PostgreSQLPlatform:
|
case 'postgresql':
|
||||||
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
|
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
|
||||||
$query = $this->connection->query("
|
$query = $this->connection->query("
|
||||||
SELECT conrelid::regclass AS table_from
|
SELECT conrelid::regclass AS table_from
|
||||||
@ -47,11 +54,12 @@ class Version20161001072726 extends WallabagMigration
|
|||||||
FROM pg_constraint c
|
FROM pg_constraint c
|
||||||
JOIN pg_namespace n ON n.oid = c.connamespace
|
JOIN pg_namespace n ON n.oid = c.connamespace
|
||||||
WHERE contype = 'f'
|
WHERE contype = 'f'
|
||||||
AND conrelid::regclass::text = '" . $this->getTable('entry_tag', WallabagMigration::UN_ESCAPED_TABLE) . "'
|
AND conrelid::regclass::text = '" . $this->getTable('entry_tag') . "'
|
||||||
AND n.nspname = 'public';"
|
AND n.nspname = 'public';"
|
||||||
);
|
);
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
foreach ($query->fetchAllAssociative() as $fk) {
|
foreach ($query->fetchAll() as $fk) {
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' DROP CONSTRAINT ' . $fk['conname']);
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' DROP CONSTRAINT ' . $fk['conname']);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -62,22 +70,23 @@ class Version20161001072726 extends WallabagMigration
|
|||||||
|
|
||||||
// remove entry FK from annotation
|
// remove entry FK from annotation
|
||||||
|
|
||||||
switch (true) {
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
case $platform instanceof MySQLPlatform:
|
case 'mysql':
|
||||||
$query = $this->connection->query("
|
$query = $this->connection->query("
|
||||||
SELECT CONSTRAINT_NAME
|
SELECT CONSTRAINT_NAME
|
||||||
FROM information_schema.key_column_usage
|
FROM information_schema.key_column_usage
|
||||||
WHERE TABLE_NAME = '" . $this->getTable('annotation', WallabagMigration::UN_ESCAPED_TABLE) . "'
|
WHERE TABLE_NAME = '" . $this->getTable('annotation') . "'
|
||||||
AND CONSTRAINT_NAME LIKE 'FK_%'
|
AND CONSTRAINT_NAME LIKE 'FK_%'
|
||||||
AND COLUMN_NAME = 'entry_id'
|
AND COLUMN_NAME = 'entry_id'
|
||||||
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
|
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
|
||||||
);
|
);
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
foreach ($query->fetchAllAssociative() as $fk) {
|
foreach ($query->fetchAll() as $fk) {
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' DROP FOREIGN KEY ' . $fk['CONSTRAINT_NAME']);
|
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' DROP FOREIGN KEY ' . $fk['CONSTRAINT_NAME']);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case $platform instanceof PostgreSQLPlatform:
|
case 'postgresql':
|
||||||
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
|
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
|
||||||
$query = $this->connection->query("
|
$query = $this->connection->query("
|
||||||
SELECT conrelid::regclass AS table_from
|
SELECT conrelid::regclass AS table_from
|
||||||
@ -86,12 +95,13 @@ class Version20161001072726 extends WallabagMigration
|
|||||||
FROM pg_constraint c
|
FROM pg_constraint c
|
||||||
JOIN pg_namespace n ON n.oid = c.connamespace
|
JOIN pg_namespace n ON n.oid = c.connamespace
|
||||||
WHERE contype = 'f'
|
WHERE contype = 'f'
|
||||||
AND conrelid::regclass::text = '" . $this->getTable('annotation', WallabagMigration::UN_ESCAPED_TABLE) . "'
|
AND conrelid::regclass::text = '" . $this->getTable('annotation') . "'
|
||||||
AND n.nspname = 'public'
|
AND n.nspname = 'public'
|
||||||
AND pg_get_constraintdef(c.oid) LIKE '%entry_id%';"
|
AND pg_get_constraintdef(c.oid) LIKE '%entry_id%';"
|
||||||
);
|
);
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
foreach ($query->fetchAllAssociative() as $fk) {
|
foreach ($query->fetchAll() as $fk) {
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' DROP CONSTRAINT ' . $fk['conname']);
|
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' DROP CONSTRAINT ' . $fk['conname']);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -100,8 +110,16 @@ class Version20161001072726 extends WallabagMigration
|
|||||||
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' ADD CONSTRAINT FK_annotation_entry FOREIGN KEY (entry_id) REFERENCES ' . $this->getTable('entry') . ' (id) ON DELETE CASCADE');
|
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' ADD CONSTRAINT FK_annotation_entry FOREIGN KEY (entry_id) REFERENCES ' . $this->getTable('entry') . ' (id) ON DELETE CASCADE');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
throw new SkipMigration('Too complex ...');
|
throw new SkipMigrationException('Too complex ...');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,24 +2,34 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converted database to utf8mb4 encoding (for MySQL only).
|
* Converted database to utf8mb4 encoding (for MySQL only).
|
||||||
*/
|
*/
|
||||||
class Version20161022134138 extends WallabagMigration
|
class Version20161022134138 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
{
|
{
|
||||||
if (!$this->connection->getDatabasePlatform() instanceof MySQLPlatform) {
|
$this->container = $container;
|
||||||
$this->write('This migration only apply to MySQL');
|
}
|
||||||
|
|
||||||
return;
|
/**
|
||||||
}
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
|
||||||
|
|
||||||
$this->addSql('ALTER DATABASE `' . $this->connection->getParams()['dbname'] . '` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;');
|
$this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;');
|
||||||
|
|
||||||
// convert field length for utf8mb4
|
// convert field length for utf8mb4
|
||||||
// http://stackoverflow.com/a/31474509/569101
|
// http://stackoverflow.com/a/31474509/569101
|
||||||
@ -43,15 +53,14 @@ class Version20161022134138 extends WallabagMigration
|
|||||||
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE `name` `name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
|
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE `name` `name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
if (!$this->connection->getDatabasePlatform() instanceof MySQLPlatform) {
|
$this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
|
||||||
$this->write('This migration only apply to MySQL');
|
|
||||||
|
|
||||||
return;
|
$this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;');
|
||||||
}
|
|
||||||
|
|
||||||
$this->addSql('ALTER DATABASE `' . $this->connection->getParams()['dbname'] . '` CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;');
|
|
||||||
|
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
||||||
@ -68,4 +77,9 @@ class Version20161022134138 extends WallabagMigration
|
|||||||
|
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE `name` `name` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE `name` `name` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
67
app/DoctrineMigrations/Version20161024212538.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added user_id column on oauth2_clients to prevent users to delete API clients from other users.
|
||||||
|
*/
|
||||||
|
class Version20161024212538 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
private $constraintName = 'IDX_user_oauth_client';
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
|
||||||
|
|
||||||
|
$this->skipIf($clientsTable->hasColumn('user_id'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$clientsTable->addColumn('user_id', 'integer', ['notnull' => false]);
|
||||||
|
|
||||||
|
$clientsTable->addForeignKeyConstraint(
|
||||||
|
$this->getTable('user'),
|
||||||
|
['user_id'],
|
||||||
|
['id'],
|
||||||
|
['onDelete' => 'CASCADE'],
|
||||||
|
$this->constraintName
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
|
||||||
|
|
||||||
|
$this->skipIf(!$clientsTable->hasColumn('user_id'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$clientsTable->dropColumn('user_id', 'integer');
|
||||||
|
|
||||||
|
if ('sqlite' !== $this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
$clientsTable->removeForeignKey($this->constraintName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20161031132655.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added the internal setting to enable/disable downloading pictures.
|
||||||
|
*/
|
||||||
|
class Version20161031132655 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$images = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'download_images_enabled'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $images, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('download_images_enabled', 0, 'misc')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'download_images_enabled';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
app/DoctrineMigrations/Version20161104073720.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added created_at index on entry table.
|
||||||
|
*/
|
||||||
|
class Version20161104073720 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
private $indexName = 'IDX_entry_created_at';
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addIndex(['created_at'], $this->indexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropIndex($this->indexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
56
app/DoctrineMigrations/Version20161106113822.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added action_mark_as_read field on config table.
|
||||||
|
*/
|
||||||
|
class Version20161106113822 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
|
|
||||||
|
$this->skipIf($configTable->hasColumn('action_mark_as_read'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$configTable->addColumn('action_mark_as_read', 'integer', [
|
||||||
|
'default' => 0,
|
||||||
|
'notnull' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
|
|
||||||
|
$this->skipIf(!$configTable->hasColumn('action_mark_as_read'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$configTable->dropColumn('action_mark_as_read');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
64
app/DoctrineMigrations/Version20161117071626.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added the internal setting to share articles to unmark.it.
|
||||||
|
*/
|
||||||
|
class Version20161117071626 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$share = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_unmark'");
|
||||||
|
|
||||||
|
if (false === $share) {
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('share_unmark', 0, 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
$unmark = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'unmark_url'");
|
||||||
|
|
||||||
|
if (false === $unmark) {
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('unmark_url', 'https://unmark.it', 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->skipIf(false !== $share && false !== $unmark, 'It seems that you already played this migration.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_unmark';");
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'unmark_url';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
56
app/DoctrineMigrations/Version20161118134328.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add http_status in `entry_table`.
|
||||||
|
*/
|
||||||
|
class Version20161118134328 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf($entryTable->hasColumn('http_status'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addColumn('http_status', 'string', [
|
||||||
|
'length' => 3,
|
||||||
|
'notnull' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf(!$entryTable->hasColumn('http_status'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropColumn('http_status');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20161122144743.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the restricted_access internal setting for articles with paywall.
|
||||||
|
*/
|
||||||
|
class Version20161122144743 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$access = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'restricted_access'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $access, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('restricted_access', 0, 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'restricted_access';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methods and properties removed from `FOS\UserBundle\Model\User`.
|
* Methods and properties removed from `FOS\UserBundle\Model\User`.
|
||||||
@ -16,9 +18,22 @@ use Wallabag\Doctrine\WallabagMigration;
|
|||||||
* You need to drop the fields `expired` and `credentials_expired` from your database
|
* You need to drop the fields `expired` and `credentials_expired` from your database
|
||||||
* schema, because they aren't mapped anymore.
|
* schema, because they aren't mapped anymore.
|
||||||
*/
|
*/
|
||||||
class Version20161122203647 extends WallabagMigration
|
class Version20161122203647 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$userTable = $schema->getTable($this->getTable('user'));
|
$userTable = $schema->getTable($this->getTable('user'));
|
||||||
|
|
||||||
@ -28,7 +43,10 @@ class Version20161122203647 extends WallabagMigration
|
|||||||
$userTable->dropColumn('credentials_expired');
|
$userTable->dropColumn('credentials_expired');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$userTable = $schema->getTable($this->getTable('user'));
|
$userTable = $schema->getTable($this->getTable('user'));
|
||||||
|
|
||||||
@ -37,4 +55,9 @@ class Version20161122203647 extends WallabagMigration
|
|||||||
$userTable->addColumn('expired', 'smallint', ['notnull' => false]);
|
$userTable->addColumn('expired', 'smallint', ['notnull' => false]);
|
||||||
$userTable->addColumn('credentials_expired', 'smallint', ['notnull' => false]);
|
$userTable->addColumn('credentials_expired', 'smallint', ['notnull' => false]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
49
app/DoctrineMigrations/Version20161128084725.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added list_mode in user config.
|
||||||
|
*/
|
||||||
|
class Version20161128084725 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
|
$this->skipIf($configTable->hasColumn('list_mode'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$configTable->addColumn('list_mode', 'integer', ['notnull' => false]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$configTable = $schema->getTable($this->getTable('config'));
|
||||||
|
$configTable->dropColumn('list_mode');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removed locked, credentials_expire_at and expires_at.
|
* Removed locked, credentials_expire_at and expires_at.
|
||||||
*/
|
*/
|
||||||
class Version20161128131503 extends WallabagMigration
|
class Version20161128131503 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
private $fields = [
|
private $fields = [
|
||||||
'locked' => 'smallint',
|
'locked' => 'smallint',
|
||||||
@ -16,7 +18,20 @@ class Version20161128131503 extends WallabagMigration
|
|||||||
'expires_at' => 'datetime',
|
'expires_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$userTable = $schema->getTable($this->getTable('user'));
|
$userTable = $schema->getTable($this->getTable('user'));
|
||||||
|
|
||||||
@ -26,7 +41,10 @@ class Version20161128131503 extends WallabagMigration
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$userTable = $schema->getTable($this->getTable('user'));
|
$userTable = $schema->getTable($this->getTable('user'));
|
||||||
|
|
||||||
@ -35,4 +53,9 @@ class Version20161128131503 extends WallabagMigration
|
|||||||
$userTable->addColumn($field, $type, ['notnull' => false]);
|
$userTable->addColumn($field, $type, ['notnull' => false]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -2,66 +2,74 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
|
||||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renamed uuid to uid in entry table.
|
* Renamed uuid to uid in entry table.
|
||||||
*/
|
*/
|
||||||
class Version20161214094402 extends WallabagMigration
|
class Version20161214094402 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
if ($entryTable->hasColumn('uid')) {
|
$this->skipIf($entryTable->hasColumn('uid'), 'It seems that you already played this migration.');
|
||||||
$this->write('It seems that you already played this migration.');
|
|
||||||
|
|
||||||
return;
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
}
|
case 'sqlite':
|
||||||
|
|
||||||
$platform = $this->connection->getDatabasePlatform();
|
|
||||||
|
|
||||||
switch (true) {
|
|
||||||
case $platform instanceof SqlitePlatform:
|
|
||||||
$this->addSql('CREATE TEMPORARY TABLE __temp__wallabag_entry AS SELECT id, user_id, uuid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public FROM ' . $this->getTable('entry'));
|
$this->addSql('CREATE TEMPORARY TABLE __temp__wallabag_entry AS SELECT id, user_id, uuid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public FROM ' . $this->getTable('entry'));
|
||||||
$this->addSql('DROP TABLE ' . $this->getTable('entry'));
|
$this->addSql('DROP TABLE ' . $this->getTable('entry'));
|
||||||
$this->addSql('CREATE TABLE ' . $this->getTable('entry') . ' (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, uid CLOB DEFAULT NULL COLLATE BINARY, title CLOB DEFAULT NULL COLLATE BINARY, url CLOB DEFAULT NULL COLLATE BINARY, is_archived BOOLEAN NOT NULL, is_starred BOOLEAN NOT NULL, content CLOB DEFAULT NULL COLLATE BINARY, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, mimetype CLOB DEFAULT NULL COLLATE BINARY, language CLOB DEFAULT NULL COLLATE BINARY, reading_time INTEGER DEFAULT NULL, domain_name CLOB DEFAULT NULL COLLATE BINARY, preview_picture CLOB DEFAULT NULL COLLATE BINARY, is_public BOOLEAN DEFAULT "0", PRIMARY KEY(id));');
|
$this->addSql('CREATE TABLE ' . $this->getTable('entry') . ' (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, uid CLOB DEFAULT NULL COLLATE BINARY, title CLOB DEFAULT NULL COLLATE BINARY, url CLOB DEFAULT NULL COLLATE BINARY, is_archived BOOLEAN NOT NULL, is_starred BOOLEAN NOT NULL, content CLOB DEFAULT NULL COLLATE BINARY, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, mimetype CLOB DEFAULT NULL COLLATE BINARY, language CLOB DEFAULT NULL COLLATE BINARY, reading_time INTEGER DEFAULT NULL, domain_name CLOB DEFAULT NULL COLLATE BINARY, preview_picture CLOB DEFAULT NULL COLLATE BINARY, is_public BOOLEAN DEFAULT "0", PRIMARY KEY(id));');
|
||||||
$this->addSql('INSERT INTO ' . $this->getTable('entry') . ' (id, user_id, uid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public) SELECT id, user_id, uuid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public FROM __temp__wallabag_entry;');
|
$this->addSql('INSERT INTO ' . $this->getTable('entry') . ' (id, user_id, uid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public) SELECT id, user_id, uuid, title, url, is_archived, is_starred, content, created_at, updated_at, mimetype, language, reading_time, domain_name, preview_picture, is_public FROM __temp__wallabag_entry;');
|
||||||
$this->addSql('DROP TABLE __temp__wallabag_entry');
|
$this->addSql('DROP TABLE __temp__wallabag_entry');
|
||||||
break;
|
break;
|
||||||
case $platform instanceof MySQLPlatform:
|
case 'mysql':
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE uuid uid VARCHAR(23)');
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE uuid uid VARCHAR(23)');
|
||||||
break;
|
break;
|
||||||
case $platform instanceof PostgreSQLPlatform:
|
case 'postgresql':
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' RENAME uuid TO uid');
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' RENAME uuid TO uid');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
if ($entryTable->hasColumn('uuid')) {
|
$this->skipIf($entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
|
||||||
$this->write('It seems that you already played this migration.');
|
|
||||||
|
|
||||||
return;
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
}
|
case 'sqlite':
|
||||||
|
|
||||||
$platform = $this->connection->getDatabasePlatform();
|
|
||||||
|
|
||||||
switch (true) {
|
|
||||||
case $platform instanceof SqlitePlatform:
|
|
||||||
throw new SkipMigrationException('Too complex ...');
|
throw new SkipMigrationException('Too complex ...');
|
||||||
break;
|
break;
|
||||||
case $platform instanceof MySQLPlatform:
|
case 'mysql':
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE uid uuid VARCHAR(23)');
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE uid uuid VARCHAR(23)');
|
||||||
break;
|
break;
|
||||||
case $platform instanceof PostgreSQLPlatform:
|
case 'postgresql':
|
||||||
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' RENAME uid TO uuid');
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' RENAME uid TO uuid');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
53
app/DoctrineMigrations/Version20161214094403.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added index on wallabag_entry.uid.
|
||||||
|
*/
|
||||||
|
class Version20161214094403 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
private $indexName = 'IDX_entry_uid';
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addIndex(['uid'], $this->indexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropIndex($this->indexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,18 +2,33 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Added indexes on wallabag_entry.is_starred and wallabag_entry.is_archived.
|
* Added indexes on wallabag_entry.is_starred and wallabag_entry.is_archived.
|
||||||
*/
|
*/
|
||||||
class Version20170127093841 extends WallabagMigration
|
class Version20170127093841 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
private $indexStarredName = 'IDX_entry_starred';
|
private $indexStarredName = 'IDX_entry_starred';
|
||||||
private $indexArchivedName = 'IDX_entry_archived';
|
private $indexArchivedName = 'IDX_entry_archived';
|
||||||
|
|
||||||
public function up(Schema $schema): void
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
$this->skipIf($entryTable->hasIndex($this->indexStarredName) && $entryTable->hasIndex($this->indexArchivedName), 'It seems that you already played this migration.');
|
$this->skipIf($entryTable->hasIndex($this->indexStarredName) && $entryTable->hasIndex($this->indexArchivedName), 'It seems that you already played this migration.');
|
||||||
@ -22,7 +37,10 @@ class Version20170127093841 extends WallabagMigration
|
|||||||
$entryTable->addIndex(['is_archived'], $this->indexArchivedName);
|
$entryTable->addIndex(['is_archived'], $this->indexArchivedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
$this->skipIf(false === $entryTable->hasIndex($this->indexStarredName) && false === $entryTable->hasIndex($this->indexArchivedName), 'It seems that you already played this migration.');
|
$this->skipIf(false === $entryTable->hasIndex($this->indexStarredName) && false === $entryTable->hasIndex($this->indexArchivedName), 'It seems that you already played this migration.');
|
||||||
@ -30,4 +48,9 @@ class Version20170127093841 extends WallabagMigration
|
|||||||
$entryTable->dropIndex($this->indexStarredName);
|
$entryTable->dropIndex($this->indexStarredName);
|
||||||
$entryTable->dropIndex($this->indexArchivedName);
|
$entryTable->dropIndex($this->indexArchivedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
54
app/DoctrineMigrations/Version20170327194233.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the share_scuttle internal setting.
|
||||||
|
*/
|
||||||
|
class Version20170327194233 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$scuttle = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_scuttle'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $scuttle, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('share_scuttle', '1', 'entry')");
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('scuttle_url', 'http://scuttle.org', 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'share_scuttle';");
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'scuttle_url';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,15 +2,30 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add published_at and published_by in `entry` table.
|
* Add published_at and published_by in `entry` table.
|
||||||
*/
|
*/
|
||||||
class Version20170405182620 extends WallabagMigration
|
class Version20170405182620 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
@ -27,7 +42,10 @@ class Version20170405182620 extends WallabagMigration
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
@ -39,4 +57,9 @@ class Version20170405182620 extends WallabagMigration
|
|||||||
|
|
||||||
$entryTable->dropColumn('published_by');
|
$entryTable->dropColumn('published_by');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
51
app/DoctrineMigrations/Version20170407200919.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove isPublic in Entry Table.
|
||||||
|
*/
|
||||||
|
class Version20170407200919 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf(!$entryTable->hasColumn('is_public'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropColumn('is_public');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
$this->skipIf($entryTable->hasColumn('is_public'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addColumn('is_public', 'boolean', ['notnull' => false, 'default' => 0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20170420134133.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove download_pictures in craue_config_setting.
|
||||||
|
*/
|
||||||
|
class Version20170420134133 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'download_pictures';");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$downloadPictures = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'download_pictures'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $downloadPictures, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('download_pictures', '1', 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,16 +2,30 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add site credential table to store username & password for some website (behind authentication or paywall).
|
* Add site credential table to store username & password for some website (behind authentication or paywall).
|
||||||
*/
|
*/
|
||||||
class Version20170501115751 extends WallabagMigration
|
class Version20170501115751 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$this->skipIf($schema->hasTable($this->getTable('site_credential')), 'It seems that you already played this migration.');
|
$this->skipIf($schema->hasTable($this->getTable('site_credential')), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
@ -26,14 +40,22 @@ class Version20170501115751 extends WallabagMigration
|
|||||||
$table->setPrimaryKey(['id']);
|
$table->setPrimaryKey(['id']);
|
||||||
$table->addForeignKeyConstraint($this->getTable('user'), ['user_id'], ['id'], [], 'fk_user');
|
$table->addForeignKeyConstraint($this->getTable('user'), ['user_id'], ['id'], [], 'fk_user');
|
||||||
|
|
||||||
if ($this->connection->getDatabasePlatform() instanceof PostgreSQLPlatform) {
|
if ('postgresql' === $this->connection->getDatabasePlatform()->getName()) {
|
||||||
$schema->dropSequence('site_credential_id_seq');
|
$schema->dropSequence('site_credential_id_seq');
|
||||||
$schema->createSequence('site_credential_id_seq');
|
$schema->createSequence('site_credential_id_seq');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$schema->dropTable($this->getTable('site_credential'));
|
$schema->dropTable($this->getTable('site_credential'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
60
app/DoctrineMigrations/Version20170510082609.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changed length for username, username_canonical, email and email_canonical fields in wallabag_user table.
|
||||||
|
*/
|
||||||
|
class Version20170510082609 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
private $fields = [
|
||||||
|
'username',
|
||||||
|
'username_canonical',
|
||||||
|
'email',
|
||||||
|
'email_canonical',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
|
||||||
|
|
||||||
|
foreach ($this->fields as $field) {
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(180) NOT NULL;');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
|
||||||
|
|
||||||
|
foreach ($this->fields as $field) {
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(255) NOT NULL;');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
55
app/DoctrineMigrations/Version20170511115400.php
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Added `headers` field in entry table.
|
||||||
|
*/
|
||||||
|
class Version20170511115400 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf($entryTable->hasColumn('headers'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addColumn('headers', 'text', [
|
||||||
|
'notnull' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf(!$entryTable->hasColumn('headers'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropColumn('headers');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
96
app/DoctrineMigrations/Version20170511211659.php
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Migrations\SkipMigrationException;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increase the length of the "quote" column of "annotation" table.
|
||||||
|
*/
|
||||||
|
class Version20170511211659 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$tableName = $this->getTable('annotation');
|
||||||
|
|
||||||
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
case 'sqlite':
|
||||||
|
$this->addSql(<<<EOD
|
||||||
|
CREATE TEMPORARY TABLE __temp__wallabag_annotation AS
|
||||||
|
SELECT id, user_id, entry_id, text, created_at, updated_at, quote, ranges
|
||||||
|
FROM ${tableName}
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
$this->addSql('DROP TABLE ' . $tableName);
|
||||||
|
$this->addSql(<<<EOD
|
||||||
|
CREATE TABLE ${tableName}
|
||||||
|
(
|
||||||
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
user_id INTEGER DEFAULT NULL,
|
||||||
|
entry_id INTEGER DEFAULT NULL,
|
||||||
|
text CLOB NOT NULL,
|
||||||
|
created_at DATETIME NOT NULL,
|
||||||
|
updated_at DATETIME NOT NULL,
|
||||||
|
quote CLOB NOT NULL,
|
||||||
|
ranges CLOB NOT NULL,
|
||||||
|
CONSTRAINT FK_A7AED006A76ED395 FOREIGN KEY (user_id) REFERENCES wallabag_user (id),
|
||||||
|
CONSTRAINT FK_A7AED006BA364942 FOREIGN KEY (entry_id) REFERENCES wallabag_entry (id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
CREATE INDEX IDX_A7AED006A76ED395 ON wallabag_annotation (user_id);
|
||||||
|
CREATE INDEX IDX_A7AED006BA364942 ON wallabag_annotation (entry_id);
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addSql(<<<EOD
|
||||||
|
INSERT INTO ${tableName} (id, user_id, entry_id, text, created_at, updated_at, quote, ranges)
|
||||||
|
SELECT id, user_id, entry_id, text, created_at, updated_at, quote, ranges
|
||||||
|
FROM __temp__wallabag_annotation;
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
$this->addSql('DROP TABLE __temp__wallabag_annotation');
|
||||||
|
break;
|
||||||
|
case 'mysql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $tableName . ' MODIFY quote TEXT NOT NULL');
|
||||||
|
break;
|
||||||
|
case 'postgresql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $tableName . ' ALTER COLUMN quote TYPE TEXT');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$tableName = $this->getTable('annotation');
|
||||||
|
|
||||||
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
case 'sqlite':
|
||||||
|
throw new SkipMigrationException('Too complex ...');
|
||||||
|
break;
|
||||||
|
case 'mysql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $tableName . ' MODIFY quote VARCHAR(255) NOT NULL');
|
||||||
|
break;
|
||||||
|
case 'postgresql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $tableName . ' ALTER COLUMN quote TYPE VARCHAR(255)');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20170602075214.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add api_user_registration in craue_config_setting.
|
||||||
|
*/
|
||||||
|
class Version20170602075214 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$apiUserRegistration = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'api_user_registration'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $apiUserRegistration, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('api_user_registration', '0', 'api')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'api_user_registration';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
app/DoctrineMigrations/Version20170606155640.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove wallabag_url from craue_config_setting.
|
||||||
|
* It has been moved into the parameters.yml.
|
||||||
|
*/
|
||||||
|
class Version20170606155640 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$apiUserRegistration = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'wallabag_url'");
|
||||||
|
|
||||||
|
$this->skipIf(false === $apiUserRegistration, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'wallabag_url'");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('wallabag_url', 'wallabag.me', 'misc')");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,22 +2,32 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changed tags to lowercase.
|
* Changed tags to lowercase.
|
||||||
*/
|
*/
|
||||||
class Version20170719231144 extends WallabagMigration
|
class Version20170719231144 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
{
|
* @var ContainerInterface
|
||||||
if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
|
*/
|
||||||
$this->write('Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
private $container;
|
||||||
|
|
||||||
return;
|
public function setContainer(ContainerInterface $container = null)
|
||||||
}
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||||
|
|
||||||
// Find tags which need to be merged
|
// Find tags which need to be merged
|
||||||
$dupTags = $this->connection->query('
|
$dupTags = $this->connection->query('
|
||||||
@ -26,18 +36,19 @@ class Version20170719231144 extends WallabagMigration
|
|||||||
GROUP BY LOWER(label)
|
GROUP BY LOWER(label)
|
||||||
HAVING COUNT(*) > 1'
|
HAVING COUNT(*) > 1'
|
||||||
);
|
);
|
||||||
|
$dupTags->execute();
|
||||||
|
|
||||||
foreach ($dupTags->fetchAllAssociative() as $duplicates) {
|
foreach ($dupTags->fetchAll() as $duplicates) {
|
||||||
$label = $duplicates['lower_label'];
|
$label = $duplicates['lower_label'];
|
||||||
|
|
||||||
// Retrieve all duplicate tags for a given tag
|
// Retrieve all duplicate tags for a given tag
|
||||||
$tags = $this->connection->query('
|
$tags = $this->connection->executeQuery('
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM ' . $this->getTable('tag') . '
|
FROM ' . $this->getTable('tag') . '
|
||||||
WHERE LOWER(label) = :label
|
WHERE LOWER(label) = :label
|
||||||
ORDER BY id ASC',
|
ORDER BY id ASC',
|
||||||
[
|
[
|
||||||
'label' => $label,
|
'label' => $label,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -45,7 +56,7 @@ class Version20170719231144 extends WallabagMigration
|
|||||||
$newId = null;
|
$newId = null;
|
||||||
$ids = [];
|
$ids = [];
|
||||||
|
|
||||||
foreach ($tags->fetchAllAssociative() as $tag) {
|
foreach ($tags->fetchAll() as $tag) {
|
||||||
// Ignore the first tag as we use it as the new reference tag
|
// Ignore the first tag as we use it as the new reference tag
|
||||||
if ($first) {
|
if ($first) {
|
||||||
$first = false;
|
$first = false;
|
||||||
@ -56,7 +67,7 @@ class Version20170719231144 extends WallabagMigration
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Just in case...
|
// Just in case...
|
||||||
if (\count($ids) > 0) {
|
if (count($ids) > 0) {
|
||||||
// Merge tags
|
// Merge tags
|
||||||
$this->addSql('
|
$this->addSql('
|
||||||
UPDATE ' . $this->getTable('entry_tag') . '
|
UPDATE ' . $this->getTable('entry_tag') . '
|
||||||
@ -64,7 +75,7 @@ class Version20170719231144 extends WallabagMigration
|
|||||||
WHERE tag_id IN (' . implode(',', $ids) . ')
|
WHERE tag_id IN (' . implode(',', $ids) . ')
|
||||||
AND entry_id NOT IN (
|
AND entry_id NOT IN (
|
||||||
SELECT entry_id
|
SELECT entry_id
|
||||||
FROM (SELECT * FROM ' . $this->getTable('entry_tag') . ') AS _entry_tag
|
FROM ' . $this->getTable('entry_tag') . '
|
||||||
WHERE tag_id = ' . $newId . '
|
WHERE tag_id = ' . $newId . '
|
||||||
)'
|
)'
|
||||||
);
|
);
|
||||||
@ -90,8 +101,16 @@ class Version20170719231144 extends WallabagMigration
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
throw new SkipMigrationException('Too complex ...');
|
throw new SkipMigrationException('Too complex ...');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -2,15 +2,30 @@
|
|||||||
|
|
||||||
namespace Application\Migrations;
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
use Wallabag\Doctrine\WallabagMigration;
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add starred_at column and set its value to updated_at for is_starred entries.
|
* Add starred_at column and set its value to updated_at for is_starred entries.
|
||||||
*/
|
*/
|
||||||
class Version20170824113337 extends WallabagMigration
|
class Version20170824113337 extends AbstractMigration implements ContainerAwareInterface
|
||||||
{
|
{
|
||||||
public function up(Schema $schema): void
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
@ -21,7 +36,7 @@ class Version20170824113337 extends WallabagMigration
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function postUp(Schema $schema): void
|
public function postUp(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
$this->skipIf(!$entryTable->hasColumn('starred_at'), 'Unable to add starred_at colum');
|
$this->skipIf(!$entryTable->hasColumn('starred_at'), 'Unable to add starred_at colum');
|
||||||
@ -34,7 +49,10 @@ class Version20170824113337 extends WallabagMigration
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
$entryTable = $schema->getTable($this->getTable('entry'));
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
@ -42,4 +60,9 @@ class Version20170824113337 extends WallabagMigration
|
|||||||
|
|
||||||
$entryTable->dropColumn('starred_at');
|
$entryTable->dropColumn('starred_at');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
65
app/DoctrineMigrations/Version20171008195606.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changed reading_time field to prevent null value.
|
||||||
|
*/
|
||||||
|
class Version20171008195606 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||||
|
|
||||||
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
case 'mysql':
|
||||||
|
$this->addSql('UPDATE ' . $this->getTable('entry') . ' SET reading_time = 0 WHERE reading_time IS NULL;');
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE reading_time reading_time INT(11) NOT NULL;');
|
||||||
|
break;
|
||||||
|
case 'postgresql':
|
||||||
|
$this->addSql('UPDATE ' . $this->getTable('entry') . ' SET reading_time = 0 WHERE reading_time IS NULL;');
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' ALTER COLUMN reading_time SET NOT NULL;');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
|
||||||
|
|
||||||
|
switch ($this->connection->getDatabasePlatform()->getName()) {
|
||||||
|
case 'mysql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE reading_time reading_time INT(11);');
|
||||||
|
break;
|
||||||
|
case 'postgresql':
|
||||||
|
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' ALTER COLUMN reading_time DROP NOT NULL;');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
55
app/DoctrineMigrations/Version20171105202000.php
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add origin_url column.
|
||||||
|
*/
|
||||||
|
class Version20171105202000 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf($entryTable->hasColumn('origin_url'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->addColumn('origin_url', 'text', [
|
||||||
|
'notnull' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$entryTable = $schema->getTable($this->getTable('entry'));
|
||||||
|
|
||||||
|
$this->skipIf(!$entryTable->hasColumn('origin_url'), 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$entryTable->dropColumn('origin_url');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20171120163128.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add store_article_headers in craue_config_setting.
|
||||||
|
*/
|
||||||
|
class Version20171120163128 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$storeArticleHeaders = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'store_article_headers'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $storeArticleHeaders, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('store_article_headers', '0', 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'store_article_headers';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/DoctrineMigrations/Version20171125164500.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Application\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Migrations\AbstractMigration;
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add shaarli_share_origin_url in craue_config_setting.
|
||||||
|
*/
|
||||||
|
class Version20171125164500 extends AbstractMigration implements ContainerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ContainerInterface
|
||||||
|
*/
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function setContainer(ContainerInterface $container = null)
|
||||||
|
{
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function up(Schema $schema)
|
||||||
|
{
|
||||||
|
$shaarliShareOriginUrl = $this->container
|
||||||
|
->get('doctrine.orm.default_entity_manager')
|
||||||
|
->getConnection()
|
||||||
|
->fetchArray('SELECT * FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'shaarli_share_origin_url'");
|
||||||
|
|
||||||
|
$this->skipIf(false !== $shaarliShareOriginUrl, 'It seems that you already played this migration.');
|
||||||
|
|
||||||
|
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('shaarli_share_origin_url', '0', 'entry')");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
*/
|
||||||
|
public function down(Schema $schema)
|
||||||
|
{
|
||||||
|
$this->addSql('DELETE FROM ' . $this->getTable('craue_config_setting') . " WHERE name = 'shaarli_share_origin_url';");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTable($tableName)
|
||||||
|
{
|
||||||
|
return $this->container->getParameter('database_table_prefix') . $tableName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
download_pictures: Download billeder på din server
|
||||||
|
carrot: Aktiver deling til Carrot
|
||||||
|
diaspora_url: Diaspora URL, hvis tjenesten er aktiv
|
||||||
|
export_epub: Aktiver eksport til ePub
|
||||||
|
export_mobi: Aktiver eksport til .mobi
|
||||||
|
export_pdf: Aktiver eksport til PDF
|
||||||
|
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
|
||||||
|
shaarli_url: Shaarli-URL, hvis tjenesten er aktiv
|
||||||
|
scuttle_url: Scuttle-URL, hvis tjenesten er aktiv
|
||||||
|
unmark_url: Unmark-URL, hvis tjenesten er aktiv
|
||||||
|
share_diaspora: Aktiver deling til Diaspora
|
||||||
|
share_mail: Aktiver deling med email
|
||||||
|
share_shaarli: Aktiver deling gennem Shaarli
|
||||||
|
share_scuttle: Aktiver deling gennem Scuttle
|
||||||
|
share_twitter: Aktiver deling gennem Twitter
|
||||||
|
share_unmark: Aktiver deling gennem Unmark.it
|
||||||
|
show_printlink: Vis et link til print-indhold
|
||||||
|
wallabag_support_url: Support-URL for wallabag
|
||||||
|
entry: "artikel"
|
||||||
|
export: "eksport"
|
||||||
|
import: "import"
|
||||||
|
misc: "misc"
|
||||||
|
modify_settings: "Gem ændring"
|
||||||
|
piwik_host: Hosting af din side hos Piwik (uden http:// eller https://)
|
||||||
|
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
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
settings_changed: 'Konfiguration aktualisiert'
|
||||||
|
download_pictures: 'Bilder auf den Server herunterladen'
|
||||||
|
carrot: 'Teilen zu Carrot aktivieren'
|
||||||
|
diaspora_url: 'Diaspora-URL, sofern der Service aktiviert ist'
|
||||||
|
export_epub: 'ePUB-Export aktivieren'
|
||||||
|
export_mobi: 'mobi-Export aktivieren'
|
||||||
|
export_pdf: 'PDF-Export aktivieren'
|
||||||
|
export_csv: 'CSV-Export aktivieren'
|
||||||
|
export_json: 'JSON-Export aktivieren'
|
||||||
|
export_txt: 'TXT-Export aktivieren'
|
||||||
|
export_xml: 'XML-Export aktivieren'
|
||||||
|
import_with_rabbitmq: 'Aktiviere RabbitMQ, um Artikel asynchron zu importieren'
|
||||||
|
import_with_redis: 'Aktiviere Redis, um Artikel asynchron zu importieren'
|
||||||
|
shaarli_url: 'Shaarli-URL, sofern der Service aktiviert ist'
|
||||||
|
scuttle_url: 'Scuttle-URL, sofern der Service aktiviert ist'
|
||||||
|
unmark_url: 'Unmark-URL, sofern der Service aktiviert ist'
|
||||||
|
share_diaspora: 'Teilen zu Diaspora aktiveren'
|
||||||
|
share_mail: 'Teilen via E-Mail aktiveren'
|
||||||
|
share_shaarli: 'Teilen zu Shaarli aktiveren'
|
||||||
|
share_twitter: 'Teilen zu Twitter aktiveren'
|
||||||
|
share_unmark: 'Teilen zu Unmark.it aktiveren'
|
||||||
|
show_printlink: 'Link anzeigen, um den Inhalt auszudrucken'
|
||||||
|
wallabag_support_url: 'Support-URL für wallabag'
|
||||||
|
wallabag_url: 'URL von *deiner* wallabag-Instanz'
|
||||||
|
entry: 'Artikel'
|
||||||
|
export: 'Export'
|
||||||
|
import: 'Import'
|
||||||
|
misc: 'Verschiedenes'
|
||||||
|
modify_settings: 'Übernehmen'
|
||||||
|
piwik_host: 'Host deiner Webseite in Piwik (ohne http:// oder https://)'
|
||||||
|
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: 'Erlaube eine öffentliche URL für Einträge'
|
||||||
|
download_images_enabled: 'Bilder lokal herunterladen'
|
||||||
|
restricted_access: 'Authentifizierung für Webseiten mit Paywall aktivieren'
|
||||||
|
api_user_registration: 'Registrierung eines Benutzers über die API ermöglichen'
|
||||||
|
store_article_headers: 'Speichern von HTTP-Headern für jeden Artikel aktivieren'
|
||||||
|
shaarli_share_origin_url: 'Original-URL mit Shaarli teilen, wenn der Service aktiviert ist'
|
||||||
@ -1,7 +1,9 @@
|
|||||||
settings_changed: Configuration updated
|
settings_changed: Configuration updated
|
||||||
download_pictures: Download pictures onto your server
|
download_pictures: Download pictures on your server
|
||||||
|
carrot: Enable share to Carrot
|
||||||
diaspora_url: diaspora* URL, if the service is enabled
|
diaspora_url: diaspora* URL, if the service is enabled
|
||||||
export_epub: Enable ePub export
|
export_epub: Enable ePub export
|
||||||
|
export_mobi: Enable .mobi export
|
||||||
export_pdf: Enable PDF export
|
export_pdf: Enable PDF export
|
||||||
export_csv: Enable CSV export
|
export_csv: Enable CSV export
|
||||||
export_json: Enable JSON export
|
export_json: Enable JSON export
|
||||||
@ -10,26 +12,29 @@ export_xml: Enable XML export
|
|||||||
import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||||
import_with_redis: Enable Redis to import data asynchronously
|
import_with_redis: Enable Redis to import data asynchronously
|
||||||
shaarli_url: Shaarli URL, if the service is enabled
|
shaarli_url: Shaarli URL, if the service is enabled
|
||||||
|
scuttle_url: Scuttle URL, if the service is enabled
|
||||||
unmark_url: Unmark URL, if the service is enabled
|
unmark_url: Unmark URL, if the service is enabled
|
||||||
share_diaspora: Enable share to diaspora*
|
share_diaspora: Enable share to diaspora*
|
||||||
share_mail: Enable share by e-mail
|
share_mail: Enable share by e-mail
|
||||||
share_shaarli: Enable sharing to Shaarli
|
share_shaarli: Enable sharing to Shaarli
|
||||||
|
share_scuttle: Enable sharing to Scuttle
|
||||||
share_twitter: Enable sharing to Twitter
|
share_twitter: Enable sharing to Twitter
|
||||||
share_unmark: Enable sharing to Unmark.it
|
share_unmark: Enable sharing to Unmark.it
|
||||||
share_linkding: Enable sharing to Linkding
|
|
||||||
show_printlink: Display a link to print content
|
show_printlink: Display a link to print content
|
||||||
wallabag_support_url: Support URL for wallabag
|
wallabag_support_url: Support URL for wallabag
|
||||||
entry: article
|
entry: "article"
|
||||||
export: export
|
export: "export"
|
||||||
import: import
|
import: "import"
|
||||||
misc: misc
|
misc: "misc"
|
||||||
modify_settings: apply
|
modify_settings: "apply"
|
||||||
matomo_host: Host of your website in Matomo (without http:// or https://)
|
piwik_host: Host of your website in Piwik (without http:// ou https://)
|
||||||
matomo_site_id: ID of your website in Matomo
|
piwik_site_id: ID of your website in Piwik
|
||||||
matomo_enabled: Enable Matomo
|
piwik_enabled: Enable Piwik
|
||||||
share_public: Allow public URLs for entries
|
demo_mode_enabled: "Enable demo mode? (Only used for the public wallabag demo)"
|
||||||
|
demo_mode_username: "Demo user"
|
||||||
|
share_public: Allow public URL for entries
|
||||||
download_images_enabled: Download images locally
|
download_images_enabled: Download images locally
|
||||||
restricted_access: Enable authentication for paywalled websites
|
restricted_access: Enable authentication for paywalled websites
|
||||||
api_user_registration: Turn on user registration via the API
|
api_user_registration: Enable user to be registered using the API
|
||||||
store_article_headers: Enable if wallabag stores HTTP headers for each article
|
store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
shaarli_share_origin_url: Enable sharing origin URL to Shaarli, if the service is enabled
|
shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
settings_changed: Configuración actualizada
|
||||||
|
download_pictures: Descargar imágenes en el servidor
|
||||||
|
carrot: Activar compartir con Carrot
|
||||||
|
diaspora_url: URL de Diaspora, si el servicio está activado
|
||||||
|
export_epub: Activar exportación a ePub
|
||||||
|
export_mobi: Activar exportación a .mobi
|
||||||
|
export_pdf: Activar exportación a PDF
|
||||||
|
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: Activar RabbitMQ para importar datos de forma asíncrona
|
||||||
|
import_with_redis: Activar Redis para importar datos de forma asíncrona
|
||||||
|
shaarli_url: URL de Shaarli, si el servicio está activado
|
||||||
|
scuttle_url: URL de Scuttle, si el servicio está activado
|
||||||
|
unmark_url: URL de Unmark, si el servicio está activado
|
||||||
|
share_diaspora: Activar compartir con Diaspora
|
||||||
|
share_mail: Activar compartir con Email
|
||||||
|
share_shaarli: Activar compartir con Shaarli
|
||||||
|
share_scuttle: Activar compartir con Scuttle
|
||||||
|
share_twitter: Activar compartir con Twitter
|
||||||
|
share_unmark: Activar compartir con Unmark.it
|
||||||
|
show_printlink: Mostrar un enlace para imprimir contenido
|
||||||
|
wallabag_support_url: URL de soporte de wallabag
|
||||||
|
entry: "artículo"
|
||||||
|
export: "exportar"
|
||||||
|
import: "importar"
|
||||||
|
misc: "misc"
|
||||||
|
modify_settings: "guardar"
|
||||||
|
piwik_host: Host de tu website en Piwik (sin http:// o https://)
|
||||||
|
piwik_site_id: ID de tu website en Piwik
|
||||||
|
piwik_enabled: Activar Piwik
|
||||||
|
demo_mode_enabled: "Activar modo demo (sólo usado en la demo pública de wallabag)"
|
||||||
|
demo_mode_username: "Nombre de usuario demo"
|
||||||
|
share_public: Permitir URL pública para los artículos
|
||||||
|
download_images_enabled: Descargar imágenes localmente
|
||||||
|
restricted_access: Activar autenticación para websites con paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
download_pictures: تصاویر را در کارگزار خودتان باربگیرید
|
||||||
|
carrot: فعالسازی همرسانی به Carrot
|
||||||
|
diaspora_url: نشانی Diaspora، اگر فعال بود
|
||||||
|
export_epub: فعالسازی برونسپاری به ePub
|
||||||
|
export_mobi: فعالسازی برونسپاری به mobi
|
||||||
|
export_pdf: فعالسازی برونسپاری به PDF
|
||||||
|
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
|
||||||
|
shaarli_url: نشانی Shaarli، اگر فعال بود
|
||||||
|
scuttle_url: نشانی Scuttle، اگر فعال بود
|
||||||
|
unmark_url: نشانی Unmark، اگر فعال بود
|
||||||
|
share_diaspora: فعالسازی همرسانی به Diaspora
|
||||||
|
share_mail: فعالسازی همرسانی با ایمیل
|
||||||
|
share_shaarli: فعالسازی همرسانی به Shaarli
|
||||||
|
share_scuttle: فعالسازی همرسانی به Scuttle
|
||||||
|
share_twitter: فعالسازی همرسانی به Twitter
|
||||||
|
share_unmark: فعالسازی همرسانی به Unmark.it
|
||||||
|
show_printlink: نمایش پیوندی برای چاپ مطلب
|
||||||
|
wallabag_support_url: نشانی صفحهٔ پشتیبانی wallabag
|
||||||
|
entry: "مقاله"
|
||||||
|
export: "برونسپاری"
|
||||||
|
import: "درونریزی"
|
||||||
|
misc: "غیره"
|
||||||
|
modify_settings: "اعمال"
|
||||||
|
# piwik_host: Host of your website in Piwik (without http:// or https://)
|
||||||
|
# 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
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -1,7 +1,9 @@
|
|||||||
settings_changed: Configuration mise à jour
|
settings_changed: Configuration mise à jour
|
||||||
download_pictures: Télécharger les images sur le serveur
|
download_pictures: Télécharger les images sur le serveur
|
||||||
diaspora_url: URL de diaspora*, si le service est activé
|
carrot: Activer le partage vers Carrot
|
||||||
|
diaspora_url: URL de Diaspora, si le service Diaspora est activé
|
||||||
export_epub: Activer l'export ePub
|
export_epub: Activer l'export ePub
|
||||||
|
export_mobi: Activer l'export .mobi
|
||||||
export_pdf: Activer l'export PDF
|
export_pdf: Activer l'export PDF
|
||||||
export_csv: Activer l'export CSV
|
export_csv: Activer l'export CSV
|
||||||
export_json: Activer l'export JSON
|
export_json: Activer l'export JSON
|
||||||
@ -10,26 +12,29 @@ export_xml: Activer l'export XML
|
|||||||
import_with_rabbitmq: Activer RabbitMQ pour gérer les imports de façon asynchrone
|
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
|
import_with_redis: Activer Redis pour gérer les imports de façon asynchrone
|
||||||
shaarli_url: URL de Shaarli, si le service Shaarli est activé
|
shaarli_url: URL de Shaarli, si le service Shaarli est activé
|
||||||
|
scuttle_url: URL de Scuttle, si le service Scuttle est activé
|
||||||
unmark_url: URL de Unmark, si le service Unmark est activé
|
unmark_url: URL de Unmark, si le service Unmark est activé
|
||||||
share_diaspora: Activer le partage vers diaspora*
|
share_diaspora: Activer le partage vers Diaspora
|
||||||
share_mail: Activer le partage par courriel
|
share_mail: Activer le partage par email
|
||||||
share_shaarli: Activer le partage vers Shaarli
|
share_shaarli: Activer le partage vers Shaarli
|
||||||
|
share_scuttle: Activer le partage vers Scuttle
|
||||||
share_twitter: Activer le partage vers Twitter
|
share_twitter: Activer le partage vers Twitter
|
||||||
share_unmark: Activer le partage vers Unmark.it
|
share_unmark: Activer le partage vers Unmark.it
|
||||||
show_printlink: Afficher un lien pour imprimer
|
show_printlink: Afficher un lien pour imprimer
|
||||||
wallabag_support_url: URL de support de wallabag
|
wallabag_support_url: URL de support de wallabag
|
||||||
entry: article
|
entry: "article"
|
||||||
export: export
|
export: "export"
|
||||||
import: import
|
import: "import"
|
||||||
misc: divers
|
misc: "divers"
|
||||||
modify_settings: appliquer
|
modify_settings: "appliquer"
|
||||||
matomo_host: URL de votre site dans Matomo (sans http:// ou https://)
|
piwik_host: URL de votre site dans Piwik (sans http:// ou https://)
|
||||||
matomo_site_id: ID de votre site dans Matomo
|
piwik_site_id: ID de votre site dans Piwik
|
||||||
matomo_enabled: Activer Matomo
|
piwik_enabled: Activer Piwik
|
||||||
share_public: Autoriser les URL publiques pour les articles
|
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
|
||||||
download_images_enabled: Télécharger les images en local
|
download_images_enabled: Télécharger les images en local
|
||||||
restricted_access: Activer l'authentification pour les sites avec paywall
|
restricted_access: Activer l'authentification pour les articles derrière un paywall
|
||||||
api_user_registration: Activer la création de compte depuis l'API
|
api_user_registration: Activer la création de compte depuis l'API
|
||||||
store_article_headers: Activer le stockage des en-têtes HTTP de chaque article
|
store_article_headers: Activer le stockage des en-têtes HTTP de chaque article
|
||||||
shaarli_share_origin_url: Activer le partage de l'adresse d'origine vers Shaarli, si le service est activé
|
shaarli_share_origin_url: Activer le partage de l'adresse d'origine vers Shaarli, si le service est activé
|
||||||
share_linkding: Activer le partage à Linkding
|
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
download_pictures: Scarica le immagini sul tuo server
|
||||||
|
carrot: Abilita la condivisione con Carrot
|
||||||
|
diaspora_url: Diaspora URL, se il servizio è abilitato
|
||||||
|
export_epub: Abilita esportazione ePub
|
||||||
|
export_mobi: Abilita esportazione .mobi
|
||||||
|
export_pdf: Abilita esportazione PDF
|
||||||
|
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
|
||||||
|
shaarli_url: Shaarli URL, se il servizio è abilitato
|
||||||
|
scuttle_url: Scuttle URL, se il servizio è abilitato
|
||||||
|
unmark_url: Unmark URL, se il servizio è abilitato
|
||||||
|
share_diaspora: Abilita la condivisione con Diaspora
|
||||||
|
share_mail: Abilita la condivisione per email
|
||||||
|
share_shaarli: Abilita la condivisione con Shaarli
|
||||||
|
share_scuttle: Abilita la condivisione con Scuttle
|
||||||
|
share_twitter: Abilita la condivisione con Twitter
|
||||||
|
share_unmark: Abilita la condivisione con Unmark.it
|
||||||
|
show_printlink: Mostra un collegamento per stampare il contenuto
|
||||||
|
wallabag_support_url: URL di supporto per wallabag
|
||||||
|
entry: "contenuto"
|
||||||
|
export: "esporta"
|
||||||
|
import: "importa"
|
||||||
|
misc: "misc"
|
||||||
|
modify_settings: "applica"
|
||||||
|
piwik_host: Host del tuo sito in Piwik (senza http:// o https://)
|
||||||
|
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
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
api_user_registration: Abilita la registrazione dell'utente attraverso l'API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -1,7 +1,9 @@
|
|||||||
settings_changed: Configuracion mesa a jorn
|
settings_changed: Configuracion mesa a jorn
|
||||||
download_pictures: Telecargar los imatges sul servidor
|
download_pictures: Telecargar los imatges sul servidor
|
||||||
diaspora_url: URL de diaspora*, se lo servici diaspora* es activat
|
carrot: Activar lo partatge cap a Carrot
|
||||||
|
diaspora_url: URL de Diaspora, se lo servici Diaspora es activat
|
||||||
export_epub: Activar l'expòrt ePub
|
export_epub: Activar l'expòrt ePub
|
||||||
|
export_mobi: Activar l'expòrt .mobi
|
||||||
export_pdf: Activar l'expòrt PDF
|
export_pdf: Activar l'expòrt PDF
|
||||||
export_csv: Activar l'expòrt CSV
|
export_csv: Activar l'expòrt CSV
|
||||||
export_json: Activar l'expòrt JSON
|
export_json: Activar l'expòrt JSON
|
||||||
@ -10,6 +12,7 @@ export_xml: Activar l'expòrt XML
|
|||||||
import_with_rabbitmq: Activar RabbitMQ per importar de donadas de manièra asincròna
|
import_with_rabbitmq: Activar RabbitMQ per importar de donadas de manièra asincròna
|
||||||
import_with_redis: Activar Redis per importar de donadas de manièra asincròna
|
import_with_redis: Activar Redis per importar de donadas de manièra asincròna
|
||||||
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
|
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
|
||||||
|
scuttle_url: URL de Scuttle, se lo servici Scuttle es activat
|
||||||
unmark_url: URL de Unmark, se lo servici Scuttle es activat
|
unmark_url: URL de Unmark, se lo servici Scuttle es activat
|
||||||
share_diaspora: Activar lo partatge cap a Diaspora*
|
share_diaspora: Activar lo partatge cap a Diaspora*
|
||||||
share_mail: Activar lo partatge per corrièl
|
share_mail: Activar lo partatge per corrièl
|
||||||
@ -24,12 +27,14 @@ export: "expòrt"
|
|||||||
import: "impòrt"
|
import: "impòrt"
|
||||||
misc: "divèrs"
|
misc: "divèrs"
|
||||||
modify_settings: "aplicar"
|
modify_settings: "aplicar"
|
||||||
matomo_host: URL de vòstre site dins Matomo (sense http:// o https://)
|
piwik_host: URL de vòstre site dins Piwik (sense http:// o https://)
|
||||||
matomo_site_id: ID de vòstre site dins Matomo
|
piwik_site_id: ID de vòstre site dins Piwik
|
||||||
matomo_enabled: Activar Matomo
|
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: Autorizar una URL publica pels articles
|
share_public: Autorizar una URL publica pels articles
|
||||||
download_images_enabled: Telecargar los imatges en local
|
download_images_enabled: Telecargar los imatges en local
|
||||||
restricted_access: Activar l'autenticacion pels sites amb peatge
|
restricted_access: Activar l'autenticacion pels sites amb peatge
|
||||||
api_user_registration: Autorizar los utilizaires a se marcar amb l'API
|
api_user_registration: Autorizar los utilizaires a se marcar amb l'API
|
||||||
store_article_headers: Activar se wallabag garda las entèstas HTTP per cada article
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
shaarli_share_origin_url: Activar lo partatge de l’url amb Shaarli, se lo servici es activat
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
settings_changed: Konfiguracja zaktualizowana
|
||||||
|
download_pictures: Pobierz obrazy na swój serwer
|
||||||
|
carrot: Włącz udostępnianie dla Carrot
|
||||||
|
diaspora_url: Adres URL Diaspora, jeżeli usługa jest włączona
|
||||||
|
export_epub: Włącz eksport do ePub
|
||||||
|
export_mobi: Włącz eksport do .mobi
|
||||||
|
export_pdf: Włącz eksport do PDF
|
||||||
|
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
|
||||||
|
shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona
|
||||||
|
scuttle_url: Adress URL Scuttle, jeżeli usługa jest włączona
|
||||||
|
share_diaspora: Włącz udostępnianie dla Diaspora
|
||||||
|
share_mail: Włącz udostępnianie przez email
|
||||||
|
share_shaarli: Włącz udostępnianie dla Shaarli
|
||||||
|
share_scuttle: Włącz udostępnianie dla Scuttle
|
||||||
|
share_twitter: Włącz udostępnianie dla Twitter
|
||||||
|
share_unmark: Włącz udostępnianie dla Unmark.it
|
||||||
|
show_printlink: Pokaż link do wydrukowania zawartości
|
||||||
|
wallabag_support_url: Adres URL wsparcia dla wallabag
|
||||||
|
entry: "artykuł"
|
||||||
|
export: "eksport"
|
||||||
|
import: "import"
|
||||||
|
misc: "różne"
|
||||||
|
modify_settings: "zatwierdź"
|
||||||
|
piwik_host: Host twojej strony Piwik (bez http:// lub https://)
|
||||||
|
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
|
||||||
|
download_images_enabled: Pobierz obrazy lokalnie
|
||||||
|
restricted_access: Włącz autoryzację dla stron z paywallem
|
||||||
|
api_user_registration: Włącz rejestrację użytkownika przy użyciu API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
download_pictures: Download imagens no seu servidor
|
||||||
|
carrot: Habilitar compartilhamento para o Carrot
|
||||||
|
diaspora_url: URL Diaspora, se o serviço está habilitado
|
||||||
|
export_epub: Habilita exportação para ePub
|
||||||
|
export_mobi: Habilita exportação para .mobi
|
||||||
|
export_pdf: Habilita exportação para PDF
|
||||||
|
export_csv: Habilita exportação para CSV
|
||||||
|
export_json: Habilita exportação para JSON
|
||||||
|
export_txt: Habilita exportação para TXT
|
||||||
|
export_xml: Habilita exportação para XML
|
||||||
|
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
|
||||||
|
# import_with_redis: Enable Redis to import data asynchronously
|
||||||
|
shaarli_url: URL Shaarli, se o serviço está habilitado
|
||||||
|
scuttle_url: URL Scuttle, se o serviço está habilitado
|
||||||
|
unmark_url: URL Unmark, se o serviço está habilitado
|
||||||
|
share_diaspora: Habilitar compartilhamento para o Diaspora
|
||||||
|
share_mail: Habilitar compartilhamento por e-mail
|
||||||
|
share_shaarli: Habilitar compartilhamento para o Shaarli
|
||||||
|
share_scuttle: Habilitar compartilhamento para o Scuttle
|
||||||
|
share_twitter: Habilitar compartilhamento para o Twitter
|
||||||
|
share_unmark: Habilitar compartilhamento para o Unmark.it
|
||||||
|
show_printlink: Mostrar um link para imprimir o conteúdo
|
||||||
|
wallabag_support_url: URL de Suporte do wallabag
|
||||||
|
entry: "artigo"
|
||||||
|
export: "exportar"
|
||||||
|
import: "importar"
|
||||||
|
misc: "misc"
|
||||||
|
modify_settings: "aplicar"
|
||||||
|
piwik_host: Host de seu website Piwik
|
||||||
|
piwik_site_id: ID de seu website Piwik
|
||||||
|
piwik_enabled: Habilitar Piwik
|
||||||
|
demo_mode_enabled: "Habilitar modo demo? (somente usado para o demo público do wallabag)"
|
||||||
|
demo_mode_username: "Usuário demo"
|
||||||
|
# share_public: Allow public url for entries
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
download_pictures: Descarcă poze pe server
|
||||||
|
carrot: Permite share către Carrot
|
||||||
|
diaspora_url: Diaspora URL, dacă serviciul este permis
|
||||||
|
export_epub: Permite exportare ePub
|
||||||
|
export_mobi: Permite exportare .mobi
|
||||||
|
export_pdf: Permite exportare PDF
|
||||||
|
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
|
||||||
|
shaarli_url: Shaarli URL, dacă serviciul este permis
|
||||||
|
scuttle_url: Scuttle URL, dacă serviciul este permis
|
||||||
|
unmark_url: Unmark URL, dacă serviciul este permis
|
||||||
|
share_diaspora: Permite share către Diaspora
|
||||||
|
share_mail: Permite share prin email
|
||||||
|
share_shaarli: Permite share către Shaarli
|
||||||
|
share_scuttle: Permite share către Scuttle
|
||||||
|
share_twitter: Permite share către Twitter
|
||||||
|
share_unmark: Permite share către Unmark.it
|
||||||
|
show_printlink: Afișează un link pentru a printa content-ul
|
||||||
|
wallabag_support_url: URL-ul de suport pentru wallabag
|
||||||
|
entry: "alticol"
|
||||||
|
export: "exportă"
|
||||||
|
import: "importă"
|
||||||
|
misc: "diverse"
|
||||||
|
modify_settings: "aplică"
|
||||||
|
# piwik_host: Host of your website in Piwik (without http:// or https://)
|
||||||
|
# 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
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -1,7 +1,9 @@
|
|||||||
settings_changed: "Настройки обновлены"
|
settings_changed: "Настройки обновлены"
|
||||||
download_pictures: "Скачивать картинки на Ваш сервер"
|
download_pictures: "Скачивать картинки на Ваш сервер"
|
||||||
|
carrot: "Включить возможность отслеживания событий через Carrot"
|
||||||
diaspora_url: "Diaspora URL, если сервис включен"
|
diaspora_url: "Diaspora URL, если сервис включен"
|
||||||
export_epub: "Включить ePub экспорт"
|
export_epub: "Включить ePub экспорт"
|
||||||
|
export_mobi: "Включить .mobi экспорт"
|
||||||
export_pdf: "Включить PDF экспорт"
|
export_pdf: "Включить PDF экспорт"
|
||||||
export_csv: "Включить CSV экспорт"
|
export_csv: "Включить CSV экспорт"
|
||||||
export_json: "Включить JSON экспорт"
|
export_json: "Включить JSON экспорт"
|
||||||
@ -10,6 +12,7 @@ export_xml: "Включить XML экспорт"
|
|||||||
import_with_rabbitmq: "Включить RabbitMQ для импорта данных(асинхронно)"
|
import_with_rabbitmq: "Включить RabbitMQ для импорта данных(асинхронно)"
|
||||||
import_with_redis: "Включить Redis для импорта данных(асинхронно)"
|
import_with_redis: "Включить Redis для импорта данных(асинхронно)"
|
||||||
shaarli_url: "Shaarli URL, если сервис включен"
|
shaarli_url: "Shaarli URL, если сервис включен"
|
||||||
|
scuttle_url: "Scuttle URL, если сервис включен"
|
||||||
unmark_url: "Unmark URL, если сервис включен"
|
unmark_url: "Unmark URL, если сервис включен"
|
||||||
share_diaspora: "Включить возможность поделиться в соц.сети Diaspora"
|
share_diaspora: "Включить возможность поделиться в соц.сети Diaspora"
|
||||||
share_mail: "Включить возможность поделиться по email"
|
share_mail: "Включить возможность поделиться по email"
|
||||||
@ -24,12 +27,14 @@ export: "экспорт"
|
|||||||
import: "импорт"
|
import: "импорт"
|
||||||
misc: "разное"
|
misc: "разное"
|
||||||
modify_settings: "применить"
|
modify_settings: "применить"
|
||||||
matomo_host: "Ссылка на Ваш сайт на Matomo (с http:// или https://)"
|
piwik_host: "Ссылка на Ваш сайт на Piwik (с http:// или https://)"
|
||||||
matomo_site_id: "ID Вашего сайта на Matomo"
|
piwik_site_id: "ID Вашего сайта на Piwik"
|
||||||
matomo_enabled: "Включить Matomo"
|
piwik_enabled: "Включить Piwik"
|
||||||
|
demo_mode_enabled: "Включить демо режим ? (только для публичной демонстрации wallabag)"
|
||||||
|
demo_mode_username: "Демо пользователь"
|
||||||
share_public: "Разрешить публичные ссылки на записи"
|
share_public: "Разрешить публичные ссылки на записи"
|
||||||
download_images_enabled: "Скачивать изображения локально"
|
download_images_enabled: "Скачивать изображения локально"
|
||||||
restricted_access: "Включить авторизацию на сайте с помощью paywall"
|
restricted_access: "Включить авторизацию на сайте с помощью paywall"
|
||||||
shaarli_share_origin_url: Включите отправку URL-адреса источника для Shaarli, если услуга включена
|
# api_user_registration: Enable user to be registered using the API
|
||||||
store_article_headers: Включите, если wallabag хранит заголовки HTTP для каждой статьи
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
api_user_registration: Разрешить пользователю регистрироваться с помощью API
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -1,7 +1,9 @@
|
|||||||
settings_changed: ปรับปรุงองค์ประกอบ
|
settings_changed: ปรับปรุงองค์ประกอบ
|
||||||
download_pictures: ดาวน์โหลดรูปภาพผ่านเซิฟเวอร์ของคุณ
|
download_pictures: ดาวน์โหลดรูปภาพผ่านเซิฟเวอร์ของคุณ
|
||||||
|
carrot: เปิดการแชร์ Carrot
|
||||||
diaspora_url: Diaspora-URL, ถ้าเซิฟเวอร์ถูกเปิดใช้งาน
|
diaspora_url: Diaspora-URL, ถ้าเซิฟเวอร์ถูกเปิดใช้งาน
|
||||||
export_epub: เปิดใช้งานการนำเข้าข้อมูลแบบ ePub
|
export_epub: เปิดใช้งานการนำเข้าข้อมูลแบบ ePub
|
||||||
|
export_mobi: เปิดใช้งานการนำเข้าข้อมูลแบบ .mobi
|
||||||
export_pdf: เปิดใช้งานการนำเข้าข้อมูลแบบ PDF
|
export_pdf: เปิดใช้งานการนำเข้าข้อมูลแบบ PDF
|
||||||
export_csv: เปิดใช้งานการนำเข้าข้อมูลแบบ CSV
|
export_csv: เปิดใช้งานการนำเข้าข้อมูลแบบ CSV
|
||||||
export_json: เปิดใช้งานการนำเข้าข้อมูลแบบ JSON
|
export_json: เปิดใช้งานการนำเข้าข้อมูลแบบ JSON
|
||||||
@ -13,6 +15,7 @@ shaarli_url: Shaarli-URL, ถ้าเซิฟเวอร์ถูกเปิ
|
|||||||
share_diaspora: เปิดการแชร์ Diaspora
|
share_diaspora: เปิดการแชร์ Diaspora
|
||||||
share_mail: เปิดการแชร์ผ่าน email
|
share_mail: เปิดการแชร์ผ่าน email
|
||||||
share_shaarli: เปิดการแชร์ Shaarli
|
share_shaarli: เปิดการแชร์ Shaarli
|
||||||
|
share_scuttle: เปิดการแชร์ Scuttle
|
||||||
share_twitter: เปิดการแชร์ Twitter
|
share_twitter: เปิดการแชร์ Twitter
|
||||||
share_unmark: เปิดการแชร์ Unmark.it
|
share_unmark: เปิดการแชร์ Unmark.it
|
||||||
show_printlink: แสดงลิงค์เพื่อปรินท์เนื้อหา
|
show_printlink: แสดงลิงค์เพื่อปรินท์เนื้อหา
|
||||||
@ -22,10 +25,13 @@ export: "นำข้อมูลออก"
|
|||||||
import: "นำเข้าข้อมูล"
|
import: "นำเข้าข้อมูล"
|
||||||
misc: "เบ็ดเตล็ด"
|
misc: "เบ็ดเตล็ด"
|
||||||
modify_settings: "ปรับใช้"
|
modify_settings: "ปรับใช้"
|
||||||
matomo_host: โฮสบนเว็บไซต์ของคุณใน Matomo (ยกเว้น http:// หรือ https://)
|
piwik_host: โฮสบนเว็บไซต์ของคุณใน Piwik (ยกเว้น http:// หรือ https://)
|
||||||
matomo_site_id: ไอดีบนเว็บไซต์ของคุณใน Matomo
|
piwik_site_id: ไอดีบนเว็บไซต์ของคุณใน Piwik
|
||||||
matomo_enabled: เปิดการใช้ Matomo
|
piwik_enabled: เปิดการใช้ Piwik
|
||||||
|
demo_mode_enabled: "เปิดการใช้งานโหมดเดโม ? (เฉพาะการใช้สำหรับเดโมสาธารณะของ wallabag)"
|
||||||
|
demo_mode_username: "ผู้ใช้ส่วนเดโม"
|
||||||
share_public: ยอมรับ URL สาธารณะจากการเข้าถึงข้อมูล
|
share_public: ยอมรับ URL สาธารณะจากการเข้าถึงข้อมูล
|
||||||
download_images_enabled: ดาวน์โหลดรูปภาพเฉพาะ
|
download_images_enabled: ดาวน์โหลดรูปภาพเฉพาะ
|
||||||
restricted_access: เปิดใช้งานการรองรับบนเว็บไซต์กับ paywall
|
restricted_access: เปิดใช้งานการรองรับบนเว็บไซต์กับ paywall
|
||||||
api_user_registration: เปิดใช้งานให้ผู้ใช้ลงทะเบียนการใช้ API
|
api_user_registration: เปิดใช้งานให้ผู้ใช้ลงทะเบียนการใช้ API
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
# settings_changed: Configuration updated
|
||||||
|
# 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
|
||||||
|
# scuttle_url: Scuttle URL, if the service is enabled
|
||||||
|
# unmark_url: Unmark 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_scuttle: Enable share to Scuttle
|
||||||
|
# share_twitter: Enable share to Twitter
|
||||||
|
# share_unmark: Enable share to Unmark.it
|
||||||
|
# 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 (without http:// or https://)
|
||||||
|
# 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
|
||||||
|
# download_images_enabled: Download images locally
|
||||||
|
# restricted_access: Enable authentication for websites with paywall
|
||||||
|
# api_user_registration: Enable user to be registered using the API
|
||||||
|
# store_article_headers: Enable if wallabag stores HTTP headers for each article
|
||||||
|
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled
|
||||||
@ -1,4 +1,4 @@
|
|||||||
{% extends "layout.html.twig" %}
|
{% extends "WallabagCoreBundle::layout.html.twig" %}
|
||||||
|
|
||||||
{% block title %}{{ 'menu.left.internal_settings'|trans }}{% endblock %}
|
{% block title %}{{ 'menu.left.internal_settings'|trans }}{% endblock %}
|
||||||
|
|
||||||
@ -12,31 +12,25 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="div_tabs col s12">
|
<div class="div_tabs col s12">
|
||||||
<ul class="tabs">
|
<ul class="tabs">
|
||||||
{% for section in sections|craue_sortSections %}
|
{% for section in sections | craue_sortSections %}
|
||||||
<li class="tab col s12 m6 l3"><a href="#set-{{ section }}">{{ section|trans({}, 'CraueConfigBundle') }}</a></li>
|
<li class="tab col s12 m6 l3"><a href="#set-{{ section }}">{{ section | trans({}, 'CraueConfigBundle') }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for section in sections|craue_sortSections %}
|
{% for section in sections | craue_sortSections %}
|
||||||
<div id="set-{{ section }}" class="col s12">
|
<div id="set-{{ section }}" class="col s12">
|
||||||
{% for setting in form.settings %}
|
{% for setting in form.settings if setting.vars.value.section == section %}
|
||||||
{% if setting.vars.value.section == section %}
|
{{ form_row(setting.value, {
|
||||||
<div class="row">
|
'label': setting.vars.value.name | trans({}, 'CraueConfigBundle'),
|
||||||
<div class="input-field col s12">
|
}) }}
|
||||||
{{ form_row(setting.value, {
|
|
||||||
'label': setting.vars.value.name|trans({}, 'CraueConfigBundle'),
|
|
||||||
}) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="btn waves-effect waves-light" type="submit" name="action">
|
<button class="btn waves-effect waves-light" type="submit" name="action">
|
||||||
{{ 'modify_settings'|trans({}, 'CraueConfigBundle') }}
|
{{ 'modify_settings' | trans({}, 'CraueConfigBundle') }}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{{ form_widget(form._token) }}
|
{{ form_widget(form._token) }}
|
||||||
@ -5,9 +5,9 @@
|
|||||||
.material-icons.md-48 { font-size: 48px; }
|
.material-icons.md-48 { font-size: 48px; }
|
||||||
|
|
||||||
/* Rules for using icons as black on a light background. */
|
/* Rules for using icons as black on a light background. */
|
||||||
.material-icons.md-dark { color: rgb(0 0 0 / 54%); }
|
.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); }
|
||||||
.material-icons.md-dark.md-inactive { color: rgb(0 0 0 / 26%); }
|
.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); }
|
||||||
|
|
||||||
/* Rules for using icons as white on a dark background. */
|
/* Rules for using icons as white on a dark background. */
|
||||||
.material-icons.md-light { color: rgb(255 255 255 / 100%); }
|
.material-icons.md-light { color: rgba(255, 255, 255, 1); }
|
||||||
.material-icons.md-light.md-inactive { color: rgb(255 255 255 / 30%); }
|
.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); }
|
||||||
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-114.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-120.png
Executable file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-144.png
Executable file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-152.png
Executable file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-57.png
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
app/Resources/static/themes/_global/img/appicon/apple-touch-icon-72.png
Executable file
|
After Width: | Height: | Size: 1.7 KiB |