示例#1
0
def page_add():
    if request.method == 'GET':
        pages = Backend('page').dropdown(show_empty_option=True)
        fields = extend_service.get_fields_by_type('page')
        return render_template('admin/page/add.html',
                               statuses=PAGE_STATUSES,
                               pages=pages,
                               fields=fields)

    f = request.form
    parent = f.get('parent')
    name = f.get('name')
    title = f.get('title')
    name = name or title

    slug = f.get('slug')
    content = f.get('content')
    status = f.get('status')
    pid = f.get('pid', type=int)
    show_in_menu = f.get('show_in_menu', type=int)
    show_in_menu = 1 if show_in_menu else 0

    redirect_ = f.get('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:
        flash(validator.errors, 'error')
        pages = Backend('page').dropdown(show_empty_option=True)
        fields = extend_service.get_fields_by_type('page')
        return render_template('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(page, 'page')
    return redirect(url_for('admin.page_page'))
示例#2
0
    def process(self):
        type = self.type
        item_id = self.node.pid
        data = None
        for extend in Backend('extend').find_by_type(type):
            process = getattr(self, 'process_' + extend.field, None)
            # if process:

            data = process(extend)

            if data:
                meta = Backend('meta').find(type, item_id, extend.eid)
                if meta:
                    meta.data = data
                    Backend('meta').save(meta)
                else:
                    meta = Meta(item_id, type, extend.eid, data)
                    Backend('meta').create(meta)
示例#3
0
    def url(self):
        segments = [self.slug]
        parent = self.parent
        Store = Backend('page')
        while parent:
            page = Store.find(parent)
            if page:
                segments.insert(0, page.slug)
                parent = page.parent
            else:
                break

        return '/' + '/'.join(segments)
示例#4
0
文件: security.py 项目: zgwdg/white
def init_user():
    """Load user if the auth session validates."""
    try:
        user = _guest
        if 'auth' in session:
            uid = session['auth']
            user = Backend('user').find(uid)
        if user is None:
            session.pop('auth', None)
            user = _guest
    except:
        user = _guest
    g.user = user
示例#5
0
def page_edit(page_id):
    if request.method == 'GET':
        pages = Backend('page').dropdown(show_empty_option=True)
        page = Backend('page').find(page_id)
        fields = extend_service.get_fields_by_type('page', page_id)
        return render_template('admin/page/edit.html',
                               statuses=PAGE_STATUSES,
                               pages=pages,
                               page=page,
                               fields=fields)

    f = request.form
    parent = f.get('parent')
    name = f.get('name')
    title = f.get('title')
    name = name or title

    slug = f.get('slug')
    content = f.get('content')
    status = f.get('status')
    show_in_menu = f.get('show_in_menu', type=int, default=0)
    show_in_menu = 1 if show_in_menu else 0

    redirect_ = f.get('redirect')

    validator = Validator()
    (validator.check(title, 'min', text('page.title_missing'), 3)
     #.check(redirect, 'url', text('page.redirect_missing'))
     )

    if validator.errors:
        flash(validator.errors, 'error')
        return redirect(url_for('admin.page_edit', page_id=page_id))

    page = page_service.update_page(parent, name, title, slug, content, status,
                                    redirect_, show_in_menu, page_id)
    extend_service.prcoess_field(page, 'page')
    return redirect(url_for('admin.page_edit', page_id=page_id))
示例#6
0
文件: comment.py 项目: zgwdg/white
class CommentService(object):

    comment_repo = Backend('comment')

    get = lambda self, cid: self.comment_repo.find(cid)

    def get_by_post_id(self, post_id):
        return self.comment_repo.find_by_post_id(post_id)

    def page(self, status, page=1, perpage=10):
        total = self.comment_repo.count()
        pages = self.comment_repo.paginate(page, perpage, status)
        pagination = Paginator(pages, total, page, perpage, '/admin/comment')
        return pagination

    def add_comment(self, name, email, content, status, post):
        comment = Comment(post.pid, name, email, content, status)
        if self.is_spam(comment):
            comment.status = 'spam'
        cid = self.comment_repo.create(comment)
        comment.cid = cid
        return comment

    @classmethod
    def is_spam(self, comment):
        for word in site.comment_moderation_keys():
            if word.strip() and re.match(word, comment.content, re.I):
                return True

        domain = comment.email.split('@')[1]
        if self.comment_repo.spam_count(domain):
            return True
        return False

    def update_comment(self, comment_id, name, email, content, status):
        comment = self.get(comment_id)
        if not comment:
            return None
        comment.status = status
        comment.name = name
        comment.content = content
        comment.email = email
        self.comment_repo.save(comment)
        return comment

    def delete(self, comment_id):
        comment = self.comment_repo.find(comment_id)
        if not comment:
            return None
        return self.comment_repo.delete(comment.cid)
示例#7
0
 def category_count(self):
     return Backend('post').category_count(self.cid)
示例#8
0
文件: storage.py 项目: zgwdg/white
 def __init__(self):
     self.pair_repo = Backend('storage')
示例#9
0
文件: helper.py 项目: zgwdg/white
def menus():
    return Backend('page').menu(True)
示例#10
0
 def custom_field(self, key):
     extend = Backend('extend').field('post', key)
     return extend.value(self.pid, type='post')
示例#11
0
 def __init__(self):
     self.repo = Backend('user')
示例#12
0
 def __init__(self):
     self.extend_repo = Backend('extend')
     self.meta_repo = Backend('meta')
示例#13
0
文件: helper.py 项目: zgwdg/white
 def _config(self):
     return Backend('storage').find('system').json_value()
示例#14
0
文件: helper.py 项目: zgwdg/white
def cached_user(uid):
    return Backend('user').find(uid)
示例#15
0
 def value(self, node_id, type='post'):
     meta = Backend('meta').find(type, node_id, self.eid)
     meta = meta or Meta(node_id, type, self.eid)
     return Field(self, meta)
示例#16
0
文件: page.py 项目: zgwdg/white
 def __init__(self):
     self.page_repo = Backend('page')
示例#17
0
 def comments(self):
     return Backend('comment').find_by_post_id(self.pid)
示例#18
0
文件: category.py 项目: zgwdg/white
 def __init__(self):
     self.category_repo = Backend('category')
     self.post_repo = Backend('post')
示例#19
0
文件: post.py 项目: zgwdg/white
 def __init__(self, post_repo=None, category_repo=None):
     self.post_repo = post_repo or Backend('post')
     self.category_repo = category_repo or Backend('category')
示例#20
0
文件: helper.py 项目: zgwdg/white
def categories():
    return Backend('category').categories()