Esempio n. 1
0
    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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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
Esempio n. 6
0
 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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
    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
Esempio n. 11
0
    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