diff --git a/app/blueprints/api/endpoints.py b/app/blueprints/api/endpoints.py
index 160f0242..e9c13ae6 100644
--- a/app/blueprints/api/endpoints.py
+++ b/app/blueprints/api/endpoints.py
@@ -723,5 +723,10 @@ def json_schema():
"type": ["string", "null"],
"format": "uri"
},
+ "donate_url": {
+ "description": "URL to a donation page",
+ "type": ["string", "null"],
+ "format": "uri"
+ },
},
})
diff --git a/app/blueprints/donate/__init__.py b/app/blueprints/donate/__init__.py
index 2ee52801..39b806a8 100644
--- a/app/blueprints/donate/__init__.py
+++ b/app/blueprints/donate/__init__.py
@@ -1,5 +1,6 @@
from flask import Blueprint, render_template
from flask_login import current_user
+from sqlalchemy import or_
from app.models import User, Package, PackageState, db, License
@@ -11,12 +12,18 @@ def donate():
reviewed_packages = None
if current_user.is_authenticated:
reviewed_packages = Package.query.filter(
- Package.state == PackageState.APPROVED,
- Package.reviews.any(author_id=current_user.id, recommends=True),
- Package.author.has(User.donate_url.isnot(None))).order_by(db.asc(Package.title)).all()
+ Package.state == PackageState.APPROVED,
+ Package.reviews.any(author_id=current_user.id, recommends=True),
+ or_(Package.donate_url.isnot(None), Package.author.has(User.donate_url.isnot(None)))
+ ).order_by(db.asc(Package.title)).all()
+
+ query = Package.query.filter(
+ Package.license.has(License.is_foss == True),
+ Package.media_license.has(License.is_foss == True),
+ Package.state == PackageState.APPROVED,
+ or_(Package.donate_url.isnot(None), Package.author.has(User.donate_url.isnot(None)))
+ ).order_by(db.desc(Package.score))
- query = Package.query.filter(Package.license.has(License.is_foss == True), Package.media_license.has(License.is_foss == True),
- Package.state == PackageState.APPROVED, Package.author.has(User.donate_url.isnot(None))).order_by(db.desc(Package.score))
packages_count = query.count()
top_packages = query.limit(40).all()
diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py
index fe75d28f..fd4d3e75 100644
--- a/app/blueprints/packages/packages.py
+++ b/app/blueprints/packages/packages.py
@@ -248,7 +248,8 @@ class PackageForm(FlaskForm):
website = StringField(lazy_gettext("Website URL"), [Optional(), URL()], filters = [lambda x: x or None])
issueTracker = StringField(lazy_gettext("Issue Tracker URL"), [Optional(), URL()], filters = [lambda x: x or None])
forums = IntegerField(lazy_gettext("Forum Topic ID"), [Optional(), NumberRange(0,999999)])
- video_url = StringField(lazy_gettext("Video URL"), [Optional(), URL()], filters = [lambda x: x or None])
+ video_url = StringField(lazy_gettext("Video URL"), [Optional(), URL()], filters=[lambda x: x or None])
+ donate_url = StringField(lazy_gettext("Donate URL"), [Optional(), URL()], filters=[lambda x: x or None])
submit = SubmitField(lazy_gettext("Save"))
@@ -294,6 +295,7 @@ def handle_create_edit(package: typing.Optional[Package], form: PackageForm, aut
"issueTracker": form.issueTracker.data,
"forums": form.forums.data,
"video_url": form.video_url.data,
+ "donate_url": form.donate_url.data,
})
if wasNew:
diff --git a/app/flatpages/help/api.md b/app/flatpages/help/api.md
index f5beb06f..666e4551 100644
--- a/app/flatpages/help/api.md
+++ b/app/flatpages/help/api.md
@@ -90,6 +90,7 @@ Tokens can be attained by visiting [Settings > API Tokens](/user/tokens/).
* `issue_tracker`: Issue tracker URL.
* `forums`: forum topic ID.
* `video_url`: URL to a video.
+ * `donate_url`: URL to a donation page.
* `game_support`: Array of game support information objects. Not currently documented, as subject to change.
* GET `/api/packages/
{{ _("Like this package? Help support its development by making a donation", display_name=package.author.display_name) }}
- + {{ _("Donate now") }} diff --git a/migrations/versions/aa53b4d36c50_.py b/migrations/versions/aa53b4d36c50_.py new file mode 100644 index 00000000..31f9861a --- /dev/null +++ b/migrations/versions/aa53b4d36c50_.py @@ -0,0 +1,23 @@ +"""empty message + +Revision ID: aa53b4d36c50 +Revises: ea83ce985e55 +Create Date: 2023-03-05 18:11:29.743388 + +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = 'aa53b4d36c50' +down_revision = 'ea83ce985e55' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('package', sa.Column('donate_url', sa.String(length=200), nullable=True)) + + +def downgrade(): + op.drop_column('package', 'donate_url')