def testReorderThenCopyTemplateKeepsOrder(self):
     original_order = [
         "one",
         "two",
         "three",
         "four",
         "five",
         "six",
         "seven",
         "eight",
         "nine",
         "ten",
     ]
     sorted_order = list(sorted(original_order))
     module = self.createModule()
     for title in original_order:
         self._create(module, "euphorie.risk", title, title=title)
     self.assertEqual([r.title for r in module.values()], original_order)
     ordering = IExplicitOrdering(module)
     ordering.orderObjects("title")
     self.assertEqual([r.title for r in module.values()], sorted_order)
     request = module.REQUEST
     survey = aq_parent(module)
     container = self.portal.sectors.nl.sector
     target = self._create(container, "euphorie.surveygroup", "target")
     copy = AddForm(container, request).copyTemplate(survey, target)
     self.assertEqual([r.title for r in copy["module"].values()], sorted_order)
Exemplo n.º 2
0
    def __iter__(self):
        for item in self.previous:

            if item["_type"] == "story":
                #store the featured image
                featured_image_uid = item.get('featured_image', None)
                if featured_image_uid is not None:
                    self.featured_images[featured_image_uid] = item['_uid']
                yield item
                continue

            if item["_type"] == "Image":
                #look for this image in the featured images dict
                story_uid = self.featured_images.get(item['_uid'], None)
                if story_uid is not None:
                    story = api.content.get(UID=story_uid)
                    try:
                        adapter = IExplicitOrdering(story)
                    except TypeError:
                        pass
                    else:
                        adapter.moveObjectsToTop(item['_id'])
                    finally:
                        #delete from dict to save some memory
                        del self.featured_images[item['_uid']]

                yield item
                continue

            yield item
Exemplo n.º 3
0
    def render(self):
        order=self.request.form.get("order[]")
        if not order or not isinstance(order, list):
            return

        orderer=IExplicitOrdering(aq_inner(self.context))
        for (pos, id) in enumerate(order):
            id=id.split("-", 1)[1]
            orderer.moveObjectToPosition(id, pos)

        return
Exemplo n.º 4
0
    def render(self):
        order = self.request.form.get("order[]")
        if not order or not isinstance(order, list):
            return

        orderer = IExplicitOrdering(aq_inner(self.context))
        for (pos, id) in enumerate(order):
            id = id.split("-", 1)[1]
            orderer.moveObjectToPosition(id, pos)

        return
Exemplo n.º 5
0
 def moveObjectsToBottom(self, ids, subset_ids=None):
     """ Move specified sub-objects to bottom of container. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsToBottom(ids, subset_ids)
     else:
         return 0
Exemplo n.º 6
0
 def moveObjectToPosition(self, id, position, suppress_events=False):
     """ Move specified object to absolute position. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectToPosition(id, position, suppress_events)
     else:
         return 0
Exemplo n.º 7
0
 def moveObjectToPosition(self, id, position, suppress_events=False):
     """ Move specified object to absolute position. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectToPosition(id, position, suppress_events)
     else:
         return 0
Exemplo n.º 8
0
 def moveObjectsDown(self, ids, delta=1, subset_ids=None):
     """ Move specified sub-objects down by delta in container. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsDown(ids, delta, subset_ids)
     else:
         return 0
Exemplo n.º 9
0
 def orderable(self):
     if _is_collection(self.context):
         return False
     if IPloneSiteRoot.providedBy(self.context):
         return True
     ordering = self.context.getOrdering()
     return IExplicitOrdering.providedBy(ordering)
Exemplo n.º 10
0
 def getOrdering(self):
     if IPloneSiteRoot.providedBy(self.context):
         return self.context
     if getattr(self.context, "getOrdering", None):
         ordering = self.context.getOrdering()
         if IExplicitOrdering.providedBy(ordering):
             return ordering
Exemplo n.º 11
0
 def getOrdering(self):
     if IPloneSiteRoot.providedBy(self.context):
         return self.context
     ordering = self.context.getOrdering()
     if not IExplicitOrdering.providedBy(ordering):
         return None
     return ordering
Exemplo n.º 12
0
 def orderObjects(self, key, reverse=None):
     """ Order sub-objects by key and direction. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.orderObjects(key, reverse)
     else:
         return 0
Exemplo n.º 13
0
def _supports_explicit_ordering(context):
    if IPloneSiteRoot.providedBy(context):
        return True
    if not IOrderableFolder.providedBy(context):
        return False
    ordering = context.getOrdering()
    return IExplicitOrdering.providedBy(ordering)
Exemplo n.º 14
0
    def __call__(self, item_id, delta, subset_ids=None):
        context = aq_inner(self.context)
        try:
            if not IOrderableFolder.providedBy(context):
                if not base_hasattr(context, 'moveObjectsByDelta'):
                    # for instance, plone site root does not use plone.folder
                    raise ValueError("Not an ordered folder.")
            else:
                ordering = context.getOrdering()
                if not IExplicitOrdering.providedBy(ordering):
                    raise ValueError("Ordering disable on folder.")

            delta = int(delta)
            if subset_ids is not None:
                objectPos = self.context.getObjectPosition
                position_id = [(objectPos(id), id) for id in subset_ids]
                position_id.sort()
                if subset_ids != [id for position, id in position_id]:
                    raise ValueError("Client/server ordering mismatch.")
                self.context.moveObjectsByDelta(item_id, delta, subset_ids)
        except ValueError as e:
            self.context.REQUEST.response.setStatus('BadRequest')
            return str(e)

        ploneUtils = getToolByName(self.context, 'plone_utils')
        ploneUtils.reindexOnReorder(self.context)
        return "<done />"
Exemplo n.º 15
0
 def getOrdering(self):
     if IPloneSiteRoot.providedBy(self.context):
         return self.context
     ordering = self.context.getOrdering()
     if not IExplicitOrdering.providedBy(ordering):
         return None
     return ordering
Exemplo n.º 16
0
 def orderObjects(self, key=None, reverse=None):
     """ Order sub-objects by key and direction. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.orderObjects(key, reverse)
     else:
         return 0
Exemplo n.º 17
0
 def moveObjectsDown(self, ids, delta=1, subset_ids=None):
     """ Move specified sub-objects down by delta in container. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsDown(ids, delta, subset_ids)
     else:
         return 0
Exemplo n.º 18
0
 def moveObjectsToBottom(self, ids, subset_ids=None):
     """ Move specified sub-objects to bottom of container. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsToBottom(ids, subset_ids)
     else:
         return 0
Exemplo n.º 19
0
def getOrdering(context):
    if IPloneSiteRoot.providedBy(context):
        return context
    else:
        ordering = context.getOrdering()
        if not IExplicitOrdering.providedBy(ordering):
            return None
        return ordering
Exemplo n.º 20
0
def getOrdering(context):
    if IPloneSiteRoot.providedBy(context):
        return context
    else:
        ordering = context.getOrdering()
        if not IExplicitOrdering.providedBy(ordering):
            return None
        return ordering
Exemplo n.º 21
0
 def moveObjectsByDelta(self, ids, delta, subset_ids=None,
         suppress_events=False):
     """ Move specified sub-objects by delta. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsByDelta(ids, delta, subset_ids,
             suppress_events)
     else:
         return 0
Exemplo n.º 22
0
    def __call__(self):
        order = self.request.form.get("order[]")
        if not order or not isinstance(order, list):
            return

        # If we get an empty element in between, it means we're in some sort
        # of interim state. Skip, so that we avoid ConflictError
        if order.count("") > 1:
            return

        orderer = IExplicitOrdering(aq_inner(self.context))
        for (pos, id) in enumerate(order):
            if id == "" or "-" not in id:
                continue
            id = id.split("-", 1)[1]
            orderer.moveObjectToPosition(id, pos)

        return
Exemplo n.º 23
0
 def orderable(self):
     """
     """
     context = aq_inner(self.context)
     if not IOrderableFolder.providedBy(context):
         if hasattr(context, 'moveObjectsByDelta'):
             # for instance, plone site root does not use plone.folder
             return True
         else:
             return False
     ordering = context.getOrdering()
     return IExplicitOrdering.providedBy(ordering)
Exemplo n.º 24
0
 def moveObjectsByDelta(self,
                        ids,
                        delta,
                        subset_ids=None,
                        suppress_events=False):
     """ Move specified sub-objects by delta. """
     ordering = self.getOrdering()
     if IExplicitOrdering.providedBy(ordering):
         return ordering.moveObjectsByDelta(ids, delta, subset_ids,
                                            suppress_events)
     else:
         return 0
Exemplo n.º 25
0
 def testReorderThenCopyTemplateKeepsOrder(self):
     from Acquisition import aq_parent
     from plone.folder.interfaces import IExplicitOrdering
     from euphorie.content.surveygroup import AddForm
     original_order = [u"one", u"two", u"three", u"four", u"five", u"six",
                       u"seven", u"eight", u"nine", u"ten"]
     sorted_order = list(sorted(original_order))
     self.loginAsPortalOwner()
     module = self.createModule()
     for title in original_order:
         self._create(module, "euphorie.risk", title, title=title)
     self.assertEqual([r.title for r in module.values()], original_order)
     ordering = IExplicitOrdering(module)
     ordering.orderObjects("title")
     self.assertEqual([r.title for r in module.values()], sorted_order)
     request = module.REQUEST
     survey = aq_parent(module)
     container = self.portal.sectors.nl.sector
     target = self._create(container, "euphorie.surveygroup", "target")
     copy = AddForm(container, request).copyTemplate(survey, target)
     self.assertEqual(
             [r.title for r in copy["module"].values()], sorted_order)
Exemplo n.º 26
0
 def getOrdering(self):
     if IPloneSiteRoot.providedBy(self.context):
         return self.context
     try:
         ordering = self.context.aq_base.getOrdering()
     except AttributeError:
         if IOrderedContainer.providedBy(self.context):
             # Archetype
             return IOrderedContainer(self.context)
         return None
     if not IExplicitOrdering.providedBy(ordering):
         return None
     return ordering
Exemplo n.º 27
0
def orderable(self):
    if IPloneSiteRoot.providedBy(self.context):
        return True
    ordering = self.context.getOrdering()
    return IExplicitOrdering.providedBy(ordering)