Пример #1
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")
Пример #2
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})
Пример #3
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
Пример #4
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
Пример #5
0
    def validate(self, data):
        form = self.view
        if 'shortname' not in form.widgets:
            return super(ContentNameValidator, self).validate(data)

        widget = form.widgets['shortname']

        if widget.error:
            return super(ContentNameValidator, self).validate(data)

        context = self.view.context
        shortname = data.get('shortname').lower()
        valid_chars = "-.%s%s" % (string.lowercase, string.digits)
        shortname = ''.join(c for c in shortname if c in valid_chars)

        if shortname == context.__name__:
            return super(ContentNameValidator, self).validate(data)

        errors = []
        chooser = INameChooser(context.__parent__)

        try:
            chooser.checkName(shortname, None)
        except (UserError, ValueError), err:
            exc = NameError(unicode(err))

            widget.error = NameErrorViewSnippet(
                exc, self.request, widget, widget.field, form, self.context)
            widget.error.update()
            errors.append(exc)
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 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()
Пример #8
0
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
Пример #9
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
Пример #10
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)
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))
 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()
Пример #14
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)
Пример #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
Пример #16
0
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)
Пример #17
0
 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
Пример #18
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
Пример #19
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 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)
Пример #21
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.")
Пример #22
0
    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:
    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:
Пример #24
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
Пример #25
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
Пример #26
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)
Пример #27
0
 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
Пример #28
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)
Пример #29
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:
Пример #31
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
Пример #32
0
 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
Пример #33
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)
Пример #34
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
Пример #35
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)
Пример #36
0
 def validateActionFields(self, cat_name, data, allow_dup=False):
     """ Check action fields on validity """
     errors = {}
     
     if allow_dup:
         category = ActionCategory(cat_name)           # create dummy category to avoid id duplication during action update
     else:
         category = self.getOrCreateCategory(cat_name) # get or create (if necessary) actions category
     
     # validate action id
     chooser = INameChooser(category)
     try:
         chooser.checkName(data['id'], self.context)
     except Exception, e:
         errors['id'] = "%s" % str(e)
Пример #37
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
Пример #38
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
Пример #39
0
def setupUtility(site, utility, provides, name=u'',
                 name_in_container=None, public=False, setup=None):
    """Set up a utility in a site.

    site - the site to set up the utility in
    utility - the utility to set up
    provides - the interface the utility should be registered with
    name - the name the utility should be registered under, default
      the empty string (no name)
    name_in_container - if given it will be used to add the utility
      object to its container. Otherwise a name will be made up
    public - if False, the utility will be stored in the site manager. If
      True, the utility will be storedin the site (it is assumed the
      site is a container)
    setup - if not None, it will be called with the utility as its first
       argument. This function can then be used to further set up the
       utility.
    """
    site_manager = site.getSiteManager()

    if not public:
        container = site_manager
    else:
        container = site

    if name_in_container is None:
        name_in_container = INameChooser(container).chooseName(
            utility.__class__.__name__, utility)
    container[name_in_container] = utility

    if setup is not None:
        setup(utility)

    site_manager.registerUtility(utility, provided=provides,
                                 name=name)
Пример #40
0
    def add(self, obj):
        container = self.context
        portal_type = self.ti.getId()

        # check allowed (sometimes redundant, but better safe than sorry)
        if not self.ti.isConstructionAllowed(container):
            raise AccessControl_Unauthorized('Cannot create %s' % portal_type)

        #check container constraints
        ttool = self._getTool('portal_types')
        container_ti = ttool.getTypeInfo(container)
        if container_ti is not None and \
                not container_ti.allowType(portal_type):
            raise ValueError('Disallowed subobject type: %s' % portal_type)

        name = INameChooser(container).chooseName(obj.getId(), obj)
        obj.id = name
        container._setObject(name, obj)
        obj = container._getOb(name)

        obj_type = translate(obj.Type(), container)
        self.status = _(u'${obj_type} added.', mapping={'obj_type': obj_type})
        self._finished_add = True
        self._added_obj = obj
        return obj
Пример #41
0
    def validate(self, value):
        super(AddName, self).validate(value)

        if self.context is None:
            return

        return True
        container = getUtility(IIntIds).queryObject(self.context.get('location'))
        if container is not None:
            # check content name
            chooser = INameChooser(container)

            try:
                chooser.checkName(value, None)
            except UserError, err:
                raise NameError(unicode(err))
Пример #42
0
 def add(self, **data):
     shelf = self.context
     book = Book()
     self.applyData(book, **data)
     name = INameChooser(shelf).chooseName(data.get('title'), book)
     shelf[name] = book
     self.redirect(self.url(shelf))
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
Пример #45
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]
Пример #46
0
def pasteAsAlias(context, cb_copy_data=None, request=None):
    """Paste the clipboard contents as an alias. Either pass the data, or a
    valid request with the __cp key.
    """

    cp = None

    if cb_copy_data is not None:
        cp = cb_copy_data
    elif request and request.has_key('__cp'):
        cp = request['__cp']
    else:
        cp = None

    if cp is None:
        raise ValueError("No clipboard data")

    try:
        cp = _cb_decode(cp)
    except:
        raise ValueError("Can't decode clipboard: %r" % cp)

    oblist = []
    app = context.getPhysicalRoot()

    failed = []
    success = []

    for mdata in cp[1]:
        m = OFS.Moniker.loadMoniker(mdata)
        try:
            ob = m.bind(app)
        except:
            raise ValueError("Objects not found in %s" % app)
        oblist.append(ob)

    intids = getUtility(IIntIds)

    for ob in oblist:
        relation = RelationValue(intids.getId(ob))
        alias = createContent('collective.alias', _aliasTarget=relation)

        notify(ObjectCreatedEvent(alias))

        name = INameChooser(context).chooseName(ob.getId(), alias)
        alias.id = name

        new_name = context._setObject(name, alias)

        # XXX: When we move to CMF 2.2, an event handler will take care of this
        new_object = context._getOb(new_name)
        new_object.notifyWorkflowCreated()

    return ' '.join(success) + ' '.join(failed)
Пример #47
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)
Пример #48
0
def get_id_from_filename(filename, context, unique=False):
    charset = getattr(context, 'getCharset', None) and context.getCharset()\
        or 'utf-8'
    name = filename.decode(charset).rsplit('.', 1)
    if len(name) != 2:
        raise MissingExtension('It seems like the file extension is missing.')
    normalizer = component.getUtility(IIDNormalizer)
    newid = '.'.join((normalizer.normalize(name[0]), name[1]))
    newid = newid.replace('_', '-').replace(' ', '-').lower()
    if unique:
        newid = INameChooser(context).chooseName(newid, context)
    return newid
Пример #49
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
Пример #50
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)
Пример #51
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()
Пример #53
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)
Пример #54
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
Пример #55
0
    def add(self, obj):
        container = self.context

        #check container constraints
        ttool = self._getTool('portal_types')
        container_ti = ttool.getTypeInfo(container)
        portal_type = obj.getPortalTypeName()
        if container_ti is not None and \
                not container_ti.allowType(portal_type):
            raise ValueError('Disallowed subobject type: %s' % portal_type)

        name = INameChooser(container).chooseName(obj.getId(), obj)
        obj.id = name
        container._setObject(name, obj)
        obj = container._getOb(name)

        obj_type = translate(obj.Type(), self.context)
        self.status = _(u'${obj_type} added.', mapping={'obj_type': obj_type})
        self._finished_add = True
        self._added_obj = obj
        return obj
Пример #56
0
    def __call__(self):
        """ Rename the current classlist """

        new_title = self.request.form['rename.form.newtitle']

        # name/title must exist
        if new_title == '':
            msg = _("Name is required")
            IStatusMessage(self.request).addStatusMessage(msg, "error")
            return self.request.RESPONSE.redirect( \
                                            "%s" % self.context.absolute_url())

        classlist = self.context
        old_title = classlist.Title()

        # name/title must be unique
        if old_title.lower() != new_title.lower():
            parent = classlist.aq_inner.aq_parent
            for alist in parent.objectValues():
                if alist != self and alist.Title() == new_title:
                    msg = _("Name is not unique")
                    IStatusMessage(self.request).addStatusMessage(msg, "error")
                    return self.request.RESPONSE.redirect( \
                                             "%s" % self.context.absolute_url())

        # Create/Modify
        if old_title.lower() != new_title.lower():
            classlists = classlist.aq_parent
            classlist.edit(title=new_title)
            name = INameChooser(classlists).chooseName(None, classlist)
            classlists.manage_renameObject(classlist.id, name)
            msg = _("Classlist was modified")
            IStatusMessage(self.request).addStatusMessage(msg, "info")
            return self.request.RESPONSE.redirect( \
                   "%s" % self.context.absolute_url())

        msg = _("New name identical to old name")
        IStatusMessage(self.request).addStatusMessage(msg, "error")
        return self.request.RESPONSE.redirect( \
                   "%s" % self.context.absolute_url())
Пример #57
0
    def add(self, object):

        fti = getUtility(IDexterityFTI, name=self.portal_type)
        container = aq_inner(self.context)
        container = aq_inner(container)

        container_fti = container.getTypeInfo()

        if not fti.isConstructionAllowed(container):
            raise Unauthorized("Cannot create %s" % self.portal_type)

        if container_fti is not None and not container_fti.allowType(
                self.portal_type):
            raise ValueError("Disallowed subobject type: %s" %
                             self.portal_type)

        target = aq_inner(object._target)
        name = None
        if target is not None:
            name = target.getId()

        name = INameChooser(container).chooseName(name, object)
        object.id = name

        new_name = container._setObject(name, object)

        # XXX: When we move to CMF 2.2, an event handler will take care of this
        new_object = container._getOb(new_name)
        new_object.notifyWorkflowCreated()

        immediate_view = fti.immediate_view or 'view'
        self.immediate_view = "%s/%s/%s" % (
            container.absolute_url(),
            new_object.id,
            immediate_view,
        )
Пример #58
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()
Пример #59
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
Пример #60
0
 def add(self, quotation):
     container = zope.component.getUtility(IQuotationContainer,
                                           context=self.context)
     name = INameChooser(container).chooseName(quotation, None)
     self._obj = container[name] = quotation