Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(276)

Side by Side Diff: rietveld/views.py

Issue 776: Allow reviewers to change the reviewers list (Closed) SVN Base: http://rietveld.googlecode.com/svn/trunk/
Patch Set: Stop emailing the current user if she remove herself from the reviewers list Created 4 months, 4 weeks ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2008 Google Inc. 1 # Copyright 2008 Google Inc.
2 # 2 #
3 # Licensed under the Apache License, Version 2.0 (the "License"); 3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License. 4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at 5 # You may obtain a copy of the License at
6 # 6 #
7 # http://www.apache.org/licenses/LICENSE-2.0 7 # http://www.apache.org/licenses/LICENSE-2.0
8 # 8 #
9 # Unless required by applicable law or agreed to in writing, software 9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS, 10 # distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 168 matching lines...) Show 10 above Show 10 below
179 max_length=1000, 179 max_length=1000,
180 widget=forms.TextInput(attrs={'size': 60})) 180 widget=forms.TextInput(attrs={'size': 60}))
181 send_mail = forms.BooleanField() 181 send_mail = forms.BooleanField()
182 message = forms.CharField(required=False, 182 message = forms.CharField(required=False,
183 max_length=10000, 183 max_length=10000,
184 widget=forms.Textarea(attrs={'cols': 60})) 184 widget=forms.Textarea(attrs={'cols': 60}))
185 185
186 186
187 class MiniPublishForm(forms.Form): 187 class MiniPublishForm(forms.Form):
188 188
189 reviewers = forms.CharField(required=False,
190 max_length=1000,
191 widget=forms.TextInput(attrs={'size': 60}))
189 send_mail = forms.BooleanField() 192 send_mail = forms.BooleanField()
190 message = forms.CharField(required=False, 193 message = forms.CharField(required=False,
191 max_length=10000, 194 max_length=10000,
192 widget=forms.Textarea(attrs={'cols': 60})) 195 widget=forms.Textarea(attrs={'cols': 60}))
193 196
194 197
195 class SettingsForm(forms.Form): 198 class SettingsForm(forms.Form):
196 199
197 nickname = forms.CharField(max_length=30) 200 nickname = forms.CharField(max_length=30)
198 201
(...skipping 366 matching lines...) Show 10 above Show 10 below
565 return True 568 return True
566 569
567 570
568 def _get_reviewers(form): 571 def _get_reviewers(form):
569 """Helper to return the list of reviewers, or None for error.""" 572 """Helper to return the list of reviewers, or None for error."""
570 reviewers = [] 573 reviewers = []
571 raw_reviewers = form.cleaned_data.get('reviewers') 574 raw_reviewers = form.cleaned_data.get('reviewers')
572 if raw_reviewers: 575 if raw_reviewers:
573 for reviewer in raw_reviewers.split(','): 576 for reviewer in raw_reviewers.split(','):
574 reviewer = reviewer.strip() 577 reviewer = reviewer.strip()
575 if reviewer: 578 if reviewer and reviewer not in reviewers:
576 try: 579 try:
577 reviewer = db.Email(reviewer) 580 reviewer = db.Email(reviewer)
578 if reviewer.count('@') != 1: 581 if reviewer.count('@') != 1:
579 raise db.BadValueError('Invalid email address: %s' % reviewer) 582 raise db.BadValueError('Invalid email address: %s' % reviewer)
580 head, tail = reviewer.split('@') 583 head, tail = reviewer.split('@')
581 if '.' not in tail: 584 if '.' not in tail:
582 raise db.BadValueError('Invalid email address: %s' % reviewer) 585 raise db.BadValueError('Invalid email address: %s' % reviewer)
583 except db.BadValueError, err: 586 except db.BadValueError, err:
584 form.errors['reviewers'] = [unicode(err)] 587 form.errors['reviewers'] = [unicode(err)]
585 return None 588 return None
(...skipping 349 matching lines...) Show 10 above Show 10 below
935 @issue_required 938 @issue_required
936 @login_required 939 @login_required
937 def publish(request): 940 def publish(request):
938 """ /<issue>/publish - Publish draft comments and send mail.""" 941 """ /<issue>/publish - Publish draft comments and send mail."""
939 issue = request.issue 942 issue = request.issue
940 if request.user == issue.owner: 943 if request.user == issue.owner:
941 form_class = PublishForm 944 form_class = PublishForm
942 else: 945 else:
943 form_class = MiniPublishForm 946 form_class = MiniPublishForm
944 if request.method != 'POST': 947 if request.method != 'POST':
948 reviewers = issue.reviewers[:]
949 if request.user != issue.owner and (request.user.email()
950 not in issue.reviewers):
951 reviewers.append(request.user.email())
945 form = form_class(initial={'subject': issue.subject, 952 form = form_class(initial={'subject': issue.subject,
946 'reviewers': ', '.join(issue.reviewers), 953 'reviewers': ', '.join(reviewers),
947 'send_mail': True, 954 'send_mail': True,
948 }) 955 })
949 return respond(request, 'publish.html', {'form': form, 'issue': issue}) 956 return respond(request, 'publish.html', {'form': form, 'issue': issue})
950 957
951 form = form_class(request.POST) 958 form = form_class(request.POST)
952 if form.is_valid(): 959 if form.is_valid():
953 reviewers = _get_reviewers(form) 960 reviewers = _get_reviewers(form)
954 if not form.is_valid(): 961 if not form.is_valid():
955 return respond(request, 'publish.html', {'form': form, 'issue': issue}) 962 return respond(request, 'publish.html', {'form': form, 'issue': issue})
956 tbd = [] # List of things to put() after all is said and done 963 tbd = [] # List of things to put() after all is said and done
957 if request.user == issue.owner: 964 if request.user == issue.owner:
958 subject = form.cleaned_data['subject'] 965 subject = form.cleaned_data['subject']
959 issue.subject = subject 966 issue.subject = subject
960 issue.reviewers = reviewers 967 issue.reviewers = reviewers
961 else: 968 else:
962 subject = issue.subject 969 subject = issue.subject
970 issue.reviewers = reviewers
963 tbd.append(issue) # To update the last modified time 971 tbd.append(issue) # To update the last modified time
964 message = form.cleaned_data['message'].replace('\r\n', '\n') 972 message = form.cleaned_data['message'].replace('\r\n', '\n')
965 send_mail = form.cleaned_data['send_mail'] 973 send_mail = form.cleaned_data['send_mail']
966 comments = [] 974 comments = []
967 975
968 # XXX Should request all drafts for this issue once, now we can. 976 # XXX Should request all drafts for this issue once, now we can.
969 for patchset in issue.patchset_set.order('created'): 977 for patchset in issue.patchset_set.order('created'):
970 ## ps_comments = list(models.Comment.gql( 978 ## ps_comments = list(models.Comment.gql(
971 ## 'WHERE ANCESTOR IS :1 AND author = :2 AND draft = TRUE', 979 ## 'WHERE ANCESTOR IS :1 AND author = :2 AND draft = TRUE',
972 ## patchset, request.user)) 980 ## patchset, request.user))
(...skipping 22 matching lines...) Show 10 above Show 10 below
995 if comments: 1003 if comments:
996 logging.warn('Publishing %d comments', len(comments)) 1004 logging.warn('Publishing %d comments', len(comments))
997 # Decide who should receive mail 1005 # Decide who should receive mail
998 my_email = db.Email(request.user.email()) 1006 my_email = db.Email(request.user.email())
999 addressees = [db.Email(issue.owner.email())] + issue.reviewers 1007 addressees = [db.Email(issue.owner.email())] + issue.reviewers
1000 if my_email in addressees: 1008 if my_email in addressees:
1001 everyone = addressees[:] 1009 everyone = addressees[:]
1002 if len(addressees) > 1: # Keep it if sending only to yourself 1010 if len(addressees) > 1: # Keep it if sending only to yourself
1003 addressees.remove(my_email) 1011 addressees.remove(my_email)
1004 else: 1012 else:
1005 everyone = addressees + [my_email] 1013 everyone = addressees
1006 details = _get_draft_details(request, comments) 1014 details = _get_draft_details(request, comments)
1007 text = ((message.strip() + '\n\n' + details.strip())).strip() 1015 text = ((message.strip() + '\n\n' + details.strip())).strip()
1008 msg = models.Message(issue=issue, 1016 msg = models.Message(issue=issue,
1009 subject=issue.subject, 1017 subject=issue.subject,
1010 sender=my_email, 1018 sender=my_email,
1011 recipients=everyone, 1019 recipients=everyone,
1012 text=db.Text(text), 1020 text=db.Text(text),
1013 parent=issue) 1021 parent=issue)
1014 tbd.append(msg) 1022 tbd.append(msg)
1015 1023
(...skipping 220 matching lines...) Show 10 above Show 10 below
1236 else: 1244 else:
1237 accounts = models.Account.get_accounts_for_nickname(nickname) 1245 accounts = models.Account.get_accounts_for_nickname(nickname)
1238 if nickname != account.nickname and accounts: 1246 if nickname != account.nickname and accounts:
1239 form.errors['nickname'] = ['This nickname is already in use.'] 1247 form.errors['nickname'] = ['This nickname is already in use.']
1240 else: 1248 else:
1241 account.nickname = nickname 1249 account.nickname = nickname
1242 account.put() 1250 account.put()
1243 if not form.is_valid(): 1251 if not form.is_valid():
1244 return respond(request, 'settings.html', {'form': form}) 1252 return respond(request, 'settings.html', {'form': form})
1245 return HttpResponseRedirect('/settings') 1253 return HttpResponseRedirect('/settings')
OLDNEW

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld r338