Пример #1
0
    def validate(self):
        super(BlogPost, self).validate()

        if not self.blog_intro:
            content = get_html_content_based_on_type(self, 'content',
                                                     self.content_type)
            self.blog_intro = content[:200]
            self.blog_intro = strip_html_tags(self.blog_intro)

        if self.blog_intro:
            self.blog_intro = self.blog_intro[:200]

        if not self.meta_title:
            self.meta_title = self.title[:60]
        else:
            self.meta_title = self.meta_title[:60]

        if not self.meta_description:
            self.meta_description = self.blog_intro[:140]
        else:
            self.meta_description = self.meta_description[:140]

        if self.published and not self.published_on:
            self.published_on = today()

        if self.featured:
            if not self.meta_image:
                frappe.throw(_("A featured post must have a cover image"))
            self.reset_featured_for_other_blogs()

        self.set_read_time()
Пример #2
0
    def get_context(self, context):
        context.main_section = get_html_content_based_on_type(
            self, 'main_section', self.content_type)
        context.source_content_type = self.content_type
        self.render_dynamic(context)

        # if static page, get static content
        if context.slideshow:
            context.update(get_slideshow(self))

        if self.enable_comments:
            context.comment_list = get_comment_list(self.doctype, self.name)

        context.update({
            "style": self.css or "",
            "script": self.javascript or "",
            "header": self.header,
            "title": self.title,
            "text_align": self.text_align,
        })

        if not self.show_title:
            context["no_header"] = 1

        self.set_metatags(context)
        self.set_breadcrumbs(context)
        self.set_title_and_header(context)
        self.set_page_blocks(context)

        return context
Пример #3
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception("This blog has not been published yet!")

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()
			context.author = self.blogger


		context.content = get_html_content_based_on_type(self, 'content', self.content_type)
		context.description = self.blog_intro or strip_html_tags(context.content[:140])

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		image = find_first_image(context.content)
		if image:
			context.metatags["image"] = image

		self.load_comments(context)

		context.category = frappe.db.get_value("Blog Category",
			context.doc.blog_category, ["title", "route"], as_dict=1)
		context.parents = [{"name": _("Home"), "route":"/"},
			{"name": "Blog", "route": "/blog"},
			{"label": context.category.title, "route":context.category.route}]
Пример #4
0
    def get_context(self, context):
        # this is for double precaution. usually it wont reach this code if not published
        if not cint(self.published):
            raise Exception("This blog has not been published yet!")

        context.no_breadcrumbs = True

        # temp fields
        context.full_name = get_fullname(self.owner)
        context.updated = global_date_format(self.published_on)
        context.social_links = self.fetch_social_links_info()
        context.cta = self.fetch_cta()
        context.enable_cta = not self.hide_cta and frappe.db.get_single_value(
            "Blog Settings", "show_cta_in_blog", cache=True)

        if self.blogger:
            context.blogger_info = frappe.get_doc("Blogger",
                                                  self.blogger).as_dict()
            context.author = self.blogger

        context.content = get_html_content_based_on_type(
            self, 'content', self.content_type)

        #if meta description is not present, then blog intro or first 140 characters of the blog will be set as description
        context.description = self.meta_description or self.blog_intro or strip_html_tags(
            context.content[:140])

        context.metatags = {
            "name": self.meta_title,
            "description": context.description,
        }

        #if meta image is not present, then first image inside the blog will be set as the meta image
        image = find_first_image(context.content)
        context.metatags["image"] = self.meta_image or image or None

        self.load_comments(context)
        self.load_feedback(context)

        context.category = frappe.db.get_value("Blog Category",
                                               context.doc.blog_category,
                                               ["title", "route"],
                                               as_dict=1)
        context.parents = [{
            "name": _("Home"),
            "route": "/"
        }, {
            "name": "Blog",
            "route": "/blog"
        }, {
            "label": context.category.title,
            "route": context.category.route
        }]
        context.guest_allowed = True
Пример #5
0
	def validate(self):
		super(BlogPost, self).validate()

		if not self.blog_intro:
			content = get_html_content_based_on_type(self, 'content', self.content_type)
			self.blog_intro = content[:140]
			self.blog_intro = strip_html_tags(self.blog_intro)

		if self.blog_intro:
			self.blog_intro = self.blog_intro[:140]

		if self.published and not self.published_on:
			self.published_on = today()

		# update posts
		frappe.db.sql("""UPDATE `tabBlogger` SET `posts`=(SELECT COUNT(*) FROM `tabBlog Post`
			WHERE IFNULL(`blogger`,'')=`tabBlogger`.`name`)
			WHERE `name`=%s""", (self.blogger,))
Пример #6
0
    def get_context(self, context):
        context.main_section = get_html_content_based_on_type(
            self, 'main_section', self.content_type)
        context.source_content_type = self.content_type
        context.title = self.title

        if self.context_script:
            _locals = dict(context=frappe._dict())
            safe_exec(self.context_script, None, _locals)
            context.update(_locals['context'])

        self.render_dynamic(context)

        # if static page, get static content
        if context.slideshow:
            context.update(get_slideshow(self))

        if self.enable_comments:
            context.comment_list = get_comment_list(self.doctype, self.name)
            context.guest_allowed = True

        context.update({
            "style": self.css or "",
            "script": self.javascript or "",
            "header": self.header,
            "text_align": self.text_align,
        })

        if not self.show_title:
            context["no_header"] = 1

        self.set_metatags(context)
        self.set_breadcrumbs(context)
        self.set_title_and_header(context)
        self.set_page_blocks(context)

        return context
Пример #7
0
def get_blog_list(doctype,
                  txt=None,
                  filters=None,
                  limit_start=0,
                  limit_page_length=20,
                  order_by=None):
    conditions = []
    category = filters.blog_category or frappe.utils.escape_html(
        frappe.local.form_dict.blog_category
        or frappe.local.form_dict.category)
    if filters:
        if filters.blogger:
            conditions.append('t1.blogger=%s' %
                              frappe.db.escape(filters.blogger))
    if category:
        conditions.append('t1.blog_category=%s' % frappe.db.escape(category))

    if txt:
        conditions.append('(t1.content like {0} or t1.title like {0}")'.format(
            frappe.db.escape('%' + txt + '%')))

    if conditions:
        frappe.local.no_cache = 1

    query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.route, t1.published_on, t1.read_time,
				t1.published_on as creation,
				t1.read_time as read_time,
				t1.featured as featured,
				t1.meta_image as cover_image,
				t1.content as content,
				t1.content_type as content_type,
				t1.content_html as content_html,
				t1.content_md as content_md,
				ifnull(t1.blog_intro, t1.content) as intro,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment`
					where
						comment_type='Comment'
						and reference_doctype='Blog Post'
						and reference_name=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by featured desc, published_on desc, name asc
		limit %(page_len)s OFFSET %(start)s""" % {
        "start": limit_start,
        "page_len": limit_page_length,
        "condition": (" and " + " and ".join(conditions)) if conditions else ""
    }

    posts = frappe.db.sql(query, as_dict=1)

    for post in posts:
        post.content = get_html_content_based_on_type(post, 'content',
                                                      post.content_type)
        if not post.cover_image:
            post.cover_image = find_first_image(post.content)
        post.published = global_date_format(post.creation)
        post.content = strip_html_tags(post.content)

        if not post.comments:
            post.comment_text = _('No comments yet')
        elif post.comments == 1:
            post.comment_text = _('1 comment')
        else:
            post.comment_text = _('{0} comments').format(str(post.comments))

        post.avatar = post.avatar or ""
        post.category = frappe.db.get_value('Blog Category',
                                            post.blog_category,
                                            ['name', 'route', 'title'],
                                            as_dict=True)

        if post.avatar and (not "http:" in post.avatar
                            and not "https:" in post.avatar
                            ) and not post.avatar.startswith("/"):
            post.avatar = "/" + post.avatar

    return posts