Changeset 6fc0921
- Timestamp:
- Nov 17, 2011, 5:28:01 PM (14 years ago)
- Branches:
- master, space-access, stable, stage, test-hooks
- Children:
- 283099c
- Parents:
- 728cafa (diff), 29a7eca (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Alex Dehnert <adehnert@…> (11/17/11 17:28:01)
- git-committer:
- Alex Dehnert <adehnert@…> (11/17/11 17:28:01)
- Files:
-
- 27 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
asadb/groups/admin.py
r3107c52 rac93a0c 27 27 admin.site.register(groups.models.Group, GroupAdmin) 28 28 29 30 class Admin_GroupStartup(VersionAdmin): 31 list_display = ( 32 'id', 33 'group', 34 'stage', 35 'submitter', 36 'president_kerberos', 37 'create_officer_list', 38 'create_group_list', 39 'create_athena_locker', 40 ) 41 list_display_links = ('id', 'group', ) 42 search_fields = [ 'group__name', 'group__abbreviation', 'submitter', 'president_kerberos', ] 43 admin.site.register(groups.models.GroupStartup, Admin_GroupStartup) 29 44 30 45 class Admin_GroupNote(VersionAdmin): -
asadb/groups/models.py
r3275ab1 rfd6ed57 96 96 ('admin_group', 'Administer basic group information'), 97 97 ('view_signatories', 'View signatory information for all groups'), 98 ) 98 ('recognize_nge', 'Recognize Non-Group Entity'), 99 ('recognize_group', 'Recognize groups'), 100 ) 101 102 103 GROUP_STARTUP_STAGE_SUBMITTED = 10 104 GROUP_STARTUP_STAGE_APPROVED = 20 105 GROUP_STARTUP_STAGE_REJECTED = -10 106 GROUP_STARTUP_STAGE = ( 107 (GROUP_STARTUP_STAGE_SUBMITTED, 'submitted'), 108 (GROUP_STARTUP_STAGE_APPROVED, 'approved'), 109 (GROUP_STARTUP_STAGE_REJECTED, 'rejected'), 110 ) 111 112 class GroupStartup(models.Model): 113 group = models.ForeignKey(Group) 114 stage = models.IntegerField(choices=GROUP_STARTUP_STAGE) 115 submitter = models.CharField(max_length=30, editable=False, ) 116 create_officer_list = models.BooleanField() 117 create_group_list = models.BooleanField() 118 create_athena_locker = models.BooleanField() 119 president_name = models.CharField(max_length=50) 120 president_kerberos = models.CharField(max_length=8) 121 treasurer_name = models.CharField(max_length=50) 122 treasurer_kerberos = models.CharField(max_length=8) 99 123 100 124 -
asadb/groups/urls.py
rfbb362a raa2aa58 13 13 (r'^(?P<pk>\d+)/', include(group_patterns, ), ), 14 14 url(r'^$', groups.views.GroupListView.as_view(), name='list', ), 15 url(r'^startup/$', groups.views.startup_form, name='startup', ), 16 url(r'^startup/review/$', groups.views.GroupStartupListView.as_view(), name='startup-list', ), 17 url(r'^startup/review/(?P<pk>\d+)$', groups.views.recognize_normal_group, name='startup-recognize', ), 18 url(r'^recognize/nge/$', groups.views.recognize_nge, name='recognize-nge', ), 15 19 url(r'^search/$', groups.views.search_groups, name='search', ), 16 20 url(r'^recent_changes/$', groups.views.GroupHistoryView.as_view(), name='manage-history', ), 17 21 url(r'^signatories/$', groups.views.view_signatories, name='signatories', ), 22 url(r'^account_lookup/$', groups.views.account_lookup, name='account-lookup', ), 18 23 ) 19 24 -
asadb/groups/views.py
rfbb362a rfd6ed57 17 17 from django.core.urlresolvers import reverse 18 18 from django.core.mail import EmailMessage, mail_admins 19 from django.forms import Form 20 from django.forms import ModelForm 21 from django.forms import ModelChoiceField 19 from django import forms 20 from django.forms import ValidationError 22 21 from django.db import connection 23 22 from django.db.models import Q … … 28 27 29 28 from util.db_form_utils import StaticWidget 30 29 from util.emails import email_from_template 30 31 32 33 ############ 34 # Homepage # 35 ############ 31 36 32 37 def view_homepage(request, ): … … 56 61 } 57 62 return render_to_response('index.html', context, context_instance=RequestContext(request), ) 63 64 65 66 ################ 67 # Single group # 68 ################ 69 70 class GroupDetailView(DetailView): 71 context_object_name = "group" 72 model = groups.models.Group 73 def get_context_data(self, **kwargs): 74 # Call the base implementation first to get a context 75 context = super(GroupDetailView, self).get_context_data(**kwargs) 76 group = context['group'] 77 78 # Indicate whether this person should be able to see "private" info 79 context['viewpriv'] = self.request.user.has_perm('groups.view_group_private_info', group) 80 context['adminpriv'] = self.request.user.has_perm('groups.admin_group', group) 81 context['notes'] = group.viewable_notes(self.request.user) 82 83 # People involved in the group 84 just_roles = groups.models.OfficerRole.objects.all() 85 if context['viewpriv'] or self.request.user.has_perm('groups.view_signatories'): 86 # Can see the non-public stuff 87 pass 88 else: 89 just_roles = just_roles.filter(publicly_visible=True) 90 roles = [] 91 for role in just_roles: 92 roles.append((role.display_name, role, group.officers(role=role), )) 93 context['roles'] = roles 94 95 return context 58 96 59 97 … … 136 174 request_obj.save() 137 175 form.save_m2m() 138 139 # Send email140 #tmpl = get_template('fysm/update_email.txt')141 #ctx = Context({142 # 'group': group_obj,143 # 'fysm': fysm_obj,144 # 'view_uri': view_uri,145 # 'submitter': request.user,146 # 'request': request,147 # 'sender': "ASA FYSM team",148 #})149 #body = tmpl.render(ctx)150 #email = EmailMessage(151 # subject='FYSM entry for "%s" updated by "%s"' % (152 # group_obj.name,153 # request.user,154 # ),155 # body=body,156 # from_email='asa-fysm@mit.edu',157 # to=[group_obj.officer_email, request.user.email, ],158 # bcc=['asa-fysm-submissions@mit.edu', ]159 #)160 #email.send()161 176 msg = "Thanks for editing!" 162 177 else: … … 173 188 return render_to_response('groups/group_change_main.html', context, context_instance=RequestContext(request), ) 174 189 190 191 ################## 192 # GROUP CREATION # 193 ################## 194 195 def validate_athena(username, student=False, ): 196 try: 197 person = groups.models.AthenaMoiraAccount.active_accounts.get(username=username) 198 if student and not person.is_student(): 199 raise ValidationError('This must be a current student.') 200 except groups.models.AthenaMoiraAccount.DoesNotExist: 201 raise ValidationError('This must be a valid Athena username.') 202 203 204 class GroupCreateForm(form_utils.forms.BetterModelForm): 205 create_officer_list = forms.BooleanField(required=False) 206 create_group_list = forms.BooleanField(required=False) 207 create_athena_locker = forms.BooleanField(required=False) 208 209 president_name = forms.CharField(max_length=50, ) 210 president_kerberos = forms.CharField(min_length=3, max_length=8, ) 211 treasurer_name = forms.CharField(max_length=50) 212 treasurer_kerberos = forms.CharField(min_length=3, max_length=8, ) 213 def clean_president(self, ): 214 username = self.cleaned_data['president_kerberos'] 215 validate_athena(username, True, ) 216 return username 217 218 def clean_treasurer(self, ): 219 username = self.cleaned_data['treasurer_kerberos'] 220 validate_athena(username, True, ) 221 return username 222 223 class Meta: 224 fieldsets = [ 225 ('basic', { 226 'legend': 'Basic Information', 227 'fields': ['name', 'abbreviation', 'description', ], 228 }), 229 ('officers', { 230 'legend': 'Officers', 231 'fields': ['president_name', 'president_kerberos', 'treasurer_name', 'treasurer_kerberos', ], 232 }), 233 ('type', { 234 'legend': 'Type', 235 'fields': ['activity_category', 'group_class', 'group_funding', ], 236 }), 237 ('technical', { 238 'legend': 'Technical Information', 239 'fields': [ 240 'officer_email', 'create_officer_list', 241 'group_email', 'create_group_list', 242 'athena_locker', 'create_athena_locker', 243 ], 244 }), 245 ('financial', { 246 'legend': 'Financial Information', 247 'fields': ['main_account_id', 'funding_account_id', ], 248 }), 249 ('constitution', { 250 'legend': 'Constitution', 251 'fields': ['constitution_url', ], 252 }), 253 ] 254 model = groups.models.Group 255 256 257 class GroupCreateNgeForm(GroupCreateForm): 258 def __init__(self, *args, **kwargs): 259 super(GroupCreateNgeForm, self).__init__(*args, **kwargs) 260 self.fields['treasurer_name'].required = False 261 self.fields['treasurer_kerberos'].required = False 262 263 264 class GroupCreateStartupForm(GroupCreateForm): 265 def __init__(self, *args, **kwargs): 266 super(GroupCreateStartupForm, self).__init__(*args, **kwargs) 267 self.fields['activity_category'].required = True 268 self.fields['constitution_url'].required = True 269 self.fields['constitution_url'].help_text = "Please put a copy of your finalized constitution on a publicly-accessible website (e.g. your group's, or your own, Public folder), and link to it in the box above." 270 271 class Meta(GroupCreateForm.Meta): 272 fieldsets = filter( 273 lambda fieldset: fieldset[0] not in ['financial', ], 274 GroupCreateForm.Meta.fieldsets 275 ) 276 277 def create_group_get_emails(group, group_startup, officer_emails, ): 278 # Figure out all the accounts mail parameters 279 accounts_count = 0 280 create_officer_list = False 281 if group_startup.create_officer_list and group.officer_email: 282 create_officer_list = True 283 accounts_count += 1 284 create_group_list = False 285 if group_startup.create_group_list and group.group_email: 286 create_group_list = True 287 accounts_count += 1 288 create_athena_locker = False 289 if group_startup.create_athena_locker and group.athena_locker: 290 create_athena_locker = True 291 accounts_count += 1 292 officer_list, _, officer_domain = group.officer_email.partition('@') 293 group_list, _, group_domain = group.group_email.partition('@') 294 295 # Fill out the Context 296 mail_context = Context({ 297 'group': group, 298 'group_startup': group_startup, 299 'create_officer_list': create_officer_list, 300 'create_group_list': create_group_list, 301 'create_athena_locker': create_athena_locker, 302 'officer_list': officer_list, 303 'group_list': group_list, 304 'officer_emails': officer_emails, 305 }) 306 307 # Welcome mail 308 welcome_mail = email_from_template( 309 tmpl='groups/diffs/new-group-announce.txt', 310 context=mail_context, 311 subject='ASA Group Recognition: %s' % (group.name, ), 312 to=officer_emails, 313 cc=['asa-new-group-announce@mit.edu'], 314 from_email='asa-exec@mit.edu', 315 ) 316 317 # Accounts mail 318 if accounts_count > 0: 319 accounts_mail = email_from_template( 320 tmpl='groups/diffs/new-group-accounts.txt', 321 context=mail_context, 322 subject='New Student Activity: %s' % (group.name, ), 323 to=['accounts@mit.edu'], 324 cc=officer_emails+['asa-admin@mit.edu'], 325 from_email='asa-admin@mit.edu', 326 ) 327 # XXX: Handle this better 328 if officer_domain != 'mit.edu' or (create_group_list and group_domain != 'mit.edu'): 329 accounts_mail.to = ['asa-groups@mit.edu'] 330 accounts_mail.cc = ['asa-db@mit.edu'] 331 accounts_mail.subject = "ERROR: " + accounts_mail.subject 332 accounts_mail.body = "Bad domain on officer or group list\n\n" + accounts_mail.body 333 334 else: 335 accounts_mail = None 336 return welcome_mail, accounts_mail 337 338 def create_group_officers(group, formdata, save=True, ): 339 officer_emails = [ ] 340 for officer in ('president', 'treasurer', ): 341 username = formdata[officer+'_kerberos'] 342 if username: 343 if save: groups.models.OfficeHolder( 344 person=username, 345 role=groups.models.OfficerRole.objects.get(slug=officer), 346 group=group, 347 ).save() 348 officer_emails.append('%s@mit.edu' % (formdata[officer+'_kerberos'], )) 349 return officer_emails 350 351 @permission_required('groups.recognize_nge') 352 def recognize_nge(request, ): 353 msg = None 354 355 initial = { 356 'create_officer_list': False, 357 'create_group_list': False, 358 'create_athena_locker': True, 359 } 360 group = groups.models.Group() 361 group.group_status = groups.models.GroupStatus.objects.get(slug='nge', ) 362 group.recognition_date = datetime.datetime.now() 363 if request.method == 'POST': # If the form has been submitted... 364 # A form bound to the POST data 365 form = GroupCreateNgeForm( 366 request.POST, request.FILES, 367 initial=initial, 368 instance=group, 369 ) 370 371 if form.is_valid(): # All validation rules pass 372 group.set_updater(request.user) 373 form.save() 374 officer_emails = create_group_officers(group, form.cleaned_data, ) 375 376 return redirect(reverse('groups:group-detail', args=[group.pk])) 377 else: 378 msg = "Validation failed. See below for details." 379 380 else: 381 form = GroupCreateNgeForm(initial=initial, instance=group, ) # An unbound form 382 383 context = { 384 'form': form, 385 'msg': msg, 386 'pagename': 'groups', 387 } 388 return render_to_response('groups/create/nge.html', context, context_instance=RequestContext(request), ) 389 390 def startup_form(request, ): 391 msg = None 392 393 initial = { 394 'create_officer_list': True, 395 'create_group_list': True, 396 'create_athena_locker': True, 397 } 398 group = groups.models.Group() 399 group.group_status = groups.models.GroupStatus.objects.get(slug='applying', ) 400 group.recognition_date = datetime.datetime.now() 401 if request.method == 'POST': # If the form has been submitted... 402 # A form bound to the POST data 403 form = GroupCreateStartupForm( 404 request.POST, request.FILES, 405 initial=initial, 406 instance=group, 407 ) 408 409 if form.is_valid(): # All validation rules pass 410 group.set_updater(request.user) 411 form.save() 412 413 group_startup = groups.models.GroupStartup() 414 group_startup.group = group 415 group_startup.stage = groups.models.GROUP_STARTUP_STAGE_SUBMITTED 416 group_startup.submitter = request.user.username 417 418 group_startup.create_officer_list = form.cleaned_data['create_officer_list'] 419 group_startup.create_group_list = form.cleaned_data['create_group_list'] 420 group_startup.create_athena_locker = form.cleaned_data['create_athena_locker'] 421 422 group_startup.president_name = form.cleaned_data['president_name'] 423 group_startup.president_kerberos = form.cleaned_data['president_kerberos'] 424 group_startup.treasurer_name = form.cleaned_data['treasurer_name'] 425 group_startup.treasurer_kerberos = form.cleaned_data['treasurer_kerberos'] 426 427 group_startup.save() 428 429 context = { 430 'group': group, 431 'group_startup': group_startup, 432 'pagename': 'groups', 433 } 434 435 email_from_template( 436 tmpl='groups/create/startup-submitted-email.txt', 437 context=context, 438 subject='ASA Startup Application: %s' % (group.name, ), 439 to=[request.user.email] + create_group_officers(group, form.cleaned_data, save=False, ), 440 cc=['asa-groups@mit.edu'], 441 from_email='asa-groups@mit.edu', 442 ).send() 443 444 return render_to_response('groups/create/startup_thanks.html', context, context_instance=RequestContext(request), ) 445 else: 446 msg = "Validation failed. See below for details." 447 448 else: 449 form = GroupCreateStartupForm(initial=initial, instance=group, ) # An unbound form 450 451 context = { 452 'form': form, 453 'msg': msg, 454 'pagename': 'groups', 455 } 456 return render_to_response('groups/create/startup.html', context, context_instance=RequestContext(request), ) 457 458 class GroupRecognitionForm(forms.Form): 459 test = forms.BooleanField() 460 461 @permission_required('groups.recognize_group') 462 def recognize_normal_group(request, pk, ): 463 group_startup = get_object_or_404(groups.models.GroupStartup, pk=pk, ) 464 group = group_startup.group 465 466 context = { 467 'startup': group_startup, 468 'group': group, 469 'pagename' : 'groups', 470 } 471 472 if group.group_status.slug != 'applying': 473 return render_to_response('groups/create/err.not-applying.html', context, context_instance=RequestContext(request), ) 474 if group_startup.stage != groups.models.GROUP_STARTUP_STAGE_SUBMITTED: 475 return render_to_response('groups/create/err.not-applying.html', context, context_instance=RequestContext(request), ) 476 477 context['msg'] = "" 478 if request.method == 'POST': 479 if 'approve' in request.POST: 480 group_startup.stage = groups.models.GROUP_STARTUP_STAGE_APPROVED 481 group_startup.save() 482 483 group.group_status = groups.models.GroupStatus.objects.get(slug='active') 484 group.constitution_url = "" 485 group.recognition_date = datetime.date.today() 486 group.set_updater(request.user) 487 488 group.save() 489 officer_emails = create_group_officers(group, group_startup.__dict__, ) 490 welcome_mail, accounts_mail = create_group_get_emails(group, group_startup, officer_emails, ) 491 welcome_mail.send() 492 if accounts_mail: 493 accounts_mail.send() 494 context['msg'] = 'Group approved.' 495 context['msg_type'] = 'info' 496 elif 'reject' in request.POST: 497 group_startup.stage = groups.models.GROUP_STARTUP_STAGE_REJECTED 498 group_startup.save() 499 group.group_status = groups.models.GroupStatus.objects.get(slug='derecognized') 500 group.save() 501 note = groups.models.GroupNote( 502 author=request.user.username, 503 body="Group rejected during recognition process.", 504 acl_read_group=True, 505 acl_read_offices=True, 506 group=group, 507 ).save() 508 context['msg'] = 'Group rejected.' 509 context['msg_type'] = 'info' 510 else: 511 context['disp_form'] = True 512 else: 513 context['disp_form'] = True 514 515 return render_to_response('groups/create/startup_review.html', context, context_instance=RequestContext(request), ) 516 517 class GroupStartupListView(ListView): 518 model = groups.models.GroupStartup 519 template_object_name = 'startup' 520 521 def get_queryset(self, ): 522 qs = super(GroupStartupListView, self).get_queryset() 523 qs = qs.filter(stage=groups.models.GROUP_STARTUP_STAGE_SUBMITTED) 524 qs = qs.select_related('group') 525 return qs 526 527 def get_context_data(self, **kwargs): 528 context = super(GroupStartupListView, self).get_context_data(**kwargs) 529 context['pagename'] = 'groups' 530 return context 531 532 533 ################## 534 # Multiple group # 535 ################## 175 536 176 537 class GroupFilter(django_filters.FilterSet): … … 208 569 context['pagename'] = 'groups' 209 570 context['filter'] = self.filterset 210 return context211 212 213 class GroupDetailView(DetailView):214 context_object_name = "group"215 model = groups.models.Group216 def get_context_data(self, **kwargs):217 # Call the base implementation first to get a context218 context = super(GroupDetailView, self).get_context_data(**kwargs)219 group = context['group']220 221 # Indicate whether this person should be able to see "private" info222 context['viewpriv'] = self.request.user.has_perm('groups.view_group_private_info', group)223 context['adminpriv'] = self.request.user.has_perm('groups.admin_group', group)224 context['notes'] = group.viewable_notes(self.request.user)225 226 # People involved in the group227 just_roles = groups.models.OfficerRole.objects.all()228 if context['viewpriv'] or self.request.user.has_perm('groups.view_signatories'):229 # Can see the non-public stuff230 pass231 else:232 just_roles = just_roles.filter(publicly_visible=True)233 roles = []234 for role in just_roles:235 roles.append((role.display_name, role, group.officers(role=role), ))236 context['roles'] = roles237 238 return context239 240 241 class GroupHistoryView(ListView):242 context_object_name = "version_list"243 template_name = "groups/group_version.html"244 245 def get_queryset(self):246 history_entries = None247 if 'pk' in self.kwargs:248 group = get_object_or_404(groups.models.Group, pk=self.kwargs['pk'])249 history_entries = reversion.models.Version.objects.get_for_object(group)250 else:251 history_entries = reversion.models.Version.objects.all()252 group_content_type = ContentType.objects.get_for_model(groups.models.Group)253 history_entries = history_entries.filter(content_type=group_content_type)254 length = len(history_entries)255 if length > 150:256 history_entries = history_entries[length-100:]257 return history_entries258 259 def get_context_data(self, **kwargs):260 context = super(GroupHistoryView, self).get_context_data(**kwargs)261 if 'pk' in self.kwargs:262 group = get_object_or_404(groups.models.Group, pk=self.kwargs['pk'])263 context['title'] = "History for %s" % (group.name, )264 else:265 context['title'] = "Recent Changes"266 571 return context 267 572 … … 439 744 } 440 745 return render_to_response('groups/group_search.html', context, context_instance=RequestContext(request), ) 746 747 748 class GroupHistoryView(ListView): 749 context_object_name = "version_list" 750 template_name = "groups/group_version.html" 751 752 def get_queryset(self): 753 history_entries = None 754 if 'pk' in self.kwargs: 755 group = get_object_or_404(groups.models.Group, pk=self.kwargs['pk']) 756 history_entries = reversion.models.Version.objects.get_for_object(group) 757 else: 758 history_entries = reversion.models.Version.objects.all() 759 group_content_type = ContentType.objects.get_for_model(groups.models.Group) 760 history_entries = history_entries.filter(content_type=group_content_type) 761 length = len(history_entries) 762 if length > 150: 763 history_entries = history_entries[length-100:] 764 return history_entries 765 766 def get_context_data(self, **kwargs): 767 context = super(GroupHistoryView, self).get_context_data(**kwargs) 768 if 'pk' in self.kwargs: 769 group = get_object_or_404(groups.models.Group, pk=self.kwargs['pk']) 770 context['title'] = "History for %s" % (group.name, ) 771 else: 772 context['title'] = "Recent Changes" 773 return context 774 775 776 class AccountLookupForm(forms.Form): 777 account_number = forms.IntegerField() 778 username = forms.CharField(help_text="Athena username of person to check") 779 780 def account_lookup(request, ): 781 msg = None 782 msg_type = "" 783 account_number = None 784 username = None 785 group = None 786 office_holders = [] 787 788 visible_roles = groups.models.OfficerRole.objects.filter(publicly_visible=True) 789 790 initial = {} 791 792 if 'search' in request.GET: # If the form has been submitted... 793 # A form bound to the POST data 794 form = AccountLookupForm(request.GET) 795 796 if form.is_valid(): # All validation rules pass 797 account_number = form.cleaned_data['account_number'] 798 username = form.cleaned_data['username'] 799 account_q = Q(main_account_id=account_number) | Q(funding_account_id=account_number) 800 try: 801 group = groups.models.Group.objects.get(account_q) 802 office_holders = group.officers(person=username) 803 office_holders = office_holders.filter(role__in=visible_roles) 804 except groups.models.Group.DoesNotExist: 805 msg = "Group not found" 806 msg_type = "error" 807 808 else: 809 form = AccountLookupForm() 810 811 context = { 812 'username': username, 813 'account_number': account_number, 814 'group': group, 815 'office_holders': office_holders, 816 'form': form, 817 'msg': msg, 818 'msg_type': msg_type, 819 'visible_roles': visible_roles, 820 } 821 return render_to_response('groups/account_lookup.html', context, context_instance=RequestContext(request), ) -
asadb/media/style/style.css
rf0a4fc4 r754d5a4 236 236 text-align: center; 237 237 } 238 239 /********* 240 * FORMS * 241 *********/ 242 243 form table tr.optional th 244 { 245 font-weight: normal; 246 font-style: italic; 247 } -
asadb/mit/__init__.py
r9c1f0b2 r2b38cb9 33 33 username = user.username 34 34 user.password = "ScriptsSSLAuth" 35 con = ldap.open('ldap .mit.edu')35 con = ldap.open('ldap-too.mit.edu') 36 36 con.simple_bind_s("", "") 37 37 dn = "dc=mit,dc=edu" -
asadb/settings.py
r1de230f rea217bd 8 8 DEBUG = False 9 9 TEMPLATE_DEBUG = DEBUG 10 11 # Is this the main, production deployment? 12 # If not, we won't try to propagate things to other systems. 13 # (For example, no changing asa-official membership.) 14 PRODUCTION_DEPLOYMENT = False 10 15 11 16 ADMINS = ( … … 63 68 # List of callables that know how to import templates from various sources. 64 69 TEMPLATE_LOADERS = ( 65 'django.template.loaders.filesystem. load_template_source',70 'django.template.loaders.filesystem.Loader', 66 71 'django.template.loaders.app_directories.load_template_source', 67 72 # 'django.template.loaders.eggs.load_template_source', -
asadb/template/form_utils/fields_as_trs.html
r4bc3ab9 reabc6ee 10 10 {{ field.errors }} 11 11 {{ field }} 12 {% if field.help_text %}<p>{{ field.help_text }}</p>{% endif %} 12 13 </td> 13 14 </tr> -
asadb/template/groups/group_detail.html
rfbb362a r47998d1 7 7 {% if adminpriv %}<a href='{%url groups:group-manage-main group.pk %}'>[update]</a></p>{%endif%} 8 8 </h1> 9 10 <div class='messagebox errorbox'> 11 <p>Note: Fields marked [redacted temporarily] are being redacted for part of the beta, but are likely to be public later on. Please contact asa-db@mit.edu if you object to them becoming public.</p> 12 </div> 9 13 10 14 <table class='pretty-table'> … … 21 25 <tr><th>Website</th><td><a href="{{group.website_url}}">{{group.website_url}}</a></td></tr> 22 26 <tr><th>Meeting times</th><td>{{group.meeting_times}}</td></tr> 23 <tr><th>Officer email</th><td> {{group.officer_email}}</td></tr>27 <tr><th>Officer email</th><td>redacted-temporarily@mit.edu</td></tr> 24 28 {% if viewpriv %}<tr class='private-info'> 25 29 <th>Group email</th> … … 32 36 <th>{{name}}{%if not role.publicly_visible %}*{%endif%}</th> 33 37 <td><ul> 34 {% for person in people %}<li> {{person.person}}</li>{%endfor%}38 {% for person in people %}<li>[redacted temporarily]</li>{%endfor%} 35 39 </ul></td> 36 40 </tr> … … 44 48 <tr><th colspan='2'>Financial Information</th></tr> 45 49 <tr><th>Funding status</th><td>{{group.group_funding}}</td></tr> 46 <tr><th>Main Account</th><td> {{group.main_account_id}}</td></tr>47 <tr><th>Funding Account</th><td> {{group.funding_account_id}}</td></tr>50 <tr><th>Main Account</th><td>272[redacted temporarily]</td></tr> 51 <tr><th>Funding Account</th><td>272[redacted temporarily]</td></tr> 48 52 49 53 <tr><th colspan='2'>Additional Information</th></tr> -
asadb/template/index.html
rfbb362a r191ec87 14 14 </ul></li> 15 15 {%if perms.groups.view_signatories %}<li><a href='{% url groups:signatories %}'>View Signatories</a></li>{%endif%} 16 <li>Group recognition<ul> 17 <li><a href='http://web.mit.edu/asa/start/new-group-app.html'>New Group Application</a></li> 18 {%if perms.groups.add_group %}<li><a href='{% url groups:startup %}'>Startup form</a></li>{%endif%} 19 {%if perms.groups.add_group %}<li><a href='{% url groups:startup-list %}'>Review startup applications</a></li>{%endif%} 20 {%if perms.groups.recognize_nge %}<li><a href='{% url groups:recognize-nge %}'>Recognize Non-Group Entity</a></li>{%endif%} 21 </ul></li> 16 22 </ul> 17 23 -
asadb/util/db_form_utils.py
r9b911db rb63d6b2 26 26 27 27 def value_from_datadict(self, data, files, name, ): 28 for choice_value, choice_label in self.choices: 29 if choice_label == unicode(self.value): 30 return choice_value 28 31 return self.value 29 32 -
.gitignore
r3ffb210 r728cafa 8 8 asadb/media/page-previews/fysm/ 9 9 asadb/util/saved-data/ 10 asadb/util/static-data/ 10 11 asadb/util/warehouse-dump.csv -
asadb/util/warehouse-refresh.sh
r14e96b3 r5c77dea 15 15 echo 16 16 echo Changes in this commit: 17 git show 17 git show --stat 18 18 19 19 echo … … 30 30 echo 31 31 echo Changes in this commit: 32 git show 32 git show --stat 33 33 34 34 echo
Note: See TracChangeset
for help on using the changeset viewer.