def get_context_data(self, *args, **kwargs): doc = self.object context_data = super(DocumentDetailView, self).get_context_data(*args, **kwargs) context_data.update({'polity': self.polity}) if 'v' in self.request.GET: if self.request.GET['v'] == 'new': context_data['editor_enabled'] = True current_content = DocumentContent() current_content.order = 0 inherited_content = self.object.preferred_version() if inherited_content: current_content.text = inherited_content.text else: try: current_content = get_object_or_404( DocumentContent, document=doc, order=int(self.request.GET['v'])) except ValueError: raise Exception('Bad "v(ersion)" parameter') else: current_content = self.object.preferred_version() try: issue = current_content.issue except Issue.DoesNotExist: issue = None user_is_member = self.request.user in self.polity.members.all() user_is_officer = self.request.user in self.polity.officers.all() buttons = { 'propose_change': False, 'put_to_vote': False, } if not issue or not issue.is_voting(): if current_content.status == 'accepted': if user_is_member: buttons['propose_change'] = 'enabled' elif current_content.status == 'proposed': if user_is_officer and not issue: buttons['put_to_vote'] = 'disabled' if doc.has_open_issue( ) else 'enabled' context_data['current_content'] = current_content context_data['selected_diff_documentcontent'] = doc.preferred_version context_data['issue'] = issue context_data['buttons'] = buttons context_data['facebook_title'] = '%s (%s)' % (self.object.name, self.object.polity.name) context_data.update(csrf(self.request)) return context_data
def document_propose_change(request): ctx = {"ok": True} document = get_object_or_404(Document, id=request.POST.get("document_id", 0)) try: text = request.POST['text'] except KeyError: raise Exception('Missing "text"') predecessor = document.preferred_version() if predecessor and predecessor.text.strip() == text.strip(): # This error message won't show anywhere. The same error is caught client-side to produce the error message. raise Exception('Change proposal must differ from its predecessor') content = DocumentContent() content.user = request.user content.document = document content.text = text content.comments = request.POST.get('comments', '') content.predecessor = predecessor # TODO: Change this to a query that requests the maximum 'order' and adds to it. try: content.order = DocumentContent.objects.filter(document=document).order_by('-order')[0].order + 1 except IndexError: pass content.save() ctx['order'] = content.order return ctx
def document_propose_change(request): ctx = {"ok": True} document = get_object_or_404(Document, id=request.POST.get("document_id", 0)) try: text = request.POST['text'] except KeyError: raise Exception('Missing "text"') try: diff = request.POST['diff'] except KeyError: raise Exception('Missing "diff"') try: patch = request.POST['patch'] except KeyError: raise Exception('Missing "patch"') content = DocumentContent() content.document = document content.user = request.user content.comments = request.POST.get('comments', '') content.text = text content.diff = diff content.patch = patch try: content.order = DocumentContent.objects.filter(document=document).order_by('-order')[0].order + 1 except IndexError: pass content.save() ctx['order'] = content.order return ctx
def get_context_data(self, *args, **kwargs): doc = self.object context_data = super(DocumentDetailView, self).get_context_data(*args, **kwargs) context_data.update({'polity': self.polity}) if 'v' in self.request.GET: if self.request.GET['v'] == 'new': context_data['editor_enabled'] = True current_content = DocumentContent() current_content.order = 0 inherited_content = self.object.preferred_version() if inherited_content: current_content.text = inherited_content.text else: try: current_content = get_object_or_404(DocumentContent, document=doc, order=int(self.request.GET['v'])) except ValueError: raise Exception('Bad "v(ersion)" parameter') else: current_content = self.object.preferred_version() try: issue = current_content.issue except Issue.DoesNotExist: issue = None user_is_member = self.request.user in self.polity.members.all() user_is_officer = self.request.user in self.polity.officers.all() buttons = { 'propose_change': False, 'put_to_vote': False, } if not issue or not issue.is_voting(): if current_content.status == 'accepted': if user_is_member: buttons['propose_change'] = 'enabled' elif current_content.status == 'proposed': if user_is_officer and not issue: buttons['put_to_vote'] = 'disabled' if doc.has_open_issue() else 'enabled' context_data['current_content'] = current_content context_data['selected_diff_documentcontent'] = doc.preferred_version context_data['issue'] = issue context_data['buttons'] = buttons context_data['facebook_title'] = '%s (%s)' % (self.object.name, self.object.polity.name) context_data.update(csrf(self.request)) return context_data
def get_context_data(self, *args, **kwargs): doc = self.object context_data = super(DocumentDetailView, self).get_context_data(*args, **kwargs) context_data.update({'polity': self.polity}) context_data[ 'user_is_member'] = self.request.user in self.polity.members.all() if 'v' in self.request.GET: try: context_data['current_content'] = get_object_or_404( DocumentContent, document=doc, order=int(self.request.GET['v'])) except ValueError: if self.request.GET['v'] == 'new': context_data['proposing'] = True try: context_data[ 'current_content'] = DocumentContent.objects.filter( document=doc).order_by('-order')[0] except IndexError: context_data['current_content'] = DocumentContent() else: raise Exception('Bad "v(ersion)" parameter') else: context_data['current_content'] = self.object.get_content() context_data.update(csrf(self.request)) return context_data
def document_propose_change(request): ctx = {"ok": True} version_num = int(request.POST.get('v', 0)) document = get_object_or_404(Document, id=request.POST.get("document_id", 0)) try: text = request.POST['text'] except KeyError: raise Exception('Missing "text"') if version_num == 0: predecessor = document.preferred_version() if predecessor and predecessor.text.strip() == text.strip(): # This error message won't show anywhere. The same error is caught client-side to produce the error message. raise Exception('Change proposal must differ from its predecessor') content = DocumentContent() content.user = request.user content.document = document content.predecessor = predecessor content.text = text content.comments = request.POST.get('comments', '') # TODO: Change this to a query that requests the maximum 'order' and adds to it. try: content.order = DocumentContent.objects.filter( document=document).order_by('-order')[0].order + 1 except IndexError: pass content.save() else: try: content = DocumentContent.objects.get(document=document, user=request.user.id, order=version_num, status='proposed', issue=None) content.text = text content.comments = request.POST.get('comments', '') content.save() except DocumentContent.DoesNotExist: raise Exception( 'The user "%s" maliciously tried changing document "%s", version %d' % (request.user, document, version_num)) ctx['order'] = content.order return ctx
def document_propose_change(request): ctx = {"ok": True} document = get_object_or_404(Document, id=request.POST.get("document_id", 0)) try: text = request.POST['text'] except KeyError: raise Exception('Missing "text"') try: diff = request.POST['diff'] except KeyError: raise Exception('Missing "diff"') try: patch = request.POST['patch'] except KeyError: raise Exception('Missing "patch"') content = DocumentContent() content.document = document content.user = request.user content.comments = request.POST.get('comments', '') content.text = text content.diff = diff content.patch = patch try: content.order = DocumentContent.objects.filter( document=document).order_by('-order')[0].order + 1 except IndexError: pass content.save() ctx['order'] = content.order return ctx
def document_propose_change(request): ctx = {"ok": True} version_num = int(request.POST.get('v', 0)) document = get_object_or_404(Document, id=request.POST.get("document_id", 0)) try: text = request.POST['text'] except KeyError: raise Exception('Missing "text"') if version_num == 0: predecessor = document.preferred_version() if predecessor and predecessor.text.strip() == text.strip(): # This error message won't show anywhere. The same error is caught client-side to produce the error message. raise Exception('Change proposal must differ from its predecessor') content = DocumentContent() content.user = request.user content.document = document content.predecessor = predecessor content.text = text content.comments = request.POST.get('comments', '') # TODO: Change this to a query that requests the maximum 'order' and adds to it. try: content.order = DocumentContent.objects.filter(document=document).order_by('-order')[0].order + 1 except IndexError: pass content.save() else: try: content = DocumentContent.objects.get( document=document, user=request.user.id, order=version_num, status='proposed', issue=None ) content.text = text content.comments = request.POST.get('comments', '') content.save() except DocumentContent.DoesNotExist: raise Exception('The user "%s" maliciously tried changing document "%s", version %d' % ( request.user, document, version_num )) ctx['order'] = content.order return ctx
def get_context_data(self, *args, **kwargs): doc = self.object context_data = super(DocumentDetailView, self).get_context_data(*args, **kwargs) context_data.update({'polity': self.polity}) # Request variables taken together action = self.request.GET.get('action', '') try: version_num = int(self.request.GET.get('v', 0)) except ValueError: raise Exception('Bad "v(ersion)" parameter') # If version_num is not specified, we want the "preferred" version if version_num > 0: current_content = get_object_or_404(DocumentContent, document=doc, order=version_num) else: current_content = doc.preferred_version() issue = None if current_content is not None and hasattr(current_content, 'issue'): issue = current_content.issue if action == 'new': context_data['editor_enabled'] = True current_content = DocumentContent() current_content.order = 0 current_content.predecessor = doc.preferred_version() if current_content.predecessor: current_content.text = current_content.predecessor.text elif action == 'edit': if current_content.user.id == self.request.user.id and current_content.status == 'proposed' and issue is None: context_data['editor_enabled'] = True user_is_member = self.request.user in self.polity.members.all() user_is_officer = self.request.user in self.polity.officers.all() buttons = { 'propose_change': False, 'put_to_vote': False, 'edit_proposal': False, } if not issue or not issue.is_voting(): if current_content.status == 'accepted': if user_is_member: buttons['propose_change'] = 'enabled' elif current_content.status == 'proposed': if user_is_officer and not issue: buttons['put_to_vote'] = 'disabled' if doc.has_open_issue() else 'enabled' if current_content.user_id == self.request.user.id: buttons['edit_proposal'] = 'disabled' if issue is not None else 'enabled' context_data['action'] = action context_data['current_content'] = current_content context_data['selected_diff_documentcontent'] = doc.preferred_version context_data['issue'] = issue context_data['buttons'] = buttons context_data['facebook_title'] = '%s (%s)' % (self.object.name, self.object.polity.name) context_data.update(csrf(self.request)) return context_data
def get_context_data(self, *args, **kwargs): doc = self.object context_data = super(DocumentDetailView, self).get_context_data(*args, **kwargs) context_data.update({'polity': self.polity}) # Request variables taken together action = self.request.GET.get('action', '') try: version_num = int(self.request.GET.get('v', 0)) except ValueError: raise Exception('Bad "v(ersion)" parameter') # If version_num is not specified, we want the "preferred" version if version_num > 0: current_content = get_object_or_404(DocumentContent, document=doc, order=version_num) else: current_content = doc.preferred_version() issue = None if current_content is not None and hasattr(current_content, 'issue'): issue = current_content.issue # If current_content is None here, that means the document has no # content at all, which is a bit weird unless we're creating a new # one... if action == 'new': context_data['editor_enabled'] = True current_content = DocumentContent() current_content.order = 0 current_content.predecessor = doc.preferred_version() if current_content.predecessor: current_content.text = current_content.predecessor.text elif action == 'edit': if current_content.user.id == self.request.user.id and current_content.status == 'proposed' and issue is None: context_data['editor_enabled'] = True user_is_member = self.polity.is_member(self.request.user) user_is_officer = self.polity.is_officer(self.request.user) buttons = { 'propose_change': False, 'put_to_vote': False, 'edit_proposal': False, } if ((not issue or not issue.is_voting()) and current_content is not None): if current_content.status == 'accepted': if user_is_member: buttons['propose_change'] = 'enabled' elif current_content.status == 'proposed': if user_is_officer and not issue: buttons['put_to_vote'] = 'disabled' if doc.has_open_issue() else 'enabled' if current_content.user_id == self.request.user.id: buttons['edit_proposal'] = 'disabled' if issue is not None else 'enabled' context_data['action'] = action context_data['current_content'] = current_content context_data['selected_diff_documentcontent'] = doc.preferred_version context_data['issue'] = issue context_data['buttons'] = buttons context_data.update(csrf(self.request)) return context_data