def __call__(self):
        """ Create a new revision based on an existing item IRevisionFile """
        revisionfile_info = IRevisionFileInfo(self.context)
        revision_folder = revisionfile_info.revision_folder()
        revision_info = IRevisionInfo(revision_folder)
        next_code = revision_info.next_code()

        try:
            _copy(revision_folder, self.context, revision_folder, self.context.getId(), next_code)

            cloned_revision = getattr(revision_folder, next_code)
            member = getMultiAdapter((self.context, self.request), name=u'plone_portal_state').member()
            creator = member.getId()
            cloned_revision.setCreators([creator])
            plone_utils = getToolByName(self.context, 'plone_utils')
            plone_utils.changeOwnershipOf(cloned_revision, member.getId())
            cloned_revision.setRelatedItems(self.context.getRelatedItems())
            cloned_revision.setEffectiveDate(None)
            cloned_revision.reindexObject()
            cloned_revision.reindexObjectSecurity()
        except ConflictError:
            raise
        except Exception:
            IStatusMessage(self.request).addStatusMessage(_(u'cloned_revision_error', default=u'Error'), type='error')
        else:
            IStatusMessage(self.request).addStatusMessage(_(u'cloned_revision_ok', default=u'Revision cloned correctly'), type='info')

        self.request.response.redirect("/".join(revision_folder.getPhysicalPath()))
 def _dictfy(self, item):
     revisionfile_info = IRevisionFileInfo(item)
     return dict(url=revisionfile_info.url(),
                 download_url=revisionfile_info.download_url(),
                 title=revisionfile_info.title(),
                 code=revisionfile_info.code(),
                 obj=item,
                 obj_info=revisionfile_info,
                )
    def test_revisionfile_info_adapter(self):
        """ """
        from redomino.revision.interfaces import IRevisionFileInfo
        revisionfile11_info = self._revisionfile11_info()
        self.assertTrue(IRevisionFileInfo.providedBy(revisionfile11_info))
        from redomino.revision.content.revisionfile import RevisionFileInfo
        self.assertIsInstance(revisionfile11_info, RevisionFileInfo)

        self.assertTrue(IRevisionFileInfo.implementedBy(RevisionFileInfo))
def revisionfile_deleted(obj, event):
    """ Reindex the revision folder item """

    if obj is not event.object:
        return
    revisionfile_info = IRevisionFileInfo(obj)
    revision_folder = revisionfile_info.revision_folder()

    revision_info = IRevisionInfo(revision_folder)
    for revisionfile in revision_info.revisionfiles():
        revisionfile.reindexObject()
    revision_folder.reindexObject()
class RevisionNotLatestViewlet(ViewletBase):
    index = ViewPageTemplateFile('templates/notlatest_viewlet.pt')

    def update(self):
        super(RevisionNotLatestViewlet, self).update()

        self.revisionfile_info = IRevisionFileInfo(self.context)
        self.latest = self.revisionfile_info.is_latest()
class RevisionListViewlet(ViewletBase):
    index = ViewPageTemplateFile('templates/revisionlist_viewlet.pt')

    def update(self):
        super(RevisionListViewlet, self).update()

        self.revisionfile_info = IRevisionFileInfo(self.context)
        self.revision_info = IRevisionInfo(self.revisionfile_info.revision_folder())
        self.revisions = sorted(self.revision_info.revisionfiles_info(), key = lambda o: o['obj_info'].code(), reverse = True)
def revisionfile_workflow(obj, event):
    """ Workflow state changed """
    priority_utility = queryUtility(IRevisionWorkflowUtility, name=obj.portal_type)
    priority_utility = not priority_utility and queryUtility(IRevisionWorkflowUtility)
    priority_map = priority_utility and priority_utility.priority_map()

    if priority_map:
        revisionfile_info = IRevisionFileInfo(obj)
        revision = revisionfile_info.revision_folder()
        revision_info = IRevisionInfo(revision)
        latest = revision_info.latest()
        obj_status = revisionfile_info.status()
        latestfile_info = IRevisionFileInfo(latest)
        latest_status = latestfile_info.status()
    
        
        if priority_map.get(obj_status, {}).get('priority', -1) >= priority_map.get(latest_status, {}).get('priority', -1):
            # set status
            workflow = event.workflow
            workflow.setStatusOf(workflow.getId(), revision, {'action': event.action, 'review_state': obj_status, 'comments': '', 'actor': '', 'time': DateTime()})
            workflow.updateRoleMappingsFor(revision)
            revision.reindexObject()
            revision.reindexObjectSecurity()
def revision_code_file(obj):
    """ """
    revisionfile_info = IRevisionFileInfo(obj)

    return revisionfile_info.code()
def revisionfile_modified(obj, event):
    """ Reindex the revision folder item """

    revisionfile_info = IRevisionFileInfo(obj)
    revision_folder = revisionfile_info.revision_folder()
    revision_folder.reindexObject()
    def update(self):
        super(RevisionListViewlet, self).update()

        self.revisionfile_info = IRevisionFileInfo(self.context)
        self.revision_info = IRevisionInfo(self.revisionfile_info.revision_folder())
        self.revisions = sorted(self.revision_info.revisionfiles_info(), key = lambda o: o['obj_info'].code(), reverse = True)
    def update(self):
        super(RevisionNotLatestViewlet, self).update()

        self.revisionfile_info = IRevisionFileInfo(self.context)
        self.latest = self.revisionfile_info.is_latest()