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))
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))