]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #1642 from wallabag/v2-escape-preview
authorJeremy Benoist <j0k3r@users.noreply.github.com>
Thu, 4 Feb 2016 16:46:02 +0000 (17:46 +0100)
committerJeremy Benoist <j0k3r@users.noreply.github.com>
Thu, 4 Feb 2016 16:46:02 +0000 (17:46 +0100)
Unescape content for Material card

40 files changed:
app/AppKernel.php
app/DoctrineMigrations/.gitkeep [new file with mode: 0644]
app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml [new file with mode: 0644]
app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml [new file with mode: 0644]
app/Resources/CraueConfigBundle/views/Settings/modify.html.twig [new file with mode: 0644]
app/config/config.yml
app/config/parameters.yml.dist
app/config/routing.yml
app/config/security.yml
app/config/tests/parameters.yml.dist.mysql
app/config/tests/parameters.yml.dist.pgsql
app/config/tests/parameters.yml.dist.sqlite
composer.json
src/Wallabag/CoreBundle/Command/InstallCommand.php
src/Wallabag/CoreBundle/Controller/ConfigController.php
src/Wallabag/CoreBundle/Controller/RssController.php
src/Wallabag/CoreBundle/Controller/StaticController.php
src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php [new file with mode: 0644]
src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
src/Wallabag/CoreBundle/Helper/EntriesExport.php
src/Wallabag/CoreBundle/Resources/config/services.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
src/Wallabag/CoreBundle/Resources/views/base.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php
src/Wallabag/CoreBundle/Tests/Controller/SettingsControllerTest.php [new file with mode: 0644]
src/Wallabag/ImportBundle/Controller/PocketController.php
src/Wallabag/ImportBundle/Import/PocketImport.php
src/Wallabag/ImportBundle/Resources/config/services.yml
src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php
src/Wallabag/UserBundle/Mailer/AuthCodeMailer.php
src/Wallabag/UserBundle/Resources/config/services.yml
src/Wallabag/UserBundle/Tests/Mailer/AuthCodeMailerTest.php

index 7e76a9e9053dc1ba6f12537b5a96207e7bb44807..82d3aa38e3aada99550e48bc50b04df49cf78e2c 100644 (file)
@@ -33,6 +33,7 @@ class AppKernel extends Kernel
             new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
             new Wallabag\ImportBundle\WallabagImportBundle(),
             new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
+            new Craue\ConfigBundle\CraueConfigBundle(),
         ];
 
         if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
diff --git a/app/DoctrineMigrations/.gitkeep b/app/DoctrineMigrations/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml
new file mode 100644 (file)
index 0000000..6d86eab
--- /dev/null
@@ -0,0 +1,19 @@
+download_pictures: Download pictures on your server
+carrot: Enable share to Carrot
+diaspora_url: Diaspora URL, if the service is enabled
+export_epub: Enable ePub export
+export_mobi: Enable .mobi export
+export_pdf: Enable PDF export
+export_csv: Enable CSV export
+export_json: Enable JSON export
+export_txt: Enable TXT export
+export_xml: Enable XML export
+pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication)
+shaarli_url: Shaarli URL, if the service is enabled
+share_diaspora: Enable share to Diaspora
+share_mail: Enable share by email
+share_shaarli: Enable share to Shaarli
+share_twitter: Enable share to Twitter
+show_printlink: Display a link to print content
+wallabag_support_url: Support URL for wallabag
+wallabag_url: URL of *your* wallabag instance
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml
new file mode 100644 (file)
index 0000000..cdd56ac
--- /dev/null
@@ -0,0 +1,19 @@
+download_pictures: Télécharger les images sur le serveur
+carrot: Activer le partage vers Carrot
+diaspora_url: URL de Diaspora, si le service Diaspora est activé
+export_epub: Activer l'export ePub
+export_mobi: Activer l'export .mobi
+export_pdf: Activer l'export PDF
+export_csv: Activer l'export CSV
+export_json: Activer l'export JSON
+export_txt: Activer l'export TXT
+export_xml: Activer l'export XML
+pocket_consumer_key: Clé d'authentification Pocket pour importer les données (https://getpocket.com/developer/docs/authentication)
+shaarli_url: URL de Shaarli, si le service Shaarli est activé
+share_diaspora: Activer le partage vers Diaspora
+share_mail: Activer le partage par email
+share_shaarli: Activer le partage vers Shaarli
+share_twitter: Activer le partage vers Twitter
+show_printlink: Afficher un lien pour imprimer
+wallabag_support_url: URL de support de wallabag
+wallabag_url: URL de *votre* instance de wallabag
diff --git a/app/Resources/CraueConfigBundle/views/Settings/modify.html.twig b/app/Resources/CraueConfigBundle/views/Settings/modify.html.twig
new file mode 100644 (file)
index 0000000..f44db42
--- /dev/null
@@ -0,0 +1,43 @@
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{% trans %}internal settings{% endtrans %}{% endblock %}
+
+{% block content %}
+    <div class="row">
+        <div class="col s12">
+            <div class="card-panel settings">
+                {{ form_start(form, {'attr': {'class': 'craue_config_settings_modify'}}) }}
+                    {{ form_errors(form) }}
+
+                    <div class="row">
+                        <div class="div_tabs col s12">
+                            <ul class="tabs">
+                                {% for section in sections | craue_sortSections %}
+                                    <li class="tab col s3"><a href="#set-{{ section }}">{{ section | trans({}, 'CraueConfigBundle') }}</a></li>
+                                {% endfor %}
+                            </ul>
+                        </div>
+
+                        {% for section in sections | craue_sortSections %}
+                            <div id="set-{{ section }}" class="col s12">
+                                {% for setting in form.settings if setting.section.vars.value == section %}
+                                        {{ form_row(setting.name) }}
+                                        {{ form_row(setting.section) }}
+                                        {{ form_row(setting.value, {
+                                            'label': setting.name.vars.value | trans({}, 'CraueConfigBundle'),
+                                        }) }}
+                                {% endfor %}
+                            </div>
+                        {% endfor %}
+                </div>
+
+                <button class="btn waves-effect waves-light" type="submit" name="action">
+                    {{ 'modify_settings' | trans({}, 'CraueConfigBundle') }}
+                </button>
+
+                {{ form_rest(form) }}
+                {{ form_end(form) }}
+            </div>
+        </div>
+    </div>
+{% endblock %}
index a6cfc67d63e118ac363290b5789120a619c36f16..7dac4d3bb8bb1581f0bf9d1498a4413893ec4514 100644 (file)
@@ -28,11 +28,17 @@ framework:
     assets: ~
 
 wallabag_core:
+    version: 2.0.0-alpha.2
+    paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
     languages:
         en: 'English'
         fr: 'Français'
         de: 'Deutsch'
         tr: 'Türkçe'
+    items_on_page: 12
+    theme: material
+    language: en
+    rss_limit: 50
 
 wallabag_import:
     allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
@@ -42,29 +48,6 @@ wallabag_import:
 twig:
     debug:            "%kernel.debug%"
     strict_variables: "%kernel.debug%"
-    globals:
-        share_twitter: %share_twitter%
-        share_mail: %share_mail%
-        share_shaarli: %share_shaarli%
-        shaarli_url: %shaarli_url%
-        share_diaspora: %share_diaspora%
-        diaspora_url: %diaspora_url%
-        flattr: %flattr%
-        flattrable: 1
-        flattred: 2
-        carrot: %carrot%
-        show_printlink: %show_printlink%
-        export_epub: %export_epub%
-        export_mobi: %export_mobi%
-        export_pdf: %export_pdf%
-        export_csv: %export_csv%
-        export_json: %export_json%
-        export_txt: %export_txt%
-        export_xml: %export_xml%
-        version: %app.version%
-        twofactor_auth: %twofactor_auth%
-        warning_message: %warning_message%
-        paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
     form_themes:
         - "LexikFormFilterBundle:Form:form_div_layout.html.twig"
 
@@ -185,7 +168,7 @@ fos_user:
     user_class: Wallabag\UserBundle\Entity\User
     registration:
         confirmation:
-            enabled: true
+            enabled: %fosuser_confirmation%
     from_email:
         address:        %from_email%
         sender_name:    wallabag
index ac4a4cc804111bdba988b15a1bb18d9440ca4028..7c7413fb9b276c5c4338724c41d90c25f53a7679 100644 (file)
@@ -37,43 +37,11 @@ parameters:
     # A secret key that's used to generate certain security-related tokens
     secret:            ovmpmAWXRCabNlMgzlzFXDYmCFfzGv
 
-    # wallabag misc
-    app.version: 2.0.0-alpha
+    # two factor stuff
     twofactor_auth: true
     twofactor_sender: no-reply@wallabag.org
 
-    # message to display at the bottom of the page
-    warning_message: >
-        You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
+    # fosuser stuff
+    fosuser_confirmation: true
 
-    download_pictures: false # if true, pictures will be stored into data/assets for each article
-
-    # Entry view
-    share_twitter: true
-    share_mail: true
-    share_shaarli: true
-    shaarli_url: http://myshaarli.com
-    share_diaspora: true
-    diaspora_url: http://diasporapod.com
-    flattr: true
-    carrot: true
-    show_printlink: true
-    export_epub: true
-    export_mobi: true
-    export_pdf: true
-    export_csv: true
-    export_json: true
-    export_txt: true
-    export_xml: true
-    wallabag_url: http://v2.wallabag.org
-    wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
-
-    # default user config
-    items_on_page: 12
-    theme: material
-    language: en
     from_email: no-reply@wallabag.org
-    rss_limit: 50
-
-    # pocket import
-    pocket_consumer_key: xxxxxxxx
index 84b98d2323621be0e315ab6e3df3f378c8075808..c491d35dc305eaa6f722bdd9a35251caf005aad3 100644 (file)
@@ -22,7 +22,9 @@ rest :
 
 homepage:
     path: "/{page}"
-    defaults: { _controller: WallabagCoreBundle:Entry:showUnread, page : 1 }
+    defaults:
+        _controller: WallabagCoreBundle:Entry:showUnread
+        page : 1
     requirements:
         page: \d+
 
@@ -31,3 +33,8 @@ fos_user:
 
 fos_oauth_server_token:
     resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml"
+
+craue_config_settings_modify:
+    path: /settings
+    defaults:
+        _controller: CraueConfigBundle:Settings:modify
index a99a7d80daac75d9b5a3f33f86a94a15eb57f6a0..7c10889ff3669d33a6b2bd794f2d39c4c56f6cc4 100644 (file)
@@ -57,4 +57,5 @@ security:
         - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
+        - { path: ^/settings, roles: ROLE_SUPER_ADMIN }
         - { path: ^/, roles: ROLE_USER }
index 3b9262bbab2b35e7564e54c5b95f656923646cf3..1951f02166f81d2d8d0ccab80963d3fd9e3062ee 100644 (file)
@@ -27,43 +27,11 @@ parameters:
     # A secret key that's used to generate certain security-related tokens
     secret:            ThisTokenIsNotSoSecretChangeIt
 
-    # wallabag misc
-    app.version: 2.0.0-alpha
+    # two factor stuff
     twofactor_auth: true
     twofactor_sender: no-reply@wallabag.org
 
-    # message to display at the bottom of the page
-    warning_message: >
-        You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
+    # fosuser stuff
+    fosuser_confirmation: true
 
-    download_pictures: false # if true, pictures will be stored into data/assets for each article
-
-    # Entry view
-    share_twitter: true
-    share_mail: true
-    share_shaarli: true
-    shaarli_url: http://myshaarli.com
-    share_diaspora: true
-    diaspora_url: http://diasporapod.com
-    flattr: true
-    carrot: true
-    show_printlink: true
-    export_epub: true
-    export_mobi: true
-    export_pdf: true
-    export_csv: true
-    export_json: true
-    export_txt: true
-    export_xml: true
-    wallabag_url: http://v2.wallabag.org
-    wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
-
-    # default user config
-    items_on_page: 12
-    theme: material
-    language: en_US
     from_email: no-reply@wallabag.org
-    rss_limit: 50
-
-    # pocket import
-    pocket_consumer_key: xxxxxxxx
index a5aef02803b6507782ade5f83347ea0742445d0b..36ad6cde5393ee5706b42b22b6818367aac7a3e4 100644 (file)
@@ -27,43 +27,11 @@ parameters:
     # A secret key that's used to generate certain security-related tokens
     secret:            ThisTokenIsNotSoSecretChangeIt
 
-    # wallabag misc
-    app.version: 2.0.0-alpha
+    # two factor stuff
     twofactor_auth: true
     twofactor_sender: no-reply@wallabag.org
 
-    # message to display at the bottom of the page
-    warning_message: >
-        You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
+    # fosuser stuff
+    fosuser_confirmation: true
 
-    download_pictures: false # if true, pictures will be stored into data/assets for each article
-
-    # Entry view
-    share_twitter: true
-    share_mail: true
-    share_shaarli: true
-    shaarli_url: http://myshaarli.com
-    share_diaspora: true
-    diaspora_url: http://diasporapod.com
-    flattr: true
-    carrot: true
-    show_printlink: true
-    export_epub: true
-    export_mobi: true
-    export_pdf: true
-    export_csv: true
-    export_json: true
-    export_txt: true
-    export_xml: true
-    wallabag_url: http://v2.wallabag.org
-    wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
-
-    # default user config
-    items_on_page: 12
-    theme: material
-    language: en_US
     from_email: no-reply@wallabag.org
-    rss_limit: 50
-
-    # pocket import
-    pocket_consumer_key: xxxxxxxx
index cdafb1b1bb6bcb0ec58926a3a1863d16617b0dbb..6564014aa09f5b8c1bf0fa1a0d1673b88cfef103 100644 (file)
@@ -27,43 +27,11 @@ parameters:
     # A secret key that's used to generate certain security-related tokens
     secret:            ThisTokenIsNotSoSecretChangeIt
 
-    # wallabag misc
-    app.version: 2.0.0-alpha
+    # two factor stuff
     twofactor_auth: true
     twofactor_sender: no-reply@wallabag.org
 
-    # message to display at the bottom of the page
-    warning_message: >
-        You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
+    # fosuser stuff
+    fosuser_confirmation: true
 
-    download_pictures: false # if true, pictures will be stored into data/assets for each article
-
-    # Entry view
-    share_twitter: true
-    share_mail: true
-    share_shaarli: true
-    shaarli_url: http://myshaarli.com
-    share_diaspora: true
-    diaspora_url: http://diasporapod.com
-    flattr: true
-    carrot: true
-    show_printlink: true
-    export_epub: true
-    export_mobi: true
-    export_pdf: true
-    export_csv: true
-    export_json: true
-    export_txt: true
-    export_xml: true
-    wallabag_url: http://v2.wallabag.org
-    wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
-
-    # default user config
-    items_on_page: 12
-    theme: material
-    language: en_US
     from_email: no-reply@wallabag.org
-    rss_limit: 50
-
-    # pocket import
-    pocket_consumer_key: xxxxxxxx
index d84e1f8b8f1b04c6b7c25e870be4ca0f69573596..497b80121dbee95bfdca9ee352b7adc91b785a52 100644 (file)
@@ -54,8 +54,8 @@
         "pagerfanta/pagerfanta": "~1.0.3",
         "lexik/form-filter-bundle": "~5.0",
         "j0k3r/graby": "~1.0",
-        "friendsofsymfony/user-bundle": "dev-master",
-        "friendsofsymfony/oauth-server-bundle": "^1.5@dev",
+        "friendsofsymfony/user-bundle": "~2.0@dev",
+        "friendsofsymfony/oauth-server-bundle": "^1.5",
         "stof/doctrine-extensions-bundle": "^1.2@dev",
         "scheb/two-factor-bundle": "~2.0",
         "grandt/phpepub": "~4.0",
@@ -63,7 +63,8 @@
         "kphoen/rulerz-bundle": "~0.10",
         "guzzlehttp/guzzle": "^5.2.0",
         "doctrine/doctrine-migrations-bundle": "^1.0",
-        "paragonie/random_compat": "~1.0"
+        "paragonie/random_compat": "~1.0",
+        "craue/config-bundle": "~1.4"
     },
     "require-dev": {
         "doctrine/doctrine-fixtures-bundle": "~2.2",
index 63032dbb6de1edc4767c5d355d7ab562f8d378c0..e6a06eea3f47785a0710a11255698a9bf1a1eeba 100644 (file)
@@ -12,6 +12,7 @@ use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Question\ConfirmationQuestion;
 use Symfony\Component\Console\Question\Question;
 use Wallabag\CoreBundle\Entity\Config;
+use Craue\ConfigBundle\Entity\Setting;
 
 class InstallCommand extends ContainerAwareCommand
 {
@@ -204,13 +205,122 @@ class InstallCommand extends ContainerAwareCommand
         $em->persist($user);
 
         $config = new Config($user);
-        $config->setTheme($this->getContainer()->getParameter('theme'));
-        $config->setItemsPerPage($this->getContainer()->getParameter('items_on_page'));
-        $config->setRssLimit($this->getContainer()->getParameter('rss_limit'));
-        $config->setLanguage($this->getContainer()->getParameter('language'));
+        $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->setLanguage($this->getContainer()->getParameter('wallabag_core.language'));
 
         $em->persist($config);
 
+        // cleanup before insert new stuff
+        $em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute();
+
+        $settings = [
+            [
+                'name' => 'download_pictures',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'carrot',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_diaspora',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'diaspora_url',
+                'value' => 'http://diasporapod.com',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_shaarli',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'shaarli_url',
+                'value' => 'http://myshaarli.com',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_mail',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_twitter',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'export_epub',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_mobi',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_pdf',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_csv',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_json',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_txt',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_xml',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'pocket_consumer_key',
+                'value' => null,
+                'section' => 'import',
+            ],
+            [
+                'name' => 'show_printlink',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'wallabag_support_url',
+                'value' => 'https://www.wallabag.org/pages/support.html',
+                'section' => 'misc',
+            ],
+            [
+                'name' => 'wallabag_url',
+                'value' => 'http://v2.wallabag.org',
+                'section' => 'misc',
+            ],
+        ];
+
+        foreach ($settings as $setting) {
+            $newSetting = new Setting();
+            $newSetting->setName($setting['name']);
+            $newSetting->setValue($setting['value']);
+            $newSetting->setSection($setting['section']);
+            $em->persist($newSetting);
+        }
+
         $em->flush();
 
         $this->defaultOutput->writeln('');
index b01aaa7f5f7dd6f7cd07b12878855bbb8c178151..b7799746e66222a03f47882b9bb804228f463ba8 100644 (file)
@@ -133,10 +133,10 @@ class ConfigController extends Controller
             $userManager->updateUser($newUser, true);
 
             $config = new Config($newUser);
-            $config->setTheme($this->container->getParameter('theme'));
-            $config->setItemsPerPage($this->container->getParameter('items_on_page'));
-            $config->setRssLimit($this->container->getParameter('rss_limit'));
-            $config->setLanguage($this->container->getParameter('language'));
+            $config->setTheme($this->getParameter('wallabag_core.theme'));
+            $config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page'));
+            $config->setRssLimit($this->getParameter('wallabag_core.rss_limit'));
+            $config->setLanguage($this->getParameter('wallabag_core.language'));
 
             $em->persist($config);
 
@@ -163,6 +163,7 @@ class ConfigController extends Controller
                 'username' => $user->getUsername(),
                 'token' => $config->getRssToken(),
             ),
+            'twofactor_auth' => $this->getParameter('twofactor_auth'),
         ));
     }
 
index 2b7ef5985e6900c4235ef741989e2a6103b88774..a4f7a200e53405aee566e4c60757fdd72e8c9663 100644 (file)
@@ -84,7 +84,7 @@ class RssController extends Controller
         $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
         $entries = new Pagerfanta($pagerAdapter);
 
-        $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
+        $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
         $entries->setMaxPerPage($perPage);
 
         return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
index 9ada371b1c0a8f57e80072df6950a8564b8579bb..5b7bd56edc87079bafe43c39e5d27699571d518c 100644 (file)
@@ -25,7 +25,10 @@ class StaticController extends Controller
     {
         return $this->render(
             'WallabagCoreBundle:Static:about.html.twig',
-            array()
+            array(
+                'version' => $this->getParameter('wallabag_core.version'),
+                'paypal_url' => $this->getParameter('wallabag_core.paypal_url'),
+            )
         );
     }
 
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php
new file mode 100644 (file)
index 0000000..5e89c2a
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+
+namespace Wallabag\CoreBundle\DataFixtures\ORM;
+
+use Doctrine\Common\DataFixtures\AbstractFixture;
+use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
+use Doctrine\Common\Persistence\ObjectManager;
+use Craue\ConfigBundle\Entity\Setting;
+
+class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load(ObjectManager $manager)
+    {
+        $settings = [
+            [
+                'name' => 'download_pictures',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'carrot',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_diaspora',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'diaspora_url',
+                'value' => 'http://diasporapod.com',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_shaarli',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'shaarli_url',
+                'value' => 'http://myshaarli.com',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_mail',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'share_twitter',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'export_epub',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_mobi',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_pdf',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_csv',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_json',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_txt',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'export_xml',
+                'value' => '1',
+                'section' => 'export',
+            ],
+            [
+                'name' => 'pocket_consumer_key',
+                'value' => null,
+                'section' => 'import',
+            ],
+            [
+                'name' => 'show_printlink',
+                'value' => '1',
+                'section' => 'entry',
+            ],
+            [
+                'name' => 'wallabag_support_url',
+                'value' => 'https://www.wallabag.org/pages/support.html',
+                'section' => 'misc',
+            ],
+            [
+                'name' => 'wallabag_url',
+                'value' => 'http://v2.wallabag.org',
+                'section' => 'misc',
+            ],
+        ];
+
+        foreach ($settings as $setting) {
+            $newSetting = new Setting();
+            $newSetting->setName($setting['name']);
+            $newSetting->setValue($setting['value']);
+            $newSetting->setSection($setting['section']);
+            $manager->persist($newSetting);
+        }
+
+        $manager->flush();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getOrder()
+    {
+        return 50;
+    }
+}
index 32acd1f17f315db1641266bc52fe861ea2fef996..bc405fdca095bd8cd430d46238f68774e723a4a9 100644 (file)
@@ -17,6 +17,22 @@ class Configuration implements ConfigurationInterface
                 ->arrayNode('languages')
                     ->prototype('scalar')->end()
                 ->end()
+                ->integerNode('items_on_page')
+                    ->defaultValue(12)
+                ->end()
+                ->scalarNode('theme')
+                    ->defaultValue('material')
+                ->end()
+                ->scalarNode('language')
+                    ->defaultValue('en')
+                ->end()
+                ->integerNode('rss_limit')
+                    ->defaultValue(50)
+                ->end()
+                ->scalarNode('version')
+                ->end()
+                ->scalarNode('paypal_url')
+                ->end()
             ->end()
         ;
 
index 9ff9b732f0b972d99ce287e17b1fc757bfe2beca..9b4703e4370f7bcda0e5241453250d804dbfd5f7 100644 (file)
@@ -13,7 +13,14 @@ class WallabagCoreExtension extends Extension
     {
         $configuration = new Configuration();
         $config = $this->processConfiguration($configuration, $configs);
+
         $container->setParameter('wallabag_core.languages', $config['languages']);
+        $container->setParameter('wallabag_core.items_on_page', $config['items_on_page']);
+        $container->setParameter('wallabag_core.theme', $config['theme']);
+        $container->setParameter('wallabag_core.language', $config['language']);
+        $container->setParameter('wallabag_core.rss_limit', $config['rss_limit']);
+        $container->setParameter('wallabag_core.version', $config['version']);
+        $container->setParameter('wallabag_core.paypal_url', $config['paypal_url']);
 
         $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
         $loader->load('services.yml');
index 31a80d6e3283b12365f7fe2e228a20ffcde372b4..965a40b6a1ec190bb06c4f0bb0956fcd0f709ada 100644 (file)
@@ -8,6 +8,7 @@ use JMS\Serializer\SerializerBuilder;
 use PHPePub\Core\EPub;
 use PHPePub\Core\Structure\OPF\DublinCore;
 use Symfony\Component\HttpFoundation\Response;
+use Craue\ConfigBundle\Util\Config;
 
 /**
  * This class doesn't have unit test BUT it's fully covered by a functional test with ExportControllerTest.
@@ -27,12 +28,12 @@ class EntriesExport
         </div';
 
     /**
-     * @param string $wallabagUrl Wallabag instance url
+     * @param Config $craueConfig CraueConfig instance to get wallabag instance url from database
      * @param string $logoPath    Path to the logo FROM THE BUNDLE SCOPE
      */
-    public function __construct($wallabagUrl, $logoPath)
+    public function __construct(Config $craueConfig, $logoPath)
     {
-        $this->wallabagUrl = $wallabagUrl;
+        $this->wallabagUrl = $craueConfig->get('wallabag_url');
         $this->logoPath = $logoPath;
     }
 
index 7d24d488ce78e987cc139f625cd9c62590cde6e7..a8796fe4452d0fce1f55700c902430d9d18cdce5 100644 (file)
@@ -3,7 +3,7 @@ services:
         class: Wallabag\CoreBundle\Helper\DetectActiveTheme
         arguments:
             - "@security.token_storage"
-            - %theme% # default theme from parameters.yml
+            - %wallabag_core.theme%
 
     # custom form type
     wallabag_core.form.type.config:
@@ -76,17 +76,17 @@ services:
         class: Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener
         arguments:
             - "@doctrine.orm.entity_manager"
-            - %theme%
-            - %items_on_page%
-            - %rss_limit%
-            - %language%
+            - %wallabag_core.theme%
+            - %wallabag_core.items_on_page%
+            - %wallabag_core.rss_limit%
+            - %wallabag_core.language%
         tags:
             - { name: kernel.event_subscriber }
 
     wallabag_core.helper.entries_export:
         class: Wallabag\CoreBundle\Helper\EntriesExport
         arguments:
-            - %wallabag_url%
+            - "@craue_config"
             - src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-152.png
 
     wallabag.operator.array.matches:
index 20f4352b0aee68242269a95732137eaf3f1567b3..cc814cc4d07c4b085f3f4c4530d2112824a56a0c 100644 (file)
@@ -13,6 +13,7 @@ archive: 'Lus'
 all: 'Tous les articles'
 tags: 'Tags'
 config: 'Configuration'
+internal settings: 'Configuration interne'
 import: 'Importer'
 howto: 'Aide'
 logout: 'Déconnexion'
index 9e515a178057bb51669d09a80289ee57d74e8032..1742b4aa664e4f78bfc6b7479aa303a7fa272a37 100644 (file)
 
         {% block footer %}{% endblock %}
 
-        {% if warning_message %}
         <div id="warning_message">
-            {{ warning_message | raw }}
+            You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
         </div>
-        {% endif %}
     </body>
 </html>
index c23d0e272540577c07360dcf12ec67a2e9aae8b8..27a88287b8550a46fad6cb8b7d1b9e92d930eba0 100644 (file)
             <li><a title="{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}</span></a></li>
             <li><a title="{% trans %}Favorite{% endtrans %}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{% trans %}Toggle favorite{% endtrans %}</span></a></li>
             <li><a title="{% trans %}Delete{% endtrans %}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{% trans %}Delete{% endtrans %}</span></a></li>
-            {% if share_twitter %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}Tweet{% endtrans %}"><span>{% trans %}Tweet{% endtrans %}</span></a></li>{% endif %}
-            {% if share_mail %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %}
-            {% if share_shaarli %}<li><a href="{{ shaarli_url }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %}
-            {% if share_diaspora %}<li><a href="{{ diaspora_url }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora{% endtrans %}"><span>{% trans %}diaspora{% endtrans %}</span></a></li>{% endif %}
-            {#  {% if flattr %}{% if flattr.status == flattrable %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}"><span>{% trans %}flattr{% endtrans %}</span></a></li>{% elseif flattr.status == flattred %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}><span>{% trans %}flattr{% endtrans %}</span> ({{ flattr.numFlattrs }})</a></li>{% endif %}{% endif %} #}
-            {% if carrot %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %}
-            {% if show_printlink %}<li><a title="{% trans %}Print{% endtrans %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans %}Print{% endtrans %}</span></a></li>{% endif %}
-            {% if export_epub %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
-            {% if export_mobi %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
-            {% if export_pdf %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
+            {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}Tweet{% endtrans %}"><span>{% trans %}Tweet{% endtrans %}</span></a></li>{% endif %}
+            {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %}
+            {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %}
+            {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora{% endtrans %}"><span>{% trans %}diaspora{% endtrans %}</span></a></li>{% endif %}
+            {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %}
+            {% if craue_setting('show_printlink') %}<li><a title="{% trans %}Print{% endtrans %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans %}Print{% endtrans %}</span></a></li>{% endif %}
+            {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
+            {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
+            {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
             <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}" class="tool bad-display icon icon-delete"><span>{% trans %}Does this article appear wrong?{% endtrans %}</span></a></li>
         </ul>
     </div>
index 3aead49756d0503d33e47243d9ace117f1a45f65..b630070caa063c45879cf8fd33b83b643e4f0a44 100644 (file)
@@ -51,6 +51,9 @@
             </div>
         </li>
         <li><a href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li>
+        {% if is_granted('ROLE_SUPER_ADMIN') %}
+            <li><a href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li>
+        {% endif %}
         <li><a href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li>
         <li><a href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li>
         <li><a href="{{ path('about') }}">{% trans %}about{% endtrans %}</a></li>
index 8743dc1dd0b207f15508376b0a734f60e0afb8d9..1cae90a41d2c94f56a0f2e6270ea13c7177e8b75 100644 (file)
                 <div class="row">
                     <div class="div_tabs col s12">
                         <ul class="tabs">
-                        <li class="tab col s3"><a class="active" href="#set1">{% trans %}Settings{% endtrans %}</a></li>
-                        <li class="tab col s3"><a href="#set2">{% trans %}RSS{% endtrans %}</a></li>
-                        <li class="tab col s3"><a href="#set3">{% trans %}User information{% endtrans %}</a></li>
-                        <li class="tab col s3"><a href="#set4">{% trans %}Password{% endtrans %}</a></li>
-                        <li class="tab col s3"><a href="#set5">{% trans %}Tagging rules{% endtrans %}</a></li>
-                        {% if is_granted('ROLE_SUPER_ADMIN') %}
-                        <li class="tab col s3"><a href="#set6">{% trans %}Add a user{% endtrans %}</a></li>
-                        {% endif %}
+                            <li class="tab col s3"><a class="active" href="#set1">{% trans %}Settings{% endtrans %}</a></li>
+                            <li class="tab col s3"><a href="#set2">{% trans %}RSS{% endtrans %}</a></li>
+                            <li class="tab col s3"><a href="#set3">{% trans %}User information{% endtrans %}</a></li>
+                            <li class="tab col s3"><a href="#set4">{% trans %}Password{% endtrans %}</a></li>
+                            <li class="tab col s3"><a href="#set5">{% trans %}Tagging rules{% endtrans %}</a></li>
+                            {% if is_granted('ROLE_SUPER_ADMIN') %}
+                            <li class="tab col s3"><a href="#set6">{% trans %}Add a user{% endtrans %}</a></li>
+                            {% endif %}
                         </ul>
                     </div>
 
index 0c35de2d40bb65dd0657edccb423289dff6bda6a..8ad24fbf8d9a2007c459194d27a1066e9e0bed3d 100644 (file)
     {% endif %}
         <h4 class="center">{% trans %}Export{% endtrans %}</h4>
         <ul>
-            {% if export_epub %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">{% trans %}EPUB{% endtrans %}</a></li>{% endif %}
-            {% if export_mobi %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">{% trans %}MOBI{% endtrans %}</a></li>{% endif %}
-            {% if export_pdf %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'pdf' }) }}">{% trans %}PDF{% endtrans %}</a></li>{% endif %}
-            {% if export_xml %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'xml' }) }}">{% trans %}XML{% endtrans %}</a></li>{% endif %}
-            {% if export_csv %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'json' }) }}">{% trans %}JSON{% endtrans %}</a></li>{% endif %}
-            {% if export_json %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'csv' }) }}">{% trans %}CSV{% endtrans %}</a></li>{% endif %}
-            {% if export_txt %}<li class="bold"><del><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'txt' }) }}">{% trans %}TXT{% endtrans %}</a></del></li>{% endif %}
+            {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">{% trans %}EPUB{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">{% trans %}MOBI{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_pdf') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'pdf' }) }}">{% trans %}PDF{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_xml') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'xml' }) }}">{% trans %}XML{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_csv') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'json' }) }}">{% trans %}JSON{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_json') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'csv' }) }}">{% trans %}CSV{% endtrans %}</a></li>{% endif %}
+            {% if craue_setting('export_txt') %}<li class="bold"><del><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'txt' }) }}">{% trans %}TXT{% endtrans %}</a></del></li>{% endif %}
         </ul>
     </div>
 
index 31963ae826ad2ecdc5f1d682d01296dce21ef4f4..dad96187cfe8b561772b0a6791dcb44abd2bff24 100644 (file)
             </a>
             <div class="collapsible-body">
                 <ul>
-                    {% if share_twitter %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}twitter{% endtrans %}"><span>{% trans %}twitter{% endtrans %}</span></a></li>{% endif %}
-                    {% if share_shaarli %}<li><a href="{{ shaarli_url }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %}
-                    {% if share_diaspora %}<li><a href="{{ diaspora_url }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora*{% endtrans %}"><span>{% trans %}diaspora*{% endtrans %}</span></a></li>{% endif %}
-                    {# {% if flattr %}{% if flattr.status == flattrable %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}"><span>{% trans %}flattr{% endtrans %}</span></a></li>{% elseif flattr.status == flattred %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}><span>{% trans %}flattr{% endtrans %}</span> ({{ flattr.numFlattrs }})</a></li>{% endif %}{% endif %} #}
-                    {% if carrot %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %}
-                    {% if share_mail %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %}
+                    {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}twitter{% endtrans %}"><span>{% trans %}twitter{% endtrans %}</span></a></li>{% endif %}
+                    {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %}
+                    {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora*{% endtrans %}"><span>{% trans %}diaspora*{% endtrans %}</span></a></li>{% endif %}
+                    {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %}
+                    {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %}
                 </ul>
             </div>
         </li>
             </a>
             <div class="collapsible-body">
                 <ul>
-                    {% if export_epub %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'epub' }) }}" title="Generate ePub file">EPUB</a></li>{% endif %}
-                    {% if export_mobi %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'mobi' }) }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
-                    {% if export_pdf %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'pdf' }) }}" title="Generate PDF file">PDF</a></li>{% endif %}
-                    {% if export_csv %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'csv' }) }}" title="Generate CSV file">CSV</a></li>{% endif %}
-                    {% if export_json %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'json' }) }}" title="Generate JSON file">JSON</a></li>{% endif %}
-                    {% if export_txt %}<li><del><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'txt' }) }}" title="Generate TXT file">TXT</a></del></li>{% endif %}
-                    {% if export_xml %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'xml' }) }}" title="Generate XML file">XML</a></li>{% endif %}
+                    {% if craue_setting('export_epub') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'epub' }) }}" title="Generate ePub file">EPUB</a></li>{% endif %}
+                    {% if craue_setting('export_mobi') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'mobi' }) }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
+                    {% if craue_setting('export_pdf') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'pdf' }) }}" title="Generate PDF file">PDF</a></li>{% endif %}
+                    {% if craue_setting('export_csv') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'csv' }) }}" title="Generate CSV file">CSV</a></li>{% endif %}
+                    {% if craue_setting('export_json') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'json' }) }}" title="Generate JSON file">JSON</a></li>{% endif %}
+                    {% if craue_setting('export_txt') %}<li><del><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'txt' }) }}" title="Generate TXT file">TXT</a></del></li>{% endif %}
+                    {% if craue_setting('export_xml') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'xml' }) }}" title="Generate XML file">XML</a></li>{% endif %}
                 </ul>
             </div>
         </li>
index a8b6dc3f66ae66ddfe23cf58d80f3527f322e3a0..dff9e61278528eaa9c2ca86545ffec115676f4d1 100644 (file)
@@ -45,6 +45,9 @@
             <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"><a class="waves-effect" href="{{ path('all') }}">{% trans %}all{% endtrans %}</a></li>
             <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"><a class="waves-effect" href="{{ path('tag') }}">{% trans %}tags{% endtrans %}</a></li>
             <li class="bold {% if currentRoute == 'config' %}active{% endif %}"><a class="waves-effect" href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li>
+            {% if is_granted('ROLE_SUPER_ADMIN') %}
+                <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}"><a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li>
+            {% endif %}
             <li class="bold {% if currentRoute == 'import' %}active{% endif %}"><a class="waves-effect" href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li>
             <li class="bold {% if currentRoute == 'howto' %}active{% endif %}"><a class="waves-effect" href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li>
             <li class="bold"><a class="waves-effect" class="icon icon-power" href="{{ path('fos_user_security_logout') }}" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li>
index 7d75e2b7b2755ee5878a51644aeb37ef4bc53e87..a79d7b9065409a24b4e0318b774546ef985c1df3 100644 (file)
@@ -81,6 +81,7 @@ class InstallCommandTest extends WallabagCoreTestCase
 
         $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
         $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
+        $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
         $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
         $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
 
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SettingsControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/SettingsControllerTest.php
new file mode 100644 (file)
index 0000000..fd698b3
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+namespace Wallabag\CoreBundle\Tests\Controller;
+
+use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
+
+/**
+ * The controller `SettingsController` does not exist.
+ * This test cover security against the internal settings page managed by CraueConfigBundle.
+ */
+class SettingsControllerTest extends WallabagCoreTestCase
+{
+    public function testSettingsWithAdmin()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $crawler = $client->request('GET', '/settings');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+    }
+
+    public function testSettingsWithNormalUser()
+    {
+        $this->logInAs('bob');
+        $client = $this->getClient();
+
+        $crawler = $client->request('GET', '/settings');
+
+        $this->assertEquals(403, $client->getResponse()->getStatusCode());
+    }
+}
index 7aee302f53f2e00fd341147467376b6e215bf775..1c1b4fa889f6a1919f722cba934d07098e8a196f 100644 (file)
@@ -15,6 +15,7 @@ class PocketController extends Controller
     {
         return $this->render('WallabagImportBundle:Pocket:index.html.twig', [
             'import' => $this->get('wallabag_import.pocket.import'),
+            'has_consumer_key' => '' == trim($this->get('craue_config')->get('pocket_consumer_key')) ? false : true,
         ]);
     }
 
index 617d551483aa1ac96c451adbf97f413a9438916d..22932238aeaa6c56f4982d90d5766f8e30f34ddc 100644 (file)
@@ -11,6 +11,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInt
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Entity\Tag;
 use Wallabag\CoreBundle\Helper\ContentProxy;
+use Craue\ConfigBundle\Util\Config;
 
 class PocketImport implements ImportInterface
 {
@@ -24,12 +25,12 @@ class PocketImport implements ImportInterface
     private $importedEntries = 0;
     protected $accessToken;
 
-    public function __construct(TokenStorageInterface $tokenStorage, EntityManager $em, ContentProxy $contentProxy, $consumerKey)
+    public function __construct(TokenStorageInterface $tokenStorage, EntityManager $em, ContentProxy $contentProxy, Config $craueConfig)
     {
         $this->user = $tokenStorage->getToken()->getUser();
         $this->em = $em;
         $this->contentProxy = $contentProxy;
-        $this->consumerKey = $consumerKey;
+        $this->consumerKey = $craueConfig->get('pocket_consumer_key');
         $this->logger = new NullLogger();
     }
 
index 6a11892e7581ae726bf630c5ad09eb4ba414b40a..e0942b1ae1573eb453eec4fa33d6a6f166da32ed 100644 (file)
@@ -17,7 +17,7 @@ services:
             - "@security.token_storage"
             - "@doctrine.orm.entity_manager"
             - "@wallabag_core.content_proxy"
-            - %pocket_consumer_key%
+            - "@craue_config"
         calls:
             - [ setClient, [ "@wallabag_import.pocket.client" ] ]
             - [ setLogger, [ "@logger" ]]
index 643ad77548f698848f3b61faf0163184a807f570..e0e36f387e68508cee9e1736eb74cf7286169516 100644 (file)
@@ -5,6 +5,12 @@
 <div class="row">
     <div class="col s12">
         <div class="card-panel settings">
+            {% if not has_consumer_key %}
+                <div class="card-panel red darken-1">
+                    {% trans %}Pocket import isn't configured. You need to define pocket_consumer_key.{% endtrans %}
+                </div>
+            {% endif %}
+
             <blockquote>{{ import.description|trans }}</blockquote>
             <p>{% trans %}You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.{% endtrans %}</p>
             <form method="post" action="{{ path('import_pocket_auth') }}">
index 76225fe4f21be2b119f7b17b9c247a7e5f3d1dc4..25359d56bb1b7d7db5c1bb6dec3012972d960b36 100644 (file)
@@ -55,11 +55,20 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
+        $config = $this->getMockBuilder('Craue\ConfigBundle\Util\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $config->expects($this->any())
+            ->method('get')
+            ->with('pocket_consumer_key')
+            ->willReturn($consumerKey);
+
         $pocket = new PocketImportMock(
             $this->tokenStorage,
             $this->em,
             $this->contentProxy,
-            $consumerKey
+            $config
         );
 
         $this->logHandler = new TestHandler();
index 6b108dd3ef2a7605720b3cab8c451e45557c8f88..d8403491f6d1b0a81d5d1a623b4208a080b794ed 100644 (file)
@@ -4,6 +4,7 @@ namespace Wallabag\UserBundle\Mailer;
 
 use Scheb\TwoFactorBundle\Model\Email\TwoFactorInterface;
 use Scheb\TwoFactorBundle\Mailer\AuthCodeMailerInterface;
+use Craue\ConfigBundle\Util\Config;
 
 /**
  * Custom mailer for TwoFactorBundle email.
@@ -47,7 +48,7 @@ class AuthCodeMailer implements AuthCodeMailerInterface
     private $supportUrl;
 
     /**
-     * Url for the wallabag instance.
+     * Url for the wallabag instance (only used for image in the HTML email template).
      *
      * @var string
      */
@@ -60,17 +61,16 @@ class AuthCodeMailer implements AuthCodeMailerInterface
      * @param \Twig_Environment $twig
      * @param string            $senderEmail
      * @param string            $senderName
-     * @param string            $supportUrl
-     * @param string            $wallabagUrl
+     * @param Config            $craueConfig Craue\Config instance to get wallabag support url from database
      */
-    public function __construct(\Swift_Mailer $mailer, \Twig_Environment $twig, $senderEmail, $senderName, $supportUrl, $wallabagUrl)
+    public function __construct(\Swift_Mailer $mailer, \Twig_Environment $twig, $senderEmail, $senderName, Config $craueConfig)
     {
         $this->mailer = $mailer;
         $this->twig = $twig;
         $this->senderEmail = $senderEmail;
         $this->senderName = $senderName;
-        $this->supportUrl = $supportUrl;
-        $this->wallabagUrl = $wallabagUrl;
+        $this->supportUrl = $craueConfig->get('wallabag_support_url');
+        $this->wallabagUrl = $craueConfig->get('wallabag_url');
     }
 
     /**
@@ -80,7 +80,7 @@ class AuthCodeMailer implements AuthCodeMailerInterface
      */
     public function sendAuthCode(TwoFactorInterface $user)
     {
-        $template = $this->twig->loadTemplate('@WallabagUserBundle/Resources/views/TwoFactor/email_auth_code.html.twig');
+        $template = $this->twig->loadTemplate('WallabagUserBundle:TwoFactor:email_auth_code.html.twig');
 
         $subject = $template->renderBlock('subject', array());
         $bodyHtml = $template->renderBlock('body_html', [
index 8321473ab3f0861350c07468e466aa47e617fef6..9a589332076e367673a29c6fbf463bd9181425b3 100644 (file)
@@ -11,8 +11,7 @@ services:
             - "@twig"
             - "%scheb_two_factor.email.sender_email%"
             - "%scheb_two_factor.email.sender_name%"
-            - "%wallabag_support_url%"
-            - "%wallabag_url%"
+            - "@craue_config"
 
     wallabag_user.password_resetting:
         class: Wallabag\UserBundle\EventListener\PasswordResettingListener
index e3f43a7e76caf1573dc331cc5724dee3c3608535..b95e195e6cafb4853996aab84ea9f7af347d9129 100644 (file)
@@ -26,6 +26,7 @@ class AuthCodeMailerTest extends \PHPUnit_Framework_TestCase
     protected $mailer;
     protected $spool;
     protected $twig;
+    protected $config;
 
     protected function setUp()
     {
@@ -42,7 +43,15 @@ class AuthCodeMailerTest extends \PHPUnit_Framework_TestCase
 {% block body_text %}text body {{ support_url }}{% endblock %}
 TWIG;
 
-        $this->twig = new \Twig_Environment(new \Twig_Loader_Array(array('@WallabagUserBundle/Resources/views/TwoFactor/email_auth_code.html.twig' => $twigTemplate)));
+        $this->twig = new \Twig_Environment(new \Twig_Loader_Array(array('WallabagUserBundle:TwoFactor:email_auth_code.html.twig' => $twigTemplate)));
+
+        $this->config = $this->getMockBuilder('Craue\ConfigBundle\Util\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->config->expects($this->any())
+            ->method('get')
+            ->willReturn('http://0.0.0.0/support');
     }
 
     public function testSendEmail()
@@ -58,8 +67,7 @@ TWIG;
             $this->twig,
             'nobody@test.io',
             'wallabag test',
-            'http://0.0.0.0/support',
-            'http://0.0.0.0'
+            $this->config
         );
 
         $authCodeMailer->sendAuthCode($user);