def discussion_answer(self): content_type = 'DiscussionPost' ai = find_interface(self.context, IAgendaItem) add_permission = self.api.content_types_add_perm(content_type) if not has_permission(add_permission, ai, self.request): raise HTTPForbidden("You're not allowed to add '%s' in this context." % content_type) schema_name = self.api.get_schema_name(content_type, 'add') schema = createSchema(schema_name).bind(context = self.context, request = self.request, api = self.api) url = self.request.resource_url(self.context, 'answer') form = Form(schema, action=url, buttons=(button_add,), formid="answer-form-%s" % self.context.uid, use_ajax=False, ajax_options=ajax_options) self.api.register_form_resources(form) self.response['user_image_tag'] = self.api.user_profile.get_image_tag(request = self.request) self.response['content_type'] = content_type post = self.request.POST if 'add' in post: controls = post.items() try: #appstruct is deforms convention. It will be the submitted data in a dict. appstruct = form.validate(controls) except ValidationFailure, e: self.response['form'] = e.render() if self.request.is_xhr: return Response(render("templates/ajax_edit.pt", self.response, request = self.request)) return self.response kwargs = {} kwargs['text'] = appstruct['text'] if self.api.userid: kwargs['creators'] = [self.api.userid] ai = find_interface(self.context, IAgendaItem) obj = createContent(content_type, **kwargs) name = generate_slug(ai, obj.title) ai[name] = obj #Success, redirect url = self.request.resource_url(ai, anchor=obj.uid) if self.request.is_xhr: return Response(headers = [('X-Relocate', url)]) return HTTPFound(location=url)
def process_inline_add_form(self): """ Inline add form. Note the somewhat odd permissions on the view configuration. The actual permission check for each content type is preformed later. """ content_type = self.request.GET['content_type'] add_permission = self.api.content_types_add_perm(content_type) if not has_permission(add_permission, self.context, self.request): raise HTTPForbidden("You're not allowed to add '%s' in this context." % content_type) bind_data = dict(context = self.context, request = self.request, api = self.api) form = inline_add_form(self.api, content_type, bind_data) post = self.request.POST if 'add' in post: controls = post.items() try: #appstruct is deforms convention. It will be the submitted data in a dict. appstruct = form.validate(controls) except ValidationFailure, e: msg = self.api.translate(_(u"There were errors so your post hasn't been submitted yet.")) html = u""" <script type="text/javascript"> flash_message("%s", 'error', true, 3, true); </script> """ % msg html += e.render() return Response(html) kwargs = {} kwargs.update(appstruct) if self.api.userid: kwargs['creators'] = [self.api.userid] obj = createContent(content_type, **kwargs) name = generate_slug(self.context, obj.title) self.context[name] = obj #Prep js response tag = self.request.GET.get('tag', '') url = self.request.resource_url(self.context, query = {'tag': tag}) if content_type == 'Proposal': area = 'proposals' else: area = 'discussions' txt = self.api.translate(_(u"Posting...")) response = '<div><img src="/static/images/spinner.gif" />%s</div>' % txt response += '<script type="text/javascript">' response += "reload_ai_listings('%s', ['%s']);" % (url, area) response += "mark_as_read();" response += '</script>' return Response(response)
def create_reject_proposal(self): add_reject_proposal = self.get_field_value('add_reject_proposal', None) reject_proposal_uid = self.get_field_value('reject_proposal_uid', None) #Only add if it doesn't exist. if add_reject_proposal and reject_proposal_uid is None: proposal_title = self.get_field_value('reject_proposal_title') proposal = createContent('Proposal', title = proposal_title) self.set_field_value('reject_proposal_uid', proposal.uid) # add rejection proposal to agenda item agenda_item = find_interface(self, IAgendaItem) name = generate_slug(agenda_item, proposal.title) agenda_item[name] = proposal # add proposal to polls proposal uids proposal_uids = set(self.proposal_uids) proposal_uids.add(proposal.uid) self.proposal_uids = proposal_uids
def create_reject_proposal(self): add_reject_proposal = self.get_field_value('add_reject_proposal', None) reject_proposal_uid = self.get_field_value('reject_proposal_uid', None) #Only add if it doesn't exist. if add_reject_proposal and reject_proposal_uid is None: proposal_title = self.get_field_value('reject_proposal_title') proposal = createContent('Proposal', title=proposal_title) self.set_field_value('reject_proposal_uid', proposal.uid) # add rejection proposal to agenda item agenda_item = find_interface(self, IAgendaItem) name = generate_slug(agenda_item, proposal.title) agenda_item[name] = proposal # add proposal to polls proposal uids proposal_uids = set(self.proposal_uids) proposal_uids.add(proposal.uid) self.proposal_uids = proposal_uids
def _import_participants(self, input, roles): # the value shoud be in unicode from colander and csv wants ascii or utf-8 input = input.encode('UTF-8') participants = csv.reader(StringIO(input), delimiter=';', quotechar='"') output = [] for row in participants: appstruct = {} userid = unicode(row[0]) if len(row) > 1 and row[1]: appstruct['password'] = unicode(row[1]) else: appstruct['password'] = self._generate_password() if len(row) > 2 and row[2]: appstruct['email'] = unicode(row[2]) else: appstruct['email'] = u"" if len(row) > 3 and row[3]: appstruct['first_name'] = row[3].decode('UTF-8') else: appstruct['first_name'] = u"" if len(row) > 4 and row[4]: appstruct['last_name'] = row[4].decode('UTF-8') else: appstruct['last_name'] = u"" # add user to root from betahaus.pyracont import generate_slug userid = generate_slug(self.api.root.users, userid) user = createContent('User', creators=[userid], **appstruct) self.api.root.users[userid] = user # add user to meeting self.context.add_groups(userid, roles, event = True) appstruct['userid'] = userid output.append(appstruct) return output
def generate_slug(self, text, limit=40): """ Suggest a name for content that will be added. text is a title or similar to be used. """ return generate_slug(self.context, text, limit)
def populate_meeting(self, meeting): for item in self.get_field_value("agenda_items", ()): obj = createContent("AgendaItem", **item) slug = generate_slug(meeting, obj.title) meeting[slug] = obj
def populate_meeting(self, meeting): for item in self.get_field_value('agenda_items', ()): obj = createContent('AgendaItem', **item) slug = generate_slug(meeting, obj.title) meeting[slug] = obj