def listen_featurelet_installed(proj, event): """need to create a default discussion mailing list and subscribe all project members to the list""" proj_id = proj.getId() proj_title = proj.Title().decode('utf-8') ml_id = '%s-discussion' % proj_id address = '%s%s' % (ml_id, getSuffix()) # need to verify that a mailing list with this name isn't already created portal = getToolByName(proj, 'portal_url').getPortalObject() ll = getUtility(IListLookup, context=portal) if ll.getListForAddress(address) is not None: # XXX we'll just silently fail for now, not sure what else we can do # psm maybe? return # XXX we need a request utility request = proj.REQUEST # invokeFactory depends on the title being set in the request ml_title = u'%s discussion' % (proj_title) request.set('title', ml_title) lists_folder = proj.lists.aq_inner lists_folder.invokeFactory(OpenMailingList.portal_type, ml_id) ml = lists_folder[ml_id] ml.mailto = ml_id ms_tool = getToolByName(proj, 'portal_membership') cur_mem_id = unicode(ms_tool.getAuthenticatedMember().getId()) ml.managers = (cur_mem_id,) ml.setDescription(translate(_(u'discussion_list_desc', u'Discussion list for this ${project_noun}, consisting of all ${project_noun} members.', mapping={'project_noun':project_noun()}), context=request)) # http://www.openplans.org/projects/opencore/lists/opencore-dev/archive/2009/04/1239543233615/forum_view from zope.interface import alsoProvides alsoProvides(ml, ISyncWithProjectMembership) notify(ObjectCreatedEvent(ml)) memlist = IWriteMembershipList(ml) cat = getToolByName(portal, 'portal_catalog') teams = getToolByName(portal, 'portal_teams') try: team = teams[proj_id] except KeyError: # if the team doesn't exist # then nobody is on the project yet # so we only need to subscribe the current user memlist.subscribe(cur_mem_id) return active_states = teams.getDefaultActiveStates() team_path = '/'.join(team.getPhysicalPath()) mships = cat(portal_type='OpenMembership', review_state=active_states, path=team_path) for mship in mships: memlist.subscribe(mship.getId)
def __set__(self, inst, value): # something weird happening w/ name mangling here, self.__field # doesn't work field = self._FieldProperty__field.bind(inst) field.validate(value) name = self._FieldProperty__name if field.readonly and inst.__dict__.has_key(name): raise ValueError(name, 'field is readonly') suffix = getSuffix() inst.__dict__[name] = value.strip() + suffix
def __call__(self): suffix = getSuffix() value = self._getFormValue() if value.endswith(suffix): value = value[:-len(suffix)] return renderElement(self.tag, suffix, type=self.type, name=self.name, id=self.name, value=value, cssClass=self.cssClass, extra=self.extra)
def post(self): raw_data = self.request.body json_data = json.loads(raw_data) self.finish() try: js = json.loads(json_data) sorted_meetings = sorted(js['current'], key=lambda k: k['ts']) except ValueError: raise tornado.httpserver._BadRequestException( "Invalid JSON structure." ) # display today now = datetime.now() dayint = datetime.now().day suffix = getSuffix(dayint) today = "%s %s%s, %s" % (now.strftime( "%A %B"), dayint, suffix, datetime.now().year) mlist = [] postme = True for i, item in enumerate(sorted_meetings[0:15]): try: if item['res_general_desc'] == None: item['res_general_desc'] = "Untitled Meeting" # logging logger.debug("------------" + item['res_general_desc']) logger.debug(item['room_name']) logger.debug(item['displaytime']) d = {} title = "title_%s" % i room = "room_%s" % i t = "time_%s" % i try: floorsfx = getSuffix( int(item['room_floor']) ) room_floor = "%s, %s%s floor" %(item['room_name'], item['room_floor'], floorsfx) except Exception as e: room_floor = "%s" %(item['room_name']) # logging warningmsg = "we don't know the floor for that room | %s | %s" %(e.message, e.args) logger.warn(warningmsg) d = {title: item['res_general_desc'], room: room_floor, t: item['displaytime'], } mlist.append(d) except Exception as e: warningmsg = "%s | %s" %(e.message, e.args) # logging logger.warn(warningmsg) postme = False if (postme): for d in mlist: for k, v in d.items(): msg = {"id": k, "value": v} for c in theclients: c.write_message(msg) # now, the metadata for c in theclients: c.write_message( {"id": "lastupdate", "value": "last update: " + js["lastupdate"]}) c.write_message({"id": "display_today", "value": today})