]> git.lizzy.rs Git - cheatdb.git/blobdiff - app/blueprints/packages/packages.py
Add Content Warnings
[cheatdb.git] / app / blueprints / packages / packages.py
index 716e79ec28443a62ce285c810efe09990d47619d..5a775b2c8aaed9d23b27c4a9849f83e0426b4f6d 100644 (file)
@@ -198,22 +198,24 @@ def download(package):
 
 
 class PackageForm(FlaskForm):
-       name          = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
-       title         = StringField("Title (Human-readable)", [InputRequired(), Length(3, 100)])
-       short_desc     = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
-       desc          = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
-       type          = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
-       license       = QuerySelectField("License", [DataRequired()], allow_blank=True, 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", [DataRequired()], allow_blank=True, 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()])
-       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()])
-       softdep_str   = StringField("Soft Dependencies", [Optional()])
-       repo          = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
-       website       = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
-       issueTracker  = StringField("Issue Tracker URL", [Optional(), URL()], filters = [lambda x: x or None])
-       forums        = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
-       submit        = SubmitField("Save")
+       name             = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
+       title            = StringField("Title (Human-readable)", [InputRequired(), Length(3, 100)])
+       short_desc       = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
+       desc             = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
+       type             = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
+       license          = QuerySelectField("License", [DataRequired()], allow_blank=True, 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", [DataRequired()], allow_blank=True, 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()])
+       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)
+       content_warnings = QuerySelectMultipleField('Content Warnings', query_factory=lambda: ContentWarning.query.order_by(db.asc(ContentWarning.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
+       harddep_str      = StringField("Hard Dependencies", [Optional()])
+       softdep_str      = StringField("Soft Dependencies", [Optional()])
+       repo             = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
+       website          = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
+       issueTracker     = StringField("Issue Tracker URL", [Optional(), URL()], filters = [lambda x: x or None])
+       forums           = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
+       submit           = SubmitField("Save")
+
 
 @bp.route("/packages/new/", methods=["GET", "POST"])
 @bp.route("/packages/<author>/<name>/edit/", methods=["GET", "POST"])
@@ -259,6 +261,7 @@ def create_edit(author=None, name=None):
                        form.softdep_str.data  = ",".join([str(x) for x in package.getSortedOptionalDependencies() ])
                        form.provides_str.data = MetaPackage.ListToSpec(package.provides)
                        form.tags.data         = list(package.tags)
+                       form.content_warnings.data = list(package.content_warnings)
 
        if request.method == "POST" and form.validate():
                wasNew = False
@@ -320,6 +323,10 @@ def create_edit(author=None, name=None):
                for tag in form.tags.raw_data:
                        package.tags.append(Tag.query.get(tag))
 
+               package.content_warnings.clear()
+               for warning in form.content_warnings.raw_data:
+                       package.content_warnings.append(ContentWarning.query.get(warning))
+
                db.session.commit() # save
 
                next_url = package.getDetailsURL()