예제 #1
0
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')
예제 #2
0
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
예제 #3
0
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()
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
파일: models.py 프로젝트: bmorrekyz/blog
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"]
예제 #7
0
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='...')
예제 #8
0
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()
예제 #9
0
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()