コード例 #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
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def getContent(self):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     widget_node_id = editor_data["widget_node"]
     storage = IContentWidgets(context)
     stored_widget_data = storage.read_widget(editor_data['widget_id'])
     widget_content = dict()
     if stored_widget_data:
         widget_node = stored_widget_data["items"].get(widget_node_id, None)
         if widget_node:
             schemata = self.additionalSchemata + (self.schema, )
             for widget_schema in schemata:
                 fields = getFieldsInOrder(widget_schema)
                 for key, value in fields:
                     if key == "image":
                         image_uid = widget_node.get("image", None)
                         if image_uid:
                             asset = api.content.get(UID=image_uid)
                             widget_content[key] = getattr(
                                 asset, key, value)
                     elif key.endswith('_related'):
                         # Make sure we do not fall over old widget attribute values
                         widget_content[key] = RelationValue(None)
                     else:
                         widget_content[key] = widget_node.get(key, None)
     return widget_content
コード例 #3
0
 def widget_stored_data(self):
     context = aq_inner(self.context)
     try:
         storage = IContentWidgets(context)
         content = storage.read_widget(self.widget_uid())
     except TypeError:
         content = dict()
     return content
コード例 #4
0
ファイル: slider.py プロジェクト: ade25/ade25.widgets
 def widget_item_nodes(self):
     context = aq_inner(self.context)
     ordered_nodes = list()
     storage = IContentWidgets(context)
     stored_widget = storage.read_widget(self.widget_uid())
     if stored_widget:
         ordered_nodes = stored_widget["item_order"]
     return ordered_nodes
コード例 #5
0
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def widget_item_content(self):
     context = aq_inner(self.context)
     item_content = dict()
     storage = IContentWidgets(context)
     stored_widget = storage.read_widget(self.configuration['widget_id'])
     if stored_widget:
         item_content = stored_widget["items"]
     return item_content
コード例 #6
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)
コード例 #7
0
ファイル: accordion.py プロジェクト: ade25/ade25.widgets
 def widget_item_content(self, widget_node):
     context = aq_inner(self.context)
     item_content = {"uid": widget_node}
     storage = IContentWidgets(context)
     stored_widget = storage.read_widget(self.widget_uid())
     if stored_widget:
         content_items = stored_widget["items"]
         if content_items:
             try:
                 item_content.update(content_items[widget_node])
             except KeyError:
                 item_content = None
     return item_content
コード例 #8
0
ファイル: slider.py プロジェクト: ade25/ade25.widgets
 def widget_item_content(self, widget_node):
     context = aq_inner(self.context)
     item_content = {"uid": widget_node}
     storage = IContentWidgets(context)
     stored_widget = storage.read_widget(self.widget_uid())
     if stored_widget:
         content_items = stored_widget["items"]
         if content_items:
             try:
                 node_content = content_items[widget_node]
                 if node_content['is_public']:
                     item_content.update(node_content)
             except KeyError:
                 item_content['is_public'] = False
     return item_content
コード例 #9
0
 def getContent(self):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     storage = IContentWidgets(context)
     stored_widget_data = storage.read_widget(editor_data['widget_id'])
     widget_content = dict()
     if stored_widget_data:
         schemata = self.additionalSchemata + (self.schema, )
         for widget_schema in schemata:
             fields = getFieldsInOrder(widget_schema)
             for key, value in fields:
                 if key == "image":
                     image_uid = stored_widget_data.get("image", None)
                     if image_uid:
                         asset = api.content.get(UID=image_uid)
                         widget_content[key] = getattr(asset, key, value)
                 else:
                     widget_content[key] = stored_widget_data.get(
                         key, value.title)
     return widget_content
コード例 #10
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
コード例 #11
0
ファイル: image.py プロジェクト: ade25/ade25.widgets
 def widget_image_cover(self):
     context = aq_inner(self.context)
     storage = IContentWidgets(context)
     content = storage.read_widget(self.widget_uid())
     return content
コード例 #12
0
ファイル: text.py プロジェクト: ade25/ade25.widgets
 def widget_text_formatted(self):
     context = aq_inner(self.context)
     storage = IContentWidgets(context)
     content = storage.read_widget(self.widget_uid())
     return content
コード例 #13
0
ファイル: widgetitem.py プロジェクト: ade25/ade25.widgets
 def widget_item_records(self):
     context = aq_inner(self.context)
     storage = IContentWidgets(context)
     records = storage.read_widget(self.configuration['widget_id'])
     return records