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)
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)})
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
def __init__(self, event, request): self.context = event self.request = request self.copyDict = getCopyObjectsUID(request)
def __init__(self, topic, request): self.context = topic self.request = request self.copyDict = getCopyObjectsUID(request)
def __init__(self, event, request): self.context = event self.request = request self.copyDict = getCopyObjectsUID(request)
def __init__(self, topic, request): self.context = topic self.request = request self.copyDict = getCopyObjectsUID(request)
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)
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) })
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