Пример #1
0
def create_contest (request):
    user = user_auth(request)

    if not user.has_perm('app.add_contest'):
        return redirect_to_index("You don't have permission to add contests.")

    if request.method == 'POST':
        form = ContestCreateForm(request.POST)
        if form.is_valid():
            contest = form.save(commit = False)

            contest.name = contest.code
            contest.start_time = datetime.datetime.now()
            contest.end_time = contest.start_time + datetime.timedelta(days=1)
            contest.with_rating = False
            contest.with_open_eval = False
            contest.wiki_page = create_contest_wiki_page(contest, request)
            contest.save()

            return redirect(reverse('display_contest', kwargs={'contest_code': contest.code }))

    else:
        form = ContestCreateForm()

    return {
        'form': form,
        'navigation' :
        {
            'main' : 'admin',
            'other' : 'create-contest'
        }
    }
Пример #2
0
def edit_post(request, post_id):
    user = user_auth(request)
    post = get_object_or_404(ForumPost, id=post_id)

    if post.can_edit(user) is False:
        return redirect_to_index(
            "You don't have permissions to edit this post.")

    if request.method == 'POST':
        form = ForumPostEditForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect(
                reverse("display_topic", kwargs={'topic_id': post.topic.id}) +
                "#%d" % post.id)
    else:
        form = ForumPostEditForm(post)

    return {
        'post': post,
        'form': form,
        'navigation': {
            'main': 'forum',
            'other': 'edit-post'
        }
    }
Пример #3
0
def edit_entry(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry, author=username, permalink=permalink)

    if user.has_perm("app.edit_blogentry") is False and user != username:
        return redirect_to_index("You don't have permission to edit this blog entry.")

    if request.method == "POST":
        form = BlogEntryEditForm(request.POST, instance=blog_entry)

        if form.is_valid():
            form.save()

            tags = []
            for tag, value in request.POST.iteritems():
                if re.match("tag(?P<tag_name>\d+)input", tag):
                    tags.append(value)

            update_tags(blog_entry, tags)

            return redirect(reverse("display_entry", kwargs={"username": username.username, "permalink": permalink}))
    else:
        form = BlogEntryEditForm(blog_entry)

    return {"form": form, "blog_entry": blog_entry, "navigation": {"main": "blog", "other": "edit-entry"}}
Пример #4
0
def create_contest(request):
    user = user_auth(request)

    if not user.has_perm('app.add_contest'):
        return redirect_to_index("You don't have permission to add contests.")

    if request.method == 'POST':
        form = ContestCreateForm(request.POST)
        if form.is_valid():
            contest = form.save(commit=False)

            contest.name = contest.code
            contest.start_time = datetime.datetime.now()
            contest.end_time = contest.start_time + datetime.timedelta(days=1)
            contest.with_rating = False
            contest.with_open_eval = False
            contest.wiki_page = create_contest_wiki_page(contest, request)
            contest.save()

            return redirect(
                reverse('display_contest',
                        kwargs={'contest_code': contest.code}))

    else:
        form = ContestCreateForm()

    return {
        'form': form,
        'navigation': {
            'main': 'admin',
            'other': 'create-contest'
        }
    }
Пример #5
0
def new_ticket(request):
    user = user_auth(request)

    if request.method == 'POST':
        form = TicketForm(request.POST)

        if form.is_valid():
            ticket = form.save(commit=False)
            ticket.severity = 'normal'
            ticket.status = 'open'
            ticket.author = user
            ticket.date_posted = datetime.datetime.now()
            ticket.save()
            return redirect(reverse('tickets'))
    else:
        form = TicketForm()

    return {
        'form': form,
        'ticket_types': TICKET_TYPES,
        'navigation': {
            'main': 'judge',
            'other': 'new-ticket',
        }
    }
Пример #6
0
def display_job_source_code(request, job_id):
    user = user_auth(request)
    job = get_object_or_404(Job, id=job_id)

    if job.can_view_source_code(user) is False:
        return redirect_to_index(
            "You don't have permission to view this job's source code")

    lexer = get_lexer_by_name(pygments_standardize(job.language),
                              stripall=True,
                              tabsize=4)
    formatter = HtmlFormatter(linenos=True)
    source_code = highlight(
        ''.join(
            open(os.path.join(JOBS_DIR, 'job%d.%s' % (job.id, job.language)),
                 'r').readlines()), lexer, formatter)

    return {
        'job': job,
        'source_code': source_code,
        'navigation': {
            'main': 'judge',
            'other': 'display-job-source',
        }
    }
Пример #7
0
def get_your_score (request):
    user = user_auth(request)
    problem_id = request.GET['problem_id'] if 'problem_id' in request.GET and request.GET['problem_id'] != '' else None
    contest_id = request.GET['contest_id'] if 'contest_id' in request.GET and request.GET['contest_id'] != '' else None
    score_only = True if 'score_only' in request.GET else False

    if problem_id is None or contest_id is None or user is None:
        result = 'N/A'
    else:
        problem = get_object_or_None(Problem, id = problem_id)
        contest = get_object_or_None(Contest, id = contest_id)

        if problem is None or contest is None:
            result = 'N/A'
        elif contest.ended is False and contest.with_open_eval is False:
            result = 'N/A'
        else:
            jobs = Job.objects.filter(user = user, problem = problem, contest = contest).order_by('-id')
            if jobs:
                result = str(jobs[0].score) if score_only else "%d points" % jobs[0].score
            else:
                result = 'N/A'
    if result == 'N/A':
        result = '<span style="font-size: 0.8em; color: #808080;">N/A</span>'
    return HttpResponse(result)
Пример #8
0
def new_entry(request):
    user = user_auth(request)

    if request.method == 'POST':
        form = BlogEntryCreateForm(request.POST)
        if form.is_valid():
            blog_entry = form.save(commit=False)
            blog_entry.author = user
            blog_entry.date = datetime.datetime.now()
            blog_entry.permalink = hashlib.md5(str(
                datetime.datetime.now())).hexdigest()
            blog_entry.save()

            blog_entry.permalink = blog_entry.get_permalink()
            blog_entry.save()
            return redirect(
                reverse("display_entry",
                        kwargs={
                            'username': blog_entry.author.username,
                            'permalink': blog_entry.permalink,
                        }))
    else:
        form = BlogEntryCreateForm()

    return {
        'form': form,
        'navigation': {
            'main': 'blog',
            'other': 'create-blog-post'
        }
    }
Пример #9
0
def create_contest_wiki_page(contest, request):
    user = user_auth(request)

    w = WikiPage()
    w.url = reverse('display_contest', kwargs={
        'contest_code': contest.code
    }).rstrip('/').lstrip('/')
    w.author = user
    w.save()

    r = WikiRevision()
    r.revision_id = 1
    r.content = """
=== Contest %s ==
Write here about contest %s...
                """ % (contest.code, contest.code)
    r.date = datetime.datetime.now()
    r.ip = get_ip_from_request(request)
    r.wiki_page = w
    r.title = "Contest %s" % contest.code
    r.markup_type = 'C'
    r.security = 'Private'
    r.author = user
    r.save()

    w.save()

    return w
Пример #10
0
def attachments (request, page_url):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url = page_url)
    attachments = WikiAttachment.objects.filter(wiki_page=page)

    # Wtf isn't page.last_revision().wiki_page = page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response('wiki/attachments.html',
                              {
                               'page' : page,
                               'attachments' : attachments,
                               'can_view' : can_view,
                               'can_edit' : can_edit,
                               'can_attach' : can_attach,
                               'navigation' : {
                                    'main' : 'wiki',
                                    'other' : 'attachments',
                               }
                              },
                              context_instance = RequestContext(request),
                             )
Пример #11
0
def display_entry(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry,
                                   author=username,
                                   permalink=permalink)
    can_edit = user is not None and (user.has_perm('app.edit_blogentry')
                                     or user == username)
    can_delete = user is not None and (user.has_perm('app.delete_blogentry')
                                       or user == username)
    can_manage_dashboard = user is not None and (
        user.has_perm('app.add_dashboardentry'))
    is_dashboard_entry = len(
        DashboardEntry.objects.filter(blog_entry=blog_entry)) > 0

    return {
        'blog_entry':
        blog_entry,
        'can_edit':
        can_edit,
        'can_delete':
        can_delete,
        'can_manage_dashboard':
        can_manage_dashboard,
        'last_blog_entries':
        BlogEntry.objects.filter(author=username).order_by('-date')[:10],
        'is_dashboard_entry':
        is_dashboard_entry,
        'navigation': {
            'main': 'blog',
            'other': 'display-blog-entry',
            'author': blog_entry.author,
        }
    }
Пример #12
0
def new_ticket (request):
    user = user_auth(request)

    if request.method == 'POST':
        form = TicketForm(request.POST)

        if form.is_valid():
            ticket = form.save(commit = False)
            ticket.severity = 'normal'
            ticket.status = 'open'
            ticket.author = user
            ticket.date_posted = datetime.datetime.now()
            ticket.save()
            return redirect(reverse('tickets'))
    else:
        form = TicketForm()

    return {
        'form' : form,
        'ticket_types' : TICKET_TYPES,
        'navigation' : {
            'main' : 'judge',
            'other' : 'new-ticket',
        }
    }
Пример #13
0
def display_ticket (request, ticket_id):
    ticket = get_object_or_404(Ticket, id = ticket_id)
    user = user_auth(request)

    if request.method == 'POST' and user is not None:
        form = TicketCommentForm(request.POST)
        if form.is_valid():
            if 'comment_id' in request.POST:
                if request.POST['comment_id'] != "":
                    comment = get_object_or_None(TicketComment, id=request.POST['comment_id'])
                    if comment is None or comment.autogenerated or (user.is_staff is False and user != comment.author) or comment.can_be_edited() is False:
                        return redirect_to_index("You can't edit this comment.")
                    form = TicketCommentForm(request.POST, instance = comment)
                    if form.is_valid():
                        form.save()
                else:
                    comment = form.save(commit = False)
                    comment.ticket, comment.author, comment.date_posted = ticket, user, datetime.datetime.now()
                    comment.save()
            else:
                form = TicketCommentForm()
    else:
        form = TicketCommentForm()

    return {
        'ticket' : ticket,
        'form' : form,
        'navigation' : {
            'main' : 'judge',
            'other' : 'display-ticket',
        }
    }
Пример #14
0
def create_contest_wiki_page (contest, request):
    user = user_auth(request)

    w = WikiPage()
    w.url = reverse('display_contest',
                    kwargs = {'contest_code' : contest.code }).rstrip('/').lstrip('/')
    w.author = user
    w.save()

    r = WikiRevision()
    r.revision_id = 1
    r.content = """
=== Contest %s ==
Write here about contest %s...
                """ % (contest.code, contest.code)
    r.date = datetime.datetime.now()
    r.ip = get_ip_from_request(request)
    r.wiki_page = w
    r.title = "Contest %s" % contest.code
    r.markup_type = 'C'
    r.security = 'Private'
    r.author = user
    r.save()

    w.save()

    return w
Пример #15
0
def attachments(request, page_url):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url=page_url)
    attachments = WikiAttachment.objects.filter(wiki_page=page)

    # Wtf isn't page.last_revision().wiki_page = page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response(
        'wiki/attachments.html',
        {
            'page': page,
            'attachments': attachments,
            'can_view': can_view,
            'can_edit': can_edit,
            'can_attach': can_attach,
            'navigation': {
                'main': 'wiki',
                'other': 'attachments',
            }
        },
        context_instance=RequestContext(request),
    )
Пример #16
0
def admin_page (request):
    user = user_auth(request)

    if user.is_superuser is False and user.is_staff is False:
        return redirect_to_index("You don't have permission to access this page")

    if request.method == 'POST':
        form = TicketMilestoneForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = TicketMilestoneForm()

    last_users = UserProfile.objects.all().order_by('-id')[:20]
    last_logins = UserProfile.objects.all().order_by('-last_login')[:20]

    return {
        'last_users' : last_users,
        'last_logins' : last_logins,
        'milestones' : TicketMilestone.objects.all().order_by('due'),
        'milestone_form' : form,
        'navigation': {
            'main' : 'admin',
            'other' : 'admin_page',
        }
    }
Пример #17
0
def admin_page(request):
    user = user_auth(request)

    if user.is_superuser is False and user.is_staff is False:
        return redirect_to_index(
            "You don't have permission to access this page")

    if request.method == 'POST':
        form = TicketMilestoneForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = TicketMilestoneForm()

    last_users = UserProfile.objects.all().order_by('-id')[:20]
    last_logins = UserProfile.objects.all().order_by('-last_login')[:20]

    return {
        'last_users': last_users,
        'last_logins': last_logins,
        'milestones': TicketMilestone.objects.all().order_by('due'),
        'milestone_form': form,
        'navigation': {
            'main': 'admin',
            'other': 'admin_page',
        }
    }
Пример #18
0
def submit (request):
    user = user_auth(request)

    if request.method == 'POST':
        form = JobSubmitForm(request.POST)
        if form.is_valid() and 'solution' in request.FILES:
            job = form.save(commit=False)
            if job.contest.started() is False and user.is_staff is False:
                return redirect_to_index("You can't submit, contest dind't start yet.")
            if job.contest.ended() is True:
                return redirect_to_index("You can't submit, contest ended.")
            job.message, job.type, job.date, job.user, job.source_size, job.percent_completed, job.score = 'Waiting', 'O', datetime.datetime.now(), user, request.FILES['solution'].size, 0, 0
            if job.contest.started() is False or job.contest.code == 'none':
                job.private = True
            job.save()
            save_file(dest = os.path.join(JOBS_DIR, "job%d.%s" % (job.id, job.language)), file = request.FILES['solution'])

            return HttpResponseRedirect(reverse('status') + '?problem=%s&user=%s' % (job.problem.code, user.username))
    else:
        form = JobSubmitForm()

    return {
        'form' : form,
        'compilers' : config.judge.COMPILERS,
        'problems' : Problem.objects.all(),
        'navigation' : {
            'main' : 'judge',
            'other' : 'display-job',
        }
    }
Пример #19
0
def create_problem(request):
    user = user_auth(request)

    if not user.has_perm('app.add_problem'):
        return redirect_to_index("You don't have permission to add problems.")

    if request.method == 'POST':
        form = ProblemCreateForm(request.POST)
        if form.is_valid():
            contest = Contest.objects.get(code='none')

            problem = form.save(commit=False)

            problem.name = problem.code
            problem.owner = user
            problem.resource = contest

            try:
                problem.author = Author.objects.get(
                    name='%s %s' % (user.first_name, user.last_name))
            except:
                author = Author(
                    name='%s %s' % (user.first_name, user.last_name),
                    code='%s_%s' % (user.first_name, user.last_name))
                author.save()
                problem.author = author

            problem.time_limit = config.judge.DEFAULT_TIME_LIMIT
            problem.memory_limit = config.judge.DEFAULT_MEMORY_LIMIT
            problem.source_limit = config.judge.DEFAULT_SOURCE_LIMIT

            problem.forum_topic = None
            problem.wiki_page = create_problem_wiki_page(problem, request)
            problem.type = 'Normal'

            problem.save()

            contest.problems.add(problem)
            contest.save()

            os.system("mkdir %s" % os.path.join(TESTS_DIR, problem.code))
            os.system("touch %s" %
                      os.path.join(TESTS_DIR, problem.code, 'tests.txt'))
            os.system("svn add %s" % os.path.join(TESTS_DIR, problem.code))

            return redirect(
                reverse('configure_problem',
                        kwargs={'problem_code': problem.code}))
    else:
        form = ProblemCreateForm()

    return {
        'form': form,
        'navigation': {
            'main': 'admin',
            'other': 'create-problem'
        }
    }
Пример #20
0
def edit_page(request, page_url, widgets={}):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url=page_url)
    revisions_list = WikiRevision.objects.filter(wiki_page=page)

    if not page.last_revision().can_edit(user):
        return redirect_to_index(
            "You don't have enough rights to edit this page, i will redirect you..."
        )

    if request.method == 'POST':  # we have some POST data.
        form = WikiRevisionEditForm(request.POST)
        if form.is_valid():
            revision = form.save(commit=False)
            revision.revision_id = page.last_revision().revision_id + 1
            revision.date = datetime.datetime.now()
            revision.ip = get_ip_from_request(request)
            revision.wiki_page = page
            revision.author = user
            revision.save()

            page.save()
            if 'is_problem' in widgets:
                return HttpResponseRedirect(
                    reverse('display_problem',
                            kwargs={'problem_code': widgets['problem'].code}))

            return HttpResponseRedirect(
                reverse('display_page', kwargs={'page_url': page.url}))
        else:
            print form.errors
    else:
        form = WikiRevisionEditForm(page.last_revision)
    # Wtf isn't page.last_revision().wiki_page the same thing as page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response('wiki_edit_revision.html', {
        'revision': page.last_revision(),
        'page': page,
        'form': form,
        'edit': True,
        'widgets': widgets,
        'can_view': can_view,
        'can_edit': can_edit,
        'can_attach': can_attach,
        'navigation': {
            'main': 'wiki',
            'other': 'edit-page',
        }
    },
                              context_instance=RequestContext(request))
Пример #21
0
def attach(request, page_url):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url=page_url)

    if page.can_attach_files(user) is False:
        return redirect_to_index(
            "You don't have permissions to attach files to this page.")

    message = None

    if request.method == 'POST':
        if 'file_name' in request.FILES:
            attachment = WikiAttachment()
            attachment.name = request.FILES['file_name'].name
            attachment.wiki_page = page
            attachment.ip = get_ip_from_request(request)
            attachment.size = request.FILES['file_name'].size
            attachment.date = datetime.datetime.now()
            attachment.author = user
            attachment.security = 'Public'
            attachment.hash = ''
            attachment.save()

            attachment.hash = hashlib.md5(str(attachment.id)).hexdigest()
            attachment.save()

            save_file(dest=os.path.join(
                ATTACHMENTS_DIR,
                "attachment%d-%s" % (attachment.id, attachment.name)),
                      file=request.FILES['file_name'])

            message = 'File uploaded successfully.'

    # Wtf isn't page.last_revision().wiki_page = page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response(
        'wiki/attach.html',
        {
            'page': page,
            'message': message if message is not None else '',
            'can_view': can_view,
            'can_edit': can_edit,
            'can_attach': can_attach,
            'navigation': {
                'main': 'wiki',
                'other': 'attach',
            }
        },
        context_instance=RequestContext(request),
    )
Пример #22
0
def toggle_contest_registration(request, contest_code):
    user = user_auth(request)
    contest = get_object_or_404(Contest, code=contest_code)

    if contest.registration_started is True or contest.registration_ended is False:
        if contest.registered_users.filter(username=user.username):
            contest.registered_users.remove(user)
        else:
            contest.registered_users.add(user)
    return HttpResponseRedirect(
        reverse('display_contest', kwargs={'contest_code': contest.code}))
Пример #23
0
def delete_entry(request, username, permalink):
    user = user_auth(request)

    if user.has_perm("app.blogentry_delete") is False:
        return redirect_to_index("You don't have permission to delete blog entries.")

    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry, author=username, permalink=permalink)
    blog_entry.delete()

    return redirect(reverse("blog_posts"))
Пример #24
0
def create_problem (request):
    user = user_auth(request)

    if not user.has_perm('app.add_problem'):
        return redirect_to_index("You don't have permission to add problems.")

    if request.method == 'POST':
        form = ProblemCreateForm(request.POST)
        if form.is_valid():
            contest = Contest.objects.get(code = 'none')

            problem = form.save(commit = False)

            problem.name = problem.code
            problem.owner = user
            problem.resource = contest

            try:
                problem.author = Author.objects.get(name = '%s %s' % (user.first_name, user.last_name))
            except:
                author = Author(name = '%s %s' % (user.first_name, user.last_name),
                       code = '%s_%s' % (user.first_name, user.last_name))
                author.save()
                problem.author = author

            problem.time_limit = config.judge.DEFAULT_TIME_LIMIT
            problem.memory_limit = config.judge.DEFAULT_MEMORY_LIMIT
            problem.source_limit = config.judge.DEFAULT_SOURCE_LIMIT

            problem.forum_topic = None
            problem.wiki_page = create_problem_wiki_page(problem, request)
            problem.type = 'Normal'

            problem.save()

            contest.problems.add(problem)
            contest.save()

            os.system("mkdir %s" % os.path.join(TESTS_DIR, problem.code))
            os.system("touch %s" % os.path.join(TESTS_DIR, problem.code, 'tests.txt'))
            os.system("svn add %s" % os.path.join(TESTS_DIR, problem.code))

            return redirect(reverse('configure_problem', kwargs={'problem_code' : problem.code}))
    else:
        form = ProblemCreateForm()

    return {
        'form' : form,
        'navigation' :
        {
            'main' : 'admin',
            'other' : 'create-problem'
        }
    }
Пример #25
0
def display_contest (request, contest_code):
    user = user_auth (request)
    contest = get_object_or_404 (Contest, code = contest_code)

    return display_revision(revision = contest.wiki_page.last_revision(),
                            user = user,
                            widgets = {
                                            'is_contest' : True,
                                            'contest' : contest,
                                      },
                            context_instance = RequestContext(request),
                           )
Пример #26
0
def edit_page (request, page_url, widgets = {}):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url=page_url)
    revisions_list = WikiRevision.objects.filter(wiki_page=page)

    if not page.last_revision().can_edit(user):
        return redirect_to_index("You don't have enough rights to edit this page, i will redirect you...")

    if request.method == 'POST':    # we have some POST data.
        form = WikiRevisionEditForm(request.POST)
        if form.is_valid():
            revision = form.save(commit = False)
            revision.revision_id = page.last_revision().revision_id + 1
            revision.date = datetime.datetime.now()
            revision.ip = get_ip_from_request(request)
            revision.wiki_page = page
            revision.author = user
            revision.save()

            page.save()
            if 'is_problem' in widgets:
                return HttpResponseRedirect(reverse('display_problem',
                                                    kwargs = {'problem_code' : widgets['problem'].code }))

            return HttpResponseRedirect(reverse('display_page',
                                                    kwargs = {'page_url' : page.url }))
        else:
            print form.errors
    else:
        form = WikiRevisionEditForm(page.last_revision)
    # Wtf isn't page.last_revision().wiki_page the same thing as page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response('wiki_edit_revision.html',
                              {'revision' : page.last_revision(),
                               'page' : page,
                               'form' : form,
                               'edit' : True,
                               'widgets' : widgets,
                               'can_view' : can_view,
                               'can_edit' : can_edit,
                               'can_attach' : can_attach,
                               'navigation' : {
                                    'main' : 'wiki',
                                    'other' : 'edit-page',
                               }
                              },
                              context_instance = RequestContext(request)
                             )
Пример #27
0
def toggle_contest_registration (request, contest_code):
    user = user_auth(request)
    contest = get_object_or_404(Contest, code = contest_code)

    if contest.registration_started is True or contest.registration_ended is False:
        if contest.registered_users.filter(username=user.username):
            contest.registered_users.remove(user)
        else:
            contest.registered_users.add(user)
    return HttpResponseRedirect(reverse('display_contest',
                                       kwargs = {'contest_code' : contest.code }
                                      )
                               )
Пример #28
0
def display_problems_by_author(request, author_code):
    user = user_auth(request)
    author = get_object_or_404(Author, code=author_code)
    problems = Problem.objects.filter(author=author)

    return {
        'author': author,
        'problems': problems,
        'navigation': {
            'main': 'judge',
            'other': 'display-problems-by-author'
        }
    }
Пример #29
0
def delete_attachment (request, page_url, hash):
    user = user_auth(request)
    wiki_page = get_object_or_404(WikiPage, url = page_url)
    attachment = get_object_or_404(WikiAttachment, wiki_page = wiki_page, hash = hash)

    if attachment.can_delete(user) is False:
        return redirect_to_index("You don't have enough permissions to delete this attachment.")

    os.remove(os.path.join(ATTACHMENTS_DIR, "attachment%d-%s" % (attachment.id, attachment.name)))
    attachment.delete()

    return HttpResponseRedirect(reverse('attachments',
                                        kwargs={'page_url' : wiki_page.url }))
Пример #30
0
def display_contest(request, contest_code):
    user = user_auth(request)
    contest = get_object_or_404(Contest, code=contest_code)

    return display_revision(
        revision=contest.wiki_page.last_revision(),
        user=user,
        widgets={
            'is_contest': True,
            'contest': contest,
        },
        context_instance=RequestContext(request),
    )
Пример #31
0
def display_problems_by_author (request, author_code):
    user = user_auth(request)
    author = get_object_or_404(Author, code = author_code)
    problems = Problem.objects.filter(author = author)

    return {
        'author' : author,
        'problems' : problems,
        'navigation' : {
            'main' : 'judge',
            'other' : 'display-problems-by-author'
        }
    }
Пример #32
0
def toggle_dashboard(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry, author=username, permalink=permalink)

    if user.has_perm("app_add_dashboardentry") is False:
        return redirect_to_index("You don't have permission to modify dashboard.")

    if DashboardEntry.objects.filter(blog_entry=blog_entry):
        DashboardEntry.objects.filter(blog_entry=blog_entry).delete()
    else:
        DashboardEntry(blog_entry=blog_entry).save()

    return HttpResponseRedirect(reverse("dashboard"))
Пример #33
0
def display_problem (request, problem_code):
    user = user_auth (request)
    problem = get_object_or_404 (Problem, code = problem_code)

    return display_revision(revision = problem.wiki_page.last_revision(),
                            user = user,
                            widgets = {
                                            'is_problem' : True,
                                            'problem' : problem,
                                            'submit_form' : JobSubmitForm(),
                                            'compilers' : config.judge.COMPILERS,
                                      },
                            context_instance = RequestContext(request),
                           )
Пример #34
0
def delete_entry(request, username, permalink):
    user = user_auth(request)

    if user.has_perm('app.blogentry_delete') is False:
        return redirect_to_index(
            "You don't have permission to delete blog entries.")

    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry,
                                   author=username,
                                   permalink=permalink)
    blog_entry.delete()

    return redirect(reverse('blog_posts'))
Пример #35
0
def attach (request, page_url):
    user = user_auth(request)
    page = get_object_or_404(WikiPage, url = page_url)

    if page.can_attach_files(user) is False:
        return redirect_to_index("You don't have permissions to attach files to this page.")

    message = None

    if request.method == 'POST':
        if 'file_name' in request.FILES:
            attachment = WikiAttachment()
            attachment.name = request.FILES['file_name'].name
            attachment.wiki_page = page
            attachment.ip = get_ip_from_request(request)
            attachment.size = request.FILES['file_name'].size
            attachment.date = datetime.datetime.now()
            attachment.author = user
            attachment.security = 'Public'
            attachment.hash = ''
            attachment.save()

            attachment.hash = hashlib.md5(str(attachment.id)).hexdigest()
            attachment.save()

            save_file(dest = os.path.join(ATTACHMENTS_DIR, "attachment%d-%s" % (attachment.id, attachment.name)), file = request.FILES['file_name'])

            message = 'File uploaded successfully.'

    # Wtf isn't page.last_revision().wiki_page = page ?
    # can_attach = page.last_revision().wiki_page.can_attach_files(user)
    can_attach = page.can_attach_files(user)
    can_edit = page.last_revision().can_edit(user)
    can_view = page.last_revision().can_view(user)

    return render_to_response('wiki/attach.html',
                              {
                               'page' : page,
                               'message' : message if message is not None else '',
                               'can_view' : can_view,
                               'can_edit' : can_edit,
                               'can_attach' : can_attach,
                               'navigation' : {
                                    'main' : 'wiki',
                                    'other' : 'attach',
                               }
                              },
                              context_instance = RequestContext(request),
                             )
Пример #36
0
def display_job(request, job_id):
    user = user_auth(request)
    job = get_object_or_404(Job, id=job_id)

    if job.can_view(user) is False:
        return redirect_to_index("You don't have permission to view this job")

    return {
        'job': job,
        'tests': Test.objects.filter(job=job).order_by('no'),
        'navigation': {
            'main': 'judge',
            'other': 'display-job',
        }
    }
Пример #37
0
def display_job (request, job_id):
    user = user_auth (request)
    job = get_object_or_404(Job, id=job_id)

    if job.can_view(user) is False:
        return redirect_to_index("You don't have permission to view this job")

    return {
        'job' : job,
        'tests' : Test.objects.filter(job=job).order_by('no'),
        'navigation' : {
            'main' : 'judge',
            'other' : 'display-job',
        }
    }
Пример #38
0
def edit_problem_tags(request, problem_code):
    user = user_auth(request)

    if user is None or user.has_perm('app.edit_problem') is False:
        return redirect_to_index("You don't have permission to edit problems.")

    problem = get_object_or_404(Problem, code=problem_code)

    return {
        'problem': problem,
        'navigation': {
            'main': 'judge',
            'other': 'edit-problem-tags',
        }
    }
Пример #39
0
def edit_problem_tags (request, problem_code):
    user = user_auth(request)

    if user is None or user.has_perm('app.edit_problem') is False:
        return redirect_to_index("You don't have permission to edit problems.")

    problem = get_object_or_404(Problem, code = problem_code)

    return {
        'problem' : problem,
        'navigation' : {
            'main' : 'judge',
            'other' : 'edit-problem-tags',
        }
    }
Пример #40
0
def display_problem(request, problem_code):
    user = user_auth(request)
    problem = get_object_or_404(Problem, code=problem_code)

    return display_revision(
        revision=problem.wiki_page.last_revision(),
        user=user,
        widgets={
            'is_problem': True,
            'problem': problem,
            'submit_form': JobSubmitForm(),
            'compilers': config.judge.COMPILERS,
        },
        context_instance=RequestContext(request),
    )
Пример #41
0
def display_topic(request, topic_id):
    topic = get_object_or_404(ForumTopic, id=topic_id)
    user = user_auth(request)

    topic.views += 1
    topic.save()

    return {
        'topic': topic,
        'stack': get_parents(topic.board),
        'posts': ForumPost.objects.filter(topic=topic),
        'navigation': {
            'main': 'forum',
            'other': 'display-topic'
        }
    }
Пример #42
0
def display_topic (request, topic_id):
    topic = get_object_or_404(ForumTopic, id = topic_id)
    user = user_auth(request)

    topic.views += 1
    topic.save()

    return {
       'topic' : topic,
       'stack' : get_parents(topic.board),
       'posts' : ForumPost.objects.filter(topic=topic),
       'navigation' : {
            'main' : 'forum',
            'other' : 'display-topic'
        }
    }
Пример #43
0
def new_topic (request, board_id):
    board = get_object_or_404(ForumBoard, id=board_id)
    user = user_auth(request)

    if request.method == 'POST':
        form = ForumTopicCreateForm(request.POST)
        if form.is_valid():
            topic = ForumTopic(board=board, author=user)
            topic.save()

            post = ForumPost()
            post.topic = topic
            post.author = user
            post.title = form.data['title']
            post.content = form.data['content']
            post.date = datetime.datetime.now()
            post.save()

            topic.first_post = post
            topic.last_post = post
            topic.save()

            board_it = topic.board
            while board_it is not None:
                board_it.topics += 1
                board_it.last_post = post
                board_it.save()
                board_it = board_it.parent_board


            user.forum_posts += 1
            user.save()

            return HttpResponseRedirect(reverse('display_topic',
                                                kwargs={'topic_id' : topic.id}))
    else:
        form = ForumTopicCreateForm()

    return {
        'board' : board,
        'form' : form,
        'stack' : get_parents(board),
        'navigation' : {
            'main' : 'forum',
            'other' : 'new-topic'
        }
    }
Пример #44
0
def display_attachment (request, page_url, hash):
    user = user_auth(request)
    wiki_page = get_object_or_404(WikiPage, url = page_url)
    attachment = get_object_or_404(WikiAttachment, wiki_page = wiki_page, hash = hash)

    if attachment.can_view(user) is False:
        return redirect_to_index("You don't have enough permissions to view this attachment.")

    filename = os.path.join(ATTACHMENTS_DIR, "attachment%d-%s" % (attachment.id, attachment.name))
    try:
      wrapper = FileWrapper(file(filename))
    except IOError:
      raise Http404
    response = HttpResponse(wrapper, content_type='text/plain')
    response['Content-Length'] = os.path.getsize(filename)
    response['Content-Disposition'] = 'attachment; filename="%s"' % attachment.name.replace('"', '')
    return response
Пример #45
0
def toggle_dashboard(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry,
                                   author=username,
                                   permalink=permalink)

    if user.has_perm('app_add_dashboardentry') is False:
        return redirect_to_index(
            "You don't have permission to modify dashboard.")

    if DashboardEntry.objects.filter(blog_entry=blog_entry):
        DashboardEntry.objects.filter(blog_entry=blog_entry).delete()
    else:
        DashboardEntry(blog_entry=blog_entry).save()

    return HttpResponseRedirect(reverse('dashboard'))
Пример #46
0
def new_topic(request, board_id):
    board = get_object_or_404(ForumBoard, id=board_id)
    user = user_auth(request)

    if request.method == 'POST':
        form = ForumTopicCreateForm(request.POST)
        if form.is_valid():
            topic = ForumTopic(board=board, author=user)
            topic.save()

            post = ForumPost()
            post.topic = topic
            post.author = user
            post.title = form.data['title']
            post.content = form.data['content']
            post.date = datetime.datetime.now()
            post.save()

            topic.first_post = post
            topic.last_post = post
            topic.save()

            board_it = topic.board
            while board_it is not None:
                board_it.topics += 1
                board_it.last_post = post
                board_it.save()
                board_it = board_it.parent_board

            user.forum_posts += 1
            user.save()

            return HttpResponseRedirect(
                reverse('display_topic', kwargs={'topic_id': topic.id}))
    else:
        form = ForumTopicCreateForm()

    return {
        'board': board,
        'form': form,
        'stack': get_parents(board),
        'navigation': {
            'main': 'forum',
            'other': 'new-topic'
        }
    }
Пример #47
0
def delete_attachment(request, page_url, hash):
    user = user_auth(request)
    wiki_page = get_object_or_404(WikiPage, url=page_url)
    attachment = get_object_or_404(WikiAttachment,
                                   wiki_page=wiki_page,
                                   hash=hash)

    if attachment.can_delete(user) is False:
        return redirect_to_index(
            "You don't have enough permissions to delete this attachment.")

    os.remove(
        os.path.join(ATTACHMENTS_DIR,
                     "attachment%d-%s" % (attachment.id, attachment.name)))
    attachment.delete()

    return HttpResponseRedirect(
        reverse('attachments', kwargs={'page_url': wiki_page.url}))
Пример #48
0
def create_eval (request):
    user = user_auth(request)

    if user.has_perm('api.add_eval') is False:
        return redirect_to_index('You don\'t have permission to add evals.')

    if request.method == 'POST':
        form = CreateEvalForm(request)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('')
    else:
        form = CreateEvalForm()

    return render_to_response('api/create_eval.html',
                              {'form' : form },
                              context_instance = RequestContext(request)
                             )
Пример #49
0
def display_entry(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry, author=username, permalink=permalink)
    can_edit = user is not None and (user.has_perm("app.edit_blogentry") or user == username)
    can_delete = user is not None and (user.has_perm("app.delete_blogentry") or user == username)
    can_manage_dashboard = user is not None and (user.has_perm("app.add_dashboardentry"))
    is_dashboard_entry = len(DashboardEntry.objects.filter(blog_entry=blog_entry)) > 0

    return {
        "blog_entry": blog_entry,
        "can_edit": can_edit,
        "can_delete": can_delete,
        "can_manage_dashboard": can_manage_dashboard,
        "last_blog_entries": BlogEntry.objects.filter(author=username).order_by("-date")[:10],
        "is_dashboard_entry": is_dashboard_entry,
        "navigation": {"main": "blog", "other": "display-blog-entry", "author": blog_entry.author},
    }
Пример #50
0
def display_page (request, page_url, revision_id = None, widgets = {}):
    page = get_object_or_None(WikiPage, url = page_url)

    if page is None:
        return create_wiki_page(request, page_url)

    if revision_id is None:    # Viewing the last revision of page
        revision = page.last_revision()
    else:   # Getting revision by revision_id or none
        revision = get_object_or_404(WikiRevision, wiki_page = page, revision_id = revision_id)

    # get the current user
    user = user_auth(request)

    return display_revision(revision = revision,
                            user = user,
                            widgets = widgets,
                            context_instance = RequestContext(request),
                           )
Пример #51
0
def display_job_source_code (request, job_id):
    user = user_auth (request)
    job = get_object_or_404(Job, id=job_id)

    if job.can_view_source_code(user) is False:
        return redirect_to_index("You don't have permission to view this job's source code")

    lexer = get_lexer_by_name(pygments_standardize(job.language), stripall=True, tabsize=4)
    formatter = HtmlFormatter(linenos=True)
    source_code = highlight(''.join(open(os.path.join(JOBS_DIR, 'job%d.%s' % (job.id, job.language)), 'r').readlines()), lexer, formatter)

    return {
        'job' : job,
        'source_code' : source_code,
        'navigation' : {
            'main' : 'judge',
            'other' : 'display-job-source',
        }
    }
Пример #52
0
def create_wiki_page(request, page_url=None):
    user = user_auth(request)

    if user.has_perm('app.add_wikipage') is False:
        return redirect_to_index(
            "You don't have permission to add wiki pages.")

    if WikiPage.objects.filter(url=page_url):
        return redirect_to_index("Page already exists...")

    if request.method == 'POST':
        form = WikiRevisionEditForm(request.POST)

        if form.is_valid():
            page_url = request.POST['url']
            page = WikiPage()
            page.url = page_url
            page.author = user
            page.save()

            revision = form.save(commit=False)
            revision.revision_id = 1
            revision.date = datetime.datetime.now()
            revision.ip = get_ip_from_request(request)
            revision.wiki_page = page
            revision.author = user
            revision.save()

            page.save()

            return HttpResponseRedirect(
                reverse('display_page', kwargs={'page_url': page_url}))
    else:
        form = WikiRevisionEditForm()

    return render_to_response('wiki_edit_revision.html', {
        'revision': 1,
        'form': form,
        'edit': False,
        'page_url': page_url,
    },
                              context_instance=RequestContext(request))
Пример #53
0
def create_wiki_page (request, page_url = None):
    user = user_auth(request)

    if user.has_perm('app.add_wikipage') is False:
        return redirect_to_index("You don't have permission to add wiki pages.")

    if WikiPage.objects.filter(url = page_url):
        return redirect_to_index("Page already exists...")

    if request.method == 'POST':
        form = WikiRevisionEditForm(request.POST)

        if form.is_valid():
            page_url = request.POST['url']
            page = WikiPage()
            page.url = page_url
            page.author = user
            page.save()

            revision = form.save(commit = False)
            revision.revision_id = 1
            revision.date = datetime.datetime.now()
            revision.ip = get_ip_from_request(request)
            revision.wiki_page = page
            revision.author = user
            revision.save()

            page.save()

            return HttpResponseRedirect(reverse('display_page',
                                            kwargs={'page_url' : page_url }))
    else:
        form = WikiRevisionEditForm()

    return render_to_response('wiki_edit_revision.html',
                              {'revision' : 1,
                               'form' : form,
                               'edit' : False,
                               'page_url' : page_url,
                              },
                              context_instance = RequestContext(request)
                             )
Пример #54
0
def reply(request, topic_id):
    user = user_auth(request)
    topic = get_object_or_404(ForumTopic, id=topic_id)
    board = topic.board

    if request.method == 'POST':
        form = ForumPostReplyForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.topic = topic
            post.author = user
            post.date = datetime.datetime.now()
            post.save()

            post.topic.posts += 1
            post.topic.last_post = post
            post.topic.save()

            board_it = post.topic.board
            while board_it is not None:
                board_it.posts += 1
                board_it.last_post = post
                board_it.save()
                board_it = board_it.parent_board

            user.forum_posts += 1
            user.save()

            return redirect(
                reverse('display_topic', kwargs={'topic_id': topic.id}))
    else:
        form = ForumPostReplyForm()

    return {
        'topic': topic,
        'form': form,
        'stack': get_parents(board),
        'navigation': {
            'main': 'forum',
            'other': 'reply'
        }
    }
Пример #55
0
def edit_entry(request, username, permalink):
    user = user_auth(request)
    username = get_object_or_404(UserProfile, username=username)
    blog_entry = get_object_or_404(BlogEntry,
                                   author=username,
                                   permalink=permalink)

    if user.has_perm('app.edit_blogentry') is False and user != username:
        return redirect_to_index(
            "You don't have permission to edit this blog entry.")

    if request.method == 'POST':
        form = BlogEntryEditForm(request.POST, instance=blog_entry)

        if form.is_valid():
            form.save()

            tags = []
            for tag, value in request.POST.iteritems():
                if re.match('tag(?P<tag_name>\d+)input', tag):
                    tags.append(value)

            update_tags(blog_entry, tags)

            return redirect(
                reverse("display_entry",
                        kwargs={
                            'username': username.username,
                            'permalink': permalink,
                        }))
    else:
        form = BlogEntryEditForm(blog_entry)

    return {
        'form': form,
        'blog_entry': blog_entry,
        'navigation': {
            'main': 'blog',
            'other': 'edit-entry'
        }
    }
Пример #56
0
def reply (request, topic_id):
    user = user_auth(request)
    topic = get_object_or_404(ForumTopic, id = topic_id)
    board = topic.board

    if request.method == 'POST':
        form = ForumPostReplyForm(request.POST)
        if form.is_valid():
            post = form.save(commit = False)
            post.topic = topic
            post.author = user
            post.date = datetime.datetime.now()
            post.save()

            post.topic.posts += 1
            post.topic.last_post = post
            post.topic.save()

            board_it = post.topic.board
            while board_it is not None:
                board_it.posts += 1
                board_it.last_post = post
                board_it.save()
                board_it = board_it.parent_board

            user.forum_posts += 1
            user.save()

            return redirect(reverse('display_topic', kwargs={'topic_id': topic.id}))
    else:
        form = ForumPostReplyForm()

    return {
        'topic' : topic,
        'form' : form,
        'stack' : get_parents(board),
        'navigation' : {
            'main' : 'forum',
            'other' : 'reply'
        }
    }
Пример #57
0
def delete_post(request, post_id):
    user = user_auth(request)
    post = get_object_or_404(ForumPost, id=post_id)

    if post.can_delete(user) is False:
        return redirect_to_index(
            "You don't have enough permissions to delete this post.")

    topic = post.topic
    topic.posts -= 1
    topic.save()

    if post == topic.last_post:
        topic.last_post = ForumPost.objects.filter(
            topic=topic).order_by('id').reverse()[1]
        topic.save()

    board_it = post.topic.board
    while board_it is not None:
        board_it.posts -= 1
        board_it.save()
        if board_it.last_post == post:
            fake_post = ForumPost(id=-1)

            for y in ForumTopic.objects.filter(board=board_it):
                if y.last_post is not None and y.last_post != post and y.last_post.id > fake_post.id:
                    fake_post = y.last_post
            for y in ForumBoard.objects.filter(parent_board=board_it):
                if y.last_post is not None and y.last_post != post and y.last_post.id > fake_post.id:
                    fake_post = y.last_post
            board_it.last_post = fake_post
            board_it.save()
        board_it = board_it.parent_board

    post.author.forum_posts -= 1
    post.author.save()

    post.delete()

    return HttpResponseRedirect(
        reverse("display_topic", kwargs={'topic_id': topic.id}))
Пример #58
0
def create_problem_wiki_page(problem, request):
    user = user_auth(request)

    w = WikiPage()
    w.url = reverse('display_problem', kwargs={
        'problem_code': problem.code
    }).rstrip('/').lstrip('/')
    w.author = user
    w.save()

    r = WikiRevision()
    r.revision_id = 1
    r.content = """
== %s ==
Problem body...
=== Input file ===
From input file //%s.in// ...
=== Output file ===
Write ... to output file //%s.out//.
=== Restrictions and specifications
*0 < //N// < 1000

|=%s.in |=%s.out |
|some input |some output |
                """ % (problem.code, problem.code, problem.code, problem.code,
                       problem.code)

    r.date = datetime.datetime.now()
    r.ip = get_ip_from_request(request)
    r.wiki_page = w
    r.title = problem.code
    r.markup_type = 'C'
    r.security = 'Private'
    r.author = user
    r.save()

    w.save()

    return w