Compare commits

...

333 Commits

Author SHA1 Message Date
99153a9bc8 Release wallabag 2.0.4 2016-05-07 20:02:18 +02:00
de20470ee1 Merge pull request #2035 from wallabag/prepare-204
Prepare wallabag 2.0.4
2016-05-07 19:58:31 +02:00
8f705d62af Update changelog 2016-05-07 18:54:23 +02:00
3c8be33500 Merge pull request #2023 from wallabag/fix-validators-translation
Fix translation for validators
2016-05-07 15:28:30 +02:00
961ec4ec86 Prepare wallabag 2.0.4 2016-05-07 13:26:55 +02:00
1221f5315d Fix translation for validators
Fix #2003
2016-05-07 13:24:14 +02:00
1556c925a4 Merge pull request #2016 from wallabag/update-documentation
Update documentation
2016-05-07 11:10:21 +02:00
f54de6817e Merge pull request #2020 from wallabag/fix-number-entries-per-tag
Fix number of entries in tag/list
2016-05-07 11:09:37 +02:00
dcd74397d6 Merge pull request #2024 from wallabag/jamiroconca-patch-messages-it
Update messages.it.yml
2016-05-07 11:08:40 +02:00
a0640406b4 Update messages.it.yml
other translations added
2016-05-05 17:32:49 +02:00
8cae66fa74 Merge pull request #2029 from wallabag/change-readme
Change Travis/Scrutinizer pictures in README
2016-05-05 15:43:17 +02:00
02222d9070 Change Travis/Scrutinizer pictures in README 2016-05-05 15:21:12 +02:00
613bff2d82 Merge pull request #2028 from wallabag/docu-for-android-app
Docu for android app
2016-05-05 14:38:17 +02:00
e0f4f25fd6 Change documentation about Pocket import
Fix wallabag/docker#8
2016-05-05 13:55:39 +02:00
c6b1112b11 android docu: Wallabag > wallabag (no uppercase) 2016-05-05 11:24:04 +02:00
3bd50951be add first draft of Android app documentation 2016-05-04 23:25:49 +02:00
7c1f64c967 Add documentation to know how to contribute to the documentation :trollface: 2016-05-04 14:42:14 +02:00
bb7a39d1ed Update messages.it.yml 2016-05-04 11:59:07 +02:00
d9926005b1 Rename getEntriesByUser method to getEntriesByUserId 2016-05-04 11:42:52 +02:00
8b563fc04e Fix lighttpd documentation 2016-05-04 11:40:13 +02:00
8ae9a3f52f Merge pull request #2022 from wallabag/fix-pagination-bar
Fix pagination bar on small devices
2016-05-04 10:18:08 +02:00
9039103c37 Add Third resources for wallabag API 2016-05-04 06:52:26 +02:00
09e5b9391e Add pagination bar at the bottom of the page
Fix #2021
2016-05-03 21:44:57 +02:00
e7cd089fa6 Fix pagination bar on small devices
Fix #2008
2016-05-03 21:27:07 +02:00
12c697562e Fix number of entries in tag/list
Fix #2006
2016-05-03 21:12:40 +02:00
fa04bddd01 Move some parts in FAQ 2016-05-03 20:51:23 +02:00
e546a2d6eb Add LigHTTPd documentation
Fix #1931
2016-05-03 20:39:49 +02:00
9b57bac8b9 Merge pull request #2017 from jamiroconca/patch-1
Create messages.it.yml
2016-05-03 20:31:09 +02:00
7f76f416d1 Merge pull request #2018 from jamiroconca/patch-2
Update config.yml, add italian as available language
2016-05-03 20:30:49 +02:00
27b96824fc Merge pull request #2019 from jamiroconca/patch-3
Create CraueConfigBundle.it.yml
2016-05-03 20:30:39 +02:00
760875af67 Create CraueConfigBundle.it.yml
baseline italian translations
2016-05-03 18:31:16 +02:00
8b09c6edfb Update config.yml
add italian as available language
2016-05-03 18:24:14 +02:00
439c7e41a3 Create messages.it.yml
baseline for italian translations (cloned from english)
2016-05-03 18:16:36 +02:00
bba9907d1f Update documentation 2016-05-03 15:50:13 +02:00
97c8eb3c23 Merge pull request #2013 from wallabag/fix-display-all-tags
Fix tags listing
2016-05-03 10:07:34 +02:00
e9023a16eb Remove useless method 2016-05-03 09:39:34 +02:00
2142c714ef Merge pull request #1976 from wallabag/fix-filter-readingTime
Fix filter reading time
2016-05-03 09:05:31 +02:00
045859a2b5 Merge pull request #2005 from wallabag/fix-readingspeed-not-defined
Fix reading speed not defined when user was created via config page
2016-05-03 09:04:02 +02:00
2a007fe43d Fix tags listing
Fix #1994
* Remove unused method in tag repository
2016-05-02 21:32:47 +02:00
c4c062cce0 Add test to check reading time filter 2016-05-02 21:14:23 +02:00
8389074180 Add test for creation of new user in config page 2016-05-02 20:19:57 +02:00
ba9fee0855 Merge pull request #2012 from biva/patch-2
integrate upgrade.rst
2016-05-02 20:08:04 +02:00
b8f35b6b27 Merge pull request #2011 from biva/patch-1
upgrade.rst (Creation of an upgrade page in the documentation)
2016-05-02 20:06:43 +02:00
06bf24103b integrate upgrade.rst 2016-05-02 18:31:52 +02:00
12d3bbccbd upgrade.rst
Creation of an upgrade page in the documentation
2016-05-02 13:29:38 +02:00
deb5d97667 Merge pull request #2010 from wallabag/set-title-via-post-api
Set the title via POST /api/entries
2016-05-02 13:22:45 +02:00
51a15609b3 Set the title via POST /api/entries
Fix #2009
2016-05-02 12:50:42 +02:00
823397f2d6 Fix reading speed not defined when user was created via config page
Fix #2004
2016-04-30 15:06:31 +02:00
f0de35d2ee Merge pull request #2001 from wallabag/fix-old-branch-name-urls
Fix old branch name urls
2016-04-30 14:02:16 +02:00
66bbaaae4d same with fr 2016-04-30 13:00:05 +02:00
d3ffd65a06 doc url still in v2 form 2016-04-30 12:59:17 +02:00
46bbbbf4a9 Merge pull request #1992 from jami7/patch-10
Update CraueConfigBundle.es.yml
2016-04-28 09:17:35 +02:00
4c05e8b18f Update CraueConfigBundle.es.yml 2016-04-27 20:58:51 -10:00
4c295cb928 Merge pull request #1985 from foxmask/master
Rights access to the folders of the project
2016-04-27 07:19:31 +02:00
87b8461ed8 fixed typo 2016-04-26 15:30:43 +02:00
9ddf49ba24 Rights access to the folder of the project 2016-04-26 09:58:57 +02:00
edf3e88d88 Merge pull request #1977 from wallabag/es-translation
Es translation
2016-04-25 14:12:50 +02:00
10cc2785a0 Fix indentations in ES translation 2016-04-24 20:53:11 +02:00
acc371a129 Update messages.es.yml 2016-04-24 20:48:16 +02:00
ef37b9af71 Update messages.es.yml 2016-04-24 20:48:16 +02:00
d6a9e139dc Fix tests 2016-04-24 20:46:25 +02:00
d8f8a59010 Fix wrong reading time when apply filters 2016-04-24 20:24:23 +02:00
f97653c895 Merge pull request #1970 from wallabag/typo-api-doc
Fix typos in API documentation
2016-04-23 14:57:06 +02:00
58f0d0bdeb Fix typos in API documentation 2016-04-23 14:12:55 +02:00
3cfbe3c7e8 Merge pull request #1969 from wallabag/doc-3rd-resources-api
Create 3rd Resources chapter in API documentation
2016-04-23 13:53:05 +02:00
8c2affe680 Create 3rd Resources chapter in API documentation 2016-04-23 13:21:08 +02:00
c9bdd9a83f Merge pull request #1967 from wallabag/add-faq-documentation
Add FAQ page in documentation
2016-04-23 10:57:25 +02:00
0e9339c46c Add FAQ page in documentation 2016-04-23 10:36:25 +02:00
9c0bc04cfe Merge pull request #1965 from wallabag/prepare-203
Prepare release 2.0.3
2016-04-22 18:40:48 +02:00
dafde7fb2f Prepare release 2.0.3 2016-04-22 18:08:16 +02:00
9481187896 Merge pull request #1962 from wallabag/update-api-documentation
Update API documentation with cURL examples
2016-04-22 08:38:04 +02:00
1c90663b79 Update API documentation with cURL examples 2016-04-21 18:48:17 +02:00
7d5b4631d0 Merge pull request #1948 from wallabag/prepare-202
Prepare release 2.0.2
2016-04-21 09:44:44 +02:00
9f151b469f Update changelog 2016-04-21 08:42:41 +02:00
45919a295e Merge pull request #1957 from wallabag/fix-gotoaccount-button-translation
Fix translation for Go to your account button after subscription
2016-04-21 08:37:36 +02:00
2499cdbf29 Fix translation for Go to your account button after subscription
Fix #1956
2016-04-20 15:53:20 +02:00
868e76af10 Merge pull request #1945 from ddeimeke/master
Added some curl examples
2016-04-20 10:10:46 +02:00
f88530de68 Merge pull request #1954 from wallabag/update-links-doc
Update links in documentation
2016-04-19 20:25:36 +02:00
4a25bef077 Update links in documentation 2016-04-19 20:03:34 +02:00
24f65a838c Merge pull request #1953 from maxi62330/master
Actualisation des liens morts (Documentation de traduction)
2016-04-19 19:54:44 +02:00
89bafa95ed Actualisation des liens morts (Documentation de traduction) 2016-04-19 19:25:04 +02:00
18bb5a90d5 Prepare release 2.0.2 2016-04-19 10:01:29 +02:00
938a16c0f6 Added some curl examples 2016-04-19 08:00:07 +02:00
ca8d61b958 Merge pull request #1942 from wallabag/optimize-import
Optimize import
2016-04-18 22:13:48 +02:00
23feba63bb Merge pull request #1944 from wallabag/travis-rename-branches
Update Travis configuration with branches renaming
2016-04-18 22:12:52 +02:00
3320d39418 Update Travis configuration with branches renaming 2016-04-18 21:46:36 +02:00
23d24b1750 Add tests 2016-04-18 15:29:57 +02:00
dc12084d93 Add doctrine clear after flush, thanks to @BitOne talk at Symfony Live 2016-04-18 14:48:18 +02:00
0907a72c64 Merge pull request #1938 from wallabag/hide-pagination
Display pagination only if we have more than one page
2016-04-18 09:41:56 +02:00
188b74b6df Display pagination only if we have more than one page 2016-04-18 09:03:21 +02:00
71601c171f Merge pull request #1935 from jami7/patch-8
Update messages.es.yml
2016-04-17 08:03:36 +02:00
5c2c1a6434 Update messages.es.yml 2016-04-16 14:04:39 -10:00
7fdecbb73c Merge pull request #1933 from wallabag/hide-pagination
Hide pagination if we only have one entry to display
2016-04-16 08:36:24 +02:00
1f034a3316 Hide pagination if we only have one entry to display 2016-04-16 07:19:30 +02:00
d1f4996b77 Merge pull request #1925 from wallabag/fix-redirect-without-referer
Redirect to homepage if referer is null
2016-04-15 17:52:33 +02:00
5180302650 Merge pull request #1929 from wallabag/change-guid-rss
Change guid and link in RSS feeds to give original entry URL
2016-04-15 17:51:56 +02:00
2d899e8d30 Change guid and link in RSS feeds to give original entry URL
Fix #1926
2016-04-15 16:07:34 +02:00
345d74268b Fix redirect when delete entry 2016-04-15 15:39:00 +02:00
4086e0782e Fix tests 2016-04-15 09:58:29 +02:00
af497a641c Redirect to homepage if referer is null
Fix #1924
2016-04-15 07:58:01 +02:00
f2e5fdc366 Merge pull request #1916 from wallabag/cleanup
Convert array + phpDoc
2016-04-13 09:43:14 +02:00
a417b86923 Merge pull request #1918 from wallabag/improve-pagination
Improve pagination when user has lot of entries
2016-04-13 09:42:18 +02:00
18078ded12 Fix indentation 2016-04-13 09:20:01 +02:00
245e2e2cae Merge pull request #1919 from wallabag/cleanup-composerjson
Remove useless dependancy
2016-04-12 22:20:05 +02:00
86732aa01c Move test parameters out of parameters.yml
The end user doesn't care to about the test database.
2016-04-12 22:14:22 +02:00
c31ea8a409 Remove useless dependancy 2016-04-12 21:47:16 +02:00
c95e39c51a Lost in translation pager 2016-04-12 20:38:56 +02:00
63995be5ee Fix display for Next/Previous link when they are disabled 2016-04-12 18:03:40 +02:00
1880da7420 Restore old behavior for OutOfRangeCurrentPageException 2016-04-12 16:40:18 +02:00
76cd8dbb05 Fix tests 2016-04-12 16:32:01 +02:00
624a7c6df1 Improve pagination when user has lot of entries
Fix #1905
* Usage of whiteoctober/WhiteOctoberPagerfantaBundle
2016-04-12 16:04:17 +02:00
80bd17f00d Merge pull request #1911 from wallabag/title-on-title-entry
add title hover on entry titles
2016-04-12 14:54:59 +02:00
1b8b3859c0 Add title hover on entry titles 2016-04-12 14:30:42 +02:00
443cff9840 Fix MySQL tests on HHVM 2016-04-12 12:37:10 +02:00
4094ea4771 Convert array + phpDoc
Thanks for https://github.com/thomasbachem/php-short-array-syntax-converter
2016-04-12 12:25:29 +02:00
7eccbda99f Merge pull request #1915 from wallabag/doc-links
Fix doc links
2016-04-12 11:24:11 +02:00
8846ad0a90 Fix doc links 2016-04-12 10:51:46 +02:00
41e79f9792 Merge pull request #1912 from wallabag/install-config
Move setup config outside setupAdmin
2016-04-11 20:16:49 +02:00
637dc4bb21 Move setup config outside setupAdmin
If user doesn't want to create a new admin (even if it's recommended) the internal config weren't created resulting in error when using the interface.
2016-04-11 19:37:29 +02:00
a83fbf4504 Merge pull request #1909 from wallabag/prepare-release-2.0.1
Prepare release 2.0.1
2016-04-11 14:14:25 +02:00
d098cb04a8 Prepare release 2.0.1 2016-04-11 11:13:02 +02:00
574d101561 Merge pull request #1902 from wallabag/v2-changelog
Add changelog
2016-04-10 23:13:21 +02:00
386d1120c3 Update changelog 2016-04-10 20:24:20 +02:00
15e9483323 Merge pull request #1823 from wallabag/translation-fa
Translation fa
2016-04-10 20:00:03 +02:00
c5dede8445 Merge pull request #1903 from wallabag/force-server-version
Force server version to avoid connexion error
2016-04-10 19:57:45 +02:00
e9497f6fc0 Merge pull request #1901 from wallabag/spanish
Update Spanish translation
2016-04-10 15:43:40 +02:00
c71d83b60c Merge pull request #1887 from wallabag/v2-duplicate-bookmarklet
Fix duplicate article when added via the bookmarklet
2016-04-10 15:37:33 +02:00
f642863ff2 Merge pull request #1895 from wallabag/v2-fix-entries-api
All the entries are fetched via GET /api/entries
2016-04-10 15:37:05 +02:00
69c21157ba Force server version to avoid connexion error
When installing a new project with MySQL, if the database doesn't exist before installation will fail because DBAL will try to get the server version by querying it.
And since this query is done using the default database connexion and since the database doesn't exist, DBAL can't connect to the server.
2016-04-10 15:34:32 +02:00
9b2fe57eb6 Add changelog 2016-04-10 15:12:54 +02:00
b351d0494b Fix FA translations indentation 2016-04-10 14:33:11 +02:00
6d0db75328 Update messages.fa.yml 2016-04-10 14:33:11 +02:00
615fc1d237 Merge pull request #1900 from wallabag/v2-remove-pt-empty-doc
Remove empty portugese documentation
2016-04-10 14:25:01 +02:00
61fcbe9f57 Fix typo in french documentation 2016-04-10 14:23:43 +02:00
eaec84fcd3 Uncommented translated ES lines
Also, turn yaml lint into a more versbose check
2016-04-10 14:21:42 +02:00
834efe84ac Change visibility of checkIfEntryAlreadyExists method to private 2016-04-10 14:20:39 +02:00
466c0c6684 Remove empty portugese documentation 2016-04-10 14:18:03 +02:00
661d5ae0cf Update messages.es.yml
On line 103, I'm not sure what symbol that is that looks like this (<<) but it looks smaller? Where is that? Should I just copy and paste it? And just to clarity, please look at line 101 too cause I'm not too sure if/how I change the stuff within <...> I stopped mid line in 103 just until I get clarification on this. Thanks.
2016-04-10 14:18:03 +02:00
dd4997d705 Update messages.es.yml 2016-04-10 14:17:35 +02:00
c29747357a Merge pull request #1899 from wallabag/v2-nginx-doc
Add documentation about importing large file into nginx
2016-04-10 14:15:38 +02:00
0135c98b24 Remove int cast 2016-04-10 14:15:21 +02:00
cea846d407 Add documentation about importing large file into nginx
Fix #1849: configuration to avoid 413 Request Entity Too Large.
2016-04-10 14:12:25 +02:00
54ecbb41d6 Merge pull request #1898 from wallabag/v2-fix-readingtime-display-material
Fix estimated reading time in material view
2016-04-10 14:12:13 +02:00
19a7ea2a44 Merge pull request #1896 from wallabag/v2-fix-internal-settings
Fix internal settings
2016-04-10 09:49:10 +02:00
2504fe46ed Merge pull request #1894 from wallabag/v2-fix-doc-link
Fix documentation link in developer page
2016-04-10 09:44:48 +02:00
82dbd47391 Merge pull request #1891 from wallabag/v2-fix-rules-typo
Fix typo on configuration page
2016-04-10 09:37:49 +02:00
7ead8a0d9d Fix estimated reading time in material view
Fix #1893
2016-04-10 08:48:53 +02:00
cb48a569e0 Fix internal settings
Fix #1867: remove download_picture setting and manage show_printlink in material theme
2016-04-09 21:34:50 +02:00
5c3ca4fe9e All the entries are fetched via GET /api/entries
Fix #1863: only the unread entries were fetched with GET /api/entries entrypoint. Now, all the entries are fetched
2016-04-09 21:13:56 +02:00
808f541ea9 Fix documentation link in developer page 2016-04-09 20:43:22 +02:00
7a2157b8d7 Fix typo on configuration page 2016-04-09 14:04:43 +02:00
b00a89e08f Refactor EntryController 2016-04-09 13:44:54 +02:00
015e4284f0 Merge pull request #1824 from wallabag/v2-alternative-env
Remove SMTP configuration environment overrides
2016-04-08 21:03:17 +02:00
f652f41dab Fix duplicate article when added via the bookmarklet 2016-04-08 15:41:05 +02:00
7704ef5d3f Add documentation 2016-04-08 14:09:31 +02:00
e969c2a7ef Merge pull request #1879 from wallabag/v2-tag-field-position
Move tag form in Material theme
2016-04-08 13:51:20 +02:00
5b732257db Merge pull request #1884 from wallabag/nicosomb-patch-1
Change the installation method in issue template
2016-04-08 13:50:22 +02:00
0c608f1183 Change the installation method in issue template 2016-04-08 13:14:47 +02:00
77b9db87b8 Merge pull request #1804 from wallabag/j0k3r-patch-1
Force user-agent for iansommerville.com
2016-04-08 11:18:44 +02:00
6a986910b6 Merge pull request #1868 from wallabag/v2-tagrule-baggy
Remove keyboard shortcut and add tagging rule panel in baggy
2016-04-07 14:10:08 +02:00
c6cbe75b2e Move tag form in Material theme 2016-04-07 13:47:35 +02:00
9479ae834c Lock ocramius/proxy-manager
To avoid problem with PHP < 7.0
2016-04-06 11:37:03 +02:00
c802181126 Documentation about wallabag API 2016-04-06 11:30:41 +02:00
8687bcd0c9 Remove keybaord shortcut and add tagging rule panel in baggy 2016-04-05 22:29:47 +02:00
4b0b77e4d7 Merge pull request #1862 from wallabag/v2-doc-import-wllbg1-cli
Add production environment for CLI import
2016-04-05 16:57:43 +02:00
e543d03fd7 Merge pull request #1861 from wallabag/v2-round-estimated-time
Round estimated time and add reading speed for Baggy
2016-04-05 16:18:26 +02:00
6d3a3cfcda Add production environment for CLI import 2016-04-05 15:45:59 +02:00
4a749cad8d Round estimated time and add reading speed for Baggy 2016-04-05 15:35:01 +02:00
3a7df76013 Merge pull request #1856 from wallabag/v2-doc-import-wllbg1-cli
Documentation about wallabag v1 CLI import
2016-04-05 13:49:40 +02:00
af47742dd0 Documentation about wallabag v1 CLI import 2016-04-05 13:46:59 +02:00
52d806ea6b Add migrate link in french documentation 2016-04-05 08:48:53 +02:00
48bb9675c1 Add migrate link in english documentation 2016-04-05 08:48:29 +02:00
6b82630838 Merge pull request #1840 from wallabag/v2-fix-archive-page-title
Fix Archive page title translation
2016-04-04 09:20:04 +02:00
b5cf84bdf6 Fix Archive page title translation 2016-04-04 08:00:31 +02:00
a119acd15d Merge pull request #1835 from wallabag/v2-prepare-v2
🚀 Prepare v2.0.0 🎂
2016-04-03 22:11:17 +02:00
7d997fd9f6 Merge pull request #1838 from wallabag/v2-hide-search
Hide search buttons
2016-04-03 20:47:16 +02:00
163517da79 Remove useless CSS 2016-04-03 20:35:53 +02:00
0795d04916 Hide search buttons 2016-04-03 20:25:43 +02:00
eff75729a1 🚀 Prepare v2.0.0 🎂 2016-04-03 18:56:53 +02:00
2ff626a451 Merge pull request #1832 from wallabag/pdo-driver
Check selected PDO driver on install
2016-04-02 14:57:10 +02:00
c61b68e8a6 Check selected PDO driver on install
Instead of checking that one of the DB driver is installed we retrieve the selected driver (in parameters) and see if the extension exists.
2016-04-01 16:44:51 +02:00
d92407041a Merge branch 'Quent-in-v2' into v2 2016-04-01 10:37:42 +02:00
187868d137 Add Occitan to available language 2016-04-01 10:36:07 +02:00
1695a6fecd Fix quotes for OC 2016-04-01 10:34:51 +02:00
cb68c76cd8 Merge pull request #3 from j0k3r/patch-1
Fix simple quote
2016-04-01 10:18:16 +02:00
69726ec78e Fix simple quote 2016-04-01 10:16:06 +02:00
12500bd772 Occitan version 2016-04-01 08:55:26 +02:00
1c7690d586 OC version 2016-04-01 08:54:21 +02:00
dc89968c58 Update oc version
Complet
2016-04-01 08:51:29 +02:00
9191d8a640 Trad. Occitan
WIP
2016-03-30 13:17:40 +02:00
0bb5669cf6 Remove SMTP configuration environment overrides
SMTP configuration has been added in #1518 to use ParameterHandle's
env-map. But Symfony actually has a native way of allowing parameters to
be overriden from environment so rather than having to define a mapping
for each possible parameter, users can define any override in
parameters.yml:

> parameters:
>     database_host: %WALLABAG_DB_HOST%

and define an environment variable SYMFONY__WALLABAG_DB_HOST.

Links:
env-map: https://github.com/Incenteev/ParameterHandler#using-environment-variables-to-set-the-parameters
Symfony external parameters: http://symfony.com/doc/current/cookbook/configuration/external_parameters.html
2016-03-29 13:44:12 +02:00
b637526524 Merge pull request #1822 from jami7/patch-4
Update messages.es.yml
2016-03-29 07:34:20 +02:00
4063d821a3 Update messages.es.yml 2016-03-28 10:53:35 -10:00
e2dda63152 Merge pull request #1820 from wallabag/import-refacto
Refacto wallabag import
2016-03-28 18:52:22 +02:00
0b05dae377 Merge pull request #1821 from jami7/patch-3
Update messages.es.yml
2016-03-28 18:04:13 +02:00
ff6b683bb3 Update messages.es.yml 2016-03-28 05:34:56 -10:00
b787a7757e Refacto wallabag import
Use an abstract class to store all common action from wallabag vX import.
Move specificity in v1 & v2 import.
2016-03-28 16:43:33 +02:00
0e49487bb0 Remove some complexicity in InstallCommand 2016-03-28 14:18:50 +02:00
ba2157b270 Merge pull request #1805 from wallabag/v2-assign-comma-tags
Fix #1768 Split tags with commas from UI
2016-03-28 09:42:13 +02:00
cc8c2d315f Merge pull request #1819 from wallabag/cleanup
Some cleanup
2016-03-28 09:41:49 +02:00
a2d6f6e9d8 Merge pull request #1818 from wallabag/v2-add-migration-doc
add migration docs
2016-03-28 09:39:35 +02:00
8f336fda64 Tags were not imported in wallabag v2 import
Also, simplify exportAs matching format
2016-03-27 23:58:37 +02:00
4d0ec0e721 Fix some Scrutinizer issues 2016-03-27 20:54:57 +02:00
5d6f6f56a2 Some cleanup
- travis tabulation
- extra namespace definition in entities
2016-03-27 20:36:35 +02:00
2baca964f3 Simplify tag creation from entry
Testing that a tag exist or is assigned to the current entry isn't important in the tag controler since the `assignTagsToEntry` is already doing that job.
So it simplify the controller.
2016-03-27 17:09:33 +02:00
4e38769ad0 add migration docs 2016-03-27 16:26:47 +02:00
18b812b1b9 Merge pull request #1817 from mruminski/v2
Correct translation
2016-03-27 11:04:11 +02:00
ce25b98132 Correct translation 2016-03-26 18:00:03 +01:00
4dc9f8d037 Fix Indentation problem 2016-03-26 17:38:34 +01:00
005c0d370f Update messages.pl.yml
Complete polish translation of messages file
2016-03-25 19:20:37 +01:00
26880205a7 Create FOSUserBundle.pl.yml
Add polish version of FOSUserBundle file
2016-03-25 19:17:58 +01:00
2f20bb2b7f Merge pull request #1813 from wallabag/v2-translation-de
[v2] German translation
2016-03-24 14:01:28 +01:00
58a0ca1651 Complete messages.de.yml 2016-03-24 13:09:49 +01:00
5791e4f458 Translate FOSUserBundle to german. 2016-03-24 12:50:58 +01:00
a6ab1e6d56 Translate CraueConfigBundle to german. 2016-03-24 12:50:47 +01:00
48581c90a1 Merge pull request #1807 from nikaro/patch-1
fix typo diaspora* share
2016-03-21 17:17:52 +01:00
842a62e293 fix type diaspora* share 2016-03-21 17:03:43 +01:00
4258033451 Merge pull request #1806 from wallabag/v2-translation-flash-baggy
Translate flash message in baggy theme
2016-03-21 16:18:58 +01:00
7dbed56857 Translate flash message in baggy theme 2016-03-21 15:44:23 +01:00
5a4ee4ae0f Split tags with commas from UI 2016-03-21 14:06:07 +01:00
439b36323e Merge pull request #1774 from wallabag/v2-key-translation
Switch to keys in translated files
2016-03-21 12:47:57 +01:00
4083887afe Update docs about translation 2016-03-21 10:08:56 +01:00
f3e49264f2 Add reading time translation 2016-03-21 10:00:41 +01:00
4cb3ef5125 Put more validations on travis
Run php-cs-fixer to avoid CS on commits
Add a check on translation message using the built-in yaml validator. It'll avoid typo in translation yaml files.
2016-03-21 10:00:41 +01:00
f92b5de7ac Convert more languages 2016-03-20 21:56:42 +01:00
1381db4835 Translation typos
Fix #1793
2016-03-20 21:56:42 +01:00
3fae7f1d08 Add missing developer page 2016-03-20 21:56:42 +01:00
a0c6c244d9 Convert french translation 2016-03-20 21:56:42 +01:00
b308b26339 CS 2016-03-20 21:12:22 +01:00
4204a06b77 Add flashes messages 2016-03-20 21:12:22 +01:00
4f9cf232f8 Improve test failure readability
If the response content isn't the one expected, instead of checking into the whole DOM (with node tag, etc ..) we only check the text.
So if it fails, phpunit will display only the text, not all node tag. It'll be easier to read.
2016-03-20 21:12:22 +01:00
0d42217e4e Convert english translation file
- convert english translation to translate key
- remove baggy template for login (never used since user isn't logged in and it'll use the default theme: material)
- fix tests about text in response (now checking translation key instead of translated text)
- remove all ugly `<div class="hidden">{{ form_rest(form) }}</div>`
2016-03-20 21:12:22 +01:00
d2b4f01d74 Disable translation in test
We don't want to test translation in test
2016-03-20 21:10:58 +01:00
e71c376db9 Force user-agent for iansommerville.com
When using the default User Agent, the website returns a 403. By forcing the User Agent for this domain, we got the proper behavior: a 200

Since we can't _append_ new user agent to the default graby configuration, we need to rewrite all the default config + the new one.

Fix #1801
2016-03-18 20:55:54 +01:00
bd46de6b25 Revert "Transferring API Description file from Apiary.io"
This reverts commit 169d60abc7.
2016-03-18 16:28:45 +01:00
169d60abc7 Transferring API Description file from Apiary.io 2016-03-18 16:24:05 +01:00
f39e94ace3 Merge pull request #1767 from wallabag/v2-setting-for-reading-time
Setting for reading time
2016-03-18 14:30:38 +01:00
1b64a84b78 Improved tests 2016-03-18 14:01:50 +01:00
ec7c67badc Merge pull request #1799 from wallabag/v2-fix-tabs-display-material
fix tabs display on mobile view
2016-03-18 12:52:40 +01:00
78becd5401 Fix documentation and add help message in Baggy 2016-03-18 12:36:52 +01:00
1978d0e3b6 Merge pull request #1791 from wallabag/v2-fix-api-entry-properties
fix api properties and typo
2016-03-16 23:23:42 +01:00
bc2b947cd5 add check 2016-03-16 22:47:12 +01:00
0cd0d6eb8c fix updating entry status through API 2016-03-16 22:43:32 +01:00
2f60e5ea75 check if archive/star parameters without quotes work 2016-03-16 22:22:12 +01:00
189ef6342a use integers for archived/starred status 2016-03-16 22:22:12 +01:00
0d3043a29c fix api properties and typo 2016-03-16 22:22:12 +01:00
2cc7de1e93 fix tabs display on mobile view 2016-03-16 22:15:01 +01:00
3500d4099f Merge pull request #1797 from wallabag/v2-fix-adding-entry-API
Don't add entry through API if it already exists
2016-03-16 21:40:36 +01:00
3107f92acb Don't add entry through API if it already exists 2016-03-16 21:07:01 +01:00
17051137ec Merge pull request #1792 from wallabag/v2-add-tests-for-api-user
add tests on user in API responses
2016-03-16 10:45:09 +01:00
bc44aa5784 add tests on user in API responses 2016-03-15 19:31:31 +01:00
6432b9277e Replace slider with select 2016-03-14 13:49:47 +01:00
37b371726b Translation and documentation 2016-03-14 13:01:32 +01:00
db1d4b1e19 Fix default value and add baggy implementation 2016-03-14 13:01:31 +01:00
889c1cf328 Fixed fixtures for config 2016-03-14 13:01:31 +01:00
bca5485946 Added setting to have a personal reading time 2016-03-14 13:01:31 +01:00
17b3d026fd Merge pull request #1786 from wallabag/v2-restrict-user-infos
API shows just what needed for user
2016-03-14 06:15:46 +01:00
5cc9b5151f Merge pull request #1784 from wallabag/v2-add-refresh-token
add refresh-token grant-type
2016-03-14 06:14:22 +01:00
7d1fdab2bb API shows just what needed for user 2016-03-13 20:17:52 +01:00
c9c8345a4a add refresh-token grant-type 2016-03-13 17:53:56 +01:00
6ab56c7b2c Merge pull request #1775 from wallabag/v2-few-fixes
Some fixes
2016-03-12 11:10:21 +01:00
b95ffda2a1 Fix hazardous bug with Postgres
Instead of retrieving a random annotation, sort them to be sure they are all the same no matter the database used
2016-03-12 10:45:14 +01:00
55e61971f3 Merge pull request #1776 from wallabag/v2-doc-clarify-php7
clarify that wllbg is compatible php 7
2016-03-11 20:39:48 +01:00
d6dba929a1 clarify that wllbg is compatible php 7 2016-03-11 20:14:14 +01:00
09d8bb6fa2 Improve tests
- add more tests for coverage
- add a test on annotation deletion
- fix post annontation with ranges
2016-03-11 17:59:42 +01:00
66e2be2371 Use --prefer-dist to improve CI perf
https://twitter.com/seldaek/status/708236348281495552
2016-03-11 17:59:42 +01:00
6aed6d69a5 Merge pull request #1763 from wallabag/v2-prepare-beta2
Prepare files for 2.0.0-beta.2
2016-03-11 13:43:57 +01:00
c118131317 git clone with prefer-dist option 2016-03-10 13:04:56 +01:00
24c16007bb Finally back to composer create-project but with --keep-vcs option 2016-03-10 12:43:03 +01:00
4c51979595 Add -o option in composer install command 2016-03-10 12:43:03 +01:00
0f4e919100 French documentation for new installation 2016-03-10 12:43:03 +01:00
83be3dc097 Prepare files for 2.0.0-beta.2 2016-03-10 12:43:03 +01:00
e7931dbdf8 Merge pull request #1771 from wallabag/docker-timezone
Docker timezone
2016-03-09 10:42:15 +01:00
b80841f23c Add comment about timezone definition 2016-03-09 09:04:31 +01:00
612f5f1ec7 Add the timezone as an argument in the docker-compose.
For that, need to use v2 of docker-compose (with version >= 1.6.0)
2016-03-09 09:04:19 +01:00
125460345f Add the timezone for PHP docker container 2016-03-09 09:02:06 +01:00
d460a7377a Merge pull request #1766 from wallabag/v2-add-wallabag-in-title
Fix #1756: Added 'wallabag' in page title
2016-03-08 15:49:13 +01:00
cebb42234c Added 'wallabag' in page title 2016-03-08 15:22:35 +01:00
f4109a9bbf Merge pull request #1762 from wallabag/v2-fix-quickstart-links
Change documentation links in quickstart
2016-03-08 12:00:59 +01:00
3b32c122ab Change documentation links in quickstart 2016-03-08 11:21:40 +01:00
d442cf4a92 Merge pull request #1761 from wallabag/v2-API-version
V2 api version
2016-03-08 10:09:57 +01:00
807037884f Merge pull request #1675 from wallabag/v2-create-api-client
Ability to create new client for the API
2016-03-08 10:09:39 +01:00
6f8310b445 typos & cs 2016-03-08 09:22:25 +01:00
9761bfa18e write test for version 2016-03-07 15:16:27 +01:00
2b4770301c Add version in API 2016-03-07 15:00:03 +01:00
d11eb2e461 Fix translations mistake
In Material template, move the developer link in the left menu (like in baggy)
2016-03-07 11:05:14 +01:00
f17281417c Translate "how to" page 2016-03-07 09:20:20 +01:00
2766668b59 Use external js & css 2016-03-07 08:58:08 +01:00
1256f6fe34 Add translations 2016-03-05 22:29:58 +01:00
9bf15f0269 Add listing clients
Rename route to be more consistive (ie: prefixed with developer_)
2016-03-05 21:44:39 +01:00
2c2308b783 Cleanup form
- Avoid too much hidden data in the form (instead of manually define the submit button and hide the default, use the default one !)
- Fix HTML syntax in client_parameters
- Add developer link in baggy menu
- Fix space between link in material footer
2016-03-05 20:04:19 +01:00
1e5a4b36ab Update filters picture in documentation 2016-03-04 16:20:04 +01:00
e68568cd5b Merge pull request #1750 from wallabag/v2-quickstart-documentation
Documentation about filters / Quickstart changes
2016-03-04 16:14:39 +01:00
d89908aed3 Merge pull request #1670 from wallabag/v2-mark-imported-articles-as-read
Mark all imported articles as read
2016-03-04 16:12:45 +01:00
e166a58fd9 update picture 2016-03-04 15:45:45 +01:00
e18138dbca Merge pull request #1754 from wallabag/v2-api-new-properties-light
Add starred & archive properties to API
2016-03-04 12:31:27 +01:00
fba9e7d44d Remove 'content' from API
Waiting to find a good solution to avoid side problem since user can no define the content
2016-03-04 11:46:18 +01:00
11a452813c use booleans instead of empty 2016-03-04 11:39:21 +01:00
816ad4051b add more properties for entries #1634 2016-03-04 11:39:20 +01:00
79d0e38e7f Adding test
Reformat json file (thanks pro.jsonlint.com)
2016-03-04 10:04:51 +01:00
9e3355ee4f Merge pull request #1753 from Horgix/v2-typo-doc-en
Doc: fix typo in php-hash ext name
2016-03-04 06:17:19 +01:00
5dfd321d0e Doc: fix typo in php-hash ext name 2016-03-04 01:07:45 +01:00
c32ae320fe cs & tests for wllbg v1 import 2016-03-03 10:03:40 +01:00
c10fcb3bbb french translation & pocket 2016-03-03 10:03:40 +01:00
fe8b37c137 Mark all imported articles as read 2016-03-03 10:03:28 +01:00
3d15ea2fd7 Documentation about filters (and some fixes in french documentation 2016-03-03 08:06:18 +01:00
76a9bc4797 Add new links in quickstart 2016-03-03 07:30:05 +01:00
7d12fd0628 Merge pull request #1745 from benages/v2
V2 spanish translation
2016-03-02 09:06:46 +01:00
e5f3b04cce Spanish translation 2016-03-01 23:26:03 +01:00
3ca529970c Spanish translation 2016-03-01 22:36:21 +01:00
9931a37cf7 Spanish translation 2016-03-01 22:33:55 +01:00
348e2b4852 Spanish translation 2016-03-01 22:24:34 +01:00
bd5b3ea8ea Spanish translation 2016-03-01 22:20:42 +01:00
9c5cfd2823 Merge remote-tracking branch 'upstream/v2' into v2 2016-03-01 21:02:13 +01:00
0e576d2163 Start of the spanish translation 2016-03-01 21:00:35 +01:00
646df062df Merge pull request #1743 from wallabag/v2-releasing-documentation
Releasing documentation
2016-03-01 20:49:54 +01:00
6b6f725182 Add steps in RELEASE_PROCESS 2016-03-01 20:21:18 +01:00
461a171467 Releasing documentation 2016-03-01 20:10:26 +01:00
f8b835f537 Merge pull request #1615 from bdunogier/release_process_doc
Added RELEASE_PROCESS document
2016-03-01 20:06:44 +01:00
df814148c3 Merge pull request #1740 from goofy-bz/patch-6
minor typofix again
2016-03-01 17:00:49 +01:00
7b70feb9d2 fixing previous stuff and more 2016-03-01 16:12:15 +01:00
9adfede511 minor fix
adding non-breaking spaces here and there + small piece of translation and relevant French link
2016-03-01 16:09:50 +01:00
244ee24764 Merge pull request #1742 from wallabag/v2-issue-template-package
Add the way to install (package or composer)
2016-03-01 13:23:39 +01:00
a6a971d45f Add the way to install (package or composer) 2016-03-01 12:01:42 +01:00
c273b3a5c1 minor typofix again 2016-02-29 22:04:32 +01:00
5bf8f3f164 Remove comments 2016-02-29 21:28:37 +01:00
5bc2da5628 Add password for auth 2016-02-29 21:28:25 +01:00
8a4690b6a5 add tests 2016-02-29 21:28:25 +01:00
abc329453b Enhance documentation and create a form to create a new client 2016-02-29 21:28:25 +01:00
6a2c524a2c API: rename application to client 2016-02-29 21:28:25 +01:00
b6321bed7b Added developer documentation 2016-02-29 21:28:25 +01:00
24152cdb5e Fix #1597: first draft to create new client for the API 2016-02-29 21:28:25 +01:00
923a7e8d68 Added RELEASE_PROCESS document 2016-02-27 23:32:26 +01:00
258 changed files with 16519 additions and 3491 deletions

View File

@ -6,6 +6,7 @@ Remember, this is _not_ a place to ask questions. For that, go to http://gitter.
### Environment
* wallabag version (or git revision) that exhibits the issue:
* How did you install wallabag? Via `git clone` or by downloading the package?
* Last wallabag version that did not exhibit the issue (if applicable):
* php version:
* OS:

View File

@ -11,6 +11,7 @@ addons:
# cache vendor dirs
cache:
apt: true
directories:
- vendor
- $HOME/.composer/cache
@ -22,12 +23,15 @@ php:
- hhvm
env:
- DB=mysql
- DB=pgsql
- DB=sqlite
- DB=mysql
- DB=pgsql
- DB=sqlite
matrix:
fast_finish: true
include:
- php: 7.0
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite
exclude:
- php: hhvm
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
@ -37,8 +41,7 @@ matrix:
# exclude v1 branches
branches:
except:
- master
- dev
- legacy
before_script:
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
@ -53,3 +56,5 @@ script:
- travis_wait composer update --no-interaction --no-progress
- ant prepare-$DB
- bin/phpunit -v
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;

122
CHANGELOG.md Normal file
View File

@ -0,0 +1,122 @@
# Changelog
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [2.0.4] - 2016-05-07
### Added
- [#2016](https://github.com/wallabag/wallabag/pull/2016) Big updates in [our documentation](http://doc.wallabag.org/en/master/) (Nicolas Lœuillet)
- [#2028](https://github.com/wallabag/wallabag/pull/2028) Documentation about android application (Strubbl)
- [#2019](https://github.com/wallabag/wallabag/pull/2019) Italian translation (Daniele Conca)
- [#2011](https://github.com/wallabag/wallabag/pull/2011) Documentation about wallabag upgrade (biva)
- [#1985](https://github.com/wallabag/wallabag/pull/1985) Documentation about rights access (FoxMaSk)
- [#1969](https://github.com/wallabag/wallabag/pull/1969) Third resources for API in documentation (Nicolas Lœuillet)
- [#1967](https://github.com/wallabag/wallabag/pull/1967) FAQ page in documentation (Nicolas Lœuillet)
### Changed
- [#1977](https://github.com/wallabag/wallabag/pull/1977) Spanish documentation (jami7)
### Fixed
- [#2023](https://github.com/wallabag/wallabag/pull/2023) Fix translation for validators (Nicolas Lœuillet)
- [#2020](https://github.com/wallabag/wallabag/pull/2020) Fix number of entries in tag/list (Nicolas Lœuillet)
- [#2022](https://github.com/wallabag/wallabag/pull/2022) Fix pagination bar on small devices (Nicolas Lœuillet)
- [#2013](https://github.com/wallabag/wallabag/pull/2013) Fix tag listing (Nicolas Lœuillet)
- [#1976](https://github.com/wallabag/wallabag/pull/1976) Fix filter reading time (Nicolas Lœuillet)
- [#2005](https://github.com/wallabag/wallabag/pull/2005) Fix reading speed not defined when user was created via config page (Nicolas Lœuillet)
- [#2010](https://github.com/wallabag/wallabag/pull/2010) Set the title via POST /api/entries (Nicolas Lœuillet)
## [2.0.3] - 2016-04-22
### Added
- [#1962](https://github.com/wallabag/wallabag/pull/1962) cURL examples in documentation about API (Dirk Deimeke)
### Fixed
- Forgot `composer.lock` file in 2.0.2 release so some users may encounter `Fatal error: Out of memory` error during installation
## [2.0.2] - 2016-04-21
### Added
- [#1945](https://github.com/wallabag/wallabag/pull/1945) cURL examples in documentation about API (Dirk Deimeke)
- [#1911](https://github.com/wallabag/wallabag/pull/1911) Add title hover on entry titles (Thomas Citharel)
### Changed
- [#1944](https://github.com/wallabag/wallabag/pull/1944), [#1953](https://github.com/wallabag/wallabag/pull/1953), [#1954](https://github.com/wallabag/wallabag/pull/1954) Due to branches renaming, update documentation and configuration (maxi62330, Nicolas Lœuillet)
- [#1942](https://github.com/wallabag/wallabag/pull/1942) Optimize import (Nicolas Lœuillet)
- [#1935](https://github.com/wallabag/wallabag/pull/1935) Update spanish translation (jami7)
- [#1929](https://github.com/wallabag/wallabag/pull/1929) Change guid and link in RSS feeds to give original entry URL (Nicolas Lœuillet)
- [#1918](https://github.com/wallabag/wallabag/pull/1918) Improve pagination when user has lot of entries (Nicolas Lœuillet)
- [#1916](https://github.com/wallabag/wallabag/pull/1916) Change PHP arrays and move test parameters in a separated file (Jeremy Benoist)
### Fixed
- [#1957](https://github.com/wallabag/wallabag/pull/1957) Fix translation for `Go to your account` button (Nicolas Lœuillet)
- [#1925](https://github.com/wallabag/wallabag/pull/1925) Redirect to homepage if refered is null (Nicolas Lœuillet)
- [#1912](https://github.com/wallabag/wallabag/pull/1912) Fix 500 Internal Server Error -> "Setting piwik_enabled couldn't be found" (Jeremy Benoist)
## [2.0.1] - 2016-04-11
### Added
- [Documentation about importing large file](http://doc.wallabag.org/en/v2/user/installation.html#installing-on-nginx) into nginx. (Nicolas Lœuillet)
- [Documentation about wallabag API](http://doc.wallabag.org/en/v2/developer/api.html) (Nicolas Lœuillet)
- [#1861](https://github.com/wallabag/wallabag/pull/1861) Round estimated time and add reading speed for Baggy (Nicolas Lœuillet)
- [Documentation about wallabag v1 CLI import](http://doc.wallabag.org/en/v2/user/migration.html#import-via-command-line-interface-cli) (Nicolas Lœuillet)
- [Add migrate link](http://doc.wallabag.org/en/v2/user/migration.html) in documentation (Nicolas Lœuillet)
### Changed
- [#1823](https://github.com/wallabag/wallabag/pull/1823) Persian translation (Masoud Abkenar)
- [#1901](https://github.com/wallabag/wallabag/pull/1901) Spanish translation (Jeremy Benoist)
- [#1879](https://github.com/wallabag/wallabag/pull/1879) Move tag form in Material theme (Nicolas Lœuillet)
### Fixed
- [#1903](https://github.com/wallabag/wallabag/pull/1903) Force server version to avoid connection error (Jeremy Benoist)
- [#1887](https://github.com/wallabag/wallabag/pull/1887) Fix duplicate article when added via the bookmarklet (Nicolas Lœuillet)
- [#1895](https://github.com/wallabag/wallabag/pull/1895) API: All the entries are fetched via GET /api/entries (Nicolas Lœuillet)
- [#1898](https://github.com/wallabag/wallabag/pull/1898) Fix estimated reading time in material view #1893 (Nicolas Lœuillet)
- [#1896](https://github.com/wallabag/wallabag/pull/1896) remove download_picture setting and manage show_printlink in material theme #1867 (Nicolas Lœuillet)
- [#1894](https://github.com/wallabag/wallabag/pull/1894) Fix documentation link in developer page (Nicolas Lœuillet)
- [#1891](https://github.com/wallabag/wallabag/pull/1891) Fix typo on configuration page (Nicolas Lœuillet)
- [#1884](https://github.com/wallabag/wallabag/pull/1884) Change the installation method in issue template (Nicolas Lœuillet)
- [#1844](https://github.com/wallabag/wallabag/pull/1844) Lock ocramius/proxy-manager (Jeremy Benoist)
- [#1840](https://github.com/wallabag/wallabag/pull/1840) Fix Archive page title translation (Nicolas Lœuillet)
- [#1801](https://github.com/wallabag/wallabag/pull/1804) Force user-agent for iansommerville.com (Jeremy Benoist)
### Removed
- [#1900](https://github.com/wallabag/wallabag/pull/1900) Remove empty portugese documentation (Nicolas Lœuillet)
- [#1868](https://github.com/wallabag/wallabag/pull/1868) Remove keyboard shortcut and add tagging rule panel in baggy (Nicolas Lœuillet)
- [#1824](https://github.com/wallabag/wallabag/pull/1824) Remove SMTP configuration environment overrides (Mathieu Bruyen)
## [2.0.0] - 2016-04-03
### Added
* save an article, read it, favorite it, archive it. (Hopefully)
* annotations: In each article you read, you can write annotations. ([read the doc](http://doc.wallabag.org/en/v2/user/annotations.html))
* filter entries by reading time, domain name, creation date, status, etc.
* assign tags to entries
* edit article titles
* a REST API ([you can have a look to the documentation](http://v2.wallabag.org/api/doc))
* authorization via oAuth2
* a new default theme, called `material`
* RSS feeds (with ability to limit number of articles)
* create a new account from the config page (for super admin only)
* recover passwords from login page (you have to fill your email on config page)
* picture preview, if available, is displayed for each entry
* Public registration
* migration from wallabag v1/v2 (based on JSON export) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* migration from Pocket (it works, but we need to implement asynchronous import: if you have too many articles, it can fail) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* exports in many formats (PDF, JSON, EPUB, MOBI, XML, CSV and TXT).
* 2-Factor authentication via email ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#two-factor-authentication))
* Tagging rule: create a rule to automatically assign tags to entries! ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#tagging-rules))
* Occitan, German, French, Turkish, Persian, Romanian, Polish, Danish, Spanish and English translations
* Quickstart for beginners (when you don't have any entries)
* Internal settings for administrator (the account created during installation)
* For 3rd apps developers, a developer page is available to create API token

View File

@ -1,5 +1,5 @@
[![Build Status](https://travis-ci.org/wallabag/wallabag.svg?branch=v2)](https://travis-ci.org/wallabag/wallabag)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/wallabag/wallabag/badges/quality-score.png?b=v2)](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
[![Build Status](https://api.travis-ci.org/wallabag/wallabag.svg?branch=master)](https://travis-ci.org/wallabag/wallabag)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/wallabag/wallabag/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag)
# What is wallabag?
@ -8,15 +8,18 @@ Click, save and read it when you can. It extracts content so that you can read i
More informations on our website: [wallabag.org](https://wallabag.org)
# Want to test the v2?
Keep in mind it's an **unstable** branch, everything can be broken :)
# Install wallabag
If you don't have it yet, please [install composer](https://getcomposer.org/download/). Then you can install wallabag by executing the following commands:
If you don't have it yet, please [install composer](https://getcomposer.org/download/).
Then you can install wallabag by executing the following commands:
```
SYMFONY_ENV=prod composer create-project wallabag/wallabag wallabag "2.0.0-beta.1" --no-dev
php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod
```
## License

67
RELEASE_PROCESS.md Normal file
View File

@ -0,0 +1,67 @@
## Definition
A release is mostly a git tag of http://github.com/wallabag/wallabag, following [semantic versioning](http://semver.org).
The last release at the time of writing is 2.0.0-alpha.2, from the v2 branch.
### Steps to release
During this documentation, we assume the release is `release-2.0.0-beta.1`.
#### Files to edit
- `app/config/config.yml` (`wallabag_core.version`)
- `README.md` (`composer create-project` command)
- `docs/en/user/installation.rst` and its translations (`composer create-project` command)
#### Create release on GitHub
- Run these commands to create the tag:
```
git checkout v2
git pull origin v2
git checkout -b release-2.0.0-beta.1
SYMFONY_ENV=prod composer up --no-dev
git add --force composer.lock
git add README.md
git commit -m "Release wallabag 2.0.0-beta.1"
git push origin release-2.0.0-beta.1
```
- Create a new pull request with this title `DON'T MERGE Release wallabag 2.0.0-beta.1`. This pull request is used to launch builds on Travis-CI.
- Run these commands to create the package:
```
git clone git@github.com:wallabag/wallabag.git -b release-2.0.0-beta.1 release-2.0.0-beta.1
SYMFONY_ENV=prod composer up -d=release-2.0.0-beta.1 --no-dev
tar czf wallabag-release-2.0.0-beta.1.tar.gz --exclude="var/*" --exclude=".git" release-2.0.0-beta.1
```
- [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-2.0.0-beta.1` 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 downloads page](https://github.com/wallabag/wallabag.org/blob/master/content/pages/download.md) on the website (MD5 sum, release date)
- Drink a beer!
### `composer.lock`
A release tag must contain a `composer.lock` file. It sets which dependencies were available at the time a release was done,
making it easier to fix issues after the release. It also speeds up `composer install` on stable versions a LOT, by skipping the
dependencies resolution part.
Since `composer.lock` is ignored by default, either it must be removed from `.gitignore` _in the release branch_,
or it must be added using `git add --force composer.lock`.
### Target PHP version
`composer.lock` is _always_ built for a particular version, by default the one it is generated (with `composer update`).
If the PHP version used to generate the .lock isn't a widely available one (like PHP 7), a more common one should
be locally specified in `composer.lock`:
```json
"config": {
"platform": {
"php": "5.5.9",
"ext-something": "4.0"
}
}
```

View File

@ -22,19 +22,22 @@ class AppKernel extends Kernel
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
new Nelmio\CorsBundle\NelmioCorsBundle(),
new Liip\ThemeBundle\LiipThemeBundle(),
new Wallabag\CoreBundle\WallabagCoreBundle(),
new Wallabag\ApiBundle\WallabagApiBundle(),
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
new Wallabag\UserBundle\WallabagUserBundle(),
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
new Wallabag\ImportBundle\WallabagImportBundle(),
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
new Craue\ConfigBundle\CraueConfigBundle(),
new Lexik\Bundle\MaintenanceBundle\LexikMaintenanceBundle(),
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
// wallabag bundles
new Wallabag\CoreBundle\WallabagCoreBundle(),
new Wallabag\ApiBundle\WallabagApiBundle(),
new Wallabag\UserBundle\WallabagUserBundle(),
new Wallabag\ImportBundle\WallabagImportBundle(),
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
];

View File

@ -0,0 +1,29 @@
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
pocket_consumer_key: Consumer-Key für Pocket, um Inhalte zu importieren (https://getpocket.com/developer/docs/authentication)
shaarli_url: Shaarli-URL, sofern der Service aktiviert ist
share_diaspora: Teilen zu Diaspora aktiveren
share_mail: Teilen via E-Mail aktiveren
share_shaarli: Teilen zu Shaarli aktiveren
share_twitter: Teilen zu Twitter 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
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"

View File

@ -0,0 +1,29 @@
download_pictures: Descargar imágenes
carrot: Activar compartir con Carrot
diaspora_url: Diaspora URL, si el servicio está activado
export_epub: Activar exportación a ePub
export_mobi: Activar exportación a .mobi
export_pdf: Activar exportación a PDF
export_csv: Activar exportación a CSV
export_json: Activar exportación a JSON
export_txt: Activar exportación a TXT
export_xml: Activar exportación a XML
pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication)
shaarli_url: Shaarli URL, si el servicio está activado
share_diaspora: Activar compartir con Diaspora
share_mail: Activar compartir con email
share_shaarli: Activar compartir con Shaarli
share_twitter: Activar compartir con Twitter
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
piwik_site_id: ID de tu website de Piwik
piwik_enabled: Activar Piwik
demo_mode_enabled: "Activar modo demo (sólo usado para la demo de wallabag)"
demo_mode_username: "Nombre de usuario demo"

View File

@ -0,0 +1,29 @@
download_pictures: Scarica le immagini sul tuo server
carrot: Abilita la condivisione su Carrot
diaspora_url: Diaspora URL, se il servizio è abilitato
export_epub: Abilita esportazione ePub
export_mobi: Abilita esportazione .mobi
export_pdf: Abilita esportazione PDF
export_csv: Abilita esportazione CSV
export_json: Abilita esportazione JSON
export_txt: Abilita esportazione TXT
export_xml: Abilita esportazione XML
pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication)
shaarli_url: Shaarli URL, if the service is enabled
share_diaspora: Abilita la condivisione su Diaspora
share_mail: Abilita la condivisione per email
share_shaarli: Abilita la condivisione su Shaarli
share_twitter: Abilita la condivisione su Twitter
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: "articolo"
export: "esporta"
import: "importa"
misc: "misc"
modify_settings: "applica"
piwik_host: Host del tuo sito in Piwik
piwik_site_id: ID del tuo sito in Piwik
piwik_enabled: Abilita Piwik
demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
demo_mode_username: "Utente Demo"

View File

@ -0,0 +1,29 @@
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
export_epub: Activar l'expòrt ePub
export_mobi: Activar l'expòrt .mobi
export_pdf: Activar l'expòrt PDF
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
pocket_consumer_key: Clau d'autentificacion Pocket per importar las donadas (https://getpocket.com/developer/docs/authentication)
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
share_diaspora: Activar lo partatge cap a Diaspora
share_mail: Activar lo partatge per corrièl
share_shaarli: Activar lo partatge cap a Shaarli
share_twitter: Activar lo partatge cap a Twitter
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"
misc: "divèrs"
modify_settings: "aplicar"
piwik_host: URL de vòstre site dins Piwik
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"

View File

@ -0,0 +1,2 @@
Login: "Anmelden"
Enter your email address below and we'll send you password reset instructions.: "Tippe deine E-Mail-Adresse unten ein und wir senden dir die Anweisungen, wie du dein Kennwort zurücksetzen kannst."

View File

@ -0,0 +1,2 @@
Login: "Logearse"
Enter your email address below and we'll send you password reset instructions.: "Introduzca su dirección de email y le enviaremos las instrucciones para resetear su contraseña."

View File

@ -0,0 +1,2 @@
Login: "Se connectar"
Enter your email address below and we'll send you password reset instructions.: "Picatz vòstra adreça de corrièl çai-jos, vos mandarem las instruccions per reïnicializar vòstre senhal."

View File

@ -0,0 +1,2 @@
Login: "Logowanie"
Enter your email address below and we'll send you password reset instructions.: "Wpisz poniżej swój adres email, abyśmy mogli wysłać ci instrukcję resetowania hasła."

View File

@ -1,2 +1,2 @@
set :branch, 'v2'
set :branch, 'master'
set :deploy_to, '/var/www/v2.wallabag.org/web/'

View File

@ -28,7 +28,7 @@ framework:
assets: ~
wallabag_core:
version: 2.0.0-beta.1
version: 2.0.4
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages:
en: 'English'
@ -39,10 +39,14 @@ wallabag_core:
ro: 'Română'
pl: 'Polish'
da: 'Dansk'
es: 'Español'
oc: 'Occitan'
it: 'Italiano'
items_on_page: 12
theme: material
language: en
rss_limit: 50
reading_speed: 1
wallabag_import:
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
@ -79,6 +83,7 @@ doctrine:
password: "%database_password%"
charset: UTF8
path: "%database_path%"
server_version: 5.6
orm:
auto_generate_proxy_classes: "%kernel.debug%"

View File

@ -1,5 +1,6 @@
imports:
- { resource: config_dev.yml }
- { resource: parameters_test.yml }
framework:
test: ~
@ -7,6 +8,8 @@ framework:
storage_id: session.storage.mock_file
profiler:
collect: false
translator:
enabled: false
web_profiler:
toolbar: false

View File

@ -19,14 +19,6 @@ parameters:
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
database_table_prefix: wallabag_
test_database_driver: pdo_sqlite
test_database_host: 127.0.0.1
test_database_port: ~
test_database_name: ~
test_database_user: ~
test_database_password: ~
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~

View File

@ -0,0 +1,8 @@
parameters:
test_database_driver: pdo_sqlite
test_database_host: 127.0.0.1
test_database_port: null
test_database_name: null
test_database_user: null
test_database_password: null
test_database_path: '%kernel.root_dir%/../data/db/wallabag_testYO.sqlite'

View File

@ -53,6 +53,7 @@ security:
access_control:
- { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/version, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

View File

@ -6,7 +6,7 @@ services:
filesystem_cache:
class: Doctrine\Common\Cache\FilesystemCache
arguments:
- %kernel.cache_dir%/doctrine/metadata
- "%kernel.cache_dir%/doctrine/metadata"
twig.extension.text:
class: Twig_Extensions_Extension_Text

View File

@ -1,37 +0,0 @@
# This file is a "template" of what your parameters.yml file should look like
parameters:
database_driver: pdo_sqlite
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
database_table_prefix: wallabag_
test_database_driver: pdo_mysql
test_database_host: localhost
test_database_port: 3306
test_database_name: wallabag_test
test_database_user: root
test_database_password: ~
test_database_path: ~
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~
mailer_password: ~
locale: en
# A secret key that's used to generate certain security-related tokens
secret: ThisTokenIsNotSoSecretChangeIt
# two factor stuff
twofactor_auth: true
twofactor_sender: no-reply@wallabag.org
# fosuser stuff
fosuser_confirmation: true
from_email: no-reply@wallabag.org

View File

@ -1,37 +0,0 @@
# This file is a "template" of what your parameters.yml file should look like
parameters:
database_driver: pdo_sqlite
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
database_table_prefix: wallabag_
test_database_driver: pdo_pgsql
test_database_host: localhost
test_database_port:
test_database_name: wallabag_test
test_database_user: travis
test_database_password: ~
test_database_path: ~
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~
mailer_password: ~
locale: en
# A secret key that's used to generate certain security-related tokens
secret: ThisTokenIsNotSoSecretChangeIt
# two factor stuff
twofactor_auth: true
twofactor_sender: no-reply@wallabag.org
# fosuser stuff
fosuser_confirmation: true
from_email: no-reply@wallabag.org

View File

@ -1,37 +0,0 @@
# This file is a "template" of what your parameters.yml file should look like
parameters:
database_driver: pdo_sqlite
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
database_table_prefix: wallabag_
test_database_driver: pdo_sqlite
test_database_host: localhost
test_database_port:
test_database_name: ~
test_database_user: ~
test_database_password: ~
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~
mailer_password: ~
locale: en
# A secret key that's used to generate certain security-related tokens
secret: ThisTokenIsNotSoSecretChangeIt
# two factor stuff
twofactor_auth: true
twofactor_sender: no-reply@wallabag.org
# fosuser stuff
fosuser_confirmation: true
from_email: no-reply@wallabag.org

View File

@ -0,0 +1,8 @@
parameters:
test_database_driver: pdo_mysql
test_database_host: localhost
test_database_port: 3306
test_database_name: wallabag_test
test_database_user: root
test_database_password: ~
test_database_path: ~

View File

@ -0,0 +1,8 @@
parameters:
test_database_driver: pdo_pgsql
test_database_host: localhost
test_database_port:
test_database_name: wallabag_test
test_database_user: travis
test_database_password: ~
test_database_path: ~

View File

@ -0,0 +1,8 @@
parameters:
test_database_driver: pdo_sqlite
test_database_host: localhost
test_database_port:
test_database_name: ~
test_database_user: ~
test_database_password: ~
test_database_path: "%kernel.root_dir%/../data/db/wallabag_testHU.sqlite"

1
bin/php-cs-fixer Symbolic link
View File

@ -0,0 +1 @@
../vendor/fabpot/php-cs-fixer/php-cs-fixer

View File

@ -42,8 +42,8 @@
<target name="db_mysql" description="Run test for MySQL">
<delete dir="${basedir}/app/config/parameters.yml"/>
<exec executable="cp">
<arg value="${basedir}/app/config/tests/parameters.yml.dist.mysql"/>
<arg value="${basedir}/app/config/parameters.yml"/>
<arg value="${basedir}/app/config/tests/parameters_test.mysql.yml"/>
<arg value="${basedir}/app/config/parameters_test.yml"/>
</exec>
<exec executable="php">
@ -56,8 +56,8 @@
<target name="db_sqlite" description="Run test for SQLite">
<delete dir="${basedir}/app/config/parameters.yml"/>
<exec executable="cp">
<arg value="${basedir}/app/config/tests/parameters.yml.dist.sqlite"/>
<arg value="${basedir}/app/config/parameters.yml"/>
<arg value="${basedir}/app/config/tests/parameters_test.sqlite.yml"/>
<arg value="${basedir}/app/config/parameters_test.yml"/>
</exec>
<exec executable="php">
@ -70,8 +70,8 @@
<target name="db_pgsql" description="Run test for PostgreSQL">
<delete dir="${basedir}/app/config/parameters.yml"/>
<exec executable="cp">
<arg value="${basedir}/app/config/tests/parameters.yml.dist.pgsql"/>
<arg value="${basedir}/app/config/parameters.yml"/>
<arg value="${basedir}/app/config/tests/parameters_test.pgsql.yml"/>
<arg value="${basedir}/app/config/parameters_test.yml"/>
</exec>
<exec executable="php">

View File

@ -58,7 +58,6 @@
"friendsofsymfony/rest-bundle": "~1.4",
"jms/serializer-bundle": "~1.0",
"nelmio/api-doc-bundle": "~2.7",
"ezyang/htmlpurifier": "~4.6",
"mgargano/simplehtmldom": "~1.5",
"tecnickcom/tcpdf": "~6.2",
"simplepie/simplepie": "~1.3.1",
@ -80,20 +79,20 @@
"paragonie/random_compat": "~1.0",
"craue/config-bundle": "~1.4",
"mnapoli/piwik-twig-extension": "^1.0",
"lexik/maintenance-bundle": "~2.1"
"lexik/maintenance-bundle": "~2.1",
"ocramius/proxy-manager": "1.*",
"white-october/pagerfanta-bundle": "^1.0"
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2",
"sensio/generator-bundle": "^3.0",
"phpunit/phpunit": "~4.4",
"symfony/phpunit-bridge": "^2.7"
"symfony/phpunit-bridge": "^2.7",
"fabpot/php-cs-fixer": "~1.9"
},
"scripts": {
"build-parameters": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
],
"post-cmd": [
"@build-parameters",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
@ -115,13 +114,7 @@
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"mailer_host": "WALLABAG_MAILER_HOST",
"mailer_user": "WALLABAG_MAILER_USER",
"mailer_password": "WALLABAG_MAILER_PASSWORD",
"secret": "WALLABAG_SECRET"
}
"file": "app/config/parameters.yml"
}
},
"autoload": {

6101
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,42 +1,48 @@
nginx:
image: nginx
ports:
- "8080:80"
volumes:
- ./docker/nginx/nginx.conf:/nginx.conf
- ./docker/logs/nginx:/var/log/nginx
- .:/var/www/html
links:
- php:php
command: nginx -c /nginx.conf
php:
build: docker/php
ports:
- "9000:9000"
volumes:
- .:/var/www/html
#links:
# - "postgres:rdbms"
# - "mariadb:rdbms"
env_file:
- ./docker/php/env
# Comment non-used DBMS lines
# If all DBMS are commented out, sqlite will be used as default
# - ./docker/postgres/env
# - ./docker/mariadb/env
#postgres:
# image: postgres:9
# ports:
# - "5432:5432"
# volumes:
# - ./docker/data/pgsql:/var/lib/postgresql/data
# env_file:
# - ./docker/postgres/env
#mariadb:
# image: mariadb:10
# ports:
# - "3306:3306"
# volumes:
# - ./docker/data/mariadb:/var/lib/mysql
# env_file:
# - ./docker/mariadb/env
version: '2'
services:
nginx:
image: nginx
ports:
- "8080:80"
volumes:
- ./docker/nginx/nginx.conf:/nginx.conf
- ./docker/logs/nginx:/var/log/nginx
- .:/var/www/html
links:
- php:php
command: nginx -c /nginx.conf
php:
build:
context: docker/php
args:
# Set here your timezone using one of this: http://php.net/manual/en/timezones.php
timezone: 'Europe/Monaco'
ports:
- "9000:9000"
volumes:
- .:/var/www/html
#links:
# - "postgres:rdbms"
# - "mariadb:rdbms"
env_file:
- ./docker/php/env
# Comment non-used DBMS lines
# If all DBMS are commented out, sqlite will be used as default
# - ./docker/postgres/env
# - ./docker/mariadb/env
#postgres:
# image: postgres:9
# ports:
# - "5432:5432"
# volumes:
# - ./docker/data/pgsql:/var/lib/postgresql/data
# env_file:
# - ./docker/postgres/env
#mariadb:
# image: mariadb:10
# ports:
# - "3306:3306"
# volumes:
# - ./docker/data/mariadb:/var/lib/mysql
# env_file:
# - ./docker/mariadb/env

View File

@ -1,10 +1,15 @@
FROM php:fpm
# Default timezone. To change it, use the argument in the docker-compose.yml file
ARG timezone='Europe/Paris'
RUN apt-get update && apt-get install -y \
libmcrypt-dev libicu-dev libpq-dev libxml2-dev \
&& docker-php-ext-install \
iconv mcrypt mbstring intl pdo pdo_mysql pdo_pgsql
RUN echo "date.timezone="$timezone > /usr/local/etc/php/conf.d/date_timezone.ini
RUN usermod -u 1000 www-data
CMD ["php-fpm"]

View File

268
docs/en/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
Contribute to this documentation
================================
Sources of our documentation are here https://github.com/wallabag/wallabag/tree/master/docs
We use `ReadTheDocs
<https://readthedocs.org>`__ to generate it.
Pages are written in `Restructured Text
<https://en.wikipedia.org/wiki/ReStructuredText>`__ format. You can use online tools like http://rst.aaroniles.net/ or http://rst.ninjs.org/ to preview your articles.
If you create a new page, don't forget to edit the `index.rst <https://raw.githubusercontent.com/wallabag/wallabag/master/docs/en/index.rst>`__ file to add a link in the sidebar.

View File

@ -12,15 +12,15 @@ Translation files
As wallabag is mainly developed by a French team, please consider that french
translation is the most updated one and please copy it to create your own translation.
You can find translation files here: https://github.com/wallabag/wallabag/tree/v2/src/Wallabag/CoreBundle/Resources/translations.
You can find translation files here: https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations.
You have to create ``messages.CODE.yml`` and ``validators.CODE.yml``, where CODE
is the ISO 639-1 code of your language (`see wikipedia <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__).
Other files to translate:
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/CraueConfigBundle/translations.
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/FOSUserBundle/translations.
- https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations.
- https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations.
You have to create ``THE_TRANSLATION_FILE.CODE.yml`` files.
@ -28,7 +28,7 @@ Configuration file
~~~~~~~~~~~~~~~~~~
You have to edit `app/config/config.yml
<https://github.com/wallabag/wallabag/blob/v2/app/config/config.yml>`__ to display
<https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ to display
your language on Configuration page of wallabag (to allow users to switch to this new translation).
Under the ``wallabag_core.languages`` section, you have to add a new line with
@ -55,6 +55,6 @@ wallabag documentation
Contrary to the web application, the main language for documentation is english.
Documentation files are stored here: https://github.com/wallabag/wallabag/tree/v2/docs
Documentation files are stored here: https://github.com/wallabag/wallabag/tree/master/docs
You need to respect the ``en`` folder structure when you create your own translation.

View File

@ -8,7 +8,7 @@ wallabag documentation
**wallabag** is a read-it-later application: it saves a web page by
keeping content only. Elements like navigation or ads are deleted.
.. note::
.. tip::
This documentation is about wallabag v2. If you want to read documentation for wallabag v1, `please have a look here <https://github.com/wallabag/documentation>`__.
@ -23,17 +23,21 @@ The main documentation for this application is organized into a couple sections:
:maxdepth: 2
:caption: User documentation
user/faq
user/installation
user/upgrade
user/migration
user/import
user/create_account
user/login
user/configuration
user/first_article
user/errors_during_fetching
user/annotations
user/import
user/download_articles
user/filters
user/tags
user/android
.. _dev-docs:
@ -41,6 +45,8 @@ The main documentation for this application is organized into a couple sections:
:maxdepth: 2
:caption: Developer documentation
developer/api
developer/docker
developer/documentation
developer/translate
developer/maintenance

107
docs/en/user/android.rst Normal file
View File

@ -0,0 +1,107 @@
Android App
===========
Purpose of this document
------------------------
This document describes how you can setup your Android application to work with your wallabag instance. There is no difference in this procedure for wallabag v1 or v2.
Steps to configure your app
---------------------------
When you first start the app, you see the welcome screen, where you are adviced to configure the app for your wallabag instance at first.
.. image:: ../../img/user/android_welcome_screen.de.png
:alt: Welcome screen
:align: center
Just confirm that message and you get redirected to the settings screen.
.. image:: ../../img/user/android_configuration_screen.de.png
:alt: Settings screen
:align: center
Fill in your wallabag data. You need to enter your wallabag address. It is important that this URL does not end with a slash. Also add your wallabag credentials to the user name and password field.
.. image:: ../../img/user/android_configuration_filled_in.de.png
:alt: Filled in settings
:align: center
After you have filled in your data, push the button Connection test and wait for the test to finish.
.. image:: ../../img/user/android_configuration_connection_test.de.png
:alt: Connection test with your wallabag data
:align: center
The connection test shall finish with success. If not, you need to fix this first until you proceed.
.. image:: ../../img/user/android_configuration_connection_test_success.de.png
:alt: Connection test successful
:align: center
After the connection test was successful, you can push the button to get your feed credentials. The app now tries to login to your wallabag instance and get the user id and the corresponding token for the feeds.
.. image:: ../../img/user/android_configuration_get_feed_credentials.de.png
:alt: Getting the feed credentials
:align: center
When the process of getting your feed credentials finishes with success you see a toast message that the user id and the token were automatically filled in to the form.
.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png
:alt: Getting feed credentials successful
:align: center
Now you need to scroll to the bottom of the settings menu. Of course you can adjust the given settings to your needs. Finish the configuration of your app with pushing the save button.
.. image:: ../../img/user/android_configuration_scroll_bottom.de.png
:alt: Bottom of the settings screen
:align: center
After hitting the save button, you get the following screen. The app proposes to initiate a syncronisation process to update your feeds of articles. It is recommended to acknowledge this action and press Yes.
.. image:: ../../img/user/android_configuration_saved_feed_update.de.png
:alt: Settings saved the first time
:align: center
Finally after the syncronisation finished successfully, you are presented the list of unread articles.
.. image:: ../../img/user/android_unread_feed_synced.de.png
:alt: Filled article list cause feeds successfully syncronized
:align: center
Known limitations
----
2FA
~~~
Currently the does not support two-factor authentication. You should disable that to get the app working.
Limited amount of articles with wallabag v2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In your wallabag web instance you can configure how many items are part of the RSS feed. This option did not exist in wallabag v1, where all articles were part of the feed. So if you set the amount of articles being displayed greater than the number of items being content of your RSS feed, you will only see the number of items in your RSS feed.
SSL/TLS encryption
~~~~~~~~~~~~~~~~~~
If you can reach your wallabag web instance via HTTPS, you should use that. Especially if your HTTP URL redirects you to the HTTPS one. Currently, the app cannot handle that redirect properly.
References
----------
`Source code of the Android application <https://github.com/wallabag/android-app>`_
`Android Application on F-Droid <https://f-droid.org/repository/browse/?fdfilter=wallabag&fdid=fr.gaulupeau.apps.InThePoche>`_
`Android Application on Google Play <https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche>`_
`Support chat <https://gitter.im/wallabag/wallabag>`_

View File

@ -21,6 +21,12 @@ Items per page
You can change the number of articles displayed on each page.
Reading speed
~~~~~~~~~~~~~
wallabag calculates a reading time for each article. You can define here, thanks to this list, if you are
a fast or a slow reader. wallabag will recalculate the reading time for each article.
Language
~~~~~~~~

View File

@ -23,24 +23,3 @@ Your account is now activated.
.. image:: ../../img/user/activated_account.png
:alt: Welcome on board!
:align: center
Frequently asked questions
--------------------------
I can't valid the registration form
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Make sure that all fields are well filled:
* valid email address
* same passwords in two fields
I don't receive my activation email
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Are you sure your email address was correct? Did you check your spams folder?
When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You already enabled your account or the URL of the activation email is wrong.

View File

@ -12,9 +12,9 @@ There may be several reasons:
How can I help to fix that?
---------------------------
- `by sending us an email with the article's URL <mailto:hello@wallabag.org>`_
- `by sending us an email with the article's URL <mailto:hello\@wallabag.org>`_
- by trying to fix this article by yourself :) by creating a file for the article.
You can use this tool http://siteconfig.fivefilters.org/.
You can use `this tool <http://siteconfig.fivefilters.org/>`__.
How can I try to re-fetch this article?
---------------------------------------

35
docs/en/user/faq.rst Normal file
View File

@ -0,0 +1,35 @@
Frequently Asked Questions
==========================
During the installation, I've got this error ``Error Output: sh: 1: @post-cmd: not found``
------------------------------------------------------------------------------------------
It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it.
`Read the documentation about composer to know how to install it
<https://getcomposer.org/doc/00-intro.md>`__.
I can't valid the registration form
-----------------------------------
Make sure that all fields are well filled:
* valid email address
* same passwords in two fields
I don't receive my activation email
-----------------------------------
Are you sure your email address was correct? Did you check your spams folder?
When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
----------------------------------------------------------------------------------------------------------------------------------
You already enabled your account or the URL of the activation email is wrong.
I forgot my password
--------------------
You can reset your password by clicking on ``Forgot your password?`` link,
on the login page. Then, fill the form with your email address or your username,
you'll receive an email to reset your password.

View File

@ -1,2 +1,49 @@
Filters
=======
=======
To retrieve articles easier, you can use filters.
Click on the third icon in the top bar.
.. image:: ../../img/user/topbar.png
:alt: Top bar
:align: center
All these filters can be combined.
.. image:: ../../img/user/filters.png
:alt: Combine all filters
:align: center
Status
------
Use these checkboxes to find archived or starred articles.
Preview picture
---------------
Check this filter if you want to retrieve articles with a preview picture.
Language
--------
wallabag (via graby) can detect article language. It's easy to you to retrieve articles
written in a specific language.
Reading time
------------
wallabag estimates how many time you need to read an article. With this filter,
you can for example find the articles with a reading time between 2 and 5 minutes.
Domain name
-----------
Thanks to this filter, you can retrieve the articles from the same domain name.
For example, in this field, type ``bbc.co.uk`` to retrieve the articles of this website.
Creation date
-------------
When you save an article, wallabag stored the current date. So handful to retrieve articles written
between 1st and 31th January for example.

View File

@ -1,42 +1,5 @@
Migrate to wallabag
===================
From wallabag
-------------
Export your data from your wallabag 1.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On your config page, click on ``JSON export`` in the ``Export your wallabag data`` section.
.. image:: ../../img/user/export_wllbg_1.png
:alt: Export from wallabag 1.x
:align: center
You will have a ``wallabag-export-1-1970-01-01.json`` file.
Export your data from your wallabag 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On the export sidebar, click on ``JSON``.
.. image:: ../../img/user/export_wllbg_2.png
:alt: Export from wallabag 2.x
:align: center
You will have a ``Unread articles.json`` file.
Import your data into wallabag 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Click on ``Import`` link in the menu, choose the right wallabag version,
select your export file on your computer and import it.
.. image:: ../../img/user/import_wllbg.png
:alt: Import from wallabag 1.x
:align: center
All your wallabag articles will be imported.
Migrate from a third service
============================
From Pocket
-----------
@ -53,7 +16,7 @@ a new application on their developer website to continue.
and submit your new application
Pocket will give you a **Consumer Key** (for example, `49961-985e4b92fe21fe4c78d682c1`).
You need to configure the ``pocket_consumer_key`` into the ``app/config/parameters.yml`` file in wallabag.
You need to configure the ``pocket_consumer_key`` into the ``Import`` section in the ``Internal settings`` menu.
Now, all is fine to migrate from Pocket.

View File

@ -4,14 +4,14 @@ Install wallabag
Requirements
------------
wallabag is compatible with php >= 5.5
wallabag is compatible with PHP >= 5.5, including PHP 7.
You'll need the following extensions for wallabag to work. Some of these may already activated in your version of php, so you may not have to install all corresponding packages.
You'll need the following extensions for wallabag to work. Some of these may already activated in your version of PHP, so you may not have to install all corresponding packages.
- php-session
- php-ctype
- php-dom
- pĥp-hash
- php-hash
- php-simplexml
- php-json
- php-gd
@ -25,15 +25,18 @@ You'll need the following extensions for wallabag to work. Some of these may alr
wallabag uses PDO to connect to database, so you'll need one of:
- php-pdo_mysql
- php-pdo_sqlite
- php-pdo_pgsql
- pdo_mysql
- pdo_sqlite
- pdo_pgsql
and it's corresponding database server.
Installation
------------
On a dedicated web server (recommended way)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wallabag uses a big number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you don't already have.
Install Composer:
@ -42,16 +45,19 @@ Install Composer:
curl -s http://getcomposer.org/installer | php
You can find specific instructions here : __ https://getcomposer.org/doc/00-intro.md
You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__:
To install wallabag itself, you must run these two commands:
::
SYMFONY_ENV=prod composer create-project wallabag/wallabag wallabag "2.0.0-beta.1" --no-dev
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
To start php's build-in server and test if everything did install correctly, you can do:
To start PHP's build-in server and test if everything did install correctly, you can do:
::
@ -59,10 +65,48 @@ To start php's build-in server and test if everything did install correctly, you
And access wallabag at http://yourserverip:8000
Installing on Apache
--------------------
.. tip::
Assuming you install wallabag in the /var/www/wallabag folder and that you want to use php as an Apache module, here's a vhost for wallabag:
To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
On a shared hosting
~~~~~~~~~~~~~~~~~~~
We provide you a package with all dependancies inside.
The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``.
We already created a user: login and password are ``wallabag``.
.. caution:: With this package, wallabag don't check mandatory extensions used in the application (theses checks are made during ``composer install`` when you have a dedicated web server, see above).
Execute this command to download and extract the latest package:
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Now, read the following documentation to create your virtual host, then access to your wallabag.
If you changed the database configuration to use MySQL or PostgreSQL, you need to create a user via this command ``php bin/console wallabag:install --env=prod``.
Installation with Docker
------------------------
We provide you a Docker image to install wallabag easily. Have a look to our repository on `Docker Hub <https://hub.docker.com/r/wallabag/wallabag/>`__ to have more information.
Command to launch container
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
docker pull wallabag/wallabag
Virtual hosts
-------------
Configuration on Apache
~~~~~~~~~~~~~~~~~~~~~~~
Assuming you install wallabag in the ``/var/www/wallabag`` folder and that you want to use PHP as an Apache module, here's a vhost for wallabag:
::
@ -104,10 +148,10 @@ Assuming you install wallabag in the /var/www/wallabag folder and that you want
After reloading or restarting Apache, you should now be able to access wallabag at http://domain.tld.
Installing on Nginx
-------------------
Configuration on Nginx
~~~~~~~~~~~~~~~~~~~~~~
Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe for wallabag :
Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag :
::
@ -143,3 +187,68 @@ Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe
}
After reloading or restarting nginx, you should now be able to access wallabag at http://domain.tld.
.. tip::
When you want to import large file into wallabag, you need to add this line in your nginx configuration ``client_max_body_size XM; # allows file uploads up to X megabytes``.
Configuration on lighttpd
~~~~~~~~~~~~~~~~~~~~~~~~~
Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe for wallabag (edit your ``lighttpd.conf`` file and paste this configuration into it):
::
server.modules = (
"mod_fastcgi",
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
)
server.document-root = "/var/www/wallabag/web"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.follow-symlink = "enable"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html")
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
dir-listing.activate = "disable"
url.rewrite-if-not-file = (
"^/([^?])(?:\?(.))?" => "/app.php?$1&$2",
"^/([^?]*)" => "/app.php?=$1",
)
Rights access to the folders of the project
-------------------------------------------
Test environment
~~~~~~~~~~~~~~~~
When we just want to test wallabag, we just run the command ``php bin/console server:run --env=prod`` to start our wallabag instance and everything will go smoothly because the user who started the project can access to the current folder naturally, without any problem.
Production environment
~~~~~~~~~~~~~~~~~~~~~~
As soon as we use Apache or Nginx to access to our wallabag instance, and not from the command ``php bin/console server:run --env=prod`` to start it, we should take care to grant the good rights on the good folders to keep safe all the folders of the project.
To do so, the folder name, known as ``DocumentRoot`` (for apache) or ``root`` (for Nginx), has to be absolutely accessible by the Apache/Nginx user. Its name is generally ``www-data``, ``apache`` or ``nobody`` (depending on linux system used).
So the folder ``/var/www/wallabag/web`` has to be accessible by this last one. But this could be not enough if we just care about this folder, because we could meet a blank page or get an error 500 when trying to access to the homepage of the project.
This is due to the fact that we will need to grant the same rights access on the folder ``/var/www/wallabag/var`` like those we gave on the folder ``/var/www/wallabag/web``. Thus, we fix this problem with the following command:
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/var

View File

@ -11,13 +11,3 @@ you can check the ``Keep me logged in`` checkbox: wallabag will remember you for
.. image:: ../../img/user/login_form.png
:alt: Login form
:align: center
Frequently asked questions
--------------------------
I forgot my password
~~~~~~~~~~~~~~~~~~~~
You can reset your password by clicking on ``Forgot your password?`` link,
on the login page. Then, fill the form with your email address or your username,
you'll receive an email to reset your password.

View File

@ -0,0 +1,62 @@
Migrate from v1 or v2
=====================
From wallabag 1.x
-----------------
If you were using wallabag v1.x, you need to export your data before migrating to wallabag v2.x, because the application and its database changed a lot. In your old wallabag installation, you can export your data, which can be done on the Config page of your old wallabag installation.
.. image:: ../../img/user/export_v1.png
:alt: Exporting from wallabag v1
:align: center
.. note::
If you have multiple accounts on the same instance of wallabag, each user must export from v1 and import into v2 its data.
.. note::
If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.
When you have retrieved the json file containing your entries, you can install wallabag v2 if needed by following `the standard procedure <http://doc.wallabag.org/en/master/user/installation.html>`__.
After creating an user account on your new wallabag v2 instance, you must head over to the `Import` section and select `Import from wallabag v1`. Select your json file and upload it.
.. image:: ../../img/user/import_wallabagv1.png
:alt: Import from wallabag v1
:align: center
Import via command-line interface (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Please replace values:
* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
You'll have this in return:
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
From wallabag 2.x
-----------------
From the previous wallabag instance on which you were before, go to `All articles`, then export these articles as json.
.. image:: ../../img/user/export_v2.png
:alt: Export depuis wallabag v2
:align: center
From your new wallabag instance, create your user account and click on the link in the menu to proceed to import. Choose import from wallabag v2 and select your json file to upload it.
.. note::
If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.

32
docs/en/user/upgrade.rst Normal file
View File

@ -0,0 +1,32 @@
Upgrade wallabag
================
Upgrade on a dedicated web server
---------------------------------
The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.0.3`` by the last release number):
::
git fetch origin
git fetch --tags
git checkout 2.0.3
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console cache:clear --env=prod
Upgrade on a shared hosting
---------------------------
Backup your ``app/config/parameters.yml`` file.
Download the last release of wallabag:
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
If you use SQLite, you must also copy your ``data/`` folder inside the new installation.
Empty ``var/cache`` folder.

268
docs/fr/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
Contribuer à cette documentation
================================
Les sources de notre documentation sont ici https://github.com/wallabag/wallabag/tree/master/docs
Nous utilisons `ReadTheDocs
<https://readthedocs.org>`__ pour la générer.
Les pages sont écrites au format `Restructured Text
<https://fr.wikipedia.org/wiki/ReStructuredText>`__. Vous pouvez utiliser des outils en ligne comme http://rst.aaroniles.net/ ou http://rst.ninjs.org/ pour prévisualiser vos articles.
Si vous créez une nouvelle page, n'oubliez pas d'éditer le fichier `index.rst <https://raw.githubusercontent.com/wallabag/wallabag/master/docs/en/index.rst>`__ pour ajouter un lien dans la barre latérale.

View File

@ -13,15 +13,15 @@ Fichiers de traductions
cette traduction qui est considérée comme la plus récente. Merci de vous baser
sur celle-ci pour créer votre traduction.
Les principaux fichiers de traduction se trouvent ici : https://github.com/wallabag/wallabag/tree/v2/src/Wallabag/CoreBundle/Resources/translations.
Les principaux fichiers de traduction se trouvent ici : https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations.
Vous devez créer les fichiers ``messages.CODE.yml`` et ``validators.CODE.yml``,
où CODE est le code ISO 639-1 de votre langue (`cf wikipedia <https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1>`__).
Autres fichiers à traduire :
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/CraueConfigBundle/translations.
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/FOSUserBundle/translations.
- https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations.
- https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations.
Vous devez créer les fichiers ``LE_FICHIER_DE_TRADUCTION.CODE.yml``.
@ -29,7 +29,7 @@ Fichier de configuration
~~~~~~~~~~~~~~~~~~~~~~~~
Vous devez éditer `app/config/config.yml
<https://github.com/wallabag/wallabag/blob/v2/app/config/config.yml>`__ pour
<https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ pour
afficher votre langue dans la page Configuration de wallabag (pour permettre aux
utilisateurs de choisir cette nouvelle traduction).
@ -57,6 +57,6 @@ Documentation de wallabag
Contrairement à l'application, la langue principale de la documentation est l'anglais
Les fichiers de documentation se trouvent ici : https://github.com/wallabag/wallabag/tree/v2/docs
Les fichiers de documentation se trouvent ici : https://github.com/wallabag/wallabag/tree/master/docs
Vous devez respecter la structure du dossier ``en`` quand vous crééz votre traduction.

View File

@ -9,7 +9,7 @@ Documentation de wallabag
simplement darchiver une page web en ne conservant que le contenu. Les
éléments superflus (menu, publicité, etc.) sont supprimés.
.. note::
.. tip::
Vous vous trouvez sur la documentation de wallabag v2. Si vous voulez lire la documentation de wallabag v1, `vous pouvez jeter un œil ici <https://github.com/wallabag/documentation>`__.
@ -24,14 +24,17 @@ La documentation principale de cette application est découpée en plusieurs sec
:maxdepth: 2
:caption: Documentation utilisateur
user/faq
user/installation
user/upgrade
user/migration
user/import
user/create_account
user/login
user/configuration
user/first_article
user/errors_during_fetching
user/annotations
user/import
user/download_articles
user/filters
user/tags
@ -42,6 +45,8 @@ La documentation principale de cette application est découpée en plusieurs sec
:maxdepth: 2
:caption: Documentation développeur
developer/api
developer/docker
developer/documentation
developer/translate
developer/maintenance

View File

@ -1,9 +1,9 @@
Configuration
=============
Maintenant que vous êtes connecté, il est temps de confirurer votre compte.
Maintenant que vous êtes connecté, il est temps de configurer votre compte.
Cliquez sur le menu ``Configuration``. Vous avez accès à 5 onglets:
Cliquez sur le menu ``Configuration``. Vous avez accès à 5 onglets :
``Paramètres``, ``RSS``, ``Mon compte``, ``Mot de passe`` and ``Règles de tag automatiques``.
Paramètres
@ -14,7 +14,7 @@ Thème
L'affichage de wallabag est personnalisable. C'est ici que vous choisissez le thème
que vous préférez. Vous pouvez aussi en créer un nouveau, une documentation sera
disponible pour apprendre comment. Le thème par défaut ``Material``, c'est ce thème
disponible pour guider. Le thème par défaut est ``Material``, c'est celui
qui est utilisé dans les captures d'écran de la documentation.
Nombre d'articles par page
@ -22,6 +22,11 @@ Nombre d'articles par page
Vous pouvez définir le nombre d'articles affichés sur chaque page.
Vitesse de lecture
~~~~~~~~~~~~~~~~~~
wallabag calcule une durée de lecture pour chaque article. Vous pouvez définir ici, grâce à cette liste déroulante, si vous lisez plus ou moins vite. wallabag recalculera la durée de lecture de chaque article.
Langue
~~~~~~
@ -31,12 +36,12 @@ pour que la nouvelle langue soit prise en compte.
RSS
---
wallabag propose un flux RSS for chaque statut d'article : non lus, favoris and lus.
wallabag propose un flux RSS pour chaque statut d'article : non lus, favoris et lus.
Tout d'abord, vous devez vous créer un jeton personnel : cliquez sur ``Créez votre jeton``.
C'est possible de regénérer votre jeton en cliquant sur ``Réinitialisez votre jeton``.
Tout d'abord, vous devez vous créer un jeton personnel : cliquez sur ``Créez votre jeton``.
Il est possible de regénérer votre jeton en cliquant sur ``Réinitialisez votre jeton``.
Vous avez maintenant trois liens, un par statut : ajoutez les dans votre agrégateur de flux RSS préféré.
Vous avez maintenant trois liens, un par statut : ajoutez-les dans votre agrégateur de flux RSS préféré.
Vous pouvez aussi définir combien d'articles vous souhaitez dans vos flux RSS
(50 est la valeur par défaut).
@ -49,16 +54,16 @@ Vous pouvez ici modifier votre nom, votre adresse email et activer la ``Double a
Double authentification (2FA)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Two-factor authentication (also known as 2FA) is a technology patented in
1984 that provides identification of users by means of the combination of two different components.
L'authentification à deux facteurs (également appelée 2FA) est une technologie brevetée en 1984
qui fournit l'identification des utilisateurs au moyen de la combinaison de deux composants différents .
https://en.wikipedia.org/wiki/Two-factor_authentication
https://fr.wikipedia.org/wiki/Authentification_forte
Si vous activer 2FA, à chaque tentative de connexion à wallabag, vous recevrez
Si vous activez 2FA, à chaque tentative de connexion à wallabag, vous recevrez
un code par email. Vous devez renseigner ce code dans le formulaire suivant :
.. image:: ../../img/user/2FA_form.png
:alt: Two factor authentication
:alt: Authentification à deux facteurs
:align: center
Si vous ne souhaitez pas recevoir un code à chaque fois que vous vous connectez,
@ -89,15 +94,15 @@ Comment les utiliser ?
Admettons que vous voulez ajouter comme tag *« lecture rapide »* quand le temps de lecture
d'un article est inférieur à 3 minutes.
Dans ce cas, vous devez ajouter « readingTime <= 3 » dans le champ **Règle** et lecture rapide »* dans le champ **Tags**.
Plusieurs tags peuvent être ajoutés en même temps en les séparant par une virgule : lecture rapide, à lire »*.
Dans ce cas, vous devez ajouter « readingTime <= 3 » dans le champ **Règle** et  lecture rapide »* dans le champ **Tags**.
Plusieurs tags peuvent être ajoutés en même temps en les séparant par une virgule :  lecture rapide, à lire »*.
Des règles complexes peuvent être écrites en utilisant les opérateurs pré-définis :
if *« readingTime >= 5 AND domainName = "github.com" »* then tag as *« long reading, github »*.
Quels variables et opérateurs puis-je utiliser pour écrire mes règles ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Les variables et opérateurs suivants peuvent être utilisés lors de la création de vos règles :
Les variables et opérateurs suivants peuvent être utilisés lors de la création de vos règles :
=========== ============================================== ========== ==========
Variable Sens Opérateur Sens
@ -110,5 +115,5 @@ content Le contenu de l'article = Égal
language La langue de l'article != Différent de …
mimetype The type MIME de l'article OR Telle règle ou telle autre règle
readingTime Le temps de lecture de l'article, en minutes AND Telle règle et telle règle
domainName Le nom de domaine de l'article matches Contient telle chaine de caractère (insensible à la casse). Exemple : title matches "football"
domainName Le nom de domaine de l'article matches Contient telle chaîne de caractère (insensible à la casse). Exemple : title matches "football"
=========== ============================================== ========== ==========

View File

@ -4,14 +4,14 @@ Se créer un compte
Sur la page de connexion, cliquez sur le bouton ``Créer un compte``.
.. image:: ../../img/user/registration_form.png
:alt: Registration form
:alt: Formulaire de création de compte
:align: center
Vous devez renseigner le formulaire. Faites attention de bien renseigner une adresse
email valide, nous allons vous envoyer un email d'activation.
.. image:: ../../img/user/sent_email.png
:alt: Email was sent to activate account
:alt: Un email a été envoyé pour activer votre compte
:align: center
Vérifiez votre boite de réception, vous avez un nouvel email avec un lien comme celui-ci
@ -21,26 +21,5 @@ Cliquez dessus pour activer votre compte.
Votre compte est maintenant actif.
.. image:: ../../img/user/activated_account.png
:alt: Welcome on board!
:alt: Bienvenue à bord !
:align: center
Foire aux questions
-------------------
Je ne peux pas valider le formulaire de création de compte
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Soyez sur d'avoir bien renseigné tous les champs :
* une adresse email valide
* le même mot de passe dans les deux champs
Je n'ai pas reçu mon email d'activation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Êtes-vous sur d'avoir renseigné votre bonne adresse ? Avez-vous vérifié le dossier de spams ?
Quand je clique sur le lien d'activation, j'ai ce message : ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vous avez déjà activé votre compte ou l'URL d'activation n'est pas correcte.

View File

@ -6,12 +6,12 @@ Vous pouvez télécharger chaque article dans plusieurs formats : ePUB, MOBI, PD
Lorsque vous lisez un article, cliquez sur cette icône dans la barre latérale :
.. image:: ../../img/user/download_article.png
:alt: download article
:alt: Télécharger l'article
:align: center
Vous pouvez aussi télécharger une catégorie (non lus, favoris, lus) dans ces formats.
Par exemple, dans la vue **Non lus**, cliquez sur cette icône dans la barre supérieure :
.. image:: ../../img/user/download_articles.png
:alt: download articles
:alt: Télécharger l'article
:align: center

View File

@ -12,9 +12,9 @@ Il peut y avoir plusieurs raisons :
Comment puis-je aider pour réparer ça ?
---------------------------------------
- `en nous envoyant un email avec l'URL de l'article <mailto:hello@wallabag.org>`_
- `en nous envoyant un email avec l'URL de l'article <mailto:hello\@wallabag.org>`_
- en essayant de réparer cet article par vous-même :) en créant un fichier pour l'article.
Vous pouvez utiliser cet outil http://siteconfig.fivefilters.org/.
Vous pouvez utiliser `cet outil <http://siteconfig.fivefilters.org/>`__.
Comment puis-je réessayer de récupérer le contenu ?
---------------------------------------------------
@ -23,5 +23,5 @@ Si wallabag échoue en récupérant l'article, vous pouvez cliquer sur le bouton
(le troisième sur l'image ci-dessous).
.. image:: ../../img/user/refetch.png
:alt: Refetch content
:alt: Réessayer de récupérer le contenu
:align: center

35
docs/fr/user/faq.rst Normal file
View File

@ -0,0 +1,35 @@
Foire Aux Questions
===================
Durant l'installation, je rencontre cette erreur ``Error Output: sh: 1: @post-cmd: not found``
----------------------------------------------------------------------------------------------
Il semblerait que vous ayiez un problème avec votre installation de ``composer``. Essayez de le désinstaller puis de le réinstaller.
`Vous pouvez lire la documentation de composer pour savoir comment l'installer
<https://getcomposer.org/doc/00-intro.md>`__.
Je ne peux pas valider le formulaire de création de compte
----------------------------------------------------------
Soyez sur d'avoir bien renseigné tous les champs :
* une adresse email valide
* le même mot de passe dans les deux champs
Je n'ai pas reçu mon email d'activation
---------------------------------------
Êtes-vous sur d'avoir renseigné votre bonne adresse ? Avez-vous vérifié le dossier de spams ?
Quand je clique sur le lien d'activation, j'ai ce message : ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
----------------------------------------------------------------------------------------------------------------------------------
Vous avez déjà activé votre compte ou l'URL d'activation n'est pas correcte.
J'ai oublié mon mot de passe
----------------------------
Vous pouvez réinitialiser votre mot de passe en cliquant sur ``Mot de passe oublié ?``,
sur la page de connexion. Ensuite, renseignez votre adresse email ou votre nom d'utilisateur,
un email vous sera envoyé.

View File

@ -1,2 +1,50 @@
Filtres
=======
Pour retrouver plus facilement vos articles, vous pouvez utiliser les filtres.
Cliquez sur la troisième icône de la barre supérieure.
.. image:: ../../img/user/topbar.png
:alt: Barre supérieure
:align: center
Tous ces filtres peuvent être combinés.
.. image:: ../../img/user/filters.png
:alt: Combine all filters
:align: center
Statut
------
Utilisez ces cases à cocher pour retrouver les articles lus ou mis en favori.
Image de prévisualisation
-------------------------
Cochez ce filtre si vous voulez retrouver les articles avec une image de prévisualisation.
Langage
-------
wallabag (via graby) peut détecter la langue dans laquelle l'article est écrit.
C'est ainsi facile pour vous de retrouver des articles écrits dans une langue spécifique.
Temps de lecture
----------------
wallabag estime combien de temps vous avez besoin pour lire un article.
Avec ce filtre, vous pouvez par exemple retrouver les articles qui ont une estimation
entre 2 et 5 minutes.
Nom de domaine
--------------
Grâce à ce filtre, vous pouvez retrouver les articles venant d'un même nom de domaine.
Par exemple, dans ce champ, saisissez ``lemonde.fr`` pour retrouver les articles de ce site.
Date de création
----------------
Quand vous ajoutez un article, wallabag stocke la date courante.
C'est très pratique pour retrouver les articles ajoutés entre le 1er et le 31 janvier par exemple.

View File

@ -25,7 +25,7 @@ Dans la barre haut de wallabag, vous avez trois icônes. Avec la première icôn
un signe plus, vous pouvez facilement ajouter un nouvel article.
.. image:: ../../img/user/topbar.png
:alt: Top bar
:alt: Barre supérieure
:align: center
Cliquez dessus pour afficher un nouveau champ, collez-y l'URL de l'article et appuyez

View File

@ -1,42 +1,5 @@
Migrer à wallabag
=================
Depuis wallabag
---------------
Exportez vos données de wallabag 1.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sur la page de configuration, cliquez sur ``Export JSON`` dans la section ``Exportez vos données wallabag``.
.. image:: ../../img/user/export_wllbg_1.png
:alt: Export from wallabag 1.x
:align: center
Vous obtiendrez un fichier ``wallabag-export-1-1970-01-01.json``.
Exportez vos données de wallabag 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans la barre latérale de téléchargement, cliquez sur ``JSON``.
.. image:: ../../img/user/export_wllbg_2.png
:alt: Export from wallabag 2.x
:align: center
Vous obtiendrez un fichier ``Unread articles.json``.
Importez vos données wallabag 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Cliquez sur le lien ``Importer`` dans le menu, choisissez la version de wallabag correspondante,
sélectionnez votre fichier d'export sur votre ordinateur et importez-le.
.. image:: ../../img/user/import_wllbg.png
:alt: Import from wallabag 1.x
:align: center
Tous vos articles wallabag seront importés.
Migrer depuis un service externe
================================
Depuis Pocket
-------------
@ -53,7 +16,7 @@ Vous devez créer une nouvelle application sur leur site dédié aux développeu
termes d'utilisation du service et soumettez votre application
Pocket vous fournira une **Consumer Key** (par exemple, `49961-985e4b92fe21fe4c78d682c1`).
Vous devez configurer la ``pocket_consumer_key`` dans le fichier ``app/config/parameters.yml``.
Vous devez configurer la ``pocket_consumer_key`` dans la section ``Import`` du menu ``Configuration interne``.
Maintenant, tout est bien configuré pour migrer depuis Pocket.

View File

@ -4,9 +4,9 @@ Installer wallabag
Pré-requis
------------
wallabag est compatible avec php >= 5.5
wallabag est compatible avec PHP >= 5.5, PHP 7 inclus.
Vous aurez besoin des extensions suivantes pour que wallabag fonctionne. Il est possible que certaines de ces extensions soient déjà activées dans votre version de php, donc vous n'avez pas forcément besoin d'installer tous les paquets correspondants.
Vous aurez besoin des extensions suivantes pour que wallabag fonctionne. Il est possible que certaines de ces extensions soient déjà activées dans votre version de PHP, donc vous n'avez pas forcément besoin d'installer tous les paquets correspondants.
- php-session
- php-ctype
@ -25,13 +25,16 @@ Vous aurez besoin des extensions suivantes pour que wallabag fonctionne. Il est
wallabag utilise PDO afin de se connecter à une base de données, donc vous aurez besoin d'une extension et d'un système de bases de données parmi :
- php-pdo_mysql
- php-pdo_sqlite
- php-pdo_pgsql
- pdo_mysql
- pdo_sqlite
- pdo_pgsql
Installation
------------
Sur un serveur dédié (méthode conseillée)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait.
Installation de Composer :
@ -40,13 +43,16 @@ Installation de Composer :
curl -s http://getcomposer.org/installer | php
Vous pouvez trouver des instructions spécifiques ici (en anglais) : __ https://getcomposer.org/doc/00-intro.md
Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__ :
Pour installer wallabag, vous devez exécuter ces deux commandes :
::
SYMFONY_ENV=prod composer create-project wallabag/wallabag wallabag "2.0.0-beta.1" --no-dev
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
Pour démarrer le serveur interne à php et vérifier que tout s'est installé correctement, vous pouvez exécuter :
@ -57,10 +63,47 @@ Pour démarrer le serveur interne à php et vérifier que tout s'est installé c
Et accéder wallabag à l'adresse http://lipdevotreserveur:8000
Installation avec Apache
.. tip::
Pour définir des paramètres via des variables d'environnement, vous pouvez les spécifier avec le préfixe ``SYMFONY__``. Par exemple, ``SYMFONY__DATABASE_DRIVER``. Vous pouvez lire `documentation Symfony <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ pour en savoir plus.
Sur un serveur mutualisé
~~~~~~~~~~~~~~~~~~~~~~~~
Nous mettons à votre disposition une archive avec toutes les dépendances à l'intérieur.
La configuration par défaut utilise SQLite pour la base de données. Si vous souhaitez changer ces paramètres, vous devez modifier le fichier ``app/config/parameters.yml``.
Nous avons déjà créé un utilisateur : le login et le mot de passe sont ``wallabag``.
.. caution:: Avec cette archive, wallabag ne vérifie pas si les extensions obligatoires sont présentes sur votre serveur pour bien fonctionner (ces vérifications sont faites durant le ``composer install`` quand vous avez un serveur dédié, voir ci-dessus).
Exécutez cette commande pour télécharger et décompresser l'archive :
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Maintenant, lisez la documentation ci-dessous pour crééer un virtual host. Accédez ensuite à votre installation de wallabag.
Si vous avez changé la configuration pour modifier le type de stockage (MySQL ou PostgreSQL), vous devrez vous créer un utilisateur via la commande ``php bin/console wallabag:install --env=prod``.
Installation avec Docker
------------------------
En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallabag et que vous utilisiez php comme un module Apache, voici un vhost pour wallabag :
Nous vous proposons une image Docker pour installer wallabag facilement. Allez voir du côté de `Docker Hub <https://hub.docker.com/r/wallabag/wallabag/>`__ pour plus d'informations.
Commande pour démarrer le containeur
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
docker pull wallabag/wallabag
Virtual hosts
-------------
Configuration avec Apache
~~~~~~~~~~~~~~~~~~~~~~~~~
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag`` et que vous utilisiez PHP comme un module Apache, voici un vhost pour wallabag :
::
@ -102,10 +145,10 @@ En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallab
Après que vous ayez rechargé/redémarré Apache, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
Installation avec Nginx
-----------------------
Configuration avec Nginx
~~~~~~~~~~~~~~~~~~~~~~~~
En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallabag, voici un fichier de configuration Nginx pour wallabag :
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag``, voici un fichier de configuration Nginx pour wallabag :
::
@ -141,3 +184,68 @@ En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallab
}
Après que vous ayez rechargé/redémarré Nginx, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
.. tip::
Si vous voulez importer un fichier important dans wallabag, vous devez ajouter cette ligne dans votre configuration nginx ``client_max_body_size XM; # allows file uploads up to X megabytes``.
Configuration avec lighttpd
~~~~~~~~~~~~~~~~~~~~~~~~~~~
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag``, voici un fichier de configuration pour wallabag (éditez votre fichier ``lighttpd.conf`` collez-y cette configuration) :
::
server.modules = (
"mod_fastcgi",
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
)
server.document-root = "/var/www/wallabag/web"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.follow-symlink = "enable"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html")
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
dir-listing.activate = "disable"
url.rewrite-if-not-file = (
"^/([^?])(?:\?(.))?" => "/app.php?$1&$2",
"^/([^?]*)" => "/app.php?=$1",
)
Droits d'accès aux dossiers du projet
-------------------------------------
Environnement de test
~~~~~~~~~~~~~~~~~~~~~
Quand nous souhaitons juste tester wallabag, nous lançons simplement la commande ``php bin/console server:run --env=prod`` pour démarrer l'instance wallabag et tout se passe correctement car l'utilisateur qui a démarré le projet a accès naturellement au repertoire courant, tout va bien.
Environnement de production
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dès lors que nous utilisons Apache ou Nginx pour accéder à notre instance wallabag, et non plus la commande ``php bin/console server:run --env=prod`` pour la démarrer, il faut prendre garde à octroyer les bons droits aux bons dossiers afin de préserver la sécurité de l'ensemble des fichiers fournis par le projet.
Aussi, le dossier, connu sous le nom de ``DocumentRoot`` (pour apache) ou ``root`` (pour Nginx), doit être impérativement accessible par l'utilisateur de Apache ou Nginx. Le nom de cet utilisateur est généralement ``www-data``, ``apache`` ou ``nobody`` (selon les systèmes linux utilisés).
Donc le dossier ``/var/www/wallabag/web`` doit être accessible par ce dernier. Mais cela ne suffira pas si nous nous contentons de ce dossier, et nous pourrions avoir, au mieux une page blanche en accédant à la page d'accueil du projet, au pire une erreur 500.
Cela est dû au fait qu'il faut aussi octroyer les mêmes droits d'accès au dossier ``/var/www/wallabag/var`` que ceux octroyés au dossier ``/var/www/wallabag/web``. Ainsi, on règle le problème par la commande suivante :
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/var

View File

@ -9,15 +9,5 @@ Si vous êtes sur un ordinateur de confiance et que vous souhaitez rester connec
vous pouvez cocher la case ``Restez connecté`` : wallabag se souviendra de vous pour un an.
.. image:: ../../img/user/login_form.png
:alt: Login form
:alt: Formulaire de connexion
:align: center
Foire aux questions
-------------------
J'ai oublié mon mot de passe
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vous pouvez réinitialiser votre mot de passe en cliquant sur ``Mot de passe oublié ?``,
sur la page de connexion. Ensuite, renseignez votre adresse email ou votre nom d'utilisateur,
un email vous sera envoyé.

View File

@ -0,0 +1,62 @@
Migrer depuis la v1 ou la v2
============================
Depuis wallabag 1.x
-------------------
Si vous utilisiez wallabag v1.x, vous devez exporter vos données avant de migrer à wallabag v2.x, à cause du changement complet de l'application et de sa base de données. Sur votre ancienne instance de wallabag v1, vous pouvez exporter vos données en allant sur la page de configuration de l'application.
.. image:: ../../img/user/export_v1.png
:alt: Export depuis wallabag v1
:align: center
.. note::
Si vous avez plusieurs comptes sur la même instance de wallabag, chaque utilisateur doit exporter ses données depuis wallabag v1 et les importer dans la v2.
.. note::
S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.
Une fois que vous avez récupéré le fichier json contenant vos données, vous pouvez installer wallabag v2 si c'est nécessaire en suivant `la procédure standard <http://doc.wallabag.org/fr/master/user/installation.html>`__.
Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance de wallabag v2, rendez-vous dans la section `Import`. Vous devez choisir l'import depuis wallabag v1 puis sélectionner votre fichier json récupéré précédemment.
.. image:: ../../img/user/import_wallabagv1.png
:alt: Import depuis wallabag v1
:align: center
Import via via la ligne de commande (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Remplacez les valeurs :
* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
Vous obtiendrez :
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
Depuis wallabag 2.x
-------------------
Depuis l'instance sur laquelle vous étiez, rendez-vous dans la section `Tous les articles`, puis exportez ces articles au format json.
.. image:: ../../img/user/export_v2.png
:alt: Export depuis wallabag v2
:align: center
Depuis votre nouvelle instance de wallabag, créez votre compte utilisateur puis cliquez sur le lien dans le menu pour accéder à l'import. Choisissez l'import depuis wallabag v2 puis sélectionnez votre fichier json pour l'uploader.
.. note::
S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.

32
docs/fr/user/upgrade.rst Normal file
View File

@ -0,0 +1,32 @@
Mettre à jour wallabag
======================
Mise à jour sur un serveur dédié
--------------------------------
La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.0.3`` par le numéro de la dernière version) :
::
git fetch origin
git fetch --tags
git checkout 2.0.3
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console cache:clear --env=prod
Mise à jour sur un hébergement mutualisé
----------------------------------------
Effectuez une sauvegarde du fichier ``app/config/parameters.yml``.
Téléchargez la dernière version de wallabag :
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
Si vous utilisez SQLite, vous devez également conserver le contenu du répertoire ``data/``.
Videz le répertoire ``var/cache``.

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
docs/img/user/export_v1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/img/user/export_v2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
docs/img/user/filters.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
#
# wallabag documentation build configuration file, created by
# sphinx-quickstart on Fri Oct 16 06:47:23 2015.
import sys
import os
extensions = []
templates_path = ['_templates']
source_suffix = '.rst'
master_doc = 'index'
project = u'wallabag-pt'
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
version = '2.0.0'
release = version
exclude_patterns = ['_build']
pygments_style = 'sphinx'
html_theme = 'default'
html_static_path = ['_static']
htmlhelp_basename = 'wallabagfrdoc'
latex_elements = {
}
latex_documents = [
('index', 'wallabag-pt.tex', u'wallabag Documentation',
u'Nicolas Lœuillet', 'manual'),
]
man_pages = [
('index', 'wallabagpt', u'wallabag Documentation',
[u'Nicolas Lœuillet'], 1)
]
texinfo_documents = [
('index', 'wallabag', u'wallabag Documentation',
u'Nicolas Lœuillet', 'wallabag', 'wallabag is an opensource read-it-later.',
'Miscellaneous'),
]
##### Guzzle sphinx theme
import guzzle_sphinx_theme
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
html_theme_path = guzzle_sphinx_theme.html_theme_path()
html_theme = 'guzzle_sphinx_theme'
# Custom sidebar templates, maps document names to template names.
html_sidebars = {
'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']
}
# Register the theme as an extension to generate a sitemap.xml
extensions.append("guzzle_sphinx_theme")

View File

@ -1,36 +0,0 @@
wallabag documentation
======================
.. image:: ../img/wallabag.png
:alt: wallabag logo
:align: center
**wallabag** É uma aplicação "leia mais tarde": Ele salva páginas da web mantendo apenas o conteúdo. Elementos como ícones de navegação ou propaganda são deletedos.
A documentação principal desta aplicação é organizada em duas seções:
* :ref:`doc-usuario`
* :ref:`doc-desenvolvedor`
.. _user-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do usuário
user/criar_conta
user/login
user/configuração
user/primeiro_artigo
user/importar
user/baixar_artigos
user/filtros
user/tags
.. _dev-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do desenvolvedor
developer/docker

View File

@ -1,2 +0,0 @@
Sphinx>=1.3.0,<1.4.0
guzzle_sphinx_theme>=0.7.0,<0.8.0

View File

@ -30,7 +30,7 @@ class WallabagAnnotationController extends FOSRestController
->getRepository('WallabagAnnotationBundle:Annotation')
->findAnnotationsByPageId($entry->getId(), $this->getUser()->getId());
$total = count($annotationRows);
$annotations = array('total' => $total, 'rows' => $annotationRows);
$annotations = ['total' => $total, 'rows' => $annotationRows];
$json = $this->get('serializer')->serialize($annotations, 'json');
@ -141,6 +141,6 @@ class WallabagAnnotationController extends FOSRestController
*/
private function renderJsonResponse($json, $code = 200)
{
return new Response($json, $code, array('application/json'));
return new Response($json, $code, ['application/json']);
}
}

View File

@ -82,7 +82,7 @@ class Annotation
/*
* @param User $user
*/
public function __construct(\Wallabag\UserBundle\Entity\User $user)
public function __construct(User $user)
{
$this->user = $user;
}
@ -204,7 +204,7 @@ class Annotation
/**
* Set user.
*
* @param string $user
* @param User $user
*
* @return Annotation
*/
@ -218,7 +218,7 @@ class Annotation
/**
* Get user.
*
* @return string
* @return User
*/
public function getUser()
{

View File

@ -88,4 +88,22 @@ class AnnotationRepository extends EntityRepository
->getQuery()
->getOneOrNullResult();
}
/**
* Used only in test case to get the right annotation associated to the right user.
*
* @param string $username
*
* @return Annotation
*/
public function findOneByUsername($username)
{
return $this->createQueryBuilder('a')
->leftJoin('a.user', 'u')
->where('u.username = :username')->setParameter('username', $username)
->orderBy('a.id', 'DESC')
->setMaxResults(1)
->getQuery()
->getSingleResult();
}
}

View File

@ -11,11 +11,12 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
$annotation = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
->findOneBy(array('user' => 1));
->findOneByUsername('admin');
if (!$annotation) {
$this->markTestSkipped('No content found in db.');
}
$this->logInAs('admin');
$crawler = $this->client->request('GET', 'annotations/'.$annotation->getEntry()->getId().'.json');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -32,18 +33,25 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(array('user' => 1));
->findOneByUsernameAndNotArchived('admin');
$headers = array('CONTENT_TYPE' => 'application/json');
$content = json_encode(array(
$headers = ['CONTENT_TYPE' => 'application/json'];
$content = json_encode([
'text' => 'my annotation',
'quote' => 'my quote',
'range' => '[{"start":"","startOffset":24,"end":"","endOffset":31}]',
));
$crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', array(), array(), $headers, $content);
'ranges' => ['start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31],
]);
$crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', [], [], $headers, $content);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals('Big boss', $content['user']);
$this->assertEquals('v1.0', $content['annotator_schema_version']);
$this->assertEquals('my annotation', $content['text']);
$this->assertEquals('my quote', $content['quote']);
$annotation = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
@ -57,25 +65,56 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
$annotation = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
->findOneBy(array('user' => 1));
->findOneByUsername('admin');
$this->logInAs('admin');
$headers = array('CONTENT_TYPE' => 'application/json');
$content = json_encode(array(
$headers = ['CONTENT_TYPE' => 'application/json'];
$content = json_encode([
'text' => 'a modified annotation',
));
$crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', array(), array(), $headers, $content);
]);
$crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals('Big boss', $content['user']);
$this->assertEquals('v1.0', $content['annotator_schema_version']);
$this->assertEquals('a modified annotation', $content['text']);
$this->assertEquals('my quote', $content['quote']);
$annotationUpdated = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
->findOneById($annotation->getId());
$this->assertEquals('a modified annotation', $annotationUpdated->getText());
}
public function testDeleteAnnotation()
{
$annotation = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
->findOneByUsername('admin');
$this->logInAs('admin');
$headers = ['CONTENT_TYPE' => 'application/json'];
$content = json_encode([
'text' => 'a modified annotation',
]);
$crawler = $this->client->request('DELETE', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals('a modified annotation', $content['text']);
$annotationUpdated = $this->client->getContainer()
$annotationDeleted = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagAnnotationBundle:Annotation')
->findAnnotationById($annotation->getId());
$this->assertEquals('a modified annotation', $annotationUpdated->getText());
->findOneById($annotation->getId());
$this->assertNull($annotationDeleted);
}
}

View File

@ -26,10 +26,10 @@ abstract class WallabagAnnotationTestCase extends WebTestCase
{
$crawler = $this->client->request('GET', '/login');
$form = $crawler->filter('button[type=submit]')->form();
$data = array(
$data = [
'_username' => $username,
'_password' => 'mypassword',
);
];
$this->client->submit($form, $data);
}
@ -48,7 +48,7 @@ abstract class WallabagAnnotationTestCase extends WebTestCase
$loginManager = $container->get('fos_user.security.login_manager');
$firewallName = $container->getParameter('fos_user.firewall_name');
$this->user = $userManager->findUserBy(array('username' => 'admin'));
$this->user = $userManager->findUserBy(['username' => 'admin']);
$loginManager->loginUser($firewallName, $this->user);
// save the login token into the session and put it in a cookie

View File

@ -27,13 +27,13 @@ class WallabagRestController extends FOSRestController
*
* @ApiDoc(
* parameters={
* {"name"="archive", "dataType"="boolean", "required"=false, "format"="true or false, all entries by default", "description"="filter by archived status."},
* {"name"="star", "dataType"="boolean", "required"=false, "format"="true or false, all entries by default", "description"="filter by starred status."},
* {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0, all entries by default", "description"="filter by archived status."},
* {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0, all entries by default", "description"="filter by starred status."},
* {"name"="sort", "dataType"="string", "required"=false, "format"="'created' or 'updated', default 'created'", "description"="sort entries by date."},
* {"name"="order", "dataType"="string", "required"=false, "format"="'asc' or 'desc', default 'desc'", "description"="order of sort."},
* {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."},
* {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."},
* {"name"="tags", "dataType"="string", "required"=false, "format"="api%2Crest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."},
* {"name"="tags", "dataType"="string", "required"=false, "format"="api,rest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."},
* }
* )
*
@ -43,8 +43,8 @@ class WallabagRestController extends FOSRestController
{
$this->validateAuthentication();
$isArchived = $request->query->get('archive');
$isStarred = $request->query->get('star');
$isArchived = (null === $request->query->get('archive')) ? null : (bool) $request->query->get('archive');
$isStarred = (null === $request->query->get('starred')) ? null : (bool) $request->query->get('starred');
$sort = $request->query->get('sort', 'created');
$order = $request->query->get('order', 'desc');
$page = (int) $request->query->get('page', 1);
@ -97,6 +97,8 @@ class WallabagRestController extends FOSRestController
* {"name"="url", "dataType"="string", "required"=true, "format"="http://www.test.com/article.html", "description"="Url for the entry."},
* {"name"="title", "dataType"="string", "required"=false, "description"="Optional, we'll get the title from the page."},
* {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
* {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already starred"},
* {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already archived"},
* }
* )
*
@ -107,19 +109,39 @@ class WallabagRestController extends FOSRestController
$this->validateAuthentication();
$url = $request->request->get('url');
$title = $request->request->get('title');
$isArchived = (int) $request->request->get('archive');
$isStarred = (int) $request->request->get('starred');
$entry = $this->get('wallabag_core.content_proxy')->updateEntry(
new Entry($this->getUser()),
$url
);
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId());
if (false === $entry) {
$entry = $this->get('wallabag_core.content_proxy')->updateEntry(
new Entry($this->getUser()),
$url
);
}
if (!is_null($title)) {
$entry->setTitle($title);
}
$tags = $request->request->get('tags', '');
if (!empty($tags)) {
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
}
if (!is_null($isStarred)) {
$entry->setStarred((bool) $isStarred);
}
if (!is_null($isArchived)) {
$entry->setArchived((bool) $isArchived);
}
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
$json = $this->get('serializer')->serialize($entry, 'json');
@ -137,8 +159,8 @@ class WallabagRestController extends FOSRestController
* parameters={
* {"name"="title", "dataType"="string", "required"=false},
* {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
* {"name"="archive", "dataType"="boolean", "required"=false, "format"="true or false", "description"="archived the entry."},
* {"name"="star", "dataType"="boolean", "required"=false, "format"="true or false", "description"="starred the entry."},
* {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="archived the entry."},
* {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="starred the entry."},
* }
* )
*
@ -150,19 +172,19 @@ class WallabagRestController extends FOSRestController
$this->validateUserAccess($entry->getUser()->getId());
$title = $request->request->get('title');
$isArchived = $request->request->get('archive');
$isStarred = $request->request->get('star');
$isArchived = (int) $request->request->get('archive');
$isStarred = (int) $request->request->get('starred');
if (!is_null($title)) {
$entry->setTitle($title);
}
if (!is_null($isArchived)) {
$entry->setArchived($isArchived);
$entry->setArchived((bool) $isArchived);
}
if (!is_null($isStarred)) {
$entry->setStarred($isStarred);
$entry->setStarred((bool) $isStarred);
}
$tags = $request->request->get('tags', '');
@ -327,6 +349,21 @@ class WallabagRestController extends FOSRestController
return $this->renderJsonResponse($json);
}
/**
* Retrieve version number.
*
* @ApiDoc()
*
* @return Response
*/
public function getVersionAction()
{
$version = $this->container->getParameter('wallabag_core.version');
$json = $this->get('serializer')->serialize($version, 'json');
return $this->renderJsonResponse($json);
}
/**
* Validate that the first id is equal to the second one.
@ -352,6 +389,6 @@ class WallabagRestController extends FOSRestController
*/
private function renderJsonResponse($json)
{
return new Response($json, 200, array('application/json'));
return new Response($json, 200, ['application/json']);
}
}

View File

@ -13,7 +13,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(array('user' => 1, 'isArchived' => false));
->findOneBy(['user' => 1, 'isArchived' => false]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
@ -27,6 +27,9 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->assertEquals($entry->getTitle(), $content['title']);
$this->assertEquals($entry->getUrl(), $content['url']);
$this->assertCount(count($entry->getTags()), $content['tags']);
$this->assertEquals($entry->getUserName(), $content['user_name']);
$this->assertEquals($entry->getUserEmail(), $content['user_email']);
$this->assertEquals($entry->getUserId(), $content['user_id']);
$this->assertTrue(
$this->client->getResponse()->headers->contains(
@ -41,7 +44,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(array('user' => 2, 'isArchived' => false));
->findOneBy(['user' => 2, 'isArchived' => false]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
@ -76,7 +79,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
public function testGetStarredEntries()
{
$this->client->request('GET', '/api/entries', array('star' => 1, 'sort' => 'updated'));
$this->client->request('GET', '/api/entries', ['star' => 1, 'sort' => 'updated']);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -98,7 +101,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
public function testGetArchiveEntries()
{
$this->client->request('GET', '/api/entries', array('archive' => 1));
$this->client->request('GET', '/api/entries', ['archive' => 1]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -146,10 +149,11 @@ class WallabagRestControllerTest extends WallabagApiTestCase
public function testPostEntry()
{
$this->client->request('POST', '/api/entries.json', array(
$this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
'tags' => 'google',
));
'title' => 'New title for my article',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -159,9 +163,67 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']);
$this->assertEquals(false, $content['is_archived']);
$this->assertEquals(false, $content['is_starred']);
$this->assertEquals('New title for my article', $content['title']);
$this->assertEquals(1, $content['user_id']);
$this->assertCount(1, $content['tags']);
}
public function testPostSameEntry()
{
$this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
'archive' => '1',
'tags' => 'google, apple',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertGreaterThan(0, $content['id']);
$this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']);
$this->assertEquals(true, $content['is_archived']);
$this->assertEquals(false, $content['is_starred']);
$this->assertCount(2, $content['tags']);
}
public function testPostArchivedAndStarredEntry()
{
$this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html',
'archive' => '1',
'starred' => '1',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertGreaterThan(0, $content['id']);
$this->assertEquals('http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', $content['url']);
$this->assertEquals(true, $content['is_archived']);
$this->assertEquals(true, $content['is_starred']);
$this->assertEquals(1, $content['user_id']);
}
public function testPostArchivedAndStarredEntryWithoutQuotes()
{
$this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html',
'archive' => 0,
'starred' => 1,
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertGreaterThan(0, $content['id']);
$this->assertEquals('http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', $content['url']);
$this->assertEquals(false, $content['is_archived']);
$this->assertEquals(true, $content['is_starred']);
}
public function testPatchEntry()
{
$entry = $this->client->getContainer()
@ -176,12 +238,44 @@ class WallabagRestControllerTest extends WallabagApiTestCase
// hydrate the tags relations
$nbTags = count($entry->getTags());
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', array(
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
'title' => 'New awesome title',
'tags' => 'new tag '.uniqid(),
'star' => true,
'archive' => false,
));
'starred' => '1',
'archive' => '0',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals($entry->getId(), $content['id']);
$this->assertEquals($entry->getUrl(), $content['url']);
$this->assertEquals('New awesome title', $content['title']);
$this->assertGreaterThan($nbTags, count($content['tags']));
$this->assertEquals(1, $content['user_id']);
}
public function testPatchEntryWithoutQuotes()
{
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneByUser(1);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
}
// hydrate the tags relations
$nbTags = count($entry->getTags());
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
'title' => 'New awesome title',
'tags' => 'new tag '.uniqid(),
'starred' => 1,
'archive' => 0,
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -206,9 +300,9 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->markTestSkipped('No content found in db.');
}
$tags = array();
$tags = [];
foreach ($entry->getTags() as $tag) {
$tags[] = array('id' => $tag->getId(), 'label' => $tag->getLabel(), 'slug' => $tag->getSlug());
$tags[] = ['id' => $tag->getId(), 'label' => $tag->getLabel(), 'slug' => $tag->getSlug()];
}
$this->client->request('GET', '/api/entries/'.$entry->getId().'/tags');
@ -231,7 +325,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$newTags = 'tag1,tag2,tag3';
$this->client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags));
$this->client->request('POST', '/api/entries/'.$entry->getId().'/tags', ['tags' => $newTags]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@ -245,7 +339,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
->getRepository('WallabagCoreBundle:Entry')
->find($entry->getId());
$tagsInDB = array();
$tagsInDB = [];
foreach ($entryDB->getTags()->toArray() as $tag) {
$tagsInDB[$tag->getId()] = $tag->getLabel();
}
@ -318,4 +412,15 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->assertCount(0, $entries);
}
public function testGetVersion()
{
$this->client->request('GET', '/api/version');
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals($this->client->getContainer()->getParameter('wallabag_core.version'), $content);
}
}

View File

@ -36,7 +36,7 @@ abstract class WallabagApiTestCase extends WebTestCase
$loginManager = $container->get('fos_user.security.login_manager');
$firewallName = $container->getParameter('fos_user.firewall_name');
$this->user = $userManager->findUserBy(array('username' => 'admin'));
$this->user = $userManager->findUserBy(['username' => 'admin']);
$loginManager->loginUser($firewallName, $this->user);
// save the login token into the session and put it in a cookie

View File

@ -60,6 +60,7 @@ class InstallCommand extends ContainerAwareCommand
->checkRequirements()
->setupDatabase()
->setupAdmin()
->setupConfig()
->setupAsset()
;
@ -69,40 +70,40 @@ class InstallCommand extends ContainerAwareCommand
protected function checkRequirements()
{
$this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>');
$this->defaultOutput->writeln('<info><comment>Step 1 of 5.</comment> Checking system requirements.</info>');
$fulfilled = true;
$label = '<comment>PDO Drivers</comment>';
if (extension_loaded('pdo_sqlite') || extension_loaded('pdo_mysql') || extension_loaded('pdo_pgsql')) {
$status = '<info>OK!</info>';
$help = '';
} else {
$label = '<comment>PDO Driver</comment>';
$status = '<info>OK!</info>';
$help = '';
if (!extension_loaded($this->getContainer()->getParameter('database_driver'))) {
$fulfilled = false;
$status = '<error>ERROR!</error>';
$help = 'Needs one of sqlite, mysql or pgsql PDO drivers';
$help = 'Database driver "'.$this->getContainer()->getParameter('database_driver').'" is not installed.';
}
$rows[] = array($label, $status, $help);
$rows = [];
$rows[] = [$label, $status, $help];
foreach ($this->functionExists as $functionRequired) {
$label = '<comment>'.$functionRequired.'</comment>';
$status = '<info>OK!</info>';
$help = '';
if (function_exists($functionRequired)) {
$status = '<info>OK!</info>';
$help = '';
} else {
if (!function_exists($functionRequired)) {
$fulfilled = false;
$status = '<error>ERROR!</error>';
$help = 'You need the '.$functionRequired.' function activated';
}
$rows[] = array($label, $status, $help);
$rows[] = [$label, $status, $help];
}
$table = new Table($this->defaultOutput);
$table
->setHeaders(array('Checked', 'Status', 'Recommendation'))
->setHeaders(['Checked', 'Status', 'Recommendation'])
->setRows($rows)
->render();
@ -119,14 +120,14 @@ class InstallCommand extends ContainerAwareCommand
protected function setupDatabase()
{
$this->defaultOutput->writeln('<info><comment>Step 2 of 4.</comment> Setting up database.</info>');
$this->defaultOutput->writeln('<info><comment>Step 2 of 5.</comment> Setting up database.</info>');
// user want to reset everything? Don't care about what is already here
if (true === $this->defaultInput->getOption('reset')) {
$this->defaultOutput->writeln('Droping database, creating database and schema, clearing the cache');
$this
->runCommand('doctrine:database:drop', array('--force' => true))
->runCommand('doctrine:database:drop', ['--force' => true])
->runCommand('doctrine:database:create')
->runCommand('doctrine:schema:create')
->runCommand('cache:clear')
@ -158,7 +159,7 @@ class InstallCommand extends ContainerAwareCommand
$this->defaultOutput->writeln('Droping database, creating database and schema');
$this
->runCommand('doctrine:database:drop', array('--force' => true))
->runCommand('doctrine:database:drop', ['--force' => true])
->runCommand('doctrine:database:create')
->runCommand('doctrine:schema:create')
;
@ -168,7 +169,7 @@ class InstallCommand extends ContainerAwareCommand
$this->defaultOutput->writeln('Droping schema and creating schema');
$this
->runCommand('doctrine:schema:drop', array('--force' => true))
->runCommand('doctrine:schema:drop', ['--force' => true])
->runCommand('doctrine:schema:create')
;
}
@ -190,7 +191,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAdmin()
{
$this->defaultOutput->writeln('<info><comment>Step 3 of 4.</comment> Administration setup.</info>');
$this->defaultOutput->writeln('<info><comment>Step 3 of 5.</comment> Administration setup.</info>');
$questionHelper = $this->getHelperSet()->get('question');
$question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true);
@ -222,19 +223,25 @@ class InstallCommand extends ContainerAwareCommand
$config->setTheme($this->getContainer()->getParameter('wallabag_core.theme'));
$config->setItemsPerPage($this->getContainer()->getParameter('wallabag_core.items_on_page'));
$config->setRssLimit($this->getContainer()->getParameter('wallabag_core.rss_limit'));
$config->setReadingSpeed($this->getContainer()->getParameter('wallabag_core.reading_speed'));
$config->setLanguage($this->getContainer()->getParameter('wallabag_core.language'));
$em->persist($config);
$this->defaultOutput->writeln('');
return $this;
}
protected function setupConfig()
{
$this->defaultOutput->writeln('<info><comment>Step 4 of 5.</comment> Config setup.</info>');
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
// cleanup before insert new stuff
$em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute();
$settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[
'name' => 'carrot',
'value' => '1',
@ -369,7 +376,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAsset()
{
$this->defaultOutput->writeln('<info><comment>Step 4 of 4.</comment> Installing assets.</info>');
$this->defaultOutput->writeln('<info><comment>Step 5 of 5.</comment> Installing assets.</info>');
$this
->runCommand('assets:install')
@ -387,19 +394,19 @@ class InstallCommand extends ContainerAwareCommand
* @param string $command
* @param array $parameters Parameters to this command (usually 'force' => true)
*/
protected function runCommand($command, $parameters = array())
protected function runCommand($command, $parameters = [])
{
$parameters = array_merge(
array('command' => $command),
['command' => $command],
$parameters,
array(
[
'--no-debug' => true,
'--env' => $this->defaultInput->getOption('env') ?: 'dev',
)
]
);
if ($this->defaultInput->getOption('no-interaction')) {
$parameters = array_merge($parameters, array('--no-interaction' => true));
$parameters = array_merge($parameters, ['--no-interaction' => true]);
}
$this->getApplication()->setAutoExit(false);
@ -459,7 +466,13 @@ class InstallCommand extends ContainerAwareCommand
return false;
}
return in_array($databaseName, $schemaManager->listDatabases());
try {
return in_array($databaseName, $schemaManager->listDatabases());
} catch (\Doctrine\DBAL\Exception\DriverException $e) {
// it means we weren't able to get database list, assume the database doesn't exist
return false;
}
}
/**

View File

@ -16,7 +16,6 @@ use Wallabag\CoreBundle\Form\Type\RssType;
use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
use Wallabag\CoreBundle\Form\Type\UserInformationType;
use Wallabag\CoreBundle\Tools\Utils;
use Wallabag\UserBundle\Entity\User;
class ConfigController extends Controller
{
@ -33,7 +32,7 @@ class ConfigController extends Controller
$user = $this->getUser();
// handle basic config detail (this form is defined as a service)
$configForm = $this->createForm(ConfigType::class, $config, array('action' => $this->generateUrl('config')));
$configForm = $this->createForm(ConfigType::class, $config, ['action' => $this->generateUrl('config')]);
$configForm->handleRequest($request);
if ($configForm->isValid()) {
@ -46,21 +45,21 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Config saved. Some parameters will be considered after disconnection.'
'flashes.config.notice.config_saved'
);
return $this->redirect($this->generateUrl('config'));
}
// handle changing password
$pwdForm = $this->createForm(ChangePasswordType::class, null, array('action' => $this->generateUrl('config').'#set4'));
$pwdForm = $this->createForm(ChangePasswordType::class, null, ['action' => $this->generateUrl('config').'#set4']);
$pwdForm->handleRequest($request);
if ($pwdForm->isValid()) {
if ($this->get('craue_config')->get('demo_mode_enabled') && $this->get('craue_config')->get('demo_mode_username') === $user->getUsername()) {
$message = 'In demonstration mode, you can\'t change password for this user.';
$message = 'flashes.config.notice.password_not_updated_demo';
} else {
$message = 'Password updated';
$message = 'flashes.config.notice.password_updated';
$user->setPlainPassword($pwdForm->get('new_password')->getData());
$userManager->updateUser($user, true);
@ -72,10 +71,10 @@ class ConfigController extends Controller
}
// handle changing user information
$userForm = $this->createForm(UserInformationType::class, $user, array(
'validation_groups' => array('Profile'),
$userForm = $this->createForm(UserInformationType::class, $user, [
'validation_groups' => ['Profile'],
'action' => $this->generateUrl('config').'#set3',
));
]);
$userForm->handleRequest($request);
if ($userForm->isValid()) {
@ -83,14 +82,14 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Information updated'
'flashes.config.notice.user_updated'
);
return $this->redirect($this->generateUrl('config').'#set3');
}
// handle rss information
$rssForm = $this->createForm(RssType::class, $config, array('action' => $this->generateUrl('config').'#set2'));
$rssForm = $this->createForm(RssType::class, $config, ['action' => $this->generateUrl('config').'#set2']);
$rssForm->handleRequest($request);
if ($rssForm->isValid()) {
@ -99,7 +98,7 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'RSS information updated'
'flashes.config.notice.rss_updated'
);
return $this->redirect($this->generateUrl('config').'#set2');
@ -107,7 +106,7 @@ class ConfigController extends Controller
// handle tagging rule
$taggingRule = new TaggingRule();
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, array('action' => $this->generateUrl('config').'#set5'));
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']);
$newTaggingRule->handleRequest($request);
if ($newTaggingRule->isValid()) {
@ -117,7 +116,7 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Tagging rules updated'
'flashes.config.notice.tagging_rules_updated'
);
return $this->redirect($this->generateUrl('config').'#set5');
@ -127,10 +126,10 @@ class ConfigController extends Controller
$newUser = $userManager->createUser();
// enable created user by default
$newUser->setEnabled(true);
$newUserForm = $this->createForm(NewUserType::class, $newUser, array(
'validation_groups' => array('Profile'),
$newUserForm = $this->createForm(NewUserType::class, $newUser, [
'validation_groups' => ['Profile'],
'action' => $this->generateUrl('config').'#set6',
));
]);
$newUserForm->handleRequest($request);
if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
@ -141,6 +140,7 @@ class ConfigController extends Controller
$config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page'));
$config->setRssLimit($this->getParameter('wallabag_core.rss_limit'));
$config->setLanguage($this->getParameter('wallabag_core.language'));
$config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed'));
$em->persist($config);
@ -148,27 +148,27 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
$this->get('translator')->trans('User "%username%" added', array('%username%' => $newUser->getUsername()))
$this->get('translator')->trans('flashes.config.notice.user_added', ['%username%' => $newUser->getUsername()])
);
return $this->redirect($this->generateUrl('config').'#set6');
}
return $this->render('WallabagCoreBundle:Config:index.html.twig', array(
'form' => array(
return $this->render('WallabagCoreBundle:Config:index.html.twig', [
'form' => [
'config' => $configForm->createView(),
'rss' => $rssForm->createView(),
'pwd' => $pwdForm->createView(),
'user' => $userForm->createView(),
'new_user' => $newUserForm->createView(),
'new_tagging_rule' => $newTaggingRule->createView(),
),
'rss' => array(
],
'rss' => [
'username' => $user->getUsername(),
'token' => $config->getRssToken(),
),
],
'twofactor_auth' => $this->getParameter('twofactor_auth'),
));
]);
}
/**
@ -188,12 +188,12 @@ class ConfigController extends Controller
$em->flush();
if ($request->isXmlHttpRequest()) {
return new JsonResponse(array('token' => $config->getRssToken()));
return new JsonResponse(['token' => $config->getRssToken()]);
}
$this->get('session')->getFlashBag()->add(
'notice',
'RSS token updated'
'flashes.config.notice.rss_token_updated'
);
return $this->redirect($this->generateUrl('config').'#set2');
@ -211,7 +211,7 @@ class ConfigController extends Controller
public function deleteTaggingRuleAction(TaggingRule $rule)
{
if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
throw $this->createAccessDeniedException('You can not access this tagging ryle.');
throw $this->createAccessDeniedException('You can not access this tagging rule.');
}
$em = $this->getDoctrine()->getManager();
@ -220,7 +220,7 @@ class ConfigController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Tagging rule deleted'
'flashes.config.notice.tagging_rules_deleted'
);
return $this->redirect($this->generateUrl('config').'#set5');
@ -230,7 +230,7 @@ class ConfigController extends Controller
* Retrieve config for the current user.
* If no config were found, create a new one.
*
* @return Wallabag\CoreBundle\Entity\Config
* @return Config
*/
private function getConfig()
{

View File

@ -0,0 +1,100 @@
<?php
namespace Wallabag\CoreBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Wallabag\ApiBundle\Entity\Client;
use Wallabag\CoreBundle\Form\Type\ClientType;
class DeveloperController extends Controller
{
/**
* List all clients and link to create a new one.
*
* @Route("/developer", name="developer")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexAction()
{
$clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll();
return $this->render('WallabagCoreBundle:Developer:index.html.twig', [
'clients' => $clients,
]);
}
/**
* Create a client (an app).
*
* @param Request $request
*
* @Route("/developer/client/create", name="developer_create_client")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function createClientAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$client = new Client();
$clientForm = $this->createForm(ClientType::class, $client);
$clientForm->handleRequest($request);
if ($clientForm->isValid()) {
$client->setAllowedGrantTypes(['token', 'authorization_code', 'password', 'refresh_token']);
$em->persist($client);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'flashes.developer.notice.client_created'
);
return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', [
'client_id' => $client->getPublicId(),
'client_secret' => $client->getSecret(),
]);
}
return $this->render('WallabagCoreBundle:Developer:client.html.twig', [
'form' => $clientForm->createView(),
]);
}
/**
* Remove a client.
*
* @param Client $client
*
* @Route("/developer/client/delete/{id}", requirements={"id" = "\d+"}, name="developer_delete_client")
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function deleteClientAction(Client $client)
{
$em = $this->getDoctrine()->getManager();
$em->remove($client);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'flashes.developer.notice.client_deleted'
);
return $this->redirect($this->generateUrl('developer'));
}
/**
* Display developer how to use an existing app.
*
* @Route("/developer/howto/first-app", name="developer_howto_firstapp")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function howtoFirstAppAction()
{
return $this->render('WallabagCoreBundle:Developer:howto_app.html.twig');
}
}

View File

@ -49,30 +49,29 @@ class EntryController extends Controller
$form->handleRequest($request);
if ($form->isValid()) {
// check for existing entry, if it exists, redirect to it with a message
$existingEntry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
$existingEntry = $this->checkIfEntryAlreadyExists($entry);
if (false !== $existingEntry) {
$this->get('session')->getFlashBag()->add(
'notice',
'Entry already saved on '.$existingEntry->getCreatedAt()->format('d-m-Y')
$this->get('translator')->trans('flashes.entry.notice.entry_already_saved', ['%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')])
);
return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId())));
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
}
$this->updateEntry($entry);
$this->get('session')->getFlashBag()->add(
'notice',
'Entry saved'
'flashes.entry.notice.entry_saved'
);
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', array(
return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', [
'form' => $form->createView(),
));
]);
}
/**
@ -86,19 +85,20 @@ class EntryController extends Controller
{
$entry = new Entry($this->getUser());
$entry->setUrl($request->get('url'));
$this->updateEntry($entry);
if (false === $this->checkIfEntryAlreadyExists($entry)) {
$this->updateEntry($entry);
}
return $this->redirect($this->generateUrl('homepage'));
}
/**
* @param Request $request
*
* @Route("/new", name="new")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function addEntryAction(Request $request)
public function addEntryAction()
{
return $this->render('WallabagCoreBundle:Entry:new.html.twig');
}
@ -128,15 +128,15 @@ class EntryController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Entry updated'
'flashes.entry.notice.entry_updated'
);
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
return $this->render('WallabagCoreBundle:Entry:edit.html.twig', [
'form' => $form->createView(),
));
]);
}
/**
@ -257,17 +257,17 @@ class EntryController extends Controller
$entries->setCurrentPage($page);
} catch (OutOfRangeCurrentPageException $e) {
if ($page > 1) {
return $this->redirect($this->generateUrl($type, array('page' => $entries->getNbPages())), 302);
return $this->redirect($this->generateUrl($type, ['page' => $entries->getNbPages()]), 302);
}
}
return $this->render(
'WallabagCoreBundle:Entry:entries.html.twig',
array(
[
'form' => $form->createView(),
'entries' => $entries,
'currentPage' => $page,
)
]
);
}
@ -286,7 +286,7 @@ class EntryController extends Controller
return $this->render(
'WallabagCoreBundle:Entry:entry.html.twig',
array('entry' => $entry)
['entry' => $entry]
);
}
@ -304,9 +304,9 @@ class EntryController extends Controller
{
$this->checkUserAction($entry);
$message = 'Entry reloaded';
$message = 'flashes.entry.notice.entry_reloaded';
if (false === $this->updateEntry($entry)) {
$message = 'Failed to reload entry';
$message = 'flashes.entry.notice.entry_reload_failed';
}
$this->get('session')->getFlashBag()->add(
@ -314,7 +314,7 @@ class EntryController extends Controller
$message
);
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
/**
@ -334,12 +334,19 @@ class EntryController extends Controller
$entry->toggleArchive();
$this->getDoctrine()->getManager()->flush();
$message = 'flashes.entry.notice.entry_unarchived';
if ($entry->isArchived()) {
$message = 'flashes.entry.notice.entry_archived';
}
$this->get('session')->getFlashBag()->add(
'notice',
'Entry '.($entry->isArchived() ? 'archived' : 'unarchived')
$message
);
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**
@ -359,12 +366,19 @@ class EntryController extends Controller
$entry->toggleStar();
$this->getDoctrine()->getManager()->flush();
$message = 'flashes.entry.notice.entry_unstarred';
if ($entry->isStarred()) {
$message = 'flashes.entry.notice.entry_starred';
}
$this->get('session')->getFlashBag()->add(
'notice',
'Entry '.($entry->isStarred() ? 'starred' : 'unstarred')
$message
);
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**
@ -384,7 +398,7 @@ class EntryController extends Controller
// to avoid redirecting to the deleted entry. Ugh.
$url = $this->generateUrl(
'view',
array('id' => $entry->getId()),
['id' => $entry->getId()],
UrlGeneratorInterface::ABSOLUTE_URL
);
@ -394,11 +408,15 @@ class EntryController extends Controller
$this->get('session')->getFlashBag()->add(
'notice',
'Entry deleted'
'flashes.entry.notice.entry_deleted'
);
// don't redirect user to the deleted entry
return $this->redirect($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage'));
$to = ($url !== $request->headers->get('referer') ? $request->headers->get('referer') : null);
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to);
return $this->redirect($redirectUrl);
}
/**
@ -412,4 +430,16 @@ class EntryController extends Controller
throw $this->createAccessDeniedException('You can not access this entry.');
}
}
/**
* Check for existing entry, if it exists, redirect to it with a message.
*
* @param Entry $entry
*
* @return Entry|bool
*/
private function checkIfEntryAlreadyExists(Entry $entry)
{
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
}
}

View File

@ -16,12 +16,15 @@ class ExportController extends Controller
/**
* Gets one entry content.
*
* @param Entry $entry
* @param Entry $entry
* @param string $format
*
* @Route("/export/{id}.{format}", name="export_entry", requirements={
* "format": "epub|mobi|pdf|json|xml|txt|csv",
* "id": "\d+"
* })
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function downloadEntryAction(Entry $entry, $format)
{
@ -38,10 +41,15 @@ class ExportController extends Controller
/**
* Export all entries for current user.
*
* @param string $format
* @param string $category
*
* @Route("/export/{category}.{format}", name="export_entries", requirements={
* "format": "epub|mobi|pdf|json|xml|txt|csv",
* "category": "all|unread|starred|archive"
* })
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function downloadEntriesAction($format, $category)
{

View File

@ -87,9 +87,9 @@ class RssController extends Controller
$perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
$entries->setMaxPerPage($perPage);
return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', [
'type' => $type,
'entries' => $entries,
));
]);
}
}

View File

@ -14,7 +14,7 @@ class StaticController extends Controller
{
return $this->render(
'WallabagCoreBundle:Static:howto.html.twig',
array()
[]
);
}
@ -25,10 +25,10 @@ class StaticController extends Controller
{
return $this->render(
'WallabagCoreBundle:Static:about.html.twig',
array(
[
'version' => $this->getParameter('wallabag_core.version'),
'paypal_url' => $this->getParameter('wallabag_core.paypal_url'),
)
]
);
}
@ -39,7 +39,7 @@ class StaticController extends Controller
{
return $this->render(
'WallabagCoreBundle:Static:quickstart.html.twig',
array()
[]
);
}
}

View File

@ -13,6 +13,7 @@ class TagController extends Controller
{
/**
* @param Request $request
* @param Entry $entry
*
* @Route("/new-tag/{entry}", requirements={"entry" = "\d+"}, name="new_tag")
*
@ -20,39 +21,31 @@ class TagController extends Controller
*/
public function addTagFormAction(Request $request, Entry $entry)
{
$tag = new Tag();
$form = $this->createForm(NewTagType::class, $tag);
$form = $this->createForm(NewTagType::class, new Tag());
$form->handleRequest($request);
if ($form->isValid()) {
$existingTag = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Tag')
->findOneByLabel($tag->getLabel());
$this->get('wallabag_core.content_proxy')->assignTagsToEntry(
$entry,
$form->get('label')->getData()
);
$em = $this->getDoctrine()->getManager();
if (is_null($existingTag)) {
$entry->addTag($tag);
$em->persist($tag);
} elseif (!$existingTag->hasEntry($entry)) {
$entry->addTag($existingTag);
$em->persist($existingTag);
}
$em->persist($entry);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'Tag added'
'flashes.tag.notice.tag_added'
);
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
return $this->render('WallabagCoreBundle:Tag:new_form.html.twig', array(
return $this->render('WallabagCoreBundle:Tag:new_form.html.twig', [
'form' => $form->createView(),
'entry' => $entry,
));
]);
}
/**
@ -72,7 +65,9 @@ class TagController extends Controller
}
$em->flush();
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**
@ -86,13 +81,13 @@ class TagController extends Controller
{
$tags = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Tag')
->findTags($this->getUser()->getId());
->findAllTags($this->getUser()->getId());
return $this->render(
'WallabagCoreBundle:Tag:tags.html.twig',
array(
[
'tags' => $tags,
)
]
);
}
}

View File

@ -25,6 +25,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
$adminConfig->setTheme('material');
$adminConfig->setItemsPerPage(30);
$adminConfig->setReadingSpeed(1);
$adminConfig->setLanguage('en');
$manager->persist($adminConfig);
@ -34,6 +35,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
$bobConfig = new Config($this->getReference('bob-user'));
$bobConfig->setTheme('default');
$bobConfig->setItemsPerPage(10);
$bobConfig->setReadingSpeed(1);
$bobConfig->setLanguage('fr');
$manager->persist($bobConfig);
@ -43,6 +45,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
$emptyConfig = new Config($this->getReference('empty-user'));
$emptyConfig->setTheme('material');
$emptyConfig->setItemsPerPage(10);
$emptyConfig->setReadingSpeed(1);
$emptyConfig->setLanguage('en');
$manager->persist($emptyConfig);

View File

@ -15,11 +15,6 @@ class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
public function load(ObjectManager $manager)
{
$settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[
'name' => 'carrot',
'value' => '1',

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