- { path: ^/annotations, roles: ROLE_USER }
- { path: ^/2fa, role: IS_AUTHENTICATED_2FA_IN_PROGRESS }
- { path: ^/users, roles: ROLE_SUPER_ADMIN }
+ - { path: ^/ignore-origin-instance-rules, roles: ROLE_SUPER_ADMIN }
- { path: ^/, roles: ROLE_USER }
--- /dev/null
+<?php
+
+namespace Wallabag\CoreBundle\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Annotation\Route;
+use Wallabag\CoreBundle\Entity\IgnoreOriginInstanceRule;
+
+/**
+ * IgnoreOriginInstanceRuleController controller.
+ *
+ * @Route("/ignore-origin-instance-rules")
+ */
+class IgnoreOriginInstanceRuleController extends Controller
+{
+ /**
+ * Lists all IgnoreOriginInstanceRule entities.
+ *
+ * @Route("/", name="ignore_origin_instance_rules_index", methods={"GET"})
+ */
+ public function indexAction()
+ {
+ $rules = $this->get('wallabag_core.ignore_origin_instance_rule_repository')->findAll();
+
+ return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:index.html.twig', [
+ 'rules' => $rules,
+ ]);
+ }
+
+ /**
+ * Creates a new ignore origin instance rule entity.
+ *
+ * @Route("/new", name="ignore_origin_instance_rules_new", methods={"GET", "POST"})
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function newAction(Request $request)
+ {
+ $ignoreOriginInstanceRule = new IgnoreOriginInstanceRule();
+
+ $form = $this->createForm('Wallabag\CoreBundle\Form\Type\IgnoreOriginInstanceRuleType', $ignoreOriginInstanceRule);
+ $form->handleRequest($request);
+
+ if ($form->isSubmitted() && $form->isValid()) {
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($ignoreOriginInstanceRule);
+ $em->flush();
+
+ $this->get('session')->getFlashBag()->add(
+ 'notice',
+ $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.added')
+ );
+
+ return $this->redirectToRoute('ignore_origin_instance_rules_index');
+ }
+
+ return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:new.html.twig', [
+ 'rule' => $ignoreOriginInstanceRule,
+ 'form' => $form->createView(),
+ ]);
+ }
+
+ /**
+ * Displays a form to edit an existing ignore origin instance rule entity.
+ *
+ * @Route("/{id}/edit", name="ignore_origin_instance_rules_edit", methods={"GET", "POST"})
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function editAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule)
+ {
+ $deleteForm = $this->createDeleteForm($ignoreOriginInstanceRule);
+ $editForm = $this->createForm('Wallabag\CoreBundle\Form\Type\IgnoreOriginInstanceRuleType', $ignoreOriginInstanceRule);
+ $editForm->handleRequest($request);
+
+ if ($editForm->isSubmitted() && $editForm->isValid()) {
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($ignoreOriginInstanceRule);
+ $em->flush();
+
+ $this->get('session')->getFlashBag()->add(
+ 'notice',
+ $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.updated')
+ );
+
+ return $this->redirectToRoute('ignore_origin_instance_rules_index');
+ }
+
+ return $this->render('WallabagCoreBundle:IgnoreOriginInstanceRule:edit.html.twig', [
+ 'rule' => $ignoreOriginInstanceRule,
+ 'edit_form' => $editForm->createView(),
+ 'delete_form' => $deleteForm->createView(),
+ ]);
+ }
+
+ /**
+ * Deletes a site credential entity.
+ *
+ * @Route("/{id}", name="ignore_origin_instance_rules_delete", methods={"DELETE"})
+ *
+ * @return \Symfony\Component\HttpFoundation\RedirectResponse
+ */
+ public function deleteAction(Request $request, IgnoreOriginInstanceRule $ignoreOriginInstanceRule)
+ {
+ $form = $this->createDeleteForm($ignoreOriginInstanceRule);
+ $form->handleRequest($request);
+
+ if ($form->isSubmitted() && $form->isValid()) {
+ $this->get('session')->getFlashBag()->add(
+ 'notice',
+ $this->get('translator')->trans('flashes.ignore_origin_instance_rule.notice.deleted')
+ );
+
+ $em = $this->getDoctrine()->getManager();
+ $em->remove($ignoreOriginInstanceRule);
+ $em->flush();
+ }
+
+ return $this->redirectToRoute('ignore_origin_instance_rules_index');
+ }
+
+ /**
+ * Creates a form to delete a ignore origin instance rule entity.
+ *
+ * @param IgnoreOriginInstanceRule $ignoreOriginInstanceRule The ignore origin instance rule entity
+ *
+ * @return \Symfony\Component\Form\Form The form
+ */
+ private function createDeleteForm(IgnoreOriginInstanceRule $ignoreOriginInstanceRule)
+ {
+ return $this->createFormBuilder()
+ ->setAction($this->generateUrl('ignore_origin_instance_rules_delete', ['id' => $ignoreOriginInstanceRule->getId()]))
+ ->setMethod('DELETE')
+ ->getForm()
+ ;
+ }
+}
--- /dev/null
+<?php
+
+namespace Wallabag\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\SubmitType;
+use Symfony\Component\Form\Extension\Core\Type\TextType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class IgnoreOriginInstanceRuleType extends AbstractType
+{
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ $builder
+ ->add('rule', TextType::class, [
+ 'required' => true,
+ 'label' => 'config.form_rules.rule_label',
+ ])
+ ->add('save', SubmitType::class, [
+ 'label' => 'config.form.save',
+ ])
+ ;
+ }
+
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => 'Wallabag\CoreBundle\Entity\IgnoreOriginInstanceRule',
+ ]);
+ }
+
+ public function getBlockPrefix()
+ {
+ return 'ignore_origin_instance_rule';
+ }
+}
back_to_unread: 'Tilbage til de ulæste artikler'
# users_management: 'Users management'
# site_credentials: 'Site credentials'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
# quickstart: "Quickstart"
top:
add_new_entry: 'Tilføj ny artikel'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Zurück zu ungelesenen Artikeln'
users_management: 'Benutzerverwaltung'
site_credentials: 'Zugangsdaten'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Schnelleinstieg"
top:
add_new_entry: 'Neuen Artikel hinzufügen'
added: 'Zugangsdaten für "%host%" hinzugefügt'
updated: 'Zugangsdaten für "%host%" aktualisiert'
deleted: 'Zugangsdaten für "%host%" gelöscht'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Back to unread articles'
users_management: 'Users management'
site_credentials: 'Site credentials'
+ ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Quickstart"
top:
add_new_entry: 'Add a new entry'
delete_confirm: Are you sure?
back_to_list: Back to list
+ignore_origin_instance_rule:
+ page_title: Global ignore origin rules
+ new_ignore_origin_instance_rule: Create a global ignore origin rule
+ edit_ignore_origin_instance_rule: Edit an existing ignore origin rule
+ description: "Here you can manage the global ignore origin rules used to ignore some patterns of origin url."
+ list:
+ actions: Actions
+ edit_action: Edit
+ yes: Yes
+ no: No
+ create_new_one: Create a new global ignore origin rule
+ form:
+ rule_label: Rule
+ save: Save
+ delete: Delete
+ delete_confirm: Are you sure?
+ back_to_list: Back to list
+
error:
page_title: An error occurred
added: 'Site credential for "%host%" added'
updated: 'Site credential for "%host%" updated'
deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ added: 'Global ignore origin rule added'
+ updated: 'Global ignore origin rule updated'
+ deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Volver a los artículos sin leer'
users_management: 'Configuración de usuarios'
site_credentials: 'Credenciales del sitio'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Inicio rápido"
top:
add_new_entry: 'Añadir un nuevo artículo'
added: 'Credenciales del sitio añadidas para "%host%"'
updated: 'Credenciales del sitio actualizadas para "%host%"'
deleted: 'Credenciales del sitio eliminadas para "%host%"'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'بازگشت به خواندهنشدهها'
# users_management: 'Users management'
# site_credentials: 'Site credentials'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Quickstart"
top:
add_new_entry: 'افزودن مقالهٔ تازه'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: "Retour aux articles non lus"
users_management: "Gestion des utilisateurs"
site_credentials: 'Accès aux sites'
+ ignore_origin_instance_rules: "Règles globales d'omission d'origine"
quickstart: "Pour bien débuter"
top:
add_new_entry: "Sauvegarder un nouvel article"
otp_disabled: "Authentification à double-facteur désactivée"
tagging_rules_imported: Règles bien importées
tagging_rules_not_imported: Impossible d'importer les règles
-<<<<<<< HEAD
-=======
ignore_origin_rules_deleted: "Règle d'omission d'origine supprimée"
ignore_origin_rules_updated: "Règle d'omission d'origine mise à jour"
->>>>>>> 4c595340... fixup! Add new Ignore Origin rules tab, update ConfigController
entry:
notice:
entry_already_saved: "Article déjà sauvegardé le %date%"
back_to_unread: 'Torna ai contenuti non letti'
users_management: 'Gestione utenti'
site_credentials: 'Credenziali sito'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Introduzione"
top:
add_new_entry: 'Aggiungi un nuovo contenuto'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Tornar als articles pas legits'
users_management: 'Gestion dels utilizaires'
site_credentials: 'Identificants del site'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Per ben començar"
top:
add_new_entry: 'Enregistrar un novèl article'
added: 'Identificant per "%host%" ajustat'
updated: 'Identificant per "%host%" mes a jorn'
deleted: 'Identificant per "%host%" suprimit'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Powrót do nieprzeczytanych artykułów'
users_management: 'Zarządzanie użytkownikami'
site_credentials: 'Poświadczenia strony'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Szybki start"
top:
add_new_entry: 'Dodaj nowy wpis'
added: 'Poświadczenie dla "%host%" dodane'
updated: 'Poświadczenie dla "%host%" zaktualizowane'
deleted: 'Poświadczenie dla "%host%" usuniętę'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Voltar para os artigos não lidos'
users_management: 'Gestão de Usuários'
site_credentials: 'Credenciais do site'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Começo Rápido"
top:
add_new_entry: 'Adicionar um novo artigo'
added: 'Credencial do site para "%host%" foi adicionada'
updated: 'Credencial do site pa "%host%" atualizada'
deleted: 'Credencial do site pa "%host%" removida'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Înapoi la articolele necitite'
# users_management: 'Users management'
# site_credentials: 'Site credentials'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
# quickstart: "Quickstart"
top:
add_new_entry: 'Introdu un nou articol'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Назад к непрочитанным записям'
users_management: 'Управление пользователями'
site_credentials: 'Site credentials'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Быстрый старт"
top:
add_new_entry: 'Добавить новую запись'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'กลับไปยังรายการที่ไม่ได้อ่าน'
users_management: 'การจัดการผู้ใช้'
site_credentials: 'การรับรองไซต์'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "เริ่มแบบด่วน"
top:
add_new_entry: 'เพิ่มรายการใหม่'
added: 'ไซต์ข้อมูลประจำตัวสำหรับ "%host%" ที่ทำการเพิ่ม'
updated: 'ไซต์ข้อมูลประจำตัวสำหรับ "%host%" ที่ทำการอัปเดต'
deleted: 'ไซต์ข้อมูลประจำตัวสำหรับ "%host%" ที่ทำการลบ'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
back_to_unread: 'Okunmayan makalelere geri dön'
# users_management: 'Users management'
# site_credentials: 'Site credentials'
+ # ignore_origin_instance_rules: 'Global ignore origin rules'
quickstart: "Hızlı başlangıç"
top:
add_new_entry: 'Yeni bir makale ekle'
# added: 'Site credential for "%host%" added'
# updated: 'Site credential for "%host%" updated'
# deleted: 'Site credential for "%host%" deleted'
+ ignore_origin_instance_rule:
+ notice:
+ # added: 'Global ignore origin rule added'
+ # updated: 'Global ignore origin rule updated'
+ # deleted: 'Global ignore origin rule deleted'
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <h4>{{ 'ignore_origin_instance_rule.edit_ignore_origin_instance_rule'|trans }}</h4>
+
+ <div id="set6" class="col s12">
+ {{ form_start(edit_form) }}
+ {{ form_errors(edit_form) }}
+
+ <div class="row">
+ <div class="input-field col s12">
+ {{ form_label(edit_form.rule) }}
+ {{ form_errors(edit_form.rule) }}
+ {{ form_widget(edit_form.rule) }}
+ </div>
+ </div>
+
+ <br/>
+
+ {{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
+ {{ form_widget(edit_form._token) }}
+ </form>
+ <p>
+ {{ form_start(delete_form) }}
+ <button onclick="return confirm('{{ 'ignore_origin_instance_rule.form.delete_confirm'|trans|escape('js') }}')" type="submit" class="btn waves-effect waves-light red">{{ 'ignore_origin_instance_rule.form.delete'|trans }}</button>
+ {{ form_end(delete_form) }}
+ </p>
+ <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'ignore_origin_instance_rule.form.back_to_list'|trans }}</a></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <p class="help">{{ 'ignore_origin_instance_rule.description'|trans|raw }}</p>
+
+ <table class="bordered">
+ <thead>
+ <tr>
+ <th>{{ 'ignore_origin_instance_rule.form.rule_label'|trans }}</th>
+ <th>{{ 'ignore_origin_instance_rule.list.actions'|trans }}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for rule in rules %}
+ <tr>
+ <td>{{ rule.rule }}</td>
+ <td>
+ <a href="{{ path('ignore_origin_instance_rules_edit', { 'id': rule.id }) }}">{{ 'ignore_origin_instance_rule.list.edit_action'|trans }}</a>
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ <br />
+ <p>
+ <a href="{{ path('ignore_origin_instance_rules_new') }}" class="waves-effect waves-light btn">{{ 'ignore_origin_instance_rule.list.create_new_one'|trans }}</a>
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <h4>{{ 'ignore_origin_instance_rule.new_ignore_origin_instance_rule'|trans }}</h4>
+
+ <div id="set6" class="col s12">
+ {{ form_start(form) }}
+ {{ form_errors(form) }}
+
+ <div class="row">
+ <div class="input-field col s12">
+ {{ form_label(form.rule) }}
+ {{ form_errors(form.rule) }}
+ {{ form_widget(form.rule) }}
+ </div>
+ </div>
+
+ {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
+ {{ form_rest(form) }}
+ </form>
+ <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'ignore_origin_instance_rule.form.back_to_list'|trans }}</a></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
{% if is_granted('ROLE_SUPER_ADMIN') %}
<li class="menu users"><a href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a></li>
<li class="menu internal"><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li>
+ <li class="menu ignore"><a href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'menu.left.ignore_origin_instance_rules'|trans }}</a></li>
{% endif %}
<li class="menu import"><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li>
<li class="menu howto"><a href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a></li>
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <h4>{{ 'ignore_origin_instance_rule.edit_ignore_origin_instance_rule'|trans }}</h4>
+
+ <div id="set6" class="col s12">
+ {{ form_start(edit_form) }}
+ {{ form_errors(edit_form) }}
+
+ <div class="row">
+ <div class="input-field col s12">
+ {{ form_label(edit_form.rule) }}
+ {{ form_errors(edit_form.rule) }}
+ {{ form_widget(edit_form.rule) }}
+ </div>
+ </div>
+
+ <br/>
+
+ {{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
+ {{ form_widget(edit_form._token) }}
+ </form>
+ <p>
+ {{ form_start(delete_form) }}
+ <button onclick="return confirm('{{ 'ignore_origin_instance_rule.form.delete_confirm'|trans|escape('js') }}')" type="submit" class="btn waves-effect waves-light red">{{ 'ignore_origin_instance_rule.form.delete'|trans }}</button>
+ {{ form_end(delete_form) }}
+ </p>
+ <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'ignore_origin_instance_rule.form.back_to_list'|trans }}</a></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <p class="help">{{ 'ignore_origin_instance_rule.description'|trans|raw }}</p>
+
+ <table class="bordered">
+ <thead>
+ <tr>
+ <th>{{ 'ignore_origin_instance_rule.form.rule_label'|trans }}</th>
+ <th>{{ 'ignore_origin_instance_rule.list.actions'|trans }}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for rule in rules %}
+ <tr>
+ <td>{{ rule.rule }}</td>
+ <td>
+ <a href="{{ path('ignore_origin_instance_rules_edit', { 'id': rule.id }) }}">{{ 'ignore_origin_instance_rule.list.edit_action'|trans }}</a>
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ <br />
+ <p>
+ <a href="{{ path('ignore_origin_instance_rules_new') }}" class="waves-effect waves-light btn">{{ 'ignore_origin_instance_rule.list.create_new_one'|trans }}</a>
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
--- /dev/null
+{% extends "WallabagCoreBundle::layout.html.twig" %}
+
+{% block title %}{{ 'ignore_origin_instance_rule.page_title'|trans }}{% endblock %}
+
+{% block content %}
+
+ <div class="row">
+ <div class="col s12">
+ <div class="card-panel">
+ <div class="row">
+ <div class="input-field col s12">
+ <h4>{{ 'ignore_origin_instance_rule.new_ignore_origin_instance_rule'|trans }}</h4>
+
+ <div id="set6" class="col s12">
+ {{ form_start(form) }}
+ {{ form_errors(form) }}
+
+ <div class="row">
+ <div class="input-field col s12">
+ {{ form_label(form.rule) }}
+ {{ form_errors(form.rule) }}
+ {{ form_widget(form.rule) }}
+ </div>
+ </div>
+
+ {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
+ {{ form_rest(form) }}
+ </form>
+ <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'ignore_origin_instance_rule.form.back_to_list'|trans }}</a></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
<a class="waves-effect" href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a>
</li>
- <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}">
+ <li class="bold {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}">
<a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a>
</li>
+
+ <li class="bold border-bottom {% if currentRoute == 'ignore_origin_instance_rules_index' %}active{% endif %}">
+ <a class="waves-effect" href="{{ path('ignore_origin_instance_rules_index') }}">{{ 'menu.left.ignore_origin_instance_rules'|trans }}</a>
+ </li>
{% endif %}
<li class="bold {% if currentRoute == 'import' %}active{% endif %}">
<a class="waves-effect" href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a>
--- /dev/null
+<?php
+
+namespace Tests\Wallabag\CoreBundle\Controller;
+
+use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
+
+class IgnoreOriginInstanceRuleControllerTest extends WallabagCoreTestCase
+{
+ public function testListIgnoreOriginInstanceRule()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/ignore-origin-instance-rules/');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $body = $crawler->filter('body')->extract(['_text'])[0];
+
+ $this->assertContains('ignore_origin_instance_rule.description', $body);
+ $this->assertContains('ignore_origin_instance_rule.list.create_new_one', $body);
+ }
+
+ public function testIgnoreOriginInstanceRuleCreationEditionDeletion()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ // Creation
+ $crawler = $client->request('GET', '/ignore-origin-instance-rules/new');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $body = $crawler->filter('body')->extract(['_text'])[0];
+
+ $this->assertContains('ignore_origin_instance_rule.new_ignore_origin_instance_rule', $body);
+ $this->assertContains('ignore_origin_instance_rule.form.back_to_list', $body);
+
+ $form = $crawler->filter('button[id=ignore_origin_instance_rule_save]')->form();
+
+ $data = [
+ 'ignore_origin_instance_rule[rule]' => 'host = "foo.example.com"',
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertContains('flashes.ignore_origin_instance_rule.notice.added', $crawler->filter('body')->extract(['_text'])[0]);
+
+ // Edition
+ $editLink = $crawler->filter('div[id=content] table a')->last()->link();
+
+ $crawler = $client->click($editLink);
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $this->assertContains('foo.example.com', $crawler->filter('form[name=ignore_origin_instance_rule] input[type=text]')->extract(['value'])[0]);
+
+ $body = $crawler->filter('body')->extract(['_text'])[0];
+
+ $this->assertContains('ignore_origin_instance_rule.edit_ignore_origin_instance_rule', $body);
+ $this->assertContains('ignore_origin_instance_rule.form.back_to_list', $body);
+
+ $form = $crawler->filter('button[id=ignore_origin_instance_rule_save]')->form();
+
+ $data = [
+ 'ignore_origin_instance_rule[rule]' => 'host = "bar.example.com"',
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertContains('flashes.ignore_origin_instance_rule.notice.updated', $crawler->filter('body')->extract(['_text'])[0]);
+
+ $editLink = $crawler->filter('div[id=content] table a')->last()->link();
+
+ $crawler = $client->click($editLink);
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $this->assertContains('bar.example.com', $crawler->filter('form[name=ignore_origin_instance_rule] input[type=text]')->extract(['value'])[0]);
+
+ $deleteForm = $crawler->filter('body')->selectButton('ignore_origin_instance_rule.form.delete')->form();
+
+ $client->submit($deleteForm, []);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertContains('flashes.ignore_origin_instance_rule.notice.deleted', $crawler->filter('body')->extract(['_text'])[0]);
+ }
+
+ public function dataForIgnoreOriginInstanceRuleCreationFail()
+ {
+ return [
+ [
+ [
+ 'ignore_origin_instance_rule[rule]' => 'foo = "bar"',
+ ],
+ [
+ 'The variable',
+ 'does not exist.',
+ ],
+ ],
+ [
+ [
+ 'ignore_origin_instance_rule[rule]' => '_all != "none"',
+ ],
+ [
+ 'The operator',
+ 'does not exist.',
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider dataForIgnoreOriginInstanceRuleCreationFail
+ */
+ public function testIgnoreOriginInstanceRuleCreationFail($data, $messages)
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/ignore-origin-instance-rules/new');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('button[id=ignore_origin_instance_rule_save]')->form();
+
+ $crawler = $client->submit($form, $data);
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
+
+ foreach ($messages as $message) {
+ $this->assertContains($message, $body[0]);
+ }
+ }
+}