from app.tasks.forumtasks import importTopicList, checkAllForumAccounts
from flask_wtf import FlaskForm
from wtforms import *
-from app.utils import loginUser, rank_required, triggerNotif
+from app.utils import loginUser, rank_required, addNotification
import datetime, os
@bp.route("/admin/", methods=["GET", "POST"])
makeVCSRelease.apply_async((rel.id, "master"), task_id=rel.task_id)
msg = "{}: Release {} created".format(package.title, rel.title)
- triggerNotif(package.author, current_user, msg, rel.getEditURL())
+ addNotification(package.maintainers, current_user, msg, rel.getEditURL())
db.session.commit()
elif action == "cleanuploads":
if wasChangeMade:
msg = "{}: Edit request #{} {}" \
.format(package.title, erequest.id, "created" if id is None else "edited")
- triggerNotif(package.author, current_user, msg, erequest.getURL())
- triggerNotif(erequest.author, current_user, msg, erequest.getURL())
+ addNotification(package.maintainers, current_user, msg, erequest.getURL())
+ addNotification(erequest.author, current_user, msg, erequest.getURL())
db.session.commit()
return redirect(erequest.getURL())
else:
erequest.applyAll(package)
msg = "{}: Edit request #{} merged".format(package.title, erequest.id)
- triggerNotif(erequest.author, current_user, msg, erequest.getURL())
- triggerNotif(package.author, current_user, msg, erequest.getURL())
+ addNotification(erequest.author, current_user, msg, erequest.getURL())
+ addNotification(package.maintainers, current_user, msg, erequest.getURL())
db.session.commit()
return redirect(package.getDetailsURL())
erequest.status = 2
msg = "{}: Edit request #{} rejected".format(package.title, erequest.id)
- triggerNotif(erequest.author, current_user, msg, erequest.getURL())
- triggerNotif(package.author, current_user, msg, erequest.getURL())
+ addNotification(erequest.author, current_user, msg, erequest.getURL())
+ addNotification(package.maintainers, current_user, msg, erequest.getURL())
db.session.commit()
return redirect(package.getDetailsURL())
return redirect(url_for("packages.create_edit", author=author, name=name))
else:
- triggerNotif(package.author, current_user,
+ addNotification(package.maintainers, current_user,
"{} edited".format(package.title), package.getDetailsURL())
form.populate_obj(package) # copy to row
for s in screenshots:
s.approved = True
- triggerNotif(package.author, current_user,
+ addNotification(package.maintainers, current_user,
"{} approved".format(package.title), package.getDetailsURL())
db.session.commit()
package.soft_deleted = True
url = url_for("users.profile", username=package.author.username)
- triggerNotif(package.author, current_user,
+ addNotification(package.maintainers, current_user,
"{} deleted".format(package.title), url)
db.session.commit()
package.approved = False
- triggerNotif(package.author, current_user,
+ addNotification(package.maintainers, current_user,
"{} unapproved".format(package.title), package.getDetailsURL())
db.session.commit()
for user in users:
if not user in package.maintainers:
- triggerNotif(user, current_user,
+ addNotification(user, current_user,
"Added you as a maintainer of {}".format(package.title), package.getDetailsURL())
for user in package.maintainers:
if user != package.author and not user in users:
- triggerNotif(user, current_user,
+ addNotification(user, current_user,
"Removed you as a maintainer of {}".format(package.title), package.getDetailsURL())
package.maintainers.clear()
package.maintainers.extend(users)
package.maintainers.append(package.author)
- triggerNotif(package.author, current_user,
+ addNotification(package.author, current_user,
"Edited {} maintainers".format(package.title), package.getDetailsURL())
db.session.commit()
else:
package.maintainers.remove(current_user)
- triggerNotif(package.author, current_user,
+ addNotification(package.author, current_user,
"Removed themself as a maintainer of {}".format(package.title), package.getDetailsURL())
db.session.commit()
makeVCSRelease.apply_async((rel.id, form["vcsLabel"].data), task_id=rel.task_id)
msg = "{}: Release {} created".format(package.title, rel.title)
- triggerNotif(package.author, current_user, msg, rel.getEditURL())
+ addNotification(package.maintainers, current_user, msg, rel.getEditURL())
db.session.commit()
return redirect(url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))
checkZipRelease.apply_async((rel.id, uploadedPath), task_id=rel.task_id)
msg = "{}: Release {} created".format(package.title, rel.title)
- triggerNotif(package.author, current_user, msg, rel.getEditURL())
+ addNotification(package.maintainers, current_user, msg, rel.getEditURL())
db.session.commit()
return redirect(url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))
from wtforms import *
from wtforms.validators import *
from app.models import db, PackageReview, Thread, ThreadReply
-from app.utils import is_package_page, triggerNotif
+from app.utils import is_package_page, addNotification
class ReviewForm(FlaskForm):
title = StringField("Title", [InputRequired(), Length(3,100)])
else:
notif_msg = "Updated review '{}' on package {}".format(form.title.data, package.title)
- for maintainer in package.maintainers:
- triggerNotif(maintainer, current_user, notif_msg, url_for("threads.view", id=thread.id))
+ addNotification(package.maintainers, current_user, notif_msg, url_for("threads.view", id=thread.id))
db.session.commit()
msg = "{}: Screenshot added {}" \
.format(package.title, ss.title)
- triggerNotif(package.author, current_user, msg, package.getDetailsURL())
+ addNotification(package.maintainers, current_user, msg, package.getDetailsURL())
db.session.commit()
return redirect(package.getDetailsURL())
from flask_user import *
from app.models import *
-from app.utils import triggerNotif, clearNotifications
+from app.utils import addNotification, clearNotifications
import datetime
msg = "New comment on '{}' on package {}".format(thread.title, thread.package.title)
- for user in thread.watchers:
- if user != current_user:
- triggerNotif(user, current_user, msg, url_for("threads.view", id=thread.id))
-
+ addNotification(thread.watchers, current_user, msg, url_for("threads.view", id=thread.id))
db.session.commit()
return redirect(url_for("threads.view", id=id))
notif_msg = None
if package is not None:
notif_msg = "New thread '{}' on package {}".format(thread.title, package.title)
- for maintainer in package.maintainers:
- triggerNotif(maintainer, current_user, notif_msg, url_for("threads.view", id=thread.id))
+ addNotification(package.maintainers, current_user, notif_msg, url_for("threads.view", id=thread.id))
else:
notif_msg = "New thread '{}'".format(thread.title)
- for user in User.query.filter(User.rank >= UserRank.EDITOR).all():
- triggerNotif(user, current_user, notif_msg, url_for("threads.view", id=thread.id))
+ editors = User.query.filter(User.rank >= UserRank.EDITOR).all()
+ addNotification(editors, current_user, notif_msg, url_for("threads.view", id=thread.id))
db.session.commit()
return decorated_function
-def triggerNotif(owner, causer, title, url):
- if owner.rank.atLeast(UserRank.NEW_MEMBER) and owner != causer:
- Notification.query.filter_by(user=owner, causer=causer, title=title, url=url).delete()
- notif = Notification(owner, causer, title, url)
+
+def addNotification(target, causer, title, url):
+ if not isinstance(target, User):
+ for x in target:
+ addNotification(x, causer, title, url)
+ return
+
+ if target.rank.atLeast(UserRank.NEW_MEMBER) and target != causer:
+ Notification.query.filter_by(user=target, causer=causer, title=title, url=url).delete()
+ notif = Notification(target, causer, title, url)
db.session.add(notif)
+
def clearNotifications(url):
if current_user.is_authenticated:
Notification.query.filter_by(user=current_user, url=url).delete()