src/pyams_content/component/gallery/__init__.py
changeset 363 86d1a240d4dc
parent 252 2dafc720b378
child 395 2a39b333a585
equal deleted inserted replaced
362:8fc21a7ef206 363:86d1a240d4dc
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.gallery.interfaces import IGallery, IGalleryTarget, \
    19 from pyams_content.component.gallery.interfaces import IGallery, IGalleryTarget, \
    20     GALLERY_CONTAINER_KEY, IGalleryRenderer
    20     GALLERY_CONTAINER_KEY, IGalleryRenderer
       
    21 from pyams_content.component.paragraph import IBaseParagraph
    21 from pyams_content.features.checker.interfaces import IContentChecker
    22 from pyams_content.features.checker.interfaces import IContentChecker
    22 from pyams_content.shared.common.interfaces import IWfSharedContent
    23 from pyams_content.shared.common.interfaces import IWfSharedContent
    23 from pyams_form.interfaces.form import IFormContextPermissionChecker
    24 from pyams_form.interfaces.form import IFormContextPermissionChecker
    24 from pyams_i18n.interfaces import II18n
    25 from pyams_i18n.interfaces import II18n
    25 from zope.annotation.interfaces import IAnnotations
    26 from zope.annotation.interfaces import IAnnotations
    69         self.last_id += 1
    70         self.last_id += 1
    70         if not notify:
    71         if not notify:
    71             # make sure that gallery item is correctly indexed
    72             # make sure that gallery item is correctly indexed
    72             index_object(value)
    73             index_object(value)
    73 
    74 
    74     def get_visible_images(self):
    75     def get_visible_medias(self):
    75         return [image for image in self.values() if image.visible]
    76         return [media for media in self.values() if media.visible]
    76 
    77 
    77 
    78 
    78 @adapter_config(context=IGalleryTarget, provides=IGallery)
    79 @adapter_config(context=IGalleryTarget, provides=IGallery)
    79 def gallery_factory(target):
    80 def gallery_factory(target):
    80     """Galleries container factory"""
    81     """Galleries container factory"""
   114 
   115 
   115 
   116 
   116 @subscriber(IObjectAddedEvent, context_selector=IGallery)
   117 @subscriber(IObjectAddedEvent, context_selector=IGallery)
   117 def handle_added_gallery(event):
   118 def handle_added_gallery(event):
   118     """Handle added gallery"""
   119     """Handle added gallery"""
   119     content = get_parent(event.object, IWfSharedContent)
   120     gallery = event.object
       
   121     if IBaseParagraph.providedBy(gallery):
       
   122         # there is another event subscriber for paragraphs,
       
   123         # so don't trigger event twice !
       
   124         return
       
   125     content = get_parent(gallery, IWfSharedContent)
   120     if content is not None:
   126     if content is not None:
   121         get_current_registry().notify(ObjectModifiedEvent(content))
   127         get_current_registry().notify(ObjectModifiedEvent(content))
   122 
   128 
   123 
   129 
   124 @subscriber(IObjectModifiedEvent, context_selector=IGallery)
   130 @subscriber(IObjectModifiedEvent, context_selector=IGallery)
   125 def handle_modified_gallery(event):
   131 def handle_modified_gallery(event):
   126     """Handle modified gallery"""
   132     """Handle modified gallery"""
   127     content = get_parent(event.object, IWfSharedContent)
   133     gallery = event.object
       
   134     if IBaseParagraph.providedBy(gallery):
       
   135         # there is another event subscriber for paragraphs,
       
   136         # so don't trigger event twice !
       
   137         return
       
   138     content = get_parent(gallery, IWfSharedContent)
   128     if content is not None:
   139     if content is not None:
   129         get_current_registry().notify(ObjectModifiedEvent(content))
   140         get_current_registry().notify(ObjectModifiedEvent(content))
   130 
   141 
   131 
   142 
   132 @subscriber(IObjectRemovedEvent, context_selector=IGallery)
   143 @subscriber(IObjectRemovedEvent, context_selector=IGallery)
   133 def handle_removed_gallery(event):
   144 def handle_removed_gallery(event):
   134     """Handle removed gallery"""
   145     """Handle removed gallery"""
   135     content = get_parent(event.object, IWfSharedContent)
   146     gallery = event.object
       
   147     if IBaseParagraph.providedBy(gallery):
       
   148         # there is another event subscriber for paragraphs,
       
   149         # so don't trigger event twice !
       
   150         return
       
   151     content = get_parent(gallery, IWfSharedContent)
   136     if content is not None:
   152     if content is not None:
   137         get_current_registry().notify(ObjectModifiedEvent(content))
   153         get_current_registry().notify(ObjectModifiedEvent(content))
   138 
   154 
   139 
   155 
   140 @adapter_config(name='gallery', context=IGallery, provides=IContentChecker)
   156 @adapter_config(name='gallery', context=IGallery, provides=IContentChecker)
   146     weight = 60
   162     weight = 60
   147 
   163 
   148     def inner_check(self, request):
   164     def inner_check(self, request):
   149         output = []
   165         output = []
   150         registry = request.registry
   166         registry = request.registry
   151         for image in IGallery(self.context).values():
   167         for media in IGallery(self.context).values():
   152             if not image.visible:
   168             if not media.visible:
   153                 continue
   169                 continue
   154             for name, checker in sorted(registry.getAdapters((image, ), IContentChecker),
   170             for name, checker in sorted(registry.getAdapters((media, ), IContentChecker),
   155                                         key=lambda x: x[1].weight):
   171                                         key=lambda x: x[1].weight):
   156                 output.append('- {0} : '.format(checker.label or
   172                 output.append('- {0} : '.format(checker.label or
   157                                                 II18n(image).query_attribute('title', request=request)))
   173                                                 II18n(media).query_attribute('title', request=request)))
   158                 output.append(checker.get_check_output(request))
   174                 output.append(checker.get_check_output(request))
   159         return output
   175         return output
   160 
   176 
   161 
   177 
   162 @adapter_config(name='gallery', context=IGalleryTarget, provides=IContentChecker)
   178 @adapter_config(name='gallery', context=IGalleryTarget, provides=IContentChecker)