コード例 #1
0
    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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: poll.py プロジェクト: tobsan/voteit.core
 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
コード例 #4
0
    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
コード例 #5
0
 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
コード例 #6
0
ファイル: base_edit.py プロジェクト: tobsan/voteit.core
 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)
コード例 #7
0
ファイル: base_edit.py プロジェクト: zhangqiang99/voteit.core
 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)
コード例 #8
0
ファイル: agenda_template.py プロジェクト: VoteIT/voteit.core
 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
コード例 #9
0
 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