mirror of
https://github.com/minetest/contentdb.git
synced 2025-03-31 07:12:43 +02:00
Support lists of packages in create collection
This commit is contained in:
app
@ -108,9 +108,12 @@ def create_edit(author=None, name=None):
|
|||||||
|
|
||||||
form = CollectionForm(formdata=request.form, obj=collection)
|
form = CollectionForm(formdata=request.form, obj=collection)
|
||||||
|
|
||||||
initial_package = None
|
initial_packages = []
|
||||||
if "package" in request.args:
|
if "package" in request.args:
|
||||||
initial_package = Package.get_by_key(request.args["package"])
|
for package_id in request.args.getlist("package"):
|
||||||
|
package = Package.get_by_key(package_id)
|
||||||
|
if package:
|
||||||
|
initial_packages.append(package)
|
||||||
|
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
# HACK: fix bug in wtforms
|
# HACK: fix bug in wtforms
|
||||||
@ -123,7 +126,7 @@ def create_edit(author=None, name=None):
|
|||||||
form.name = None
|
form.name = None
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
ret = handle_create_edit(collection, form, initial_package, author)
|
ret = handle_create_edit(collection, form, initial_packages, author)
|
||||||
if ret:
|
if ret:
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@ -132,7 +135,7 @@ def create_edit(author=None, name=None):
|
|||||||
|
|
||||||
|
|
||||||
def handle_create_edit(collection: Collection, form: CollectionForm,
|
def handle_create_edit(collection: Collection, form: CollectionForm,
|
||||||
initial_package: typing.Optional[Package], author: User):
|
initial_packages: typing.List[Package], author: User):
|
||||||
|
|
||||||
severity = AuditSeverity.NORMAL if author == current_user else AuditSeverity.EDITOR
|
severity = AuditSeverity.NORMAL if author == current_user else AuditSeverity.EDITOR
|
||||||
name = form.name.data if collection else regex_invalid_chars.sub("", form.title.data.lower().replace(" ", "_"))
|
name = form.name.data if collection else regex_invalid_chars.sub("", form.title.data.lower().replace(" ", "_"))
|
||||||
@ -157,9 +160,9 @@ def handle_create_edit(collection: Collection, form: CollectionForm,
|
|||||||
collection.name = name
|
collection.name = name
|
||||||
db.session.add(collection)
|
db.session.add(collection)
|
||||||
|
|
||||||
if initial_package:
|
for package in initial_packages:
|
||||||
link = CollectionPackage()
|
link = CollectionPackage()
|
||||||
link.package = initial_package
|
link.package = package
|
||||||
link.collection = collection
|
link.collection = collection
|
||||||
link.order = len(collection.items)
|
link.order = len(collection.items)
|
||||||
db.session.add(link)
|
db.session.add(link)
|
||||||
|
@ -21,6 +21,7 @@ import enum
|
|||||||
from flask import url_for
|
from flask import url_for
|
||||||
from flask_babel import lazy_gettext
|
from flask_babel import lazy_gettext
|
||||||
from flask_sqlalchemy import BaseQuery
|
from flask_sqlalchemy import BaseQuery
|
||||||
|
from sqlalchemy import or_
|
||||||
from sqlalchemy_searchable import SearchQueryMixin
|
from sqlalchemy_searchable import SearchQueryMixin
|
||||||
from sqlalchemy_utils.types import TSVectorType
|
from sqlalchemy_utils.types import TSVectorType
|
||||||
from sqlalchemy.dialects.postgresql import insert
|
from sqlalchemy.dialects.postgresql import insert
|
||||||
@ -473,7 +474,13 @@ class Package(db.Model):
|
|||||||
if len(parts) != 2:
|
if len(parts) != 2:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return Package.query.filter(Package.name == parts[1], Package.author.has(username=parts[0])).first()
|
name = parts[1]
|
||||||
|
if name.endswith("_game"):
|
||||||
|
name = name[:-5]
|
||||||
|
|
||||||
|
return Package.query.filter(
|
||||||
|
or_(Package.name == name, Package.name == name + "_game"),
|
||||||
|
Package.author.has(username=parts[0])).first()
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
return "{}/{}".format(self.author.username, self.name)
|
return "{}/{}".format(self.author.username, self.name)
|
||||||
|
Reference in New Issue
Block a user