class ObjectSelectorTaskForm(FoldingFieldSubmitForm): def __init__(self, app, name, task): super(ObjectSelectorTaskForm, self).__init__(app, name) self.task = task self.cls = task.selector.cls item = IntegerParameter(app, "item") self.ids = ListParameter(app, "id", item) self.add_parameter(self.ids) self.selection = SessionAttribute(self, "selection") self.content = self.SelectionList(app, "fields") self.replace_child(self.content) self.app.form_page.modes.add_mode(self) def do_process(self, session): # If the selection list is zero length, # set cancel state and let processing complete. if self.get_selection(session) == 0: self.cancel(session) super(ObjectSelectorTaskForm, self).do_process(session) def get_selection(self, session): selection = list() self.selection.set(session, selection) for id in self.ids.get(session): try: item = self.cls.get_object_by_id(session.cursor, id) selection.append(item) except: pass return len(selection) def process_submit(self, session): selection = self.selection.get(session) self.task.invoke(session, selection) self.task.exit_with_redirect(session) def render_title(self, session): return self.task.get_title(session) class SelectionList(ItemSet): def do_get_items(self, session): return self.parent.selection.get(session) def render_item_content(self, session, item): # already escaped in get_item_content return self.parent.task.get_item_content(session, item) def render_item_class(self, session, item): return "item"
def __init__(self, app, name, task): super(ObjectSelectorTaskForm, self).__init__(app, name) self.task = task self.cls = task.selector.cls item = IntegerParameter(app, "item") self.ids = ListParameter(app, "id", item) self.add_parameter(self.ids) self.selection = SessionAttribute(self, "selection") self.content = self.SelectionList(app, "fields") self.replace_child(self.content) self.app.form_page.modes.add_mode(self)