Admin: add a duplicate field command

* wcs/admin/fields.ptl:
   add a duplicate field command, that:
    - use 'copy' module to copy the Field object
    - find a new id, and
    - insert just after the copied field.
This commit is contained in:
Benjamin Dauvergne 2009-03-26 16:24:58 +00:00
parent ecfa0534e0
commit 18eb0aa18b
1 changed files with 19 additions and 2 deletions

View File

@ -13,6 +13,7 @@ from qommon.admin.menu import html_top, command_icon, error_page
from wcs import fields
from wcs.formdef import FormDef
from wcs.fields import get_field_types
import copy
class FieldWidget(CompositeWidget):
large = False
@ -50,7 +51,7 @@ class FieldWidget(CompositeWidget):
class FieldDefPage(Directory):
_q_exports = ['', 'delete', 'down', 'up', 'ajaxtitle']
_q_exports = ['', 'delete', 'down', 'up', 'ajaxtitle', 'duplicate']
large = False
section = None
@ -133,6 +134,22 @@ class FieldDefPage(Directory):
self.objectdef.store()
return redirect('../../fields/')
def duplicate(self):
field_pos = self.objectdef.fields.index(self.field)
fields = self.objectdef.fields
new_field = copy.copy(self.field)
def lax_int(s):
try:
return int(s)
except (ValueError, TypeError):
return -1
# allocate a new id
id = str(max([lax_int(x.id) for x in self.objectdef.fields]) + 1)
new_field.id = id
fields.insert(field_pos+1, new_field)
self.objectdef.store()
return redirect('../../fields/')
def down(self):
field_pos = self.objectdef.fields.index(self.field)
fields = self.objectdef.fields
@ -242,7 +259,7 @@ class FieldsDirectory(Directory):
command_icon('?page=%s' % current_page_no, 'view',
label = _('Limit display to this page'))
command_icon('%s/' % field.id, 'edit')
command_icon('%s/duplicate' % field.id, 'duplicate')
command_icon('%s/delete' % field.id, 'remove', popup = True)
'</p></li>'
'</ul>'