Beispiel #1
0
def index():
    paged = parse_int(request.args.get('paged'), 1, 1)

    files = current_app.db.Media.find()
    limit = current_app.db.Media.MAXIMUM_QUERY
    offset = max(limit * (paged - 1), 0)
    total_count = len(files)

    max_pages = max(int(math.ceil(total_count / float(limit))), 1)

    has_next = paged < max_pages
    has_previous = paged > 1

    mediafiles = [f.info for f in files[offset:offset + limit]]

    uploads_url = act.get_uploads_url()
    for media in mediafiles:
        media['src'] = '{}/{}'.format(uploads_url, media['filename'])

    prev_url = act.url_as(request.endpoint, paged=max(paged - 1, 1))
    next_url = act.url_as(request.endpoint, paged=min(paged + 1, max_pages))

    paginator = {
        'next': next_url if has_next else None,
        'prev': prev_url if has_previous else None,
        'paged': paged,
    }
    return render_template('mediafiles.html',
                           mediafiles=mediafiles,
                           p=paginator)
Beispiel #2
0
def login():
    configure = g.configure
    if not configure.exists():
        return redirect(act.url_as('.initialize'))
    elif session.get('pyco_admin'):
        return redirect(act.url_as('.index'))
    return render_template('login.html', configure=configure)
Beispiel #3
0
def exec_initialize():
    configure = g.configure
    passcode = request.form['passcode']
    passcode2 = request.form['passcode2']
    if passcode != passcode2:
        flash('CONFIRM_PASSCODE_NOT_MATCH', 'danger')
        return redirect(act.url_as('.initialize'))
    else:
        configure['passcode_hash'] = generate_password_hash(passcode)
        configure.save()
        return redirect(act.url_as('.login'))
Beispiel #4
0
def remove_term(term_key):
    site = current_app.db.Site()
    site.remove_category_term(term_key)
    site.save()
    flash('REMOVED')
    return_url = act.url_as('.index')
    return redirect(return_url)
Beispiel #5
0
def add_site_menu_node(menu_key):
    parent_key = request.args.get('parent_key', '')

    name = request.form.get('name', '')
    link = request.form.get('link', '')
    target = request.form.get('target', '')
    fixed = request.form.get('fixed', '')
    path_scope = request.form.get('path_scope', '')
    css = request.form.get('css', '')
    pos = request.form.get('pos', 0)

    _index = parse_int(pos)

    new_node = {
        'key': process_slug(name),
        'name': name,
        'link': link,
        'target': target,
        'path_scope': path_scope,
        'fixed': bool(fixed),
        'class': css
    }

    site = current_app.db.Site()
    nodes = site['menus'].get(menu_key, [])
    if parent_key:
        parent = _find_parent_node(nodes, parent_key)
        parent['nodes'].insert(_index, new_node)
    else:
        nodes.insert(_index, new_node)

    site.save()
    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #6
0
def update_site_language():
    keys = request.form.getlist('key')
    names = request.form.getlist('name')
    urls = request.form.getlist('url')

    languages = []
    for idx, key in enumerate(keys):
        if not key:
            continue

        try:
            name = names[idx]
        except Exception as e:
            name = key
        try:
            url = urls[idx] or '#'
        except Exception as e:
            url = '#'

        languages.append({
            'key': key.replace('-', '_'),
            'name': name,
            'url': url,
        })

    site = current_app.db.Site()
    site['meta']['languages'] = languages
    site.save()

    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #7
0
def exec_login():
    configure = g.configure
    passcode = request.form['passcode']

    if not configure:
        return redirect(act.url_as('.initialize'))
    elif check_password_hash(configure['passcode_hash'], passcode):
        try:
            act.sync_site_by_theme_opts()
        except Exception as e:
            raise Exception('Not installed properly: {}'.format(e))
        hmac_key = '{}{}'.format(current_app.secret_key, get_remote_addr())
        session['pyco_admin'] = hmac_sha(hmac_key, configure['passcode_hash'])
        return redirect(act.url_as('.index'))
    else:
        flash('WRONG_PASSCODE', 'danger')
        return redirect(act.url_as('.login'))
Beispiel #8
0
def update_extra():
    login_extra = request.form.get('login_extra', '')
    configure = g.configure
    configure['login_extra'] = login_extra
    configure.save()
    flash('SAVED')
    return_url = act.url_as('.configuration')
    return redirect(return_url)
Beispiel #9
0
def hardcore_site_menu(menu_key):
    hardcore = request.form.get('hardcore', '')

    site = current_app.db.Site()
    site['menus'][menu_key] = parse_json(hardcore, [])
    site.save()
    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #10
0
def backup_restore():
    f = request.files['file']
    payload_dir = current_app.config['PAYLOAD_DIR']
    # cleanup
    clean_dirs(payload_dir)
    # unpack files
    unzip(f, payload_dir)
    flash('RESTORED')
    return_url = act.url_as('.configuration')
    return redirect(return_url)
Beispiel #11
0
def install_theme():
    f = request.files['file']
    theme = current_app.db.Theme(current_app.config['THEME_NAME'])

    clean_dirs(theme.theme_folder)
    unzip(f, theme.theme_folder)

    act.sync_site_by_theme_opts()
    flash('INSTALLED')
    return_url = act.url_as('.appearance')
    return redirect(return_url)
Beispiel #12
0
def hardcore_content(content_type, slug):
    raw = request.form.get('raw', '')

    document = current_app.db.Document.find_one(slug, content_type)
    document.hardcore(raw)
    document.save()
    flash('SAVED')
    return_url = act.url_as('.content_raw',
                            content_type=content_type,
                            slug=slug)
    return redirect(return_url)
Beispiel #13
0
def update_configure():
    locale = request.form.get('locale', 'en_US')
    acc_mode = request.form.get('acc_mode', 0)
    acc_url = request.form.get('acc_url', '')
    configure = g.configure

    configure['locale'] = locale.replace('-', '_')
    configure['acc_mode'] = parse_int(acc_mode)
    configure['acc_url'] = str(acc_url)
    configure.save()
    flash('SAVED')
    return_url = act.url_as('.configuration')
    return redirect(return_url)
Beispiel #14
0
def update_site_adv():
    head_metadata = request.form.get('head_metadata', '')
    customs = request.form.get('customs', '')
    slots = request.form.get('slots', '')

    site = current_app.db.Site()
    site['meta']['head_metadata'] = head_metadata
    site['meta']['custom'] = parse_json(customs, {})
    site['slots'] = parse_json(slots, {})
    site.save()

    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #15
0
def index(content_type):
    paged = parse_int(request.args.get('paged'), 1, 1)

    curr_content_type = _find_content_type(content_type)
    files = current_app.db.Document.find(content_type)

    limit = current_app.db.Media.MAXIMUM_QUERY
    offset = max(limit * (paged - 1), 0)
    total_count = len(files)

    max_pages = max(int(math.ceil(total_count / float(limit))), 1)

    has_next = paged < max_pages
    has_previous = paged > 1

    contents = files[offset:offset + limit]

    for content in contents:
        content.url = act.gen_preview_url(content.content_type, content.slug)

    prev_url = act.url_as(request.endpoint,
                          content_type=content_type,
                          paged=max(paged - 1, 1))
    next_url = act.url_as(request.endpoint,
                          content_type=content_type,
                          paged=min(paged + 1, max_pages))

    paginator = {
        'next': next_url if has_next else None,
        'prev': prev_url if has_previous else None,
        'paged': paged,
    }
    return render_template('content_files.html',
                           contents=contents,
                           content_type=curr_content_type,
                           count=total_count,
                           p=paginator)
Beispiel #16
0
def remove_site_menu_node(menu_key):
    parent_key = request.args.get('parent_key', '')
    node_key = request.args.get('node_key', '')

    site = current_app.db.Site()
    nodes = site['menus'].get(menu_key, [])
    if parent_key:
        parent = _find_parent_node(nodes, parent_key)
        node = _find_node(parent['nodes'], node_key)
        parent['nodes'].remove(node)
    else:
        node = _find_node(nodes, node_key)
        nodes.remove(node)
    site.save()
    flash('REMOVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #17
0
def create_term():
    term_name = request.form.get('name')
    term_key = request.form.get('key')
    site = current_app.db.Site()
    term = site.add_category_term({
        'key': process_slug(term_key or term_name),
        'meta': {
            'name': term_name,
            'caption': '',
            'figure': '',
        },
        'parent': '',
        'priority': 1,
        'status': 0,
    })
    site.save()
    return_url = act.url_as('.term', term_key=term['key'])
    return redirect(return_url)
Beispiel #18
0
def create_content(content_type):
    title = request.form.get('title')
    slug = request.form.get('slug')
    template = request.form.get('template', '')

    content = current_app.db.Document()
    slug = process_slug(slug or title)
    content.add({
        'slug': slug,
        'content_type': content_type,
        'template': template,
        'meta': {
            'title': title,
        }
    })
    content.save()
    return_url = act.url_as('.content_detail',
                            content_type=content_type,
                            slug=content.slug)
    return redirect(return_url)
Beispiel #19
0
def change_passcode():
    old_passcode = request.form.get('old_passcode')
    passcode = request.form.get('passcode')
    passcode2 = request.form.get('passcode2')

    configure = g.configure

    if not check_password_hash(configure['passcode_hash'], old_passcode):
        flash('WRONG_PASSCODE', 'danger')
    elif passcode != passcode2:
        flash('CONFIRM_PASSCODE_NOT_MATCH', 'danger')
    else:
        configure['passcode_hash'] = generate_password_hash(passcode)
        hmac_key = '{}{}'.format(current_app.secret_key, get_remote_addr())
        session['pyco_admin'] = hmac_sha(hmac_key, configure['passcode_hash'])
        configure.save()
        flash('SAVED')

    return_url = act.url_as('.configuration')
    return redirect(return_url)
Beispiel #20
0
def update_site():
    locale = request.form.get('locale', '')
    title = request.form.get('title', '')
    description = request.form.get('description', '')
    logo = request.form.get('logo', '')
    favicon = request.form.get('favicon', '')
    copyright = request.form.get('copyright', '')
    license = request.form.get('license', '')

    site = current_app.db.Site()
    site['locale'] = locale.replace('-', '_')
    site['meta']['title'] = title
    site['meta']['description'] = description
    site['meta']['logo'] = logo
    site['meta']['favicon'] = favicon
    site['meta']['copyright'] = copyright
    site['meta']['license'] = license
    site.save()
    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #21
0
def update_site_social():
    keys = request.form.getlist('key')
    names = request.form.getlist('name')
    urls = request.form.getlist('url')
    codes = request.form.getlist('code')

    socials = []
    for idx, key in enumerate(keys):
        if not key:
            continue

        try:
            name = names[idx]
        except Exception:
            name = key
        try:
            url = urls[idx] or '#'
        except Exception:
            url = '#'
        try:
            code = codes[idx]
        except Exception:
            code = ''

        socials.append({
            'key': key,
            'name': name,
            'url': url,
            'code': code,
        })

    site = current_app.db.Site()
    site['meta']['socials'] = socials
    site.save()

    flash('SAVED')
    return_url = act.url_as('.site')
    return redirect(return_url)
Beispiel #22
0
def update_term(term_key):
    name = request.form.get('name', '')
    caption = request.form.get('caption', '')
    figure = request.form.get('figure', '')
    parent = request.form.get('parent', '')
    priority = request.form.get('priority', 1)
    status = request.form.get('status', '')

    site = current_app.db.Site()
    site.update_category_term(term_key, {
        'meta': {
            'name': str(name),
            'caption': str(caption),
            'figure': str(figure),
        },
        'parent': str(parent),
        'priority': parse_int(priority, 1),
        'status': parse_int(status),
    })
    site.save()
    flash('SAVED')
    return_url = act.url_as('.index')
    return redirect(return_url)
Beispiel #23
0
def initialize():
    configure = g.configure
    if configure.exists():
        return redirect(act.url_as('.login'))
    return render_template('initialize.html')
Beispiel #24
0
def logout():
    session.clear()
    return redirect(act.url_as('.login'))
Beispiel #25
0
def remove(content_type, slug):
    content = current_app.db.Document.find_one(slug, content_type)
    content.delete()
    flash('REMOVED')
    return_url = act.url_as('.index', content_type=content_type)
    return redirect(return_url)
Beispiel #26
0
def reload_theme():
    act.sync_site_by_theme_opts()
    flash('RELOADED')
    return_url = act.url_as('.appearance')
    return redirect(return_url)