def add_user(self, username, email, real_name, password, bio, status='', role='user'): username, real_name = username.strip(), real_name.strip() errors = [] if not re.match(r'^[A-Za-z0-9_]{4,16}$', username): errors.append(text('user.username_missing')) if not re.match(r'^[A-Za-z0-9_]{4,16}$', password): errors.append(text('user.password_invalid')) if not self.check_email(email): errors.append(text('user.email_missing')) if errors: return {'status': 'error', 'errors': errors} if status not in Account.STATUSES: status = 'inactive' if role not in Account.ROLES: role = 'user' if self.repo.find_by_username(username): errors.append(text('user.username_used')) if errors: return {'status': 'error', 'errors': errors} user = User(username, email, real_name, password, None, bio, status, role) user.uid = self.repo.create(user) return {'status': 'ok', 'msg': 'saved', 'user': user}
def post(self, post_id): post_id = int(post_id) _ = self.get_argument title = _p('title', default='') description = _p('description') category = int(_p('category', default=1)) status = _p('status', default='draft') comments = int(_p('comments', default=0)) html = _p('html') css = _p('custom_css', default='') js = _p('custom_js', default='') slug = _p('slug') title = title.strip() slug = slug.strip() or title validator = Validator() (validator.check(title, 'min', text('post.title_missing'), 1) .check(slug, 'min', text('post.title_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') self.redirect(self.reverse_url('post_edit', post_id)) post = post_service.update_post( title, slug, description, html, css, js, category, status, comments, post_id) extend_service.prcoess_field(self, post, 'post') self.flash(text('post.updated'), 'success') self.redirect(self.reverse_url('post_edit', post_id))
def post(self): _ = self.get_argument title = _('title', default='') description = _('description') category = int(_('category', default=1)) status = _('status', default='draft') comments = int(_('comments', default=0)) html = _('html') css = _('custom_css', default='') js = _('custom_js', default='') slug = _('slug') title = title.strip() slug = slug.strip() or title validator = Validator() (validator.check(title, 'min', text('post.title_missing'), 1) .check(slug, 'min', text('post.title_missing'), 1) ) if validator.errors: self.flash(validator.errors, 'error') self.render('admin/post/add.html') author = self.account post = post_service.add_post( title, slug, description, html, css, js, category, status, comments, author) extend_service.prcoess_field(self, post, 'post') self.redirect(self.reverse_url('post_page'))
def post_comment(self, slug): post = self.post_service.get_by_slug(slug) if not post: return self.theme_render('404.html', page_title='Not Found') if post and not post.allow_comment: return self.redirect(self.reverse_url('site_post', slug)) p = self.get_argument name = p('name', default='') email = p('email', default='') content = p('content', default='') name, content, email = name.strip(), content.strip(), email.strip() validator = Validator() (validator.check(email, 'email', text('comment.email_missing')).check( content, 'min', text('comment.email_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') return redirect(self.reverse_url('site_post', slug)) status = site.get('auto_published_comments', False) and 'approved' or 'pending' self.comment_service.add_comment(name, email, content, status, post) self.redirect(self.reverse_url('site_post', slug))
def post(self): _ = self.get_argument title = _('title', default='') description = _('description') category = int(_('category', default=1)) status = _('status', default='draft') comments = int(_('comments', default=0)) html = _('html') css = _('custom_css', default='') js = _('custom_js', default='') slug = _('slug') title = title.strip() slug = slug.strip() or title validator = Validator() (validator.check(title, 'min', text('post.title_missing'), 1).check(slug, 'min', text('post.title_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') self.render('admin/post/add.html') author = self.account post = post_service.add_post(title, slug, description, html, css, js, category, status, comments, author) extend_service.prcoess_field(self, post, 'post') self.redirect(self.reverse_url('post_page'))
def post(self, post_id): post_id = int(post_id) _ = self.get_argument title = _p('title', default='') description = _p('description') category = int(_p('category', default=1)) status = _p('status', default='draft') comments = int(_p('comments', default=0)) html = _p('html') css = _p('custom_css', default='') js = _p('custom_js', default='') slug = _p('slug') title = title.strip() slug = slug.strip() or title validator = Validator() (validator.check(title, 'min', text('post.title_missing'), 1).check(slug, 'min', text('post.title_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') self.redirect(self.reverse_url('post_edit', post_id)) post = post_service.update_post(title, slug, description, html, css, js, category, status, comments, post_id) extend_service.prcoess_field(self, post, 'post') self.flash(text('post.updated'), 'success') self.redirect(self.reverse_url('post_edit', post_id))
def post_comment(self, slug): post = self.post_service.get_by_slug(slug) if not post: return self.theme_render('404.html', page_title='Not Found') if post and not post.allow_comment: return self.redirect(self.reverse_url('site_post', slug)) p = self.get_argument name = p('name', default='') email = p('email', default='') content = p('content', default='') name, content, email = name.strip(), content.strip(), email.strip() validator = Validator() (validator.check(email, 'email', text('comment.email_missing')) .check(content, 'min', text('comment.email_missing'), 1) ) if validator.errors: self.flash(validator.errors, 'error') return redirect(self.reverse_url('site_post', slug)) status = site.get( 'auto_published_comments', False) and 'approved' or 'pending' self.comment_service.add_comment(name, email, content, status, post) self.redirect(self.reverse_url('site_post', slug))
def update_user(self, me, uid, email, real_name, password, newpass1, newpass2, bio, status, role='user'): real_name, newpass1, newpass2, bio = real_name.strip(), newpass1.strip( ), newpass2.strip(), bio.strip() errors = [] if not self.check_email(email): errors.append(text('user.email_missing')) if errors: return {'status': 'error', 'errors': errors} user = self.repo.find(uid) if not user: return {'status': 'error', 'errors': 'User not Found'} if me.uid == user.uid: if re.match(r'[A-Za-z0-9@#$%^&+=]{4,16}', newpass1): if password and newpass1 and newpass1 == newpass2 and user.check( password): user.secure_pass = newpass1 elif newpass1: errors.append(text('users.password_missing')) if self.check_email(email): user_ = self.repo.find_by_email(email) if user_ and user_.uid != user.uid: errors.append(text('user.email_used')) else: user.email = email if errors: return {'status': 'error', 'errors': errors} account = Account.fromUser(user) if me.is_root() or me.uid == uid: if me.is_root() and not account.is_root(): if role in (Account.ADMIN, Account.USER, Account.EDITOR): user.role = role if user.status != status and status in Account.STATUSES: user.status = status if user.real_name != real_name: user.real_name = real_name if user.bio != bio: user.bio = bio self.repo.save(user) return {'status': 'ok', 'msg': 'updated', 'user': user}
def get(self, comment_id): comment_id = int(comment_id) statuses = { 'approved': text('global.approved'), 'pending': text('global.pending'), 'spam': text('global.spam') } comment = comment_service.get(comment_id) self.render('admin/comment/edit.html', comment=comment, statuses=statuses)
def post(self, category_id): _ = self.get_argument category_id, title, slug, description = int(category_id), _('title'), _('slug'), _('description') validator = Validator() validator.check(title, 'min', text('category.title_missing'), 1) if validator.errors: self.flash(validator.errors, 'error') return self.redirect(self.reverse_url('category_edit', category_id)) category = category_service.update_category( category_id, title, slug, description) self.flash(text('category.updated'), 'success') self.redirect(self.reverse_url('category_edit', category.cid))
def post(self, page_id): page_id = int(page_id) _ = self.get_argument parent = _('parent') name = _('name') title = _('title') name = name or title slug = _('slug') content = _('content') status = _('status') show_in_menu = int(_('show_in_menu', default=0)) show_in_menu = 1 if show_in_menu else 0 redirect_ = _('redirect') validator = Validator() (validator.check(title, 'min', text('page.title_missing'), 3) #.check(redirect, 'url', text('page.redirect_missing')) ) if validator.errors: self.flash(validator.errors, 'error') self.redirect(self.reverse_url('page_edit', page_id)) page = page_service.update_page(parent, name, title, slug, content, status, redirect_, show_in_menu, page_id) extend_service.prcoess_field(self, page, 'page') self.redirect(self.reverse_url('page_edit', page_id))
def post(self, page_id): page_id = int(page_id) _ = self.get_argument parent = _('parent') name = _('name') title = _('title') name = name or title slug = _('slug') content = _('content') status = _('status') show_in_menu = int(_('show_in_menu', default=0)) show_in_menu = 1 if show_in_menu else 0 redirect_ = _('redirect') validator = Validator() (validator .check(title, 'min', text('page.title_missing'), 3) #.check(redirect, 'url', text('page.redirect_missing')) ) if validator.errors: self.flash(validator.errors, 'error') self.redirect(self.reverse_url('page_edit', page_id)) page = page_service.update_page( parent, name, title, slug, content, status, redirect_, show_in_menu, page_id) extend_service.prcoess_field(self, page, 'page') self.redirect(self.reverse_url('page_edit', page_id))
def post(self, category_id): _ = self.get_argument category_id, title, slug, description = int(category_id), _( 'title'), _('slug'), _('description') validator = Validator() validator.check(title, 'min', text('category.title_missing'), 1) if validator.errors: self.flash(validator.errors, 'error') return self.redirect(self.reverse_url('category_edit', category_id)) category = category_service.update_category(category_id, title, slug, description) self.flash(text('category.updated'), 'success') self.redirect(self.reverse_url('category_edit', category.cid))
def update_user(self, me, uid, email, real_name, password, newpass1, newpass2, bio, status, role='user'): real_name, newpass1, newpass2, bio = real_name.strip(), newpass1.strip(), newpass2.strip(), bio.strip() errors = [] if not self.check_email(email): errors.append(text('user.email_missing')) if errors: return {'status': 'error', 'errors': errors} user = self.repo.find(uid) if not user: return {'status': 'error', 'errors': 'User not Found'} if me.uid == user.uid: if re.match(r'[A-Za-z0-9@#$%^&+=]{4,16}', newpass1): if password and newpass1 and newpass1 == newpass2 and user.check(password): user.secure_pass = newpass1 elif newpass1: errors.append(text('users.password_missing')) if self.check_email(email): user_ = self.repo.find_by_email(email) if user_ and user_.uid != user.uid: errors.append(text('user.email_used')) else: user.email = email if errors: return {'status': 'error', 'errors': errors} account = Account.fromUser(user) if me.is_root() or me.uid == uid: if me.is_root() and not account.is_root(): if role in (Account.ADMIN, Account.USER, Account.EDITOR): user.role = role if user.status != status and status in Account.STATUSES: user.status = status if user.real_name != real_name: user.real_name = real_name if user.bio != bio: user.bio = bio self.repo.save(user) return {'status': 'ok', 'msg': 'updated', 'user': user}
def post(self, category_id): category_id = int(category_id) if category_id == 1: self.flash('The Uncategory cann\'t delete', 'error') return self.redirect(self.reverse_url('category_page')) category_service.delete(category_id) self.flash(text('category.deleted'), 'success') self.redirect(self.reverse_url('category_page'))
def post(self): _ = self.get_argument parent = _('parent') name = _('name') title = _('title') name = name or title slug = _('slug') content = _('content') status = _('status') pid = int(_('pid')) show_in_menu = int(_('show_in_menu')) show_in_menu = 1 if show_in_menu else 0 redirect_ = _('redirect') validator = Validator() validator.add('duplicate', lambda key: page_service.is_exist_slug(key) == False) (validator.check(title, 'min', text('page.title_missing'), 3).check(slug, 'min', text('page.slug_missing'), 3).check(slug, 'duplicate', text('page.slug_duplicate')).check( slug, 'regex', text('page.slug_invalid'), r'^[0-9_A-Za-z-]+$') #.check(redirect, 'url', text('page.redirect_missing')) ) if validator.errors: self.flash(validator.errors, 'error') pages = Backend('Page').dropdown(show_empty_option=True) fields = extend_service.get_fields_by_type('page') self.render('admin/page/add.html', statuses=PAGE_STATUSES, pages=pages, fields=fields) page = page_service.add_page(parent, name, title, slug, content, status, redirect_, show_in_menu) extend_service.prcoess_field(self, page, 'page') self.redirect(self.reverse_url('page_page'))
def post(self): _ = self.get_argument username, password = _('username'), _('password') result = user_service.auth(username, password) if result['status'] == 200: sessionMgr = SessionManager(self) sessionMgr.loadByUser(result['user']) return self.redirect(self.reverse_url('post_page')) self.flash(text('user.login_error'), 'error') return self.redirect(self.reverse_url('login'))
def post(self): _ = self.get_argument title, slug, description = _('title'), _('slug'), _('description') validator = Validator() validator.check(title, 'min', text('category.title_missing'), 1) if validator.errors: self.flash(validator.errors, 'error') return self.render('admin/category/add.html') category_service.add_category(title, slug, description) self.redirect(self.reverse_url('category_page'))
def post(self): _ = self.get_argument parent = _('parent') name = _('name') title = _('title') name = name or title slug = _('slug') content = _('content') status = _('status') pid = int(_('pid')) show_in_menu = int(_('show_in_menu')) show_in_menu = 1 if show_in_menu else 0 redirect_ = _('redirect') validator = Validator() validator.add( 'duplicate', lambda key: page_service.is_exist_slug(key) == False) (validator .check(title, 'min', text('page.title_missing'), 3) .check(slug, 'min', text('page.slug_missing'), 3) .check(slug, 'duplicate', text('page.slug_duplicate')) .check(slug, 'regex', text('page.slug_invalid'), r'^[0-9_A-Za-z-]+$') #.check(redirect, 'url', text('page.redirect_missing')) ) if validator.errors: self.flash(validator.errors, 'error') pages = Backend('Page').dropdown(show_empty_option=True) fields = extend_service.get_fields_by_type('page') self.render('admin/page/add.html', statuses=PAGE_STATUSES, pages=pages, fields=fields) page = page_service.add_page( parent, name, title, slug, content, status, redirect_, show_in_menu) extend_service.prcoess_field(self, page, 'page') self.redirect(self.reverse_url('page_page'))
def post(self): _ = self.get_argument _type = _('type') field = _('field') key = _('key') label = _('label') key = key or label validator = Validator() validator.add( 'valid_key', lambda key: extend_service.count(key, _type) == 0) (validator .check(key, 'min', text('extend.key_missing'), 1) .check(key, 'valid_key', text('extend.key_exists')) .check(label, 'min', text('extend.label_missing'), 1) ) if validator.errors: self.flash(validator.errors, 'error') self.render('admin/extend/field/add.html') if field == 'image': attributes = { 'type': reqp.get('attributes[type]'), 'size': { 'height': reqp.get('attributes[size][height]', type=int), 'width': reqp.get('attributes[size][width]', type=int), } } elif field == 'file': attributes = { 'type': reqp.get('attributes[type]'), } else: attributes = {} extend_service.create_extend(_type, key, label, field, attributes) return self.redirect(self.reverse_url('field_page'))
def post(self, comment_id): comment_id = int(comment_id) _ = self.get_argument name = _('name') email = _('email') content = _('content') status = _('status') name, content = name.strip(), content.strip() validator = Validator() (validator.check(name, 'min', text('comment.name_missing'), 1) .check(content, 'min', text('comment.content_missing'), 1) ) if validator.errors: self.flash(validator.errors, 'error') self.redirect(self.reverse_url('comment_edit', comment_id)) comment = comment_service.update_comment( comment_id, name, email, content, status) self.flash(text('comment.updated'), 'success') self.redirect(self.reverse_url('comment_edit', comment.cid))
def post(self, extend_id): extend_id= int(extend_id) reqp = request.form _ = self.get_argument _type = _('type') field = _('field') key = _('key') label = _('label') key = key or label validator = Validator() (validator .check(key, 'min', text('extend.key_missing'), 1) .check(label, 'min', text('extend.label_missing'), 1) ) if validator.errors: self.flash(validator.errors, 'error') return self.redirect(self.reverse_url('field_edit', extend_id)) if field == 'image': attributes = { 'type': reqp.get('attributes[type]'), 'size': { 'height': reqp.get('attributes[size][height]', type=int), 'width': reqp.get('attributes[size][width]', type=int), } } elif field == 'file': attributes = { 'type': reqp.get('attributes[type]'), } else: attributes = {} extend_service.update_extend( _type, key, label, field, attributes, extend_id) return self.redirect(self.reverse_url('field_edit', extend_id))
def post(self): _ = self.get_argument _type = _('type') field = _('field') key = _('key') label = _('label') key = key or label validator = Validator() validator.add('valid_key', lambda key: extend_service.count(key, _type) == 0) (validator.check(key, 'min', text('extend.key_missing'), 1).check( key, 'valid_key', text('extend.key_exists')).check(label, 'min', text('extend.label_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') self.render('admin/extend/field/add.html') if field == 'image': attributes = { 'type': reqp.get('attributes[type]'), 'size': { 'height': reqp.get('attributes[size][height]', type=int), 'width': reqp.get('attributes[size][width]', type=int), } } elif field == 'file': attributes = { 'type': reqp.get('attributes[type]'), } else: attributes = {} extend_service.create_extend(_type, key, label, field, attributes) return self.redirect(self.reverse_url('field_page'))
def post(self, extend_id): extend_id = int(extend_id) reqp = request.form _ = self.get_argument _type = _('type') field = _('field') key = _('key') label = _('label') key = key or label validator = Validator() (validator.check(key, 'min', text('extend.key_missing'), 1).check(label, 'min', text('extend.label_missing'), 1)) if validator.errors: self.flash(validator.errors, 'error') return self.redirect(self.reverse_url('field_edit', extend_id)) if field == 'image': attributes = { 'type': reqp.get('attributes[type]'), 'size': { 'height': reqp.get('attributes[size][height]', type=int), 'width': reqp.get('attributes[size][width]', type=int), } } elif field == 'file': attributes = { 'type': reqp.get('attributes[type]'), } else: attributes = {} extend_service.update_extend(_type, key, label, field, attributes, extend_id) return self.redirect(self.reverse_url('field_edit', extend_id))
def get(self, post_id): post_id = int(post_id) post_service.delete(post_id) self.flash(text('post.deleted'), 'success') self.redirect(self.reverse_url('post_page'))
from .model import Post from zephyr.lib.validator import Validator from zephyr.helper import site from zephyr.session import security, ADMIN, EDITOR from zephyr.breeze import Thing, Backend from zephyr.lang import text post_service = Thing('Post') category_service = Thing('Category') extend_service = Thing('Extend') STATUSES = { 'published': text('global.published'), 'draft': text('global.draft'), 'archived': text('global.archived'), } class PostPage: @security(EDITOR) def get(self, page=1, category=None): page = int(page) if category is not None: category = int(category) pagination = post_service.page(page, site.posts_per_page(), category) self.render('admin//post/index.html', categories=category_service.dropdown(), posts=pagination,
def get(uid): user_service.delete(self.account, uid) self.flash(text('user.deleted'), 'success') return self.redirect(self.reverse_url('user_page'))
menu.connect('/page/add', AddPage, name='page_add') menu.connect(r('/page/<page_id:int>/edit'), EditPage, name='page_edit') menu.connect(r('/page/<page_id:int>/delete'), DeletePage, name='page_delete') from .model import Page from zephyr.lib.validator import Validator from zephyr.helper import site from zephyr.session import security, ADMIN, EDITOR from zephyr.breeze import Thing, Backend from zephyr.lang import text PAGE_STATUSES = { 'published': text('global.published'), 'draft': text('global.draft'), 'archived': text('global.archived'), } page_service, extend_service= Thing('Page'), Thing('Extend') class PagePage: @security(EDITOR) def get(self, page=1, status='all'): pagination = page_service.page(status, page, site.posts_per_page()) self.render('admin/page/index.html',
def get(self, comment_id): comment_id = int(comment_id) comment_service.delete(comment_id) self.flash(text('comment.deleted'), 'success') self.redirect(self.reverse_url('comment_page'))
menu.connect(r('/comment/<comment_id:int>/edit'), EditComment, name="comment_edit") menu.connect(r('/comment/<comment_id:int>/delete'), DeleteComment, name="comment_delete") from zephyr.session import security, ADMIN, EDITOR from zephyr.breeze import Thing from zephyr.lang import text from zephyr.lib.validator import Validator from zephyr.helper import site comment_service = Thing('Comment') COMMENT_STATUSES = [ {'url': 'all', 'lang': text('global.all'), 'class': 'all'}, {'url': 'pending', 'lang': text('global.pending'), 'class': 'pending'}, {'url': 'approved', 'lang': text('global.approved'), 'class': 'approved'}, {'url': 'spam', 'lang': text('global.spam'), 'class': 'spam'} ] class CommentPage: @security(EDITOR) def get(self, page=1, status='all'): page = int(page) pagination = comment_service.page(status, page, site.posts_per_page()) self.render('admin//comment/index.html', statuses=COMMENT_STATUSES, status=status,