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)
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)
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'))
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)
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)
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)
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'))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
def initialize(): configure = g.configure if configure.exists(): return redirect(act.url_as('.login')) return render_template('initialize.html')
def logout(): session.clear() return redirect(act.url_as('.login'))
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)
def reload_theme(): act.sync_site_by_theme_opts() flash('RELOADED') return_url = act.url_as('.appearance') return redirect(return_url)