コード例 #1
0
 def check(self, request, proposal_id):
     proposal = get_object_or_404(CapabilityProposal, id=proposal_id)
     if not proposal.capability.organization.character_is_member(
             request.hero):
         messages.error(request, "You cannot do that", "danger")
         return redirect_back(request, reverse('character:character_home'),
                              error_message="You cannot do that")
コード例 #2
0
def conquest_action(request, unit_id):
    unit = get_object_or_404(
        WorldUnit,
        id=unit_id,
        owner_character=request.hero
    )
    tile_event = get_object_or_404(
        TileEvent,
        active=True,
        type=TileEvent.CONQUEST,
        tile=unit.location.tile,
        organization_id=request.POST.get('conqueror_id')
    )
    hours = int(request.POST.get('hours'))
    if unit.status == WorldUnit.NOT_MOBILIZED:
        messages.error(request, "Unit not movilized")
    elif unit.location != request.hero.location:
        messages.error(request, "You must be in the same region to do this.")
    elif not 0 < hours <= request.hero.hours_in_turn_left:
        messages.error(request, "Invalid number of hours")
    elif request.POST.get('action') == "support":
        tile_event.counter += unit.get_fighting_soldiers().count() * hours // (15*24)
        request.hero.hours_in_turn_left -= hours
        request.hero.save()
        tile_event.save()
    elif request.POST.get('action') == "counter":
        tile_event.counter -= unit.get_fighting_soldiers().count() * hours // (15*24)
        request.hero.hours_in_turn_left -= hours
        request.hero.save()
        tile_event.save()
    else:
        messages.error(request, "Invalid action")

    return redirect_back(request, unit.get_absolute_url())
コード例 #3
0
def pay_debt(request, unit_id):
    unit = get_object_or_404(
        WorldUnit,
        id=unit_id,
        location=request.hero.location
    )  # it is allowed to pay units owned by another character

    owners_debt = unit.get_owners_debt()
    if owners_debt > request.hero.cash:
        return redirect_back(request, unit.get_absolute_url,
                             "You don't have that much money")

    unit.pay_debt(request.hero)
    messages.success(request, "You paid your full debt of {} coins.".format(
        owners_debt
    ))
    return redirect_back(request, unit.get_absolute_url())
コード例 #4
0
def status_change(request, unit_id, new_status):
    unit = get_object_or_404(WorldUnit,
                             id=unit_id,
                             owner_character=request.hero)
    try:
        unit.change_status(new_status)
    except WorldUnitStatusChangeException as e:
        messages.error(request, str(e), "danger")
    return redirect_back(request, unit.get_absolute_url())
コード例 #5
0
def add_contact(request, character_id):
    target_character = get_object_or_404(Character,
                                         id=character_id,
                                         world=request.hero.world)
    created = MessageRelationship.objects.get_or_create(
        from_character=request.hero, to_character=target_character)[1]
    if created:
        messages.success(request, "Character added to contacts", "success")
    return redirect_back(request, reverse('character:character_home'))
コード例 #6
0
def rename(request, unit_id):
    unit = get_object_or_404(
        WorldUnit,
        id=unit_id,
        owner_character=request.hero
    )
    if request.POST.get('name'):
        unit.name = request.POST.get('name')
        unit.save()
    return redirect_back(request, unit.get_absolute_url())
コード例 #7
0
def remove_contact(request, character_id):
    target_character = get_object_or_404(Character,
                                         id=character_id,
                                         world=request.hero.world)
    try:
        target_relationship = MessageRelationship.objects.get(
            from_character=request.hero, to_character=target_character)
        target_relationship.delete()
        messages.success(request, "Character removed contacts", "success")
    except MessageRelationship.DoesNotExist:
        pass
    return redirect_back(request, reverse('character:character_home'))
コード例 #8
0
    def post(self, request, proposal_id):
        check_result = self.check(request, proposal_id)
        if check_result is not None:
            return check_result

        proposal = get_object_or_404(CapabilityProposal, id=proposal_id)

        if proposal.closed:
            return redirect_back(request, reverse('character:character_home'),
                                 error_message="Voting closed")

        issued_vote = request.POST.get('vote')
        if issued_vote not in dict(CapabilityVote.VOTE_CHOICES).keys():
            return redirect_back(request, reverse('character:character_home'),
                                 error_message="Invalid vote")

        proposal.issue_vote(request.hero, issued_vote)

        messages.success(request, "Your vote has been issued.", "success")

        return redirect(proposal.get_absolute_url())
コード例 #9
0
def document_view(request, document_id):
    document = get_object_or_404(PolicyDocument, id=document_id)
    hero_is_member = document.organization.character_is_member(request.hero)

    if not document.public and not hero_is_member:
        return redirect_back(request, reverse('character:character_home'),
                             error_message="You cannot view this document")

    context = {
        'document': document,
        'hero_is_member': hero_is_member,
    }
    return render(request, 'organization/view_document.html', context)
コード例 #10
0
def banning_capability_view(request, capability_id):
    capability = get_object_or_404(Capability,
                                   id=capability_id,
                                   type=Capability.BAN)

    character_to_ban = get_object_or_404(
        Character, id=request.POST.get('character_to_ban_id'))
    if character_to_ban not in capability.applying_to.character_members.all():
        return redirect_back(request,
                             reverse('character:character_home'),
                             error_message="You cannot do that")

    proposal = {'character_id': character_to_ban.id}
    capability.create_proposal(request.hero, proposal)
    return capability_success(capability, request)
コード例 #11
0
def arrest_warrant_capability_view(request, capability_id):
    capability = get_object_or_404(Capability,
                                   id=capability_id,
                                   type=Capability.ARREST_WARRANT)

    target_character = get_object_or_404(
        Character, id=request.POST.get('character_to_imprison_id'))
    if target_character.world != capability.applying_to.world:
        return redirect_back(request,
                             reverse('character:character_home'),
                             error_message="You cannot do that")

    proposal = {'action': 'issue', 'character_id': target_character.id}
    capability.create_proposal(request.hero, proposal)
    return capability_success(capability, request)
コード例 #12
0
def battle_settings(request, unit_id):
    unit = get_object_or_404(WorldUnit,
                             id=unit_id,
                             owner_character=request.hero)
    battle_line = int(request.POST['battle_line'])
    battle_side_pos = int(request.POST['battle_side_pos'])
    if not 0 <= battle_line < 5 or not -5 <= battle_side_pos <= 5:
        raise Http404("Invalid settings")
    battle_orders = request.POST['battle_orders']
    if battle_orders not in [order[0] for order in Order.WHAT_CHOICES]:
        raise Http404("Invalid orders")

    unit.default_battle_orders = Order.objects.create(what=battle_orders)
    unit.battle_side_pos = battle_side_pos
    unit.battle_line = battle_line
    unit.save()

    return redirect_back(request, unit.get_absolute_url())
コード例 #13
0
    def post(self, request, capability_id, document_id=None):
        if 'delete' in request.POST.keys() and document_id is None:
            return redirect_back(request, reverse('character:character_home'),
                                 error_message="You cannot do that")

        capability = get_object_or_404(
            Capability, id=capability_id, type=Capability.POLICY_DOCUMENT)
        if document_id is None:
            new_document = True
        else:
            document = get_object_or_404(PolicyDocument, id=document_id)
            new_document = False

        proposal = {
            'new': new_document,
            'document_id': None if new_document else document.id,
            'delete': 'delete' in request.POST.keys(),
            'title': request.POST.get('title'),
            'body': request.POST.get('body'),
            'public': request.POST.get('public'),
        }
        capability.create_proposal(request.hero, proposal)
        return capability_success(capability, request)
コード例 #14
0
def payment_settings(request, unit_id):
    unit = get_object_or_404(
        WorldUnit,
        id=unit_id,
        owner_character=request.hero
    )

    if request.POST.get('action') == 'enable' and unit.auto_pay == 0:
        unit.auto_pay = 1
        unit.save()
        messages.success(request, "You enabled auto payment for {}.".format(
            unit
        ))
    elif request.POST.get('action') == 'disable' and unit.auto_pay == 1:
        unit.auto_pay = 0
        unit.save()
        messages.success(request, "You disabled auto payment for {}.".format(
            unit
        ))
    else:
        messages.warning(request, "Invalid action.")

    return redirect_back(request, unit.get_absolute_url())
コード例 #15
0
def mark_read(request, recipient_id):
    request.recipient.read = not request.recipient.read
    request.recipient.save()
    return redirect_back(request, reverse('messaging:home'))
コード例 #16
0
def mark_favourite(request, recipient_id):
    request.recipient.favourite = not request.recipient.favourite
    request.recipient.save()
    return redirect_back(request, reverse('messaging:home'))
コード例 #17
0
def mark_all_read(request):
    MessageRecipient.objects.filter(character=request.hero,
                                    read=False).update(read=True)
    return redirect_back(request, reverse('character:character_home'))