diff --git a/browser/resource_macros.pt b/browser/resource_macros.pt
index 523e492..6b47802 100644
--- a/browser/resource_macros.pt
+++ b/browser/resource_macros.pt
@@ -12,9 +12,9 @@
Change Password
+
Edit Filters
diff --git a/organize/personal/browser/configurator.py b/organize/personal/browser/configurator.py
index d791f3a..4951432 100644
--- a/organize/personal/browser/configurator.py
+++ b/organize/personal/browser/configurator.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2008 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
@@ -29,6 +29,7 @@ from zope.cachedescriptors.property import Lazy
from zope.traversing.browser.absoluteurl import absoluteURL
from cybertools.browser.configurator import ViewConfigurator, MacroViewProperty
+from cybertools.meta.interfaces import IOptions
from loops.organize.party import getPersonForUser
from loops.util import _
@@ -44,17 +45,32 @@ class PortletConfigurator(ViewConfigurator):
self.context = context
self.request = request
+ @property
+ def viewProperties(self):
+ return self.favorites + self.filters
+
+ @Lazy
+ def records(self):
+ return self.context.getLoopsRoot().getRecordManager()
+
+ @Lazy
+ def person(self):
+ return getPersonForUser(self.context, self.request)
+
def hasFavorites(self):
- records = self.context.getLoopsRoot().getRecordManager()
- if records is not None:
- return 'favorites' in records
+ if self.records is not None:
+ return 'favorites' in self.records
+ return False
+
+ def hasFilters(self):
+ if (IOptions(self.context.getLoopsRoot()).organize.useFilters and
+ self.records is not None):
+ return 'filters' in self.records
return False
@property
- def viewProperties(self):
- if (not self.hasFavorites()
- or getPersonForUser(self.context, self.request) is None):
- #if IUnauthenticatedPrincipal.providedBy(self.request.principal):
+ def favorites(self):
+ if (not self.hasFavorites() or self.person is None):
return []
favorites = MacroViewProperty(self.context, self.request)
favorites.setParams(dict(
@@ -67,3 +83,17 @@ class PortletConfigurator(ViewConfigurator):
))
return [favorites]
+ @property
+ def filters(self):
+ if (not self.hasFilters() or self.person is None):
+ return []
+ filters = MacroViewProperty(self.context, self.request)
+ filters.setParams(dict(
+ slot='portlet_right',
+ identifier='loops.organize.filters',
+ title=_(u'Filters'),
+ subMacro=personal_macros.macros['filters_portlet'],
+ priority=195,
+ url=absoluteURL(self.context, self.request) + '/@@filters.html',
+ ))
+ return [filters]
diff --git a/organize/personal/browser/configure.zcml b/organize/personal/browser/configure.zcml
index 3f38e27..e91aa60 100644
--- a/organize/personal/browser/configure.zcml
+++ b/organize/personal/browser/configure.zcml
@@ -20,4 +20,13 @@
+
+
+
+
+
+
diff --git a/organize/personal/browser/filter.py b/organize/personal/browser/filter.py
new file mode 100644
index 0000000..8bcabf3
--- /dev/null
+++ b/organize/personal/browser/filter.py
@@ -0,0 +1,87 @@
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+"""
+A view (to be used by listings, portlets, ...) for filters.
+
+$Id$
+"""
+
+from zope import component
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.cachedescriptors.property import Lazy
+
+from cybertools.browser.configurator import ViewConfigurator, MacroViewProperty
+from loops.browser.node import NodeView
+from loops.organize.party import getPersonForUser
+from loops.organize.personal.interfaces import IFilters
+from loops import util
+
+
+personal_macros = ViewPageTemplateFile('personal_macros.pt')
+
+
+class FilterView(NodeView):
+
+ @Lazy
+ def item(self):
+ return self
+
+ @Lazy
+ def person(self):
+ return getPersonForUser(self.context, self.request)
+
+ @Lazy
+ def filters(self):
+ records = self.loopsRoot.getRecordManager()
+ if records is not None:
+ storage = records.get('filters')
+ if storage is not None:
+ return IFilters(storage)
+ return None
+
+ def listFilters(self):
+ if self.filters is None:
+ return
+ for uid in self.filters.list(self.person):
+ obj = util.getObjectForUid(uid)
+ if obj is not None:
+ yield dict(url=self.getUrlForTarget(obj),
+ uid=uid,
+ title=obj.title,
+ description=obj.description,
+ object=obj)
+
+ def add(self):
+ if self.filters is None:
+ return
+ uid = self.request.get('id')
+ if not uid:
+ return
+ obj = util.getObjectForUid(uid)
+ self.filters.add(obj, self.person)
+ self.request.response.redirect(self.virtualTargetUrl)
+
+ def deactivate(self):
+ if self.filters is None:
+ return
+ id = self.request.get('id')
+ if not id:
+ return
+ self.filters.deactivate(id)
+ self.request.response.redirect(self.virtualTargetUrl)
diff --git a/organize/personal/browser/personal_macros.pt b/organize/personal/browser/personal_macros.pt
index ec5186e..4ed1250 100644
--- a/organize/personal/browser/personal_macros.pt
+++ b/organize/personal/browser/personal_macros.pt
@@ -22,3 +22,29 @@
i18n:attributes="title">Add to Favorites
+
+
+