Author: cabraham Date: 2007-12-17 16:19:19 -0500 (Mon, 17 Dec 2007) New Revision: 11937
Added: opencore/trunk/opencore/stats/configure.zcml opencore/trunk/opencore/stats/stats.pt opencore/trunk/opencore/stats/stats.py Modified: opencore/trunk/opencore/configuration/configure.zcml Log: merged stats branch -r9357:9406 to trunk Modified: opencore/trunk/opencore/configuration/configure.zcml =================================================================== --- opencore/trunk/opencore/configuration/configure.zcml 2007-12-17 20:52:55 UTC (rev 11936) +++ opencore/trunk/opencore/configuration/configure.zcml 2007-12-17 21:19:19 UTC (rev 11937) @@ -19,5 +19,6 @@ <include package="opencore.redirect" /> <include package="opencore.utility" /> <include package="topp.featurelets" /> + <include package="opencore.stats" /> </configure> Copied: opencore/trunk/opencore/stats/configure.zcml (from rev 9406, opencore/branches/stats/opencore/stats/configure.zcml) =================================================================== --- opencore/trunk/opencore/stats/configure.zcml (rev 0) +++ opencore/trunk/opencore/stats/configure.zcml 2007-12-17 21:19:19 UTC (rev 11937) @@ -0,0 +1,14 @@ +<configure xmlns="http://namespaces.zope.org/zope" + xmlns:browser="http://namespaces.zope.org/browser" + xmlns:five="http://namespaces.zope.org/five"> + + <browser:page + for="Products.CMFPlone.interfaces.IPloneSiteRoot" + class=".stats.StatsView" + permission="cmf.ManagePortal" + name="stats" + template="stats.pt" + /> + + +</configure> Copied: opencore/trunk/opencore/stats/stats.pt (from rev 9406, opencore/branches/stats/opencore/stats/stats.pt) =================================================================== --- opencore/trunk/opencore/stats/stats.pt (rev 0) +++ opencore/trunk/opencore/stats/stats.pt 2007-12-17 21:19:19 UTC (rev 11937) @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head profile="http://gmpg.org/xfn/11"> + <link rel="stylesheet" href="/++resource++css/themes/openplans.css" type="text/css" media="all" /> + <link rel="stylesheet" href="/++resource++css/opencore.css" type="text/css" media="all" /> + <title>Portal Stats</title> + </head> + <body> + <h1>Portal Stats</h1> + <table border="1" cellspacing="0"> + <tr> + <td></td> + <td>total</td> + <td>active</td> + </tr> + <tr> + <td>projects</td> + <td tal:content="python: len(view.get_projects())" /> + <td tal:content="python: len(view.get_active_projects())" /> + </tr> + <tr> + <td>members</td> + <td tal:content="python: len(view.get_members())" /> + <td tal:content="python: len(view.get_active_members())" /> + </tr> + <tr> + <td>mailing lists</td> + <td tal:content="python: len(view.get_mailing_lists())" /> + <td tal:content="python: len(view.get_active_mailing_lists())" /> + </tr> + </table> + </body> +</html> \ No newline at end of file Copied: opencore/trunk/opencore/stats/stats.py (from rev 9406, opencore/branches/stats/opencore/stats/stats.py) =================================================================== --- opencore/trunk/opencore/stats/stats.py (rev 0) +++ opencore/trunk/opencore/stats/stats.py 2007-12-17 21:19:19 UTC (rev 11937) @@ -0,0 +1,72 @@ +from Products.CMFPlone.interfaces import IPloneSiteRoot +from Products.Five import BrowserView +from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile +from Products.CMFCore.utils import getToolByName +import DateTime +from Products.listen.interfaces import ISearchableArchive +from zope.component import queryUtility + + +class StatsView(BrowserView): + + def __init__(self, context, request): + self.context = context + self.request = request + self.catalog = getToolByName(self.context, 'portal_catalog') + self.membrane_tool = getToolByName(self.context, 'membrane_tool') + self.expiry_date = DateTime.now()-30 + + def get_projects(self): + query = dict(portal_type='OpenProject') + brains = self.catalog(**query) + return brains + + def get_active_projects(self): + # "active" is defined as having been modified in the last 30 days + projects = self.get_projects() + filtered_projects = [project for project in projects if project.modified > self.expiry_date] + return filtered_projects + + def get_members(self): + query = dict() + brains = self.membrane_tool(**query) + return brains + + def get_active_members(self): + # "active" is defined as having logged in the last 30 days + members = self.get_members() + filtered_members = [] + for mem in members: + mem_obj = mem.getObject() + if mem_obj.getLast_login_time() > self.expiry_date: + filtered_members.append(mem) + return filtered_members + + def get_mailing_lists(self): + query = dict(portal_type='Open Mailing List') + brains = self.catalog(**query) + return brains + + def get_active_mailing_lists(self): + # "active" is defined as having a message in the last 30 days + lists = self.get_mailing_lists() + filtered_lists = [] + for lst in lists: + mail_catalog = queryUtility(ISearchableArchive, context=lst) + latest_date = 0 + if mail_catalog: + query = dict(sort_on='date', + sort_order='descending') + brains = mail_catalog(**query) + latest_date = brains[0].date + if lst.modified > latest_date: + latest_date = lst.modified + if latest_date > self.expiry_date: + filtered_lists.append(lst) + + return filtered_lists + + + + + -- Archive: http://www.openplans.org/projects/opencore/lists/openplans-svn/archive/2007/12/1197926360202 To unsubscribe send an email with subject unsubscribe to [EMAIL PROTECTED] Please contact [EMAIL PROTECTED] for questions.
