]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add tag selecting in edit package
authorrubenwardy <rw@rubenwardy.com>
Mon, 26 Mar 2018 11:42:35 +0000 (12:42 +0100)
committerrubenwardy <rw@rubenwardy.com>
Mon, 26 Mar 2018 11:42:40 +0000 (12:42 +0100)
Fixes #35

app/models.py
app/templates/packages/create_edit.html
app/templates/packages/list.html
app/views/packages.py
setup.py

index ab88fc6a125ed212500667a332c3b502e3f1e682..0c9b2f273d8aabc4da31139d30b9fea0dad7f560 100644 (file)
@@ -275,6 +275,7 @@ class Package(db.Model):
 
 class Tag(db.Model):
        id              = db.Column(db.Integer,    primary_key=True)
+       name            = db.Column(db.String(100), unique=True, nullable=False)
        title           = db.Column(db.String(100), nullable=False)
        backgroundColor = db.Column(db.String(6),   nullable=False)
        textColor       = db.Column(db.String(6),   nullable=False)
@@ -284,10 +285,9 @@ class Tag(db.Model):
                self.backgroundColor = backgroundColor
                self.textColor       = textColor
 
-       def getName(self):
                import re
                regex = re.compile('[^a-z_]')
-               return regex.sub("", self.title.lower().replace(" ", "_"))
+               self.name = regex.sub("", self.title.lower().replace(" ", "_"))
 
 class PackageRelease(db.Model):
        id           = db.Column(db.Integer, primary_key=True)
index 26b4c445ee175e1f9143441dc56c73e2cd52ab7e..ad8ff6bd6f0a19c5802b5a729062b6690edcb29c 100644 (file)
@@ -14,6 +14,7 @@
                {{ render_field(form.shortDesc) }}
                {{ render_field(form.desc) }}
                {{ render_field(form.type) }}
+               {{ render_field(form.tags) }}
                {{ render_field(form.repo) }}
                {{ render_field(form.website) }}
                {{ render_field(form.issueTracker) }}
index 666e5af8b0846cb6833a0d4f0fcd309150c92623..cd7f7d9fd67bd9c6d14b6da5047c4418067b81b5 100644 (file)
@@ -26,7 +26,7 @@
        </div>
        <ul>
                {% for t in tags %}
-                       <li><a href="{{ url_for('packages_page', q=(query or '')+' tag:'+t.getName()) }}">
+                       <li><a href="{{ url_for('packages_page', q=(query or '')+' tag:'+t.name) }}">
                                {{ t.title }}
                        </a></li>
                {% else %}
index c9ad24ff466a7b3714f6ca334fc072128a4ea233..dfe7af040c499183ed14de6aa18a483451899e3a 100644 (file)
@@ -9,6 +9,7 @@ from .utils import *
 from flask_wtf import FlaskForm
 from wtforms import *
 from wtforms.validators import *
+from wtforms.ext.sqlalchemy.fields import QuerySelectMultipleField
 
 
 # TODO: the following could be made into one route, except I"m not sure how
@@ -134,6 +135,7 @@ class PackageForm(FlaskForm):
        shortDesc    = StringField("Short Description", [InputRequired(), Length(1,200)])
        desc         = TextAreaField("Long Description", [Optional(), Length(0,10000)])
        type         = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
+       tags         = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query, get_pk=lambda a: a.id, get_label=lambda a: a.title)
        repo         = StringField("Repo URL", [Optional(), URL()])
        website      = StringField("Website URL", [Optional(), URL()])
        issueTracker = StringField("Issue Tracker URL", [Optional(), URL()])
@@ -164,6 +166,10 @@ def create_edit_package_page(type=None, author=None, name=None):
                        package.author = current_user
                        # package.approved = package.checkPerm(current_user, Permission.APPROVE_NEW)
 
+               package.tags.clear()
+               for tag in form.tags.raw_data:
+                       package.tags.append(Tag.query.get(tag))
+
                form.populate_obj(package) # copy to row
                db.session.commit() # save
                return redirect(package.getDetailsURL()) # redirect
index 0db122ad5f90321f9d80406fad86e654c6baa67c..6ad5217c10dc2f7ee5f4da1ce5f2a1d3803d5899 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -40,7 +40,7 @@ if not os.path.isfile("db.sqlite"):
                        "Environment", "Transport", "Maintenance", "Plants and farming", \
                        "PvP", "PvE", "Survival", "Creative", "Puzzle", "Multiplayer", "Singleplayer"]:
                row = Tag(tag)
-               tags[row.getName()] = row
+               tags[row.name] = row
                db.session.add(row)