def registerStorage(klass, **kw): setSecurity(klass, defaultAccess=None, objectPermission=None) storage = StorageDescription(klass, **kw) storageDescriptionRegistry.register(storage.id, storage)
def registerField(klass, **kw): setSecurity(klass, defaultAccess='allow', objectPermission=None) field = FieldDescription(klass, **kw) fieldDescriptionRegistry.register(field.id, field)
def registerWidget(klass, **kw): setSecurity(klass, defaultAccess='allow', objectPermission=None) widget = WidgetDescription(klass, **kw) widgetDescriptionRegistry.register(widget.id, widget)
columns = self.listColumns() rows = self._annotations.get("rows") # prepare new row row = dict() row["DT_RowId"] = len(rows) # add an incremental id to new row for column in columns: row[column["id"]] = _("click here to enter data") # save new row rows.append(row) self._annotations._p_changed = True security.declarePrivate("delete_rows") def delete_rows(self, idxs): """Delete (multiple) row.""" rows = self._annotations.get("rows") for index, row in enumerate(rows): if row["DT_RowId"] in idxs: del rows[index] self._annotations._p_changed = True security.declarePrivate("unset") def unset(self, name, instance, **kwargs): pass setSecurity(LocalSource)
"""Table data sources are masquerading as Archetypes Storages.""" from AccessControl import ClassSecurityInfo from Products.Archetypes.Storage import Storage from Products.Archetypes.interfaces import IBaseObject from Products.Archetypes.utils import setSecurity from collective.table.interfaces import ITableField from zope import component class BaseSource(Storage): component.adapts(ITableField, IBaseObject) security = ClassSecurityInfo() title = None description = None configurationView = None editable = False sortable = False queryable = False def __init__(self, field, instance): self.field = field self.instance = instance security.declarePrivate('listColumns') def listColumns(self): raise NotImplementedError() setSecurity(BaseSource)