def upload(request): c = all_page_infos(request) if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): ufile = request.FILES['file'] short = request.POST['short'] long_text = request.POST['long_text'] tags = request.POST['tags'] (path, written_bytes) = save_uploaded_file(ufile) logger.info("User '%s' uploaded file '%s' with title '%s', parsing it now.", request.user, os.path.basename(path), short[:20]) # try: if written_bytes != ufile.size: return HttpResponse("Could not store the replay file. Please contact the administrator.") demofile = parse_demo_file.Parse_demo_file(path) demofile.check_magic() demofile.parse() try: replay = Replay.objects.get(gameID=demofile.header["gameID"]) logger.info("Replay already existed: pk=%d gameID=%s", replay.pk, replay.gameID) return HttpResponse('Uploaded replay already exists: <a href="/replay/%s/">%s</a>'%(replay.gameID, replay.__unicode__())) except: shutil.move(path, settings.MEDIA_ROOT) replay = store_demofile_data(demofile, tags, settings.MEDIA_ROOT+os.path.basename(path), file.name, short, long_text, request.user) logger.info("New replay created: pk=%d gameID=%s", replay.pk, replay.gameID) return HttpResponseRedirect(replay.get_absolute_url()) # except Exception, e: # return HttpResponse("The was a problem with the upload: %s<br/>Please retry or contact the administrator.<br/><br/><a href="/">Home</a>"%e) else: form = UploadFileForm() c['form'] = form return render_to_response('upload.html', c, context_instance=RequestContext(request))
def users(request): c = all_page_infos(request) table = UserTable(User.objects.all()) RequestConfig(request, paginate={"per_page": 50}).configure(table) c['table'] = table c['pagetitle'] = "users" return render_to_response('lists.html', c, context_instance=RequestContext(request))
def edit_replay(request, gameID): c = all_page_infos(request) try: replay = Replay.objects.prefetch_related().get(gameID=gameID) c["replay"] = replay except: raise Http404 if request.user != replay.uploader: return render_to_response('edit_replay_wrong_user.html', c, context_instance=RequestContext(request)) if request.method == 'POST': form = EditReplayForm(request.POST) if form.is_valid(): short = request.POST['short'] long_text = request.POST['long_text'] tags = request.POST['tags'] replay.tags.clear() autotag = set_autotag(replay) save_tags(replay, tags) save_desc(replay, short, long_text, autotag) replay.save() logger.info("User '%s' modified replay '%s': short: '%s' title:'%s' long_text:'%s' tags:'%s'", request.user, replay.gameID, replay.short_text, replay.title, replay.long_text, reduce(lambda x,y: x+", "+y, [t.name for t in Tag.objects.filter(replay=replay)])) return HttpResponseRedirect(replay.get_absolute_url()) else: form = EditReplayForm({'short': replay.short_text, 'long_text': replay.long_text, 'tags': reduce(lambda x,y: x+", "+y, [t.name for t in Tag.objects.filter(replay=replay)])}) c['form'] = form return render_to_response('edit_replay.html', c, context_instance=RequestContext(request))
def replay_table(request, replays, title): c = all_page_infos(request) table = ReplayTable(replays) RequestConfig(request, paginate={"per_page": 50}).configure(table) c['table'] = table c['pagetitle'] = title c['long_table'] = True return render_to_response('lists.html', c, context_instance=RequestContext(request))
def all_comments(request): c = all_page_infos(request) table = CommentTable(Comment.objects.all()) RequestConfig(request, paginate={"per_page": 50}).configure(table) c['table'] = table c['pagetitle'] = "comments" c['long_table'] = True return render_to_response('lists.html', c, context_instance=RequestContext(request))
def games(request): c = all_page_infos(request) games = [] for gt in list(set(Replay.objects.values_list('gametype', flat=True))): games.append({'name': gt, 'replays': Replay.objects.filter(gametype=gt).count()}) table = GameTable(games) RequestConfig(request, paginate={"per_page": 50}).configure(table) c['table'] = table c['pagetitle'] = "games" return render_to_response('lists.html', c, context_instance=RequestContext(request))
def players(request): c = all_page_infos(request) players = [] for pa in PlayerAccount.objects.all(): for name in pa.names.split(";"): players.append({'name': name, 'replay_count': pa.replay_count(), 'spectator_count': pa.spectator_count(), 'accid': pa.accountid}) table = PlayerTable(players) RequestConfig(request, paginate={"per_page": 50}).configure(table) c['table'] = table c['pagetitle'] = "players" return render_to_response('lists.html', c, context_instance=RequestContext(request))
def replay(request, gameID): c = all_page_infos(request) try: c["replay"] = Replay.objects.prefetch_related().get(gameID=gameID) except: raise Http404 c["allyteams"] = [] for at in Allyteam.objects.filter(replay=c["replay"]): teams = Team.objects.prefetch_related("teamleader").filter(allyteam=at, replay=c["replay"]) if teams: c["allyteams"].append((at, teams)) c["specs"] = Player.objects.filter(replay=c["replay"], spectator=True) return render_to_response('replay.html', c, context_instance=RequestContext(request))
def login(request): c = all_page_infos(request) if request.method == 'POST': form = AuthenticationForm(data=request.POST) if form.is_valid(): user = django.contrib.auth.authenticate(username=form.cleaned_data["username"], password=form.cleaned_data["password"]) if user is not None: if user.is_active: django.contrib.auth.login(request, user) logger.info("Logged in user '%s'", request.user) nexturl = request.GET.get('next') # TODO: "next" is never passed... if nexturl: dest = nexturl else: dest = "/" return HttpResponseRedirect(dest) else: form = AuthenticationForm() c['form'] = form return render_to_response('login.html', c, context_instance=RequestContext(request))
def search(request): # TODO c = all_page_infos(request) resp = "<b>TODO</b><br/><br/>" if request.method == 'POST': st = request.POST["search"].strip() if st: users = User.objects.filter(username__icontains=st) replays = Replay.objects.filter(Q(gametype__icontains=st)| Q(title__icontains=st)| Q(short_text__icontains=st)| Q(long_text__icontains=st)| Q(map_info__name__icontains=st)| Q(tags__name__icontains=st)| Q(uploader__in=users)| Q(player__account__names__icontains=st)).distinct() resp += 'Your search for "%s" yielded %d results:<br/><br/>'%(st, replays.count()) for replay in replays: resp += '* <a href="%s">%s</a><br/>'%(replay.get_absolute_url(), replay.__unicode__()) else: HttpResponseRedirect("/search/") return HttpResponse(resp)
def index(request): c = all_page_infos(request) c["newest_replays"] = Replay.objects.all().order_by("-pk")[:10] c["news"] = NewsItem.objects.all().order_by('-pk')[:10] return render_to_response('index.html', c, context_instance=RequestContext(request))
def user_settings(request): # TODO: c = all_page_infos(request) return render_to_response('settings.html', c, context_instance=RequestContext(request))