Beispiel #1
0
    def add(self, content):
        """See zope.app.container.interfaces.IAdding
        """
        container = self.context
        name = self.contentName
        chooser = INameChooser(container)

        # check precondition
        checkObject(container, name, content)

        if IContainerNamesContainer.providedBy(container):
            # The container picks it's own names.
            # We need to ask it to pick one.
            name = chooser.chooseName(self.contentName or '', content)
        else:
            request = self.request
            name = request.get('add_input_name', name)

            if name is None:
                name = chooser.chooseName(self.contentName or '', content)
            elif name == '':
                name = chooser.chooseName('', content)
            else:
                # Invoke the name chooser even when we have a
                # name. It'll do useful things with it like converting
                # the incoming unicode to an ASCII string.
                name = chooser.chooseName(name, container)
        
        content.id = name
        container._setObject(name, content)
        self.contentName = name # Set the added object Name
        return container._getOb(name)
Beispiel #2
0
    def add(self, content):
        """See zope.app.container.interfaces.IAdding
        """
        container = self.context
        name = self.contentName
        chooser = INameChooser(container)

        # check precondition
        checkObject(container, name, content)

        if IContainerNamesContainer.providedBy(container):
            # The container picks its own names.
            # We need to ask it to pick one.
            name = chooser.chooseName(self.contentName or '', content)
        else:
            request = self.request
            name = request.get('add_input_name', name)

            if name is None:
                name = chooser.chooseName(self.contentName or '', content)
            elif name == '':
                name = chooser.chooseName('', content)
            chooser.checkName(name, content)

        container[name] = content
        self.contentName = name # Set the added object Name
        return container[name]
Beispiel #3
0
    def add(self, content):
        """See zope.app.container.interfaces.IAdding
        """
        container = self.context
        name = self.contentName
        chooser = INameChooser(container)

        # check precondition
        checkObject(container, name, content)

        if IContainerNamesContainer.providedBy(container):
            # The container picks its own names.
            # We need to ask it to pick one.
            name = chooser.chooseName(self.contentName or "", content)
        else:
            request = self.request
            name = request.get("add_input_name", name)

            if name is None:
                name = chooser.chooseName(self.contentName or "", content)
            elif name == "":
                name = chooser.chooseName("", content)
            chooser.checkName(name, content)

        container[name] = content
        self.contentName = name  # Set the added object Name
        return container[name]
Beispiel #4
0
    def add(self, content):
        """See zope.app.container.interfaces.IAdding
        """
        container = self.context
        name = self.contentName
        chooser = INameChooser(container)

        # check precondition
        checkObject(container, name, content)

        if IContainerNamesContainer.providedBy(container):
            # The container picks it's own names.
            # We need to ask it to pick one.
            name = chooser.chooseName(self.contentName or '', content)
        else:
            request = self.request
            name = request.get('add_input_name', name)

            if name is None:
                name = chooser.chooseName(self.contentName or '', content)
            elif name == '':
                name = chooser.chooseName('', content)
            else:
                # Invoke the name chooser even when we have a
                # name. It'll do useful things with it like converting
                # the incoming unicode to an ASCII string.
                name = chooser.chooseName(name, container)

        content.id = name
        container._setObject(name, content)
        self.contentName = name  # Set the added object Name
        return container._getOb(name)
def addEventsAndNewsPortlets(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.leftcolumn')
    manager = getMultiAdapter((obj, column,), IPortletAssignmentMapping)
    assignment = events.Assignment()
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment

    column = getUtility(IPortletManager, name='plone.rightcolumn')
    manager = getMultiAdapter((obj, column,), IPortletAssignmentMapping)
    assignment = news.Assignment()
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
Beispiel #6
0
 def createNewDaviz(self):
     """ Create new visualization
     """
     davizsettings = queryUtility(IDavizSettings)
     strFolder = davizsettings.settings.get("daviz.defaultfolder", "")
     if (strFolder != ""):
         portal = getSite()
         folder = portal.restrictedTraverse(strFolder)
     else:
         folder = self.context.aq_parent
         found = False
         while True:
             try:
                 allowedContentTypes = folder.allowedContentTypes()
             except AttributeError:
                 break
             for allowedContentType in allowedContentTypes:
                 if allowedContentType.id == "DavizVisualization":
                     found = True
             if found:
                 break
             folder = folder.aq_parent
         if not found:
             return
     chooser = INameChooser(folder)
     newId = chooser.chooseName(self.context.title, folder)
     if newId in folder.objectIds():
         raise NameError, 'Object id %s already exists' % newId
     else:
         folder.invokeFactory("DavizVisualization", newId)
     newObj = folder[newId]
     newObj.title = self.context.title
     newObj.setRelatedItems([self.context])
     self.request.response.redirect(newObj.absolute_url()+"/daviz-edit.html")
def assignStackerRelatedPortlet(portal):
    from ubify.policy.config import list_of_portletmanagers_for_stackerportlet_assignment,cynin_desktop_left_column_text
    static_portlet_text = cynin_desktop_left_column_text
    
    #static_portlet_nav_url = portal.absolute_url() + "/stacker-badge"
    #static_portlet_text = static_portlet_text % (static_portlet_nav_url)
    
    from plone.portlet.static import static
    assignments = (
                    static.Assignment(header='cyn.in Desktop',text=static_portlet_text,omit_border=True),
                  )
    
    for name in list_of_portletmanagers_for_stackerportlet_assignment:
        if assignments:
            try:
                portletManager = getUtility(IPortletManager, name=name)
            except ComponentLookupError:
                sm = getSiteManager(portal)
                objportletManager = PortletManager()                
                    
                sm.registerUtility(component=objportletManager,
                                   provided=IPortletManager,
                                   name = name)        
                portletManager = getUtility(IPortletManager, name=name) 
                
            assignable = getMultiAdapter((portal, portletManager,), ILocalPortletAssignmentManager)
            manager = getMultiAdapter((portal, portletManager), IPortletAssignmentMapping)
            
            if portletManager is not None:            
                chooser = INameChooser(manager)
                for assignment in assignments:
                    strtitle = assignment.title.lower()
                    strtitle = strtitle.replace(' ','-')
                    if manager.has_key(strtitle) == 0:
                        manager[chooser.chooseName(None, assignment)] = assignment
def install_plone3_portlets(self):
    """Adds the discountable portlet to the root of the site
    so that it shows up on discountable items
    """
    if not HAS_PLONE30:
        return

    # Do the imports here, as we only need them here and this only
    # gets run on Plone 3.0.
    from zope.app.container.interfaces import INameChooser
    from zope.component import getUtility, getMultiAdapter
    from plone.portlets.interfaces import IPortletManager, IPortletAssignmentMapping
    from getpaid.discount.browser.portlets import portlets30

    # Get some definitions.
    portal = self.portal_url.getPortalObject()
    column = getUtility(IPortletManager, name="plone.rightcolumn", context=portal)
    manager = getMultiAdapter((portal, column), IPortletAssignmentMapping)
    portletnames = [v.title for v in manager.values()]
    chooser = INameChooser(manager)

    assignments = [
        portlets30.DiscountableAssignment(),
        portlets30.BuyXGetXfreeableAssignment(),
        ]

    for assignment in assignments:
        title = assignment.title
        if title not in portletnames:
            manager[chooser.chooseName(title, assignment)] = assignment
 def setUp(self):
     """
     """
     app = self.layer['app']
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     self.tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     self.markRequestWithLayer()
     self.portal_url = self.portal.absolute_url()
     self.browser = Browser(app)
     self.browser.addHeader(
         'Authorization', 'Basic %s:%s' % (
             SITE_OWNER_NAME,
             SITE_OWNER_PASSWORD,
         ))
     #Create some rules
     for x in ["first", "second", "third"]:
         #set some rules
         rule = Rule()
         rule.event = IObjectAddedEvent
         rule.title = "%s rule" % x
         #add the rules to rule's storage
         storage = getUtility(IRuleStorage)
         chooser = INameChooser(storage)
         storage[chooser.chooseName(None, rule)] = rule
         #set the action and add it to the rule
         action = MailSubscriptionsAction()
         action.subject = "Test %s action subject" % x
         rule.actions.append(action)
         email1 = "*****@*****.**"
         email2 = "*****@*****.**"
         self.tool.registerUser(action.actionUID, email1)
         self.tool.registerUser(action.actionUID, email2)
     transaction.commit()
Beispiel #10
0
def add_course_portlet(obj, event):

    # Only do this if the parent is not a course, i.e. only do it on
    # top-level course. Of course, site managers can move things
    # around once the site structure is created

    parent = aq_parent(aq_inner(obj))
    if ICourse.providedBy(parent):
        return

    # A portlet manager is akin to a column
    column = getUtility(IPortletManager, name=COURSEBOX_PORTLET_COLUMN)

    # We multi-adapt the object and the column to an assignment mapping,
    # which acts like a dict where we can put portlet assignments
    manager = getMultiAdapter((
        obj,
        column,
    ), IPortletAssignmentMapping)

    # We then create the assignment and put it in the assignment manager,
    # using the default name-chooser to pick a suitable name for us.
    assignment = coursebox.Assignment()
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
def new_user(principal, event):
    """Initialise the dashboard for a new user
    """
    principal = IEduMember(principal)
    #defaults = IDefaultDashboard(principal, None)
    defaults = DefaultDashboard()
    if defaults is None:
        return
    
    userid = principal.getId()
    portlets = defaults()
    for name in ('plone.dashboard1', 'plone.dashboard2', 'plone.dashboard3', 'plone.dashboard4'):
        assignments = portlets.get(name)
        if assignments:
            column = queryUtility(IPortletManager, name=name)
            if column is not None:
                category = column.get(USER_CATEGORY, None)
                if category is not None:
                    manager = category.get(userid, None)
                    if manager is None:
                        manager = category[userid] = UserPortletAssignmentMapping()
                    chooser = INameChooser(manager)
            
                    for assignment in assignments:
                        manager[chooser.chooseName(None, assignment)] = assignment
    def drop(self, mail):
        """ drop a mail into this mail box. The mail is
        a string with the complete email content """
        
        # code unicode to utf-8
        if isinstance(mail,unicode):
            mail = mail.encode( 'utf-8' )
        type = 'Email'
        format = 'text/plain'
        content_type='text/plain'

        #generate title
        mailobj = email.message_from_string(mail)
        # Subject
        for key in "Subject subject Betreff betreff".split():
            subject = mailobj.get(key)
            if subject:
                subject = self.decodeheader(subject)
                break

        id = subject or DEFAULT_ID
        title = id

        # generate id
        normalizer = component.getUtility(IIDNormalizer)
        chooser = INameChooser(self.context)
        id = chooser.chooseName(normalizer.normalize(id), aq_base(self.context))

        self.context.invokeFactory(type ,id=id , title=title, format=format, \
                                   content_type=content_type, file=mail)
        getattr(self.context, id, None).setContentType(content_type)
        getattr(self.context, id, None).processForm()
        notify(MailDroppedEvent(getattr(self.context, id, None), self.context))
Beispiel #13
0
    def __call__(self):
        request = self.request
        container = self.context.context
        image = request.form.get('file', '')

        if not image:
            return encoder.encode({'success': False, 'message': '', 'error': 'No image provided'})
        name = os.path.split(image.filename)[-1]

        image = FileData(image)

        chooser = INameChooser(container)

        content = Image()

        name = chooser.chooseName(name, content)
        event.notify(ObjectCreatedEvent(content))
        container[name] = content
        try:
            content.data = image
        except NotAllowedFileType:
            transaction.abort()
            return encoder.encode({'success': False, 'message': '', 'error': 'File is not image'})
        return encoder.encode(
            {'success': True, 'message': '', 'file': name})
Beispiel #14
0
 def addObject(self,id_obs_value, what_is_that=None):
     try:
         flatten = getUtility(IQreatureUtility, name="Flatten")
         id_obs_value_list = [i for i in flatten(id_obs_value)]
         if len(id_obs_value_list) == 3:
             value = id_obs_value_list[2]
         elif len(id_obs_value_list) == 6:
             value = [id_obs_value_list[2],id_obs_value_list[5]]
         else:
             return -1
         answer_id = int(id_obs_value_list[0])
         ob = id_obs_value_list[1]
         quiz = removeSecurityProxy(self.context)
         sm = quiz.getSiteManager()
         answer = removeSecurityProxy(sm['intids'].getObject(int(answer_id)))
         notify(CachedObjectChangedEvent([answer]))
         TYPE_OBJECT_MAP = {'lead':AnswerLeads,'depend':AnswerDepends, 'value':AnswerValue}
         if type(value) == type([]):
             ob = TYPE_OBJECT_MAP[ob](int(value[0]),int(value[1]))
         elif ob == 'value' or ob ==u'value':
             ob = TYPE_OBJECT_MAP[ob](unicode(value))
         else:
             ob = TYPE_OBJECT_MAP[ob](int(value))
         notify(ObjectCreatedEvent(ob))
         chooser = INameChooser(answer)
         name = chooser.chooseName(None, ob)
         
         if chooser.checkName(name, ob):
             answer[name] = ob
         else:
             return (0-1)
         return IAsyncDataManager(answer[name]).addSelf()
     except:
         return (0-1)
Beispiel #15
0
 def create(self, data):
     chooser = INameChooser(self.container)
     obj = self.factory(id=u"temporary")
     utils.applyChanges(obj.__of__(self.container), self.form_fields, data)
     oid = chooser.chooseName(obj.title, obj)
     obj.id = oid
     return obj
Beispiel #16
0
    def moveTo(self, target, new_name=None):
        """Move this object to the `target` given.

        Returns the new name within the `target`
        Typically, the `target` is adapted to `IPasteTarget`."""

        obj = self.context
        container = obj.__parent__

        orig_name = obj.__name__
        if new_name is None:
            new_name = orig_name

        checkObject(target, new_name, obj)

        if target is container and new_name == orig_name:
            # Nothing to do
            return

        chooser = INameChooser(target)
        new_name = chooser.chooseName(new_name, obj)

        target[new_name] = obj
        del container[orig_name]
        return new_name
Beispiel #17
0
    def copyTo(self, target, new_name=None):
        """Copy this object to the `target` given.

        Returns the new name within the `target`.

        Typically, the `target` is adapted to `IPasteTarget`.
        After the copy is added to the `target` container, publish
        an `IObjectCopied` event in the context of the target container.
        If a new object is created as part of the copying process, then
        an `IObjectCreated` event should be published.
        """
        obj = self.context
        container = obj.__parent__

        orig_name = obj.__name__
        if new_name is None:
            new_name = orig_name

        checkObject(target, new_name, obj)

        chooser = INameChooser(target)
        new_name = chooser.chooseName(new_name, obj)

        copy = locationCopy(obj)
        copy.__parent__ = copy.__name__ = None
        notify(ObjectCopiedEvent(copy, obj))

        target[new_name] = copy
        return new_name
 def setUp(self):
     """
     """
     app = self.layer['app']
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     self.tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     self.markRequestWithLayer()
     self.portal_url = self.portal.absolute_url()
     self.browser = Browser(app)
     self.browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,))
     #Create some rules
     for x in ["first", "second", "third"]:
         #set some rules
         rule = Rule()
         rule.event = IObjectAddedEvent
         rule.title = "%s rule" % x
         #add the rules to rule's storage
         storage = getUtility(IRuleStorage)
         chooser = INameChooser(storage)
         storage[chooser.chooseName(None, rule)] = rule
         #set the action and add it to the rule
         action = MailSubscriptionsAction()
         action.subject = "Test %s action subject" % x
         rule.actions.append(action)
         email1 = "*****@*****.**"
         email2 = "*****@*****.**"
         self.tool.registerUser(action.actionUID, email1)
         self.tool.registerUser(action.actionUID, email2)
     transaction.commit()
 def create(self, name):
     normalized_id = normalize_id(name)
     chooser = INameChooser(self.container)
     new_id = chooser.chooseName(normalized_id, self.container)
     obj_id = self.container.invokeFactory(self.fti.id, new_id, title=name)
     obj = getattr(self.container, obj_id)
     obj.processForm()
     return obj
def get_id_from_filename(filename, context):
    charset = context.getCharset()
    id = filename.decode(charset).rsplit('.', 1)
    normalizer = component.getUtility(IIDNormalizer)
    chooser = INameChooser(context)
    newid = '.'.join((normalizer.normalize(id[0]), id[1]))
    newid = newid.replace('_','-').replace(' ','-').lower()
    return chooser.chooseName(newid, context)
def get_id_from_filename(filename, context):
    charset = context.getCharset()
    id = filename.decode(charset).rsplit('.', 1)
    if len(id) != 2:
        raise MissingExtension('It seems like the file extension is missing.')
    normalizer = component.getUtility(IIDNormalizer)
    chooser = INameChooser(context)
    newid = '.'.join((normalizer.normalize(id[0]), id[1]))
    newid = newid.replace('_','-').replace(' ','-').lower()
    return chooser.chooseName(newid, context)
Beispiel #22
0
def addExternalPortlet(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.rightcolumn')
    manager = getMultiAdapter((obj, column,), IPortletAssignmentMapping)
    assignment = classic.Assignment(template='oshnetwork_external_links_portlet',
                                    macro='portlet')
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
Beispiel #23
0
def createClassicPortletWithCountryDropdown(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.leftcolumn')
    manager = getMultiAdapter((obj, column,), IPortletAssignmentMapping)
    assignment = classic.Assignment(template='oshnetwork_country_select',
                                    macro='portlet')
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
    def __call__(self, filename, title, description, content_type, data, portal_type):
        context = aq_inner(self.context)
        error = ''
        result = {}
        result['success'] = None
        newid = get_id_from_filename(filename, context)
        chooser = INameChooser(context)
        newid = chooser.chooseName(newid, context)
        # consolidation because it's different upon Plone versions
        if not title :
            # try to split filenames because we don't want
            # big titles without spaces
            title = filename.rsplit('.', 1)[0].replace('_',' ').replace('-',' ')

        if newid in context:
            # only here for flashupload method since a check_id is done
            # in standard uploader - see also XXX in quick_upload.py
            raise NameError, 'Object id %s already exists' %newid
        else :
            upload_lock.acquire()
            try:
                transaction.begin()
                try:
                    context.invokeFactory(type_name=portal_type, id=newid,
                                          title=title, description=description)
                except Unauthorized :
                    error = u'serverErrorNoPermission'
                except ConflictError :
                    # rare with xhr upload / happens sometimes with flashupload
                    error = u'serverErrorZODBConflict'
                except ValueError:
                    error = u'serverErrorDisallowedType'
                except Exception, e:
                    error = u'serverError'
                    logger.exception(e)

                if error:
                    if error == u'serverError':
                        logger.info("An error happens with setId from filename, "
                                    "the file has been created with a bad id, "
                                    "can't find %s", newid)
                else:
                    obj = getattr(context, newid)
                    if obj:
                        error = IQuickUploadFileSetter(obj).set(data, filename, content_type)
                        obj._at_rename_after_creation = False
                        try:
                            obj.processForm()
                        except AttributeError:
                            pass
                        del obj._at_rename_after_creation

                #@TODO : rollback if there has been an error
                transaction.commit()
            finally:
Beispiel #25
0
def changeHomePortletsTitles(portal, logger):

    from plone.portlets.interfaces import IPortletManager
    from plone.portlets.interfaces import ILocalPortletAssignmentManager
    from plone.portlets.constants import CONTEXT_CATEGORY
    from zope.app.container.interfaces import INameChooser
    from plone.portlets.interfaces import IPortletAssignmentMapping
    from zope.component.interfaces import ComponentLookupError

    from plone.portlets.interfaces import IPortletManager
    from plone.portlets.manager import PortletManager
    from zope.interface import alsoProvides

    from ubify.viewlets.browser.interfaces import IHomeContent

    try:
        objviews = getattr(portal, 'views')
        assignments = get_assignments_for_sitehome_collectionportlets(
            portal, objviews, logger)
        sm = getSiteManager(portal)
        name = 'ubify.homecontentportletsmanager'
        try:
            portletManager = getUtility(IPortletManager, name=name)
        except ComponentLookupError:
            objportletManager = PortletManager()
            alsoProvides(objportletManager, IHomeContent)

            sm.registerUtility(component=objportletManager,
                               provided=IPortletManager,
                               name=name)
            portletManager = getUtility(IPortletManager, name=name)

        assignable = getMultiAdapter((
            portal,
            portletManager,
        ), ILocalPortletAssignmentManager)
        manager = getMultiAdapter((portal, portletManager),
                                  IPortletAssignmentMapping)

        mgkeys = manager.keys()
        for k in mgkeys:
            del manager[k]

        if assignments:
            if portletManager is not None:
                chooser = INameChooser(manager)
                for assignment in assignments:
                    if manager.has_key(assignment.id) == 0:
                        manager[chooser.chooseName(None,
                                                   assignment)] = assignment
                        logger.info(
                            "Assigning collection portlet manager for %s" %
                            (assignment.id, ))
    except AttributeError:
        logger.info("Unable to set up site home collection portlets.")
    def __call__(self, filename, title, description, content_type, data, portal_type):
        context = aq_inner(self.context)
        error = ''
        result = {}
        result['success'] = None
        newid = get_id_from_filename(filename, context)
        chooser = INameChooser(context)
        newid = chooser.chooseName(newid, context)
        # consolidation because it's different upon Plone versions
        if not title :
            # try to split filenames because we don't want
            # big titles without spaces
            title = filename.rsplit('.', 1)[0].replace('_',' ').replace('-',' ')

        if newid in context:
            # only here for flashupload method since a check_id is done
            # in standard uploader - see also XXX in quick_upload.py
            raise NameError, 'Object id %s already exists' %newid
        else :
            upload_lock.acquire()
            try:
                transaction.begin()
                try:
                    context.invokeFactory(type_name=portal_type, id=newid,
                                          title=title, description=description)
                except Unauthorized :
                    error = u'serverErrorNoPermission'
                except ConflictError :
                    # rare with xhr upload / happens sometimes with flashupload
                    error = u'serverErrorZODBConflict'
                except ValueError:
                    error = u'serverErrorDisallowedType'
                except Exception, e:
                    error = u'serverError'
                    logger.exception(e)

                if error:
                    if error == u'serverError':
                        logger.info("An error happens with setId from filename, "
                                    "the file has been created with a bad id, "
                                    "can't find %s", newid)
                else:
                    obj = getattr(context, newid)
                    if obj:
                        error = IQuickUploadFileSetter(obj).set(data, filename, content_type)
                        obj._at_rename_after_creation = False
                        try:
                            obj.processForm()
                        except AttributeError:
                            pass
                        del obj._at_rename_after_creation

                #@TODO : rollback if there has been an error
                transaction.commit()
            finally:
Beispiel #27
0
    def initializeArchetype(self, **kwargs):
        ATBTreeFolder.initializeArchetype(self, **kwargs)

        left = getUtility(IPortletManager, name='plone.leftcolumn')
        right = getUtility(IPortletManager, name='plone.rightcolumn')
        
        leftAssignable = getMultiAdapter((self, left), IPortletAssignmentMapping).__of__(self)
        rightAssignable = getMultiAdapter((self, right), IPortletAssignmentMapping).__of__(self)
        
#        IPortletPermissionChecker(leftAssignable)()
#        IPortletPermissionChecker(rightAssignable)()
        
        leftChooser = INameChooser(leftAssignable)
        rightChooser = INameChooser(rightAssignable)
        

        # Set slot properties
        left_slots = zconf.coreblog2.left_slots_default
        for item in left_slots:
            path = item.split('/')
            if len(path) == 4:
                newPortlet = classic.Assignment(path[1], path[3])
                leftAssignable[leftChooser.chooseName(None, newPortlet)] = newPortlet

        right_slots = zconf.coreblog2.right_slots_default
        for item in right_slots:
            path = item.split('/')
            if len(path) == 4:
                newPortlet = classic.Assignment(path[1], path[3])
                rightAssignable[rightChooser.chooseName(None, newPortlet)] = newPortlet
        
        labLeftColumnManager = getMultiAdapter((self, left), ILocalPortletAssignmentManager)
        labLeftColumnManager.setBlacklistStatus(CONTEXT_CATEGORY, True)
        labRightColumnManager = getMultiAdapter((self, right), ILocalPortletAssignmentManager)
        labRightColumnManager.setBlacklistStatus(CONTEXT_CATEGORY, True) 
        
        # finalize
        # make subfolders, etc.
        self.cbfinalize_creation(self,
                                (comment_folder_id, catetory_folder_id, 
                                 stuff_folder_id, images_folder_id))
        self.indexObject()
Beispiel #28
0
def addEventsAndNewsPortlets(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.leftcolumn')
    manager = getMultiAdapter((
        obj,
        column,
    ), IPortletAssignmentMapping)
    assignment = events.Assignment()
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment

    column = getUtility(IPortletManager, name='plone.rightcolumn')
    manager = getMultiAdapter((
        obj,
        column,
    ), IPortletAssignmentMapping)
    assignment = news.Assignment()
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
Beispiel #29
0
def addExternalPortlet(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.rightcolumn')
    manager = getMultiAdapter((
        obj,
        column,
    ), IPortletAssignmentMapping)
    assignment = classic.Assignment(
        template='oshnetwork_external_links_portlet', macro='portlet')
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
def renameAfterCreation(obj, event):
    """Rename object after first edit.
    """
    # Do no rename when the object is first added
    if not IContainerModifiedEvent.providedBy(event):
        utils = getToolByName(obj, 'plone_utils')
        # Rename only if the current id is autogenerated
        if utils.isIDAutoGenerated(obj.id):
            parent = aq_inner(obj).getParentNode()
            if parent is not None:
                chooser = INameChooser(parent)
                newid = chooser.chooseName('', obj)
                parent.manage_renameObject(obj.id, newid)
Beispiel #31
0
def renameAfterCreation(obj, event):
    """Rename object after first edit.
    """
    # Do no rename when the object is first added
    if not IContainerModifiedEvent.providedBy(event):
        utils = getToolByName(obj, 'plone_utils')
        # Rename only if the current id is autogenerated
        if utils.isIDAutoGenerated(obj.id):
            parent = aq_inner(obj).getParentNode()
            if parent is not None:
                chooser = INameChooser(parent)
                newid = chooser.chooseName('', obj)
                parent.manage_renameObject(obj.id, newid)
 def _check_file_id(self, id):
     context = aq_inner(self.context)
     charset = context.getCharset()
     id = id.decode(charset).rsplit('.', 1)
     normalizer = getUtility(IIDNormalizer)
     chooser = INameChooser(context)
     newid = '.'.join((normalizer.normalize(id[0]), id[1]))
     newid = chooser.chooseName(newid, context)
     # consolidation because it's different upon Plone versions
     if newid in context.objectIds() :
         return False
     else:
         return True
Beispiel #33
0
def createClassicPortletWithCountryDropdown(self):
    """ """
    parent = getParent(self)
    obj = getattr(parent, 'oshnetwork')
    column = getUtility(IPortletManager, name='plone.leftcolumn')
    manager = getMultiAdapter((
        obj,
        column,
    ), IPortletAssignmentMapping)
    assignment = classic.Assignment(template='oshnetwork_country_select',
                                    macro='portlet')
    chooser = INameChooser(manager)
    manager[chooser.chooseName(None, assignment)] = assignment
Beispiel #34
0
def create(container=None, type=None, id=None, title=None, strict=True, *args,
           **kwargs):
    """Create a new object.

    :param container: [required] Container object in which to create the new
        object.
    :type container: Folderish content object
    :param type: [required] Type of the object.
    :type type: string
    :param id: Id of the object.  If the id conflicts with another object in
        the container, a suffix will be added to the new object's id. If no id
        is provided, automatically generate one from the title. If there is no
        id or title provided, raise a ValueError.
    :type id: string
    :param title: Title of the object. If no title is provided, use id as
        the title.
    :type title: string
    :param strict: When True, the given id will be enforced. If the id is
        conflicting with another object in the target container, raise a
        KeyError. When False, ``create`` creates a new, non-conflicting id.
    :type param: boolean
    :returns: Content object
    :Example: :ref:`create_content_example`
    """
    if not container:
        raise ValueError('The ``container`` attribute is required.')

    if not type:
        raise ValueError('The ``type`` attribute is required.')

    if not id and not title:
        raise ValueError('You have to provide either the ``id`` or the '
                         '``title`` attribute')

    # Create a temporary id
    id = str(random.randint(0, 99999999))
    container.invokeFactory(type, id, title=title, **kwargs)
    content = container[id]

    # Archetypes specific code
    if IBaseObject.providedBy(content):
        # Will finish Archetypes content item creation process,
        # rename-after-creation and such
        content.processForm()

    # Create a new id from title
    chooser = INameChooser(container)
    new_id = chooser.chooseName(title, content)
    content.aq_parent.manage_renameObject(id, new_id)

    return content
    def __call__(self, filename, title, description, content_type, data, portal_type):
        context = aq_inner(self.context)
        charset = context.getCharset()
        name = filename.decode(charset)
        error = ''
        result = {}
        result['success'] = None
        normalizer = component.getUtility(IIDNormalizer)
        chooser = INameChooser(self.context)
        # normalize all filename but dots
        normalized = ".".join([normalizer.normalize(n) for n in name.split('.')])
        newid = chooser.chooseName(normalized, context)

        # consolidation because it's different upon Plone versions
        newid = newid.replace('_','-').replace(' ','-').lower()
        if not title :
            # try to split filenames because we don't want
            # big titles without spaces
            title = name.split('.')[0].replace('_',' ').replace('-',' ')
        if newid in context.objectIds() :
            # only here for flashupload method since a check_id is done
            # in standard uploader - see also XXX in quick_upload.py
            raise NameError, 'Object id %s already exists' %newid
        else :
            upload_lock.acquire()
            try:
                transaction.begin()
                try:
                    context.invokeFactory(type_name=portal_type, id=newid, title=title, description=description)
                except Unauthorized :
                    error = u'serverErrorNoPermission'
                except ConflictError :
                    # rare with xhr upload / happens sometimes with flashupload
                    error = u'serverErrorZODBConflict'
                except Exception, e:
                    error = u'serverError'
                    logger.exception(e)

                if error:
                    error = u'serverError'
                    logger.info("An error happens with setId from filename, "
                                "the file has been created with a bad id, "
                                "can't find %s", newid)
                else:
                    obj = getattr(context, newid)
                    if obj:
                        error = IQuickUploadFileSetter(obj).set(data, filename, content_type)

                #@TODO : rollback if there has been an error
                transaction.commit()
            finally:
 def create(self, filename, temp_file, mimetype):
     normalized_id = normalize_id(filename)
     chooser = INameChooser(self.container)
     new_id = chooser.chooseName(normalized_id, self.container)
     obj_id = self.container.invokeFactory(self.fti.id,
                                           new_id,
                                           title=filename)
     obj = getattr(self.container, obj_id)
     file_wrapper = obj.getFile()
     file_wrapper.getBlob().consumeFile(temp_file.name)
     file_wrapper.setContentType(mimetype)
     file_wrapper.setFilename(filename)
     obj.processForm()
     return obj
Beispiel #37
0
def move(source=None, target=None, id=None, safe_id=False):
    """Move the object to the target container.

    :param source: [required] Object that we want to move.
    :type source: Content object
    :param target: Target container to which the source object will
        be moved. If no target is specified, the source object's container will
        be used as a target, effectively making this operation a rename
        (:ref:`content_rename_example`).
    :type target: Folderish content object
    :param id: Pass this parameter if you want to change the id of the moved
        object on the target location. If the new id conflicts with another
        object in the target container, a suffix will be added to the moved
        object's id.
    :type id: string
    :param safe_id: When False, the given id will be enforced. If the id is
        conflicting with another object in the target container, raise a
        InvalidParameterError. When True, choose a new, non-conflicting id.
    :type safe_id: boolean
    :raises:
        KeyError
        ValueError
    :Example: :ref:`content_move_example`

    """
    if not source:
        raise ValueError

    if not target and not id:
        raise ValueError

    source_id = source.getId()

    # If no target is given the object is probably renamed
    if target:
        target.manage_pasteObjects(source.manage_cutObjects(source_id))
    else:
        target = source

    if id:
        if not safe_id:
            new_id = id
        else:
            try:
                chooser = INameChooser(target)
            except TypeError:
                chooser = INameChooser(target.aq_parent)
            new_id = chooser.chooseName(id, source)

        target.manage_renameObject(source_id, new_id)
Beispiel #38
0
def addUtility(root_folder, utility_type, utility_factory, **kw):
    """ Add a Utility to the root folder's site manager.

    The utility is added to the default package and activated.
    """
    package = getSiteManagerDefault(root_folder)
    chooser = INameChooser(package)
    utility = utility_factory()
    name = chooser.chooseName(utility_type, utility)
    package[name] = utility
    # Set additional attributes on the utility
    for k, v in kw.iteritems():
        setattr(utility, k, v)
    return name
Beispiel #39
0
    def _get_file_id(self, id):
        context = aq_inner(self.context)
        charset = context.getCharset()
        id = id.decode(charset)
        normalizer = getUtility(IIDNormalizer)
        chooser = INameChooser(context)
        newid = chooser.chooseName(normalizer.normalize(id), context)
        # Make sure our chosen id is unique, iterate until we get one that is.
        chooser = INameChooser(context)
        newid = chooser._findUniqueName(id, None)
        # consolidation because it's different upon Plone versions
        newid = newid.replace('_','-').replace(' ','-').lower()

        return newid
Beispiel #40
0
    def _get_file_id(self, id):
        context = aq_inner(self.context)
        charset = context.getCharset()
        id = id.decode(charset)
        normalizer = getUtility(IIDNormalizer)
        chooser = INameChooser(context)
        newid = chooser.chooseName(normalizer.normalize(id), context)
        # Make sure our chosen id is unique, iterate until we get one that is.
        chooser = INameChooser(context)
        newid = chooser._findUniqueName(id, None)
        # consolidation because it's different upon Plone versions
        newid = newid.replace('_', '-').replace(' ', '-').lower()

        return newid
Beispiel #41
0
    def add(self, content, name=''):
        if not self.isAddable():
            raise Unauthorized("Can't create '%s' instance"%self.name)

        context = self.container
        content = removeAllProxies(content)

        if IContentContainer.providedBy(context) or \
                IContentNamesContainer.providedBy(content):
            chooser = INameChooser(context)

            if IContainerNamesContainer.providedBy(context):
                name = chooser.chooseName('', content)
            else:
                name = chooser.chooseName(name, content)
                chooser.checkName(name, content)

            self.checkObject(context, name, content)

            removeSecurityProxy(context)[name] = content
            return context[name]
        else:
            raise ValueError(_("Can't add content."))
Beispiel #42
0
def move(source=None, target=None, id=None, safe_id=False):
    """Move the object to the target container.

    :param source: [required] Object that we want to move.
    :type source: Content object
    :param target: Target container to which the source object will
        be moved. If no target is specified, the source object's container will
        be used as a target, effectively making this operation a rename
        (:ref:`content_rename_example`).
    :type target: Folderish content object
    :param id: Pass this parameter if you want to change the id of the moved
        object on the target location. If the new id conflicts with another
        object in the target container, a suffix will be added to the moved
        object's id.
    :type id: string
    :param safe_id: When False, the given id will be enforced. If the id is
        conflicting with another object in the target container, raise a
        InvalidParameterError. When True, choose a new, non-conflicting id.
    :type safe_id: boolean
    :raises:
        KeyError
        ValueError
    :Example: :ref:`content_move_example`
    """
    if not source:
        raise ValueError

    if not target and not id:
        raise ValueError

    source_id = source.getId()

    # If no target is given the object is probably renamed
    if target:
        target.manage_pasteObjects(source.manage_cutObjects(source_id))
    else:
        target = source

    if id:
        if not safe_id:
            new_id = id
        else:
            try:
                chooser = INameChooser(target)
            except TypeError:
                chooser = INameChooser(target.aq_parent)
            new_id = chooser.chooseName(id, source)

        target.manage_renameObject(source_id, new_id)
Beispiel #43
0
 def makeQuizContainer(self,el,parent,factory):
     
     title, err = self.getContent(el, 'title')
     if err: return None, err
     body, err = self.getContent(el, 'content')
     if err: return None, err
     chooser = INameChooser(parent)
     quiz_container = factory(title, body)
     try:
         name = chooser.chooseName(None, quiz_container)
         parent[name] = quiz_container
         #this one is for testing only! its better specify ObjectAddedEvent in test setUP !!!
         #notify(ObjectAddedEvent(quiz_container))
     except UserError, err:
         return None, err
def changeHomePortletsTitles(portal,logger):
    
    from plone.portlets.interfaces import IPortletManager
    from plone.portlets.interfaces import ILocalPortletAssignmentManager
    from plone.portlets.constants import CONTEXT_CATEGORY
    from zope.app.container.interfaces import INameChooser
    from plone.portlets.interfaces import IPortletAssignmentMapping
    from zope.component.interfaces import ComponentLookupError
    
    from plone.portlets.interfaces import IPortletManager
    from plone.portlets.manager import PortletManager
    from zope.interface import alsoProvides
    
    from ubify.viewlets.browser.interfaces import IHomeContent
    
    try:
        objviews = getattr(portal,'views')
        assignments = get_assignments_for_sitehome_collectionportlets(portal,objviews,logger)
        sm = getSiteManager(portal)
        name = 'ubify.homecontentportletsmanager'
        try:
            portletManager = getUtility(IPortletManager, name=name)
        except ComponentLookupError:
            objportletManager = PortletManager()
            alsoProvides(objportletManager,IHomeContent)
                
            sm.registerUtility(component=objportletManager,
                               provided=IPortletManager,
                               name = name)        
            portletManager = getUtility(IPortletManager, name=name)
            
        assignable = getMultiAdapter((portal, portletManager,), ILocalPortletAssignmentManager)
        manager = getMultiAdapter((portal, portletManager), IPortletAssignmentMapping)
        
        mgkeys = manager.keys()
        for k in mgkeys:
            del manager[k]
            
        if assignments:        
            if portletManager is not None:            
                chooser = INameChooser(manager)            
                for assignment in assignments:
                    if manager.has_key(assignment.id) == 0:
                        manager[chooser.chooseName(None, assignment)] = assignment
                        logger.info("Assigning collection portlet manager for %s" % (assignment.id,)  )
    except AttributeError:
        logger.info("Unable to set up site home collection portlets.")
    def create(self, title, text):
        """ create the Blog Entry on the context and return it"""

        normalizer = component.getUtility(IIDNormalizer)
        chooser = INameChooser(self.context)
        id = chooser.chooseName(normalizer.normalize(title), aq_base(self.context))

        self.context.invokeFactory(
                'Blog Entry',
                id=id,
                title=title,
                text=text)

        blog_entry = getattr(self.context, id)
        blog_entry.processForm()
        notify(MailDroppedEvent(blog_entry, self.context))
        return blog_entry
Beispiel #46
0
def copy(source=None, target=None, id=None, safe_id=False):
    """Copy the object to the target container.

    :param source: [required] Object that we want to copy.
    :type source: Content object
    :param target: Target container to which the source object will
        be moved. If no target is specified, the source object's container will
        be used as a target.
    :type target: Folderish content object
    :param id: Id of the copied object on the target location. If no id is
        provided, the copied object will have the same id as the source object
        - however, if the new object's id conflicts with another object in the
        target container, a suffix will be added to the new object's id.
    :type id: string
    :returns: Content object that was created in the target location
    :param safe_id: When True, the given id will be enforced. If the id is
        conflicting with another object in the target container, raise a
        InvalidParameterError. When True, choose a new, non-conflicting id.
    :type safe_id: boolean
    :raises:
        KeyError,
        ValueError
    :Example: :ref:`content_copy_example`
    """
    if not source:
        raise ValueError

    if not target and not id:
        raise ValueError

    source_id = source.getId()
    target.manage_pasteObjects(source.manage_copyObjects(source_id))

    if id:
        if not safe_id:
            new_id = id
        else:
            chooser = INameChooser(target)
            new_id = chooser.chooseName(id, source)

        target.manage_renameObject(source_id, new_id)
Beispiel #47
0
def assignStackerRelatedPortlet(portal):
    from ubify.policy.config import list_of_portletmanagers_for_stackerportlet_assignment, cynin_desktop_left_column_text
    static_portlet_text = cynin_desktop_left_column_text

    #static_portlet_nav_url = portal.absolute_url() + "/stacker-badge"
    #static_portlet_text = static_portlet_text % (static_portlet_nav_url)

    from plone.portlet.static import static
    assignments = (static.Assignment(header='cyn.in Desktop',
                                     text=static_portlet_text,
                                     omit_border=True), )

    for name in list_of_portletmanagers_for_stackerportlet_assignment:
        if assignments:
            try:
                portletManager = getUtility(IPortletManager, name=name)
            except ComponentLookupError:
                sm = getSiteManager(portal)
                objportletManager = PortletManager()

                sm.registerUtility(component=objportletManager,
                                   provided=IPortletManager,
                                   name=name)
                portletManager = getUtility(IPortletManager, name=name)

            assignable = getMultiAdapter((
                portal,
                portletManager,
            ), ILocalPortletAssignmentManager)
            manager = getMultiAdapter((portal, portletManager),
                                      IPortletAssignmentMapping)

            if portletManager is not None:
                chooser = INameChooser(manager)
                for assignment in assignments:
                    strtitle = assignment.title.lower()
                    strtitle = strtitle.replace(' ', '-')
                    if manager.has_key(strtitle) == 0:
                        manager[chooser.chooseName(None,
                                                   assignment)] = assignment
Beispiel #48
0
 def test_already_registered_email(self):
     """
     try to re-register an email for the same rule id
     """
     rule = Rule()
     rule.event = IObjectAddedEvent
     rule.title = "Test rule"
     #add the rule to rule's storage
     storage = getUtility(IRuleStorage)
     chooser = INameChooser(storage)
     storage[chooser.chooseName(None, rule)] = rule
     #set the action and add it to the rule
     action = MailSubscriptionsAction()
     action.subject = "Test Rule subject"
     action.message = "Test Rule message"
     rule.actions.append(action)
     tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     email = "*****@*****.**"
     result, msg = tool.registerUser(action.actionUID, email)
     result2, msg2 = tool.registerUser(action.actionUID, email)
     self.assertTrue(result)
     self.assertFalse(result2)
     self.assertEquals(msg2, 'already_subscribed_error')
 def setUp(self):
     """
     """
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     self.markRequestWithLayer()
     # Creating empty value for ACTUAL_URL to prevent KeyError
     self.request['ACTUAL_URL'] = ''
     app = self.layer['app']
     #set some things
     #create a test user with email
     self.acl_users = getToolByName(self.portal, 'acl_users')
     self.acl_users.userFolderAddUser('user1', 'secret', ['Member'], [])
     self.user1 = self.acl_users.getUser('user1')
     self.user1.setProperties(email='*****@*****.**')
     #now set some rules
     self.tool = getToolByName(self.portal, SUBSCRIPTION_TOOL, None)
     self.portal_url = self.portal.absolute_url()
     self.browser = Browser(app)
     for x in ["first", "second", "third"]:
         #set some rules
         rule = Rule()
         rule.event = IObjectAddedEvent
         rule.title = "%s rule" % x
         #add the rules to rule's storage
         storage = getUtility(IRuleStorage)
         chooser = INameChooser(storage)
         storage[chooser.chooseName(None, rule)] = rule
         #set the action and add it to the rule
         action = MailSubscriptionsAction()
         action.subject = "Test %s action subject" % x
         rule.actions.append(action)
     #set one only norobots question
     registry = queryUtility(IRegistry)
     settings = registry.forInterface(INorobotsWidgetSettings, check=False)
     settings.questions = (u'What is 4 + 4 ?::8', )
     transaction.commit()
Beispiel #50
0
    def importAssignment(self, obj, node):
        """ Import an assignment from a node
        """
        # 1. Determine the assignment mapping and the name
        manager_name = node.getAttribute('manager')

        manager = getUtility(IPortletManager, manager_name)
        mapping = getMultiAdapter((obj, manager), IPortletAssignmentMapping)
        if mapping is None:
            return

        # 2. Either find or create the assignment
        assignment = None
        name = node.getAttribute('name')
        if name:
            assignment = mapping.get(name, None)

        type_ = node.getAttribute('type')

        if assignment is None:
            portlet_factory = getUtility(IFactory, name=type_)
            assignment = portlet_factory()

            if not name:
                chooser = INameChooser(mapping)
                name = chooser.chooseName(None, assignment)

            mapping[name] = assignment

        # aq-wrap it so that complex fields will work
        assignment = assignment.__of__(obj)

        # 3. Use an adapter to update the portlet settings
        portlet_interface = getUtility(IPortletTypeInterface, name=type_)
        assignment_handler = IPortletAssignmentExportImportHandler(assignment)
        assignment_handler.import_assignment(portlet_interface, node)
Beispiel #51
0
def assign_cynin_navigation(portal):
    cyninnav = ICyninNavigation(portal)
    if cyninnav is None:
        return
    
    portlets = cyninnav()    
    for name in portlets.keys():        
        assignments = portlets.get(name)
        if assignments:
            try:
                portletManager = getUtility(IPortletManager, name=name)
            except ComponentLookupError:
                sm = getSiteManager(portal)
                objportletManager = PortletManager()
                if name == 'ubify.navigationspacesportletmanager':
                    alsoProvides(objportletManager,INavigationSpacesContent)
                elif name == 'ubify.navigationcollectionportletmanager':
                    alsoProvides(objportletManager,INavigationCollectionContent)
                elif name == 'ubify.navigationmembersportletmanager':
                    alsoProvides(objportletManager,INavigationMembersContent)
                    
                sm.registerUtility(component=objportletManager,
                                   provided=IPortletManager,
                                   name = name)        
                portletManager = getUtility(IPortletManager, name=name) 
            
            assignable = getMultiAdapter((portal, portletManager,), ILocalPortletAssignmentManager)
            manager = getMultiAdapter((portal, portletManager), IPortletAssignmentMapping)

            if portletManager is not None:            
                chooser = INameChooser(manager)
                for assignment in assignments:
                    if name == 'ubify.navigationspacesportletmanager':
                        bfound = False
                        for eobj in manager.values():                            
                            if isinstance(eobj,assignment.__class__):
                                bfound = True
                            if bfound and eobj.root == '/' + contentroot_details['oldid']:
                                bfound = False
                                del manager[eobj.id]
                            if bfound:
                                break;
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment
                    elif name == 'ubify.navigationcollectionportletmanager':
                        bfound = False
                        for eobj in manager.values():
                            if isinstance(eobj,assignment.__class__):
                                bfound = True                            
                            if bfound:
                                break;
                        
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment
                    elif name == 'ubify.navigationmembersportletmanager':                        
                        bfound = False
                        for eobj in manager.values():
                            if isinstance(eobj,assignment.__class__):
                                bfound = True                            
                            if bfound:
                                break;
                        
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment    
                        
            assignable.setBlacklistStatus(CONTEXT_CATEGORY, True)
def generate_uid(name, context):
    normalized_id = normalize_id(name)
    chooser = INameChooser(context)
    return chooser.chooseName(normalized_id, context)
Beispiel #53
0
def assign_portal_dashboard(portal, event, isReinstall=False):
    site = portal
    objDashboard = ISiteDefaultDashboard(portal, None)
    if objDashboard is None:
        return

    portlets = objDashboard()

    for name in portlets.keys():
        assignments = portlets.get(name)
        try:
            portletManager = getUtility(IPortletManager, name=name)
        except ComponentLookupError:
            sm = getSiteManager(site)
            objportletManager = PortletManager()
            if name == spacedashboardportletmanager_name:
                alsoProvides(objportletManager, IHomeContent)
            elif name == spacemindmapmanager_name:
                alsoProvides(objportletManager, IMindMapContent)
            elif name == spacehomeleftblockmanager_name:
                alsoProvides(objportletManager, IHomeLeftblockContent)

            sm.registerUtility(component=objportletManager,
                               provided=IPortletManager,
                               name=name)
            portletManager = getUtility(IPortletManager, name=name)

        assignable = getMultiAdapter((
            portal,
            portletManager,
        ), ILocalPortletAssignmentManager)
        manager = getMultiAdapter((portal, portletManager),
                                  IPortletAssignmentMapping)

        if portletManager is not None:
            reorderrecentportlet = False
            recentportletname = ''
            chooser = INameChooser(manager)
            for assignment in assignments:
                if name == spacemindmapmanager_name:
                    bfound = False
                    if isReinstall:
                        removeAssignedPortlets(portal, manager, name)
                    for eobj in manager.values():
                        if isinstance(
                                eobj, static.Assignment
                        ) and eobj.id == site_home_top_banner_static_header.lower(
                        ).replace(' ', '-'):
                            bfound = True
                        if bfound:
                            break
                    if not bfound:
                        manager[chooser.chooseName(None,
                                                   assignment)] = assignment
                elif name == spacehomeleftblockmanager_name:
                    bfound = False
                    if isReinstall:
                        removeAssignedPortlets(portal, manager, name)
                    for eobj in manager.values():
                        if isinstance(eobj, assignment.__class__):
                            bfound = True
                        if bfound:
                            #check for recentsiteupdate portlet fix
                            try:
                                if isinstance(
                                        eobj,
                                        recentsiteupdatesportlet.Assignment
                                ) and hasattr(eobj, 'data') and hasattr(
                                        eobj.data,
                                        'resultcount') and isinstance(
                                            eobj.data.resultcount, int):
                                    bfound = False
                                    del manager[eobj.id]
                                    reorderrecentportlet = True
                                    recentportletname = eobj.id.encode(
                                        'ascii', 'replace')
                            except AttributeError:
                                pass
                        if bfound:
                            break
                    if not bfound:
                        manager[chooser.chooseName(None,
                                                   assignment)] = assignment
                elif name == spacedashboardportletmanager_name:
                    bfound = False
                    if isReinstall:
                        removeAssignedPortlets(portal, manager, name)
                    for eobj in manager.values():
                        if isinstance(eobj, assignment.__class__):
                            bfound = True
                        if bfound:
                            break
                    if not bfound:
                        manager[chooser.chooseName(None,
                                                   assignment)] = assignment
            if reorderrecentportlet and isReinstall:
                keys = list(manager.keys())
                idx = keys.index(recentportletname)
                keys.remove(recentportletname)
                keys.insert(0, recentportletname)
                manager.updateOrder(keys)
        if assignable is not None:
            assignable.setBlacklistStatus(CONTEXT_CATEGORY, True)
    def __call__(self, name, title, description, content_type, data,
                 portal_type):

        context = aq_inner(self.context)
        charset = context.getCharset()
        filename = name
        name = name.decode(charset)
        error = ''
        result = {}
        result['success'] = None
        normalizer = component.getUtility(IIDNormalizer)
        chooser = INameChooser(self.context)

        # normalize all filename but dots
        normalized = ".".join(
            [normalizer.normalize(n) for n in name.split('.')])
        newid = chooser.chooseName(normalized, context)

        # consolidation because it's different upon Plone versions
        newid = newid.replace('_', '-').replace(' ', '-').lower()
        if not title:
            # try to split filenames because we don't want
            # big titles without spaces
            title = name.split('.')[0].replace('_', ' ').replace('-', ' ')
        if newid in context.objectIds():
            # only here for flashupload method since a check_id is done
            # in standard uploader - see also XXX in quick_upload.py
            raise NameError, 'Object id %s already exists' % newid
        else:
            upload_lock.acquire()
            transaction.begin()
            try:
                context.invokeFactory(type_name=portal_type,
                                      id=newid,
                                      title=title,
                                      description=description)
            except Unauthorized:
                error = u'serverErrorNoPermission'
            except ConflictError:
                # rare with xhr upload / happens sometimes with flashupload
                error = u'serverErrorZODBConflict'
            except Exception, e:
                error = u'serverError'
                # logger.exception(e)

            if not error:
                obj = getattr(context, newid)
                if obj:
                    primaryField = obj.getPrimaryField()
                    if primaryField is not None:
                        mutator = primaryField.getMutator(obj)
                        # mimetype arg works with blob files
                        mutator(data,
                                content_type=content_type,
                                mimetype=content_type)
                        # XXX when getting file through request.BODYFILE (XHR direct upload)
                        # the filename is not inside the file
                        # and the filename must be a string, not unicode
                        # otherwise Archetypes raise an error (so we use filename and not name)
                        if not obj.getFilename():
                            if isinstance(filename, unicode):
                                filename = filename.encode(charset)
                            obj.setFilename(filename)
                        obj.reindexObject()
                        notify(ObjectInitializedEvent(obj))
                    else:
                        # some products remove the 'primary' attribute on ATFile or ATImage (which is very bad)
                        error = u'serverError'
                        # logger.info("An error happens : impossible to get the primary field for file %s, rawdata can't be created" %obj.absolute_url())
                else:
                    error = u'serverError'
                    # logger.info("An error happens with setId from filename, the file has been created with a bad id, can't find %s" %newid)
            transaction.commit()
            upload_lock.release()
Beispiel #55
0
 def saveAssignment(mapping, assignment):
     chooser = INameChooser(mapping)
     mapping[chooser.chooseName(None, assignment)] = assignment
Beispiel #56
0
def create(container=None,
           type=None,
           id=None,
           title=None,
           safe_id=False,
           **kwargs):
    """Create a new content item.

    :param container: [required] Container object in which to create the new
        object.
    :type container: Folderish content object
    :param type: [required] Type of the object.
    :type type: string
    :param id: Id of the object.  If the id conflicts with another object in
        the container, a suffix will be added to the new object's id. If no id
        is provided, automatically generate one from the title. If there is no
        id or title provided, raise a ValueError.
    :type id: string
    :param title: Title of the object. If no title is provided, use id as
        the title.
    :type title: string
    :param safe_id: When False, the given id will be enforced. If the id is
        conflicting with another object in the target container, raise a
        InvalidParameterError. When True, choose a new, non-conflicting id.
    :type safe_id: boolean
    :returns: Content object
    :raises:
        KeyError,
        :class:`~plone.api.exc.MissingParameterError`,
        :class:`~plone.api.exc.InvalidParameterError`
    :Example: :ref:`content_create_example`
    """
    if not container:
        raise MissingParameterError("Missing required parameter: container")

    if not type:
        raise MissingParameterError("Missing required parameter: type")

    if not id and not title:
        raise MissingParameterError(
            'You have to provide either the ``id`` or the '
            '``title`` parameter')

    # Create a temporary id if the id is not given
    content_id = not safe_id and id or str(random.randint(0, 99999999))

    if title:
        kwargs['title'] = title

    try:
        container.invokeFactory(type, content_id, **kwargs)
    except ValueError:
        if ISiteRoot.providedBy(container):
            types = [type.id for type in container.allowedContentTypes()]
        else:
            types = container.getLocallyAllowedTypes()

        raise InvalidParameterError(
            "Cannot add a '%s' object to the container. \n"
            "Allowed types are:\n"
            "%s" % (type, '\n'.join(sorted(types))))

    content = container[content_id]

    # Archetypes specific code
    if IBaseObject.providedBy(content):
        # Will finish Archetypes content item creation process,
        # rename-after-creation and such
        content.processForm()

    if not id or (safe_id and id):
        # Create a new id from title
        chooser = INameChooser(container)
        derived_id = id or title
        new_id = chooser.chooseName(derived_id, content)
        # kacee: we must do a partial commit, else the renaming fails because
        # the object isn't in the zodb.
        # Thus if it is not in zodb, there's nothing to move. We should
        # choose a correct id when
        # the object is created.
        # maurits: tests run fine without this though.
        transaction.savepoint(optimistic=True)
        content.aq_parent.manage_renameObject(content_id, new_id)

    return content
Beispiel #57
0
def evolve(context):
    """ restructre form referatory/collectanea/figures to referatory/figuresng.
    relations now live in one single thing."""
    root = getRootFolder(context)

    site = None
    for s in findObjectsProviding(root, IQuotationtoolSite):
        site = s
        break
    if site is None: raise Exception('No quotationtool site')
    hooks.setSite(site)

    sm = site.getSiteManager()

    # a container for comments about figures was added
    container = site['aboutfigures'] = CommentAboutFigureContainer()
    sm.registerUtility(container, ICommentAboutFigureContainer)
    IWriteZopeDublinCore(container).title = u"Comments about Examples"
    IWriteZopeDublinCore(container).description = u"""Comments about examples are stored here."""

    # relation catalog was restructured to one catalog with several indices
    cat = sm['default']['relation_catalog'] = zc.relation.catalog.Catalog(
        dump, load)
    cat.addValueIndex(
        IReference['uniform_title'],
        dump = dump, load = load,
        name = 'ireference-uniform_title')
    cat.addValueIndex(
        IFigure['reference'],
        dump = dump, load = load,
        name = 'ifigure-reference')
    cat.addValueIndex(
        ICommentAboutFigure['figure'],
        dump = dump, load = load,
        name = 'icommentaboutfigure-figure')
    cat.addValueIndex(
        ICommentAboutReference['reference'],
        dump = dump, load = load,
        name = 'icommentaboutreference-reference')
    sm.registerUtility(cat, zc.relation.interfaces.ICatalog)
    for obj in findObjectsProviding(site, IReference):
        cat.index(obj)
    for obj in findObjectsProviding(site, IFigure):
        cat.index(obj)
    for obj in findObjectsProviding(site, ICommentAboutFigure):
        cat.index(obj)
    for obj in findObjectsProviding(site, ICommentAboutReference):
        cat.index(obj)


    # figuresng (figures next generation) need some restructuring

    old_examples = site['examples-g2'] = site['examples']

    site.__delitem__('examples')

    site['examples'] = examples_ng = ExampleContainer()
    sm.registerUtility(examples_ng, IExampleContainer)
    name_chooser = INameChooser(examples_ng)

    extent = zc.catalog.extentcatalog.FilterExtent(filter)
    cat = sm['default']['examples_search_catalog'] = zc.catalog.extentcatalog.Catalog(extent)
    createReferenceIndices(cat)
    createExampleIndices(cat)
    sm.registerUtility(cat, zope.app.catalog.interfaces.ICatalog,
                       name = "examples")

    for old in old_examples.values():
        new = Example()
        new.reference = old.quotation.reference
        new.quotation = unicode(old.quotation.quotation)
        new.source_type = 'quotationtool.figuresng.plaintext'
        new.position = unicode(old.quotation.position)
        new.quid = unicode(getattr(old, 'quid', u""))
        new.pro_quo = unicode(getattr(old, 'pro_quo', u""))
        new.marker = unicode(getattr(old, 'marker', u""))
        name_ = name_chooser.chooseName(new, None)
        examples_ng[name_] = new

        dcdata = IAnnotations(old).get(DCkey)
        annotations = IAnnotations(new)
        annotations[DCkey] = dcdata
def assign_space_dashboard(space,event):
    #import pdb;pdb.set_trace()
    site = space.portal_url.getPortalObject()
    objDashboard = ISpaceDefaultDashboard(space,None)
    if objDashboard is None:
        return
    
    spaceid = space.id
    portlets = objDashboard()
    
    for name in (spacemembersportletmanager_name,spacedashboardportletmanager_name,spacemindmapmanager_name,spacehomeleftblockmanager_name):
        assignments = portlets.get(name)        
        if assignments:
            try:
                portletManager = getUtility(IPortletManager, name=name)
            except ComponentLookupError:
                sm = getSiteManager(site)
                objportletManager = PortletManager()
                if name == spacedashboardportletmanager_name:
                    alsoProvides(objportletManager,IHomeContent)
                elif name == spacemembersportletmanager_name:
                    alsoProvides(objportletManager,ISpaceMembersContent)
                elif name == spacemindmapmanager_name:
                    alsoProvides(objportletManager,IMindMapContent)
                elif name == spacehomeleftblockmanager_name:
                    alsoProvides(objportletManager,IHomeLeftblockContent)
                    
                sm.registerUtility(component=objportletManager,
                                   provided=IPortletManager,
                                   name = name)        
                portletManager = getUtility(IPortletManager, name=name) 
                
            assignable = getMultiAdapter((space, portletManager,), ILocalPortletAssignmentManager)
            manager = getMultiAdapter((space, portletManager), IPortletAssignmentMapping)
            
            if portletManager is not None:            
                chooser = INameChooser(manager)
                for assignment in assignments:
                    if name == spacemindmapmanager_name:
                        bfound = False
                        for eobj in manager.values():
                            if isinstance(eobj,spacemindmapportlet.Assignment):
                                bfound = True
                            if bfound:
                                break;
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment
                    elif name == spacehomeleftblockmanager_name:
                        bfound = False
                        for eobj in manager.values():
                            if isinstance(eobj,assignment.__class__):
                                bfound = True
                            elif isinstance(eobj,assignment.__class__):
                                bfound = True
                            
                            if bfound:
                                break;
                        
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment
                    elif name == spacemembersportletmanager_name:
                        bfound = False
                        for eobj in manager.values():
                            if isinstance(eobj,assignment.__class__):
                                bfound = True
                            elif isinstance(eobj,assignment.__class__):
                                bfound = True
                            
                            if bfound:
                                break;
                        
                        if not bfound:
                            manager[chooser.chooseName(None, assignment)] = assignment
                    else:
                        strtitle = assignment.title.lower()
                        strtitle = strtitle.replace(' ','-')
                        if manager.has_key(strtitle) == 0:
                            manager[chooser.chooseName(None, assignment)] = assignment
                        
            assignable.setBlacklistStatus(CONTEXT_CATEGORY, True)

    
#def enable_addable_types(space, event):
#    """Give the given role the add permission on all the selected types.
#    """
#    portal_types = getToolByName(space, 'portal_types')
#    role = 'TeamMember'
#    #import pdb;pdb.set_trace()
#    for fti in portal_types.listTypeInfo():
#        type_id = fti.getId()
#
#        permission = get_factory_permission(space, fti)
#        if permission is not None:
#            roles = [r['name'] for r in space.rolesOfPermission(permission) if r['selected']]
#            acquire = bool(space.permission_settings(permission)[0]['acquire'])
#            if type_id in space.addable_types and role not in roles:
#                roles.append(role)
#            elif type_id not in space.addable_types and role in roles:
#                roles.remove(role)
#            space.manage_permission(permission, roles, acquire)
def evolve(context):
    """ Evolve data from the 2009 version to 2011 version.

    - create bibliography
    
    - create biblatex entries from references

    - let examples point to new entry objects

    - grant 'quotationtool.Creator' role to dc.creators[0] of
      examples, comments and entries.

    """

    # We moved the imports here because of getInfo which only takes
    # the __doc__ string in evolve. getInfo should not import
    # anything.
    from zope.app.zopeappgenerations import getRootFolder
    from zope.app.generations.utility import findObjectsProviding
    from zope.app.component import hooks
    from zope.dublincore.interfaces import IWriteZopeDublinCore
    from zope.securitypolicy.interfaces import IPrincipalRoleManager
    from zope.dublincore.annotatableadapter import DCkey
    from zope.annotation.interfaces import IAnnotations
    from zope.app.container.interfaces import INameChooser

    from quotationtool.site.interfaces import IQuotationtoolSite
    from quotationtool.figuresng.iexample import IExample
    from quotationtool.commentary.interfaces import IComment
    from quotationtool.bibliography.bibliography import Bibliography
    from quotationtool.bibliography.interfaces import IBibliography
    from quotationtool.biblatex.biblatexentry import BiblatexEntry

    from quotationtool.referatory.interfaces import IReference
    from quotationtool.referatory.bibtex.iarticle import IArticle
    from quotationtool.referatory.bibtex.ibook import IBook
    from quotationtool.referatory.bibtex.iincollection import IIncollection

    root = getRootFolder(context)

    site = None
    for s in findObjectsProviding(root, IQuotationtoolSite):
        site = s
        break
    if site is None:
        raise Exception('No quotationtool site!')
    hooks.setSite(site)

    sm = site.getSiteManager()

    # grant quotationtool.Creator to the principal who created the
    # object. The principal must be therefor looked up in dc
    # annotation.
    def grantCreator(obj):
        dc = IWriteZopeDublinCore(obj)
        role_manager = IPrincipalRoleManager(obj)
        role_manager.assignRoleToPrincipal('quotationtool.Creator',
                                           dc.creators[0])

    # create bibliography
    site['bibliography'] = bibliography = Bibliography()
    sm.registerUtility(bibliography, IBibliography)
    IWriteZopeDublinCore(bibliography).title = u"Bibliography"

    # create new catalogs

    # create biblatex entries form old references
    namechooser = INameChooser(bibliography)
    map = {}
    for reference in findObjectsProviding(site, IReference):

        entry = BiblatexEntry()

        au = getattr(reference, 'author', ())
        if au:
            entry.author = list(au)
        ed = getattr(reference, 'editor', ())
        if ed:
            entry.editor = list(ed)
        titles = getattr(reference, 'title', ())
        if len(titles) >= 1:
            entry.title = titles[0]
        if len(titles) > 1:
            entry.subtitle = titles[1]
            if len(titles) > 2:
                entry.subtitle += u". " + titles[2]
        entry.publisher = getattr(reference, 'publisher', None)
        entry.date = getattr(reference, 'year', None)
        entry.volume = getattr(reference, 'volume', None)
        entry.number = getattr(reference, 'number', None)
        entry.series = getattr(reference, 'series', None)
        entry.location = getattr(reference, 'address', None)
        entry.edition = getattr(reference, 'edition', None)
        entry.month = getattr(reference, 'month', None)
        entry.note = getattr(reference, 'note', None)
        entry.journaltitle = getattr(reference, 'journal', None)
        entry.pages = getattr(reference, 'pages', None)
        titles = getattr(reference, 'booktitle', ())
        if len(titles) >= 1:
            entry.booktitle = titles[0]
        if len(titles) > 1:
            entry.booksubtitle = titles[1]
            if len(titles) > 2:
                entry.booksubtitle += u". " + titles[2]
        entry.type = getattr(reference, 'type', None)
        entry.chapter = getattr(reference, 'chapter', None)
        if getattr(reference, 'language', None) == 'de':
            entry.hyphenation = 'ngerman'
        else:
            entry.hyphenation = 'english'
        title = getattr(reference.uniform_title, 'uniform_title', ())
        origtitle = u""
        if title:
            for t in title:
                origtitle += t + u". "
            entry.origtitle = origtitle[:-2]
        year = getattr(reference.uniform_title, 'year', None)
        if year:
            origdate = year
        else:
            origdate = unicode(getattr(
                reference.uniform_title, 'post', u"")) + u"/" + unicode(
                    getattr(reference.uniform_title, 'ante', u""))
        try:
            entry.origdate = origdate
        except Exception:
            pass

        if IBook.providedBy(reference):
            entry.entry_type = 'Book'
        if IIncollection.providedBy(reference):
            entry.entry_type = 'InCollection'
        if IArticle.providedBy(reference):
            entry.entry_type = 'Article'

        name = namechooser.chooseName(None, entry)
        bibliography[name] = entry

        map[reference.__name__] = entry.__name__

        dcdata = IAnnotations(reference).get(DCkey)
        annotations = IAnnotations(entry)
        annotations[DCkey] = dcdata

        grantCreator(entry)

        if 1 == 0:  #hack for testing
            break

    for example in findObjectsProviding(site, IExample):

        grantCreator(example)

        if '.plaintext' in example.source_type:
            example.source_type = 'plaintext'
        if '.rest' in example.source_type:
            example.source_type = 'rest'

        example.reference = bibliography[map[example.reference.__name__]]

    for comment in findObjectsProviding(site, IComment):

        grantCreator(comment)

        if '.plaintext' in comment.source_type:
            comment.source_type = 'plaintext'
        if '.rest' in comment.source_type:
            comment.source_type = 'rest'

    if 1 == 0:
        raise Exception