diff --git a/app/corpora/followers/json_routes.py b/app/corpora/followers/json_routes.py index 9b31f8eedcfb1601381ddc2a7ccf7cef713236d9..872998622ca05257de1019f0c58b0aafdfa4495b 100644 --- a/app/corpora/followers/json_routes.py +++ b/app/corpora/followers/json_routes.py @@ -11,6 +11,7 @@ from app.models import ( from ..decorators import corpus_follower_permission_required from . import bp + @bp.route('/<hashid:corpus_id>/followers', methods=['POST']) @corpus_follower_permission_required('MANAGE_FOLLOWERS') @content_negotiation(consumes='application/json', produces='application/json') diff --git a/app/models.py b/app/models.py index 22969c2f7b4873b123539df267f795e2c3e14f6b..b3294b000314a621cb66f6cbb00fe41703b9f6bb 100644 --- a/app/models.py +++ b/app/models.py @@ -787,11 +787,17 @@ class User(HashidMixin, UserMixin, db.Model): #endregion Profile Privacy settings def follow_corpus(self, corpus, role=None): + if role is None: + cfr = CorpusFollowerRole.query.filter_by(default=True).first() + else: + cfr = role if self.is_following_corpus(corpus): - return - r = CorpusFollowerRole.query.filter_by(default=True).first() if role is None else role - cfa = CorpusFollowerAssociation(corpus=corpus, role=r, follower=self) - db.session.add(cfa) + cfa = CorpusFollowerAssociation.query.filter_by(corpus=corpus, follower=self).first() + if cfa.role != cfr: + cfa.role = cfr + else: + cfa = CorpusFollowerAssociation(corpus=corpus, role=cfr, follower=self) + db.session.add(cfa) def unfollow_corpus(self, corpus): if not self.is_following_corpus(corpus): @@ -840,7 +846,7 @@ class User(HashidMixin, UserMixin, db.Model): if role is None: return False self.follow_corpus(corpus, role) - db.session.add(self) + # db.session.add(self) return True def to_json_serializeable(self, backrefs=False, relationships=False, filter_by_privacy_settings=False): diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2 index 2e38b88d3948975e1ab018f6537671db708f4d9e..07cb330d2f35644d35d0dff7ca95743315897906 100644 --- a/app/templates/corpora/corpus.html.j2 +++ b/app/templates/corpora/corpus.html.j2 @@ -192,7 +192,7 @@ <div class="input-field"> <i class="material-icons prefix">badge</i> <select id="share-link-modal-corpus-follower-role-select"> - {% for cfr in cfrs %} + {% for cfr in cfrs if cfr.name != 'Anonymous' %} <option value="{{ cfr.name }}">{{ cfr.name }}</option> {% endfor %} </select>