0001-wcs-add-new-cell-for-backoffice-submission-23536.patch
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 |
- |