wcs: add new cell for backoffice submission (#23536)
This commit is contained in:
parent
3eb37ec764
commit
80fcdb2f67
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.12 on 2018-08-10 08:05
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import combo.apps.wcs.models
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('data', '0035_page_related_cells'),
|
||||||
|
('wcs', '0015_wcscurrentformscell_categories'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='BackofficeSubmissionCell',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('placeholder', models.CharField(max_length=20)),
|
||||||
|
('order', models.PositiveIntegerField()),
|
||||||
|
('slug', models.SlugField(blank=True, verbose_name='Slug')),
|
||||||
|
('extra_css_class', models.CharField(blank=True, max_length=100, verbose_name='Extra classes for CSS styling')),
|
||||||
|
('public', models.BooleanField(default=True, verbose_name='Public')),
|
||||||
|
('restricted_to_unlogged', models.BooleanField(default=False, verbose_name='Restrict to unlogged users')),
|
||||||
|
('last_update_timestamp', models.DateTimeField(auto_now=True)),
|
||||||
|
('wcs_site', models.CharField(blank=True, max_length=50, verbose_name='Site')),
|
||||||
|
('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')),
|
||||||
|
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Backoffice Submission',
|
||||||
|
},
|
||||||
|
bases=(models.Model, combo.apps.wcs.models.WcsBlurpMixin),
|
||||||
|
),
|
||||||
|
]
|
|
@ -503,3 +503,28 @@ class TrackingCodeInputCell(CellBase):
|
||||||
self.wcs_site = list(get_wcs_services().keys())[0]
|
self.wcs_site = list(get_wcs_services().keys())[0]
|
||||||
extra_context['url'] = get_wcs_services().get(self.wcs_site).get('url')
|
extra_context['url'] = get_wcs_services().get(self.wcs_site).get('url')
|
||||||
return extra_context
|
return extra_context
|
||||||
|
|
||||||
|
|
||||||
|
@register_cell_class
|
||||||
|
class BackofficeSubmissionCell(WcsDataBaseCell):
|
||||||
|
api_url = '/api/formdefs/?backoffice-submission=on'
|
||||||
|
variable_name = 'all_formdefs'
|
||||||
|
template_name = 'combo/wcs/backoffice_submission.html'
|
||||||
|
cache_duration = 600
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('Backoffice Submission')
|
||||||
|
|
||||||
|
def get_concerned_user(self, context):
|
||||||
|
# always return connected user; the selected user will be used in the
|
||||||
|
# query string when creating a new formdata.
|
||||||
|
return getattr(context.get('request'), 'user', None)
|
||||||
|
|
||||||
|
def get_cell_extra_context(self, context):
|
||||||
|
context = super(BackofficeSubmissionCell, self).get_cell_extra_context(context)
|
||||||
|
# add a fake category where it's missing
|
||||||
|
for site_formdefs in context['all_formdefs'].values():
|
||||||
|
for formdef in site_formdefs['data']:
|
||||||
|
if not 'category' in formdef:
|
||||||
|
formdef['category'] = _('Misc')
|
||||||
|
return context
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
{% load i18n %}
|
||||||
|
{% block cell-content %}
|
||||||
|
<h2>{% trans "New Form" %}</h2>
|
||||||
|
{% for site_formdefs in all_formdefs.values %}
|
||||||
|
<div class="links-list">
|
||||||
|
{% if all_formdefs.keys|length > 1 %}<h3>{{ site_formdefs.title }}</h3>{% endif %}
|
||||||
|
<ul>
|
||||||
|
{% regroup site_formdefs.data|dictsort:"category" by category as categories_formdefs %}
|
||||||
|
{% for category_formdefs in categories_formdefs %}
|
||||||
|
<li><h4>{{ category_formdefs.grouper }}</h4></li>
|
||||||
|
{% for formdef in category_formdefs.list|dictsort:"title" %}
|
||||||
|
<li><a href="{{formdef.backoffice_submission_url}}?NameID={{name_id}}">{{formdef.title}}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
|
@ -20,7 +20,7 @@ from django.utils.six.moves.urllib import parse as urlparse
|
||||||
from combo.data.models import Page
|
from combo.data.models import Page
|
||||||
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell,
|
from combo.apps.wcs.models import (WcsFormCell, WcsCurrentFormsCell,
|
||||||
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
|
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
|
||||||
TrackingCodeInputCell)
|
TrackingCodeInputCell, BackofficeSubmissionCell)
|
||||||
|
|
||||||
from combo.utils import NothingInCacheException
|
from combo.utils import NothingInCacheException
|
||||||
|
|
||||||
|
@ -143,9 +143,15 @@ formdef = FormDef()
|
||||||
formdef.name = 'a private form'
|
formdef.name = 'a private form'
|
||||||
formdef.category_id = cats[2].id
|
formdef.category_id = cats[2].id
|
||||||
formdef.roles = [role.id]
|
formdef.roles = [role.id]
|
||||||
|
formdef.backoffice_submission_roles = [role.id]
|
||||||
formdef.fields = []
|
formdef.fields = []
|
||||||
formdef.store()
|
formdef.store()
|
||||||
|
|
||||||
|
user2 = get_publisher().user_class() # agent
|
||||||
|
user2.name = 'foo2 bar2'
|
||||||
|
user2.email = 'foo2@example.net'
|
||||||
|
user2.roles = [role.id]
|
||||||
|
user2.store()
|
||||||
""",
|
""",
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -652,3 +658,34 @@ def test_tracking_code_search(app):
|
||||||
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFF').json.get('data')) == 0
|
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFF').json.get('data')) == 0
|
||||||
assert len(app.get('/api/search/tracking-code/?q=CNPHNTFB').json.get('data')) == 1
|
assert len(app.get('/api/search/tracking-code/?q=CNPHNTFB').json.get('data')) == 1
|
||||||
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFFG').json.get('data')) == 0
|
assert len(app.get('/api/search/tracking-code/?q=BBCCDDFFG').json.get('data')) == 0
|
||||||
|
|
||||||
|
@wcsctl_present
|
||||||
|
def test_backoffice_submission_cell_render(context):
|
||||||
|
page = Page(title='xxx', slug='test_backoffice_submission_cell_render', template_name='standard')
|
||||||
|
page.save()
|
||||||
|
cell = BackofficeSubmissionCell(page=page, placeholder='content', order=0)
|
||||||
|
cell.wcs_site = 'default'
|
||||||
|
cell.save()
|
||||||
|
|
||||||
|
context['synchronous'] = True # to get fresh content
|
||||||
|
|
||||||
|
result = cell.render(context)
|
||||||
|
assert '/backoffice/submission/a-private-form/' not in result
|
||||||
|
|
||||||
|
class MockUser(object):
|
||||||
|
email = 'foo@example.net'
|
||||||
|
def is_authenticated(self):
|
||||||
|
return True
|
||||||
|
context['request'].user = MockUser()
|
||||||
|
|
||||||
|
result = cell.render(context)
|
||||||
|
assert '/backoffice/submission/a-private-form/' not in result
|
||||||
|
|
||||||
|
class MockUser(object):
|
||||||
|
email = 'foo2@example.net'
|
||||||
|
def is_authenticated(self):
|
||||||
|
return True
|
||||||
|
context['request'].user = MockUser()
|
||||||
|
|
||||||
|
result = cell.render(context)
|
||||||
|
assert '/backoffice/submission/a-private-form/' in result
|
||||||
|
|
Loading…
Reference in New Issue