Ejemplo n.º 1
0
    def addAccount(self, id, title='', owner=None):
        """
        Add an account within a domain
        The id is usually the (P)ID of a resource
        Pass in the userid of the account owner
        If not provided the caller will own the account
        """

        if id in self.context.objectIds():
            self.request.response.setStatus(500)
            return 'Folder "{}" already exists'.format(id)

        if owner:
            user = self.context.acl_users.getUser(owner)
            if not user:
                self.request.response.setStatus(500)
                return 'No account for "{}" found - unable to set owner role'.format(owner)


        manage_addBTreeFolder(self.context, id=id, title=title)
        account = self.context[id]
        alsoProvides(account, IAccount)
        account.manage_addProperty('grace_period_days', 7, 'int')
        if owner is not None:
            account.manage_addLocalRoles(owner, ['Owner'])
        self.request.response.setStatus(201)
        return 'Account {} ({}) created'.format(id, title)
Ejemplo n.º 2
0
    def _getChatRoomsFolder(self):
        """ The 'ChatRooms' folder is a BTreeFolder that contains IChatRoom objects.
        """
        if not self.hasObject('chatrooms'):
            log.warn("The chatservice's 'ChatRooms' folder did not exist, "
                    "and has been automatically recreated.")
            manage_addBTreeFolder(self, 'chatrooms', 'ChatRooms')

        return self._getOb('chatrooms')
Ejemplo n.º 3
0
def _populate(app):
    try: app._delObject('chatservice')
    except AttributeError: pass

    app._setObject('chatservice', ChatService('chatservice'))
    cs = app._getOb('chatservice')
    from Products.BTreeFolder2.BTreeFolder2 import manage_addBTreeFolder
    manage_addBTreeFolder(cs, 'users', 'Users')
    manage_addBTreeFolder(cs, 'conversations', 'Conversations')
    transaction.commit()
Ejemplo n.º 4
0
    def _getConversationsFolder(self):
        """ The 'Conversations' folder is a BTreeFolder that contains
            IConversation objects.

            See babble.server.interfaces.py:IConversation
        """
        if not self.hasObject('conversations'):
            log.warn("The chatservice's 'Conversations' folder did not exist, "
                    "and has been automatically recreated.")
            manage_addBTreeFolder(self, 'conversations', 'Conversations')

        return self._getOb('conversations')
Ejemplo n.º 5
0
def migrate_to_175(db):
    """ documents stores in BTreeFolder
    """
    manage_addBTreeFolder(db, id='plomino_documents')
    directlyProvides(db.plomino_documents, IHideFromBreadcrumbs)
    docids = [
        id for id in db.objectIds()
        if getattr(db, id).portal_type == "PlominoDocument"
    ]
    cookie = db.manage_cutObjects(ids=docids)
    db.plomino_documents.manage_pasteObjects(cookie)
    msg = "Migration to 1.7.5: Documents moved in BTreeFolder"
    db.plomino_version = "1.7.5"
    return msg
Ejemplo n.º 6
0
def migrate_to_175(db):
    """ documents stores in BTreeFolder
    """
    # plomino_documents might exist if the migration runs after an XML import
    if 'plomino_documents' not in db.objectIds():
        manage_addBTreeFolder(db, id='plomino_documents')
    directlyProvides(db.plomino_documents, IHideFromBreadcrumbs)
    docids = [id for id in db.objectIds()
            if getattr(db, id).portal_type == "PlominoDocument"]
    cookie = db.manage_cutObjects(ids=docids)
    db.plomino_documents.manage_pasteObjects(cookie)
    msg = "Migration to 1.7.5: Documents moved in BTreeFolder"
    db.plomino_version = "1.7.5"
    return msg
Ejemplo n.º 7
0
def run(self):
    """
    * Move existing messages from messageboxes in IUser objects, messageboxes
      in IConversation objects.
    * Rename all old messages' ids to remove the previx "message."
    * Change all old messages' time attr to python's datetime.
    """
    services = []
    for o in self.objectValues():
        if IChatService.providedBy(o):
            services.append(o)

    for service in services:

        if not hasattr(service, 'conversations'):
            manage_addBTreeFolder(service, 'conversations', 'Conversations')
        convs = service._getOb('conversations')

        for user in getattr(service, 'users').objectValues():
            for oldmbox in user.objectValues():

                conv = service._getConversation(user.id, oldmbox.id)
                newmbox = Conversation._getMessageBox(conv, oldmbox.id)
                for message in oldmbox.objectValues():
                    if message.author != oldmbox.id:
                        # We now only store one author's messages per mbox. So
                        # we ignore the other messages. They will be deleted.
                        continue

                    if IDateTime.providedBy(message.time):
                        message.time = message.time.asdatetime().replace(tzinfo=utc)
                    elif type(message.time) == str:
                        message.time = dateutil.parser.parse(message.time)

                    newid = '%f' % time.mktime(message.time.timetuple())
                    message.time = message.time.isoformat()

                    newmsg= Message(message.text, message.author)
                    newmsg.time = message.time
                    newmsg.id = newid
                    try:
                        newmbox._setObject(newid, message)
                    except BadRequest:
                        continue

                transaction.commit()

    return "Succesfully migrated the messages"
Ejemplo n.º 8
0
    def __call__(self, add_input_name='chatservice', title='Chat Service', submit_add=''):
        if submit_add:
            self.request.set('add_input_name', add_input_name)
            obj = ChatService(add_input_name)
            obj.title = title
            self.context.add(obj)
            obj = self.context.aq_acquire(obj.id)

            aq_base(obj).manage_addUserFolder()
            manage_addBTreeFolder(aq_base(obj), 'conversations', 'Conversations')
            manage_addBTreeFolder(aq_base(obj), 'chatrooms', 'ChatRooms')

            obj.manage_permission(UseChatService,
                roles=('Authenticated',), acquire=1)
            self.request.response.redirect(self.context.nextURL())
            return ''

        return self.index()