mirror of
https://github.com/minetest/contentdb.git
synced 2025-01-03 19:57:29 +01:00
Add license editor
This commit is contained in:
parent
742a327cbb
commit
514a24e2c4
25
app/templates/admin/licenses/edit.html
Normal file
25
app/templates/admin/licenses/edit.html
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
{% if license %}
|
||||||
|
Edit {{ license.name }}
|
||||||
|
{% else %}
|
||||||
|
New license
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>
|
||||||
|
<a href="{{ url_for('license_list_page') }}">Back to list</a> |
|
||||||
|
<a href="{{ url_for('createedit_license_page') }}">New License</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% from "macros/forms.html" import render_field, render_submit_field %}
|
||||||
|
<form method="POST" action="" enctype="multipart/form-data">
|
||||||
|
{{ form.hidden_tag() }}
|
||||||
|
|
||||||
|
{{ render_field(form.name) }}
|
||||||
|
{{ render_field(form.is_foss) }}
|
||||||
|
{{ render_submit_field(form.submit) }}
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
16
app/templates/admin/licenses/list.html
Normal file
16
app/templates/admin/licenses/list.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
Licenses
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>
|
||||||
|
<a href="{{ url_for('createedit_license_page') }}">New Tag</a>
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
{% for l in licenses %}
|
||||||
|
<li><a href="{{ url_for('createedit_license_page', name=l.name) }}">{{ l.name }}</a> [{{ l.is_foss and "Free" or "Non-free"}}]</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
@ -8,6 +8,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('user_list_page') }}">User list</a></li>
|
<li><a href="{{ url_for('user_list_page') }}">User list</a></li>
|
||||||
<li><a href="{{ url_for('tag_list_page') }}">Tag Editor</a></li>
|
<li><a href="{{ url_for('tag_list_page') }}">Tag Editor</a></li>
|
||||||
|
<li><a href="{{ url_for('license_list_page') }}">License Editor</a></li>
|
||||||
<li><a href="{{ url_for('switch_user_page') }}">Sign in as another user</a></li>
|
<li><a href="{{ url_for('switch_user_page') }}">Sign in as another user</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -17,12 +18,12 @@
|
|||||||
<form method="post" action="" class="box-body">
|
<form method="post" action="" class="box-body">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||||
<select name="action">
|
<select name="action">
|
||||||
<option value="importmodlist">Import forum topics</option>
|
<option value="importmodlist" selected>Import forum topics</option>
|
||||||
<option value="importscreenshots" selected>Import screenshots from VCS</option>
|
<option value="recalcscores">Recalculate package scores</option>
|
||||||
<option value="importdepends">Import dependencies from downloads</option>
|
<!-- <option value="importscreenshots">Import screenshots from VCS</option> -->
|
||||||
<option value="modprovides">Set provides to mod name</option>
|
<!-- <option value="importdepends">Import dependencies from downloads</option> -->
|
||||||
<option value="recalcscores">Recalc package scores</option>
|
<!-- <option value="modprovides">Set provides to mod name</option> -->
|
||||||
<option value="vcsrelease">Create VCS releases</option>
|
<!-- <option value="vcsrelease">Create VCS releases</option> -->
|
||||||
</select>
|
</select>
|
||||||
<input type="submit" value="Perform" />
|
<input type="submit" value="Perform" />
|
||||||
</form>
|
</form>
|
||||||
|
@ -65,6 +65,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.rank == current_user.rank.MODERATOR %}
|
{% if current_user.rank == current_user.rank.MODERATOR %}
|
||||||
<li><a href="{{ url_for('tag_list_page') }}">Tag Editor</a></li>
|
<li><a href="{{ url_for('tag_list_page') }}">Tag Editor</a></li>
|
||||||
|
<li><a href="{{ url_for('license_list_page') }}">License Editor</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li><a href="{{ url_for('user.logout') }}">Sign out</a></li>
|
<li><a href="{{ url_for('user.logout') }}">Sign out</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -53,7 +53,8 @@ def home_page():
|
|||||||
return render_template("index.html", new=new, popular=popular, count=count)
|
return render_template("index.html", new=new, popular=popular, count=count)
|
||||||
|
|
||||||
from . import users, githublogin, packages, meta, threads, api
|
from . import users, githublogin, packages, meta, threads, api
|
||||||
from . import sass, tasks, admin, notifications, tagseditor, thumbnails
|
from . import tasks, admin, notifications, tagseditor, licenseseditor
|
||||||
|
from . import sass, thumbnails
|
||||||
|
|
||||||
@menu.register_menu(app, ".help", "Help", order=19, endpoint_arguments_constructor=lambda: { 'path': 'help' })
|
@menu.register_menu(app, ".help", "Help", order=19, endpoint_arguments_constructor=lambda: { 'path': 'help' })
|
||||||
@app.route('/<path:path>/')
|
@app.route('/<path:path>/')
|
||||||
|
62
app/views/licenseseditor.py
Normal file
62
app/views/licenseseditor.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Content DB
|
||||||
|
# Copyright (C) 2018 rubenwardy
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
from flask import *
|
||||||
|
from flask_user import *
|
||||||
|
from app import app
|
||||||
|
from app.models import *
|
||||||
|
from flask_wtf import FlaskForm
|
||||||
|
from wtforms import *
|
||||||
|
from wtforms.validators import *
|
||||||
|
from app.utils import rank_required
|
||||||
|
|
||||||
|
@app.route("/licenses/")
|
||||||
|
@rank_required(UserRank.MODERATOR)
|
||||||
|
def license_list_page():
|
||||||
|
return render_template("admin/licenses/list.html", licenses=License.query.order_by(db.asc(License.name)).all())
|
||||||
|
|
||||||
|
class LicenseForm(FlaskForm):
|
||||||
|
name = StringField("Name", [InputRequired(), Length(3,100)])
|
||||||
|
is_foss = BooleanField("Is FOSS")
|
||||||
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
|
@app.route("/licenses/new/", methods=["GET", "POST"])
|
||||||
|
@app.route("/licenses/<name>/edit/", methods=["GET", "POST"])
|
||||||
|
@rank_required(UserRank.MODERATOR)
|
||||||
|
def createedit_license_page(name=None):
|
||||||
|
license = None
|
||||||
|
if name is not None:
|
||||||
|
license = License.query.filter_by(name=name).first()
|
||||||
|
if license is None:
|
||||||
|
abort(404)
|
||||||
|
|
||||||
|
form = LicenseForm(formdata=request.form, obj=license)
|
||||||
|
if request.method == "GET":
|
||||||
|
form.is_foss.data = True
|
||||||
|
elif request.method == "POST" and form.validate():
|
||||||
|
if license is None:
|
||||||
|
license = License(form.name.data)
|
||||||
|
db.session.add(license)
|
||||||
|
flash("Created license " + form.name.data, "success")
|
||||||
|
else:
|
||||||
|
flash("Updated license " + form.name.data, "success")
|
||||||
|
|
||||||
|
form.populate_obj(license)
|
||||||
|
db.session.commit()
|
||||||
|
return redirect(url_for("createedit_license_page", name=license.name))
|
||||||
|
|
||||||
|
return render_template("admin/licenses/edit.html", license=license, form=form)
|
@ -175,8 +175,8 @@ class PackageForm(FlaskForm):
|
|||||||
shortDesc = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
|
shortDesc = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
|
||||||
desc = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
|
desc = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
|
||||||
type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
|
type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
|
||||||
license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
||||||
media_license = QuerySelectField("Media License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
media_license = QuerySelectField("Media License", [InputRequired()], query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
||||||
provides_str = StringField("Provides (mods included in package)", [Optional(), Length(0,1000)])
|
provides_str = StringField("Provides (mods included in package)", [Optional(), Length(0,1000)])
|
||||||
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
||||||
harddep_str = StringField("Hard Dependencies", [Optional(), Length(0,1000)])
|
harddep_str = StringField("Hard Dependencies", [Optional(), Length(0,1000)])
|
||||||
|
@ -27,7 +27,7 @@ from app.utils import rank_required
|
|||||||
@app.route("/tags/")
|
@app.route("/tags/")
|
||||||
@rank_required(UserRank.MODERATOR)
|
@rank_required(UserRank.MODERATOR)
|
||||||
def tag_list_page():
|
def tag_list_page():
|
||||||
return render_template("tags/list.html", tags=Tag.query.order_by(db.asc(Tag.title)).all())
|
return render_template("admin/tagslist.html", tags=Tag.query.order_by(db.asc(Tag.title)).all())
|
||||||
|
|
||||||
class TagForm(FlaskForm):
|
class TagForm(FlaskForm):
|
||||||
title = StringField("Title", [InputRequired(), Length(3,100)])
|
title = StringField("Title", [InputRequired(), Length(3,100)])
|
||||||
@ -54,4 +54,4 @@ def createedit_tag_page(name=None):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
return redirect(url_for("createedit_tag_page", name=tag.name))
|
return redirect(url_for("createedit_tag_page", name=tag.name))
|
||||||
|
|
||||||
return render_template("tags/edit.html", tag=tag, form=form)
|
return render_template("admin/tags/edit.html", tag=tag, form=form)
|
||||||
|
4
setup.py
4
setup.py
@ -362,12 +362,12 @@ for tag in ["Inventory", "Mapgen", "Building", \
|
|||||||
licenses = {}
|
licenses = {}
|
||||||
for license in ["GPLv2.1", "GPLv3", "LGPLv2.1", "LGPLv3", "AGPLv2.1", "AGPLv3",
|
for license in ["GPLv2.1", "GPLv3", "LGPLv2.1", "LGPLv3", "AGPLv2.1", "AGPLv3",
|
||||||
"Apache", "BSD 3-Clause", "BSD 2-Clause", "CC0", "CC-BY-SA",
|
"Apache", "BSD 3-Clause", "BSD 2-Clause", "CC0", "CC-BY-SA",
|
||||||
"CC-BY", "MIT", "ZLib"]:
|
"CC-BY", "MIT", "ZLib", "Other (Free)"]:
|
||||||
row = License(license)
|
row = License(license)
|
||||||
licenses[row.name] = row
|
licenses[row.name] = row
|
||||||
db.session.add(row)
|
db.session.add(row)
|
||||||
|
|
||||||
for license in ["CC-BY-NC-SA"]:
|
for license in ["CC-BY-NC-SA", "Other (Non-free)"]:
|
||||||
row = License(license, False)
|
row = License(license, False)
|
||||||
licenses[row.name] = row
|
licenses[row.name] = row
|
||||||
db.session.add(row)
|
db.session.add(row)
|
||||||
|
Loading…
Reference in New Issue
Block a user