Ejemplo n.º 1
0
def article_delete(context, request):
    """
    Delete an article
    """
    check_owner(context, request)
    c = ArticleLib()
    page_id = request.matchdict.get('page_id')
    try:
        c.delete(request, c.show_page(page_id))
        request.session.flash(s.show_setting("INFO_DELETED") % page_id, INFO)
        return redirect(request, "article_list")
    except PageNotFound:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
        return redirect(request, "article_list")
Ejemplo n.º 2
0
    def gamedep_edit_revision_submit(context, request, deserialized,
                                     bind_params):
        page_id, revision = get_pageid_revision(request)
        gamedeptype = request.matchdict.get('type')
        g = GameDepLib(gamedeptype)
        frmversion = deserialized.get("version")
        frmmodule_type = deserialized.get("moduletype")
        if bind_params['update']:
            g.update_revision(page_id, revision, frmversion, frmmodule_type)
            request.session.flash(
                s.show_setting("INFO_REVISION_UPDATED") %
                (frmversion, page_id), INFO)
        else:
            try:
                g.create_revision(page_id, frmversion, frmmodule_type)
                request.session.flash(
                    s.show_setting("INFO_REVISION_CREATED") %
                    (frmversion, page_id), INFO)
            except GameDepFound:
                request.session.flash(
                    s.show_setting("ERROR_FOUND") % frmversion, ERROR)

        return redirect(request,
                        "gamedep_item",
                        page_id=page_id,
                        type=gamedeptype)
Ejemplo n.º 3
0
def article_read(context, request):
    """
    Display an article
    """
    c = ArticleLib()
    result = {}
    page_id = request.matchdict.get('page_id') or "Front_Page"
    revision_id = request.matchdict.get('revision')
    try:
        page = c.show_page(page_id)
        if revision_id:
            revision = c.show_revision(page, revision_id)
        else:
            revision = page.revisions[0]
        if page.private and not has_permission("set_private", context,
                                               request):
            raise HTTPForbidden
        else:
            result.update({
                'page': page,
                'revision': revision,
                "revision_id": revision_id,
                "thread_enabled": False
            })

            if (request.query_string.startswith("comments")
                    and page.thread_id != -1):
                from pyracms_forum.views import get_thread
                result.update(get_thread(context, request, page.thread_id))
                result.update({"thread_enabled": True})
            return result
    except PageNotFound:
        return redirect(request, "article_create", page_id=page_id)
Ejemplo n.º 4
0
def delete_forum(context, request):
    """
    Delete a forum
    """
    forum = bb.get_forum(request.matchdict.get('forum_id'))
    category_id = forum.category.name
    bb.delete_forum(forum)
    return redirect(request, 'list_forum', category_id=category_id)
Ejemplo n.º 5
0
def article_switch_renderer(context, request):
    """
    Use another rendering engine for the page
    """
    c = ArticleLib()
    page_id = request.matchdict.get('page_id')
    c.switch_renderer(page_id)
    return redirect(request, "article_read", page_id=page_id)
Ejemplo n.º 6
0
def article_set_private(context, request):
    """
    Make page private
    """
    c = ArticleLib()
    page_id = request.matchdict.get('page_id')
    c.set_private(request, page_id)
    return redirect(request, "article_read", page_id=page_id)
Ejemplo n.º 7
0
def article_hide_display_name(context, request):
    """
    Hide display name header
    """
    c = ArticleLib()
    page_id = request.matchdict.get('page_id')
    c.hide_display_name(page_id)
    return redirect(request, "article_read", page_id=page_id)
Ejemplo n.º 8
0
 def add_forum_submit(context, request, deserialized, bind_params):
     """
     Add the forum to the database
     """
     category = bind_params.get("category")
     bb.add_forum(deserialized.get("name"), deserialized.get("description"),
                  category)
     request.session.flash(s.show_setting("INFO_ACL_UPDATED"), INFO)
     return redirect(request, 'list_forum', category_id=category.name)
Ejemplo n.º 9
0
 def edit_forum_submit(context, request, deserialized, bind_params):
     """
     Save edited forum to database
     """
     forum = bind_params.get("forum")
     forum.name = deserialized.get("name")
     forum.description = deserialized.get("description")
     request.session.flash(s.show_setting("INFO_ACL_UPDATED"), INFO)
     return redirect(request, 'list_forum', category_id=forum.category.name)
Ejemplo n.º 10
0
 def edit_post_submit(context, request, deserialized, bind_params):
     """
     Save edited post to database
     """
     bind_params['post'].name = deserialized['title']
     bind_params['post'].article = deserialized['body']
     return redirect(request,
                     'thread',
                     threadid=bind_params['post'].thread.id)
Ejemplo n.º 11
0
 def create_thread_submit(context, request, deserialized, bind_params):
     """
     Add submitted thread and post to database
     """
     user = u.show(get_username(request))
     thread = bb.add_thread(deserialized.get("title"),
                            deserialized.get("description"),
                            deserialized.get("body"), user,
                            bind_params['forum'])
     return redirect(request, 'thread', threadid=thread.id)
Ejemplo n.º 12
0
def article_revert(context, request):
    """
    Revert an old revision, basically makes a new revision with old contents
    """
    check_owner(context, request)
    c = ArticleLib()
    matchdict_get = request.matchdict.get
    try:
        page = c.show_page(matchdict_get('page_id'))
        c.revert(request, page, c.show_revision(page,
                                                matchdict_get('revision')),
                 u.show(get_username(request)))
        request.session.flash(s.show_setting("INFO_REVERT") % page.name, INFO)
        return redirect(request, "article_read", page_id=page.name)
    except PageNotFound:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % matchdict_get('page_id'),
            ERROR)
        return redirect(request, "article_list")
Ejemplo n.º 13
0
def gamedep_delete(context, request):
    check_owner(context, request)
    page_id = request.matchdict.get('page_id')
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    if g.exists(page_id):
        g.delete(page_id, request)
        request.session.flash(s.show_setting("INFO_DELETED") % page_id, INFO)
    else:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
    return redirect(request, "gamedeplist", type=gamedeptype)
Ejemplo n.º 14
0
def gamedep_delete(context, request):
    check_owner(context, request)
    page_id = request.matchdict.get('page_id')
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    if g.exists(page_id):
        g.delete(page_id, request)
        request.session.flash(s.show_setting("INFO_DELETED") % page_id, INFO)
    else:
        request.session.flash(s.show_setting("ERROR_NOT_FOUND")
                              % page_id, ERROR)
    return redirect(request, "gamedeplist", type=gamedeptype)
Ejemplo n.º 15
0
 def article_create_submit(context, request, deserialized, bind_params):
     """
     Save new article to the database
     """
     name = request.matchdict.get("page_id")
     display_name = deserialized.get("display_name")
     article = deserialized.get("article")
     summary = deserialized.get("summary")
     tags = deserialized.get("tags")
     c.create(request, name, display_name, article, summary,
              u.show(get_username(request)), tags)
     return redirect(request, "article_read", page_id=name)
Ejemplo n.º 16
0
def forum_add_vote(context, request):
    """
    Add a vote to a post
    """
    vote_id = request.matchdict.get('vote_id')
    like = request.matchdict.get('like').lower() == "true"
    post = bb.get_post(vote_id)
    try:
        bb.add_vote(post, u.show(get_username(request)), like)
        request.session.flash(s.show_setting("INFO_VOTE"), INFO)
    except AlreadyVoted:
        request.session.flash(s.show_setting("ERROR_VOTE"), ERROR)
    return redirect(request, "article_read", page_id=vote_id)
Ejemplo n.º 17
0
 def gamedep_add_source_submit(context, request, deserialized, bind_params):
     page_id, revision = get_pageid_revision(request)
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     source = deserialized.get("source")
     g.create_source(page_id, revision, source['fp'], source['mimetype'],
                     source['filename'], request)
     request.session.flash(
         s.show_setting("INFO_SOURCE_UPLOADED") % source['filename'], INFO)
     return redirect(request,
                     "gamedep_item",
                     page_id=page_id,
                     type=gamedeptype)
Ejemplo n.º 18
0
 def gamedep_add_source_submit(context, request, deserialized,
                               bind_params):
     page_id, revision = get_pageid_revision(request)
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     source = deserialized.get("source")
     g.create_source(page_id, revision, source['fp'],
                     source['mimetype'], source['filename'],
                     request)
     request.session.flash(s.show_setting("INFO_SOURCE_UPLOADED")
                           % source['filename'], INFO)
     return redirect(request, "gamedep_item", page_id=page_id,
                     type=gamedeptype)
Ejemplo n.º 19
0
 def article_update_submit(context, request, deserialized, bind_params):
     """
     Add a article revision to the database
     """
     page = bind_params.get("page")
     name = request.matchdict.get("page_id")
     article = deserialized.get("article")
     summary = deserialized.get("summary")
     tags = deserialized.get("tags")
     page.display_name = deserialized.get("display_name")
     c.update(request, page, article, summary,
              u.show(get_username(request)), tags)
     return redirect(request, "article_read", page_id=name)
Ejemplo n.º 20
0
def article_list_revisions(context, request):
    """
    Show a list of article revisions, every time a change is made, 
    a revision is added
    """
    c = ArticleLib()
    page_id = request.matchdict.get('page_id')
    try:
        page = c.show_page(page_id)
    except PageNotFound:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
        return redirect(request, "article_list")
    return {'page': page}
Ejemplo n.º 21
0
def article_add_vote(context, request):
    """
    Add a vote to an article
    """
    vote_id = request.matchdict.get('vote_id')
    like = request.matchdict.get('like').lower() == "true"
    a = ArticleLib()
    article = a.show_page(vote_id)
    try:
        a.add_vote(article, u.show(get_username(request)), like)
        request.session.flash(s.show_setting("INFO_VOTE"), INFO)
    except AlreadyVoted:
        request.session.flash(s.show_setting("ERROR_VOTE"), ERROR)
    return redirect(request, "article_read", page_id=vote_id)
Ejemplo n.º 22
0
 def edit_forum_category_submit(context, request, deserialized,
                                bind_params):
     """
     Save edited forum category to database
     """
     groups = set([g for g in bind_params["forum_categories"]])
     deserialized_groups = set(deserialized['forum_categories'])
     for item in deserialized_groups - groups:
         bb.add_category(item)
     for item in groups - deserialized_groups:
         bb.delete_category(item)
     request.session.flash(s.show_setting("INFO_FORUM_CATEGORY_UPDATED"),
                           INFO)
     return redirect(request, 'category_list')
Ejemplo n.º 23
0
def gamedep_add_vote(context, request):
    """
    Add a vote to a gamedep
    """
    vote_id = request.matchdict.get('vote_id')
    like = request.matchdict.get('like').lower() == "true"
    gamedeptype = request.matchdict.get('type')
    gd_lib = GameDepLib(gamedeptype)
    gd = gd_lib.show(vote_id, no_revision_error=False)[0]
    try:
        gd_lib.add_vote(gd, u.show(get_username(request)), like)
        request.session.flash(s.show_setting("INFO_VOTE"), INFO)
    except AlreadyVoted:
        request.session.flash(s.show_setting("ERROR_VOTE"), ERROR)
    return redirect(request, "article_read", page_id=vote_id)
Ejemplo n.º 24
0
def gamedep_add_vote(context, request):
    """
    Add a vote to a gamedep
    """
    vote_id = request.matchdict.get('vote_id')
    like = request.matchdict.get('like').lower() == "true"
    gamedeptype = request.matchdict.get('type')
    gd_lib = GameDepLib(gamedeptype)
    gd = gd_lib.show(vote_id, no_revision_error=False)[0]
    try:
        gd_lib.add_vote(gd, u.show(get_username(request)), like)
        request.session.flash(s.show_setting("INFO_VOTE"), INFO)
    except AlreadyVoted:
        request.session.flash(s.show_setting("ERROR_VOTE"), ERROR)
    return redirect(request, "article_read", page_id=vote_id)
Ejemplo n.º 25
0
def gamedep_delete_dependency(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    depid = request.matchdict.get('depid')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    try:
        dep_name = g.show_dependency(g.show(page_id)[0], depid).page_obj.name
        g.delete_dependency(page_id, depid)
        request.session.flash(
            s.show_setting("INFO_DEPENDENCY_DELETED") % dep_name, INFO)
    except GameDepNotFound:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id, type=gamedeptype)
Ejemplo n.º 26
0
def gamedep_delete_dependency(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    depid = request.matchdict.get('depid')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    try:
        dep_name = g.show_dependency(g.show(page_id)[0],
                                     depid).page_obj.name
        g.delete_dependency(page_id, depid)
        request.session.flash(s.show_setting("INFO_DEPENDENCY_DELETED")
                              % dep_name, INFO)
    except GameDepNotFound:
        request.session.flash(s.show_setting("ERROR_NOT_FOUND")
                              % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id,
                    type=gamedeptype)
Ejemplo n.º 27
0
def gamedep_delete_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    binid = request.matchdict.get('binary_id')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    revision = request.matchdict.get('revision')
    try:
        with DBSession.no_autoflush:
            bin_name = g.show_binary(binid).file_obj.name
            g.delete_binary(page_id, revision, binid)
            request.session.flash(
                s.show_setting("INFO_BINARY_DELETED") % bin_name, INFO)
    except GameDepNotFound:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id, type=gamedeptype)
Ejemplo n.º 28
0
def gamedep_delete_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    binid = request.matchdict.get('binary_id')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    revision = request.matchdict.get('revision')
    try:
        with DBSession.no_autoflush:
            bin_name = g.show_binary(binid).file_obj.name
            g.delete_binary(page_id, revision, binid)
            request.session.flash(s.show_setting("INFO_BINARY_DELETED")
                                  % bin_name, INFO)
    except GameDepNotFound:
        request.session.flash(s.show_setting("ERROR_NOT_FOUND")
                              % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id,
                    type=gamedeptype)
Ejemplo n.º 29
0
 def gamedep_edit_submit(context, request, deserialized, bind_params):
     page_id = get_pageid_revision(request)[0]
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     name = deserialized.get("name")
     display_name = deserialized.get("display_name")
     description = deserialized.get("description")
     tags = deserialized.get("tags")
     if g.exists(page_id):
         g.update(page_id, name, display_name, description, tags)
         request.session.flash(s.show_setting("INFO_UPDATED")
                               % page_id, INFO)
     else:
         g.create(name, display_name, description, tags,
                  u.show(get_username(request)), request)
         request.session.flash(s.show_setting("INFO_CREATED")
                               % page_id, INFO)
     return redirect(request, "gamedep_item", page_id=name,
                     type=gamedeptype)
Ejemplo n.º 30
0
def gamedep_delete_revision(context, request):
    check_owner(context, request)
    page_id = request.matchdict.get('page_id')
    revision = request.matchdict.get('revision')
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    if g.exists(page_id):
        caption = "Version %s" % g.show(page_id, revision)[1].version
        try:
            g.delete_revision(page_id, revision, request)
            request.session.flash(
                s.show_setting("INFO_DELETED") % caption, INFO)
        except GameDepNotFound:
            request.session.flash(
                s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
    else:
        request.session.flash(
            s.show_setting("ERROR_NOT_FOUND") % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id, type=gamedeptype)
Ejemplo n.º 31
0
def gamedep_delete_revision(context, request):
    check_owner(context, request)
    page_id = request.matchdict.get('page_id')
    revision = request.matchdict.get('revision')
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    if g.exists(page_id):
        caption = "Version %s" % g.show(page_id, revision)[1].version
        try:
            g.delete_revision(page_id, revision, request)
            request.session.flash(s.show_setting("INFO_DELETED")
                                  % caption, INFO)
        except GameDepNotFound:
            request.session.flash(s.show_setting("ERROR_NOT_FOUND")
                                  % page_id, ERROR)
    else:
        request.session.flash(s.show_setting("ERROR_NOT_FOUND")
                              % page_id, ERROR)
    return redirect(request, "gamedep_item", page_id=page_id,
                    type=gamedeptype)
Ejemplo n.º 32
0
 def gamedep_edit_submit(context, request, deserialized, bind_params):
     page_id = get_pageid_revision(request)[0]
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     name = deserialized.get("name")
     display_name = deserialized.get("display_name")
     description = deserialized.get("description")
     tags = deserialized.get("tags")
     if g.exists(page_id):
         g.update(page_id, name, display_name, description, tags)
         request.session.flash(
             s.show_setting("INFO_UPDATED") % page_id, INFO)
     else:
         g.create(name, display_name, description, tags,
                  u.show(get_username(request)), request)
         request.session.flash(
             s.show_setting("INFO_CREATED") % page_id, INFO)
     return redirect(request,
                     "gamedep_item",
                     page_id=name,
                     type=gamedeptype)
Ejemplo n.º 33
0
    def gamedep_edit_revision_submit(context, request, deserialized,
                                     bind_params):
        page_id, revision = get_pageid_revision(request)
        gamedeptype = request.matchdict.get('type')
        g = GameDepLib(gamedeptype)
        frmversion = deserialized.get("version")
        frmmodule_type = deserialized.get("moduletype")
        if bind_params['update']:
            g.update_revision(page_id, revision, frmversion, frmmodule_type)
            request.session.flash(s.show_setting("INFO_REVISION_UPDATED")
                                  % (frmversion, page_id), INFO)
        else:
            try:
                g.create_revision(page_id, frmversion, frmmodule_type)
                request.session.flash(s.show_setting("INFO_REVISION_CREATED")
                                        % (frmversion, page_id), INFO)
            except GameDepFound:
                request.session.flash(s.show_setting("ERROR_FOUND")
                                        % frmversion, ERROR)

        return redirect(request, "gamedep_item", page_id=page_id,
                        type=gamedeptype)
Ejemplo n.º 34
0
 def gamedep_add_dependency_submit(context, request, deserialized,
                                   bind_params):
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     page_id = request.matchdict.get('page_id')
     dep_id = request.matchdict.get('depid')
     form_rev_id = deserialized.get("revision")
     form_dep_id = deserialized.get("dependency")
     if not form_rev_id:
         return HTTPFound(location=current_route_url(request)
                                   + "/%s" % form_dep_id)
     else:
         if form_rev_id == "-1":
             g.create_dependency(page_id, dep_id)
         else:
             g.create_dependency(page_id, dep_id, form_rev_id)
         dep_name = g.show_dependency(g.show(page_id,
                                             no_revision_error=False)[0],
                                      dep_id).page.name
         request.session.flash(s.show_setting("INFO_DEPENDENCY_ADDED")
                               % dep_name, INFO)
         return redirect(request, "gamedep_item", page_id=page_id,
                         type=gamedeptype)
Ejemplo n.º 35
0
 def gamedep_add_dependency_submit(context, request, deserialized,
                                   bind_params):
     gamedeptype = request.matchdict.get('type')
     g = GameDepLib(gamedeptype)
     page_id = request.matchdict.get('page_id')
     dep_id = request.matchdict.get('depid')
     form_rev_id = deserialized.get("revision")
     form_dep_id = deserialized.get("dependency")
     if not form_rev_id:
         return HTTPFound(location=current_route_url(request) +
                          "/%s" % form_dep_id)
     else:
         if form_rev_id == "-1":
             g.create_dependency(page_id, dep_id)
         else:
             g.create_dependency(page_id, dep_id, form_rev_id)
         dep_name = g.show_dependency(
             g.show(page_id, no_revision_error=False)[0], dep_id).page.name
         request.session.flash(
             s.show_setting("INFO_DEPENDENCY_ADDED") % dep_name, INFO)
         return redirect(request,
                         "gamedep_item",
                         page_id=page_id,
                         type=gamedeptype)
Ejemplo n.º 36
0
def gamedep_add_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    binary_id = request.matchdict.get('binary_id')
    revision = request.matchdict.get('revision')
    edittype = request.matchdict.get('edittype')

    try:
        bin_obj = g.show_binary(binary_id)
    except GameDepNotFound:
        bin_obj = None

    if binary_id and edittype:
        pass

    # Initialise form library
    if not binary_id and not edittype:
        schema = AddBinarySchema()
    elif binary_id and edittype == "1":
        schema = EditBinarySchema()
    elif binary_id and edittype == "2":
        schema = EditOSArchSchema()
    else:
        request.session.flash(s.show_setting("ERROR_INVALID_BINARY_ID"), ERROR)
        return redirect(request,
                        "gamedep_item",
                        page_id=page_id,
                        type=gamedeptype)

    schema = schema.bind(gamedep_type=gamedeptype,
                         bin_obj=bin_obj,
                         req_file_folder=["%s/" % page_id])
    myform = Form(schema, buttons=['submit'])
    reqts = myform.get_widget_resources()

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            deserialized = myform.validate(controls)
        except ValidationFailure as e:
            # Failed validation
            return {
                'page_id': page_id,
                'form': e.render(),
                'js_links': reqts['js']
            }

        # Form submitted, all validated!
        binary = deserialized.get("binary")
        operatingsystem = deserialized.get("operatingsystem")
        architecture = deserialized.get("architecture")
        if not binary_id and not edittype:
            g.create_binary(page_id, revision, operatingsystem, architecture,
                            binary['fp'], binary['mimetype'],
                            binary['filename'], request)
            request.session.flash(
                s.show_setting("INFO_BINARY_ADDED") % binary['filename'], INFO)
        else:
            g.update_binary(page_id, revision, binary_id, operatingsystem,
                            architecture, binary, request)
            request.session.flash(
                s.show_setting("INFO_BINARY_UPDATED") % binary['filename'],
                INFO)
        return redirect(request,
                        "gamedep_item",
                        page_id=page_id,
                        type=gamedeptype)
    # Display default form
    return {
        'page_id': page_id,
        'form': myform.render(),
        'js_links': reqts['js']
    }
Ejemplo n.º 37
0
 def restore_backup_submit(context, request, deserialized, bind_params):
     a = ArticleLib()
     a.from_json(
         request,
         deserialized['restore_backup_json_file']['fp'].read().decode())
     return redirect(request, "article_list")
Ejemplo n.º 38
0
def gamedep_add_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    binary_id = request.matchdict.get('binary_id')
    revision = request.matchdict.get('revision')
    edittype = request.matchdict.get('edittype')

    try:
        bin_obj = g.show_binary(binary_id)
    except GameDepNotFound:
        bin_obj = None

    if binary_id and edittype:
        pass

    # Initialise form library
    if not binary_id and not edittype:
        schema = AddBinarySchema()
    elif binary_id and edittype == "1":
        schema = EditBinarySchema()
    elif binary_id and edittype == "2":
        schema = EditOSArchSchema()
    else:
        request.session.flash(s.show_setting("ERROR_INVALID_BINARY_ID"), ERROR)
        return redirect(request, "gamedep_item", page_id=page_id,
                        type=gamedeptype)

    schema = schema.bind(gamedep_type=gamedeptype, bin_obj=bin_obj,
                         req_file_folder=["%s/" % page_id])
    myform = Form(schema, buttons=['submit'])
    reqts = myform.get_widget_resources()

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            deserialized = myform.validate(controls)
        except ValidationFailure as e:
            # Failed validation
            return {'page_id': page_id, 'form': e.render(),
                    'js_links': reqts['js']}

        # Form submitted, all validated!
        binary = deserialized.get("binary")
        operatingsystem = deserialized.get("operatingsystem")
        architecture = deserialized.get("architecture")
        if not binary_id and not edittype:
            g.create_binary(page_id, revision, operatingsystem, architecture,
                            binary['fp'], binary['mimetype'],
                            binary['filename'], request)
            request.session.flash(s.show_setting("INFO_BINARY_ADDED")
                                  % binary['filename'], INFO)
        else:
            g.update_binary(page_id, revision, binary_id, operatingsystem,
                            architecture, binary, request)
            request.session.flash(s.show_setting("INFO_BINARY_UPDATED")
                                  % binary['filename'], INFO)
        return redirect(request, "gamedep_item", page_id=page_id,
                        type=gamedeptype)
    # Display default form
    return {'page_id': page_id, 'form': myform.render(),
            'js_links': reqts['js']}