コード例 #1
0
 def applyChanges(self, data):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     storage = IContentWidgets(context)
     record = storage.read_widget(editor_data["widget_id"])
     if record:
         item_order = record.get("item_order")
         if item_order:
             widget_content = record
     else:
         widget_content = editor_data["widget_content"]
     if not widget_content:
         widget_content = dict()
     for key, value in data.items():
         entry_key = self.prettify_key(key)
         if INamedBlobImage.providedBy(value):
             image_uid = self._process_image_asset(entry_key, value)
             widget_content[entry_key] = image_uid
         elif IRichTextValue.providedBy(value):
             # Handle rich text value that is not serializable
             text_value = value.output
             widget_content[entry_key] = text_value
         else:
             widget_content[entry_key] = value
     storage.store_widget(editor_data['widget_id'], record, self.request)
     next_url = '{url}/@@panel-edit?section={section}&panel={panel}'.format(
         url=context.absolute_url(),
         section=editor_data["content_section"],
         panel=editor_data["content_section_panel"])
     return self.request.response.redirect(next_url)
コード例 #2
0
ファイル: widget.py プロジェクト: ade25/ade25.widgets
 def applyChanges(self, data):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     storage = IContentWidgets(context)
     widget_content = dict()
     for key, value in data.items():
         entry_key = self.prettify_key(key)
         # Additional schemata are posted as 'ISchemaInterface.field_name'
         # and need to be resolved to their original key
         field_key = key.split('.')[-1]
         # Handle image like content
         if INamedBlobImage.providedBy(value):
             image_uid = self._process_image_asset(entry_key, value)
             widget_content[entry_key] = image_uid
         else:
             if value is NOT_CHANGED:
                 # Keep existing value for fields signaling as not updated
                 stored_content = editor_data.get('widget_content')
                 if widget_content:
                     value = stored_content.get(field_key, None)
             if entry_key.endswith('_related'):
                 # Handle asset relation choice
                 widget_content[entry_key] = self._process_relations(value)
                 source_entry_key = key.replace('_related', '')
                 source_value = data.get(source_entry_key, None)
                 if not source_value:
                     # Actual image uploads take preference. Only if no image has
                     # been uploaded write relation choice to image field.
                     widget_content[source_entry_key] = value.UID()
             widget_content[entry_key] = value
     storage.store_widget(editor_data['widget_id'], widget_content,
                          self.request)
     next_url = '{0}/@@panel-page'.format(context.absolute_url())
     return self.request.response.redirect(next_url)
コード例 #3
0
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def _remove_widget(self, form_data):
     context = aq_inner(self.context)
     editor_data = self.panel_editor()[context.UID()]
     storage = IContentWidgets(context)
     widget_node_id = form_data.get('nid', None)
     widget_nodes = self.widget_item_nodes()
     if widget_node_id and widget_node_id in widget_nodes:
         records = self.widget_item_records()
         widget_nodes_content = records.get('items', dict())
         try:
             del widget_nodes_content[widget_node_id]
         except KeyError:
             # TODO: add logger for edge case behavior
             pass
         try:
             widget_nodes.remove(widget_node_id)
         except ValueError:
             pass
         records["item_order"] = widget_nodes
         editor_data['widget_content']['item_order'] = widget_nodes
         records["items"] = widget_nodes_content
         editor_data['widget_content']['items'] = widget_nodes_content
         storage.store_widget(editor_data['widget_id'], records,
                              self.request)
         self._update_panel_editor(editor_data)
     next_url = self.panel_editor_close()
     return self.request.response.redirect(next_url)
コード例 #4
0
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def applyChanges(self, data):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     storage = IContentWidgets(context)
     record = storage.read_widget(editor_data["widget_id"])
     item_order = record["item_order"]
     if item_order:
         widget_content = record["items"]
     else:
         widget_content = editor_data["widget_content"]
     if not widget_content:
         widget_content = dict()
     widget_item = dict()
     widget_item_node = editor_data["widget_node"]
     for key, value in data.items():
         entry_key = self.prettify_key(key)
         # Additional schemata are posted as 'ISchemaInterface.field_name'
         # and need to be resolved to their original key
         field_key = key.split('.')[-1]
         if INamedBlobImage.providedBy(value):
             image_uid = self._process_image_asset(entry_key, value)
             widget_item[entry_key] = image_uid
         elif IRichTextValue.providedBy(value):
             # Handle rich text value that is not serializable
             text_value = value
             widget_item[entry_key] = text_value
         else:
             if value is NOT_CHANGED:
                 # Keep existing value for fields signaling as not updated
                 value = widget_content[widget_item_node][field_key]
                 # continue
             if entry_key.endswith('_related'):
                 # Handle asset relation choice
                 widget_item[entry_key] = self._process_relations(value)
                 source_entry_key = key.replace('_related', '')
                 source_value = data.get(source_entry_key, None)
                 if not source_value:
                     # Actual image uploads take preference. Only if no image has
                     # been uploaded write relation choice to image field.
                     widget_item[source_entry_key] = value.UID()
             widget_item[entry_key] = value
     if widget_item_node in item_order:
         widget_content[widget_item_node] = widget_item
     else:
         widget_content.update({widget_item_node: widget_item})
         item_order.append(widget_item_node)
         record["item_order"] = item_order
         record["items"] = widget_content
     storage.store_widget(editor_data['widget_id'], record, self.request)
     next_url = '{url}/@@panel-edit?section={section}&panel={panel}'.format(
         url=context.absolute_url(),
         section=editor_data["content_section"],
         panel=editor_data["content_section_panel"])
     return self.request.response.redirect(next_url)
コード例 #5
0
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def _content_widget_factory(self):
     context = aq_inner(self.context)
     tool = getUtility(IPanelEditor)
     editor_data = tool.get()[context.UID()]
     node_uid = str(uuid_tool.uuid4())
     editor_data["widget_node"] = node_uid
     tool.update(key=context.UID(), data=editor_data)
     storage = IContentWidgets(context)
     if not self.widget_item_nodes():
         widget_content = {"items": dict(), "item_order": list()}
         storage.store_widget(editor_data['widget_id'], widget_content,
                              self.request)
     return node_uid
コード例 #6
0
    def handle_widget_collection_reorder(self):
        """ Update widget node ordering

        Should also update the stored session details to allow for smooth
        panel page editor workflow
        """
        # TODO: implement order storage
        context = aq_inner(self.context)
        payload = self.payload
        editor = self.panel_editor()
        editor_data = editor[context.UID()]
        storage = IContentWidgets(context)
        record = storage.read_widget(editor_data["widget_id"])
        item_order = record["item_order"]
        if item_order:
            updated_order = payload['node-order']
            if not isinstance(updated_order, list):
                updated_order = list()
            record["item_order"] = updated_order
            storage.store_widget(editor_data['widget_id'], record,
                                 self.request)
        msg = _(u"Collection node order updated")
        data = {"success": True, "message": msg}
        return data