Projet

Général

Profil

0001-mail-templates-add-duplicate-action-60690.patch

Frédéric Péters, 15 janvier 2022 12:27

Télécharger (4,31 ko)

Voir les différences:

Subject: [PATCH] mail templates: add duplicate action (#60690)

 tests/test_mail_templates.py | 24 ++++++++++++++++++++++++
 wcs/admin/mail_templates.py  | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
tests/test_mail_templates.py
338 338
    resp.form['file'] = Upload('mail_template.wcs', b'garbage')
339 339
    resp = resp.form.submit()
340 340
    assert 'Invalid File' in resp.text
341

  
342

  
343
def test_mail_templates_duplicate(pub, superuser, mail_template):
344
    app = login(get_app(pub))
345
    resp = app.get('/backoffice/workflows/mail-templates/1/')
346

  
347
    resp = resp.click(href='duplicate')
348
    assert resp.form['name'].value == 'test MT (copy)'
349
    resp = resp.form.submit('cancel').follow()
350
    assert MailTemplate.count() == 1
351

  
352
    resp = resp.click(href='duplicate')
353
    assert resp.form['name'].value == 'test MT (copy)'
354
    resp = resp.form.submit('submit').follow()
355
    assert MailTemplate.count() == 2
356

  
357
    resp = app.get('/backoffice/workflows/mail-templates/1/')
358
    resp = resp.click(href='duplicate')
359
    assert resp.form['name'].value == 'test MT (copy 2)'
360
    resp.form['name'].value = 'other copy'
361
    resp = resp.form.submit('submit').follow()
362
    assert MailTemplate.count() == 3
363
    assert {x.name for x in MailTemplate.select()} == {'test MT', 'test MT (copy)', 'other copy'}
364
    assert {x.slug for x in MailTemplate.select()} == {'test-mt', 'test-mt-copy', 'other-copy'}
wcs/admin/mail_templates.py
128 128
        '',
129 129
        'edit',
130 130
        'delete',
131
        'duplicate',
131 132
        'export',
132 133
        ('history', 'snapshots_dir'),
133 134
    ]
......
149 150
        r += htmltext('<ul id="sidebar-actions">')
150 151
        if not self.mail_template.is_readonly():
151 152
            r += htmltext('<li><a href="export">%s</a></li>') % _('Export')
153
            r += htmltext('<li><a href="duplicate" rel="popup">%s</a></li>') % _('Duplicate')
152 154
            r += htmltext('<li><a href="delete" rel="popup">%s</a></li>') % _('Delete')
153 155
            if get_publisher().snapshot_class:
154 156
                r += htmltext('<li><a rel="popup" href="history/save">%s</a></li>') % _('Save snapshot')
......
295 297
            filename='mail-template-%s.wcs' % self.mail_template.slug,
296 298
            content_type='application/x-wcs-mail-template',
297 299
        )
300

  
301
    def duplicate(self):
302
        form = Form(enctype='multipart/form-data')
303
        name_widget = form.add(StringWidget, 'name', title=_('Name'), required=True, size=30)
304
        form.add_submit('submit', _('Submit'))
305
        form.add_submit('cancel', _('Cancel'))
306
        if form.get_widget('cancel').parse():
307
            return redirect('.')
308

  
309
        if not form.is_submitted():
310
            original_name = self.mail_template.name
311
            new_name = '%s %s' % (original_name, _('(copy)'))
312
            names = [x.name for x in MailTemplate.select()]
313
            no = 2
314
            while new_name in names:
315
                new_name = _('%(name)s (copy %(no)d)') % {'name': original_name, 'no': no}
316
                no += 1
317
            name_widget.set_value(new_name)
318

  
319
        if not form.is_submitted() or form.has_errors():
320
            html_top('mail_templates', title=_('Duplicate Mail Template'))
321
            r = TemplateIO(html=True)
322
            get_response().breadcrumb.append(('duplicate', _('Duplicate')))
323
            r += htmltext('<h2>%s</h2>') % _('Duplicate Mail Template')
324
            r += form.render()
325
            return r.getvalue()
326

  
327
        self.mail_template.id = None
328
        self.mail_template.slug = None
329
        self.mail_template.name = form.get_widget('name').parse()
330
        self.mail_template.store()
331
        return redirect('../%s/' % self.mail_template.id)
298
-