[silva.core.smi][Sylvain Viollon] Add a site configuration scree...

[email protected] Tue, 22 Oct 2013 17:31:20 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Tue Oct 22 17:31:16 2013 +0200
revision:  704:8e6ba8e6a4b8 in silva.core.smi
branch:    2.4
details:   https://hg.infrae.com/silva.core.smi?cmd=changeset;node=8e6ba8e6a4b8
modified:  src/silva/core/smi/about.py src/silva/core/smi/admin.py src/silva/core/smi/admin_templates/configurationscreen.cpt src/silva/core/smi/userinfo.py
added:     src/silva/core/smi/admin.py src/silva/core/smi/admin_templates/configurationscreen.cpt
removed:   
log:       Add a site configuration screen that is a list of services. Services
	forms will now be available inside the SMI.


diffstat:

 src/silva/core/smi/about.py                                |   2 +-
 src/silva/core/smi/admin.py                                |  53 ++++++++++++
 src/silva/core/smi/admin_templates/configurationscreen.cpt |  58 ++++++++++++++
 src/silva/core/smi/userinfo.py                             |   2 +-
 4 files changed, 113 insertions(+), 2 deletions(-)

diffs (143 lines):

diff -r 47f8bcb11871 -r 8e6ba8e6a4b8 src/silva/core/smi/about.py
--- a/src/silva/core/smi/about.py	Wed Oct 09 15:56:03 2013 +0200
+++ b/src/silva/core/smi/about.py	Tue Oct 22 17:31:16 2013 +0200
@@ -40,7 +40,7 @@
 
 class AboutMenu(LinkMenuItem):
     grok.adapts(UserSettingsMenu, Interface)
-    grok.order(10)
+    grok.order(0)
     name = _('About')
     icon = 'about'
     trigger = 'text-overlay'
diff -r 47f8bcb11871 -r 8e6ba8e6a4b8 src/silva/core/smi/admin.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/silva/core/smi/admin.py	Tue Oct 22 17:31:16 2013 +0200
@@ -0,0 +1,53 @@
+
+from Acquisition import aq_parent
+
+from five import grok
+from silva.core.interfaces import IContainer, IRoot
+from silva.core.interfaces import IIconResolver, ISiteManager
+from silva.core.interfaces import ISilvaService, ISilvaInvisibleService
+from silva.translations import translate as _
+from silva.ui import rest
+from silva.ui.menu import MenuItem
+
+from .userinfo import UserSettingsMenu
+
+
+class ConfigurationScreen(rest.PageWithTemplateREST):
+    grok.adapts(rest.Screen, IContainer)
+    grok.name('admin')
+    grok.require('zope2.ViewManagementScreens')
+
+    def get_menu_title(self):
+        return _("Site Configuration")
+
+    def get_services(self, container):
+        services = []
+        for candidate in container.objectValues():
+            if ISilvaService.providedBy(candidate):
+                if not ISilvaInvisibleService.providedBy(candidate):
+                    # We assume service icons are URLs
+                    services.append({
+                            'name': candidate.meta_type,
+                            'icon': self.get_icon(candidate),
+                            'path': self.get_content_path(candidate)})
+        return sorted(services, key=lambda i: i['name'].lower())
+
+    def update(self):
+        self.get_icon = IIconResolver(self.request).get_content_url
+        self.main_services = self.get_services(self.context.get_root())
+        self.local_services = None
+        container = self.context.get_publication()
+        while not IRoot.providedBy(container):
+            if ISiteManager(container).is_site():
+                self.local_services = self.get_services(container)
+                break
+            container = aq_parent(container).get_publication()
+
+
+class ConfiguationMenu(MenuItem):
+    grok.adapts(UserSettingsMenu, IContainer)
+    grok.order(10)
+    grok.require('zope2.ViewManagementScreens')
+    name = _('Site Preferences')
+    icon = 'preferences'
+    screen = ConfigurationScreen
diff -r 47f8bcb11871 -r 8e6ba8e6a4b8 src/silva/core/smi/admin_templates/configurationscreen.cpt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/silva/core/smi/admin_templates/configurationscreen.cpt	Tue Oct 22 17:31:16 2013 +0200
@@ -0,0 +1,58 @@
+<tal:screen>
+  <div class="listing-header">
+    <table>
+      <colgroup>
+        <col width="36" />
+        <col />
+      </colgroup>
+      <tr>
+        <th />
+        <th i18n:translate="">Configuration</th>
+      </tr>
+    </table>
+  </div>
+  <dl class="listing" i18n:domain="silva">
+    <dt i18n:translate="">Global Configuration</dt>
+    <dd>
+      <table>
+        <colgroup>
+          <col width="26" />
+          <col />
+        </colgroup>
+        <tr class="item" tal:repeat="service rest.main_services">
+          <td>
+            <ins class="icon"
+                 style="background:url(${service.icon}) no-repeat center center;" />
+          </td>
+          <td>
+            <a class="open-screen" rel="admin" href="${service.path}"
+               tal:content="service.name">Service</a>
+          </td>
+        </tr>
+      </table>
+    </dd>
+    <tal:local tal:condition="rest.local_services">
+      <dt i18n:translate="">Local Configuration</dt>
+      <dd>
+        <table>
+          <colgroup>
+            <col width="26" />
+            <col />
+          </colgroup>
+          <tr class="item" tal:repeat="service rest.local_services">
+            <td>
+              <ins class="icon"
+                   style="background:url(${service.icon}) no-repeat center center;" />
+            </td>
+            <td>
+              <a class="open-screen" rel="admin" href="${service.path}"
+                 tal:content="service.name">Service</a>
+            </td>
+          </tr>
+        </table>
+      </dd>
+    </tal:local>
+  </dl>
+  <div class="listing-footer">
+  </div>
+</tal:screen>
diff -r 47f8bcb11871 -r 8e6ba8e6a4b8 src/silva/core/smi/userinfo.py
--- a/src/silva/core/smi/userinfo.py	Wed Oct 09 15:56:03 2013 +0200
+++ b/src/silva/core/smi/userinfo.py	Tue Oct 22 17:31:16 2013 +0200
@@ -126,7 +126,7 @@
 class PreferencesMenu(LinkMenuItem):
     grok.adapts(UserSettingsMenu, Interface)
     grok.order(5)
-    name = _('Preferences')
+    name = _('User Preferences')
     icon = 'preferences'
     trigger = 'form-popup'