예제 #1
0
파일: model.py 프로젝트: linin/micolog
class Blog(db.Model):
    owner = db.UserProperty()
    author = db.StringProperty(default='admin')
    rpcuser = db.StringProperty(default='admin')
    rpcpassword = db.StringProperty(default='')
    description = db.TextProperty()
    #baseurl = db.StringProperty(multiline=False, default=None)
    #urlpath = db.StringProperty(multiline=False)
    title = db.StringProperty(multiline=False, default='Micolog')
    subtitle = db.StringProperty(multiline=False, default='This is a micro blog.')
    entrycount = db.IntegerProperty(default=0)
    posts_per_page = db.IntegerProperty(default=10)
    feedurl = db.StringProperty(multiline=False, default='/feed')
    #blogversion = db.StringProperty(multiline=False, default='0.30')
    theme_name = db.StringProperty(multiline=False, default='default')
    enable_memcache = db.BooleanProperty(default=False)
    link_format = db.StringProperty(multiline=False, default='%(year)s/%(month)s/%(day)s/%(post_id)s.html')
    comment_notify_mail = db.BooleanProperty(default=True)
    #评论顺序
    comments_order = db.IntegerProperty(default=0)
    #每页评论数
    comments_per_page = db.IntegerProperty(default=20)
    #comment check type 0-No 1-算术 2-验证码 3-客户端计算
    comment_check_type = db.IntegerProperty(default=1)
    #0 default 1 identicon
    avatar_style = db.IntegerProperty(default=0)

    blognotice = db.TextProperty(default='')

    domain = db.StringProperty()
    show_excerpt = db.BooleanProperty(default=True)
    version = 1.0
    timedelta = db.FloatProperty(default=8.0)# hours
    language = db.StringProperty(default="en-us")

    sitemap_entries = db.IntegerProperty(default=30)
    sitemap_include_category = db.BooleanProperty(default=False)
    sitemap_include_tag = db.BooleanProperty(default=False)
    sitemap_ping = db.BooleanProperty(default=False)
    default_link_format = db.StringProperty(multiline=False, default='post/%(post_id)s')
    #todo
    #default_theme = Theme("default")


    #remove it
    #allow_pingback = db.BooleanProperty(default=False)
    #allow_trackback = db.BooleanProperty(default=False)

    @property
    def theme (self):
       return  self.get_theme()

    langs = None
    application = None

    @classmethod
    def getBlog(cls,keyname='default'):
        blog=memcache.get("gblog")
        if not blog:
            blog=Blog.get_by_key_name(keyname)
            if not blog:
                blog=Blog(key_name = keyname)
                blog.InitBlogData()
            memcache.set("gblog",blog)
        return blog

    @property
    def vkey(self):
        return str(self.key.id)

    @property
    def baseurl(self):
        return "http://"+self.domain

    def InitBlogData(self):

        OptionSet.setValue('PluginActive',[u'googleAnalytics', u'wordpress', u'sys_plugin'])
        self.domain=os.environ['HTTP_HOST']
        self.feedurl=self.baseurl+"/feed"
        os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
        self.admin_essential = False
        if os.environ.has_key('HTTP_ACCEPT_LANGUAGE'):
            lang=os.environ['HTTP_ACCEPT_LANGUAGE'].split(',')[0]
        from django.utils.translation import  activate,to_locale
        self.language=to_locale(lang)
        self.admin_essential=False
        #from django.conf import settings
        #settings._target = None
        #activate(self.language)
        self.put()

        entry=Entry(title="Hello world!".decode('utf8'))
        entry.content='<p>Welcome to micolog %s. This is your first post. Edit or delete it, then start blogging!</p>'%self.version
        entry.published=True
        entry.put()
        link=Link(href='http://xuming.net',linktext="Xuming's blog".decode('utf8'))
        link.put()
        link=Link(href='http://eric.cloud-mes.com/',linktext="Eric Guo's blog".decode('utf8'))
        link.put()



    def __init__(self,
                       parent=None,
                       key_name=None,
                       _app=None,
                       _from_entity=False,
                       **kwds):
        from plugin import Plugins
        self.plugins = Plugins(self)
        db.Model.__init__(self, parent, key_name, _app, _from_entity, **kwds)

    def tigger_filter(self, name, content, *arg1, **arg2):
        return self.plugins.tigger_filter(name, content, blog=self, *arg1, **arg2)

    def tigger_action(self, name, *arg1, **arg2):
        return self.plugins.tigger_action(name, blog=self, *arg1, **arg2)

    def tigger_urlmap(self, url, *arg1, **arg2):
        return self.plugins.tigger_urlmap(url, blog=self, *arg1, **arg2)

    def get_ziplist(self):
        return self.plugins.get_ziplist();

    def save(self):
        self.put()

    def initialsetup(self):
        self.title = 'Your Blog Title'
        self.subtitle = 'Your Blog Subtitle'

    def get_theme(self):
        return Theme(self.theme_name);

    def get_langs(self):
        self.langs = LangIterator()
        return self.langs

    def cur_language(self):
        return self.get_langs().getlang(self.language)

    def rootpath(self):
        return os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))

    @vcache("blog.hotposts",args=("count"))
    def hotposts(self,count=8):
        return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-readtimes').fetch(count)

    @vcache("blog.recentposts",args=("count"))
    def recentposts(self,count=8):
        return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-date').fetch(count)

    @vcache("blog.postscount")
    def postscount(self):
        return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-date').count()

    @vcache("blog.sticky_entries")
    def sticky_entries(self):
        return Entry.all().filter('entrytype =','post')\
            .filter('published =',True)\
            .filter('sticky =',True)\
            .order('-date')

    @vcache("blog.get_entries_paged",args=("entrytype","published","pindex","size"))
    def get_entries_paged(self,entrytype='post',published=True,pindex=1,size=20):
        return Entry.all().filter('entrytype =',entrytype).\
                filter("published =", published).order('-sticky').order('-date').\
                fetch(size, offset = (pindex-1) * size)

    @vcache("blog.get_blogrolls")
    def blogrolls(self):
        return Link.all().filter('linktype =','blogroll')

    @vcache("blog.get_archives")
    def archives(self):
        return Archive.all().order('-year').order('-month').fetch(12)

    @vcache("blog.get_alltags")
    def tags(self):
        return Tag.all()

    @vcache("blog.recent_comments",args=("count"))
    def recent_comments(self,count=5):
        return Comment.all().order('-date').fetch(count)

    @vcache("blog.get_categories")
    def categories(self):
        return Category.all()