Example #1
0
def create_quest(request):
    if request.user.get_zed() is None:
        return HttpResponseRedirect(reverse('create_zed'))

    _dict = {}
    _dict['form'] = CreateQuestForm()

    if request.method == "POST":
        form = CreateQuestForm(request.POST, request.FILES)
        _dict['form'] = form
        if form.is_valid():
            quest = form.save(commit=False)
            quest.difficulty = request.POST['difficulty']
            if not _dict.has_key('error'):
                try:
                    #calculate polygon set by user
                    coords = request.POST['coords'].replace('(','').replace(')','').split(',')
                    pnts = []
                    for i in range(0,len(coords),2):
                        lat = float(coords[i+1])
                        lng = float(coords[i])
                        pnt = Point(x=lat, y=lng)
                        pnts.append(pnt)

                    #first point must be same as last for LinearRing construction
                    pnts.append(Point(x=float(coords[1]), y=float(coords[0])))
                    ls = LinearRing(pnts)
                    poly = Polygon(ls)
                    quest.mpoly = MultiPolygon(poly)
                    try:
                        quest.city = City.objects.distance(quest.mpoly.centroid).order_by('distance')[:1][0]
                        quest.region = quest.city.state
                        quest.country = quest.city.country
                    except :
                        quest.region = StateBorder.objects.get(mpoly__contains=quest.mpoly.centroid)
                        quest.country = CountryBorder.objects.get(iso3=quest.region.parent_iso3)
                except :
                    _dict['error'] = "Quest shape not recognized. If it is on the coast, try to follow the shoreline more closely."
            if not _dict.has_key('error'):
                quest.creator = request.user.get_zed()
                quest.save()
                zed = request.user.get_zed()
                a= Achievement.objects.create(
                    zed = zed,
                    quest = quest,
                    action = "%s %s" % ("Created quest", quest.name),
                    exp_earned = 10,
                    geld_earned = 25,
                    timestamp = quest.created
                )
                messages.add_message(request, 86, "%s experience, %s geld earned by creating a quest." % (a.exp_earned, a.geld_earned))
                if len(request.FILES) > 0:
                    image = QuestImage(quest=quest, uploaded_by=request.user)
                    image.image = request.FILES['quest_image_file']
                    image.save()
                    quest.images.add(image)
                elif len(request.POST['quest_image_link']) > 0:
                    link = request.POST['quest_image_link']
                    filename = link.split('/')[-1].split('.')[0]
                    img_temp = NamedTemporaryFile()
                    img_temp.write(urllib2.urlopen(link).read())
                    img_temp.flush()
                    image = QuestImage(quest=quest, uploaded_by=request.user)
                    image.image.save(filename, File(img_temp))
                    image.save()
                    quest.images.add(image)
                return HttpResponseRedirect(reverse('view_quest', args=[quest.id, quest.slug]))

    return render_to_response('create_quest.html', _dict, context_instance = RequestContext(request))
Example #2
0
def edit_quest(request, id):
    _dict = {}
    quest = get_object_or_404(Quest, id=id)
    if request.user.get_zed() != quest.creator:
        return HttpResponseRedirect(reverse('view_quest', args=[quest.id, quest.slug]))
    _dict['quest'] = quest
    _dict['lat'] = quest.mpoly.centroid.y
    _dict['lng'] = quest.mpoly.centroid.x
    _dict['coords'] = quest.gmap_poly()
    form = EditQuestForm(instance=quest, quest_id=quest.id)
    _dict['form'] = form
    if request.method == 'POST':
        form = EditQuestForm(instance=quest, data=request.POST, files=request.FILES)
        _dict['form'] = form
        if form.is_valid():
            quest = form.save(commit=False)
            quest.difficulty = int(request.POST['difficulty'])
            if request.POST['location_updated'] == 'y':

                #calculate polygon set by user
                coords = request.POST['coords'].replace('(','').replace(')','').split(',')
                pnts = []
                for i in range(0,len(coords),2):
                    lat = float(coords[i+1])
                    lng = float(coords[i])
                    pnt = Point(x=lat, y=lng)
                    pnts.append(pnt)

                #first point must be same as last for LinearRing construction
                pnts.append(Point(x=float(coords[1]), y=float(coords[0])))
                ls = LinearRing(pnts)
                poly = Polygon(ls)
                quest.mpoly = MultiPolygon(poly)
                try:
                    try:
                        quest.city = City.objects.distance(quest.mpoly.centroid).order_by('distance')[:1][0]
                        quest.region = quest.city.state
                        quest.country = quest.city.country
                    except :
                        quest.region = StateBorder.objects.get(mpoly__contains=quest.mpoly.centroid)
                        quest.country = CountryBorder.objects.get(iso3=quest.region.parent_iso3)
                except :
                    _dict['error'] = "Polygon not recognized. If it is on the coast, try to follow the shoreline more closely."
                    return render_to_response('edit_quest.html', _dict, context_instance = RequestContext(request))
            quest.save()
            _dict['quest'] = quest
            if len(request.FILES) > 0:
                image = QuestImage(quest=quest, uploaded_by = request.user)
                image.image = request.FILES['quest_image_file']
                image.save()
                quest.images.add(image)
            elif len(request.POST['quest_image_link']) > 0:
                link = request.POST['quest_image_link']
                filename = link.split('/')[-1].split('.')[0]
                img_temp = NamedTemporaryFile()
                img_temp.write(urllib2.urlopen(link).read())
                img_temp.flush()
                image = QuestImage(quest=quest, uploaded_by = request.user)
                image.image.save(filename, File(img_temp))
                image.save()
                quest.images.add(image)
            return HttpResponseRedirect(reverse('edit_quest', args=[quest.id]))


    return render_to_response('edit_quest.html', _dict, context_instance = RequestContext(request))