Пример #1
0
 def __init__(self, context, request):
     super(SFJsonEventPaste, self).__init__(context, request)
     self.EventAllDay = self.request.get('EventAllDay',
                                         False) not in [False, 'false']
     self.startDate = self.request.get('startDate', '')
     self.portal = getToolByName(self.context,
                                 'portal_url').getPortalObject()
     self.copyDict = getCopyObjectsUID(self.request)
Пример #2
0
    def __call__(self):
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        portal_types = getToolByName(portal, 'portal_types')
        context = aq_inner(self.context)
        target_folder = getattr(interfaces.ISolgemaFullcalendarProperties(context, None), 'target_folder', None)
        target_folder = target_folder \
                    and portal.unrestrictedTraverse('/'+ portal.id + target_folder) \
                    or aq_parent(context)

        if not getSecurityManager().checkPermission('Add portal content', target_folder):
            raise Unauthorized, "You can't add an event on %s" % str(target_folder)

        query = hasattr(self.context, 'buildQuery') and self.context.buildQuery() or {}
        query = normalize_type_query(query, portal)
        copyDict = getCopyObjectsUID(self.request)

        # The 'Item Type' criteria uses the 'Type' index while the 'Item Type
        # (internal)' criteria uses the 'portal_type' index.
        #
        # We need to check for both, portal_type first, because it's more
        # specific than 'Type', which just indexes the content type's Title
        # property (which can be non-unique).
        index = query.get('portal_type', query.get('Type') )
        self.request.response.setHeader("Content-type","application/json")
        if index:
            if isinstance(index, (list, tuple)) and len(index) > 1:
                return json.dumps({'display': True})

            portal_type = isinstance(index, (tuple, list)) and index[0] or index
            if copyDict and portal.restrictedTraverse(copyDict['url']).portal_type == portal_type:
                return json.dumps({'display': True})
            elif query.get('Type'):
                portal_type = isinstance(query['Type'], (tuple, list)) and query['Type'][0] or query['Type']
                if copyDict and portal.restrictedTraverse(copyDict['url']).portal_type == portal_type:
                    return json.dumps({'display': True})
        else:
            portal_type = 'Event'

        pTypes = [a for a in portal_types.listTypeInfo() if a.id == portal_type]
        pTypeTitle = pTypes and pTypes[0].Title() or portal_type
        typeTitle = translate(pTypeTitle, context=self.request)
        if HAS_PLONE40:
            title = PLMF(u'heading_add_item', default='Add ${itemtype}', mapping={'itemtype' : typeTitle})
        else:
            title = PLMF(u'label_add_type', default='Add ${type}', mapping={'type' : typeTitle})

        return json.dumps({'display': False, 'type': portal_type,
                           'title': translate(title, context=self.request)})
Пример #3
0
    def getMenuPaste(self):
        """Return menu item entries in a TAL-friendly form."""
        copyDict = getCopyObjectsUID(self.request)
        portal_type = self.query and self.query.get('portal_type') or self.query.get('Type', None)
        portal_types = []
        if not copyDict:
            return []

        if portal_type and isinstance(portal_type, (tuple, list)):
            portal_types = portal_type
        elif portal_type:
            portal_types = [portal_type,]

        item = None
        try:
            item = self.portal.restrictedTraverse(copyDict['url'])
        except:
            pass

        if item and not item.portal_type in portal_types:
            return []

        results = []

        actions_tool = getToolByName(self.portal, 'portal_actions')
        pasteAction = [a for a in actions_tool.listActionInfos(object=aq_inner(self.addContext), categories=('object_buttons',)) if a['id'] == 'paste']

        plone_utils = getToolByName(self.portal, 'plone_utils')

        context_url = self.addContext.absolute_url()
        for action in pasteAction:
            if action['allowed']:
                cssClass = 'actionicon-object_buttons-%s' % action['id']
                icon = plone_utils.getIconFor('object_buttons', action['id'], None)
                if icon:
                    icon = '%s/%s' % (self.addContext.absolute_url(), icon)

                start_date = quote_plus(str(self.startDate))
                results.append({ 'title'       : action['title'],
                                 'description' : '',
                                 'action'      : '%s/SFJsonEventPaste?startDate=%s%s' % (context_url, start_date, self.ReqAllDay),
                                 'selected'    : False,
                                 'icon'        : icon,
                                 'extra'       : {'id': action['id'], 'separator': None, 'class': cssClass},
                                 'submenu'     : None,
                                 })
        return results
Пример #4
0
 def __init__(self, event, request):
     self.context = event
     self.request = request
     self.copyDict = getCopyObjectsUID(request)
Пример #5
0
 def __init__(self, topic, request):
     self.context = topic
     self.request = request
     self.copyDict = getCopyObjectsUID(request)
Пример #6
0
 def __init__(self, event, request):
     self.context = event
     self.request = request
     self.copyDict = getCopyObjectsUID(request)
Пример #7
0
 def __init__(self, topic, request):
     self.context = topic
     self.request = request
     self.copyDict = getCopyObjectsUID(request)
Пример #8
0
 def __init__(self, context, request):
     super(SFJsonEventPaste, self).__init__(context, request)
     self.EventAllDay = self.request.get('EventAllDay', False) not in [False, 'false']
     self.startDate = self.request.get('startDate', '')
     self.portal = getToolByName(self.context, 'portal_url').getPortalObject()
     self.copyDict = getCopyObjectsUID(self.request)
Пример #9
0
    def __call__(self):
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        portal_types = getToolByName(portal, 'portal_types')
        context = aq_inner(self.context)
        target_folder = getattr(
            interfaces.ISolgemaFullcalendarProperties(context, None),
            'target_folder', None)
        target_folder = target_folder \
                    and portal.unrestrictedTraverse('/'+ portal.id + target_folder) \
                    or aq_parent(context)

        if not getSecurityManager().checkPermission('Add portal content',
                                                    target_folder):
            raise Unauthorized, "You can't add an event on %s" % str(
                target_folder)

        query = hasattr(self.context,
                        'buildQuery') and self.context.buildQuery() or {}
        query = normalize_type_query(query, portal)
        copyDict = getCopyObjectsUID(self.request)

        # The 'Item Type' criteria uses the 'Type' index while the 'Item Type
        # (internal)' criteria uses the 'portal_type' index.
        #
        # We need to check for both, portal_type first, because it's more
        # specific than 'Type', which just indexes the content type's Title
        # property (which can be non-unique).
        index = query.get('portal_type', query.get('Type'))
        self.request.response.setHeader("Content-type", "application/json")
        if index:
            if isinstance(index, (list, tuple)) and len(index) > 1:
                return json.dumps({'display': True})

            portal_type = isinstance(index,
                                     (tuple, list)) and index[0] or index
            if copyDict and portal.restrictedTraverse(
                    copyDict['url']).portal_type == portal_type:
                return json.dumps({'display': True})
            elif query.get('Type'):
                portal_type = isinstance(
                    query['Type'],
                    (tuple, list)) and query['Type'][0] or query['Type']
                if copyDict and portal.restrictedTraverse(
                        copyDict['url']).portal_type == portal_type:
                    return json.dumps({'display': True})
        else:
            portal_type = getattr(
                interfaces.ISolgemaFullcalendarProperties(context, None),
                'eventType', 'Event')

        pTypes = [
            a for a in portal_types.listTypeInfo() if a.id == portal_type
        ]
        pTypeTitle = pTypes and pTypes[0].Title() or portal_type
        typeTitle = translate(pTypeTitle, context=self.request)
        if HAS_PLONE40:
            title = PLMF(u'heading_add_item',
                         default='Add ${itemtype}',
                         mapping={'itemtype': typeTitle})
        else:
            title = PLMF(u'label_add_type',
                         default='Add ${type}',
                         mapping={'type': typeTitle})

        return json.dumps({
            'display': False,
            'type': portal_type,
            'title': translate(title, context=self.request)
        })
Пример #10
0
    def getMenuPaste(self):
        """Return menu item entries in a TAL-friendly form."""
        copyDict = getCopyObjectsUID(self.request)
        portal_type = self.query and self.query.get(
            'portal_type') or self.query.get('Type', None)
        portal_types = []
        if not copyDict:
            return []

        if portal_type and isinstance(portal_type, (tuple, list)):
            portal_types = portal_type
        elif portal_type:
            portal_types = [
                portal_type,
            ]

        item = None
        try:
            item = self.portal.restrictedTraverse(copyDict['url'])
        except:
            pass

        if item and not item.portal_type in portal_types:
            return []

        results = []

        actions_tool = getToolByName(self.portal, 'portal_actions')
        pasteAction = [
            a for a in actions_tool.listActionInfos(
                object=aq_inner(self.addContext),
                categories=('object_buttons', )) if a['id'] == 'paste'
        ]

        plone_utils = getToolByName(self.portal, 'plone_utils')

        context_url = self.addContext.absolute_url()
        for action in pasteAction:
            if action['allowed']:
                cssClass = 'actionicon-object_buttons-%s' % action['id']
                icon = plone_utils.getIconFor('object_buttons', action['id'],
                                              None)
                if icon:
                    icon = '%s/%s' % (self.addContext.absolute_url(), icon)

                start_date = quote_plus(str(self.startDate))
                results.append({
                    'title':
                    action['title'],
                    'description':
                    '',
                    'action':
                    '%s/SFJsonEventPaste?startDate=%s%s' %
                    (context_url, start_date, self.ReqAllDay),
                    'selected':
                    False,
                    'icon':
                    icon,
                    'extra': {
                        'id': action['id'],
                        'separator': None,
                        'class': cssClass
                    },
                    'submenu':
                    None,
                })
        return results