Esempio n. 1
0
def org_cat_codes(lang, id):
    codes = all_codes(lang, 'org')
    current = [c.code for c in OrgCodes.query.filter_by(org_id=id).all()]
    out = []
    for cat in codes:
        found = []
        for code in cat['codes']:
            if code['code_id'] in current:
                found.append(code['title'])
        if found:
            out.append((cat['title'], ', '.join(found)))
    return out
Esempio n. 2
0
def org_cat_codes(lang, id):
    codes = all_codes(lang, 'org')
    current = [
        c.code for c in OrgCodes.query.filter_by(org_id=id).all()
    ]
    out = []
    for cat in codes:
        found = []
        for code in cat['codes']:
            if code['code_id'] in current:
                found.append(code['title'])
        if found:
            out.append((cat['title'], ', '.join(found)))
    return out
Esempio n. 3
0
def org_search():
    lang = request.environ['LANG']
    cats = all_codes(lang, 'org')
    codes_list = cat_codes(lang, 'org')

    orgs = Organisation.query.filter_by(lang=lang,
                                        status='publish',
                                        active=True)

    # only show public orgs
    if not bool(request.user):
        orgs = orgs.filter_by(private=False)

    search_codes = set()
    for field, _null in request.args.items():
        if field == 'Filter':
            continue
        search_codes.add(field)

    for codes in codes_list:
        union = set(codes) & search_codes
        if union:
            c = db.session.query(OrgCodes.org_id).filter(
                OrgCodes.code.in_(list(union)))
            orgs = orgs.filter(Organisation.org_id.in_(c))

    orgs = orgs.order_by('name')

    count = orgs.count()
    try:
        page = int(request.args.get('page', 0))
    except ValueError:
        page = 0
    pages = page_num(count, config.ORG_PER_PAGE)

    orgs = orgs.limit(config.ORG_PER_PAGE).offset(page * config.ORG_PER_PAGE)
    orgs = orgs.all()

    return render_template('org_search.html',
                           cats=cats,
                           orgs=orgs,
                           count=count,
                           page=page,
                           pages=pages)
Esempio n. 4
0
def org_search():
    lang = request.environ['LANG']
    cats = all_codes(lang, 'org')
    codes_list = cat_codes(lang, 'org')


    orgs = Organisation.query.filter_by(
        lang=lang, status='publish', active=True
    )

    # only show public orgs
    if not bool(request.user):
        orgs = orgs.filter_by(private=False)

    search_codes = set()
    for field, _null in request.args.items():
        if field == 'Filter':
            continue
        search_codes.add(field)

    for codes in codes_list:
        union = set(codes) & search_codes
        if union:
            c = db.session.query(OrgCodes.org_id).filter(OrgCodes.code.in_(list(union)))
            orgs = orgs.filter(Organisation.org_id.in_(c))

    orgs = orgs.order_by('name')

    count = orgs.count()
    try:
        page = int(request.args.get('page', 0))
    except ValueError:
        page = 0
    pages = page_num(count, config.ORG_PER_PAGE)

    orgs = orgs.limit(config.ORG_PER_PAGE).offset(page * config.ORG_PER_PAGE)
    orgs = orgs.all()


    return render_template(
        'org_search.html', cats=cats, orgs=orgs, count=count, page=page, pages=pages
    )
Esempio n. 5
0
def org_edit(id):
    set_menu()
    lang = get_admin_lang()
    permission_content(lang)
    errors = []
    org = Organisation.query.filter_by(org_id=id, lang=lang,
                                       current=True).first()
    if not org and lang != 'en':
        org = Organisation.query.filter_by(org_id=id, lang='en',
                                           current=True).first()
        if not org:
            abort(404)
    if not org:
        abort(404)
    if request.method == 'POST' and 'name' in request.form:
        if org.lang != lang:
            # No translation
            org = org_reedit(org)
        if (org.name != get_str('name')
                or org.description != get_str('description')):
            if org.status == 'publish':
                org = org_reedit(org)
            org.name = get_str('name')
            org.description = get_str('description')
            org.status = 'edit'
            trans_need_update(org)

        if lang == 'en':
            org.address = get_str('address')
            org.contact = get_str('contact')
            org.phone = get_str('phone')
            org.email = get_str('email')
            org.pgp_key = get_str('pgp_key')
            org.website = get_str('website')
            org.private = get_bool('private')
            org.active = get_bool('active')

            if get_bool('logo_remove'):
                org.image = None

            logo = request.files['logo']
            if logo:
                extension = os.path.splitext(logo.filename)[1]
                if extension and extension.lower(
                ) in config.ALLOWED_IMAGE_TYPES:
                    filename = unicode(uuid.uuid4())
                    filename += extension
                    logo.save(
                        os.path.join(app.config['UPLOAD_FOLDER'], filename))
                    org.image = filename
                else:
                    errors.append(
                        'The image uploaded is not of an allowed type')

        db.session.add(org)
        if lang == 'en':
            # codes
            codes_data = all_codes('en', 'org')
            cats = [cat for cat in codes_data if cat['active']]
            cat_codes = []
            for cat in cats:
                cat_codes += cat['codes']
            codes = [code['code'] for code in cat_codes if code['active']]
            c_in = []
            c_out = []
            for code in codes:
                if get_bool(code):
                    c_in.append(code)
                else:
                    c_out.append(code)
            current = [
                c.code for c in OrgCodes.query.filter_by(org_id=id).all()
            ]
            for code in c_in:
                if code not in current:
                    code = OrgCodes(org_id=id, code=code)
                    db.session.add(code)
            for code in c_out:
                OrgCodes.query.filter_by(org_id=id, code=code).delete()

        db.session.commit()
        if lang == 'en':
            update_translations(org)
        if not errors:
            return redirect(url_for_admin('org_preview', id=id))
    if lang != 'en':
        trans = Organisation.query.filter_by(org_id=org.org_id,
                                             lang='en',
                                             current=True).first()
    else:
        trans = {}

    if lang == 'en':
        codes = all_codes('en', 'org')
        current = [c.code for c in OrgCodes.query.filter_by(org_id=id).all()]
    else:
        codes = []
        current = []
    translations = get_trans(id)
    if lang != org.lang:
        org = {}
    return render_template('admin/org_edit.html',
                           org=org,
                           trans=trans,
                           codes=codes,
                           current=current,
                           errors=errors,
                           translations=translations)
Esempio n. 6
0
def org_edit(id):
    set_menu()
    lang = get_admin_lang()
    permission_content(lang)
    errors = []
    org = Organisation.query.filter_by(
        org_id=id, lang=lang, current=True
    ).first()
    if not org and lang != 'en':
        org = Organisation.query.filter_by(
            org_id=id, lang='en', current=True
        ).first()
        if not org:
            abort(404)
    if not org:
        abort(404)
    if request.method == 'POST' and 'name' in request.form:
        if org.lang != lang:
            # No translation
            org = org_reedit(org)
        if (org.name != get_str('name')
                or org.description != get_str('description')):
            if org.status == 'publish':
                org = org_reedit(org)
            org.name = get_str('name')
            org.description = get_str('description')
            org.status = 'edit'
            trans_need_update(org)

        if lang == 'en':
            org.address = get_str('address')
            org.contact = get_str('contact')
            org.phone = get_str('phone')
            org.email = get_str('email')
            org.pgp_key = get_str('pgp_key')
            org.website = get_str('website')
            org.private = get_bool('private')
            org.active = get_bool('active')

            if get_bool('logo_remove'):
                org.image = None

            logo = request.files['logo']
            if logo:
                extension = os.path.splitext(logo.filename)[1]
                if extension and extension.lower() in config.ALLOWED_IMAGE_TYPES:
                    filename = unicode(uuid.uuid4())
                    filename += extension
                    logo.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                    org.image = filename
                else:
                    errors.append(
                        'The image uploaded is not of an allowed type'
                    )


        db.session.add(org)
        if lang == 'en':
            # codes
            codes_data = all_codes('en', 'org')
            cats = [cat for cat in codes_data if cat['active']]
            cat_codes = []
            for cat in cats:
                cat_codes += cat['codes']
            codes = [code['code'] for code in cat_codes if code['active']]
            c_in = []
            c_out = []
            for code in codes:
                if get_bool(code):
                    c_in.append(code)
                else:
                    c_out.append(code)
            current = [
                c.code for c in OrgCodes.query.filter_by(org_id=id).all()
            ]
            for code in c_in:
                if code not in current:
                    code = OrgCodes(org_id=id, code=code)
                    db.session.add(code)
            for code in c_out:
                OrgCodes.query.filter_by(org_id=id, code=code).delete()

        db.session.commit()
        if lang == 'en':
            update_translations(org)
        if not errors:
            return redirect(url_for_admin('org_preview', id=id))
    if lang != 'en':
        trans = Organisation.query.filter_by(
            org_id=org.org_id, lang='en', current=True
        ).first()
    else:
        trans = {}

    if lang == 'en':
        codes = all_codes('en', 'org')
        current = [
            c.code for c in OrgCodes.query.filter_by(org_id=id).all()
        ]
    else:
        codes = []
        current = []
    translations = get_trans(id)
    if lang != org.lang:
        org = {}
    return render_template('admin/org_edit.html', org=org, trans=trans,
                           codes=codes, current=current, errors=errors,
                           translations=translations)