def getAllByIdent(self, ident, after_id=None): prefix = db().getPrefix() d = { 'bp': "%splugin_blog_post" % prefix, 'bc': "%splugin_blog_comment" % prefix, 'blog_id': BlogModel.getBlogByIdent(ident).id } where = "%(bp)s.blog_id = %(blog_id)s\ AND %(bp)s.id = %(bc)s.post_id" % d if after_id: where = '%s AND %s.%s' % (where, d['bc'], 'id < %s' % after_id) print where order_by = "%(bc)s.posted" % d cols = "%(bc)s.id, %(bc)s.content, %(bc)s.author" % d return db().select(['plugin_blog_post', 'plugin_blog_comment'], cols=cols, where=where, order_by=order_by, obj_deco=CommentDeco, limit=15, reversed=True)
def update(self, id, title, content, labels): ident = self.getPostById(id).getIdent() db().update('plugin_blog_post', id=id, title=title, content=content, labels=labels) updateBlogXML(ident)
def delete(self, id): menu = self.getMenuById(id) if menu.name == "Standard": return #Delete all the items in the menu db().delete("menu_item", menu_id=id) db().delete("menu", id=id)
def up(self): self.addColumn('plugin_blog_label', IntCol('blog_id', length=11, not_null=True)) labels = db().select('plugin_blog_label') for label in labels: blog = BlogModel.getBlogByIdent(label.ident) db().update('plugin_blog_label', id=label.id, blog_id=blog.id) self.removeColumn('plugin_blog_label', 'ident')
def deleteFileById(self, id): file = self.getFileById(id) ident = db().select("file", id=id, cols=["ident"], as_one=True).ident try: os.remove("%s/%s" % (self._getFullPath(), file.filename)) except: pass db().delete("file", id=id) return ident
def getMenu(self): menu = Menus.getMenuById(self.menu_id) if menu != None: return menu else: #The menu is gone, replace it with the standard menu menu = Menus.getStandardMenu() db().update("page", id=self.id, menu_id=menu.id) return menu
def deletePageById(self, id): #If the page has a menu item, then delete it too db().delete("menu_item", page_id=id) #Delete the children too page = self.getPageById(id) if page.getChildren() != None: for child in page.getChildren(): self.deletePageById(child.id) db().delete("page", id=id)
def initDatabaseIfNeeded(): try: mi_control.upgradeToLatest() except: debug_info.print_info() raise if Model.Menus.getMenuByName("Standard") == None: menu_obj = Model.Menus.add("Standard", primary=True) item = Model.MenuItems.add(getConfig().START_PAGE, 1, menu_obj.id) amiweb.db().update("page", id=item.getPage().id, hidden=0)
def up(self): self.addColumn('plugin_blog', IntCol('host_page', length=11, not_null=True)) blogs = db().select('plugin_blog') for b in blogs: posts = db().select('plugin_blog_post', blog_id=b.id) if len(posts) > 0: host_page = posts[0].host_page db().update('plugin_blog', id=b.id, host_page=host_page) self.removeColumn('plugin_blog_post', 'host_page')
def getPage(self, name, parent_id): page = db().select("page", name=name, parent_id=parent_id, as_one=True, obj_deco=PageDeco) if page == None: page = db().select("page", title=name, parent_id=parent_id, as_one=True, obj_deco=PageDeco) return page
def getAllPagesWhereFileIsUsed(self, id): #ERROR: image - should also be file!! file_obj = self.getFileById(id) pages = db().select("page", "content LIKE '%[image=" + file_obj.ident + "]%'", obj_deco=PageDeco) return pages
def getAllLogs(self, page_id): cols = ['id', 'edited_by', 'revision', 'time_of_edit'] return db().select('pagelog', cols=cols, page_id=page_id, order_by="revision", reversed=True)
def getTopItem(self): return db().select("menu_item", menu_id=self.id, order_by="m_order", obj_deco=MenuItemDeco, limit=1, as_one=True)
def getLatestLog(self, page_id): return db().select('pagelog', page_id=page_id, limit=1, order_by='revision', reversed=True, as_one=True)
def getPostsByYear(self, year): return db().select('plugin_blog_post', blog_id=self.id, where='YEAR(posted) = %i' % year, obj_deco=PostDeco, order_by='posted', reversed=True)
def add(self, author, email, website, content, post_id): posted = "%s" % datetime.datetime.now() return db().insert('plugin_blog_comment', author=author, email=email, website=website, content=content, posted=posted, post_id=post_id)
def addExternal(self, alias, url, order, menu_id): menu_item_id = db().insert('menu_item', name=alias, url=url, m_order=order, menu_id=menu_id, page_id=None, type="external") return self.getItemById(menu_item_id)
def createSnapshot(self, name, order): m_tables = amiweb.db().query("SHOW TABLES;") order = int(order) s = backup.SnapShot() s.createZip(order, name) json_repr = '{"order": %s, "content": "%s - %s", "filename": "%s.zip", "insert_in_top": 1}' %\ (order, name, backup.TODAY, s._generateSnapshotFilename(order, name)) return json_repr
def add(self, username, password, type): if username == "admin" or username == "Everyone": return None else: new_user = db().insert("user", username=username, password=password, user_type=type) return self.getUserById(new_user)
def getPageById(self, id): if id == None or id == "": return None try: id = int(id) except: return None return db().select("page", id=id, as_one=True, obj_deco=PageDeco)
def up(self): self.renameTable('plugin_blog', 'plugin_blog_post') self.createTable("plugin_blog", IntCol("id", length=11, auto_increment=True), StringCol("ident", length=150, not_null=True), PrimaryKey("id"), utf8=True, ignore_if_created=True) self.addColumn('plugin_blog_post', IntCol('blog_id', length=11)) #Rewrite all the current posts posts = db().select('plugin_blog_post') for post in posts: blog = BlogModel.getBlogByIdent(post.ident) db().update('plugin_blog_post', id=post.id, blog_id=blog.id) self.removeColumn('plugin_blog_post', 'ident')
def getLabelsFromList(self, list): if list: ids = ['id=%s' % i for i in list.split(",")[:-1]] labels = db().select('plugin_blog_label', " or ".join(ids), order_by='name', obj_deco=LabelDeco) return labels else: return []
def getFileByIdent(self, ident, ftype, parent_id): q = partial(db().select, "file", ident=ident, type=ftype, as_one=True, obj_deco=FileDeco) if parent_id: return q(parent_id=parent_id) return q()
def getCurrentUser(self): session = amiweb.session() if session.has_key('username'): user = amiweb.db().query( "select usr.*,grp.name as groupname from c4_user usr left join c4_group grp on grp.id=usr.group_id where usr.username='******'" % session['username'], as_one=True) return user else: return None
def add(self, ident, title, content, labels, posted=None): user = amiweb.session().get('username', 'none') if not posted: posted = datetime.datetime.now() blog = self.getBlogByIdent(ident) if not blog: blog = self.addBlog(ident) db().insert('plugin_blog_post', blog_id=blog.id, title=title, content=content, author=user, posted=str(posted), labels=labels) updateBlogXML(ident)
def add(self, title, order, menu_id): page = Pages.insertPage(title, None, menu_id) if page == None: return None menu_item_id = db().insert("menu_item", name=title, m_order=order, menu_id=menu_id, page_id=page.id, type="page") return self.getItemById(menu_item_id)
def getPosts(self): like = 'labels LIKE "%s"' like_s = like % (str(self.id) + ",%") like_in = like % ("%," + str(self.id) + ",%") where = ['%s OR %s' % (like_s, like_in)] posts = db().select('plugin_blog_post', where="".join(where), order_by='posted', reversed=True, obj_deco=PostDeco) return posts
def getAllPosts(self, ident, limit): blog = self.getBlogByIdent(ident) if blog: return db().select("plugin_blog_post", blog_id=blog.id, order_by='posted', reversed=True, limit=limit, obj_deco=PostDeco) else: return []
def insertPage(self, title, content, menu_id): #Check if the page is already found in that menu menu = Menus.getMenuById(menu_id) if menu.isPageInMenu(title): return None p = db().insert("page", name=title, title=title, content=content, menu_id=menu_id, hidden=1) return self.getPageById(p)
def insertPageFromWiki(self, parent_id, title): parent = self.getPageById(parent_id) p = db().insert("page", name=title, title=title, content="", menu_id=parent.menu_id, parent_id=parent_id, hidden=1, premission_type=parent.premission_type, premission_value=parent.premission_value) return self.getPageById(p)