diff --git a/CHANGES.txt b/CHANGES.txt
index cbe93f5..e84ca84 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,12 @@ Change Log
$Id$
+1.1
+---
+
+- portal page with - now fully editable - portal links
+- calendar portlet
+
1.0
---
diff --git a/browser/common.py b/browser/common.py
index 5bc1c9a..af079a6 100644
--- a/browser/common.py
+++ b/browser/common.py
@@ -277,10 +277,18 @@ class BaseView(GenericView, I18NView):
return self.adapted.description
@Lazy
- def dcTitle(self):
+ def dublincore(self):
zdc = IZopeDublinCore(self.context)
zdc.languageInfo = self.languageInfo
- return zdc.title or self.title
+ return zdc
+
+ @Lazy
+ def dcTitle(self):
+ return self.dublincore.title or self.title
+
+ @Lazy
+ def dcDescription(self):
+ return self.dublincore.description or self.description
@Lazy
def headTitle(self):
diff --git a/system/README.txt b/system/README.txt
index ab90402..e1ea5d0 100644
--- a/system/README.txt
+++ b/system/README.txt
@@ -46,6 +46,13 @@ In addition to the application site we need a loops system management site.
[u'jobs']
+Portal Links
+============
+
+ >>> from loops.system.site.link import Link
+ >>> from loops.system.site.browser import PortalPage
+
+
Agents and Jobs
===============
diff --git a/system/site/browser.py b/system/site/browser.py
index 5da05a1..da43553 100644
--- a/system/site/browser.py
+++ b/system/site/browser.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
+# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -28,8 +28,11 @@ from zope.security import canAccess
from zope.traversing.api import getParent, getRoot, traverse
from zope.traversing.browser import absoluteURL
-from loops.browser.common import BaseView
+from cybertools.browser.action import actions
+from loops.browser.action import DialogAction
+from loops.browser.common import BaseView, adapted
from loops.browser.concept import ConceptView
+from loops.system.site.interfaces import ILink
from loops import util
from loops.util import _
@@ -37,6 +40,66 @@ from loops.util import _
site_macros = ViewPageTemplateFile('view_macros.pt')
+actions.register('createPortalLink', 'portlet', DialogAction,
+ title=_(u'Create Link...'),
+ description=_(u'Create a link to a loops site.'),
+ viewName='create_concept.html',
+ dialogName='createPortalLink',
+ typeToken='.loops/concepts/portal_link',
+ fixedType=True,
+ innerForm='inner_concept_form.html',
+)
+
+actions.register('editPortalLink', 'portlet', DialogAction,
+ title=_(u'Edit Link...'),
+ description=_(u'Modify link.'),
+ viewName='edit_concept.html',
+ dialogName='editPortalLink',
+)
+
+class PortalPage(ConceptView):
+ """ A query view linking to pages on other loops sites.
+ """
+
+ @Lazy
+ def site_macros(self):
+ return site_macros.macros
+
+ @property
+ def macro(self):
+ return self.site_macros['portal_page']
+
+ @Lazy
+ def root(self):
+ return getRoot(self.context)
+
+ @Lazy
+ def portalLinks(self):
+ result = []
+ for c in self.context.getChildren():
+ link = adapted(c)
+ if ILink.providedBy(link):
+ site = traverse(self.root, link.site)
+ path = link.path or 'home'
+ target = traverse(site, 'views/' + path)
+ if canAccess(target, 'title'):
+ siteInfo = SiteDetails(target, self.request)
+ siteInfo.title = link.title
+ if link.description:
+ siteInfo.description = link.description
+ if link.url:
+ siteInfo.url = link.url
+ result.append(siteInfo)
+ return result
+
+
+class SiteDetails(BaseView):
+
+ pass
+
+
+# old loops_sites.html view
+
class SitesListing(ConceptView):
@Lazy
@@ -61,7 +124,3 @@ class SitesListing(ConceptView):
result.append(SiteDetails(s, self.request))
return result
-
-class SiteDetails(BaseView):
-
- pass
diff --git a/system/site/configure.zcml b/system/site/configure.zcml
index 5d6ebe1..507909b 100644
--- a/system/site/configure.zcml
+++ b/system/site/configure.zcml
@@ -5,6 +5,24 @@
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="loops">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
loops Sites
-
diff --git a/version.py b/version.py
index e1305bf..c201bea 100644
--- a/version.py
+++ b/version.py
@@ -21,7 +21,7 @@ loops version specifications.
"""
revision = '$Id$'
-version = '0.9'
+version = '1.1'
package = 'loops'
from cybertools.util.version import versions