• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

allura


コミットメタ情報

リビジョンe1c74dfb8a9a750a752ddf4796eb2dadbbc71848 (tree)
日時2012-05-17 07:18:18
作者bolkimen <bolkimen@yaho...>
コミッターCory Johns

ログメッセージ

ticket:48 finish site path for feed list edit

変更サマリ

差分

--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -12,12 +12,14 @@ from pylons import g, c, request, response
1212 from formencode import validators
1313 from webob import exc
1414
15+from ming.orm import session
16+
1517 # Pyforge-specific imports
1618 from allura.app import Application, ConfigOption, SitemapEntry
1719 from allura.app import DefaultAdminController
1820 from allura.lib import helpers as h
1921 from allura.lib.search import search
20-from allura.lib.decorators import require_post
22+from allura.lib.decorators import require_post, Property
2123 from allura.lib.security import has_access, require_access
2224 from allura.lib import widgets as w
2325 from allura.lib.widgets.subscriptions import SubscribeForm
@@ -56,6 +58,7 @@ class ForgeBlogApp(Application):
5658 ordinal=14
5759 installable=True
5860 config_options = Application.config_options
61+ default_external_feeds = []
5962 icons={
6063 24:'images/blog_24.png',
6164 32:'images/blog_32.png',
@@ -67,6 +70,24 @@ class ForgeBlogApp(Application):
6770 self.root = RootController()
6871 self.admin = BlogAdminController(self)
6972
73+ @Property
74+ def external_feeds_list():
75+ def fget(self):
76+ globals = BM.Globals.query.get(app_config_id=self.config._id)
77+ if globals is not None:
78+ external_feeds = globals.external_feeds
79+ else:
80+ external_feeds = self.default_external_feeds
81+ return external_feeds
82+ def fset(self, new_external_feeds):
83+ globals = BM.Globals.query.get(app_config_id=self.config._id)
84+ if globals is not None:
85+ globals.external_feeds = new_external_feeds
86+ elif len(new_external_feeds) > 0:
87+ globals = BM.Globals(app_config_id=self.config._id, root=new_external_feeds)
88+ if globals is not None:
89+ session(globals).flush()
90+
7091 @property
7192 @h.exceptionless([], log)
7293 def sitemap(self):
@@ -94,7 +115,11 @@ class ForgeBlogApp(Application):
94115 return links
95116
96117 def admin_menu(self):
97- return super(ForgeBlogApp, self).admin_menu(force_options=True)
118+ admin_url = c.project.url() + 'admin/' + self.config.options.mount_point + '/'
119+ links = [SitemapEntry('External feeds', admin_url + 'exfeed', className='admin_modal')]
120+ links += super(ForgeBlogApp, self).admin_menu(force_options=True)
121+ return links
122+ #return super(ForgeBlogApp, self).admin_menu(force_options=True)
98123
99124 def install(self, project):
100125 'Set up any default permissions and roles here'
@@ -359,3 +384,34 @@ class BlogAdminController(DefaultAdminController):
359384 self.app.config.options['show_discussion'] = show_discussion and True or False
360385 flash('Blog options updated')
361386 redirect(h.really_unicode(c.project.url()+'admin/tools').encode('utf-8'))
387+
388+ @without_trailing_slash
389+ @expose('jinja:forgeblog:templates/blog/admin_exfeed.html')
390+ def exfeed(self):
391+ #self.app.external_feeds_list = ['feed1', 'feed2']
392+ #log.info("EXFEED: %s" % self.app.external_feeds_list)
393+ feeds_list = []
394+ for feed in self.app.external_feeds_list:
395+ feeds_list.append(feed)
396+ return dict(app=self.app,
397+ feeds_list=feeds_list,
398+ allow_config=has_access(self.app, 'configure')())
399+
400+ @without_trailing_slash
401+ @expose()
402+ @require_post()
403+ def set_exfeed(self, **kw):
404+ new_exfeed = kw.get('new_exfeed', None)
405+ exfeed_val = kw.get('exfeed', [])
406+ if type(exfeed_val) == unicode:
407+ exfeed_list = []
408+ exfeed_list.append(exfeed_val)
409+ else:
410+ exfeed_list = exfeed_val
411+
412+ if new_exfeed is not None and new_exfeed != '':
413+ exfeed_list.append(new_exfeed)
414+
415+ self.app.external_feeds_list = exfeed_list
416+ flash('External feeds updated')
417+ redirect(c.project.url()+'admin/tools')
--- a/ForgeBlog/forgeblog/model/__init__.py
+++ b/ForgeBlog/forgeblog/model/__init__.py
@@ -1 +1 @@
1-from blog import BlogPost, Attachment, BlogPostSnapshot
1+from blog import Globals, BlogPost, Attachment, BlogPostSnapshot
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -9,6 +9,8 @@ from pymongo.errors import DuplicateKeyError
99
1010 from ming import schema
1111 from ming.orm import FieldProperty, ForeignIdProperty, Mapper, session, state
12+from ming.orm.declarative import MappedClass
13+
1214 from allura import model as M
1315 from allura.lib import helpers as h
1416 from allura.lib import utils, patience
@@ -16,6 +18,19 @@ from allura.lib import utils, patience
1618 config = utils.ConfigProxy(
1719 common_suffix='forgemail.domain')
1820
21+class Globals(MappedClass):
22+
23+ class __mongometa__:
24+ name = 'blog-globals'
25+ session = M.project_orm_session
26+ indexes = [ 'app_config_id' ]
27+
28+ type_s = 'BlogGlobals'
29+ _id = FieldProperty(schema.ObjectId)
30+ app_config_id = ForeignIdProperty('AppConfig', if_missing=lambda:context.app.config._id)
31+ external_feeds=FieldProperty([str])
32+
33+
1934 class BlogPostSnapshot(M.Snapshot):
2035 class __mongometa__:
2136 name='blog_post_snapshot'
--- /dev/null
+++ b/ForgeBlog/forgeblog/templates/blog/admin_exfeed.html
@@ -0,0 +1,27 @@
1+<form method="POST" action="{{c.project.url()}}admin/{{app.config.options.mount_point}}/set_exfeed">
2+ <label class="grid-13">Existing external feeds:</label>
3+ <div class="grid-13">
4+ <ul>
5+ {% if allow_config %}
6+ {% for feed in feeds_list %}
7+ <li><input type="checkbox" name="exfeed" value="{{ feed }}" checked="checked"><span>{{ feed }}</span></li>
8+ {% endfor %}
9+ {% else %}
10+ {% for feed in feeds_list %}
11+ <li><span>{{ feed.value }}</span></li>
12+ {% endfor %}
13+ {% endif %}
14+ </div>
15+ {% if allow_config %}
16+ <div class="grid-13">&nbsp;</div>
17+ <div class="grid-13">
18+ <input type="text" name="new_exfeed" id="new_exfeed" value=""/>
19+ </div>
20+ <div class="grid-13">&nbsp;</div>
21+ <hr>
22+ <div class="grid-13">&nbsp;</div>
23+ <div class="grid-13">
24+ <input type="submit" value="Save"/>
25+ </div>
26+ {% endif %}
27+</form>