def update_version_page():
    ctx = context(flask.request)
    if not ctx.has_borqs_id():
        return redirect_to_signin()

    all_apps = publisher_services.get_all_apps(ctx)
    if flask.request.method == u'POST':
        lang = flask.request.form.get(u'lang', u'default')
        ps = merge_request_params(flask.request)
        error_info = _validate_fields(u'update_version', ps)
        if not error_info:
            p = publisher_services.upsert_version_for_lang(
                ctx, ps[u'lang'], ps.get(u'id', None), ps[u'version'],
                ps[u'name'], ps[u'pricetag_id'], ps[u'description'],
                ps[u'update_change'], ps[u'min_app_vc'], ps[u'max_app_vc'],
                ps[u'supported_mod'], ps[u'author_name'], ps[u'author_email'],
                ps[u'logo_file'], ps[u'cover_file'], ps[u'screenshot1_file'],
                ps[u'screenshot2_file'], ps[u'screenshot3_file'],
                ps[u'screenshot4_file'], ps[u'screenshot5_file'], ps[u'file'])
            available_pricetags = publisher_services.get_available_pricetags_for_lang_by_pid(
                ctx, p[u'id'], lang)
            nav_paths = [
                (_find_app_name(all_apps, p[u'app_id']),
                 u'/publisher/products/list.html?app=%s' % p[u'app_id'])
            ]
            return flask.render_template(
                u'publisher_product_edit.jinja2',
                page_title=u'Update version',
                all_apps=all_apps,
                app_id=p[u'app_id'],
                category=p[u'category'],
                lang=lang,
                lang_name=get_locale_name(lang),
                available_pricetags=available_pricetags,
                id=p[u'id'],
                version=p[u'version'],
                name=p[u'name'],
                pricetag_id=p[u'pricetag_id'],
                description=p[u'description'],
                update_change=p[u'update_change'],
                min_app_vc=p[u'min_app_vc'],
                max_app_vc=p[u'max_app_vc'],
                supported_mod=p[u'supported_mod'],
                author_name=p[u'author_name'],
                author_email=p[u'author_email'],
                logo_image=p[u'logo_image'].get(u'url', u''),
                cover_image=p[u'cover_image'].get(u'url', u''),
                screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
                screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
                screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
                screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
                screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
                action_url=p.get(u'action_url', u''),
                errors=error_info,
                available_langs=AVAILABLE_LANGS_OPTIONS,
                ticket=flask.session.get(u'ticket', u''),
                nav_paths=nav_paths,
                mod=u'update_version')
        else:
            p = publisher_services.get_product_for_lang(
                ctx, ps[u'id'], ps[u'version'], lang)
            available_pricetags = publisher_services.get_available_pricetags_for_lang_by_pid(
                ctx, ps[u'id'], lang)
            nav_paths = [
                (_find_app_name(all_apps, p[u'app_id']),
                 u'/publisher/products/list.html?app=%s' % p[u'app_id'])
            ]
            return flask.render_template(
                u'publisher_product_edit.jinja2',
                page_title=u'Update version',
                all_apps=all_apps,
                app_id=p[u'app_id'],
                category=p[u'category'],
                lang=lang,
                lang_name=get_locale_name(lang),
                available_pricetags=available_pricetags,
                id=p[u'id'],
                version=p[u'version'],
                name=p[u'name'],
                pricetag_id=p[u'pricetag_id'],
                description=p[u'description'],
                update_change=p[u'update_change'],
                min_app_vc=p[u'min_app_vc'],
                max_app_vc=p[u'max_app_vc'],
                supported_mod=p[u'supported_mod'],
                author_name=p[u'author_name'],
                author_email=p[u'author_email'],
                logo_image=p[u'logo_image'].get(u'url', u''),
                cover_image=p[u'cover_image'].get(u'url', u''),
                screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
                screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
                screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
                screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
                screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
                action_url=p.get(u'action_url', u''),
                errors=error_info,
                available_langs=AVAILABLE_LANGS_OPTIONS,
                ticket=flask.session.get(u'ticket', u''),
                nav_paths=nav_paths,
                mod=u'update_version')
    else:
        lang = flask.request.args.get(u'lang', u'default')
        id = flask.request.args.get(u'id')
        version = flask.request.args.get(u'version')
        if not id:
            return error_page(u'Error', u'Missing param "id"')
        if not version:
            return error_page(u'Error', u'Missing param "version"')

        try:
            p = publisher_services.get_product_for_lang(ctx, id, version, lang)
        except:
            p = None
        if not p:
            return error_page(u'Error', u'Invalid product version')

        app, category = publisher_services.get_app_and_category_for_product(id)
        nav_paths = [(_find_app_name(all_apps, app),
                      u'/publisher/products/list.html?app=%s' % app)]
        available_pricetags = publisher_services.get_available_pricetags_for_lang(
            ctx, p[u'app_id'], p[u'category'], lang)
        return flask.render_template(
            u'publisher_product_edit.jinja2',
            page_title=u'Update version',
            all_apps=all_apps,
            app_id=app,
            category=category,
            lang=lang,
            lang_name=get_locale_name(lang),
            available_pricetags=available_pricetags,
            id=p[u'id'],
            version=p[u'version'],
            name=p[u'name'],
            pricetag_id=p[u'pricetag_id'],
            description=p[u'description'],
            update_change=p[u'update_change'],
            min_app_vc=p[u'min_app_vc'],
            max_app_vc=p[u'max_app_vc'],
            supported_mod=p[u'supported_mod'],
            author_name=p[u'author_name'],
            author_email=p[u'author_email'],
            logo_image=p[u'logo_image'].get(u'url', u''),
            cover_image=p[u'cover_image'].get(u'url', u''),
            screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
            screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
            screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
            screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
            screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
            action_url=p.get(u'action_url'),
            errors=[],
            available_langs=AVAILABLE_LANGS_OPTIONS,
            ticket=flask.session.get(u'ticket', u''),
            nav_paths=nav_paths,
            mod=u'update_version')
def update_version_page():
    ctx = context(flask.request)
    if not ctx.has_borqs_id():
        return redirect_to_signin()

    all_apps = publisher_services.get_all_apps(ctx)
    if flask.request.method == u'POST':
        lang = flask.request.form.get(u'lang', u'default')
        ps = merge_request_params(flask.request)
        error_info = _validate_fields(u'update_version', ps)
        if not error_info:
            p = publisher_services.upsert_version_for_lang(ctx, ps[u'lang'],
                                                           ps.get(u'id', None), ps[u'version'],
                                                           ps[u'name'], ps[u'pricetag_id'], ps[u'description'],
                                                           ps[u'update_change'],
                                                           ps[u'min_app_vc'], ps[u'max_app_vc'], ps[u'supported_mod'],
                                                           ps[u'author_name'], ps[u'author_email'],
                                                           ps[u'logo_file'], ps[u'cover_file'], ps[u'screenshot1_file'],
                                                           ps[u'screenshot2_file'], ps[u'screenshot3_file'],
                                                           ps[u'screenshot4_file'], ps[u'screenshot5_file'],
                                                           ps[u'file']
            )
            available_pricetags = publisher_services.get_available_pricetags_for_lang_by_pid(ctx, p[u'id'], lang)
            nav_paths = [
                (_find_app_name(all_apps, p[u'app_id']), u'/publisher/products/list.html?app=%s' % p[u'app_id'])]
            return flask.render_template(u'publisher_product_edit.jinja2',
                                         page_title=u'Update version',
                                         all_apps=all_apps,
                                         app_id=p[u'app_id'],
                                         category=p[u'category'],
                                         lang=lang,
                                         lang_name=get_locale_name(lang),
                                         available_pricetags=available_pricetags,
                                         id=p[u'id'],
                                         version=p[u'version'],
                                         name=p[u'name'],
                                         pricetag_id=p[u'pricetag_id'],
                                         description=p[u'description'],
                                         update_change=p[u'update_change'],
                                         min_app_vc=p[u'min_app_vc'],
                                         max_app_vc=p[u'max_app_vc'],
                                         supported_mod=p[u'supported_mod'],
                                         author_name=p[u'author_name'],
                                         author_email=p[u'author_email'],
                                         logo_image=p[u'logo_image'].get(u'url', u''),
                                         cover_image=p[u'cover_image'].get(u'url', u''),
                                         screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
                                         screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
                                         screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
                                         screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
                                         screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
                                         action_url=p.get(u'action_url', u''),
                                         errors=error_info,
                                         available_langs=AVAILABLE_LANGS_OPTIONS,
                                         ticket=flask.session.get(u'ticket', u''),
                                         nav_paths=nav_paths,
                                         mod=u'update_version'
            )
        else:
            p = publisher_services.get_product_for_lang(ctx, ps[u'id'], ps[u'version'], lang)
            available_pricetags = publisher_services.get_available_pricetags_for_lang_by_pid(ctx, ps[u'id'], lang)
            nav_paths = [
                (_find_app_name(all_apps, p[u'app_id']), u'/publisher/products/list.html?app=%s' % p[u'app_id'])]
            return flask.render_template(u'publisher_product_edit.jinja2',
                                         page_title=u'Update version',
                                         all_apps=all_apps,
                                         app_id=p[u'app_id'],
                                         category=p[u'category'],
                                         lang=lang,
                                         lang_name=get_locale_name(lang),
                                         available_pricetags=available_pricetags,
                                         id=p[u'id'],
                                         version=p[u'version'],
                                         name=p[u'name'],
                                         pricetag_id=p[u'pricetag_id'],
                                         description=p[u'description'],
                                         update_change=p[u'update_change'],
                                         min_app_vc=p[u'min_app_vc'],
                                         max_app_vc=p[u'max_app_vc'],
                                         supported_mod=p[u'supported_mod'],
                                         author_name=p[u'author_name'],
                                         author_email=p[u'author_email'],
                                         logo_image=p[u'logo_image'].get(u'url', u''),
                                         cover_image=p[u'cover_image'].get(u'url', u''),
                                         screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
                                         screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
                                         screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
                                         screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
                                         screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
                                         action_url=p.get(u'action_url', u''),
                                         errors=error_info,
                                         available_langs=AVAILABLE_LANGS_OPTIONS,
                                         ticket=flask.session.get(u'ticket', u''),
                                         nav_paths=nav_paths,
                                         mod=u'update_version'
            )
    else:
        lang = flask.request.args.get(u'lang', u'default')
        id = flask.request.args.get(u'id')
        version = flask.request.args.get(u'version')
        if not id:
            return error_page(u'Error', u'Missing param "id"')
        if not version:
            return error_page(u'Error', u'Missing param "version"')

        try:
            p = publisher_services.get_product_for_lang(ctx, id, version, lang)
        except:
            p = None
        if not p:
            return error_page(u'Error', u'Invalid product version')

        app, category = publisher_services.get_app_and_category_for_product(id)
        nav_paths = [(_find_app_name(all_apps, app), u'/publisher/products/list.html?app=%s' % app)]
        available_pricetags = publisher_services.get_available_pricetags_for_lang(ctx, p[u'app_id'], p[u'category'],
                                                                                  lang)
        return flask.render_template(u'publisher_product_edit.jinja2',
                                     page_title=u'Update version',
                                     all_apps=all_apps,
                                     app_id=app,
                                     category=category,
                                     lang=lang,
                                     lang_name=get_locale_name(lang),
                                     available_pricetags=available_pricetags,
                                     id=p[u'id'],
                                     version=p[u'version'],
                                     name=p[u'name'],
                                     pricetag_id=p[u'pricetag_id'],
                                     description=p[u'description'],
                                     update_change=p[u'update_change'],
                                     min_app_vc=p[u'min_app_vc'],
                                     max_app_vc=p[u'max_app_vc'],
                                     supported_mod=p[u'supported_mod'],
                                     author_name=p[u'author_name'],
                                     author_email=p[u'author_email'],
                                     logo_image=p[u'logo_image'].get(u'url', u''),
                                     cover_image=p[u'cover_image'].get(u'url', u''),
                                     screenshot1_image=p[u'screenshot1_image'].get(u'url', u''),
                                     screenshot2_image=p[u'screenshot2_image'].get(u'url', u''),
                                     screenshot3_image=p[u'screenshot3_image'].get(u'url', u''),
                                     screenshot4_image=p[u'screenshot4_image'].get(u'url', u''),
                                     screenshot5_image=p[u'screenshot5_image'].get(u'url', u''),
                                     action_url=p.get(u'action_url'),
                                     errors=[],
                                     available_langs=AVAILABLE_LANGS_OPTIONS,
                                     ticket=flask.session.get(u'ticket', u''),
                                     nav_paths=nav_paths,
                                     mod=u'update_version'
        )
def new_product_page():
    ctx = context(flask.request)
    if not ctx.has_borqs_id():
        return redirect_to_signin()
    app = flask.request.args.get(u'app')
    category = flask.request.args.get(u'category')
    lang = u'default'
    if not app:
        return error_page(u'Error', u'Missing param app')
    if not category:
        return error_page(u'Error', u'Missing param category')

    all_apps = publisher_services.get_all_apps(ctx)
    available_pricetags = publisher_services.get_available_pricetags_for_lang(
        ctx, app, category, lang)
    nav_paths = [(_find_app_name(all_apps, app),
                  u'/publisher/products/list.html?app=%s' % app)]
    if flask.request.method == u'POST':
        ps = merge_request_params(flask.request)
        error_info = _validate_fields(u'new_product', ps)
        if not error_info:
            p = publisher_services.upsert_version_for_lang(
                ctx, ps[u'lang'], ps.get(u'id', None), ps[u'version'],
                ps[u'name'], ps[u'pricetag_id'], ps[u'description'],
                ps[u'update_change'], ps[u'min_app_vc'], ps[u'max_app_vc'],
                ps[u'supported_mod'], ps[u'author_name'], ps[u'author_email'],
                ps[u'logo_file'], ps[u'cover_file'], ps[u'screenshot1_file'],
                ps[u'screenshot2_file'], ps[u'screenshot3_file'],
                ps[u'screenshot4_file'], ps[u'screenshot5_file'], ps[u'file'])
            return flask.redirect(
                u'/publisher/products/transit.html?app=%s&version=%s&id=%s' %
                (p[u'app_id'], p[u'version'], p[u'id']))
        else:
            return flask.render_template(
                u'publisher_product_edit.jinja2',
                page_title=u'New product',
                all_apps=all_apps,
                app_id=app,
                category=category,
                lang=lang,
                lang_name=get_locale_name(lang),
                available_pricetags=available_pricetags,
                id=ps.get(u'id'),
                version=ps.get(u'version'),
                name=ps.get(u'name'),
                pricetag_id=ps.get(u'pricetag_id'),
                description=ps.get(u'description'),
                update_change=ps.get(u'update_change'),
                min_app_vc=ps.get(u'min_app_vc'),
                max_app_vc=ps.get(u'max_app_vc'),
                supported_mod=ps.get(u'supported_mod'),
                author_name=ps.get(u'author_name'),
                author_email=ps.get(u'author_email'),
                logo_image=u'',
                cover_image=u'',
                screenshot1_image=u'',
                screenshot2_image=u'',
                screenshot3_image=u'',
                screenshot4_image=u'',
                screenshot5_image=u'',
                action_url=u'',
                errors=error_info,
                ticket=flask.session.get(u'ticket', u''),
                mod=u'new_product',
                nav_paths=nav_paths,
            )
    else:
        return flask.render_template(
            u'publisher_product_edit.jinja2',
            page_title=u'New',
            all_apps=all_apps,
            app_id=app,
            category=category,
            lang=lang,
            lang_name=get_locale_name(lang),
            available_pricetags=available_pricetags,
            id=u'',
            version=u'',
            name=u'',
            pricetag_id=u'',
            description=u'',
            update_change=u'',
            min_app_vc=u'0',
            max_app_vc=u'',
            supported_mod=u'',
            author_name=u'',
            author_email=u'',
            logo_image=u'',
            cover_image=u'',
            screenshot1_image=u'',
            screenshot2_image=u'',
            screenshot3_image=u'',
            screenshot4_image=u'',
            screenshot5_image=u'',
            action_url=u'',
            ticket=flask.session.get(u'ticket', u''),
            errors=[],
            nav_paths=nav_paths,
            mod=u'new_product',
        )
def new_product_page():
    ctx = context(flask.request)
    if not ctx.has_borqs_id():
        return redirect_to_signin()
    app = flask.request.args.get(u'app')
    category = flask.request.args.get(u'category')
    lang = u'default'
    if not app:
        return error_page(u'Error', u'Missing param app')
    if not category:
        return error_page(u'Error', u'Missing param category')

    all_apps = publisher_services.get_all_apps(ctx)
    available_pricetags = publisher_services.get_available_pricetags_for_lang(ctx, app, category, lang)
    nav_paths = [(_find_app_name(all_apps, app), u'/publisher/products/list.html?app=%s' % app)]
    if flask.request.method == u'POST':
        ps = merge_request_params(flask.request)
        error_info = _validate_fields(u'new_product', ps)
        if not error_info:
            p = publisher_services.upsert_version_for_lang(ctx, ps[u'lang'],
                                                           ps.get(u'id', None), ps[u'version'],
                                                           ps[u'name'], ps[u'pricetag_id'], ps[u'description'],
                                                           ps[u'update_change'],
                                                           ps[u'min_app_vc'], ps[u'max_app_vc'], ps[u'supported_mod'],
                                                           ps[u'author_name'], ps[u'author_email'],
                                                           ps[u'logo_file'], ps[u'cover_file'], ps[u'screenshot1_file'],
                                                           ps[u'screenshot2_file'], ps[u'screenshot3_file'],
                                                           ps[u'screenshot4_file'], ps[u'screenshot5_file'],
                                                           ps[u'file']
            )
            return flask.redirect(
                u'/publisher/products/transit.html?app=%s&version=%s&id=%s' % (p[u'app_id'], p[u'version'], p[u'id']))
        else:
            return flask.render_template(u'publisher_product_edit.jinja2',
                                         page_title=u'New product',
                                         all_apps=all_apps,
                                         app_id=app,
                                         category=category,
                                         lang=lang,
                                         lang_name=get_locale_name(lang),
                                         available_pricetags=available_pricetags,
                                         id=ps.get(u'id'),
                                         version=ps.get(u'version'),
                                         name=ps.get(u'name'),
                                         pricetag_id=ps.get(u'pricetag_id'),
                                         description=ps.get(u'description'),
                                         update_change=ps.get(u'update_change'),
                                         min_app_vc=ps.get(u'min_app_vc'),
                                         max_app_vc=ps.get(u'max_app_vc'),
                                         supported_mod=ps.get(u'supported_mod'),
                                         author_name=ps.get(u'author_name'),
                                         author_email=ps.get(u'author_email'),
                                         logo_image=u'',
                                         cover_image=u'',
                                         screenshot1_image=u'',
                                         screenshot2_image=u'',
                                         screenshot3_image=u'',
                                         screenshot4_image=u'',
                                         screenshot5_image=u'',
                                         action_url=u'',
                                         errors=error_info,
                                         ticket=flask.session.get(u'ticket', u''),
                                         mod=u'new_product',
                                         nav_paths=nav_paths,
            )
    else:
        return flask.render_template(u'publisher_product_edit.jinja2',
                                     page_title=u'New',
                                     all_apps=all_apps,
                                     app_id=app,
                                     category=category,
                                     lang=lang,
                                     lang_name=get_locale_name(lang),
                                     available_pricetags=available_pricetags,
                                     id=u'',
                                     version=u'',
                                     name=u'',
                                     pricetag_id=u'',
                                     description=u'',
                                     update_change=u'',
                                     min_app_vc=u'0',
                                     max_app_vc=u'',
                                     supported_mod=u'',
                                     author_name=u'',
                                     author_email=u'',
                                     logo_image=u'',
                                     cover_image=u'',
                                     screenshot1_image=u'',
                                     screenshot2_image=u'',
                                     screenshot3_image=u'',
                                     screenshot4_image=u'',
                                     screenshot5_image=u'',
                                     action_url=u'',
                                     ticket=flask.session.get(u'ticket', u''),
                                     errors=[],
                                     nav_paths=nav_paths,
                                     mod=u'new_product',
        )