Ejemplo n.º 1
0
class WidgetList(MethodView):
    decorators = [login_required, admin_permission.require(401)]
    template_name = 'blog_admin/widgets.html'

    def get(self):
        widgets = models.Widget.objects.all()
        data = {
            'widgets': widgets,
        }

        return render_template(self.template_name, **data)
Ejemplo n.º 2
0
class ReposView(MethodView):
    decorators = [
        login_required,
        admin_permission.require(401),
    ]
    template_name = 'main/repos.html'

    def get(self):
        repos = models.Repo.objects().all()
        languages = models.GitmarkMeta.objects(key='language').first()

        cur_page = request.args.get('page', 1)
        cur_language = request.args.get('language')

        repos = repos.filter(language=cur_language) if cur_language else repos
        url_params = 'language={0}'.format(
            cur_language) if cur_language else None

        repos = repos.paginate(page=int(cur_page), per_page=PER_PAGE)

        #group by aggregate
        language_cursor = models.Repo._get_collection().aggregate([{
            '$match': {
                'starred_users': current_user.username
            }
        }, {
            '$group': {
                '_id': {
                    'language': '$language'
                },
                'name': {
                    '$first': '$language'
                },
                'count': {
                    '$sum': 1
                },
            }
        }])

        data = {
            'repos': repos,
            'languages': languages.value_list if languages else [],
            'cur_language': cur_language,
            'url_params': url_params
        }

        data['language_cursor'] = language_cursor

        return render_template(self.template_name, **data)
Ejemplo n.º 3
0
class SuPostsList(MethodView):
    decorators = [login_required, admin_permission.require(401)]
    template_name = 'blog_admin/su_posts.html'

    def get(self):
        posts = models.Post.objects.all().order_by('-update_time')
        cur_type = request.args.get('type')
        # post_types = posts.distinct('post_type')
        if cur_type:
            posts = posts.filter(post_type=cur_type)

        cur_page = request.args.get('page', 1)
        if not cur_page:
            abort(404)
        posts = posts.paginate(page=int(cur_page), per_page=PER_PAGE)

        data = {'posts': posts, 'post_types': POST_TYPES, 'cur_type': cur_type}

        return render_template(self.template_name, **data)
Ejemplo n.º 4
0
class Widget(MethodView):
    decorators = [login_required, admin_permission.require(401)]
    template_name = 'blog_admin/widget.html'

    def get(self, pk=None, form=None):
        widget = None
        if pk:
            widget = models.Widget.objects.get_or_404(id=pk)
            if widget.md_content:
                widget.content = widget.md_content
                widget.content_type = 'markdown'
            else:
                widget.content = widget.html_content
                widget.content_type = 'html'

        if not form:
            if pk:
                form = forms.WidgetForm(obj=widget)
            else:
                form = forms.WidgetForm()

        data = {
            'form': form,
            'widget': widget,
            'post_types': POST_TYPES,
        }
        return render_template(self.template_name, **data)

    def post(self, pk=None, form=None):
        form = forms.WidgetForm(request.form)
        if not form.validate():
            return self.get(pk, form)

        if pk:
            widget = models.Widget.objects.get_or_404(id=pk)
        else:
            widget = models.Widget()

        widget.title = form.title.data.strip()
        if form.content_type.data == 'html':
            widget.html_content = form.content.data.strip()
            widget.md_content = None
        else:
            widget.md_content = form.content.data.strip()

        widget.priority = form.priority.data

        allow_post_types = request.form.get('allow_post_types').split(',')
        widget.allow_post_types = [
            post_type.strip() for post_type in allow_post_types
        ]

        update_time = request.form.get('update_time')
        if update_time:
            widget.update_time = update_time

        widget.save()

        msg1 = 'Succeed to create widget'
        msg2 = 'Succeed to update widget'
        msg = msg1 if pk else msg2
        flash(msg, 'success')

        return redirect(url_for('blog_admin.su_widgets'))

    def delete(self, pk):
        widget = models.Widget.objects.get_or_404(id=pk)
        widget.delete()

        if request.args.get('ajax'):
            return 'success'

        redirect_url = url_for('blog_admin.su_widgets')

        flash('Succeed to delete the widget', 'success')

        return redirect(redirect_url)
Ejemplo n.º 5
0
class SuPost(MethodView):
    decorators = [login_required, admin_permission.require(401)]
    template_name = 'blog_admin/su_post.html'

    def get_context(self, slug, form=None):
        post = models.Post.objects.get_or_404(slug=slug)

        if not form:
            # post.post_id = str(post.id)
            # post.tags_str = ', '.join(post.tags)
            form = forms.SuPostForm(obj=post)

        categories = models.Post.objects.distinct('category')
        tags = models.Post.objects.distinct('tags')

        context = {
            'form': form,
            'display_slug': slug,
            'post': post,
            'categories': categories,
            'tags': tags,
            'post_types': POST_TYPES,
        }

        return context

    def get(self, slug, form=None):
        context = self.get_context(slug, form)
        return render_template(self.template_name, **context)

    def post(self, slug):
        form = forms.SuPostForm(request.form)
        if not form.validate():
            return self.get(slug, form)

        # return form.author.data.username

        # if slug:
        #     post = models.Post.objects.get_or_404(slug=slug)
        # else:
        #     post = models.Post()
        #     post.author = get_current_user()

        post = models.Post.objects.get_or_404(slug=slug)

        post.title = form.title.data.strip()
        post.slug = form.slug.data.strip()
        post.fix_slug = form.fix_slug.data.strip()
        post.raw = form.raw.data.strip()
        abstract = form.abstract.data.strip()
        post.abstract = abstract if abstract else post.raw[:140]
        post.is_draft = form.is_draft.data
        post.author = form.author.data

        # post.post_type = form.post_type.data.strip() if form.post_type.data else None

        post.post_type = request.form.get('post_type') or post.post_type
        pub_time = request.form.get('publish_time')
        update_time = request.form.get('update_time')

        if pub_time:
            post.pub_time = datetime.datetime.strptime(pub_time,
                                                       "%Y-%m-%d %H:%M:%S")

        if update_time:
            post.update_time = datetime.datetime.strptime(
                update_time, "%Y-%m-%d %H:%M:%S")

        redirect_url = url_for('blog_admin.su_posts')

        post.save(allow_set_time=True)

        flash('Succeed to update post', 'success')
        return redirect(redirect_url)