Compare commits

...

682 Commits
2.2.0 ... 2.3.0

Author SHA1 Message Date
79ad373d33 Release wallabag 2.3.0 2017-12-11 19:56:14 +01:00
bd527a9f4c Merge pull request #3474 from wallabag/update-changelog
Updated changelog for 2.3
2017-12-11 19:53:10 +01:00
42f4f11ef0 Updated changelog for 2.3 2017-12-11 19:52:21 +01:00
98869090f6 Merge pull request #3468 from wallabag/fix-migration-3139
Fix migration from #3139
2017-12-11 19:38:46 +01:00
c31daf4725 Merge pull request #3473 from cvergne/fix-rssall
Fix All RSS not accessible if not logged in + Tests
2017-12-11 19:38:21 +01:00
12e7599b35 Merge pull request #3471 from cvergne/fix-rssdate
Fix #3448 - pubDate now conformant to DateTime RFC822 specifications
2017-12-11 16:11:23 +01:00
a40a8038d3 Fix All RSS not accessible if not logged in + Tests 2017-12-11 16:04:06 +01:00
70d73bdd86 Fix #3448 - pubDate now conformant to Date and Time specifications defined by RFC822 2017-12-11 13:17:42 +01:00
40a63c8b11 migrations: fix duplicate violation during lowercase tag migration
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-12-10 19:31:30 +01:00
6c5904ba7f Replace raw query with named parameter
Fix possible issue with special chars on #3139

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-12-10 18:22:41 +01:00
e9a4231d4f Merge pull request #3465 from wallabag/fix-tests
Fix bad key matching
2017-12-10 13:33:23 +01:00
55bd59962c Merge pull request #3467 from Simounet/feat/nav-improved
Feat/nav improved
2017-12-10 13:33:06 +01:00
f072829ce3 More space for navbar actions on mobile 2017-12-08 21:10:36 +01:00
da2a5fe222 Toggle menu anchor replaced by a button 2017-12-08 21:01:44 +01:00
4ac0e65963 Fix bad key matching
I didn't try to find which package introduced a BC (might be user-bundle
or jms serializer)
2017-12-08 12:10:28 +01:00
e99be2c134 Merge pull request #3461 from Simounet/fix/rss-on-tag-list
Tag's list improved
2017-12-08 10:27:43 +01:00
7475924eac Border radius on every corner of tag's list 2017-12-08 10:20:58 +01:00
c235cb75cd Fix duplicated code removed 2017-12-08 10:18:49 +01:00
3e7d86b2c5 Tags list view improved
No text ellipsis so we can see the whole tag, better responsiveness, bigger
touch height on links.
2017-12-08 10:18:49 +01:00
77a53ea724 Merge pull request #3463 from Simounet/feature/footer-improved
Footer improved
2017-12-08 10:10:15 +01:00
93e3329c58 Fix nav title nowrap on mobile 2017-12-07 23:46:29 +01:00
a6beec1bd2 Footer's stats displayed on mobile 2017-12-06 22:46:24 +01:00
39217f3108 Fix line-height issue on the footer 2017-12-06 22:21:19 +01:00
613a8ec312 Merge pull request #3438 from strobeltobias/patch-1
Translate new strings
2017-12-05 17:46:40 +01:00
aeab8b342e Merge pull request #3459 from Simounet/fix/pagination
Pagination improved
2017-12-05 10:03:32 +01:00
1f84aa903d Fix wrong selected page number alignment on pagination 2017-12-04 22:46:35 +01:00
f836b98fa6 Fix pagination on list mode 2017-12-04 22:31:30 +01:00
b9be1cf1ee Merge pull request #3449 from Simounet/feature/share-page
Share page improved (mobile + header's padding)
2017-12-04 10:11:32 +01:00
2784f674ea Figure image and figcaption centered on share page 2017-12-03 14:41:15 +01:00
970e107524 Share page improved (mobile + header's padding) 2017-12-03 14:38:46 +01:00
e2ee70f477 Translate new validators string 2017-11-26 14:49:59 +01:00
ca8d3ed598 Translate new strings 2017-11-26 14:24:03 +01:00
1d91f14516 Merge pull request #3436 from wallabag/origin-shaarli
Add craue setting to enable sharing of origin url to Shaarli
2017-11-26 08:58:17 +01:00
893fd6434f Add craue setting to enable sharing of origin url to Shaarli
Also fix the field name used in the query string and add it to baggy
theme

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-25 17:07:55 +01:00
773ac5b0f7 Merge pull request #3419 from NatJNP/patch1
Add Thai language
2017-11-25 12:29:53 +01:00
ceff312db8 Merge pull request #3401 from aaa2000/migration-initial
Add an initial doctrine migration
2017-11-25 12:28:41 +01:00
2020b4456c Add all file thai Language for translate 2017-11-24 02:53:01 +07:00
f818f64145 Merge pull request #3431 from wallabag/disable-site-credentials
Disable controller access if feature disabled
2017-11-22 15:11:25 +01:00
ef2b4041fb Disable controller access if feature disabled
If `restricted_access` is disabled, accessing `/site-credentials/` must be disabled.
2017-11-22 10:00:45 +01:00
f4e7a0df0e Fix phpcs 2017-11-21 22:07:37 +01:00
e36c85eb79 Fix travis fold 2017-11-21 21:35:17 +01:00
4c0ac1d10b Remove data sql files 2017-11-21 21:35:17 +01:00
18865cec86 Implements down migration 2017-11-21 21:35:17 +01:00
2680b0bc8c Fix installation command 2017-11-21 21:35:17 +01:00
2054740fdb Fold travis make prepare 2017-11-21 21:35:16 +01:00
18fb777b89 Add an initial migration 2017-11-21 21:35:16 +01:00
d3d0defabc Merge pull request #3398 from wallabag/issue-1735
Replace ant with Makefile
2017-11-21 15:12:48 +01:00
95b7d92ea5 Merge pull request #3425 from wallabag/add-setting-for-headers
Added internal setting to enable/disable headers storage
2017-11-21 13:26:24 +01:00
fb258aeef0 Merge pull request #3426 from wallabag/fix-migration-3373
Fix MySQL issue on mig from #3373
2017-11-21 11:03:39 +01:00
709e21a3f4 Define storeArticleHeaders false by default
Fix tests which must use `$storeArticleHeaders`.
Fix CS
2017-11-21 10:37:36 +01:00
64a5a6cfc5 CS 2017-11-21 10:30:35 +01:00
b3d85e69e9 Fix MySQL issue on mig from #3373
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-20 22:39:33 +01:00
f4f7994c40 Merge pull request #3346 from Kdecherf/origin-property
Add originUrl property to Entry
2017-11-20 21:10:33 +01:00
16b1939827 Merge pull request #3423 from wallabag/composer
composer: update dependency versions to reduce memory footprint
2017-11-20 19:51:03 +01:00
8a21985474 Added internal setting to enable/disable headers storage 2017-11-20 18:47:48 +01:00
b495929c0d composer: update dependency versions to reduce memory footprint
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 21:00:27 +01:00
eae8138b33 Fix phpcs
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:26:13 +01:00
65152fcb89 Improve EntryRestControllerTest for origin_url
Ensure that origin_url is initially null
Ensure patching entry with origin_url=''
Ensure patching entry with origin_url=null

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
97444566db Update EntryControllerTest to handle origin_url
Set an origin_url in testEditUpdate
Test origin_url deletion in testEditRemoveOriginUrl

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
ecf41ab3fa Replace hardcoded 'Provided by' string with i18n string
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
3b771f51a6 Improve origin_url field description and translations
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
8425f5cc3d Form: move url and origin_url to UrlType 2017-11-19 15:02:11 +01:00
6de4cd35b5 Add support of originUrl field in baggy entry view 2017-11-19 15:02:11 +01:00
00f2368f7a Add some tests for OriginUrl in EntryRestController
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
3198ea9682 Handle original_url querystring in Shaarli sharing link
This feature needs at least shaarli-plugin-via 0.2 from
https://github.com/Kdecherf/shaarli-plugin-via to work.

Shaarli will silently ignore this parameter if this plugin is missing.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
f0f162b8d2 Add support of originUrl field in material entry view
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
e50e45d6fa Twig: add removeSchemeAndWww filter
This twig filter removes scheme (only http and https are supported) and
pass the result to removeWww filter to also remove 'www.' at the
beginning of an url.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
03b020eb20 Entry: handle originUrl in edit form, update translations
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
e0ef1a1c8b Add originUrl property to Entry, handle that in EntryRestController, handle migration
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 15:02:11 +01:00
e585dde46c Merge pull request #3422 from wallabag/simpleue-2
Jump to Simpleue 2.0
2017-11-19 13:53:13 +01:00
8bde7de1ee Replace ant with Makefile
Fixes #1735

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-19 12:33:21 +01:00
f6988b5aa3 Merge pull request #3421 from comradekingu/patch-2
Spelling: diaspora, e-mail, moved ?, URL, sharing
2017-11-19 11:31:46 +01:00
00d66d39fc Merge pull request #3420 from comradekingu/patch-1
Spelling: Two-factor for wallabag connection
2017-11-19 11:31:26 +01:00
c8ac32cf17 Jump to Simpleue 2.0
The 1.3.0 tag is introducing BC so we jump to the 2.0
2017-11-18 16:28:54 +01:00
2c437e930c "for the public wallabag demo", paywalled websites, diaspora* 2017-11-18 04:55:33 +01:00
3c6b00dc28 Spelling: diaspora, e-mail, moved ?, URL, sharing 2017-11-18 04:52:28 +01:00
13e677648c Spelling: Two-factor for wallabag connection 2017-11-18 04:39:52 +01:00
d0c596461b Add CraueConfigBundle.th.yml 2017-11-18 01:27:51 +07:00
2a4a861b34 Merge pull request #3412 from aaa2000/fix-tests
Fix the tests
2017-11-12 11:33:18 +01:00
cc79712738 Fix phpcs 2017-11-11 23:55:13 +01:00
d81bf605af Fix tests 2017-11-11 23:37:57 +01:00
f39cfa4690 Merge pull request #3404 from wallabag/issue-2424
material: replace card activator with article link on card preview
2017-11-07 13:59:47 +01:00
2f510787e7 material: replace card activator with article link on card preview
Fixes #2424

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-06 20:49:41 +01:00
8abb6c1321 Merge pull request #3397 from wallabag/issue-1871
material: disable editing of entry url input when submitting new url
2017-11-06 20:43:48 +01:00
46ee68ea48 Update assets for #3397 2017-11-05 13:20:50 +01:00
3d46eeeb33 material: disable editing of entry url input when submitting new url
Fixes #1871

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-11-05 13:14:47 +01:00
b0f9e52b7e Merge pull request #3387 from Kdecherf/fix-assets-23
Fix assets for 2.3
2017-11-02 15:49:37 +02:00
dccec95401 Merge pull request #3399 from aaa2000/editorconfig-makefile
Update .editorconfig for makefile
2017-11-02 10:21:10 +02:00
5872cd191c Update .editorconfig for makefile 2017-11-01 14:47:06 +01:00
c20327fc72 Merge pull request #3395 from wallabag/issue-3393
views/config: fix overlaying drop down menu
2017-11-01 11:12:44 +01:00
8801764583 views/config: fix overlaying drop down menu
Fixes #3393
2017-10-31 23:16:15 +01:00
494b47f299 Merge pull request #3392 from mart-e/add-title-page-epub
add the title of article on the epub export
2017-10-31 15:10:41 +02:00
15a6402f75 Properly run php-cs-fixer 2017-10-28 20:16:43 +02:00
385e651684 php-cs-fixer
php bin/php-cs-fixer fix src/Wallabag/CoreBundle/Helper/EntriesExport.php
2017-10-28 17:17:22 +02:00
c779373f2c Set the title in a separated chapter
Set the export option on the same page, same as done in producePdf
Move the ToC at the end of the book so the title page is the first one
2017-10-28 14:49:14 +02:00
a6e9ad0b7d add a title page
The first page of the book is the title
2017-10-28 10:45:37 +02:00
efbbfe0135 Updating .gitignore
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-24 00:20:56 +02:00
0b3ab03782 Removing web/bundles/wallabagcore and adding prod assets in web/wallassets
baggy.css, baggy.js, material.css, material.js and public.js are seen as
new files, something changed in these files.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-24 00:19:00 +02:00
9ff628ca56 webpack & views: replace bundles/wallabagcore with wallassets
This change will prevent composer from removing wallabagcore assets when
installing assets.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-24 00:15:52 +02:00
1953a87293 Merge pull request #3011 from wallabag/2.3
wallabag 2.3.0
2017-10-23 11:09:17 +02:00
702f2d67d6 Merge pull request #3385 from wallabag/prepare-23
Prepare wallabag 2.3.0
2017-10-20 15:43:13 +02:00
b4da3ee8e5 Prepare wallabag 2.3.0 2017-10-20 14:17:37 +02:00
8a30241dc5 Merge pull request #3384 from wallabag/mruminski-patch-1
Update messages.pl.yml
2017-10-19 15:07:43 +02:00
3828f525e1 Update messages.pl.yml
add polish translation for export footer_template
2017-10-19 13:07:24 +02:00
1c5081cdc5 Merge pull request #3373 from wallabag/change-readingtime-notnull
Changed reading_time field to prevent null values
2017-10-18 11:33:30 +02:00
91f9bacf73 Merge pull request #3362 from sviande/fix_3361_api_warning
Fix #3361 check type for tags in entry repository
2017-10-18 11:16:50 +02:00
7f5d03a98d Merge pull request #3383 from Kdecherf/fix-webpack-and-login
Fix webpack and login screen
2017-10-16 09:02:47 +02:00
3f29386cb7 Update prod assets
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-16 00:07:12 +02:00
7a1e1247cb webpack: handle _global img folder
Fixes missing image files after composer cleaning assets

Source of requireAll(): https://stackoverflow.com/a/30652110

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-16 00:01:52 +02:00
ef7f187fa8 Fix non-centered login form
Fixes #3343

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-10-16 00:01:52 +02:00
3930201003 Merge pull request #3382 from nclsHart/replace-kernel-rootdir
Replace kernel.root_dir by kernel.project_dir
2017-10-15 09:24:32 +02:00
64f4112cae Merge pull request #3381 from nclsHart/webserverbundle
Enable WebServerBundle in dev environment
2017-10-15 09:23:31 +02:00
9ca069a6fe Replace kernel.root_dir by kernel.project_dir
kernel.root_dir and Kernel::getRootDir() are deprecated since Symfony 3.3.
See https://symfony.com/blog/new-in-symfony-3-3-a-simpler-way-to-get-the-project-root-directory and https://github.com/symfony/symfony/blob/3.3/UPGRADE-3.3.md#httpkernel for more information.
2017-10-14 00:32:56 +02:00
3c9fbb4e32 Enable WebServerBundle in dev environment
Since #3376, the web server console commands were not available.
2017-10-13 23:04:16 +02:00
0978bd849e Fix #3361 Entry Rest controller getEntries cast tags params to string 2017-10-13 10:28:05 +02:00
abce2f05dd Fixed @Kdecherf's review 2017-10-13 10:11:24 +02:00
705d3c38dc CS 2017-10-13 09:35:44 +02:00
88bac4a33e Changed reading_time field to prevent null values 2017-10-13 09:35:44 +02:00
bb86dc6486 CS 2017-10-12 07:38:27 +02:00
d03b72f405 Fix #3361 add test 2017-10-12 07:38:27 +02:00
fafdf17117 Fix #3361 check type for tags in entry repository
Check is $tags is a string before explode
2017-10-12 07:38:27 +02:00
f44a927530 Merge pull request #3372 from wallabag/translate-export-page
Translated first page of exported article
2017-10-11 14:12:49 +02:00
9dd67fa342 CS 2017-10-11 10:43:36 +02:00
8f187e280f Fixed @j0k3r's review 2017-10-11 10:43:19 +02:00
dc7fa8dfc6 Fixed @tcitworld's review 2017-10-11 10:43:19 +02:00
b1428a1cf8 Translated first page of exported article 2017-10-11 10:43:19 +02:00
d8dc7372ab Merge pull request #3376 from wallabag/symfony-3.3
Symfony 3.3
2017-10-11 09:55:03 +02:00
21bdbb2d5e Merge pull request #3378 from wallabag/2.3-ru
Add Russian language
2017-10-10 12:22:22 +02:00
4bea44da92 update Russian language 2017-10-10 10:48:38 +02:00
ef5fcdee20 add Russian language 2017-10-10 10:48:29 +02:00
28af2989ec Add Russian language in CoreBundle Resources and CraueConfigBundle 2017-10-10 10:47:48 +02:00
f645d371ce Fix MondeDiplo https url 2017-10-10 10:20:57 +02:00
3ef055ced3 CS 2017-10-09 16:47:15 +02:00
f40c88eb1f Jump to Symfony 3.3 & update others deps
Also update tests urls
2017-10-09 16:45:12 +02:00
ed5e175c20 Merge pull request #3347 from Kdecherf/entry-stats
Entry view: update .stats margins and color
2017-09-16 13:01:33 +02:00
79ea33c9d3 Entry view: update .stats margins and color
Decreasing margin of .stats, increasing vertical margin of .stats li,
increasing right margin of material icons and reducing contrast of
material icons.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-09-09 21:35:19 +02:00
23246a5da6 Merge pull request #3345 from wallabag/Quent-in-patch-1
Update messages.oc.yml
2017-09-09 18:57:50 +02:00
f764407daf Update messages.oc.yml 2017-09-09 18:23:59 +02:00
061fca8c6e Merge pull request #3340 from Kdecherf/fix-webpack
Fix webpack error on comments
2017-09-07 07:17:05 +02:00
f6d042f56d Merge pull request #3309 from wallabag/fix-multiple-tag-search
Multiple tag search, which was broken from API
2017-09-07 07:16:26 +02:00
9c4a7388da Remove unused function
Introduce after the rebase I guess
2017-09-06 22:58:35 +02:00
33264c2d02 Fix tests 2017-09-06 22:49:16 +02:00
7c04b7396a Multiple tag search was broken from API
First, the setParameter() were done on the same parameter which in fact
just duplicated the condition in the SQL query (like `where t.label =
'test' and t.label = 'test'`.

Changed the parameter doesn't help because the query was then wrong.

Changing the way to match associated tags for an entry and it worked.
2017-09-06 22:49:15 +02:00
e317a5ab60 Fix webpack error on comments
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-09-06 22:42:23 +02:00
78b36d4dbe Merge pull request #3332 from nclsHart/better-txt-export
Better entry txt export using html2text
2017-09-06 15:08:12 +02:00
b9c26b6330 Merge pull request #3337 from strobeltobias/patch-1
Add missing quotation marks and small fixes (2)
2017-09-04 12:09:26 +02:00
e85657fb10 Update messages.de.yml 2017-09-04 11:17:26 +02:00
f3e688207d Merge pull request #3333 from Quent-in/2.3
Update OC
2017-09-03 20:26:16 +02:00
3af5d41759 Merge pull request #3139 from Kdecherf/2502-tag-case
Ignore tag's case
2017-09-03 20:25:15 +02:00
9c4d1eb56a Merge pull request #3338 from strobeltobias/patch-2
Translate missing strings, add quotation marks
2017-09-03 20:24:41 +02:00
bcb10aeef8 Update to comply with suggested changes 2017-09-03 15:15:38 +02:00
973392cc48 Translate missing strings, add quotation marks 2017-09-01 23:15:18 +02:00
6c2a56458b Add missing quotation marks and small fixes (2) 2017-09-01 23:01:57 +02:00
442147d923 Update wallabag_user.oc.yml 2017-08-30 20:10:58 +02:00
a09136d2d2 Update CraueConfigBundle.oc.yml 2017-08-30 20:09:16 +02:00
de4bbe4968 Update validators.oc.yml 2017-08-30 20:06:34 +02:00
9f33293b7e Update 2017-08-30 20:01:11 +02:00
119e6c5edb Merge pull request #3330 from franek/set-starred-date
Add starred_at field which is set when an entry is starred
2017-08-30 13:53:49 +02:00
854616ac6d Merge pull request #3294 from wallabag/export-tag-null
Empty currentTag should be null
2017-08-30 13:51:20 +02:00
7b4f66881d php-cs-fixer on DoctrineMigrations/Version20170719231144
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-08-27 16:59:02 +02:00
e437ad810b Fix tests
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-08-27 16:51:23 +02:00
bd164a75c4 Add migration to change case of tags
This migration does not support SQLite as long as this engine does not
support Unicode in LOWER().

This migration starts by retrieving the list of lowercase tags which
need to be migrated. Then it retrieves the list of tags for each tags
from the previous step in order to migrate entries. It handles deletion
of empty tags. At the end the migration makes a full scan to update the
label of all remaining tags.

WARNING: THIS MIGRATION IS IRREVERSIBLE.

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-08-27 16:51:23 +02:00
7036d91fe7 Tag: render tags case-insensitive by storing them in lowercase
Fixes #2502

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-08-27 16:51:23 +02:00
c660878388 better entry txt export using html2text 2017-08-27 00:04:21 +02:00
a991c46eed Set a starred_at field when an entry is starred.
This date is used to sort starred entries.

Can not use Entry::timestamps method otherwise starred_at will be updated each time entry is updated.
Add an updateStar method into Entry class
A migration script has been added in order to set starred_at field.
2017-08-25 21:19:47 +02:00
2490f61dca Merge remote-tracking branch 'origin/master' into 2.3 2017-08-22 11:22:47 +02:00
54171dd796 Merge pull request #3326 from nclsHart/reload-entry-command
Add reload entry command
2017-08-22 11:21:04 +02:00
dbf1188c5b rename getAllEntriesIdAndUrl into findAllEntriesIdAndUrlByUserId 2017-08-22 10:42:54 +02:00
215409a8b2 rename getAllEntriesId into findAllEntriesIdByUserId 2017-08-22 10:41:28 +02:00
511f1ce1e8 Add reload entry command 2017-08-21 10:45:48 +02:00
d83d25dade Merge pull request #3323 from egilli/fix-export-link-with-baggy
Fix export links in baggy theme
2017-08-14 17:45:16 +02:00
aa29fc4ec6 Fix export links in baggy theme 2017-08-13 18:03:32 +02:00
73b3d449b1 Merge pull request #3322 from braco/patch-1
Update Readme with crucial information
2017-08-12 09:32:51 +02:00
d0804524a1 Update Readme with crucial information 2017-08-10 14:54:58 -04:00
4d2758dfa0 Merge pull request #3319 from Quent-in/2.3
Translation : OC small changes
2017-08-10 10:13:09 +02:00
0d7d472c91 Small change
Apostrophe par erreur, et "aller À votre compte" et non "sur", pas choquant mais mieux je pense en OC.
2017-08-09 18:40:19 +02:00
86ecd2b543 Merge pull request #3314 from nclsHart/fix-3313
Reduce number of queries on tag list
2017-08-08 19:48:47 +02:00
aff1dd4ff1 Merge pull request #3317 from wallabag/mruminski-patch-1
Update messages.pl.yml
2017-08-08 19:38:43 +02:00
e86ee7fd1e Update messages.pl.yml
add polish translation for credentials
2017-08-08 15:45:44 +02:00
935e9fffb4 Reduce number of queries on tag list 2017-08-06 23:02:32 +02:00
f11a3cf21c Merge pull request #3312 from Quent-in/2.3
Occitan language updates
2017-08-06 15:39:04 +02:00
1aa5b75804 Correction apostrophe encadrée par simples apostrophes 2017-08-05 20:20:18 +02:00
efeaadcf9d Correction indent. L538
Correction indentation suite rapport Travis
2017-08-05 19:48:45 +02:00
fccc3a2e07 Merge pull request #3311 from nclsHart/makefile-webpack
Fix make build by replacing grunt with webpack
2017-08-05 19:19:09 +02:00
162740b798 Update
2FA : choix des occitanophones interrogés : autentificacion en dos temps.
+ fautes de frappes
2017-08-05 15:19:34 +02:00
86de3eb766 Update OC: correction fautes de frappe 2017-08-05 15:14:34 +02:00
5942d358b7 Update with new strings
L538 : not quite sure about the number of space.
2017-08-05 14:58:15 +02:00
a4fcb2e5c6 Update registration using API 2017-08-05 14:46:33 +02:00
5385fda8ab Fix make build by replacing grunt with webpack 2017-08-05 00:21:05 +02:00
8b5bef48d5 Merge pull request #3301 from nclsHart/list-user-command
Add list users command
2017-08-02 07:25:02 +02:00
f7a4b44136 add search argument and limit option to list users command 2017-07-31 23:20:41 +02:00
af31cfed76 Add list user command 2017-07-30 22:04:29 +02:00
882da5c5eb Merge pull request #3297 from nclsHart/commands-better-rendering
Better rendering for all core commands
2017-07-30 08:31:04 +02:00
4fc7eba349 Merge pull request #3298 from nclsHart/fix-namespace-phpdoc
Fix some namespaces and phpdoc
2017-07-30 08:27:39 +02:00
e492f8da13 Merge pull request #3299 from nclsHart/missing-method-prepare-entry
Add missing abstract method prepareEntry in BrowserImport
2017-07-30 08:10:50 +02:00
fe312015d2 Add missing abstract method prepareEntry in BrowserImport 2017-07-29 22:59:11 +02:00
52b84c11a5 Fix some namespaces and phpdoc 2017-07-29 22:51:50 +02:00
e1b33efb3d Better rendering for all core commands 2017-07-29 11:09:02 +02:00
d69a66a58e Merge pull request #3290 from nclsHart/fix-3019
Add a dedicated title for all entries page
2017-07-29 09:34:29 +02:00
bde23a44f8 Empty currentTag should be null
And when a parameter is null, it won't appear in the url like `?tag=`.
2017-07-28 08:07:11 +02:00
233eb91be4 Merge pull request #3291 from nclsHart/show-user-io
Better rendering for show user command using symfony style
2017-07-28 07:38:15 +02:00
e56f82142a Merge pull request #3292 from nclsHart/remove-getdoctrine
Remove unused method getDoctrine in several commands
2017-07-28 07:36:27 +02:00
6f9aba78a7 Merge pull request #3293 from nclsHart/remove-unused-use
Remove unused use statement in install command
2017-07-28 07:35:48 +02:00
04f19537e7 Remove unused use statement in install command 2017-07-27 23:51:01 +02:00
a19e212f43 Remove unused method getDoctrine in several commands 2017-07-27 23:44:12 +02:00
d58199f362 Better rendering for show user command using symfony style 2017-07-27 23:34:57 +02:00
383215866f add a dedicated title for all entries page 2017-07-27 23:08:08 +02:00
839edf32cc Merge pull request #3280 from Simounet/fix/2.3-date
Fix updatePublishedAt on already parsed article's date
2017-07-25 16:54:43 +02:00
35c1f1376c Merge pull request #3284 from wallabag/travis-7.2
Testing on PHP 7.2
2017-07-24 17:38:41 +02:00
ff9f89fd23 Add a test for updatePublishedAt
To avoid error when a content is re-submitted and it previously add a
published date.

Also, fix the `testPostSameEntry`
2017-07-24 17:07:47 +02:00
b236d3f627 Fix updatePublishedAt on already parsed article's date 2017-07-24 16:39:07 +02:00
9ab45e6813 Testing on PHP 7.2 2017-07-24 15:48:53 +02:00
ea127a401b Merge pull request #3283 from wallabag/fix-language-validation
Put the final URL in data test
2017-07-24 13:54:01 +02:00
459374022f CS 2017-07-24 11:52:43 +02:00
c6c45673af Put the final URL in data test 2017-07-24 11:13:53 +02:00
f39152ad6e Merge pull request #3266 from egilli/export-domain-as-author
Use the article publisher as author for exported files
2017-07-11 09:21:49 +02:00
c7fcca533d Merge pull request #3270 from wallabag/do-not-allow-html-api
Disallow html for API templating formats
2017-07-11 07:30:30 +02:00
9aa11176b8 Merge pull request #3264 from wallabag/trait-timestamps
Add EntityTimestampsTrait to handle dates
2017-07-11 07:30:08 +02:00
eeabca8090 Make updateAuthor code simpler to read 2017-07-10 10:08:20 +02:00
337e807297 Merge pull request #3267 from wallabag/revert-client-credentials
Revert client_credentials grant types
2017-07-09 21:22:28 +02:00
c57f69d967 Use the article publisher as author for export
When exporting an entry, use the publishedBy field as author name for
epub, mobi and pdf formats. Fallback to domain name if empty.
2017-07-09 18:33:14 +02:00
2e6239bb9f Disallow html for templating formats
Using html template format will then put the html format in the allowed list for the api doc which we don’t want since the api doesn’t response for html format.
2017-07-09 10:07:14 +02:00
07320a2bd2 Use the article domain as author for export files
When exporting an entry, use the domain name as author name for epub,
mobi and pdf formats, instead of 'wallabag'.
Change the author from array to string, because for now, there is always
only one author.
2017-07-08 19:53:43 +02:00
2e5b2fa808 Revert client_credentials grant types 2017-07-08 19:28:12 +02:00
927c9e796f Add EntityTimestampsTrait to handle dates
Refactorize timestamps() method to avoid re-writing it on each entity
2017-07-06 09:01:51 +02:00
b5d7eb148c Merge pull request #3256 from wallabag/fix-patch
Fix PATCH method
2017-07-05 15:00:24 +02:00
896f981ff5 Merge pull request #3257 from wallabag/fix-mapping-entities
Fixed mapping entities
2017-07-03 17:15:45 +02:00
c18a2476b6 CS 2017-07-03 13:56:39 +02:00
d0ec2ddd23 Fix validateAndSetPreviewPicture
Which wasn't covered by a test!
2017-07-03 13:45:04 +02:00
a05b61159e Fix PATCH method
The PATCH method for the entry should only update what user sent to us and not the whole entry as it was before.
Also, sending tags when patching an entry will now remove all current tags & assocatied new ones.
2017-07-03 13:45:04 +02:00
e50d7d31c0 CS 2017-07-03 13:40:47 +02:00
9114615adc Fixed mapping entities
There were this error in the console:

> The association Wallabag\CoreBundle\Entity\SiteCredential#user refers to the inverse side field Wallabag\UserBundle\Entity\User#site_credentials which does not exist.
2017-07-03 13:40:47 +02:00
71e1cbc8eb Merge pull request #3258 from wallabag/cs-fixer
Add a real configuration for CS-Fixer
2017-07-03 13:39:54 +02:00
38520658ad Fix tests 2017-07-03 07:30:54 +02:00
f808b01692 Add a real configuration for CS-Fixer 2017-07-01 09:52:38 +02:00
822c877949 Merge pull request #3245 from wallabag/fix-bc
Avoid BC on exists endpoint
2017-06-29 11:17:58 +02:00
331e5b0261 CS 2017-06-28 09:18:22 +02:00
39ffaba323 Return null instead of false 2017-06-28 08:15:06 +02:00
42708d1121 Merge remote-tracking branch 'origin/master' into 2.3 2017-06-26 10:05:48 +02:00
53e1892eb6 Merge pull request #3237 from matteocoder/master
Revised messages.it.yml file
2017-06-26 10:00:35 +02:00
559cbfdc2f Fixed broken lines and added new lines
In addition to fixing broken lines, I've also added a couple of lines from recent PRs.
2017-06-24 11:06:09 +02:00
18696f77fd Avoid BC on exists endpoint 2017-06-23 08:30:23 +02:00
29714661b1 Merge pull request #3204 from wallabag/better-export-page
Better public sharing page
2017-06-22 15:34:46 +02:00
151f45db0e Don't load js for nothing in prod 2017-06-22 14:55:49 +02:00
77255d6688 Add css on share public page 2017-06-22 12:15:24 +02:00
6b1b148d65 Add share.scss file
Still needs to include it in the twig template
2017-06-22 12:13:22 +02:00
789c46821d Fix linter issue on webpack config files 2017-06-22 12:13:22 +02:00
38dd2def20 add 🇮🇹 shared_by_wallabag string translated by @matteocoder 2017-06-22 12:13:22 +02:00
5642d1a150 adjust 🇩🇪 shared_by_wallabag string to include user info 2017-06-22 12:13:22 +02:00
77c5140bed Better export page
I’ve increase the width of the page 900px, 600px looks too small for me. Should we use something like 90% instead?
2017-06-22 12:13:22 +02:00
9416053bfc Merge pull request #3241 from wallabag/fix-qr-code-trans
Fix translations on QR code instructions
2017-06-22 10:26:41 +02:00
d0702f9fbd Merge pull request #3227 from wallabag/oauth-client-credentials
Add client_credentials oAuth2 auth method
2017-06-22 10:00:23 +02:00
1adab57426 Add 🇮🇹 translation 2017-06-22 09:12:57 +02:00
8c3d7875b2 Update polish
add missing translation
2017-06-22 09:12:57 +02:00
e2a038d653 Fix translations on QR code instructions 2017-06-22 09:12:57 +02:00
8c68acff2a Merge pull request #3207 from wallabag/tag-rss
Add RSS for tags
2017-06-21 14:51:46 +02:00
bd40f1af88 Add all entries RSS feed and put links on tag page itself and baggy too
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-21 12:02:04 +02:00
ebf2d92327 Fix typo 2017-06-21 11:44:36 +02:00
8c59809432 add rss icon
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-21 11:44:36 +02:00
11b8695663 Fix tests 2017-06-21 11:44:35 +02:00
03ce43d466 Fix getContainer in command 2017-06-21 11:44:35 +02:00
18c38dffc6 Add RSS tags feeds 2017-06-21 11:44:35 +02:00
25203e5081 User existing service instead of getDoctrine 2017-06-21 11:44:35 +02:00
80784b782b Merge pull request #2683 from wallabag/credentials-in-db
Store credentials in DB
2017-06-20 16:40:48 +02:00
f44dba22fc Get rid of masked value in listing 2017-06-20 16:03:39 +02:00
bead8b42da Fix reviews
Encrypt username too
Redirect to list after saving credentials
Fix typos

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-20 16:03:39 +02:00
906424c1b6 Crypt site credential password 2017-06-20 16:03:35 +02:00
9de9f1e5ce Add a live test for restricted article
It is not aimed to test if we can get the full article (since we aren't using real login/password)
but mostly to test the full work (with authentication, etc.)

Do not clean fixtured to avoid SQLite to re-use id for entry tag relation 😓
2017-06-20 16:03:20 +02:00
fd7fde9515 Force sequence creation for postgresql 2017-06-20 16:03:20 +02:00
b8427f22f0 Add menu access to site credentials CRUD 2017-06-20 16:03:14 +02:00
5a9bc00726 Retrieve username/password from database
Inject the current user & the repo to retrieve username/password from the database
2017-06-20 16:03:13 +02:00
fc6d92c63d Update route & user verification 2017-06-20 16:03:13 +02:00
f92fcb53ca Add CRUD for site credentials 2017-06-20 16:03:08 +02:00
604cca1f42 Merge pull request #3215 from wallabag/fix-3192
Empty preview pictures and language return null
2017-06-20 06:43:59 +02:00
fbb39b61bd Merge pull request #1 from matteocoder/matteocoder-messages.it
revised messages.it
2017-06-17 13:42:50 +02:00
508f248676 revised messages.it 2017-06-17 13:42:28 +02:00
7e271553fe Merge pull request #3229 from wallabag/fix-mobile-view
Fix mobile view and update asset deps
2017-06-15 09:56:39 +02:00
f99ebec0f2 Fix mobile view and update asset deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-15 07:58:12 +02:00
caa0b1765b Add client_credentials oAuth2 auth method
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-14 17:30:12 +02:00
f93a3109a5 Merge pull request #3220 from wallabag/remove-padding
Removed padding on entry view
2017-06-13 17:54:06 +02:00
6cc1d32454 Updated production files 2017-06-13 17:07:44 +02:00
dfd821dcfb Removed padding on entry view 2017-06-13 16:52:14 +02:00
4dc9fb705f Merge pull request #3213 from wallabag/fix-internal-settings-form
Fixed internal settings form
2017-06-13 10:24:47 +02:00
41d45c6122 Fix empty language and preview pics 2017-06-12 16:46:33 +02:00
b662c65e57 Fixed internal settings form 2017-06-12 10:44:08 +02:00
977ac0a1d6 Merge pull request #3208 from wallabag/is-public
Add ability to filter public entries & use it in the API
2017-06-12 10:26:01 +02:00
d9da186fb8 CS 2017-06-10 16:08:24 +02:00
a9c6577f0c Few fixes 2017-06-10 15:37:25 +02:00
1112e54772 Add public filter/field in the API
Listing entries can now be filtered by “public”.
Creating or patching an entry can now set is to public or remove the public.
Entry response now include “is_public” boolean field
2017-06-10 15:31:57 +02:00
e8911f7c09 Add isPublic filter on entries 2017-06-10 15:00:52 +02:00
873f6b8e03 Merge remote-tracking branch 'origin/master' into 2.3 2017-06-10 14:41:30 +02:00
f6d45eca76 Merge pull request #3206 from wallabag/mruminski-patch-1
Update validators.pl.yml
2017-06-10 13:17:20 +02:00
de9445cd25 Merge pull request #3203 from wallabag/fix-tag-count-baggy
Fix tags count in tags list on baggy
2017-06-10 13:16:10 +02:00
a3477df5c9 Merge pull request #3202 from pVesian/master
Config label improvement #3199
2017-06-10 13:14:42 +02:00
8da86b3f93 Update validators.pl.yml
add "quote_length_too_high" translation
2017-06-10 12:40:40 +02:00
679aaf0836 Merge pull request #3173 from wallabag/domain-name-param
remove craueconfig domain name setting and add a proper one in parame…
2017-06-10 11:36:03 +02:00
3fd6790893 Update translations 2017-06-10 11:29:56 +02:00
a9b984feee Fix tags count in tags list on baggy 2017-06-10 11:21:47 +02:00
a899399989 Merge pull request #3192 from wallabag/validate-content-fields
Validate language & preview picture fields
2017-06-09 13:51:26 +02:00
491371a051 Config label improvement #3199 2017-06-09 12:11:48 +02:00
1f7018e1fe Cleanup test
Looks like we didn't ALWAYS get a value for language from 20minutes.
Ahem.
2017-06-09 11:52:41 +02:00
80e49ba7b0 Convert - to _ in language
Mostly to increase language supports
2017-06-09 11:42:09 +02:00
42f3bb2c63 Use Locale instead of Language 2017-06-09 11:28:04 +02:00
5c762616c3 Merge pull request #3195 from wallabag/authentication-error
Log an error level message when user auth fail
2017-06-09 11:05:34 +02:00
1a94252831 Promote https 2017-06-09 10:07:27 +02:00
f81a34e379 Use a listener to catch auth failure 2017-06-09 09:45:43 +02:00
fa1c9d7cc7 CS 2017-06-08 22:52:26 +02:00
e9056dd96f Fix test
de_DE is not valid language.
Zataz doesn’t send a valid language in their content (they use `fr-FR`).
2017-06-08 22:51:30 +02:00
63f9f22fa3 Log an error level message when user auth fail
When a user login using the form we know log an error level information with information about the user:
- username used
- IP
- User agent

For example:

> Authentication failure for user "eza", from IP "127.0.0.1", with UA: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36".

It’ll allows server admin using fail2ban to configure it to block these people if they generate too much failure authentication.
2017-06-08 22:24:49 +02:00
be54dfe4e6 CS 2017-06-08 21:56:20 +02:00
0d349ea670 Validate language & preview picture fields
Instead of saving the value of each field right into the content without any validation, it seems better to validate them.
This might sounds obvious now we say that.
2017-06-08 21:51:46 +02:00
80f4d85ac9 Review 2017-06-08 19:15:33 +02:00
3f474025d8 Merge pull request #3187 from wallabag/api-client-credentials
Create (and return) a client after creating a new user using the API
2017-06-08 17:24:49 +02:00
a8d3fe50df Add ability to name the client 2017-06-08 14:25:44 +02:00
2da8f071cf Merge pull request #3189 from wallabag/add-discourse
Added link to community in issue template
2017-06-08 14:02:12 +02:00
b0f323c976 Added link to community in issue template 2017-06-08 13:34:14 +02:00
eb570e49c8 CS 2017-06-07 23:31:14 +02:00
0c00e52516 Create a client when creating a user using the api
While creating a new user using the API, we also create a new client for the current user.
So the app which just create the user can use its newly created client to configure the app.

That new client is only return after creating the user.
When calling the endpoint /api/user to get user information, the new client information won’t be return.
2017-06-07 23:23:28 +02:00
7bb3aa3177 Merge pull request #3093 from aaa2000/annotation-error-on-save
Displays an error with an annotation with a too long quote
2017-06-07 16:30:27 +02:00
c0d756f67d Merge pull request #3181 from wallabag/api-content-patch
Add ability to patch an entry with more fields
2017-06-07 15:40:59 +02:00
db0c48af36 Refactorize the way to save an Entry in the API 2017-06-07 15:07:55 +02:00
4e4a5b534f Merge pull request #3184 from wallabag/better-way-image-extension
Use an alternative way to detect images
2017-06-07 13:41:25 +02:00
a3f16a5685 Merge pull request #3179 from wallabag/show-user-command
Show user command
2017-06-07 09:40:56 +02:00
c406cef5b6 Fix postgresql migration 2017-06-07 00:12:20 +02:00
c07ec4b682 Merge remote-tracking branch 'origin/master' into 2.3 2017-06-06 20:15:21 +02:00
e48b238a3e fix tests 2017-06-06 16:18:25 +02:00
d6c4c484c4 add migration 2017-06-06 16:04:51 +02:00
be9d693e74 remove craueconfig domain name setting and add a proper one in parameters 2017-06-06 15:36:21 +02:00
6ed2627bb3 Merge pull request #3177 from wallabag/api-create-user-update
API user creation behing a toggle
2017-06-06 15:25:05 +02:00
9fe87bc2e2 Merge pull request #3165 from wallabag/it-translation-update
Update Italian translation
2017-06-06 11:44:18 +02:00
577c0b6dd8 Use an alternative way to detect image
When parsing content to retrieve images to save locally, we only check for the content-type of the image response.
In some case, that value is empty.
Now we’re also checking for the first few bytes of the content as an alternative to detect if it’s an image wallabag can handle.
We might get higher image supports using that alternative method.
2017-06-05 22:54:02 +02:00
0d8ecb82a3 Fix review
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-04 17:57:40 +02:00
2c3e148b00 Displays an error with an annotation with a too long quote
Fix #2762
2017-06-04 11:38:29 +02:00
438329be46 Merge pull request #3180 from wallabag/mruminski-patch-1
Update PL translation
2017-06-02 21:02:07 +02:00
645291e8fe Add ability to patch an entry with more fields
Like when we create an entry, we can now patch an entry with new fields:
- content
- language
- preview_picture
- published_at
- authors
2017-06-02 20:52:49 +02:00
a1e6187406 Return 201 on user creation 2017-06-02 20:03:25 +02:00
d0f7b0cc60 Update PL transation
add missing translation
2017-06-02 19:35:25 +02:00
d143fa243d Add show user command
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-06-02 16:53:03 +02:00
044079967b Add 🇮🇹 translation 2017-06-02 11:45:45 +02:00
bf7f0cb5a3 Use a dedicated file for wallabag config 2017-06-02 11:33:11 +02:00
1b9cd91782 Add translation 2017-06-02 11:32:38 +02:00
426bb453d2 API user creation behing a toggle
I've added a toggle feature (in internal settings) so that user api creation can be disabled while form registration still can be enabled.
Also, the /api/user endpoint shouldn't require authentication. Even if we check the authentication when sending a GET request, to retrieve current user information.

I've moved all the internal settings definition to config to avoid duplicated place to define them.
I don't know why we didn't did that earlier.
2017-06-02 11:32:38 +02:00
a687c8d915 Merge pull request #2708 from jcharaoui/import-disablecontentupdate
Import disableContentUpdate
2017-06-02 11:26:37 +02:00
d06a1ebdfb Update messages.it.yml 2017-06-02 09:17:45 +02:00
14b8a7c950 Merge pull request #3176 from wallabag/fix-image-download
Replace images with & in url
2017-06-02 09:12:11 +02:00
9bf7752f73 CS 2017-06-01 22:58:38 +02:00
fcad69a427 Replace images with &
Images with `&` in the path weren’t well replaced because they might be with `&amp;` in the html instead.

Replacing `&` with `&amp;` fix the problem.
2017-06-01 22:50:33 +02:00
f5924e9547 Fix option attributes 2017-06-01 15:44:36 +02:00
5901516805 Merge pull request #3171 from wallabag/drop-fucking-sqlite
Defined MySQL as the default rdbms for wallabag
2017-06-01 14:46:01 +02:00
701d3066fb We don't need that getter 2017-06-01 12:46:07 +02:00
ec97072152 No need to catch that Exception 2017-06-01 11:45:02 +02:00
6acadf8e98 Rewrote code & fix tests 2017-06-01 11:31:45 +02:00
5d03e2d1a5 Merge pull request #3172 from wallabag/more-scruti
More Scrutinizer issues fixed
2017-06-01 10:29:32 +02:00
843182c7cf CS 2017-06-01 09:52:09 +02:00
d5c2cc54b5 Fix tests 2017-06-01 09:49:15 +02:00
432a24f502 CS 2017-06-01 09:48:14 +02:00
704803e182 Replace Wallabag v1 error strings with v2 strings 2017-06-01 09:48:14 +02:00
d0e9b3d640 Add disableContentUpdate import option
This commit also decouples the "import" and "update" functions inside
ContentProxy. If a content array is available, it must be passed to the
new importEntry method.
2017-06-01 09:48:14 +02:00
1c5da417e4 Put default fetching error title in global config 2017-06-01 09:43:01 +02:00
7aba665e48 Avoid returning objects passed by reference.
Objects are always passed by reference, so it doesn't make sense to
return an object which is passed by reference as it will always be the
same object. This change makes the code a bit more readable.
2017-06-01 09:43:01 +02:00
3a6af6c580 fixup! Set the right variable type 2017-06-01 09:36:01 +02:00
10bf812a9e Both parameter wasn't used in the function, removing them 2017-06-01 09:30:38 +02:00
c3f7a2ca70 Set the right variable type 2017-06-01 09:30:20 +02:00
53da8ad844 Page parameter was never used in the function
It could have been used if we set the current page inside PreparePagerForEntries.
But we did that in each controller because we can have an OutOfRangeCurrentPageException
2017-06-01 09:29:18 +02:00
ec42e697ea Changed default database name 2017-06-01 09:17:05 +02:00
2a0eec07a5 Merge pull request #3137 from aaa2000/isolated-tests
Isolated tests
2017-06-01 07:58:17 +02:00
46825cfffb Fixed @tcitworld 's review 2017-05-31 22:50:18 +02:00
7d5e84fec1 Defined MySQL as the default rdbms for wallabag 2017-05-31 22:36:21 +02:00
2e05858e1a Updated 🇮🇹 translations
Thank you @matteocoder
2017-05-31 22:20:44 +02:00
757ec837be Merge pull request #3077 from wallabag/add-tags-list-view
Added tags on list view
2017-05-31 21:18:14 +02:00
84b041e87f Reduced border-radius for tags 2017-05-31 20:31:35 +02:00
ec8e7ffad4 Merge pull request #3106 from wallabag/api-content
Allow other fields to be send using API
2017-05-31 17:26:05 +02:00
7ab5eb9508 Isolated tests
Use https://github.com/dmaicher/doctrine-test-bundle to have test isolation.
2017-05-31 16:03:54 +02:00
91775f36fe Add some flex magic
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-31 14:34:46 +02:00
4368a27152 PR has been merged in graby 2017-05-31 14:00:15 +02:00
695af58857 Fix tests following rebase 2017-05-31 14:00:15 +02:00
38a04dee34 CS 2017-05-31 14:00:15 +02:00
f0378b4d7c Forced date can now be a timestamp too
Add adding more tests for forced content
2017-05-31 14:00:15 +02:00
9e349f08a6 Improve docs 2017-05-31 14:00:15 +02:00
0d6cfb884c Remove htmlawed and use graby instead
Instead of using htmlawed (which is already used in graby) use graby directly (which require some refacto on graby side).
Still needs some tests.
2017-05-31 14:00:15 +02:00
cf05a1ae34 Reduce imported entries
Down from 2.2 minutes to 1.39 minutes
2017-05-31 14:00:15 +02:00
74a75f7d43 Use graby ContentExtractor to clean html
It might be better to re-use some graby functionalities to clean html instead of building a new system.
2017-05-31 14:00:15 +02:00
fb436e8ca0 Add support for authors 2017-05-31 13:59:45 +02:00
e668a8124c Allow other fields to be send using API
Entry API can now have these new fields:
- content
- language
- preview_picture
- published_at

Re-use the ContentProxy to be able to do the same using the web UI (in the future).
htmLawed is used to clean stuff from content, I hope it’ll be enough to avoid security breach.

Lower content validation when we want to update an entry with content already defined. Before, language & content_type were required. If there weren’t provided, we re-fetched the content using graby. I think these fields aren’t required for an entry to be created. So I removed them.
Which means some import from the v1 export won’t be re-fetched since they provide content, url & title.

Also, remove liberation link from Readability import to avoid overlaping import (from wallabag v1, which had the same link)
2017-05-31 13:59:45 +02:00
812c980fa5 Fixed tags display on grid view 2017-05-31 13:26:29 +02:00
4423b88c5b Merge pull request #3168 from wallabag/instapaper-tags-import
Add support for tag in Instapaper import
2017-05-31 12:32:09 +02:00
d61fd8be4f Merge pull request #3138 from Kdecherf/2835-tags
Ignore ActionMarkAsRead when removing tag from entry
2017-05-31 11:48:42 +02:00
3f8578ded3 Merge pull request #3161 from wallabag/scrutinizer-2.3
Fix some Scrutinizer issues
2017-05-31 11:46:41 +02:00
31485bddb9 Ensure retrieved data are fresh 2017-05-31 11:11:02 +02:00
bad7df8c00 CS & improve tags assertions 2017-05-31 10:38:15 +02:00
7a8ed3cee1 Add support for tag in Instapaper import 2017-05-31 10:38:00 +02:00
7aa5607f29 Merge pull request #3143 from wallabag/fix-wllbg2-import
Fixed is_starred for wallabag v2 import
2017-05-31 09:08:34 +02:00
d716495f6c Merge pull request #3167 from wallabag/doc-github-template
Fix link in Github template
2017-05-31 09:06:21 +02:00
78de00e831 Fix link in Github template 2017-05-31 07:12:55 +02:00
5dbf3f2326 TagController: ignore ActionMarkAsRead when removing tag from entry
Fixes #2835

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-05-31 00:36:46 +02:00
047fdc767a Add tests 2017-05-30 20:27:44 +02:00
2150576d86 Merge pull request #3065 from wallabag/api-creation-endpoint
Register through API
2017-05-30 15:26:11 +02:00
ff24cf9c1d Update 🇮🇹 translation 2017-05-30 14:06:38 +02:00
4ec53ab74c CS 2017-05-30 13:01:25 +02:00
26650fdbf8 Use a better way to set input for command
Actually use the correct to way handle that

http://symfony.com/doc/current/components/console/helpers/questionhelper.html#testing-a-command-that-expects-input
2017-05-30 12:47:28 +02:00
5fe65baee5 Fix some Scrutinizer issues 2017-05-30 11:39:15 +02:00
d181bd7285 Merge remote-tracking branch 'origin/master' into 2.3 2017-05-30 09:59:06 +02:00
fe6461e4aa Avoid side effect on other tests 2017-05-30 09:57:57 +02:00
21242a02a1 Added tags on list view 2017-05-30 09:51:49 +02:00
7a90ca6171 Merge pull request #3147 from wallabag/delete-confirm
Add some deletion confirmation to avoid mistake
2017-05-30 09:42:56 +02:00
7e8b90d1ed Merge pull request #3160 from wallabag/mruminski-patch-1
Update messages.pl.yml
2017-05-30 09:10:54 +02:00
d069bff4f6 Remove unknown validation_groups
The Profile validation_groups does not exist and then for validation to be skipped (like password length)
2017-05-30 08:04:11 +02:00
5709ecb368 Re-use NewUserType to validate registration
The only ugly things is how we handle error by generating the view and then parse the content to retrieve all errors…

Fix exposition fields in User entity
2017-05-30 07:56:01 +02:00
6eb463c4ab Update messages.pl.yml
add missing translation
2017-05-29 23:47:00 +02:00
2740fc525e update 🇩🇪 messages.de.yml 2017-05-29 21:10:00 +02:00
2251045901 WIP
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-29 10:16:23 +02:00
b788add087 Merge pull request #3153 from wallabag/content-proxy-refactor
Move Tags assigner to a separate file
2017-05-28 21:50:23 +02:00
de8d2a9005 CS
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-28 12:59:48 +02:00
5d3deafd3e CS
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-28 01:16:01 +02:00
6bc6fb1f60 Move Tags assigner to a separate file
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-27 22:08:14 +02:00
fa0f5ee12b Add some deletion confirmation to avoid mistake 2017-05-24 21:33:37 +02:00
4c707d087b Fixed is_starred for wallabag v2 import 2017-05-24 15:36:41 +02:00
35941d57ee Merge pull request #3145 from wallabag/fix-so
Fix SO tests
2017-05-24 14:33:58 +02:00
82a590fddd Merge pull request #3146 from DamienCassou/fix-doc-url
Fix documentation URL for "How can I help to fix that?"
2017-05-24 13:54:57 +02:00
ac1509a66b Fix documentation URL for "How can I help to fix that?" 2017-05-24 12:57:46 +02:00
216dee4d8a Fix SO tests
SO switched to http yesterday
2017-05-24 12:13:25 +02:00
e869ee7d7f Switch back to latest guzzle-site-authenticator 2017-05-24 07:29:46 +02:00
9d521dbfee Merge pull request #3133 from wallabag/testing-travis-failure
Let's play !
2017-05-19 13:58:37 +02:00
be085c3d18 Ensure download_images_enabled is disabled
Even if the tests fail, that config must stay disabled after the test.
Otherwise it might timeout on other test (because it'll try to save all other images)
2017-05-19 13:10:46 +02:00
1f155b29db Fold migrations & fixtures command on Travis 2017-05-19 13:10:44 +02:00
4ab0d25f65 Merge remote-tracking branch 'origin/master' into 2.3 2017-05-19 11:25:19 +02:00
f87e6547e8 Merge pull request #3130 from X-dark/master
unify Download/Export wording.
2017-05-19 10:07:01 +02:00
5f82fc23a7 modify key name as well 2017-05-18 17:17:21 +02:00
1dd76ac650 unify Download/Export wording.
This fixes #2967
2017-05-18 15:23:48 +02:00
21f78f4d4b Update of the oc version of CoreBundle
I hope I didn't break everything with the ' and ".
2017-05-18 10:44:15 +02:00
6830d92558 Merge pull request #3125 from wallabag/prepare-222
Prepare wallabag 2.2.3
2017-05-17 17:48:51 +02:00
c0e8e6037b Prepare wallabag 2.2.3 2017-05-17 17:21:14 +02:00
e893e33e9b Merge pull request #3122 from wallabag/delete-doc
Removed embedded documentation
2017-05-17 11:57:28 +02:00
afc9875f28 Merge pull request #3117 from wallabag/fix-doc
Fixed documentation URL
2017-05-17 10:40:35 +02:00
6b94ee51b8 Fixed documentation URL 2017-05-17 09:03:04 +02:00
4e88a6a651 Merge pull request #3124 from wallabag/lock-guzzle-auth
Lock guzzle-site-authenticator to avoid errors
2017-05-17 09:02:22 +02:00
8581fcae90 Lock guzzle-site-authenticator to avoid error 2017-05-16 23:34:42 +02:00
092ed4a787 Merge pull request #3123 from X-dark/master
reorder contrib strings in about page
2017-05-16 14:50:25 +02:00
8544c7e4b6 reorder contrib strings in about page
this fixes #2891
2017-05-16 14:17:13 +02:00
322c270b65 Removed embedded documentation 2017-05-16 13:09:40 +02:00
d168fff7a9 Merge pull request #3120 from aaa2000/fix-delete-annotation-user
Fix delete annotation when username is defined
2017-05-15 11:42:05 +02:00
ef204e45b0 Merge pull request #3113 from wallabag/upgrade-craue
Upgraded CraueConfigBundle to 2.0
2017-05-15 09:05:08 +02:00
60c522899b Fix delete annotation when username is defined
When an user set his name in "Config" > "User Information", he
can't delete or update an annotation

Fix #2382
2017-05-14 11:38:02 +02:00
3b792787d7 Upgraded CraueConfigBundle to 2.0 2017-05-12 16:39:47 +02:00
75045d6462 Merge pull request #3110 from wallabag/add-logger-matching-rules
Added logger when we match Tagging rules
2017-05-12 16:17:48 +02:00
a1146b6551 Added tests on logs records 2017-05-12 15:01:18 +02:00
3554364bed Fixed tests 2017-05-12 13:47:53 +02:00
0a033767db Added logger when we match Tagging rules 2017-05-12 13:13:19 +02:00
06568b15bb Merge pull request #3108 from wallabag/store-headers
Added headers field in Entry
2017-05-11 17:39:21 +02:00
1517d5772d Replaced json_array with array
And fixed failing test due to @j0k3r :trollface:
2017-05-11 14:59:53 +02:00
dda6a6addc Added headers field in Entry 2017-05-11 14:18:21 +02:00
7987816d1e Merge pull request #3104 from wallabag/migration-username-length
Added migration to change length for user fields
2017-05-10 11:24:59 +02:00
09edbff336 Merge pull request #3101 from wallabag/credentials-new-extrafields
Skip auth when no credentials are found
2017-05-10 10:58:19 +02:00
8c3158eba8 Added migration to change length for user fields 2017-05-10 10:46:32 +02:00
150d9ec1dc Handle empty configuration 2017-05-10 10:37:53 +02:00
147cae223b Update composer.json 2017-05-10 10:23:08 +02:00
91ba9a5975 Merge pull request #3095 from aaa2000/api-error-on-fail-fetch-content
Create a new entry via API even when its content can't be retrieved
2017-05-10 09:38:55 +02:00
e538c85ba7 Merge pull request #3103 from wallabag/api-delete-tag-query
Retrieve tag / tags value from query or request
2017-05-10 09:32:27 +02:00
58f5a39ce6 Merge pull request #3102 from wallabag/cache-yarn
Cache yarn cache in Travis
2017-05-10 08:53:04 +02:00
a9357a8311 Remove the created entry to avoid side effects on other tests 2017-05-09 23:19:24 +02:00
1594a79fc5 Retrieve tag / tags value from query or request
It allows to request to delete a tag using query string instead of body parameter (which seems to be the standard).
Instead of breaking the previous behavior, I used a generic way to retrieve parameter (which looks into request attributes, query parameters and request parameters)
2017-05-09 23:15:25 +02:00
94b232bbb8 Skip auth when no credentials are found
If we can’t find a credential for the current host, even if it required login, we won’t add them and website will be fetched without any login.
2017-05-09 22:53:42 +02:00
c44d13f9ea Cache yarn cache in Travis 2017-05-09 22:53:01 +02:00
0eb8220204 Merge pull request #2751 from bdunogier/2.2-guzzle_subscribers_improvement
Improved Guzzle subscribers extensibility
2017-05-09 17:10:03 +02:00
a2ae05a61c Merge pull request #3076 from wallabag/hotfix/2979
Disable negative numbers in filters
2017-05-09 13:56:44 +02:00
54c2d164a3 Merge remote-tracking branch 'origin/master' into 2.3 2017-05-09 13:55:31 +02:00
1b1647175d Add some tests 2017-05-09 12:12:23 +02:00
b28c5430ef Merge pull request #3022 from wallabag/webpack
Adds Webpack support and remove Grunt
2017-05-09 11:43:48 +02:00
d047530dc0 CS 2017-05-09 11:17:09 +02:00
efac66cb56 icon mail a bit better
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-09 11:04:02 +02:00
c829b06ed8 Merge pull request #3097 from wallabag/update-license
Update graby* licenses
2017-05-09 09:47:20 +02:00
9d7d549712 Update graby* licenses 2017-05-09 09:22:50 +02:00
832fbd94c0 Merge pull request #3096 from aaa2000/fix-api-entries-pagination-with-perpage
Fix API pagination is broken if perPage is custom value
2017-05-09 09:12:15 +02:00
b60a666df2 Fix API pagination is broken if perPage is custom value
Fix #2720
2017-05-08 16:27:16 +02:00
08f29ae7b6 Create a new entry via API even when its content can't be retrieved
Fix #2988
2017-05-08 14:57:25 +02:00
ff5cdbdc95 fix 3-dots menu position
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-08 12:32:20 +02:00
4c6ee89c9c Fix review again
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-07 17:13:08 +02:00
34806fab1b Fix reviews
Signed-off-by: Aline <chetta.aline@gmail.com>
2017-05-07 15:07:50 +02:00
f2beee5185 Merge pull request #3090 from aaa2000/translate-login-page-error
Translate error message in login page
2017-05-07 14:00:41 +02:00
f3c300e485 Translate error message in login page
Fix #2933
2017-05-06 22:21:04 +02:00
43f81a62e9 Merge pull request #3088 from wallabag/execute-migrations-after-install
Added migrations execution after fresh install
2017-05-05 17:42:42 +02:00
ab742ee9c6 Merge pull request #2920 from wallabag/cleanduplicatescommand
Clean Duplicates Command
2017-05-05 17:42:18 +02:00
4eeb29ff78 Fixed test 2017-05-05 15:20:58 +02:00
7d2d1d6859 Added migrations execution after fresh install 2017-05-05 15:14:58 +02:00
89f108b45a Fixed @j0k3r review 2017-05-05 14:54:03 +02:00
d09fe4d233 Added test for deduplication 2017-05-05 14:33:36 +02:00
6980304968 Merge pull request #3053 from wallabag/api-bulk-add
Added API endpoint to handle a list of URL
2017-05-05 13:56:34 +02:00
72db15ca5d Little refacto and send 400 on reaching urls limit 2017-05-05 12:05:50 +02:00
14f58edd80 fixed margin on sidebar menu 2017-05-05 09:19:56 +02:00
6603a9d649 Merge pull request #3082 from aaa2000/fix-form-errors-display
Fix display the form errors correctly
2017-05-05 07:01:28 +02:00
ab9eb5cdb7 Fix display the form errors correctly
Use `property_path` form option to map underscored form fields
to object properties

@see https://github.com/symfony/symfony/issues/9162#issuecomment-25431148

Fix #3067
2017-05-05 00:12:16 +02:00
662db41bae Changed parsing of login_extra_fields in guzzle auth 2017-05-04 21:45:06 +02:00
5b914b0422 Improved Guzzle subscribers extensibility
Allows 3rd parties to register new guzzle subscribers by adding extra calls to the http_client_factory service.
2017-05-04 21:44:34 +02:00
2003ffa97e Fix according to review 2017-05-04 17:44:42 +02:00
cebed9c01f Merge pull request #3080 from wallabag/use-username-to-import
Use username to import
2017-05-04 15:19:16 +02:00
18e1da6277 rebase
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-04 14:56:52 +02:00
4cea76b0cf Use npm script instead of direct webpack call
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-04 14:49:44 +02:00
42a2139b8f fix travis 2017-05-04 14:49:44 +02:00
17cc3aacb7 fix theme changes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-04 14:49:44 +02:00
e35f8439a7 add comment to config.yml to explain live reload feature 2017-05-04 14:49:44 +02:00
8655913ebf disable default dev server 2017-05-04 14:49:44 +02:00
64f81bc316 Adds Webpack support and removes the use for Grunt
Signed-off-by: Thomas Citharel <tcit@tcit.fr>

use scss

Signed-off-by: Thomas Citharel <tcit@tcit.fr>

fix build, add babel, fix annotations

fixes (and improvements !) for baggy

add live reload & environments & eslint & theme fixes
2017-05-04 14:49:44 +02:00
d1e5059ea0 Use username to import
Signed-off-by: Thomas Citharel <tcit@tcit.fr>

add docs

Signed-off-by: Thomas Citharel <tcit@tcit.fr>

use username as default

Signed-off-by: Thomas Citharel <tcit@tcit.fr>

rename user to username

typo

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-04 14:41:42 +02:00
6b76ae3d1f Merge pull request #3060 from wallabag/search-users
Search & paginate users
2017-05-04 14:35:14 +02:00
3b4502e0e6 Merge pull request #3079 from wallabag/update-doc
Fixed old links in documentation
2017-05-04 07:07:20 +02:00
79d8f0d459 Updated documentation version 2017-05-03 15:58:36 +02:00
56f9a60f49 Fixed old links in documentation 2017-05-03 15:54:56 +02:00
9c09c253fe Merge pull request #3047 from wallabag/add-notmatches-operator
Added notmatches operator for tagging rule
2017-05-03 11:53:01 +02:00
1267905d28 Disable negative numbers in filters 2017-05-03 11:08:56 +02:00
a162b1a99b Changed export test 2017-05-03 10:53:10 +02:00
dfa0822f19 Merge pull request #3075 from wallabag/disable-shortcuts-login
Disabled shortcuts on login/register page
2017-05-02 16:59:49 +02:00
0e6509c3d8 Merge pull request #3073 from wallabag/fix-sandwich
Fixed sandwich menu position in entry view (material theme)
2017-05-02 16:42:26 +02:00
a40029f9d6 Disabled shortcuts on login/register page 2017-05-02 16:21:06 +02:00
a7c8f54570 Merge pull request #3072 from wallabag/hotfix/3061
Small typo in documentation fix #3061
2017-05-02 15:46:45 +02:00
96e4398072 Fixed sandwich menu position in entry view (material theme) 2017-05-02 15:40:15 +02:00
b5b6877976 Merged list and search methods 2017-05-02 15:30:32 +02:00
d01dc5a81e rename index to list
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-02 15:28:39 +02:00
a2daa32d0c Fix tests
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-02 15:28:39 +02:00
50cfd8108b Add pagination
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-02 15:28:39 +02:00
c37515f880 Add filter to users management page
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-02 15:28:39 +02:00
0f26c285d4 Small typo in documentation fix #3061 2017-05-02 11:51:23 +02:00
e1d64050ad Merge remote-tracking branch 'origin/master' into 2.3 2017-05-01 22:15:46 +02:00
c613df0e25 Add docs for cli commands
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-01 13:30:00 +02:00
3d57d625f8 Add basic tests
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-05-01 13:04:31 +02:00
e2f3800ccb Add Clean Duplicates Command 2017-05-01 13:04:31 +02:00
efd351c98f Added limit 2017-05-01 09:26:12 +02:00
7fa844a349 Fix tests (for real this time) 2017-05-01 09:26:12 +02:00
719ba257d3 Fix tests 2017-05-01 09:26:12 +02:00
a7abcc7b7a Splitted the endpoint in two 2017-05-01 09:26:12 +02:00
1eca7831a6 Added API endpoint to handle a list of URL
By passing an array, you can add / delete URL in mass (bulk request)
2017-05-01 09:25:34 +02:00
3cbb0cc3ef Merge pull request #3055 from wallabag/api-bulk-add-tags
Added API endpoint to handle a list of URL and to add/delete tags
2017-05-01 09:04:41 +02:00
9579003045 Merge pull request #3066 from wallabag/ignore-tests-exported-files
Ignore tests exported files
2017-04-29 22:51:32 +02:00
d49cdfe2ef Ignore tests exported files 2017-04-29 19:41:14 +02:00
8ee18fdabc Merge pull request #3064 from gileri/master
Correct create_application en string
2017-04-29 15:43:42 +02:00
dcbebc17aa Fix tests 2017-04-29 12:58:39 +02:00
ef88b37eb5 Correct create_application en string 2017-04-29 12:30:12 +02:00
c5e04b0109 Merge pull request #3057 from raf64flo/patch-1
Use up-to-date Firefox extension and add F-Droid link for Android app.
2017-04-26 09:10:28 +02:00
e6ec001c6a Fix IT translation #3057 2017-04-25 16:52:02 +02:00
283aca210a Fix typos. Fix #3057 2017-04-25 15:52:51 +02:00
6f01c10c88 Fix documentation for DE/IT/FR language, even if not sure for ED/IT. Fix #3057. 2017-04-25 15:35:51 +02:00
b40c479a40 Remove 'fr' from Firefox extension URL 2017-04-25 15:17:08 +02:00
83bf04f09e Update Firefox extension and Android links
Use up-to-date Firefox extension and add F-Droid link for Android app.
2017-04-25 15:11:53 +02:00
138c352cd7 Merge pull request #3052 from shtrom/fix-relative-symlinks
Make symfony-assets-install use `relative` symlinks
2017-04-25 14:15:01 +02:00
80299ed282 Added endpoint to handle URL list to add/delete tags 2017-04-24 12:24:17 +02:00
d1fc590211 Added API endpoint to handle a list of URL and to add/delete tags 2017-04-24 11:12:41 +02:00
f972af3f5b Make symfony-assets-install use relative symlinks
This facilitates packaging, when installing in a different work PREFIX
than the final install location.

Signed-off-by: Olivier Mehani <shtrom@ssji.net>
2017-04-22 21:45:30 +10:00
b8acf672c0 Merge pull request #3048 from wallabag/remove-download-pictures
Cleaned craue_config_setting by removing useless download_pictures setting
2017-04-22 13:20:44 +02:00
a375fed7bf Fixed @j0k3r review 2017-04-22 13:14:34 +02:00
21d955f703 Cleaned craue_config_setting by removing useless download_pictures setting 2017-04-20 15:45:43 +02:00
fdd725f58c Added notmatches operator for tagging rule 2017-04-20 15:17:02 +02:00
64f1d8f77a Merge pull request #3024 from wallabag/store-date
Added publication date and author
2017-04-18 13:12:28 +02:00
c5ba478dc3 Merge pull request #3044 from wallabag/fos-user-2.0
Remove dev FOSUserBundle
2017-04-18 09:49:59 +02:00
177ef14c15 Remove dev FOSUserBundle 2017-04-18 08:08:26 +02:00
531828ca44 Merge pull request #3030 from wallabag/remove-isPublic-from-entry
Remove isPublic from Entry entity fix #2598
2017-04-14 14:56:26 +02:00
01736b5a2e Removed is_public in Entry edit form 2017-04-13 15:54:19 +02:00
15e4aea678 Remove isPublic from Entry entity fix #2598 2017-04-13 13:12:19 +02:00
3e7a843aa9 Merge branch 'master' into 2.3 2017-04-13 13:07:06 +02:00
e9c80c99bd Added test for multiple authors 2017-04-10 17:58:27 +02:00
3aa655e44a Fixed migrations 2017-04-10 09:26:08 +02:00
7b0b3622ab Added author of article 2017-04-09 15:24:51 +02:00
5e9009ce86 Added publication date 2017-04-05 22:22:52 +02:00
656395fde6 Merge pull request #3023 from mart-e/epub-notice-at-the-end
Add export notice at the end of the epub
2017-04-05 10:20:19 +02:00
1b70990b01 Add export notice at the end of the epub
The text "Produced by wallabag with PHPePub" is the first page of any epub.

On ebooks reader, it is common (e.g. kobo) to use the first page as the cover of
unread books, which makes it more difficult to differentiate the books.

Move the Notices chapter at the end of the book.
2017-04-05 09:24:48 +02:00
19122cf660 Merge pull request #3020 from wallabag/add-remove-archived-entries
Allow to remove all archived entries
2017-03-31 17:28:54 +02:00
13a592a128 Renamed methods 2017-03-31 17:03:08 +02:00
e682a70f88 Refactored code 2017-03-31 11:04:18 +02:00
9102851f59 Added delete button on Baggy theme 2017-03-31 10:53:23 +02:00
73f28afb19 Renamed countAllEntriesByUsername method 2017-03-31 10:46:47 +02:00
6da1aebc94 Allow to remove all archived entries
Since we still support fucking SQLite, we need to retrieve all tags & annotations for archived entries before deleting them.

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-03-31 10:46:05 +02:00
fa884b30ba Merge pull request #3021 from wallabag/rename-method
Rename method
2017-03-30 16:40:18 +02:00
5633b32f0a Merge pull request #3014 from wallabag/change-default-value-listmode
Changed default value for list mode (grid instead of list)
2017-03-30 16:12:11 +02:00
273b6f0658 Rename method from *username to *user
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2017-03-30 16:07:48 +02:00
548e608870 Merge pull request #3017 from Kdecherf/local-image-alpha
Save alpha channel when downloading PNG images
2017-03-30 14:45:24 +02:00
7a3260ae9e Save alpha channel when downloading PNG images
Fixes #2805

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-03-29 21:58:29 +02:00
1680c95c27 Changed default value for list mode (grid instead of list) 2017-03-29 14:43:47 +02:00
6f296a789c Merge pull request #3000 from cloudron-io/master
Add Cloudron as installation method
2017-03-29 14:18:55 +02:00
106e0160f2 Added 🇩🇪 translation for Cloudron 2017-03-29 14:16:04 +02:00
3ea184ffc0 Added 🇫🇷 and 🇮🇹 translations for Cloudron 2017-03-29 12:31:52 +02:00
f76bcf6705 Merge pull request #2999 from FrenchHope/master
Share articles to a scuttle / semantic scuttle instance
2017-03-28 15:19:42 +02:00
b5a5377af1 Added migration for Scuttle sharing 2017-03-28 14:20:14 +02:00
fb9f100e8f Scuttle sharing 2017-03-28 14:20:14 +02:00
7d1d961267 Merge remote-tracking branch 'origin/master' into 2.3 2017-03-28 14:07:42 +02:00
6ae579e43f Merge pull request #2861 from wallabag/2.3-droping-5.5
Dropping PHP 5.5
2017-03-28 13:18:17 +02:00
de0ab52a47 Updated requirements in documentation 2017-03-28 11:45:40 +02:00
90f95027a8 Merge pull request #2985 from etiess/patch-2
Update paywall.rst (more details and clear cache)
2017-03-23 13:56:55 +01:00
56f9adc431 Add Cloudron as installation method 2017-03-20 15:13:14 +01:00
7423ed4766 Merge pull request #2968 from chrido/master
remove language on html tag
2017-03-13 10:56:33 +01:00
3f5f303e7f Merge pull request #2971 from etiess/patch-3
Update paywall.rst (EN) with details + clear cache
2017-03-09 15:34:40 +01:00
cee28dc6d4 remove language on html-tag 2017-03-06 21:34:50 +01:00
8c565e3b73 Merge pull request #2954 from wallabag/update-version
Changed wallabag version
2017-03-02 14:43:04 +01:00
8ef1df8157 Changed wallabag version 2017-03-02 14:42:16 +01:00
0fe64f1fdd Merge pull request #2916 from wallabag/update-changelog
Updated CHANGELOG with latest changes
2017-03-02 14:40:22 +01:00
bae1f9dfba Updated CHANGELOG with latest changes 2017-03-02 14:22:17 +01:00
6c79aaf432 Merge pull request #2950 from wallabag/fix-symlinks
Fixed symlinks issue during release creation
2017-03-02 14:16:51 +01:00
1d13376df6 Fixed symlinks issue during release creation 2017-03-01 14:17:07 +01:00
71460a8ba5 Merge pull request #2926 from qtheuret/master
Add activation of 'rewrite' mod of Apache
2017-03-01 13:32:46 +01:00
e1cc8fd799 Merge pull request #2919 from wallabag/api-exists-returns-id
Api exists returns
2017-02-28 21:12:30 +01:00
3529ce35e4 Added german and italian translation 2017-02-28 21:10:24 +01:00
29969f854c Merge pull request #2932 from wallabag/mruminski-patch-1
Update Polish translation
2017-02-25 08:28:31 +01:00
78bce602cb Update Polish translation
add missing translation
2017-02-24 18:31:35 +01:00
85b4b6e0cd Merge pull request #2931 from wallabag/php-7.1
Use wallabag/tcpdf
2017-02-24 16:23:06 +01:00
5a73f94590 Use wallabag/tcpdf
It should restore the PHP 7.1 compatibility
2017-02-24 15:05:45 +01:00
ca9a83ee51 return id of article instead of true if entry exists 2017-02-24 11:31:31 +01:00
0a82d6e23c Activate 'rewrite' mod of Apache 2017-02-23 16:10:14 +01:00
a737f4b58e Ajout du mod 'rewrite' de Apache 2017-02-23 16:09:06 +01:00
5301d664d9 Update paywall.rst (EN) with details + clear cache 2017-02-23 08:54:33 +01:00
e316d4bd34 Update paywall.rst (more details and clear cache) 2017-02-22 11:49:45 +01:00
227a009da5 Merge pull request #2917 from ngosang/feature/es_translation_2
Update Spanish translation
2017-02-20 13:55:24 +01:00
ac47889928 Update Spanish translation 2017-02-20 12:21:02 +01:00
6914fdd8d8 Merge pull request #2915 from wallabag/import-drop-msg-user-null
Import: we now skip messages when user is null
2017-02-20 09:45:12 +01:00
b45b6b6707 Import: we now skip messages when user is null 2017-02-20 09:16:02 +01:00
48be826ea9 Merge pull request #2905 from nicofrand/patch-1
Alert that 2FA must be authorized in app/config/parameters.yml
2017-02-20 08:27:26 +01:00
b17cb92e9b Merge pull request #2913 from wallabag/add-wllbgit-readme
Added wallabag.it link in README
2017-02-20 08:05:58 +01:00
38fe541997 Alert that 2FA must be authorized in app/config/parameters.yml 2017-02-20 08:04:44 +01:00
bba94d7458 Merge pull request #2832 from Kdecherf/search-domain
Search by term: extend to entries url
2017-02-19 21:52:35 +01:00
b678d0f55c Added wallabag.it link in README 2017-02-18 15:04:57 +01:00
2b8f274b8a Merge pull request #2911 from wallabag/jlnostr-patch-1
Remove word repetition from german translation
2017-02-17 22:16:48 +01:00
5d858d21de Remove word repetition from german translation
see https://github.com/wallabag/wallabag/pull/2882#discussion_r101806434
2017-02-17 21:52:16 +01:00
628f9d31de Merge pull request #2908 from wallabag/move-it-documentatin
Moved 🇮🇹 documentation into it folder
2017-02-17 13:54:48 +01:00
9d8975f6b6 Moved 🇮🇹 documentation into it folder 2017-02-17 13:12:09 +01:00
2edc539581 Merge pull request #2830 from Kdecherf/striptags-title
Fix rendering of entry title in Twig views
2017-02-17 09:28:56 +01:00
2ac8e2c5b5 Merge pull request #2882 from wallabag/add-translations-doc-mobile-apps
Doc: translated mobile apps configuration in french
2017-02-17 09:28:21 +01:00
eac09b48b0 Search by term: extend to entries url
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-02-16 21:47:52 +01:00
9dd68dae77 Some changes to 🇩🇪 translation 2017-02-16 21:41:19 +01:00
aedd385e10 views: cosmetic in share links href
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-02-16 21:36:34 +01:00
6c1c433903 Merge pull request #2892 from ngosang/feature/es_translation
Update Spanish translation
2017-02-16 09:12:40 +01:00
8b42e75f68 add 🇩🇪 doc user/configuring_mobile 2017-02-15 17:13:14 +01:00
82749439ac Update Spanish translation 2017-02-15 15:41:06 +01:00
a92718dba2 Merge pull request #2875 from kgaut/patch-3
Doc - information about Apache 2.4
2017-02-14 22:14:51 +01:00
2414eb12c6 Merge pull request #2785 from matteocoder/patch-2
first_article.rst already inside articles.rst
2017-02-14 22:05:53 +01:00
f3c7e055f2 Merge pull request #2784 from matteocoder/patch-1
Doc: share.rst already integrated inside articles.rst
2017-02-14 21:37:27 +01:00
e04d656f5a first_article.rst already inside articles.rst
The file is a duplicate of a section already present in articles.rst
2017-02-14 20:57:22 +01:00
d60c38edf9 share.rst already integrated inside articles.rst
The share.rst file is just a duplicate of a section already present in another file.
2017-02-14 20:56:27 +01:00
7d1c19c021 Doc: translated mobile apps configuration in french 2017-02-14 20:45:08 +01:00
f17b89fadc Merge pull request #2878 from matteocoder/wallabag-docs-ita
Italian documentation added
2017-02-14 18:33:43 +01:00
eef47c0ead Merge pull request #2879 from matteocoder/matteocoder-patch-1
Fixed typo in "first_steps"
2017-02-14 17:16:14 +01:00
5601b4536c Italian documentation added
There are some missing links in various articles. Please let me know how I can fix this :)
2017-02-14 16:36:40 +01:00
6d1e97f564 Merge pull request #2860 from wallabag/docs-update-3rd-party-apps
docs 3rd party tools: update java wrapper, add cmd tool to add article
2017-02-14 15:40:29 +01:00
c772c473a1 docs: add 3rd party app wallabako for Kobo readers 2017-02-14 15:39:12 +01:00
0ae5297699 Doc - informations about Apache 2.4 2017-02-14 15:29:33 +01:00
5e4b9b2321 Merge pull request #2874 from kgaut/patch-2
Add informations about Apache 2.4
2017-02-14 15:11:08 +01:00
947ccd075c Add informations about Apache 2.4 2017-02-14 09:24:56 +01:00
4a953a250c Merge pull request #2869 from wallabag/log-restricted-access
Log restricted access value
2017-02-13 14:55:55 +01:00
7bf6b555f5 Log restricted access value
It might help to figure out if we have enabled it or not
2017-02-13 14:20:03 +01:00
4cb9e0aad1 Dropping PHP 5.5 2017-02-11 12:02:35 +01:00
8148675cb7 docs 3rd party tools: update java wrapper, add cmd tool to add article 2017-02-11 00:43:04 +01:00
abba55cdd6 Merge pull request #2846 from wallabag/mruminski-patch-1
fix misspells in polish translation
2017-02-06 17:29:31 +01:00
41ed68d5b0 fix misspells in polish translation 2017-02-06 15:38:33 +01:00
99cc170b0e Merge pull request #2842 from K-Phoen/update-rulerz
Update RulerZ
2017-02-06 09:20:28 +01:00
10caff9875 Merge pull request #2841 from Kdecherf/active-menu-search
Show active list in the left menu during search
2017-02-05 21:08:39 +01:00
177c5510ff Update RulerZ 2017-02-05 18:02:09 +01:00
7d9a67de14 Show active list in the left menu during search
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-02-05 15:19:52 +01:00
20da238413 Merge pull request #2788 from Zettt/master
Documentation on how to configure mobile apps to work with wallabag.it
2017-02-05 12:49:43 +01:00
664621955d Added configuration documentation for mobile apps 2017-02-05 12:48:30 +01:00
15a4d52833 Merge pull request #2839 from foxmask/master
scripts/update.sh: 18: scripts/update.sh: composer.phar: not found
2017-02-05 12:34:20 +01:00
5397d820fe Merge pull request #2838 from wallabag/Quent-in-patch-1
Update Oc version
2017-02-04 21:54:43 +01:00
6837c3989a Merge pull request #2840 from wallabag/fix-frameworkbundle
Restored correct version for framework-extra-bundle
2017-02-04 21:53:26 +01:00
7db1bdf1e4 Restored correct version for framework-extra-bundle
The bundle was fixed in latest version.
2017-02-04 18:26:16 +01:00
205c6f0c66 scripts/update.sh: 18: scripts/update.sh: composer.phar: not found
when composer.phar is not globally installed, we should add "./" in front of "composer.phar" to run it from the current folder.
2017-02-04 17:02:25 +01:00
289ce94bd8 Update Oc version
I'll be ready for next train
2017-02-04 15:21:13 +01:00
5b9cf67529 Merge pull request #2818 from Kdecherf/fix-search-bar
Fix nav-panel-search height
2017-02-03 09:04:33 +01:00
1bb7bdc8b3 Fix rendering of entry title in Twig views
This commit provides some improvements on the rendering of entry title
on entries list and entry views and refactors filter calls:
- Remove escape filter from apparent title, striptags is enough
- Move raw filter to the end of apparent title as it's ignored if not
  placed as the last filter
- Replace raw filter with e('html_attr') for title used in attributes,
  fixing possible issue and/or glitch
- Add striptags to entry.title used for link sharing to respect the
  apparent title

Fixes #2802

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-02-02 21:54:15 +01:00
8138fd390b Added minified CSS files 2017-02-02 21:48:59 +01:00
3cc0cc0ae7 Fix nav-panel-search height
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
2017-02-02 21:48:59 +01:00
8a098044bf Merge pull request #2831 from wallabag/Quent-in-patch-1
Update of CraueConfigBundle in Occitan
2017-02-02 17:11:40 +01:00
20fa5ca02a Update of CraueConfigBundle in Occitan 2017-02-02 16:29:28 +01:00
c7d05059ca Merge pull request #2824 from wallabag/simplify-strings
Renamed Developer section to API client management
2017-02-02 15:35:22 +01:00
d3ef28c092 Freezed sensio/framework-extra-bundle version 2017-02-02 14:39:17 +01:00
f217cf48d9 Merge pull request #2826 from wallabag/jlnostr-patch-1
Translate missing strings for de-DE.
2017-02-02 09:13:21 +01:00
ab5c68facc Merge pull request #2829 from wallabag/mruminski-patch-1
Update polish strings
2017-02-02 09:12:52 +01:00
51ca217d2e Update polish strings
update missing polish strings
2017-02-01 22:29:03 +01:00
f41b085c76 Translate missing strings for de-DE. 2017-02-01 22:06:04 +01:00
74ba949d7e Update german strings. 2017-02-01 21:29:59 +01:00
013f426d10 Renamed Developer section to API client management 2017-02-01 13:23:13 +01:00
d3a8322a64 Merge pull request #2816 from wallabag/add-details-update
Added details about upgrade from 2.1.x or 2.2.0
2017-01-31 14:09:51 +01:00
1a6e0725d3 Added details about upgrade from 2.1.x or 2.2.0 2017-01-31 12:53:22 +01:00
713f35bafd Merge pull request #2812 from wallabag/prepare-221
Prepare wallabag 2.2.1 🚀
2017-01-31 11:31:45 +01:00
4021c928be Prepare wallabag 2.2.1 🚀 2017-01-31 11:06:35 +01:00
38c73f9691 Merge pull request #2809 from wallabag/fix-22-migrations
Fixed duplicate entry for share_public in craue_setting_table
2017-01-31 11:03:58 +01:00
a5cd696b22 Added check in migration about uuid field 2017-01-30 21:21:49 +01:00
7a340375c3 Fixed duplicate entry for share_public in craue_setting_table 2017-01-30 16:22:03 +01:00
605f82d9c4 Fixed typo in "first_steps"
Changed "Pimi passi" to "Primi passi
2017-01-24 08:22:18 -05:00
668 changed files with 31244 additions and 146790 deletions

5
.babelrc Normal file
View File

@ -0,0 +1,5 @@
{
"presets": [
["env", {"modules": false}]
]
}

View File

@ -12,3 +12,6 @@ insert_final_newline = true
[*.{js,css}]
indent_style = space
indent_size = 2
[Makefile]
indent_style = tab

View File

@ -1,9 +1,9 @@
:warning: If your issue is about an error during fetching a link, please read: http://doc.wallabag.org/en/master/user/errors_during_fetching.html#how-can-i-help-to-fix-that
: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 http://gitter.im/wallabag/wallabag.
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

View File

@ -7,6 +7,7 @@
| Tests pass? | yes/no
| Documentation | yes/no
| Translation | yes/no
| CHANGELOG.md | yes/no
| Fixed tickets | #...
| License | MIT

12
.gitignore vendored
View File

@ -13,6 +13,7 @@
/bin/*
!/bin/console
!/bin/symfony_requirements
.php_cs.cache
# Parameters
/app/config/parameters.yml
@ -22,11 +23,11 @@
# Assets and user uploads
web/uploads/
!web/bundles
web/bundles/*
!web/bundles/wallabagcore
/web/bundles/*
!/web/bundles/.gitkeep
/web/assets/images/*
!web/assets/images/.gitkeep
/web/wallassets/*.dev.js
# Build
/app/build
@ -51,3 +52,8 @@ bin
app/Resources/build/
!/src/Wallabag/CoreBundle/Resources/public
/src/Wallabag/CoreBundle/Resources/public/*
# Test-generated files
admin-export.json
specialexport.json
/data/site-credentials-secret-key.txt

47
.php_cs Normal file
View 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__)
)
;

View File

@ -20,14 +20,14 @@ cache:
- vendor
- $HOME/.composer/cache
- node_modules
- $HOME/.cache/bower
- $HOME/.npm
- $HOME/.yarn-cache
php:
- 5.5
- 5.6
- 7.0
- 7.1
- 7.2
- nightly
node_js:
@ -44,7 +44,7 @@ matrix:
- php: 7.0
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run ASSETS=build DB=sqlite
allow_failures:
- php: 7.1
- php: 7.2
- php: nightly
# exclude v1 branches
@ -61,19 +61,26 @@ before_script:
- 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.7; fi;
- if [[ $ASSETS = build ]]; then npm install -g npm@latest; fi;
- if [[ $ASSETS = build ]]; then npm install; fi;
- 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 bash composer install -o --no-interaction --no-progress --prefer-dist
- ant prepare-$DB
- 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 src/ --verbose --dry-run ; 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 ./node_modules/grunt-cli/bin/grunt tests; fi;
- if [[ $ASSETS = build ]]; then yarn run build:prod; fi;

File diff suppressed because it is too large Load Diff

View File

@ -1,230 +0,0 @@
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
appDir: 'app/Resources/static',
buildDir: 'app/Resources/build',
modulesDir: 'node_modules',
releaseDir: 'web/bundles/wallabagcore',
postcss: {
material: {
options: {
processors: [
require('pixrem')(),
require('autoprefixer')({ browsers: 'last 2 versions' }),
require('cssnano')(),
],
},
src: '<%= buildDir %>/material.css',
dest: '<%= releaseDir %>/themes/material/css/style.min.css',
},
baggy: {
options: {
processors: [
require('pixrem')(),
require('autoprefixer')({ browsers: 'last 2 versions' }),
require('cssnano')(),
],
},
src: '<%= buildDir %>/baggy.css',
dest: '<%= releaseDir %>/themes/baggy/css/style.min.css',
},
},
concat: {
options: {
separator: ';',
},
cssMaterial: {
src: [
'node_modules/materialize-css/bin/materialize.css',
'<%= appDir %>/themes/material/css/*.css',
],
dest: '<%= buildDir %>/material.css',
},
cssBaggy: {
src: [
'<%= appDir %>/themes/baggy/css/*.css',
],
dest: '<%= buildDir %>/baggy.css',
},
},
browserify: {
dist: {
files: {
'<%= buildDir %>/material.browser.js': ['<%= appDir %>/themes/material/js/init.js'],
'<%= buildDir %>/baggy.browser.js': ['<%= appDir %>/themes/baggy/js/init.js']
}
},
options: {
sourceType: "module",
transform: [
["babelify", {
presets: ["es2015"]
}], ["browserify-shim", {
"jquery": {
"exports": "$"
},
"materialize": "materialize",
"jquery-ui": {
"depends": "jquery",
"exports": null
}
}]
],
browserifyOptions: {
browser: {
"jQuery": "./node_modules/jquery/dist/jquery.js",
"jquery.tinydot": "./node_modules/jquery.tinydot/src/jquery.tinydot.js",
"jquery.ui": "./node_modules/jquery-ui-browserify/dist/jquery-ui.js"
}
}
}
},
uglify: {
material: {
files: {
'<%= releaseDir %>/themes/material/js/material.min.js':
['<%= buildDir %>/material.browser.js'],
}
},
baggy: {
files: {
'<%= releaseDir %>/themes/baggy/js/baggy.min.js':
['<%= buildDir %>/baggy.browser.js'],
}
},
},
copy: {
pickerjs: {
expand: true,
cwd: '<%= modulesDir %>/pickadate/lib',
src: 'picker.js',
dest: '<%= buildDir %>',
},
annotator: {
expand: true,
cwd: '<%= modulesDir %>/annotator/pkg',
src: 'annotator.min.js',
dest: '<%= buildDir %>/themes/_global/js/',
},
baggyfonts: {
files: [
{
expand: true,
cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
src: 'IcoMoon-Free.ttf',
dest: '<%= releaseDir %>/themes/baggy/fonts/',
},
{
expand: true,
cwd: '<%= modulesDir %>/ptsans-npm-webfont/fonts',
src: 'ptsansbold.woff',
dest: '<%= releaseDir %>/themes/baggy/fonts/',
},
{
expand: true,
cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
dest: '<%= releaseDir %>/themes/baggy/fonts/',
},
],
},
materialfonts: {
files: [
{
expand: true,
overwrite: true,
cwd: '<%= modulesDir %>/icomoon-free-npm/Font',
src: 'IcoMoon-Free.ttf',
dest: '<%= releaseDir %>/themes/material/fonts',
},
{
expand: true,
overwrite: true,
cwd: '<%= modulesDir %>/roboto-fontface/fonts/Roboto',
src: '*',
dest: '<%= releaseDir %>/themes/material/font/roboto',
},
{
expand: true,
overwrite: true,
cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/',
src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'],
dest: '<%= releaseDir %>/themes/material/fonts/',
},
],
},
},
symlink: {
pics: {
files: [
{
expand: true,
overwrite: true,
cwd: '<%= appDir %>/themes/_global/',
src: 'img',
dest: '<%= releaseDir %>/themes/_global/',
},
],
},
},
clean: {
css: {
src: ['<%= buildDir %>/**/*.css'],
},
js: {
src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'],
},
all: {
src: ['./<%= buildDir %>'],
},
release: {
src: ['./<%= releaseDir %>/*'],
}
},
eslint: {
target: ['<%= appDir %>/themes/material/js/init.js', '<%= appDir %>/themes/baggy/js/init.js']
},
stylelint: {
target: ['<%= appDir %>/themes/material/css/*.css', '<%= appDir %>/themes/baggy/css/*.css']
},
watch: {
files: ['<%= appDir %>/**/*.css', '<%= appDir %>/**/*.js'],
tasks: ['css', 'js']
}
});
grunt.registerTask(
'fonts',
'Install fonts',
['copy:baggyfonts', 'copy:materialfonts']
);
grunt.registerTask(
'js',
'Build and install js files',
['clean:js', 'copy:pickerjs', 'browserify', 'uglify']
);
grunt.registerTask(
'default',
'Build and install everything',
['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'copy', 'symlink']
);
grunt.registerTask(
'css',
'Compiles the stylesheets.',
['clean:css', 'concat:cssMaterial', 'concat:cssBaggy', 'postcss']
);
grunt.registerTask(
'tests',
'Test css and js style conformity',
['eslint', 'stylelint', 'default']
),
grunt.loadNpmTasks('grunt-contrib-watch');
};

View File

@ -1,15 +1,13 @@
TMP_FOLDER=/tmp
RELEASE_FOLDER=wllbg-release
ifndef ENV
ENV=prod
endif
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/*
rm -rf var/cache/*
install: ## Install wallabag with the latest version
@sh scripts/install.sh $(ENV)
@ -23,11 +21,22 @@ dev: ## Install the latest dev version
run: ## Run the wallabag built-in server
@php bin/console server:run --env=$(ENV)
build: ## Run grunt
@grunt
build: ## Run webpack
@npm run build:$(ENV)
test: ## Launch wallabag testsuite
@ant prepare && bin/simple-phpunit -v
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
@ -35,11 +44,9 @@ ifndef VERSION
endif
@sh scripts/release.sh $(VERSION) $(TMP_FOLDER) $(RELEASE_FOLDER) $(ENV)
travis: ## Make some stuff for Travis-CI
deploy: ## Deploy wallabag
@bundle exec cap staging deploy
.PHONY: help clean install update build test release travis deploy run dev
.PHONY: help clean prepare install fixtures update build test release deploy run dev
.DEFAULT_GOAL := install

View File

@ -3,11 +3,13 @@
[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag)
# What is wallabag?
wallabag is a self hostable application allowing you to not miss any content anymore.
wallabag is a self-hostable PHP application allowing you to not miss any content anymore.
Click, save and read it when you can. It extracts content so that you can read it when you have time.
More information on our website: [wallabag.org](https://wallabag.org).
If you do not have your own server, consider [the wallabag.it hosting solution](https://wallabag.it).
![wallabag logo](https://raw.githubusercontent.com/wallabag/logo/master/_default/typo-horizontal/png/sm/logo-typo-horizontal-black-no-bg-no-border-sm.png)
# Install wallabag

View File

@ -8,8 +8,8 @@ During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE`.
#### Files to edit
- `app/config/config.yml` (`wallabag_core.version`)
- `CHANGELOG.md` (by using this command `github-changes -o wallabag -r wallabag -k YOURGITHUBTOKEN --only-pulls --use-commit-body --title Changelog --date-format YYYY/MM/DD --between-tags 2.0.0-alpha.0...master -n 2.1.3`. [github-changes is available here](https://github.com/lalitkapoor/github-changes))
- `app/config/wallabag.yml` (`wallabag_core.version`)
- `CHANGELOG.md`
#### Create release on GitHub
@ -47,7 +47,7 @@ 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 `http://wllbg.org/latest-v2-package` or `http://wllbg.org/latest-v2`)
- 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 wallabag.org website (downloads, releases and new blog post)

View File

@ -1,7 +1,7 @@
<?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\HttpKernel\Kernel;
class AppKernel extends Kernel
{
@ -48,28 +48,37 @@ class AppKernel extends Kernel
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
if ('test' === $this->getEnvironment()) {
$bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
}
}
return $bundles;
}
public function getRootDir()
{
return __DIR__;
}
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
return dirname(__DIR__) . '/var/logs';
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
$loader->load(function ($container) {
if ($container->getParameter('use_webpack_dev_server')) {
$container->loadFromExtension('framework', [
'assets' => [
'base_url' => 'http://localhost:8080/',
],
]);
}
});
}
}

View 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');
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added foreign keys for account resetting
* Added foreign keys for account resetting.
*/
class Version20160410190541 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -34,13 +29,21 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf($entryTable->hasColumn('uid'), 'It seems that you already played this migration.');
$this->skipIf($entryTable->hasColumn('uid') || $entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
$entryTable->addColumn('uid', 'string', [
'notnull' => false,
'length' => 23,
]);
$this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')");
$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')");
}
}
/**
@ -51,6 +54,11 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
$entryTable = $schema->getTable($this->getTable('entry'));
$entryTable->dropColumn('uid');
$this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'");
$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;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added name field on wallabag_oauth2_clients
* Added name field on wallabag_oauth2_clients.
*/
class Version20160812120952 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -35,7 +30,20 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
$this->skipIf($clientsTable->hasColumn('name'), 'It seems that you already played this migration.');
$clientsTable->addColumn('name', 'blob');
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');
}
}
/**
@ -44,6 +52,22 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
public function down(Schema $schema)
{
$clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
$clientsTable->dropColumn('name');
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;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added settings for RabbitMQ and Redis imports
* Added settings for RabbitMQ and Redis imports.
*/
class Version20160911214952 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -35,19 +30,19 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
$redis = $this->container
->get('doctrine.orm.default_entity_manager')
->getConnection()
->fetchArray('SELECT * FROM '.$this->getTable('craue_config_setting')." WHERE name = 'import_with_redis'");
->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')");
$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'");
->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->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.');
@ -58,7 +53,12 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
*/
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';");
$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;
}
}

View File

@ -8,7 +8,7 @@ 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 AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -37,7 +32,7 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
$this->skipIf($configTable->hasColumn('pocket_consumer_key'), 'It seems that you already played this migration.');
$configTable->addColumn('pocket_consumer_key', 'string', ['notnull' => false]);
$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';");
}
/**
@ -47,6 +42,11 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
{
$configTable = $schema->getTable($this->getTable('config'));
$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;
}
}

View File

@ -3,13 +3,13 @@
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;
use Doctrine\DBAL\Migrations\SkipMigrationException;
/**
* Added pocket_consumer_key field on wallabag_config
* Added pocket_consumer_key field on wallabag_config.
*/
class Version20161001072726 extends AbstractMigration implements ContainerAwareInterface
{
@ -23,17 +23,12 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
$this->skipIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
$this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
// remove all FK from entry_tag
switch ($this->connection->getDatabasePlatform()->getName()) {
@ -41,16 +36,15 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
$query = $this->connection->query("
SELECT CONSTRAINT_NAME
FROM information_schema.key_column_usage
WHERE TABLE_NAME = '".$this->getTable('entry_tag')."' AND CONSTRAINT_NAME LIKE 'FK_%'
AND TABLE_SCHEMA = '".$this->connection->getDatabase()."'"
WHERE TABLE_NAME = '" . $this->getTable('entry_tag') . "' AND CONSTRAINT_NAME LIKE 'FK_%'
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
);
$query->execute();
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;
case 'postgresql':
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
$query = $this->connection->query("
@ -60,19 +54,19 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
FROM pg_constraint c
JOIN pg_namespace n ON n.oid = c.connamespace
WHERE contype = 'f'
AND conrelid::regclass::text = '".$this->getTable('entry_tag')."'
AND conrelid::regclass::text = '" . $this->getTable('entry_tag') . "'
AND n.nspname = 'public';"
);
$query->execute();
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;
}
$this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_entry FOREIGN KEY (entry_id) REFERENCES '.$this->getTable('entry').' (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_tag FOREIGN KEY (tag_id) REFERENCES '.$this->getTable('tag').' (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' ADD CONSTRAINT FK_entry_tag_entry FOREIGN KEY (entry_id) REFERENCES ' . $this->getTable('entry') . ' (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE ' . $this->getTable('entry_tag') . ' ADD CONSTRAINT FK_entry_tag_tag FOREIGN KEY (tag_id) REFERENCES ' . $this->getTable('tag') . ' (id) ON DELETE CASCADE');
// remove entry FK from annotation
@ -81,18 +75,17 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
$query = $this->connection->query("
SELECT CONSTRAINT_NAME
FROM information_schema.key_column_usage
WHERE TABLE_NAME = '".$this->getTable('annotation')."'
WHERE TABLE_NAME = '" . $this->getTable('annotation') . "'
AND CONSTRAINT_NAME LIKE 'FK_%'
AND COLUMN_NAME = 'entry_id'
AND TABLE_SCHEMA = '".$this->connection->getDatabase()."'"
AND TABLE_SCHEMA = '" . $this->connection->getDatabase() . "'"
);
$query->execute();
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;
case 'postgresql':
// http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
$query = $this->connection->query("
@ -102,19 +95,19 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
FROM pg_constraint c
JOIN pg_namespace n ON n.oid = c.connamespace
WHERE contype = 'f'
AND conrelid::regclass::text = '".$this->getTable('annotation')."'
AND conrelid::regclass::text = '" . $this->getTable('annotation') . "'
AND n.nspname = 'public'
AND pg_get_constraintdef(c.oid) LIKE '%entry_id%';"
);
$query->execute();
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;
}
$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');
}
/**
@ -124,4 +117,9 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
{
throw new SkipMigrationException('Too complex ...');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ 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 AbstractMigration implements ContainerAwareInterface
{
@ -22,40 +22,35 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL');
$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
// http://stackoverflow.com/a/31474509/569101
$this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE confirmation_token confirmation_token VARCHAR(180) DEFAULT NULL;');
$this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE salt salt VARCHAR(180) NOT NULL;');
$this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE password password VARCHAR(180) NOT NULL;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE confirmation_token confirmation_token VARCHAR(180) DEFAULT NULL;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE salt salt VARCHAR(180) NOT NULL;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE password password VARCHAR(180) NOT NULL;');
$this->addSql('ALTER TABLE '.$this->getTable('annotation').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('entry').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('tag').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('user').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `text` `text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `quote` `quote` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CHANGE `text` `text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CHANGE `quote` `quote` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `title` `title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `content` `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE `title` `title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE `content` `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('tag').' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` 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;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE `name` `name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
}
/**
@ -63,23 +58,28 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
*/
public function down(Schema $schema)
{
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL');
$this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
$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('entry').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('tag').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('user').' 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('tag') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `text` `text` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `quote` `quote` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CHANGE `text` `text` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('annotation') . ' CHANGE `quote` `quote` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `title` `title` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `content` `content` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE `title` `title` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' CHANGE `content` `content` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE '.$this->getTable('tag').' CHANGE `label` `label` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
$this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` 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;');
$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;
}
}

View File

@ -8,7 +8,7 @@ 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
* Added user_id column on oauth2_clients to prevent users to delete API clients from other users.
*/
class Version20161024212538 extends AbstractMigration implements ContainerAwareInterface
{
@ -24,11 +24,6 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -60,8 +55,13 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
$clientsTable->dropColumn('user_id', 'integer');
if ($this->connection->getDatabasePlatform()->getName() != 'sqlite') {
if ('sqlite' !== $this->connection->getDatabasePlatform()->getName()) {
$clientsTable->removeForeignKey($this->constraintName);
}
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added the internal setting to enable/disable downloading pictures
* Added the internal setting to enable/disable downloading pictures.
*/
class Version20161031132655 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -35,11 +30,11 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
$images = $this->container
->get('doctrine.orm.default_entity_manager')
->getConnection()
->fetchArray('SELECT * FROM '.$this->getTable('craue_config_setting')." WHERE name = 'download_images_enabled'");
->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')");
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('download_images_enabled', 0, 'misc')");
}
/**
@ -47,6 +42,11 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
*/
public function down(Schema $schema)
{
$this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'download_images_enabled';");
$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;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added created_at index on entry table
* Added created_at index on entry table.
*/
class Version20161104073720 extends AbstractMigration implements ContainerAwareInterface
{
@ -24,11 +24,6 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -50,4 +45,9 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
$entryTable->dropIndex($this->indexName);
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added action_mark_as_read field on config table
* Added action_mark_as_read field on config table.
*/
class Version20161106113822 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20161106113822 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -53,4 +48,9 @@ class Version20161106113822 extends AbstractMigration implements ContainerAwareI
$configTable->dropColumn('action_mark_as_read');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added the internal setting to share articles to unmark.it
* Added the internal setting to share articles to unmark.it.
*/
class Version20161117071626 extends AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -35,19 +30,19 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
$share = $this->container
->get('doctrine.orm.default_entity_manager')
->getConnection()
->fetchArray('SELECT * FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_unmark'");
->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')");
$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'");
->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->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.');
@ -58,7 +53,12 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
*/
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';");
$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;
}
}

View File

@ -22,11 +22,6 @@ class Version20161118134328 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -53,4 +48,9 @@ class Version20161118134328 extends AbstractMigration implements ContainerAwareI
$entryTable->dropColumn('http_status');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -22,11 +22,6 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -35,11 +30,11 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
$access = $this->container
->get('doctrine.orm.default_entity_manager')
->getConnection()
->fetchArray('SELECT * FROM '.$this->getTable('craue_config_setting')." WHERE name = 'restricted_access'");
->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')");
$this->addSql('INSERT INTO ' . $this->getTable('craue_config_setting') . " (name, value, section) VALUES ('restricted_access', 0, 'entry')");
}
/**
@ -47,6 +42,11 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
*/
public function down(Schema $schema)
{
$this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'restricted_access';");
$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;
}
}

View File

@ -30,11 +30,6 @@ class Version20161122203647 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -60,4 +55,9 @@ class Version20161122203647 extends AbstractMigration implements ContainerAwareI
$userTable->addColumn('expired', 'smallint', ['notnull' => false]);
$userTable->addColumn('credentials_expired', 'smallint', ['notnull' => false]);
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -22,11 +22,6 @@ class Version20161128084725 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -46,4 +41,9 @@ class Version20161128084725 extends AbstractMigration implements ContainerAwareI
$configTable = $schema->getTable($this->getTable('config'));
$configTable->dropColumn('list_mode');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -28,11 +28,6 @@ class Version20161128131503 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -58,4 +53,9 @@ class Version20161128131503 extends AbstractMigration implements ContainerAwareI
$userTable->addColumn($field, $type, ['notnull' => false]);
}
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ 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 AbstractMigration implements ContainerAwareInterface
{
@ -22,11 +22,6 @@ class Version20161214094402 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -38,17 +33,17 @@ class Version20161214094402 extends AbstractMigration implements ContainerAwareI
switch ($this->connection->getDatabasePlatform()->getName()) {
case 'sqlite':
$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('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('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('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('DROP TABLE __temp__wallabag_entry');
break;
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;
case 'postgresql':
$this->addSql('ALTER TABLE '.$this->getTable('entry').' RENAME uuid TO uid');
$this->addSql('ALTER TABLE ' . $this->getTable('entry') . ' RENAME uuid TO uid');
}
}
@ -66,10 +61,15 @@ class Version20161214094402 extends AbstractMigration implements ContainerAwareI
throw new SkipMigrationException('Too complex ...');
break;
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;
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;
}
}

View File

@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Added index on wallabag_entry.uid
* Added index on wallabag_entry.uid.
*/
class Version20161214094403 extends AbstractMigration implements ContainerAwareInterface
{
@ -24,11 +24,6 @@ class Version20161214094403 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -50,4 +45,9 @@ class Version20161214094403 extends AbstractMigration implements ContainerAwareI
$entryTable->dropIndex($this->indexName);
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -8,7 +8,7 @@ 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 AbstractMigration implements ContainerAwareInterface
{
@ -25,11 +25,6 @@ class Version20170127093841 extends AbstractMigration implements ContainerAwareI
$this->container = $container;
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix').$tableName;
}
/**
* @param Schema $schema
*/
@ -53,4 +48,9 @@ class Version20170127093841 extends AbstractMigration implements ContainerAwareI
$entryTable->dropIndex($this->indexStarredName);
$entryTable->dropIndex($this->indexArchivedName);
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View 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;
}
}

View 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;
/**
* Add published_at and published_by in `entry` table.
*/
class Version20170405182620 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('published_at'), 'It seems that you already played this migration.');
$entryTable->addColumn('published_at', 'datetime', [
'notnull' => false,
]);
$this->skipIf($entryTable->hasColumn('published_by'), 'It seems that you already played this migration.');
$entryTable->addColumn('published_by', 'text', [
'notnull' => false,
]);
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(!$entryTable->hasColumn('published_at'), 'It seems that you already played this migration.');
$entryTable->dropColumn('published_at');
$this->skipIf(!$entryTable->hasColumn('published_by'), 'It seems that you already played this migration.');
$entryTable->dropColumn('published_by');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View 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;
}
}

View 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;
}
}

View File

@ -0,0 +1,61 @@
<?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 site credential table to store username & password for some website (behind authentication or paywall).
*/
class Version20170501115751 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($schema->hasTable($this->getTable('site_credential')), 'It seems that you already played this migration.');
$table = $schema->createTable($this->getTable('site_credential'));
$table->addColumn('id', 'integer', ['autoincrement' => true]);
$table->addColumn('user_id', 'integer');
$table->addColumn('host', 'string', ['length' => 255]);
$table->addColumn('username', 'text');
$table->addColumn('password', 'text');
$table->addColumn('createdAt', 'datetime');
$table->addIndex(['user_id'], 'idx_user');
$table->setPrimaryKey(['id']);
$table->addForeignKeyConstraint($this->getTable('user'), ['user_id'], ['id'], [], 'fk_user');
if ('postgresql' === $this->connection->getDatabasePlatform()->getName()) {
$schema->dropSequence('site_credential_id_seq');
$schema->createSequence('site_credential_id_seq');
}
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$schema->dropTable($this->getTable('site_credential'));
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View File

@ -0,0 +1,116 @@
<?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 tags to lowercase.
*/
class Version20170719231144 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\'.');
// Find tags which need to be merged
$dupTags = $this->connection->query('
SELECT LOWER(label) AS lower_label
FROM ' . $this->getTable('tag') . '
GROUP BY LOWER(label)
HAVING COUNT(*) > 1'
);
$dupTags->execute();
foreach ($dupTags->fetchAll() as $duplicates) {
$label = $duplicates['lower_label'];
// Retrieve all duplicate tags for a given tag
$tags = $this->connection->executeQuery('
SELECT id
FROM ' . $this->getTable('tag') . '
WHERE LOWER(label) = :label
ORDER BY id ASC',
[
'label' => $label,
]
);
$first = true;
$newId = null;
$ids = [];
foreach ($tags->fetchAll() as $tag) {
// Ignore the first tag as we use it as the new reference tag
if ($first) {
$first = false;
$newId = $tag['id'];
} else {
$ids[] = $tag['id'];
}
}
// Just in case...
if (count($ids) > 0) {
// Merge tags
$this->addSql('
UPDATE ' . $this->getTable('entry_tag') . '
SET tag_id = ' . $newId . '
WHERE tag_id IN (' . implode(',', $ids) . ')
AND entry_id NOT IN (
SELECT entry_id
FROM ' . $this->getTable('entry_tag') . '
WHERE tag_id = ' . $newId . '
)'
);
// Delete links to unused tags
$this->addSql('
DELETE FROM ' . $this->getTable('entry_tag') . '
WHERE tag_id IN (' . implode(',', $ids) . ')'
);
// Delete unused tags
$this->addSql('
DELETE FROM ' . $this->getTable('tag') . '
WHERE id IN (' . implode(',', $ids) . ')'
);
}
}
// Iterate over all tags to lowercase them
$this->addSql('
UPDATE ' . $this->getTable('tag') . '
SET label = LOWER(label)'
);
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
throw new SkipMigrationException('Too complex ...');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View File

@ -0,0 +1,68 @@
<?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 starred_at column and set its value to updated_at for is_starred entries.
*/
class Version20170824113337 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('starred_at'), 'It seems that you already played this migration.');
$entryTable->addColumn('starred_at', 'datetime', [
'notnull' => false,
]);
}
public function postUp(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(!$entryTable->hasColumn('starred_at'), 'Unable to add starred_at colum');
$this->connection->executeQuery(
'UPDATE ' . $this->getTable('entry') . ' SET starred_at = updated_at WHERE is_starred = :is_starred',
[
'is_starred' => true,
]
);
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(!$entryTable->hasColumn('starred_at'), 'It seems that you already played this migration.');
$entryTable->dropColumn('starred_at');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View File

@ -12,14 +12,16 @@ 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
wallabag_url: URL for *sin* wallabag-installation
entry: "artikel"
export: "eksport"
import: "import"
@ -33,3 +35,6 @@ 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

View File

@ -1,35 +1,40 @@
# settings_changed: Configuration updated
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
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: Download images locally
# restricted_access: Enable authentication for websites with paywall
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'

View File

@ -1,7 +1,7 @@
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
diaspora_url: diaspora* URL, if the service is enabled
export_epub: Enable ePub export
export_mobi: Enable .mobi export
export_pdf: Enable PDF export
@ -12,14 +12,16 @@ export_xml: Enable XML export
import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
import_with_redis: Enable Redis to import data asynchronously
shaarli_url: Shaarli URL, if the service is enabled
share_diaspora: Enable share to Diaspora
share_mail: Enable share by email
share_shaarli: Enable share to Shaarli
share_twitter: Enable share to Twitter
share_unmark: Enable share to Unmark.it
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 e-mail
share_shaarli: Enable sharing to Shaarli
share_scuttle: Enable sharing to Scuttle
share_twitter: Enable sharing to Twitter
share_unmark: Enable sharing 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"
@ -28,8 +30,11 @@ modify_settings: "apply"
piwik_host: Host of your website in Piwik (without http:// ou 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_enabled: "Enable demo mode? (Only used for the public wallabag demo)"
demo_mode_username: "Demo user"
share_public: Allow public url for entries
share_public: Allow public URL for entries
download_images_enabled: Download images locally
restricted_access: Enable authentication for websites with paywall
restricted_access: Enable authentication for paywalled websites
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

View File

@ -1,7 +1,7 @@
# settings_changed: Configuration updated
download_pictures: Descargar imágenes
settings_changed: Configuración actualizada
download_pictures: Descargar imágenes en el servidor
carrot: Activar compartir con Carrot
diaspora_url: Diaspora URL, si el servicio está activado
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
@ -9,27 +9,32 @@ export_csv: Activar exportación a CSV
export_json: Activar exportación a JSON
export_txt: Activar exportación a TXT
export_xml: Activar exportación a XML
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
# import_with_redis: Enable Redis to import data asynchronously
shaarli_url: Shaarli URL, si el servicio está activado
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_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
wallabag_url: URL de *tu* instancia de wallabag
entry: "artículo"
export: "exportar"
import: "importar"
misc: "misc"
modify_settings: "modificar configuración"
piwik_host: Host de tu website de Piwik (sin http:// o https://)
piwik_site_id: ID de tu website de Piwik
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 para la demo de wallabag)"
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: Allow public url for entries
# download_images_enabled: Download images locally
# restricted_access: Enable authentication for websites with paywall
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

View File

@ -12,14 +12,16 @@ 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
wallabag_url: نشانی صفحهٔ wallabag *شما*
entry: "مقاله"
export: "برون‌سپاری"
import: "درون‌ریزی"
@ -33,3 +35,6 @@ modify_settings: "اعمال"
# 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

View File

@ -12,14 +12,16 @@ export_xml: Activer l'export XML
import_with_rabbitmq: Activer RabbitMQ pour gérer les imports de façon asynchrone
import_with_redis: Activer Redis pour gérer les imports de façon asynchrone
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é
share_diaspora: Activer le partage vers Diaspora
share_mail: Activer le partage par email
share_shaarli: Activer le partage vers Shaarli
share_scuttle: Activer le partage vers Scuttle
share_twitter: Activer le partage vers Twitter
share_unmark: Activer le partage vers Unmark.it
show_printlink: Afficher un lien pour imprimer
wallabag_support_url: URL de support de wallabag
wallabag_url: URL de *votre* instance de wallabag
entry: "article"
export: "export"
import: "import"
@ -33,3 +35,6 @@ 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
restricted_access: Activer l'authentification pour les articles derrière un paywall
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
shaarli_share_origin_url: Activer le partage de l'adresse d'origine vers Shaarli, si le service est activé

View File

@ -12,14 +12,16 @@ 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
wallabag_url: URL della *tua* installazione di wallabag
entry: "contenuto"
export: "esporta"
import: "importa"
@ -33,3 +35,6 @@ 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

View File

@ -1,4 +1,4 @@
# settings_changed: Configuration updated
settings_changed: Configuracion mesa a jorn
download_pictures: Telecargar los imatges sul servidor
carrot: Activar lo partatge cap a Carrot
diaspora_url: URL de Diaspora, se lo servici Diaspora es activat
@ -9,17 +9,19 @@ export_csv: Activar l'expòrt CSV
export_json: Activar l'expòrt JSON
export_txt: Activar l'expòrt TXT
export_xml: Activar l'expòrt XML
# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
# import_with_redis: Enable Redis to import data asynchronously
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
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
share_diaspora: Activar lo partatge cap a Diaspora
scuttle_url: URL de Scuttle, 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_mail: Activar lo partatge per corrièl
share_shaarli: Activar lo partatge cap a Shaarli
share_scuttle: Activar lo partatge cap a Scuttle
share_twitter: Activar lo partatge cap a Twitter
share_unmark: Activar lo partatge cap a Unmark.it
show_printlink: Afichar un ligam per imprimir
wallabag_support_url: URL d'assisténcia de wallabag
wallabag_url: URL de *vòstra* instància de wallabag
entry: "article"
export: "expòrt"
import: "impòrt"
@ -30,6 +32,9 @@ piwik_site_id: ID de vòstre site dins Piwik
piwik_enabled: Activar Piwik
demo_mode_enabled: "Activar lo mode demostracion ? (utilizar solament per la demostracion publica de wallabag)"
demo_mode_username: "Utilizaire de la demostracion"
# share_public: Allow public url for entries
# download_images_enabled: Download images locally
# restricted_access: Enable authentication for websites with paywall
share_public: Autorizar una URL publica pels articles
download_images_enabled: Telecargar los imatges en local
restricted_access: Activar l'autenticacion pels sites amb peatge
api_user_registration: Autorizar los utilizaires a se marcar amb 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

View File

@ -1,4 +1,4 @@
# settings_changed: Configuration updated
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
@ -12,24 +12,28 @@ 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
wallabag_url: Adres *twojej* instacji wallabag
entry: "artykuł"
export: "eksport"
import: "import"
misc: "różne"
modify_settings: "zatwierdz"
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: Download images locally
# restricted_access: Enable authentication for websites with paywall
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

View File

@ -12,14 +12,16 @@ 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
wallabag_url: URL de *sua* instância do wallabag
entry: "artigo"
export: "exportar"
import: "importar"
@ -33,3 +35,6 @@ 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

View File

@ -12,14 +12,16 @@ 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
wallabag_url: URL-ul instanței tale wallabag
entry: "alticol"
export: "exportă"
import: "importă"
@ -33,3 +35,6 @@ modify_settings: "aplică"
# 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

View File

@ -0,0 +1,40 @@
settings_changed: "Настройки обновлены"
download_pictures: "Скачивать картинки на Ваш сервер"
carrot: "Включить возможность отслеживания событий через Carrot"
diaspora_url: "Diaspora URL, если сервис включен"
export_epub: "Включить ePub экспорт"
export_mobi: "Включить .mobi экспорт"
export_pdf: "Включить PDF экспорт"
export_csv: "Включить CSV экспорт"
export_json: "Включить JSON экспорт"
export_txt: "Включить TXT экспорт"
export_xml: "Включить XML экспорт"
import_with_rabbitmq: "Включить RabbitMQ для импорта данных(асинхронно)"
import_with_redis: "Включить Redis для импорта данных(асинхронно)"
shaarli_url: "Shaarli URL, если сервис включен"
scuttle_url: "Scuttle URL, если сервис включен"
unmark_url: "Unmark URL, если сервис включен"
share_diaspora: "Включить возможность поделиться в соц.сети Diaspora"
share_mail: "Включить возможность поделиться по email"
share_shaarli: "Включить возможность поделиться в Shaarli"
share_twitter: "Включить возможность поделиться в Twitter"
share_unmark: "Включить возможность поделиться в Unmark.it"
show_printlink: "Отображать ссылки в версии для печати"
wallabag_support_url: "Поддержка URL для wallabag"
wallabag_url: "URL *вашего* wallabag сервиса"
entry: "запись"
export: "экспорт"
import: "импорт"
misc: "разное"
modify_settings: "применить"
piwik_host: "Ссылка на Ваш сайт на Piwik (с http:// или https://)"
piwik_site_id: "ID Вашего сайта на Piwik"
piwik_enabled: "Включить Piwik"
demo_mode_enabled: "Включить демо режим ? (только для публичной демонстрации wallabag)"
demo_mode_username: "Демо пользователь"
share_public: "Разрешить публичные ссылки на записи"
download_images_enabled: "Скачивать изображения локально"
restricted_access: "Включить авторизацию на сайте с помощью 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

View File

@ -0,0 +1,37 @@
settings_changed: ปรับปรุงองค์ประกอบ
download_pictures: ดาวน์โหลดรูปภาพผ่านเซิฟเวอร์ของคุณ
carrot: เปิดการแชร์ Carrot
diaspora_url: Diaspora-URL, ถ้าเซิฟเวอร์ถูกเปิดใช้งาน
export_epub: เปิดใช้งานการนำเข้าข้อมูลแบบ ePub
export_mobi: เปิดใช้งานการนำเข้าข้อมูลแบบ .mobi
export_pdf: เปิดใช้งานการนำเข้าข้อมูลแบบ PDF
export_csv: เปิดใช้งานการนำเข้าข้อมูลแบบ CSV
export_json: เปิดใช้งานการนำเข้าข้อมูลแบบ JSON
export_txt: เปิดใช้งานการนำเข้าข้อมูลแบบ TXT
export_xml: เปิดใช้งานการนำเข้าข้อมูลแบบ XML
import_with_rabbitmq: เปิดใช้งาน RabbitMQ เพื่อดึงข้อมูลแบบ asynchronous
import_with_redis: เปิดใช้งาน Redis เพื่อดึงข้อมูลแบบ asynchronous
shaarli_url: Shaarli-URL, ถ้าเซิฟเวอร์ถูกเปิดใช้งาน
share_diaspora: เปิดการแชร์ Diaspora
share_mail: เปิดการแชร์ผ่าน email
share_shaarli: เปิดการแชร์ Shaarli
share_scuttle: เปิดการแชร์ Scuttle
share_twitter: เปิดการแชร์ Twitter
share_unmark: เปิดการแชร์ Unmark.it
show_printlink: แสดงลิงค์เพื่อปรินท์เนื้อหา
wallabag_support_url: URL ที่สนับสนุนจาก wallabag
entry: "บทความ"
export: "นำข้อมูลออก"
import: "นำเข้าข้อมูล"
misc: "เบ็ดเตล็ด"
modify_settings: "ปรับใช้"
piwik_host: โฮสบนเว็บไซต์ของคุณใน Piwik (ยกเว้น http:// หรือ https://)
piwik_site_id: ไอดีบนเว็บไซต์ของคุณใน Piwik
piwik_enabled: เปิดการใช้ Piwik
demo_mode_enabled: "เปิดการใช้งานโหมดเดโม ? (เฉพาะการใช้สำหรับเดโมสาธารณะของ wallabag)"
demo_mode_username: "ผู้ใช้ส่วนเดโม"
share_public: ยอมรับ URL สาธารณะจากการเข้าถึงข้อมูล
download_images_enabled: ดาวน์โหลดรูปภาพเฉพาะ
restricted_access: เปิดใช้งานการรองรับบนเว็บไซต์กับ paywall
api_user_registration: เปิดใช้งานให้ผู้ใช้ลงทะเบียนการใช้ API
# shaarli_share_origin_url: Enable sharing origin url to Shaarli, if the service is enabled

View File

@ -12,9 +12,12 @@
# 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
@ -33,3 +36,6 @@
# 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

View File

@ -20,12 +20,10 @@
{% for section in sections | craue_sortSections %}
<div id="set-{{ section }}" class="col s12">
{% for setting in form.settings if setting.section.vars.value == section %}
{{ form_row(setting.name) }}
{{ form_row(setting.section) }}
{{ form_row(setting.value, {
'label': setting.name.vars.value | trans({}, 'CraueConfigBundle'),
}) }}
{% for setting in form.settings if setting.vars.value.section == section %}
{{ form_row(setting.value, {
'label': setting.vars.value.name | trans({}, 'CraueConfigBundle'),
}) }}
{% endfor %}
</div>
{% endfor %}
@ -35,8 +33,7 @@
{{ 'modify_settings' | trans({}, 'CraueConfigBundle') }}
</button>
{{ form_rest(form) }}
{{ form_end(form) }}
{{ form_widget(form._token) }}
</div>
</div>
</div>

View File

@ -0,0 +1,13 @@
/* Rules for sizing the icon. */
.material-icons.md-18 { font-size: 18px; }
.material-icons.md-24 { font-size: 24px; }
.material-icons.md-36 { font-size: 36px; }
.material-icons.md-48 { font-size: 48px; }
/* Rules for using icons as black on a light background. */
.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); }
.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); }
/* Rules for using icons as white on a dark background. */
.material-icons.md-light { color: rgba(255, 255, 255, 1); }
.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); }

View File

@ -0,0 +1,334 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="800"
height="770"
id="svg4004"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 11">
<defs
id="defs4006" />
<sodipodi:namedview
id="base"
pagecolor="#000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="359.23155"
inkscape:cy="349.10374"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1631"
inkscape:window-height="1026"
inkscape:window-x="49"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata4009">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(21.42857,-101.6479)">
<image
y="101.6479"
x="-21.42857"
id="image4071"
xlink:href="data:image/png;base64,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
"
height="770"
width="800" />
<path
style="fill:#FFF"
d="m 482.45517,806.8979 c -21.575,-30.1125 -55.23748,-77.12866 -74.80551,-104.48035 -19.98598,-27.9359 -36.2457,-49.73896 -37.10125,-49.75 -0.87914,-0.0113 -32.32337,42.25713 -74.37706,99.98035 -40.06973,55 -73.18741,100 -73.59485,100 -1.1396,0 -144.46068,-100.94983 -144.829571,-102.01235 -0.178476,-0.51406 32.221521,-48.07611 72.000001,-105.69344 39.77847,-57.61732 72.3245,-105.66675 72.3245,-106.77649 0,-1.78957 -12.89022,-6.31508 -114,-40.0232 -62.7,-20.90302 -114.613999,-38.24519 -115.364443,-38.53815 -1.043816,-0.4075 4.925559,-20.38013 25.402971,-84.99452 14.722078,-46.45402 27.100359,-84.84113 27.507293,-85.3047 0.406933,-0.46357 54.900599,16.97442 121.097029,38.75107 66.19643,21.77666 120.91108,39.59345 121.5881,39.59285 0.67702,-5.9e-4 1.44284,-1.01357 1.70181,-2.25107 0.25898,-1.2375 0.83006,-57.6 1.26906,-125.25 0.439,-67.65 1.16224,-123.5625 1.6072,-124.25 0.63709,-0.98436 19.23178,-1.24675 87.5,-1.23469 47.68004,0.008 87.18776,0.34593 87.79493,0.75 0.76529,0.50931 2.07325,37.70117 4.26357,121.23469 3.5965,137.16189 3.67401,139 5.86123,139 0.84816,0 53.3106,-17.56056 116.58321,-39.02347 63.2726,-21.46291 115.34958,-38.67541 115.72663,-38.25 1.27822,1.44219 53.1745,170.39371 52.53554,171.03267 -0.34901,0.34901 -53.15524,18.43347 -117.34717,40.18769 -88.30357,29.92548 -116.78951,39.96068 -117.02855,41.22754 -0.17651,0.93542 30.19001,46.31568 68.80279,102.8201 38.0153,55.63011 68.97925,101.56053 68.80877,102.06759 -0.39157,1.16463 -142.63129,105.93788 -143.82081,105.93788 -0.48298,0 -18.53042,-24.6375 -40.10542,-54.75 z"
id="path4093"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,71 @@
/* jQuery */
import $ from 'jquery';
/* Annotations */
import annotator from 'annotator';
/* Fonts */
import 'material-design-icons-iconfont/dist/material-design-icons.css';
import 'lato-font/css/lato-font.css';
import './global.scss';
/* Shortcuts */
import './js/shortcuts/entry';
import './js/shortcuts/main';
import { savePercent, retrievePercent } from './js/tools';
/* ==========================================================================
Annotations & Remember position
========================================================================== */
$(document).ready(() => {
if ($('article').length) {
const app = new annotator.App();
app.include(annotator.ui.main, {
element: document.querySelector('article'),
});
const authorization = {
permits() { return true; },
};
app.registry.registerUtility(authorization, 'authorizationPolicy');
const x = JSON.parse($('#annotationroutes').html());
app.include(annotator.storage.http, $.extend({}, x, {
onError(msg, xhr) {
if (!Object.prototype.hasOwnProperty.call(xhr, 'responseJSON')) {
annotator.notification.banner('An error occurred', 'error');
return;
}
$.each(xhr.responseJSON.children, (k, v) => {
if (v.errors) {
$.each(v.errors, (n, errorText) => {
annotator.notification.banner(errorText, 'error');
});
}
});
},
}));
app.start().then(() => {
app.annotations.load({ entry: x.entryId });
});
$(window).scroll(() => {
const scrollTop = $(window).scrollTop();
const docHeight = $(document).height();
const scrollPercent = (scrollTop) / (docHeight);
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
savePercent(x.entryId, scrollPercentRounded);
});
retrievePercent(x.entryId);
$(window).resize(() => {
retrievePercent(x.entryId);
});
}
});

View File

@ -1,6 +1,6 @@
import Mousetrap from 'mousetrap';
/** Shortcuts **/
/* Shortcuts */
/* Go to */
Mousetrap.bind('g u', () => { window.location.href = Routing.generate('homepage'); });

View File

@ -31,25 +31,4 @@ function retrievePercent(id) {
return true;
}
function initFilters() {
// no display if filters not available
if ($('div').is('#filters')) {
$('#button_filters').show();
$('.js-filters-action').sideNav({ edge: 'right' });
$('#clear_form_filters').on('click', () => {
$('#filters input').val('');
$('#filters :checked').removeAttr('checked');
return false;
});
}
}
function initExport() {
// no display if export not available
if ($('div').is('#export')) {
$('#button_export').show();
$('.js-export-action').sideNav({ edge: 'right' });
}
}
export { savePercent, retrievePercent, initFilters, initExport };
export { savePercent, retrievePercent };

View File

@ -0,0 +1,4 @@
import './share.scss';
function requireAll(r) { r.keys().forEach(r); }
requireAll(require.context('./img/', true, /\.(jpg|png|gif|svg|ico)$/));

View File

@ -0,0 +1,424 @@
/* -------------------------- Reset ------------------- */
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
b,
u,
i,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
vertical-align: baseline;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
}
blockquote,
q {
quotes: none;
}
blockquote::before,
blockquote::after,
q::before,
q::after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/* -------------------------- General properties ------------------- */
body {
background-color: white;
color: #444;
font-family: Georgia;
line-height: 1.7;
-ms-content-zooming: none;
margin-bottom: 64px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 600;
margin: 0.2em 0;
}
article h1,
article h2,
article h3,
article h4,
article h5,
article h6 {
text-align: left;
line-height: 1.3;
}
h1 {
font-size: 1.4em;
}
h2 {
font-size: 1.3em;
}
h3,
h4 {
font-size: 1.2em;
}
h5,
h6 {
font-size: 1.1em;
}
p {
margin-bottom: 0.75em;
}
b,
strong {
font-weight: bold;
}
i,
em {
font-style: italic;
}
a {
color: #444;
text-decoration: underline;
}
a:active,
a:hover {
outline: 0;
}
p,
ul,
ol,
dl {
margin: 0 0 1.75em;
}
ul,
ol {
padding-left: 1.25em;
}
li {
padding-bottom: 0.2em;
line-height: 1.6;
}
li p:last-child,
li li:last-child {
margin-bottom: -0.2em;
}
ul li:last-child,
ol li:last-child {
padding-bottom: 0;
}
mark {
padding: 0 0.2em;
}
mark a {
text-decoration: none;
}
blockquote {
font-style: italic;
border-left: 0.25em solid black;
margin-left: -20px;
padding-left: 17px;
margin-bottom: 0.5em;
margin-top: 0.5em;
}
blockquote cite {
text-transform: uppercase;
font-size: 0.8em;
font-style: normal;
}
blockquote cite::before {
content: "";
margin-right: 0.5em;
}
img {
display: block;
height: auto;
margin-bottom: 0.5em;
max-width: 100%;
}
figure {
margin: 0;
}
figure figcaption {
display: block;
margin-top: 0.3em;
font-style: italic;
font-size: 0.8em;
}
button {
display: none !important;
}
hr {
display: block;
height: 1px;
border: solid #666;
border-width: 1px 0 0;
margin: 1.6em 0;
padding: 0;
}
small {
font-size: 0.7em;
}
dl {
margin: 1.6em 0;
}
dl dt {
float: left;
width: 11.25em;
overflow: hidden;
clear: left;
text-align: right;
-ms-text-overflow: ellipsis;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: bold;
margin-bottom: 1em;
}
dl dd {
margin-left: 12.5em;
margin-bottom: 1em;
}
pre {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 4em 0;
border: 0.0625em solid #efefef;
width: 100%;
padding: 1em;
font-family: Consolas, monospace;
white-space: pre;
overflow: auto;
}
pre code {
font-size: 0.8em;
line-height: 1.6em;
white-space: pre-wrap;
background: transparent;
border: none;
padding: 0;
vertical-align: inherit;
}
code {
padding: 0.125em 0.375em;
margin: 0 0.2em;
font-family: Consolas, monospace;
font-size: 0.8em;
white-space: pre;
border: 1px solid lightgray;
overflow: auto;
}
audio,
video {
max-width: 43.75em;
}
::selection,
mark {
background: #666;
color: white;
}
table {
border-collapse: collapse;
margin-bottom: 2em;
width: 100%;
}
th,
td {
padding: 0.25em;
text-align: left;
}
thead tr {
text-transform: uppercase;
font-size: 0.85em;
letter-spacing: 1px;
font-family: "Segoe UI", sans-serif;
font-weight: 600;
}
tbody tr:nth-child(2n+1) {
background: rgba(0, 0, 0, 0.1);
}
tbody {
border: solid #999;
border-width: 1px 0;
}
figure {
text-align: center;
}
figure > * {
margin: 0 auto;
}
header {
text-align: center;
}
.shared-by {
margin-bottom: 1em;
}
/* --------------------- Responsive design ------------------------- */
@media (max-width: 719px) {
header > *:not(.preview),
article {
padding: 0 1em;
}
}
@media (min-width: 720px) {
blockquote {
margin-left: -1.4375em;
padding-left: 1.25em;
}
header {
margin-top: 32px;
}
.block {
margin-left: auto;
margin-right: auto;
max-width: 43.75em;
padding: 0 1.25em;
}
}

View File

@ -0,0 +1,165 @@
#article {
width: 70%;
margin-bottom: 3em;
text-align: justify;
.tags {
margin-bottom: 1em;
}
i {
font-style: normal;
}
h1 {
text-align: left;
}
h2::after {
content: none;
}
h2,
h3,
h4 {
text-transform: none;
}
}
blockquote {
border: 1px solid #999;
background-color: #fff;
padding: 1em;
margin: 0;
}
.topPosF {
position: fixed;
right: 20%;
bottom: 2em;
font-size: 1.5em;
}
#article_toolbar {
margin-bottom: 1em;
li {
display: inline-block;
margin: 3px auto;
}
a {
background-color: #000;
padding: 0.3em 0.5em 0.2em;
color: #fff;
text-decoration: none;
&:hover,
&:focus {
background-color: #999;
}
}
}
#nav-btn-add-tag {
cursor: pointer;
}
.shaarli::before {
content: "*";
}
.return {
text-decoration: none;
margin-top: 1em;
display: block;
}
.return::before {
margin-right: 0.5em;
}
.notags {
font-style: italic;
color: #999;
}
.icon-rss {
background-color: #000;
color: #fff;
padding: 0.2em 0.5em;
&::before {
position: relative;
top: 2px;
}
}
.list-tags {
li {
margin-bottom: 0.5em;
}
.icon-rss:hover,
.icon-rss:focus {
background-color: #fff;
color: #000;
text-decoration: none;
}
a {
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
}
}
}
pre code {
font-family: "Courier New", Courier, monospace;
}
#filters {
position: fixed;
width: 20%;
height: 100%;
top: 0;
right: 0;
background-color: #fff;
padding: 30px 30px 15px 15px;
border-left: 1px #333 solid;
z-index: 12;
min-width: 300px;
form .filter-group {
margin: 5px;
}
}
#download-form {
position: fixed;
width: 10%;
height: 100%;
top: 0;
right: 0;
background-color: #fff;
padding: 30px 30px 15px 15px;
border-left: 1px #333 solid;
z-index: 12;
min-width: 200px;
li {
display: block;
padding: 0.5em 2em 0.5em 1em;
color: #fff;
position: relative;
text-transform: uppercase;
text-decoration: none;
font-weight: 400;
font-family: PT Sans, sans-serif;
transition: all 0.5s ease;
}
}

View File

@ -1,6 +0,0 @@
@font-face {
font-family: "PT Sans";
font-style: normal;
font-weight: 700;
src: local("PT Sans Bold"), local("PTSans-Bold"), url("../fonts/ptsansbold.woff") format("woff");
}

View File

@ -0,0 +1,263 @@
::selection {
color: #fff;
background-color: #000;
}
.desktopHide {
display: none;
}
.logo {
position: fixed;
z-index: 20;
top: 0.4em;
left: 0.6em;
}
h2,
h3,
h4 {
font-family: "PT Sans", sans-serif;
text-transform: uppercase;
}
p,
li,
label {
color: #666;
}
a {
color: #000;
font-weight: bold;
&.nostyle {
text-decoration: none;
}
&:hover,
&:focus {
text-decoration: none;
}
}
form fieldset {
border: 0;
padding: 0;
margin: 0;
}
form input[type="text"],
form input[type="number"],
select,
form input[type="password"],
form input[type="url"],
form input[type="email"] {
border: 1px solid #999;
padding: 0.5em 1em;
min-width: 12em;
color: #666;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
select {
-webkit-appearance: none;
border-radius: 0;
background: #fff url("../../_global/img/bg-select.png") no-repeat right center;
}
}
.inline {
.row {
display: inline-block;
margin-right: 0.5em;
}
label {
min-width: 6em;
}
}
fieldset label {
display: inline-block;
min-width: 12.5em;
color: #666;
}
label {
margin-right: 0.5em;
}
form .row {
margin-bottom: 0.5em;
}
form button,
input[type="submit"] {
cursor: pointer;
background-color: #000;
color: #fff;
padding: 0.5em 1em;
display: inline-block;
border: 1px solid #000;
}
form button:hover,
form button:focus,
input[type="submit"]:hover,
input[type="submit"]:focus {
background-color: #fff;
color: #000;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
#bookmarklet {
cursor: move;
}
h2::after {
content: "";
height: 4px;
width: 20%;
background-color: #000;
display: block;
}
.links {
padding: 0;
margin: 0;
li {
list-style: none;
margin: 0;
padding: 0;
}
}
#links {
position: fixed;
top: 0;
width: 10em;
left: 0;
text-align: right;
background-color: #333;
padding-top: 9.5em;
height: 100%;
box-shadow: inset -4px 0 20px rgba(0, 0, 0, 0.6);
z-index: 15;
> li > a {
display: block;
padding: 0.5em 2em 0.5em 1em;
color: #fff;
position: relative;
text-transform: uppercase;
text-decoration: none;
font-weight: normal;
font-family: "PT Sans", sans-serif;
transition: all 0.5s ease;
&:hover,
&:focus {
background-color: #999;
color: #000;
}
}
.current::after {
content: "";
width: 0;
height: 0;
position: absolute;
border: 10px solid transparent;
border-right-color: #eee;
right: 0;
top: 50%;
margin-top: -10px;
}
li:last-child {
position: fixed;
bottom: 1em;
width: 10em;
a::before {
font-size: 1.2em;
position: relative;
top: 2px;
}
}
}
#main {
margin-left: 12em;
position: relative;
z-index: 10;
padding-right: 5%;
padding-bottom: 1em;
}
#sort {
padding: 0;
list-style-type: none;
opacity: 0.5;
display: inline-block;
li {
display: inline;
font-size: 0.9em;
& + li {
margin-left: 10px;
}
}
a {
padding: 2px 2px 0;
vertical-align: middle;
}
img {
vertical-align: baseline;
:hover {
cursor: pointer;
}
}
}
#display-mode {
float: right;
margin-top: 10px;
margin-bottom: 10px;
opacity: 0.5;
}
#listmode {
width: 16px;
display: inline-block;
text-decoration: none;
&.tablemode {
background: url("../../_global/img/table.png") no-repeat bottom;
}
.listmode {
background: url("../../_global/img/list.png") no-repeat bottom;
}
}
#warning_message {
position: fixed;
background-color: #ff6347;
z-index: 1000;
bottom: 0;
left: 0;
width: 100%;
color: #000;
}

View File

@ -0,0 +1,13 @@
/* Style */
@import 'guide';
@import 'layout';
@import 'article';
@import 'pictos';
@import 'login';
@import 'save';
@import 'messages';
/* Tools */
@import 'media_queries';
@import 'print';
@import 'ratatouille';

View File

@ -0,0 +1,300 @@
#content {
margin-top: 2em;
min-height: 30em;
}
footer {
text-align: right;
position: relative;
bottom: 0;
right: 5em;
color: #999;
font-size: 0.8em;
font-style: italic;
z-index: 20;
a {
color: #999;
font-weight: normal;
}
}
.list-entries {
letter-spacing: -5px;
}
.listmode.entry {
width: 100%;
height: inherit;
}
.card-entry-tags {
max-height: 2em;
overflow-y: hidden;
padding: 0;
margin: 0;
}
.card-entry-tags li,
.card-entry-tags span {
display: inline-block;
margin: 0 5px;
padding: 5px 12px;
background-color: rgba(0, 0, 0, 0.6);
border-radius: 3px;
max-height: 2em;
overflow: hidden;
text-overflow: ellipsis;
}
.card-entry-tags a,
.card-entry-labels a {
text-decoration: none;
font-weight: normal;
color: #fff;
}
.nav-panel-add-tag {
margin-top: 10px;
}
.list-entries + .results {
margin-bottom: 2em;
}
.reading-time,
.created-at {
color: #999;
font-style: italic;
font-weight: normal;
font-size: 0.9em;
}
.estimatedTime small {
position: relative;
top: -1px;
}
.entry {
background-color: #fff;
letter-spacing: normal;
box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
display: inline-block;
width: 32%;
margin-bottom: 1.5em;
vertical-align: top;
margin-right: 1%;
position: relative;
overflow: hidden;
padding: 1.5em 0 3em;
height: 440px;
img.preview {
width: 100%;
object-fit: cover;
height: 100%;
}
&::before {
content: "";
width: 0;
height: 0;
border: 10px solid transparent;
border-bottom-color: #000;
position: absolute;
bottom: 0.7em;
z-index: 10;
right: 1.5em;
transition: all 0.5s ease;
}
&::after {
content: "";
position: absolute;
height: 7px;
width: 100%;
bottom: 0;
left: 0;
background-color: #000;
transition: all 0.5s ease;
}
&:hover {
box-shadow: 0 3px 10px rgba(0, 0, 0, 1);
&::after {
height: 40px;
}
&::before {
bottom: 2.3em;
}
h2 a {
color: #666;
}
.tools {
bottom: 0;
}
}
h2 {
text-transform: none;
margin-bottom: 0;
line-height: 1.2;
margin-left: 5px;
}
&::after {
content: none;
}
a {
display: block;
text-decoration: none;
color: #000;
word-wrap: break-word;
transition: all 0.5s ease;
}
p {
color: #666;
font-size: 0.9em;
line-height: 1.7;
margin: 5px 5px auto;
}
h2 a::first-letter {
text-transform: uppercase;
}
.tools {
position: absolute;
bottom: -40px;
left: 0;
background: #000;
width: 100%;
z-index: 10;
padding-right: 0.5em;
text-align: right;
transition: all 0.5s ease;
a {
color: #666;
text-decoration: none;
display: block;
padding: 0.4em;
&:hover {
color: #fff;
}
}
li {
display: inline-block;
margin-top: 10px;
}
li:first-child {
float: left;
font-size: 0.9em;
max-width: calc(100% - 40px * 4);
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
max-height: 2em;
margin-left: 10px;
}
}
.card-entry-labels {
position: absolute;
top: 100px;
left: -1em;
z-index: 90;
max-width: 50%;
padding-left: 0;
li {
margin: 10px 10px 10px auto;
padding: 5px 12px 5px 25px;
background-color: rgba(0, 0, 0, 0.6);
border-radius: 0 3px 3px 0;
color: #fff;
cursor: default;
max-height: 2em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
a {
color: #fff;
}
}
}
}
.entry:nth-child(3n+1) {
margin-left: 0;
}
.results {
letter-spacing: -5px;
padding: 0 0 0.5em;
> * {
display: inline-block;
vertical-align: top;
letter-spacing: normal;
width: 50%;
text-align: right;
}
}
div.pagination ul {
text-align: right;
}
.nb-results {
text-align: left;
font-style: italic;
color: #999;
display: inline-flex;
}
div.pagination ul {
a {
color: #999;
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
}
}
> * {
display: inline-block;
margin-left: 0.5em;
}
.prev.disabled,
.next.disabled {
display: none;
}
.current {
height: 25px;
padding: 4px 8px;
border: 1px solid #d5d5d5;
text-decoration: none;
font-weight: bold;
color: #000;
background-color: #ccc;
}
}
.hide {
display: none;
}

View File

@ -0,0 +1,26 @@
.login {
background-color: #333;
#main {
padding: 0;
margin: 0;
}
form {
background-color: #fff;
padding: 1.5em;
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.9);
width: 20em;
position: absolute;
top: 8em;
left: 50%;
margin-left: -10em;
}
.logo {
position: absolute;
top: 2em;
left: 50%;
margin-left: -55px;
}
}

View File

@ -912,6 +912,14 @@ a.add-to-wallabag-link-after::after {
content: "\e953";
}
.icon-pencil2::before {
content: "\e906";
}
.icon-users::before {
content: "\e972";
}
.icon-time::before {
content: "\e952";
}
@ -947,6 +955,11 @@ a.add-to-wallabag-link-after::after {
background-image: url("../../_global/img/icons/shaarli.png");
}
/* scuttle */
.icon-image--scuttle {
background-image: url("../../_global/img/icons/scuttle.png");
}
/* ==========================================================================
Icon selected
========================================================================== */
@ -1063,6 +1076,10 @@ blockquote {
content: "*";
}
.scuttle::before {
content: "*";
}
.return {
text-decoration: none;
margin-top: 1em;

View File

@ -0,0 +1,172 @@
@media screen and (max-width: 1050px) {
.entry {
width: 49%;
}
.entry:nth-child(3n+1) {
margin-left: 1.5%;
}
.entry:nth-child(2n+1) {
margin-left: 0;
}
}
@media screen and (max-width: 900px) {
#article {
width: 80%;
}
.topPosF {
right: 2.5em;
}
}
@media screen and (max-width: 700px) {
.entry {
width: 100%;
margin-left: 0;
}
#display-mode {
display: none;
}
}
@media screen and (max-height: 770px) {
.menu.users,
.menu.internal,
.menu.developer {
display: none;
}
}
@media screen and (max-width: 500px) {
.entry {
width: 100%;
margin-left: 0;
}
body > header {
background-color: #333;
position: fixed;
top: 0;
width: 100%;
height: 3em;
z-index: 11;
}
#links li:last-child {
position: static;
width: auto;
}
#links li:last-child a::before {
content: none;
}
.logo {
width: 1.25em;
height: 1.25em;
left: 0;
top: 0;
}
.login > header {
position: static;
}
.login form {
width: 100%;
position: static;
margin-left: 0;
}
.login .logo {
height: auto;
top: 0.5em;
width: 75px;
margin-left: -37.5px;
}
.desktopHide {
display: block;
position: fixed;
z-index: 20;
top: 0;
right: 0;
border: 0;
width: 2.5em;
height: 2.5em;
cursor: pointer;
background-color: #999;
font-size: 1.2em;
}
.desktopHide:hover,
.desktopHide:focus {
background-color: #fff;
}
#links {
display: none;
width: 100%;
height: auto;
padding-top: 3em;
}
#links.menu--open {
display: block;
}
footer {
position: static;
margin-right: 3em;
}
#main {
margin-left: 1.5em;
padding-right: 1.5em;
position: static;
margin-top: 3em;
}
.card-entry-labels {
display: none;
}
#article_toolbar .topPosF {
display: none;
}
#article {
width: 100%;
}
#article h1 {
font-size: 1.5em;
}
#article_toolbar a {
padding: 0.3em 0.4em 0.2em;
}
#display-mode {
display: none;
}
.popup-form,
#bagit-form,
#search-form {
left: 0;
width: 100%;
border-left: none;
}
.popup-form form,
#bagit-form form,
#search-form form {
width: 100%;
}
}

View File

@ -1,19 +0,0 @@
.messages.error.install {
border: 1px solid #c42608;
color: #c00 !important;
background: #fff0ef;
text-align: left;
}
.messages.notice.install {
border: 1px solid #ebcd41;
color: #000;
background: #fffcd3;
text-align: left;
}
.messages.success.install {
border: 1px solid #6dc70c;
background: #e0fbcc !important;
text-align: left;
}

View File

@ -0,0 +1,50 @@
/* ==========================================================================
Messages
========================================================================== */
.messages {
text-align: left;
width: 60%;
margin: auto 17%;
> * {
display: inline-block;
}
.install {
text-align: left;
&.error {
border: 1px solid #c42608;
color: #c00 !important;
background: #fff0ef;
}
&.notice {
border: 1px solid #ebcd41;
color: #000;
background: #fffcd3;
}
&.success {
border: 1px solid #6dc70c;
background: #e0fbcc !important;
}
}
}
.warning {
font-weight: bold;
display: block;
width: 100%;
}
.more-info {
font-size: 0.85em;
line-height: 1.5;
color: #aaa;
a {
color: #aaa;
}
}

View File

@ -0,0 +1,210 @@
/* ==========================================================================
Pictos
========================================================================== */
@font-face {
font-family: icomoon;
src: url('~icomoon-free-npm/Font/IcoMoon-Free.ttf');
font-weight: normal;
font-style: normal;
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1em; /* Preferred icon size */
width: 1em;
height: 1em;
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
.md-18 { font-size: 18px; }
.md-24 { font-size: 24px; }
.md-36 { font-size: 36px; }
.md-48 { font-size: 48px; }
.vertical-align-middle {
vertical-align: middle !important;
}
}
.icon span,
.icon-image span {
position: absolute;
top: -9999px;
}
[class^="icon-"]::before,
[class*=" icon-"]::before {
font-family: icomoon;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Enable Ligatures ================ */
letter-spacing: 0;
-webkit-font-feature-settings: "liga";
-moz-font-feature-settings: "liga=1";
-moz-font-feature-settings: "liga";
-ms-font-feature-settings: "liga" 1;
-o-font-feature-settings: "liga";
font-feature-settings: "liga";
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-flattr::before {
content: "\ead4";
}
.icon-mail::before {
content: "\ea86";
}
.icon-up-open::before {
content: "\e80b";
}
.icon-star::before {
content: "\e9d9";
}
.icon-check::before {
content: "\ea10";
}
.icon-link::before {
content: "\e9cb";
}
.icon-reply::before {
content: "\e806";
}
.icon-menu::before {
content: "\e9bd";
}
.icon-clock::before {
content: "\e803";
}
.icon-twitter::before {
content: "\ea96";
}
.icon-down-open::before {
content: "\e809";
}
.icon-trash::before {
content: "\e9ac";
}
.icon-delete::before {
content: "\ea0d";
}
.icon-power::before {
content: "\ea14";
}
.icon-arrow-up-thick::before {
content: "\ea3a";
}
.icon-rss::before {
content: "\e808";
}
.icon-print::before {
content: "\e954";
}
.icon-reload::before {
content: "\ea2e";
}
.icon-price-tags::before {
content: "\e936";
}
.icon-eye::before {
content: "\e9ce";
}
.icon-no-eye::before {
content: "\e9d1";
}
.icon-calendar::before {
content: "\e953";
}
.icon-time::before {
content: "\e952";
}
/* .icon-image class, for image-based icons
========================================================================== */
.icon-image {
background: no-repeat center/80%;
padding-right: 1em !important;
padding-left: 1em !important;
}
/* Carrot (http://carrot.org) */
.icon-image--carrot {
background-image: url("../../_global/img/icons/carrot-icon--white.png");
}
/* Diaspora */
.icon-image--diaspora {
background-image: url("../../_global/img/icons/Diaspora-asterisk.svg");
}
/* Unmark.it */
.icon-image--unmark {
background-image: url("../../_global/img/icons/unmark-icon--black.png");
}
/* shaarli */
.icon-image--shaarli {
background-image: url("../../_global/img/icons/shaarli.png");
}
/* ==========================================================================
Icon selected
========================================================================== */
.icon-star.fav::before {
color: #fff;
}
.icon-check.archive::before {
color: #fff;
}

View File

@ -17,7 +17,7 @@
/* ### Content ### */
/* Hide useless blocks */
body > header,
body > .logo,
#article_toolbar,
#links,
#sort,
@ -53,11 +53,8 @@
#main {
width: 100%;
padding: 0;
margin: 0;
margin-left: 0;
padding-right: 0;
padding-bottom: 0;
padding: 0;
}
#article {

View File

@ -0,0 +1,115 @@
/* ==========================================================================
"save a link" related styles
========================================================================== */
.popup-form {
background: rgba(0, 0, 0, 0.5);
position: absolute;
top: 0;
left: 10em;
z-index: 20;
height: 100%;
width: 100%;
margin: 0;
margin-top: -30% !important;
padding: 2em;
display: none;
border-left: 1px #eee solid;
form {
background-color: #fff;
position: absolute;
top: 0;
left: 0;
z-index: 20;
border: 10px solid #000;
width: 400px;
height: 200px;
padding: 2em;
}
}
#bagit-form-form .addurl {
margin-left: 0;
}
.closeMessage,
.close-button {
background-color: #000;
color: #fff;
font-size: 1.2em;
line-height: 1.6;
width: 1.6em;
height: 1.6em;
text-align: center;
text-decoration: none;
&:hover,
&:focus {
background-color: #999;
color: #000;
}
}
.close-button--popup {
display: inline-block;
position: absolute;
top: 0;
right: 0;
font-size: 1.4em;
}
.active-current {
background-color: #999;
&::after {
content: "";
width: 0;
height: 0;
position: absolute;
border: 10px solid transparent;
border-right-color: #eee;
right: 0;
top: 50%;
margin-top: -10px;
}
}
.opacity03 {
opacity: 0.3;
}
.add-to-wallabag-link-after {
background-color: #000;
color: #fff;
padding: 0 3px 2px;
}
a.add-to-wallabag-link-after {
visibility: hidden;
position: absolute;
opacity: 0;
transition-duration: 2s;
transition-timing-function: ease-out;
}
#article article a:hover + a.add-to-wallabag-link-after,
a.add-to-wallabag-link-after:hover {
opacity: 1;
visibility: visible;
transition-duration: 0.3s;
transition-timing-function: ease-in;
}
a.add-to-wallabag-link-after::after {
content: "w";
}
#add-link-result {
font-weight: bold;
font-size: 0.9em;
}
.btn-clickable {
cursor: pointer;
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 307 KiB

View File

@ -1,31 +1,19 @@
/* jQuery */
import $ from 'jquery';
/* eslint-disable no-unused-vars */
/* jquery has default scope */
import cookie from 'jquery.cookie';
import ui from 'jquery-ui-browserify';
/* eslint-enable no-unused-vars */
/* Annotations */
import annotator from 'annotator';
/* Global imports */
import '../_global/index';
/* Shortcuts */
import './shortcuts/main';
import './shortcuts/entry';
import '../../_global/js/shortcuts/main';
import '../../_global/js/shortcuts/entry';
import './js/shortcuts/main';
import './js/shortcuts/entry';
/* Tools */
import { savePercent, retrievePercent } from '../../_global/js/tools';
import toggleSaveLinkForm from './uiTools';
import toggleSaveLinkForm from './js/uiTools';
global.jquery = $;
$.fn.ready(() => {
const $listmode = $('#listmode');
const $listentries = $('#list-entries');
/* Theme style */
import './css/index.scss';
$(document).ready(() => {
/* ==========================================================================
Menu
========================================================================== */
@ -38,45 +26,12 @@ $.fn.ready(() => {
}
});
/* ==========================================================================
List mode or Table Mode
========================================================================== */
$listmode.click(() => {
if ($.cookie('listmode') === 1) {
// Cookie
$.removeCookie('listmode');
$listentries.removeClass('listmode');
$listmode.removeClass('tablemode');
$listmode.addClass('listmode');
} else {
// Cookie
$.cookie('listmode', 1, { expires: 365 });
$listentries.addClass('listmode');
$listmode.removeClass('listmode');
$listmode.addClass('tablemode');
}
});
/* ==========================================================================
Cookie listmode
========================================================================== */
if ($.cookie('listmode') === 1) {
$listentries.addClass('listmode');
$listmode.removeClass('listmode');
$listmode.addClass('tablemode');
}
/* ==========================================================================
Add tag panel
========================================================================== */
$('#nav-btn-add-tag').on('click', () => {
$('.nav-panel-add-tag').toggle(100);
$('.baggy-add-tag').toggle(100);
$('.nav-panel-menu').addClass('hidden');
$('#tag_label').focus();
return false;
@ -95,39 +50,6 @@ $.fn.ready(() => {
});
}
/* ==========================================================================
Annotations & Remember position
========================================================================== */
if ($('article').length) {
const app = new annotator.App();
app.include(annotator.ui.main, {
element: document.querySelector('article'),
});
const x = JSON.parse($('#annotationroutes').html());
app.include(annotator.storage.http, x);
app.start().then(() => {
app.annotations.load({ entry: x.entryId });
});
$(window).scroll(() => {
const scrollTop = $(window).scrollTop();
const docHeight = $(document).height();
const scrollPercent = (scrollTop) / (docHeight);
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
savePercent(x.entryId, scrollPercentRounded);
});
retrievePercent(x.entryId);
$(window).resize(() => {
retrievePercent(x.entryId);
});
}
/**
* Close window after adding entry if popup
*/
@ -136,6 +58,23 @@ $.fn.ready(() => {
window.close();
}
/**
if ($('article').size() > 0) {
const waypoint = new Waypoint({
element: $('.wallabag-title').get(0),
handler: (direction) => {
console.log(direction);
if (direction === 'down') {
$('aside.tags').fadeIn('slow');
} else {
$('aside.tags').fadeOut('slow');
}
},
offset: 250,
});
}
*/
/**
* Tags autocomplete
*/
@ -283,25 +222,24 @@ $.fn.ready(() => {
toggleBagit();
});
const $bagitFormForm = $('#bagit-form-form');
const bagitFormForm = $('#bagit-form-form');
/* ==========================================================================
bag it link and close button
========================================================================== */
// send 'bag it link' form request via ajax
$bagitFormForm.submit((event) => {
bagitFormForm.submit((event) => {
$('body').css('cursor', 'wait');
$('#add-link-result').empty();
$.ajax({
type: $bagitFormForm.attr('method'),
url: $bagitFormForm.attr('action'),
data: $bagitFormForm.serialize(),
type: bagitFormForm.attr('method'),
url: bagitFormForm.attr('action'),
data: bagitFormForm.serialize(),
success: function success() {
$('#add-link-result').html('Done!');
$('#plainurl').val('');
$('#plainurl').blur('');
$('#plainurl').val('').blur('');
$('body').css('cursor', 'auto');
},
error: function error() {
@ -318,8 +256,7 @@ $.fn.ready(() => {
========================================================================== */
$('article a[href^="http"]').after(
() => `<a href="${$(this).attr('href')}" class="add-to-wallabag-link-after" ` +
'alt="add to wallabag" title="add to wallabag"></a>'
() => `<a href="${$(this).attr('href')}" class="add-to-wallabag-link-after" title="add to wallabag"></a>`,
);
$('.add-to-wallabag-link-after').click((event) => {

View File

@ -1,3 +1,6 @@
import $ from 'jquery';
import Mousetrap from 'mousetrap';
$(document).ready(() => {
Mousetrap.bind('s', () => {
$('#search').trigger('click');

View File

@ -0,0 +1,195 @@
/* ==========================================================================
Article
========================================================================== */
#article {
font-size: 20px;
margin: 0 auto;
max-width: 45em;
article {
color: #424242;
font-size: 18px;
line-height: 1.7em;
h1,
h2,
h3,
h4,
h5,
h6 {
color: #212121;
strong {
font-weight: 500;
}
}
h6 {
font-size: 1.2rem;
}
h5 {
font-size: 1.6rem;
}
h4 {
font-size: 1.9rem;
}
h3 {
font-size: 2.2rem;
}
h2 {
font-size: 2.5rem;
}
h1 {
font-size: 2.7rem;
}
a {
border-bottom: 1px dotted #03a9f4;
text-decoration: none;
}
a:hover {
border-bottom-style: solid;
}
ul {
padding-left: 30px;
}
ul,
ul li {
list-style-type: disc;
}
blockquote {
font-style: italic;
}
strong {
font-weight: bold;
}
}
img,
figure {
max-width: 100%;
height: auto;
}
pre {
box-sizing: border-box;
margin: 0 0 1.75em;
border: #e3f2fd 1px solid;
width: 100%;
padding: 10px;
font-family: monospace;
font-size: 0.8em;
white-space: pre;
overflow: auto;
background: #f5f5f5;
border-radius: 3px;
}
> header > h1 {
font-size: 2em;
margin: 2.1rem 0 0.68rem;
}
aside {
.tools {
display: flex;
flex-flow: row wrap;
.stats {
font-size: 0.8em;
margin: 8px 5px 5px;
li {
display: inline-flex;
vertical-align: middle;
margin: 3px 5px;
i.material-icons {
color: #3e3e3e;
margin-right: 3px;
}
}
a {
color: #000;
text-decoration: none;
}
}
.tags {
float: right;
margin: 5px 15px 10px;
}
}
.chip {
background-color: $blueAccentColor;
padding: 0 15px 0 10px;
margin: auto 2px;
border-radius: 6px;
a,
i {
color: #fff;
}
i.material-icons {
float: right;
font-size: 20px;
line-height: 32px;
padding-left: 8px;
}
}
}
}
.reader-mode {
width: 70px !important;
transition: width 0.2s ease;
.collapsible-body {
height: 0;
overflow: hidden;
}
span {
opacity: 0;
transition: opacity 0.2s ease;
}
&:hover {
width: 260px !important;
.collapsible-body {
height: auto;
li a i.material-icons {
margin: auto 5px auto -8px;
}
}
span {
opacity: 1;
}
}
}
.progress {
position: fixed;
top: 0;
width: 100%;
height: 3px;
margin: 0;
z-index: 9999;
}

View File

@ -0,0 +1,274 @@
/* ==========================================================================
Cards
========================================================================== */
main {
#content {
padding: 0 0.5rem;
}
ul.row {
margin: 0.4rem 0 0;
padding: 0 0.75rem;
}
}
.data .card .card-body {
height: 19em;
overflow: hidden;
}
.card {
.card-content .card-title,
.card-reveal .card-title {
line-height: 22.8px;
max-height: 80px;
font-size: 19px;
font-family: roberto, "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #313131;
}
.card-stacked .card-content .card-title {
display: inline-block;
}
.card-content .activator,
.card-reveal .activator {
cursor: pointer;
font-family: "Material Icons";
}
.card-content i.right,
.card-reveal i.right {
margin-left: 0;
}
.card-content .original {
line-height: 24px;
font-size: 15px;
}
.card-entry-labels {
position: absolute;
top: 10px;
z-index: 90;
max-width: 50%;
}
.card-entry-labels-hidden {
margin: 2.5px auto;
}
.card-entry-labels-hidden li {
display: inline-block;
background-color: $blueAccentColor;
margin: 0 5px;
padding: 5px 12px;
border-radius: 3px;
color: #fff;
max-height: 2em;
max-width: calc(100% - 15px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.card-content .estimatedTime {
margin-bottom: 10px;
}
.card-action {
padding: 10px 5px 10px 15px;
ul.links {
margin: 0;
font-size: 24px;
line-height: 24px;
}
a {
color: #fff;
margin: 0;
}
a:hover {
color: #fff;
}
ul.tools li a.tool {
margin-right: 5px !important;
}
.reading-time {
display: inline-flex;
vertical-align: middle;
span {
margin-right: 5px;
}
}
}
.card-image {
height: 10em;
}
.card-fullimage {
height: 13.5em;
}
.card-image .preview,
.card-fullimage .preview {
height: 14em;
background: no-repeat 50%/cover;
display: block;
}
&.sw {
max-width: 370px;
margin-left: auto;
margin-right: auto;
}
}
a.original:not(.waves-effect) {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
display: block;
}
.card-entry-labels li,
.card-tag-labels li {
margin: 10px 10px 10px auto;
padding: 5px 12px 5px 16px !important;
background-color: $blueAccentColor;
border-radius: 3px;
color: #fff;
cursor: default;
}
.card-entry-labels li {
text-overflow: ellipsis;
white-space: nowrap;
border-radius: 0 3px 3px 0;
overflow: hidden;
}
.card-tag-labels li {
display: flex;
justify-content: space-between;
}
.card-entry-tags a,
.card-entry-labels a,
.card-tag-labels a,
.card-entry-labels-hidden a,
#list .chip a {
text-decoration: none;
font-weight: normal;
color: #fff;
}
.card-tag-labels a {
height: 100%;
align-items: center;
}
.card-tag-link {
display: flex;
min-width: 100px;
flex-grow: 1;
}
.card-tag-rss {
display: flex;
}
.card-tag-labels {
display: flex;
flex-wrap: wrap;
}
.card-tag-labels li {
margin: 10px;
flex-basis: 19%;
flex-grow: 1;
align-items: center;
}
.card-stacked {
display: flex;
flex-flow: row wrap;
&:hover ul.tools-list {
display: inline;
text-align: right;
}
.preview {
max-width: 100px;
height: auto;
margin-right: 10px;
flex: 1;
img {
max-width: 100%;
max-height: 100%;
}
}
div.metadata {
.chip {
background-color: $blueAccentColor;
padding: 0 15px 0 10px;
margin: auto 2px;
border-radius: 6px;
a,
i {
color: #fff;
}
i.material-icons {
float: right;
font-size: 20px;
line-height: 32px;
padding-left: 8px;
}
}
}
div.card-content {
flex: 4;
}
ul.tools-list {
flex: 1;
display: none;
flex-basis: 5em;
align-self: flex-end;
float: right;
max-width: 6em;
}
}
#content .collection .collection-item {
min-height: 65px;
height: auto;
}
.quickstart .card .card-action a,
.quickstart .card .card-action a:hover {
color: #fff !important;
}
.settings .div_tabs {
padding-bottom: 15px;
}
@media only screen and (min-width: 992px) {
.card-tag-labels li {
max-width: 50%;
}
}

View File

@ -0,0 +1,88 @@
/* ==========================================================================
* Entries
* ========================================================================== */
.collection {
margin: 15px 15px 0;
.collection-item {
padding: 7px;
height: 65px;
}
}
.results {
display: flex;
padding: 1rem 1rem 0;
flex-wrap: wrap;
justify-content: space-between;
.nb-results {
display: inline-flex;
}
a {
color: #444;
}
}
.pagination {
ul {
display: flex;
margin: 0;
flex-wrap: wrap;
justify-content: space-around;
.prev.disabled,
.next.disabled {
display: none;
}
}
li {
padding: 0;
}
span,
a {
padding: 0 10px;
height: 30px;
display: block;
line-height: 30px;
}
.disabled {
margin-right: 10px;
margin-left: 10px;
}
li.active span {
padding: 0 10px;
height: 30px;
display: block;
color: #fff;
}
}
.footer-text {
margin: 0.7rem 0.5rem;
}
.hidden {
display: none;
}
.picker__date-display {
display: none;
}
footer {
&.page-footer {
margin-top: 10px;
padding-top: 0;
}
.row {
margin-bottom: 10px;
}
}

View File

@ -0,0 +1,15 @@
/* ==========================================================================
* Filters slider
* ========================================================================== */
#filters {
button {
padding: 0;
width: 100%;
}
div.with-checkbox {
height: 3rem;
margin-top: 0;
}
}

View File

@ -0,0 +1,13 @@
/* ==========================================================================
* Fonts
* ========================================================================== */
/**
* Icomoon
*/
@font-face {
font-family: icomoon;
src: url("~icomoon-free-npm/Font/IcoMoon-Free.ttf");
font-weight: normal;
font-style: normal;
}

View File

@ -0,0 +1,189 @@
/* ==========================================================================
* Icons
* ========================================================================== */
/**
*
* Material icons
*
*/
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
width: 1em;
height: 1em;
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
.md-18 {
font-size: 18px;
}
.md-24 {
font-size: 24px;
}
.md-36 {
font-size: 36px;
}
.md-48 {
font-size: 48px;
}
.md-dark {
color: rgba(0, 0, 0, 0.54);
.md-inactive {
color: rgba(0, 0, 0, 0.26);
}
}
.md-light {
color: rgba(255, 255, 255, 1);
.md-inactive {
color: rgba(255, 255, 255, 0.3);
}
}
}
/**
*
* Icomoon icons
*
*/
[class^="icon-"]::before,
[class*=" icon-"]::before {
font-family: icomoon;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
background-size: 24px;
/* Enable Ligatures ================ */
letter-spacing: 0;
font-feature-settings: "liga";
}
.icon-eye::before {
content: "\e9ce";
}
.icon-no-eye::before {
content: "\e9d1";
}
.icon-calendar::before {
content: "\e953";
}
.icon-mail::before {
content: "\ea86";
}
.icon-time::before {
content: "\e952";
}
a.icon-image {
background-repeat: no-repeat;
padding-right: 0.4em !important;
padding-left: 0 !important;
margin-left: 25px;
&::before {
content: "";
display: block;
width: 24px;
height: 24px;
float: left;
margin: 7px 1.5px 0 0;
}
&.carrot::before {
background: url("../../_global/img/icons/carrot-icon--black.png") no-repeat center/90%;
}
&.diaspora::before {
background: url("../../_global/img/icons/diaspora-icon--black.png") no-repeat center/80%;
}
&.unmark::before {
background: url("../../_global/img/icons/unmark-icon--black.png") no-repeat center/80%;
}
&.shaarli::before {
background: url("../../_global/img/icons/shaarli.png") no-repeat center/80%;
}
&.scuttle::before {
background: url("../../_global/img/icons/scuttle.png") no-repeat center/80%;
}
}
.icon-google-plus2::before {
content: "\ea89";
}
.icon-facebook2::before {
content: "\ea8d";
}
.icon-twitter::before {
content: "\ea96";
}
.icon-apple::before {
content: "\eabf";
}
.icon-android::before {
content: "\eac1";
}
.icon-chrome::before {
content: "\eae5";
}
.icon-firefox::before {
content: "\eae6";
}
.icon-link::before {
content: "\e9cb";
}
footer [class^="icon-"],
footer [class*=" icon-"] {
font-size: 2em;
transition: text-shadow 0.2s ease;
padding-right: 10px;
}
footer [class^="icon-"]:hover,
footer [class*=" icon-"]:hover {
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}

View File

@ -0,0 +1,17 @@
@import 'variables';
/* Style */
@import 'article';
@import 'cards';
@import 'entries';
@import 'filters';
@import 'layout';
@import 'nav';
@import 'sidenav';
@import 'various';
/* Tools */
@import 'fonts';
@import 'icons';
@import 'print';
@import 'media_queries';

View File

@ -0,0 +1,44 @@
/* ==========================================================================
Layout
========================================================================== */
body {
display: flex;
min-height: 100vh;
flex-direction: column;
background: #fafafa;
&.login main {
padding: 0;
min-height: 100vh;
}
}
.border-bottom {
border-bottom: 1px solid #ddd;
}
main,
#content,
.valign-wrapper {
height: 100%;
}
#main {
flex: 1 0 auto;
.logo {
a {
height: 100pt;
}
img {
height: 100pt;
width: 100pt;
}
&:hover {
background: transparent;
}
}
}

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