Projet

Général

Profil

0001-wcs-add-new-cell-for-backoffice-submission-23536.patch

Frédéric Péters, 10 août 2018 11:59

Télécharger (6,83 ko)

Voir les différences:

Subject: [PATCH] wcs: add new cell for backoffice submission (#23536)

 .../0016_backofficesubmissioncell.py          | 38 +++++++++++++++++++
 combo/apps/wcs/models.py                      | 25 ++++++++++++
 .../combo/wcs/backoffice_submission.html      | 18 +++++++++
 tests/test_wcs.py                             | 25 +++++++++++-
 4 files changed, 105 insertions(+), 1 deletion(-)
 create mode 100644 combo/apps/wcs/migrations/0016_backofficesubmissioncell.py
 create mode 100644 combo/apps/wcs/templates/combo/wcs/backoffice_submission.html
combo/apps/wcs/migrations/0016_backofficesubmissioncell.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.12 on 2018-08-10 08:05
3
from __future__ import unicode_literals
4

  
5
import combo.apps.wcs.models
6
from django.db import migrations, models
7
import django.db.models.deletion
8

  
9

  
10
class Migration(migrations.Migration):
11

  
12
    dependencies = [
13
        ('data', '0035_page_related_cells'),
14
        ('wcs', '0015_wcscurrentformscell_categories'),
15
    ]
16

  
17
    operations = [
18
        migrations.CreateModel(
19
            name='BackofficeSubmissionCell',
20
            fields=[
21
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22
                ('placeholder', models.CharField(max_length=20)),
23
                ('order', models.PositiveIntegerField()),
24
                ('slug', models.SlugField(blank=True, verbose_name='Slug')),
25
                ('extra_css_class', models.CharField(blank=True, max_length=100, verbose_name='Extra classes for CSS styling')),
26
                ('public', models.BooleanField(default=True, verbose_name='Public')),
27
                ('restricted_to_unlogged', models.BooleanField(default=False, verbose_name='Restrict to unlogged users')),
28
                ('last_update_timestamp', models.DateTimeField(auto_now=True)),
29
                ('wcs_site', models.CharField(blank=True, max_length=50, verbose_name='Site')),
30
                ('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')),
31
                ('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
32
            ],
33
            options={
34
                'verbose_name': 'Backoffice Submission',
35
            },
36
            bases=(models.Model, combo.apps.wcs.models.WcsBlurpMixin),
37
        ),
38
    ]
combo/apps/wcs/models.py
503 503
            self.wcs_site = list(get_wcs_services().keys())[0]
504 504
        extra_context['url'] = get_wcs_services().get(self.wcs_site).get('url')
505 505
        return extra_context
506

  
507

  
508
@register_cell_class
509
class BackofficeSubmissionCell(WcsDataBaseCell):
510
    api_url = '/api/formdefs/?backoffice-submission=on'
511
    variable_name = 'all_formdefs'
512
    template_name = 'combo/wcs/backoffice_submission.html'
513
    cache_duration = 600
514

  
515
    class Meta:
516
        verbose_name = _('Backoffice Submission')
517

  
518
    def get_concerned_user(self, context):
519
        # always return connected user; the selected user will be used in the
520
        # query string when creating a new formdata.
521
        return getattr(context.get('request'), 'user', None)
522

  
523
    def get_cell_extra_context(self, context):
524
        context = super(BackofficeSubmissionCell, self).get_cell_extra_context(context)
525
        # add a fake category where it's missing
526
        for site_formdefs in context['all_formdefs'].values():
527
            for formdef in site_formdefs['data']:
528
                if not 'category' in formdef:
529
                    formdef['category'] = _('Misc')
530
        return context
combo/apps/wcs/templates/combo/wcs/backoffice_submission.html
1
{% load i18n %}
2
{% block cell-content %}
3
<h2>{% trans "New Form" %}</h2>
4
{% for site_formdefs in all_formdefs.values %}
5
  <div class="links-list">
6
  {% if all_formdefs.keys|length > 1 %}<h3>{{ site_formdefs.title }}</h3>{% endif %}
7
  <ul>
8
  {% regroup site_formdefs.data|dictsort:"category" by category as categories_formdefs %}
9
  {% for category_formdefs in categories_formdefs %}
10
    <li><h4>{{ category_formdefs.grouper }}</h4></li>
11
    {% for formdef in category_formdefs.list|dictsort:"title" %}
12
      <li><a href="{{formdef.backoffice_submission_url}}?NameID={{name_id}}">{{formdef.title}}</a></li>
13
    {% endfor %}
14
  {% endfor %}
15
</ul>
16
</div>
17
{% endfor %}
18
{% endblock %}
tests/test_wcs.py
20 20
from combo.data.models import Page
21 21
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell,
22 22
        WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
23
        TrackingCodeInputCell)
23
        TrackingCodeInputCell, BackofficeSubmissionCell)
24 24

  
25 25
from combo.utils import NothingInCacheException
26 26

  
......
143 143
formdef.name = 'a private form'
144 144
formdef.category_id = cats[2].id
145 145
formdef.roles = [role.id]
146
formdef.backoffice_submission_roles = [role.id]
146 147
formdef.fields = []
147 148
formdef.store()
148 149

  
......
652 653
    assert len(app.get('/api/search/tracking-code/?q=BBCCDDFF').json.get('data')) == 0
653 654
    assert len(app.get('/api/search/tracking-code/?q=CNPHNTFB').json.get('data')) == 1
654 655
    assert len(app.get('/api/search/tracking-code/?q=BBCCDDFFG').json.get('data')) == 0
656

  
657
@wcsctl_present
658
def test_backoffice_submission_cell_render(context):
659
    page = Page(title='xxx', slug='test_backoffice_submission_cell_render', template_name='standard')
660
    page.save()
661
    cell = BackofficeSubmissionCell(page=page, placeholder='content', order=0)
662
    cell.wcs_site = 'default'
663
    cell.save()
664

  
665
    context['synchronous'] = True # to get fresh content
666

  
667
    result = cell.render(context)
668
    assert '/backoffice/submission/a-private-form/' not in result
669

  
670
    class MockUser(object):
671
        email = 'foo@example.net'
672
        def is_authenticated(self):
673
            return True
674
    context['request'].user = MockUser()
675

  
676
    result = cell.render(context)
677
    assert '/backoffice/submission/a-private-form/' in result
655
-