示例#1
0
    def delete(self, id):
        post = Post.get_by_id(id)

        if post is None:
            return render_view(url_for('PostsView:index'),
                               status=False,
                               redirect=True,
                               message=_('POST_NOT_FOUND'))

        if not post.can_edit():
            abort(401)

        try:
            title = post.title
            Post.delete(post.id)
            Feed.clear_feed_cache()
            ret = request.values.get('return')

            flash(_('POST_DELETE_SUCESS', title=title))

            if ret:
                return render_view(ret, redirect=True)
        except Exception as e:
            flash(_('ERROR_POST_DELETE_FAILED', error=e), 'error')

        return render_view(url_for('PostsView:index'),
                           redirect=True)
示例#2
0
    def transfer_post(self):

        form = TranferForm()

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                cat_from = Category.get_by_id(form.from_id.data)
                cat_to = Category.get_by_id(form.to_id.data)

                if not cat_from or not cat_to:
                    raise Exception(_('CATEGORY_TRANSFER_POSTS_CHECK_FAILED'))

                Category.transfer_posts(cat_from, cat_to)

                message = _('CATEGORY_TRANSFER_POSTS_SUCCESS',
                            from_name=cat_from.name,
                            to_name=cat_to.name)

                return render_view(url_for('CategoriesView:index'),
                                   message=message,
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/transfer.html', form=form)
示例#3
0
    def post(self):
        form = CategoryForm()

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                category = Category.create()

                if not form.slug.data:
                    form.slug.data = form.name.data

                form.slug.data = Category.urlify(form.slug.data)

                form.populate_obj(category)
                category.save()

                return render_view(url_for('CategoriesView:put',
                                           id=category.id),
                                   message=_('CATEGORY_CREATE_SUCESS'),
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/add.html', form=form)
示例#4
0
    def post(self):
        form = CategoryForm()

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                category = Category.create()

                if not form.slug.data:
                    form.slug.data = form.name.data

                form.slug.data = Category.urlify(form.slug.data)

                form.populate_obj(category)
                category.save()

                return render_view(url_for('CategoriesView:put', id=category.id),
                                   message=_('CATEGORY_CREATE_SUCESS'),
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/add.html', form=form)
示例#5
0
    def transfer_post(self):

        form = TranferForm()

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                cat_from = Category.get_by_id(form.from_id.data)
                cat_to = Category.get_by_id(form.to_id.data)

                if not cat_from or not cat_to:
                    raise Exception(_('CATEGORY_TRANSFER_POSTS_CHECK_FAILED'))

                Category.transfer_posts(cat_from, cat_to)

                message = _('CATEGORY_TRANSFER_POSTS_SUCCESS',
                            from_name=cat_from.name,
                            to_name=cat_to.name)

                return render_view(url_for('CategoriesView:index'),
                                   message=message,
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/transfer.html',
                           form=form)
示例#6
0
    def get(self, id):
        post = Post.get_by_id(id)

        if post is None or not post.can_edit():
            return render_view(url_for('PostsView:index'),
                               status=False,
                               redirect=True,
                               message=_('POST_NOT_FOUND'))

        return render_view('admin/posts/show.html',
                           post=post)
示例#7
0
def signup():
    if current_user.is_authenticated:
        return render_view(url_for('dashboard'),
                           redirect=True,
                           message=_('SESSIONS_MSG_ALREADY_SIGNED_IN'))

    redirect_to = session.pop('redirect_to', None)

    if request.values.get('ret'):
        redirect_to = request.values.get('ret')

    form = SignUpForm(ret=redirect_to)

    if form.is_submitted():
        try:
            if not form.validate():
                raise Exception(_('ERROR_INVALID_SUBMISSION'))

            if not verify_captcha():
                raise Exception(_('SESSIONS_ERROR_UNFINISHED_CHALLENGE_LBL'))

            # Create user from the form
            user = User.create()

            form.populate_obj(user)
            user.set_password(form.password.data)
            user.last_seen = datetime.datetime.utcnow()
            user.last_login = datetime.datetime.utcnow()

            # store the user
            user.save()

            # Login User
            login_user(user)

            redirect_to = form.back_link.data

            if not redirect_to:
                redirect_to = url_for('dashboard')

            # send registration email
            send_email('registration', user)

            return render_view(redirect_to,
                               redirect=True,
                               message=_('SESSIONS_MSG_SIGNUP_COMPLETED'))
        except Exception as e:
            flash(e.message, 'error')

    return render_view('admin/sessions/signup.html', form=form)
示例#8
0
    def post(self):
        form = PostForm()

        if form.validate_on_submit():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                remain = request.values.get('remain', False, bool)
                post = Post.create()
                form.populate_obj(post)
                post.user = current_user

                f = request.files.get('file')

                if f:
                    picture = Picture.create()
                    picture.save_file(f, current_user)
                    post.cover_picture_id = picture.id if picture else 0

                # init the score
                post.update_score(page_view=1)

                post.editor_version = 1
                post.save()

                Feed.clear_feed_cache()

                if post.is_draft:
                    message = _('POST_DRAFT_SAVE_SUCESS')
                else:
                    message = _('POST_PUBLIC_SAVE_SUCESS')

                if remain:
                    url = url_for('PostsView:put', id=post.id, remain='y')
                else:
                    url = url_for('PostsView:get', id=post.id)

                return render_view(url, redirect=True, message=message)

            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/posts/edit.html',
                           form=form)
示例#9
0
def login():
    if current_user.is_authenticated:
        return render_view(url_for('dashboard'),
                           redirect=True,
                           message=_('SESSIONS_MSG_ALREADY_SIGNED_IN'))

    redirect_to = session.pop('redirect_to', None)

    if request.values.get('ret'):
        redirect_to = request.values.get('ret')

    form = LoginForm(ret=redirect_to)

    if form.is_submitted():
        try:
            user = User.find_by_email(form.email.data)

            if not user or not user.check_password(form.password.data):
                raise Exception(_('SESSIONS_ERROR_LOGIN'))

            # Update the User's info
            user.last_login = user.last_seen
            user.last_seen = datetime.datetime.utcnow()
            user.save()

            redirect_to = form.back_link.data

            if not redirect_to:
                redirect_to = url_for('dashboard')

            remember = form.remember_me.data

            login_user(user, remember=remember)

            return render_view(redirect_to,
                               redirect=True,
                               message=_('SESSIONS_MSG_LOGIN_SUCESS'))

        except Exception as e:
            flash(e.message, 'error')

    return render_view('admin/sessions/signin.html', form=form)
示例#10
0
def reset_password():
    if current_user.is_authenticated:
        return render_view(url_for('latest'),
                           redirect=True,
                           message=_('SESSIONS_MSG_ALREADY_SIGNED_IN'))

    code = request.values.get('code', None)
    user = User.find_by_reset_password_code(code)

    if not user:
        return render_view(url_for('sessions.forgot_password'),
                           redirect=True,
                           message=_('ERROR_INVALID_RESET_PASSWORD_CODE'))

    form = ResetPasswordForm(user=user)

    if form.is_submitted():
        try:
            if not form.validate():
                raise Exception(_('ERROR_INVALID_SUBMISSION'))

            if not verify_captcha():
                raise Exception(_('SESSIONS_ERROR_UNFINISHED_CHALLENGE_LBL'))

            user.set_password(form.password.data)
            user.reset_password = None

            # store the user
            user.save()

            return render_view(
                url_for('sessions.login'),
                redirect=True,
                message=_('SESSIONS_MSG_PASSWORD_RESET_COMPLETED'))

        except Exception as e:
            flash(e.message, 'error')

    return render_view('admin/sessions/reset_password.html', form=form)
示例#11
0
    def index(self):
        page = request.values.get('page', 1, type=int)
        limit = 10

        posts, total = Post.posts_by_user(current_user.id,
                                          page=page,
                                          limit=limit)

        return render_view('admin/posts/index.html',
                           posts=posts,
                           page=page,
                           limit=limit,
                           total=total)
示例#12
0
def forgot_password():
    if current_user.is_authenticated:
        return render_view(url_for('latest'),
                           redirect=True,
                           message=_('SESSIONS_MSG_ALREADY_SIGNED_IN'))

    form = ForgotPasswordForm()

    if form.is_submitted():
        try:
            if not form.validate():
                raise Exception(_('ERROR_INVALID_SUBMISSION'))

            if not verify_captcha():
                raise Exception(_('SESSIONS_ERROR_UNFINISHED_CHALLENGE_LBL'))

            email = form.email.data

            user = User.find_by_email(email)

            if not user:
                raise Exception(_('SESSIONS_ERROR_MAIL_NOT_FOUND',
                                  email=email))

            user.generate_reset_password()

            flash(_('SESSIONS_PASSWORD_RESET', email=email))

            # send reset password email
            send_email('reset_password', user)

            return render_view(url_for('sessions.forgot_password'),
                               redirect=True)

        except Exception as e:
            flash(e.message, 'error')

    return render_view('admin/sessions/forgot_password.html', form=form)
示例#13
0
    def put(self, id):
        category = Category.get_by_id(id)

        if category is None:
            return render_view(url_for('CategoriesView:index'),
                               status=False,
                               redirect=True,
                               message=_('CATEGORY_NOT_FOUND'))

        if not category.can_edit():
            abort(401)

        form = CategoryForm(category=category)

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                if not form.slug.data:
                    form.slug.data = form.name.data

                if category.slug != form.slug.data:
                    form.slug.data = Category.urlify(form.slug.data)

                form.populate_obj(category)
                category.save()

                return render_view(url_for('CategoriesView:put',
                                           id=category.id),
                                   message=_('CATEGORY_SAVE_SUCCESS'),
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/edit.html',
                           form=form,
                           category=category)
示例#14
0
    def draft_list(self):
        page = request.values.get('page', 1, type=int)
        limit = 10

        posts, total = Post.posts_by_user(current_user.id,
                                          page=page,
                                          limit=limit,
                                          status=Post.POST_DRAFT)

        return render_view('admin/posts/drafts.html',
                           posts=posts,
                           page=page,
                           limit=limit,
                           total=total)
示例#15
0
    def index(self):
        page = request.args.get('page', 1, int)

        limit = 5
        categories, total = Category.pagination(page=page, limit=limit, desc=False)

        categoryForm = CategoryForm()

        return render_view('admin/categories/index.html',
                           page=page,
                           limit=limit,
                           total=total,
                           categories=categories,
                           categoryForm=categoryForm)
示例#16
0
    def put(self, id):
        category = Category.get_by_id(id)

        if category is None:
            return render_view(url_for('CategoriesView:index'),
                               status=False,
                               redirect=True,
                               message=_('CATEGORY_NOT_FOUND'))

        if not category.can_edit():
            abort(401)

        form = CategoryForm(category=category)

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                if not form.slug.data:
                    form.slug.data = form.name.data

                if category.slug != form.slug.data:
                    form.slug.data = Category.urlify(form.slug.data)

                form.populate_obj(category)
                category.save()

                return render_view(url_for('CategoriesView:put', id=category.id),
                                   message=_('CATEGORY_SAVE_SUCCESS'),
                                   redirect=True)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/categories/edit.html',
                           form=form,
                           category=category)
示例#17
0
    def index(self):
        page = request.args.get('page', 1, int)

        limit = 5
        categories, total = Category.pagination(page=page,
                                                limit=limit,
                                                desc=False)

        categoryForm = CategoryForm()

        return render_view('admin/categories/index.html',
                           page=page,
                           limit=limit,
                           total=total,
                           categories=categories,
                           categoryForm=categoryForm)
示例#18
0
def comment_delete(id):
    comment = Comment.get_by_id(id)

    if comment is None or not comment.can_delete:
        abort(403)

    post = comment.post

    try:
        Comment.delete(id)
        message = _('COMMENT_DELETE_SUCCESS')
    except Exception as e:
        message = _('ERROR_COMMENT_DELETE_FAILED', error=e)

    return render_view(url_for('stamp.show', id=post.id),
                       redirect=True,
                       message=message)
示例#19
0
def comment_delete(id):
    comment = Comment.get_by_id(id)

    if comment is None or not comment.can_delete:
        abort(403)

    post = comment.post

    try:
        Comment.delete(id)
        message = _('COMMENT_DELETE_SUCCESS')
    except Exception as e:
        message = _('ERROR_COMMENT_DELETE_FAILED', error=e)

    return render_view(url_for('stamp.show', id=post.id),
                       redirect=True,
                       message=message)
示例#20
0
    def delete(self, id):
        category = Category.get_by_id(id)

        try:
            if category is None:
                raise Exception(_('CATEGORY_NOT_FOUND'))

            if not category.can_edit():
                abort(401)

            if not Category.transfer_posts(category):
                raise Exception(_('CATEGORY_TRANSFER_POSTS_FAILED'))

            name = category.name
            Category.delete(category.id)

            flash(_('CATEGORY_REMOVE_SUCCESS', name=name))
        except Exception as e:
            flash(e.message, 'error')

        return render_view(url_for('CategoriesView:index'), redirect=True)
示例#21
0
    def delete(self, id):
        category = Category.get_by_id(id)

        try:
            if category is None:
                raise Exception(_('CATEGORY_NOT_FOUND'))

            if not category.can_edit():
                abort(401)

            if not Category.transfer_posts(category):
                raise Exception(_('CATEGORY_TRANSFER_POSTS_FAILED'))

            name = category.name
            Category.delete(category.id)

            flash(_('CATEGORY_REMOVE_SUCCESS', name=name))
        except Exception as e:
            flash(e.message, 'error')

        return render_view(url_for('CategoriesView:index'),
                           redirect=True)
示例#22
0
    def put(self, id):
        post = Post.get_by_id(id)

        if post is None or not post.can_edit() or post.is_hidden:
            return render_view(url_for('PostsView:index'),
                               status=False,
                               redirect=True,
                               message=_('POST_NOT_FOUND'))

        form = PostForm(post=post)

        if form.is_submitted():
            try:
                if not form.validate():
                    raise Exception(_('ERROR_INVALID_SUBMISSION'))

                cover_picture_id = request.values.get('cover_picture_id', 0, int)
                is_draft = request.values.get('status', 0, int) == Post.POST_DRAFT
                remain = request.values.get('remain', False, bool)

                if post.cover_picture and cover_picture_id == 0:
                    # remove the picture, when user request its deletion
                    post.cover_picture.remove()

                form.populate_obj(post)

                f = request.files.get('file')

                if f:
                    if post.cover_picture:
                        post.cover_picture.remove()
                    picture = Picture.create()
                    picture.save_file(f, current_user)
                    post.cover_picture_id = picture.id if picture else 0

                if is_draft:
                    post.status = Post.POST_DRAFT
                else:
                    if post.save_count == 1 or post.created_at is None:
                        post.created_at = Post.current_date()
                        post.save_count = 1
                    post.status = Post.POST_PUBLIC
                    post.save_count += 1

                post.editor_version = 1
                post.save()

                Feed.clear_feed_cache()

                if post.is_draft:
                    message = _('POST_DRAFT_SAVE_SUCESS')
                else:
                    message = _('POST_PUBLIC_SAVE_SUCESS')

                if not remain:
                    return render_view(url_for('PostsView:get', id=post.id),
                                       redirect=True,
                                       message=message)
            except Exception as e:
                flash(e.message, 'error')

        return render_view('admin/posts/edit.html',
                           form=form,
                           post=post)
示例#23
0
def logout():
    logout_user()

    return render_view(url_for('latest'),
                       redirect=True,
                       message=_('SESSIONS_MSG_SIGNED_OUT'))