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)
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')
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()
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')
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
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
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"
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()