class Comment(TimeStampedModel): user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='comments', verbose_name=_('User'), on_delete=models.CASCADE) ticket = models.ForeignKey( Ticket, related_name='comments', verbose_name=_('Ticket'), ) description = models.TextField( _('Description'), help_text= _('Include as much detail as possible, including the steps to reproduce, error message(s), screen shots, URLs, date/time/duration, etc. This information will accelerate our ability to help you.' ), ) markup = MarkupField(default='none') class Meta: ordering = [ '-created', ] verbose_name = _('Comment') verbose_name_plural = _('Comments')
class ArticlePost(BasePost): """A post for medium to long articles.""" title = models.CharField(max_length=300) content = models.TextField() description = models.TextField(blank=True, null=True) markup = MarkupField() class Meta: verbose_name = _(u'article') verbose_name_plural = _(u'articles') def __unicode__(self): return self.title @property def rendered_content(self): return formatter(self.content, filter_name=self.markup) @property def word_count(self): return len(strip_tags(self.rendered_content).split()) def get_teaser(self, truncate=30): if self.description: teaser = formatter(self.description, filter_name=self.markup) else: teaser = self.rendered_content if truncate: return truncate_html_words(teaser, truncate) else: return teaser
class DiaryDetail(Post): """Diary Model""" diary = models.ForeignKey(Diary, related_name="detail") markup = MarkupField(default="markdown") body = TextFieldWithInlines() body_markup = models.TextField(editable=True, blank=True, null=True) tags = TagField() objects = PostManager() class Meta: verbose_name = _("diary entry detail") verbose_name_plural = _("diary entry detail") db_table = "dress_blog_diarydetail" ordering = ("-pub_date", ) def save(self, *args, **kwargs): self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) super(DiaryDetail, self).save(*args, **kwargs) def __unicode__(self): return self.pub_date.strftime( ugettext("Diary on %A, %d %B %Y at %H:%Mh")) def get_absolute_url(self): return self.diary.get_absolute_url()
class Story(Post): """Story model""" title = models.CharField(max_length=200) slug = models.SlugField(unique_for_date="pub_date") markup = MarkupField(default="markdown") abstract = TextFieldWithInlines() abstract_markup = models.TextField(editable=True, blank=True, null=True) body = TextFieldWithInlines() body_markup = models.TextField(editable=True, blank=True, null=True) tags = TagField() objects = PostManager() class Meta: verbose_name = _("story") verbose_name_plural = _("stories") db_table = "dress_blog_stories" ordering = ("-pub_date", ) get_latest_by = "pub_date" def __unicode__(self): return u"%s" % self.title def save(self, *args, **kwargs): self.abstract_markup = mark_safe( formatter(self.abstract, filter_name=self.markup)) self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) if self.markup == "restructuredtext": self.abstract_markup = unescape_inline(self.abstract_markup) self.body_markup = unescape_inline(self.body_markup) super(Story, self).save(*args, **kwargs) @permalink def get_absolute_url(self): kwargs = { "year": self.pub_date.year, "month": self.pub_date.strftime("%b").lower(), "day": self.pub_date.day, "slug": self.slug } if self.status == 1: return ("blog-story-detail-draft", None, kwargs) if self.status == 2: return ("blog-story-detail-review", None, kwargs) elif self.pub_date > now(): return ("blog-story-detail-upcoming", None, kwargs) else: return ("blog-story-detail", None, kwargs)
class Quote(Post): """Quote model""" title = models.CharField(max_length=100, blank=False, null=False) slug = models.SlugField(max_length=255, unique=True) markup = MarkupField(default="markdown") body = TextFieldWithInlines() body_markup = models.TextField(editable=True, blank=True, null=True) quote_author = models.CharField(blank=False, null=False, max_length=255, help_text=_("quote's author")) url_source = models.URLField(blank=True, null=True) tags = TagField() objects = PostManager() class Meta: verbose_name = _("quote") verbose_name_plural = _("quotes") db_table = "dress_blog_quotes" ordering = ("-pub_date", ) get_latest_by = "pub_date" def __unicode__(self): return u"%s" % self.title def save(self, *args, **kwargs): self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) super(Quote, self).save(*args, **kwargs) @permalink def get_absolute_url(self): kwargs = { "year": self.pub_date.year, "month": self.pub_date.strftime("%b").lower(), "day": self.pub_date.day, "slug": self.slug } if self.status == 1: return ("blog-quote-detail-draft", None, kwargs) if self.status == 2: return ("blog-quote-detail-review", None, kwargs) elif self.pub_date > now(): return ("blog-quote-detail-upcoming", None, kwargs) else: return ("blog-quote-detail", None, kwargs)
class Entry(models.Model): title = models.CharField(max_length=200) body = models.TextField() slug = models.SlugField(max_length=200, unique=True) publish = models.BooleanField(default=True) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) markup = MarkupField(default='markdown') objects = EntryQuerySet.as_manager() def __str__(self): return self.title class Meta: verbose_name = "Blog Entry" verbose_name_plural = "Blog Entries" ordering = ["-created"]
class Post(models.Model): """Post model.""" STATUS_CHOICES = ( (1, _('Draft')), (2, _('Public')), ) title = models.CharField(_('title'), max_length=200) slug = models.SlugField(_('slug'), unique_for_date='publish') author = models.ForeignKey(User, blank=True, null=True) markup = MarkupField(default='markdown') body = models.TextField(_('body'), ) tease = models.TextField( _('tease'), blank=True, help_text=_('Concise text suggested. Does not appear in RSS feed.')) body_markup = models.TextField(editable=True, blank=True, null=True) visits = models.IntegerField( _('visits'), default=0, editable=False) #to keep track of most popular posts status = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=2) allow_comments = models.BooleanField(_('allow comments'), default=True) publish = models.DateTimeField(_('publish'), default=datetime.datetime.now) created = models.DateTimeField(_('created'), auto_now_add=True) modified = models.DateTimeField(_('modified'), auto_now=True) categories = models.ManyToManyField(Category, blank=True) tags = TagField() objects = PublicManager() class Meta: verbose_name = _('post') verbose_name_plural = _('posts') db_table = 'blog_posts' ordering = ('-publish', ) get_latest_by = 'publish' class Admin: list_display = ('title', 'publish', 'status') list_filter = ('publish', 'categories', 'status') search_fields = ('title', 'body') class ProxyMeta: title = 'title' description = 'body_markup' tags = 'tags' pub_date = 'publish' active = {'status': 2} def __unicode__(self): return u'%s' % self.title def save(self, *args, **kwargs): blog_settings = Settings.get_current() if blog_settings.active_editor > 1: self.markup = "none" self.body_markup = self.body else: self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) super(Post, self).save(*args, **kwargs) ping_google = getattr(blog_settings, "ping_google", False) if ping_google: try: ping_google() except: pass @permalink def get_absolute_url(self): return ('blog_detail', None, { 'year': self.publish.year, 'month': self.publish.strftime('%b').lower(), 'day': self.publish.day, 'slug': self.slug }) def get_previous_post(self): return self.get_previous_by_publish(status__gte=2) def get_next_post(self): return self.get_next_by_publish(status__gte=2) @property def get_meta_keywords(self): if self.tags == '': return Settings.get_current().meta_keywords else: return self.tags @property def get_meta_description(self): if self.tease == '': return Settings.get_current().meta_description else: return Truncator(self.tease).words(255, truncate='...')
class Story(models.Model): """A generic story.""" title = models.CharField(max_length=200) slug = models.SlugField(unique_for_date="pub_date") markup = MarkupField(default="markdown") abstract = TextFieldWithInlines(help_text=_htxt["markup_text"], default=_htxt["hint_on_markdown"]) abstract_markup = models.TextField(editable=True, blank=True, null=True) body = TextFieldWithInlines(help_text=_htxt["markup_text"], default=_htxt["markdown_cheatsheet"]) body_markup = models.TextField(editable=True, blank=True, null=True) tags = TagField() status = models.IntegerField(choices=STATUS_CHOICES, default=1) author = models.ForeignKey(User, blank=True, null=True) allow_comments = models.BooleanField(default=True) pub_date = models.DateTimeField(_("Publication date"), default=now) mod_date = models.DateTimeField(_("Modification date"), auto_now=True) visits = models.IntegerField(default=0, editable=False) site = models.ForeignKey(Site, help_text=_htxt['site']) objects = StoryManager() class Meta: verbose_name = _("story") verbose_name_plural = _("stories") db_table = "easy_blog_stories" ordering = ("-pub_date",) get_latest_by = "pub_date" permissions = (("can_review_stories", "Can review stories"), ("can_see_unpublished_stories", "Can see unpublished stories")) def __unicode__(self): return u"%s" % self.title def save(self, *args, **kwargs): self.site_id = settings.SITE_ID self.abstract_markup = mark_safe( formatter(self.abstract, filter_name=self.markup)) self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) if self.markup == "restructuredtext": self.abstract_markup = unescape_inline(self.abstract_markup) self.body_markup = unescape_inline(self.body_markup) super(Story, self).save(*args, **kwargs) if self.status == 3: # public blog_config = Config.get_current() ping_google = getattr(blog_config, "ping_google", False) if ping_google: try: ping_google() except: pass @permalink def get_absolute_url(self): kwargs = { "year": self.pub_date.year, "month": self.pub_date.strftime("%b").lower(), "day": self.pub_date.day, "slug": self.slug } if self.status == 1: return ("blog-story-detail-draft", None, kwargs) if self.status == 2: return ("blog-story-detail-review", None, kwargs) elif self.pub_date > now(): return ("blog-story-detail-upcoming", None, kwargs) else: return ("blog-story-detail", None, kwargs) @property def in_the_future(self): return self.pub_date > now()
class Story(models.Model): """A generic story.""" title = models.CharField(max_length=200) slug = models.SlugField(unique_for_date="pub_date") markup = MarkupField(default="markdown") abstract = TextFieldWithInlines() abstract_markup = models.TextField(editable=True, blank=True, null=True) body = TextFieldWithInlines() body_markup = models.TextField(editable=True, blank=True, null=True) tags = TagField() status = models.IntegerField(choices=STATUS_CHOICES, default=1) allow_comments = models.BooleanField(default=True) pub_date = models.DateField("Publication date", default=date.today()) mod_date = models.DateField("Modification date", auto_now=True) visits = models.IntegerField(default=0, editable=False) objects = StoryManager() class Meta: verbose_name = "story" verbose_name_plural = "stories" db_table = "blog_stories" ordering = ("-pub_date", ) get_latest_by = "pub_date" permissions = (("can_see_unpublished_stories", "Can see unpublished stories"), ) def __str__(self): return self.title def save(self, *args, **kwargs): self.abstract_markup = mark_safe( formatter(self.abstract, filter_name=self.markup)) self.body_markup = mark_safe( formatter(self.body, filter_name=self.markup)) if self.markup == "restructuredtext": self.abstract_markup = unescape_inline(self.abstract_markup) self.body_markup = unescape_inline(self.body_markup) super(Story, self).save(*args, **kwargs) if self.status == PUBLIC: try: ping_google() except: pass @permalink def get_absolute_url(self): kwargs = { "year": self.pub_date.year, "month": self.pub_date.strftime("%b").lower(), "day": self.pub_date.day, "slug": self.slug } if self.status == DRAFT: return ("blog-story-detail-draft", None, kwargs) elif self.pub_date > date.today(): return ("blog-story-detail-upcoming", None, kwargs) else: return ("blog-story-detail", None, kwargs) @property def in_the_future(self): return self.pub_date > date.today()