Example #1
0
def website_new():
    form = WebsiteForm()
    themes = [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        website = Website()
        form.populate_obj(website)
        db.session.add(website)
        db.session.commit()
        return render_redirect(url_for("website", website=website.name), code=303)
    return render_form(form=form, title=u"New website", submit=u"Create", cancel_url=url_for("index"), ajax=True)
Example #2
0
def website_edit(website):
    g.website = website
    form = WebsiteForm(obj=website)
    themes = [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        form.populate_obj(website)
        db.session.commit()
        return render_redirect(url_for('website', website=website.name), code=303)
    return render_form(form=form, title=u"Edit website", submit=u"Save",
        cancel_url=url_for('website', website=website.name), ajax=True)
Example #3
0
def folder_import(website, folder):
    g.website = website
    g.folder = folder
    import_count = 0
    create_count = 0
    form = ImportForm()
    internal_imports = []
    if form.validate_on_submit():
        data = json.loads(request.files['import_file'].getvalue(),
                          use_decimal=True)
        for inode in data['nodes']:
            mtime = parse_isoformat(
                inode.get('revision_updated_at', inode['updated_at']))
            node = Node.query.filter_by(folder=folder,
                                        uuid=inode['uuid']).first()
            if node is None:
                nreg = node_registry.get(inode['type'])
                if nreg is None:
                    flash(
                        "Could not import node of unknown type '%s'" %
                        inode['type'], "error")
                    continue
                node = nreg.model(folder=folder)
                user = User.query.filter_by(userid=inode['userid']).first()
                node.user = user or g.user
                db.session.add(node)
                create_count += 1
            else:
                if form.import_updated.data and mtime <= node.updated_at:
                    continue
            node.import_from(inode)
            internal_imports.append(inode)
            import_count += 1
        db.session.commit()
        # Second pass for internal data of nodes
        for inode in internal_imports:
            node = Node.query.filter_by(folder=folder,
                                        uuid=inode['uuid']).first()
            node.import_from_internal(inode)
        db.session.commit()
        flash(
            "%d nodes were imported and %d new nodes were created" %
            (import_count, create_count), "success")
        return render_redirect(url_for('folder',
                                       website=website.name,
                                       folder=folder.name),
                               code=303)
    return render_form(form=form,
                       title=u"Import to folder",
                       submit=u"Upload",
                       cancel_url=url_for('folder',
                                          website=website.name,
                                          folder=folder.name))
Example #4
0
def folder_new(website):
    g.website = website
    form = FolderForm()
    themes = [('', 'Website Default')] + [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        folder = Folder(website=website)
        form.populate_obj(folder)
        db.session.add(folder)
        db.session.commit()
        return render_redirect(url_for('folder', website=website.name, folder=folder.name), code=303)
    return render_form(form=form, title=u"New folder", submit=u"Create",
        cancel_url=url_for('website', website=website.name), ajax=True)
Example #5
0
def folder_edit(website, folder):
    g.website = website
    g.folder = folder
    form = FolderForm(obj=folder)
    if request.method == 'GET':
        form.theme.data = folder._theme
    themes = [('', 'Website Default')] + [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        form.populate_obj(folder)
        db.session.commit()
        return render_redirect(url_for('folder', website=website.name, folder=folder.name), code=303)
    return render_form(form=form, title=u"Edit folder", submit=u"Save",
        cancel_url=url_for('folder', website=website.name, folder=folder.name), ajax=True)
Example #6
0
    def sync(self):
        self.action = 'sync'
        self.form = ConfirmForm()

        if self.form.validate_on_submit():
            return Response(stream_template('stream.html',
                stream=stream_with_context(self._sync()),
                tabs=self.edit_tabs(),
                node=self.node,
                title="Syncing participants..."))

        return render_form(form=self.form, title="Sync participant list", submit=u"Sync", tabs=self.edit_tabs(),
        cancel_url=url_for('folder', website=self.node.folder.website.name, folder=self.node.folder.name),
        node=self.node)
Example #7
0
def website_edit(website):
    g.website = website
    form = WebsiteForm(obj=website)
    themes = [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        form.populate_obj(website)
        db.session.commit()
        return render_redirect(url_for('website', website=website.name),
                               code=303)
    return render_form(form=form,
                       title=u"Edit website",
                       submit=u"Save",
                       cancel_url=url_for('website', website=website.name),
                       ajax=True)
Example #8
0
def website_new():
    form = WebsiteForm()
    themes = [(t.identifier, t.name) for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        website = Website()
        form.populate_obj(website)
        db.session.add(website)
        db.session.commit()
        return render_redirect(url_for('website', website=website.name),
                               code=303)
    return render_form(form=form,
                       title=u"New website",
                       submit=u"Create",
                       cancel_url=url_for('index'),
                       ajax=True)
Example #9
0
def folder_import(website, folder):
    g.website = website
    g.folder = folder
    import_count = 0
    create_count = 0
    form = ImportForm()
    internal_imports = []
    if form.validate_on_submit():
        data = json.loads(request.files["import_file"].getvalue(), use_decimal=True)
        for inode in data["nodes"]:
            mtime = parse_isoformat(inode.get("revision_updated_at", inode["updated_at"]))
            node = Node.query.filter_by(folder=folder, uuid=inode["uuid"]).first()
            with db.session.no_autoflush:
                if node is None:
                    nreg = node_registry.get(inode["type"])
                    if nreg is None:
                        flash("Could not import node of unknown type '%s'" % inode["type"], "error")
                        continue
                    node = nreg.model(folder=folder)
                    user = User.query.filter_by(userid=inode["userid"]).first()
                    node.user = user or g.user
                    db.session.add(node)
                    create_count += 1
                else:
                    if form.import_updated.data and mtime <= node.updated_at:
                        continue
                node.import_from(inode)
            internal_imports.append(inode)
            import_count += 1
        db.session.commit()
        # Second pass for internal data of nodes
        for inode in internal_imports:
            node = Node.query.filter_by(folder=folder, uuid=inode["uuid"]).first()
            node.import_from_internal(inode)
        db.session.commit()
        flash("%d nodes were imported and %d new nodes were created" % (import_count, create_count), "success")
        return render_redirect(url_for("folder", website=website.name, folder=folder.name), code=303)
    return render_form(
        form=form,
        title=u"Import to folder",
        submit=u"Upload",
        cancel_url=url_for("folder", website=website.name, folder=folder.name),
    )
Example #10
0
def folder_new(website):
    g.website = website
    form = FolderForm()
    themes = [('', 'Website Default')] + [(t.identifier, t.name)
                                          for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        folder = Folder(website=website)
        form.populate_obj(folder)
        db.session.add(folder)
        db.session.commit()
        return render_redirect(url_for('folder',
                                       website=website.name,
                                       folder=folder.name),
                               code=303)
    return render_form(form=form,
                       title=u"New folder",
                       submit=u"Create",
                       cancel_url=url_for('website', website=website.name),
                       ajax=True)
Example #11
0
    def sync(self):
        self.action = 'sync'
        self.form = ConfirmForm()

        if self.form.validate_on_submit():
            return Response(
                stream_template('stream.html',
                                stream=stream_with_context(self._sync()),
                                tabs=self.edit_tabs(),
                                node=self.node,
                                title="Syncing participants..."))

        return render_form(form=self.form,
                           title="Sync participant list",
                           submit=u"Sync",
                           tabs=self.edit_tabs(),
                           cancel_url=url_for(
                               'folder',
                               website=self.node.folder.website.name,
                               folder=self.node.folder.name),
                           node=self.node)
Example #12
0
def node_unpublish(website, folder, node):
    g.website = website
    g.folder = folder
    if not (hasattr(node, 'unpublish') and callable(node.unpublish)):
        abort(404)
    form = ConfirmForm(obj=node)
    if form.validate_on_submit():
        node.unpublish()
        db.session.commit()
        flash(u"Unpublished '%s'" % node.title, 'success')
        return render_redirect(url_for('folder',
                                       website=folder.website.name,
                                       folder=folder.name),
                               code=303)
    return render_form(form=form,
                       title="Unpublish node",
                       submit=u"Unpublish",
                       cancel_url=url_for('folder',
                                          website=folder.website.name,
                                          folder=folder.name),
                       node=node)
Example #13
0
def folder_edit(website, folder):
    g.website = website
    g.folder = folder
    form = FolderForm(obj=folder)
    if request.method == 'GET':
        form.theme.data = folder._theme
    themes = [('', 'Website Default')] + [(t.identifier, t.name)
                                          for t in get_themes_list()]
    form.theme.choices = themes
    if form.validate_on_submit():
        form.populate_obj(folder)
        db.session.commit()
        return render_redirect(url_for('folder',
                                       website=website.name,
                                       folder=folder.name),
                               code=303)
    return render_form(form=form,
                       title=u"Edit folder",
                       submit=u"Save",
                       cancel_url=url_for('folder',
                                          website=website.name,
                                          folder=folder.name),
                       ajax=True)