diff --git a/admin_tools/views.py b/admin_tools/views.py index c589fb898..885730fcb 100644 --- a/admin_tools/views.py +++ b/admin_tools/views.py @@ -58,7 +58,7 @@ @login_required def admin_home_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin', 'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -106,7 +106,7 @@ def admin_home_view(request): @login_required def data_cleanup_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -125,7 +125,7 @@ def data_cleanup_organization_analysis_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -288,7 +288,7 @@ def data_cleanup_organization_list_analysis_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -536,7 +536,7 @@ def data_cleanup_organization_list_analysis_view(request): @login_required def data_cleanup_position_list_analysis_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -952,7 +952,7 @@ def add_organization_to_position_owner_local(voter_id, one_position): @login_required def data_cleanup_voter_hanging_data_process_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1083,7 +1083,7 @@ def data_cleanup_voter_hanging_data_process_view(request): @login_required def data_cleanup_voter_list_analysis_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1335,7 +1335,7 @@ def data_cleanup_voter_list_analysis_view(request): @login_required def data_voter_statistics_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1543,7 +1543,7 @@ def data_voter_statistics_view(request): @login_required def delete_test_data_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1560,7 +1560,7 @@ def delete_test_data_view(request): @login_required def import_sample_data_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1818,7 +1818,7 @@ def redirect_to_sign_in_page(request, authority_required={}): @login_required def statistics_summary_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1841,7 +1841,7 @@ def statistics_summary_view(request): @login_required def sync_data_with_master_servers_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/analytics/views_admin.py b/analytics/views_admin.py index 1cf0b74d6..3a0f4ca0a 100644 --- a/analytics/views_admin.py +++ b/analytics/views_admin.py @@ -6,32 +6,97 @@ augment_voter_analytics_action_entries_without_election_id, \ save_organization_daily_metrics, save_organization_election_metrics, \ save_sitewide_daily_metrics, save_sitewide_election_metrics, save_sitewide_voter_metrics -from .models import ACTION_WELCOME_VISIT, AnalyticsAction, AnalyticsManager, \ +from .models import ACTION_WELCOME_VISIT, AnalyticsAction, AnalyticsManager, display_action_constant_human_readable, \ OrganizationDailyMetrics, OrganizationElectionMetrics, \ SitewideDailyMetrics, SitewideElectionMetrics, SitewideVoterMetrics from admin_tools.views import redirect_to_sign_in_page from config.base import get_environment_variable -from django.http import HttpResponseRedirect +from datetime import date, datetime, timedelta +from django.http import HttpResponse, HttpResponseRedirect from django.urls import reverse from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.messages import get_messages from django.db.models import Q from django.shortcuts import render +from django.utils.timezone import now from election.models import Election from exception.models import print_to_log +import json from voter.models import voter_has_authority import wevote_functions.admin -from wevote_functions.functions import convert_date_as_integer_to_date, convert_to_int, positive_value_exists +from wevote_functions.functions import convert_date_as_integer_to_date, convert_date_to_date_as_integer, \ + convert_to_int, positive_value_exists from wevote_settings.models import WeVoteSetting, WeVoteSettingsManager + logger = wevote_functions.admin.get_logger(__name__) +ANALYTICS_ACTION_SYNC_URL = "https://api.wevoteusa.org/apis/v1/analyticsActionSyncOut/" # analyticsActionSyncOut WEB_APP_ROOT_URL = get_environment_variable("WEB_APP_ROOT_URL") +@login_required +def analytics_action_sync_out_view(request): # analyticsActionSyncOut + status = '' + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'analytics_admin'} + if not voter_has_authority(request, authority_required): + json_data = { + 'success': False, + 'status': 'ANALYTICS_ACTION_SYNC_OUT-NOT_ANALYTICS_ADMIN ' + } + return HttpResponse(json.dumps(json_data), content_type='application/json') + starting_date_as_integer = convert_to_int(request.GET.get('starting_date_as_integer', 0)) + ending_date_as_integer = convert_to_int(request.GET.get('ending_date_as_integer', 0)) + + try: + analytics_action_query = AnalyticsAction.objects.all().order_by('-id') + if positive_value_exists(starting_date_as_integer): + analytics_action_query = analytics_action_query.filter(date_as_integer__gte=starting_date_as_integer) + else: + three_months_ago = now() - timedelta(days=90) + generated_starting_date_as_integer = convert_date_to_date_as_integer(three_months_ago) + analytics_action_query = analytics_action_query.filter( + date_as_integer__gte=generated_starting_date_as_integer) + if positive_value_exists(ending_date_as_integer): + analytics_action_query = analytics_action_query.filter(date_as_integer__lte=ending_date_as_integer) + # else: + # # By default only return up to two days ago, so we are sure that the post-processing is done + # yesterday = now() - timedelta(days=1) + # generated_ending_date_as_integer = convert_date_to_date_as_integer(yesterday) + # analytics_action_query = analytics_action_query.filter( + # date_as_integer__lte=generated_ending_date_as_integer) + + analytics_action_query = analytics_action_query.extra( + select={'exact_time': "to_char(exact_time, 'YYYY-MM-DD HH24:MI:SS')"}) + analytics_action_list_dict = analytics_action_query.values( + 'id', 'action_constant', 'authentication_failed_twice', + 'ballot_item_we_vote_id', 'date_as_integer', + 'exact_time', 'first_visit_today', 'google_civic_election_id', + 'is_bot', 'is_desktop', 'is_mobile', 'is_signed_in', 'is_tablet', + 'organization_we_vote_id', 'state_code', 'user_agent', 'voter_we_vote_id') + if analytics_action_list_dict: + analytics_action_list_raw = list(analytics_action_list_dict) + analytics_action_list_json = [] + for one_dict in analytics_action_list_raw: + one_dict['action_constant_text'] = display_action_constant_human_readable(one_dict['action_constant']) + analytics_action_list_json.append(one_dict) + return HttpResponse(json.dumps(analytics_action_list_json), content_type='application/json') + except Exception as e: + status += 'QUERY_FAILURE: ' + str(e) + ' ' + + status += 'ANALYTICS_ACTION_LIST_EMPTY ' + json_data = { + 'success': False, + 'status': status, + } + return HttpResponse(json.dumps(json_data), content_type='application/json') + + @login_required def analytics_index_view(request): - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) voter_allowed_to_see_organization_analytics = True @@ -115,7 +180,8 @@ def analytics_index_view(request): @login_required def analytics_index_process_view(request): - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -140,7 +206,8 @@ def analytics_index_process_view(request): @login_required def organization_analytics_index_view(request): - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -174,6 +241,7 @@ def organization_analytics_index_view(request): messages_on_stage = get_messages(request) + voter_allowed_to_see_organization_analytics = False # To be implemented template_values = { 'messages_on_stage': messages_on_stage, 'organization_election_metrics_list': organization_election_metrics_list, @@ -192,7 +260,8 @@ def organization_daily_metrics_process_view(request): :param request: :return: """ - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -227,7 +296,8 @@ def analytics_action_list_view(request, voter_we_vote_id=False, organization_we_ :param organization_we_vote_id: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -322,7 +392,8 @@ def analytics_action_list_view(request, voter_we_vote_id=False, organization_we_ @login_required def augment_voter_analytics_process_view(request, voter_we_vote_id): - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -351,7 +422,8 @@ def organization_daily_metrics_view(request): :param request: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -387,7 +459,8 @@ def organization_election_metrics_process_view(request): :param request: :return: """ - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -425,7 +498,8 @@ def organization_election_metrics_view(request): :param request: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -470,7 +544,8 @@ def sitewide_daily_metrics_process_view(request): :param request: :return: """ - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -513,7 +588,8 @@ def sitewide_daily_metrics_view(request): :param request: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -564,7 +640,8 @@ def sitewide_election_metrics_process_view(request): :param request: :return: """ - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -592,7 +669,8 @@ def sitewide_election_metrics_view(request): :param request: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -629,7 +707,8 @@ def sitewide_voter_metrics_process_view(request): :param request: :return: """ - authority_required = {'political_data_manager'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -695,7 +774,8 @@ def sitewide_voter_metrics_view(request): :param request: :return: """ - authority_required = {'verified_volunteer'} # admin, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/apis_v1/documentation_source/analytics_action_sync_out_doc.py b/apis_v1/documentation_source/analytics_action_sync_out_doc.py new file mode 100644 index 000000000..f3335be56 --- /dev/null +++ b/apis_v1/documentation_source/analytics_action_sync_out_doc.py @@ -0,0 +1,83 @@ +# apis_v1/documentation_source/analytics_action_sync_out_doc.py +# Brought to you by We Vote. Be good. +# -*- coding: UTF-8 -*- + + +def analytics_action_sync_out_doc_template_values(url_root): + """ + Show documentation about analyticsActionSyncOut + """ + required_query_parameter_list = [ + { + 'name': 'api_key', + 'value': 'string (from post, cookie, or get (in that order))', # boolean, integer, long, string + 'description': 'The unique key provided to any organization using the WeVoteServer APIs', + }, + { + 'name': 'voter_device_id', + 'value': 'string', # boolean, integer, long, string + 'description': 'An 88 character unique identifier linked to a voter record on the server. ' + 'If not provided, a new voter_device_id (and voter entry) ' + 'will be generated, and the voter_device_id will be returned.', + }, + ] + optional_query_parameter_list = [ + { + 'name': 'starting_date_as_integer', + 'value': 'integer', # boolean, integer, long, string + 'description': 'The earliest date for the batch we are retrieving. Format: YYYYMMDD (ex/ 20200131) ' + '(Default is 3 months ago)', + }, + { + 'name': 'ending_date_as_integer', + 'value': 'integer', # boolean, integer, long, string + 'description': 'Retrieve data through this date. Format: YYYYMMDD (ex/ 20200228) (Default is right now.)' + }, + ] + + potential_status_codes_list = [ + ] + + try_now_link_variables_dict = { + } + + api_response = '[{\n' \ + ' "id": integer,\n' \ + ' "action_constant": string,\n' \ + ' "action_constant_text": string,\n' \ + ' "authentication_failed_twice": string,\n' \ + ' "ballot_item_we_vote_id": string,\n' \ + ' "date_as_integer": integer,\n' \ + ' "exact_time": string,\n' \ + ' "first_visit_today": boolean,\n' \ + ' "google_civic_election_id": string,\n' \ + ' "is_bot": boolean,\n' \ + ' "is_desktop": boolean,\n' \ + ' "is_mobile": boolean,\n' \ + ' "is_signed_in": boolean,\n' \ + ' "is_tablet": boolean,\n' \ + ' "organization_we_vote_id": string,\n' \ + ' "state_code": string,\n' \ + ' "user_agent": string,\n' \ + ' "voter_we_vote_id": string,\n' \ + '}]' + + template_values = { + 'api_name': 'analyticsActionSyncOut', + 'api_slug': 'analyticsActionSyncOut', + 'api_introduction': + "Allow people with Analytics Admin authority to retrieve raw Analytics Action information " + "for data analysis purposes. The definitions of the ACTION constants ('action_constant') are here: " + "https://github.com/wevote/WeVoteServer/blob/develop/analytics/models.py", + 'try_now_link': 'apis_v1:analyticsActionSyncOutView', + 'try_now_link_variables_dict': try_now_link_variables_dict, + 'url_root': url_root, + 'get_or_post': 'GET', + 'required_query_parameter_list': required_query_parameter_list, + 'optional_query_parameter_list': optional_query_parameter_list, + 'api_response': api_response, + 'api_response_notes': + "", + 'potential_status_codes_list': potential_status_codes_list, + } + return template_values diff --git a/apis_v1/documentation_source/voter_retrieve_doc.py b/apis_v1/documentation_source/voter_retrieve_doc.py index 5d9fbc53b..fa50175c4 100644 --- a/apis_v1/documentation_source/voter_retrieve_doc.py +++ b/apis_v1/documentation_source/voter_retrieve_doc.py @@ -59,6 +59,7 @@ def voter_retrieve_doc_template_values(url_root): ' "twitter_screen_name": string,\n' \ ' "is_signed_in": boolean,\n' \ ' "is_admin": boolean,\n' \ + ' "is_analytics_admin": boolean,\n' \ ' "is_partner_organization": boolean,\n' \ ' "is_political_data_manager": boolean,\n' \ ' "is_political_data_viewer": boolean,\n' \ diff --git a/apis_v1/urls.py b/apis_v1/urls.py index bf5d2c798..7c2703b0d 100644 --- a/apis_v1/urls.py +++ b/apis_v1/urls.py @@ -14,6 +14,7 @@ views_election, views_extension, views_facebook, views_friend, \ views_issues, views_measure, views_misc, views_organization, \ views_pledge_to_vote, views_position, views_task, views_share, views_twitter, views_voter, views_voter_guide +from analytics.views_admin import analytics_action_sync_out_view from ballot.views_admin import ballot_items_sync_out_view, ballot_returned_sync_out_view from candidate.views_admin import candidates_sync_out_view from issue.views_admin import issue_descriptions_retrieve_view, issues_followed_retrieve_view,\ @@ -32,6 +33,7 @@ # Actual API Calls url(r'^allBallotItemsRetrieve/', views_ballot.all_ballot_items_retrieve_view, name='allBallotItemsRetrieveView'), + url(r'^analyticsActionSyncOut/', analytics_action_sync_out_view, name='analyticsActionSyncOutView'), url(r'^ballotItemOptionsRetrieve/', views_ballot.ballot_item_options_retrieve_view, name='ballotItemOptionsRetrieveView'), url(r'^ballotItemRetrieve/', views_ballot.ballot_item_retrieve_view, name='ballotItemRetrieveView'), @@ -287,6 +289,8 @@ url(r'^docs/$', views_docs.apis_index_doc_view, name='apisIndex'), url(r'^docs/allBallotItemsRetrieve/$', views_docs.all_ballot_items_retrieve_doc_view, name='allBallotItemsRetrieveDocs'), + url(r'^docs/analyticsActionSyncOut/$', + views_docs.analytics_action_sync_out_doc_view, name='analyticsActionSyncOutDocs'), url(r'^docs/ballotItemOptionsRetrieve/$', views_docs.ballot_item_options_retrieve_doc_view, name='ballotItemOptionsRetrieveDocs'), url(r'^docs/ballotItemRetrieve/$', views_docs.ballot_item_retrieve_doc_view, name='ballotItemRetrieveDocs'), diff --git a/apis_v1/views/views_docs.py b/apis_v1/views/views_docs.py index 75305f3b6..afdeea684 100644 --- a/apis_v1/views/views_docs.py +++ b/apis_v1/views/views_docs.py @@ -2,8 +2,8 @@ # Brought to you by We Vote. Be good. # -*- coding: UTF-8 -*- -from apis_v1.documentation_source import all_ballot_items_retrieve_doc, ballot_item_options_retrieve_doc, \ - ballot_item_retrieve_doc, \ +from apis_v1.documentation_source import all_ballot_items_retrieve_doc, analytics_action_sync_out_doc, \ + ballot_item_options_retrieve_doc, ballot_item_retrieve_doc, \ ballot_items_sync_out_doc, ballot_returned_sync_out_doc, candidate_retrieve_doc, \ candidates_retrieve_doc, candidate_list_for_upcoming_elections_retrieve_doc, \ candidates_sync_out_doc, device_id_generate_doc, donation_with_stripe_doc, \ @@ -104,6 +104,16 @@ def all_ballot_items_retrieve_doc_view(request): return render(request, 'apis_v1/api_doc_page.html', template_values) +def analytics_action_sync_out_doc_view(request): + """ + Show documentation about analyticsActionSyncOut + """ + url_root = WE_VOTE_SERVER_ROOT_URL + template_values = analytics_action_sync_out_doc.analytics_action_sync_out_doc_template_values(url_root) + template_values['voter_api_device_id'] = get_voter_api_device_id(request) + return render(request, 'apis_v1/api_doc_page.html', template_values) + + def ballot_item_options_retrieve_doc_view(request): """ Show documentation about ballotItemOptionsRetrieve diff --git a/apis_v1/views/views_organization.py b/apis_v1/views/views_organization.py index 2eb879af7..33d2b9b14 100644 --- a/apis_v1/views/views_organization.py +++ b/apis_v1/views/views_organization.py @@ -276,7 +276,7 @@ def organization_photos_save_view(request): # organizationPhotosSave delete_chosen_social_share_master_image = \ positive_value_exists(request.POST.get('delete_chosen_social_share_master_image', False)) - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin', 'political_data_manager'} voter_has_staff_authority_required = False if voter_has_authority(request, authority_required): @@ -399,7 +399,7 @@ def organization_save_view(request): # organizationSave chosen_social_share_description = request.GET.get('chosen_social_share_description', False) chosen_subscription_plan = request.GET.get('chosen_subscription_plan', False) - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin', 'political_data_manager', 'verified_volunteer'} voter_has_staff_authority_required = False if voter_has_authority(request, authority_required): diff --git a/ballot/views_admin.py b/ballot/views_admin.py index 4d32fb0eb..89be8db65 100644 --- a/ballot/views_admin.py +++ b/ballot/views_admin.py @@ -8,25 +8,24 @@ from admin_tools.views import redirect_to_sign_in_page from candidate.models import CandidateCampaignListManager from config.base import get_environment_variable -from exception.models import handle_record_not_deleted_exception -from office.models import ContestOffice, ContestOfficeManager -from django.http import HttpResponseRedirect -from django.urls import reverse from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.messages import get_messages from django.db.models import Q -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render +from django.urls import reverse from election.models import Election, ElectionManager +from exception.models import handle_record_not_deleted_exception from geopy.geocoders import get_geocoder_for_service +import json from measure.models import ContestMeasure, ContestMeasureManager +from office.models import ContestOffice, ContestOfficeManager from polling_location.models import PollingLocation, PollingLocationManager import time from voter.models import voter_has_authority import wevote_functions.admin from wevote_functions.functions import convert_to_int, positive_value_exists -import json BALLOT_ITEMS_SYNC_URL = get_environment_variable("BALLOT_ITEMS_SYNC_URL") # ballotItemsSyncOut BALLOT_RETURNED_SYNC_URL = get_environment_variable("BALLOT_RETURNED_SYNC_URL") # ballotReturnedSyncOut @@ -206,7 +205,7 @@ def ballot_items_import_from_master_server_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -239,7 +238,7 @@ def ballot_items_import_from_master_server_view(request): @login_required def ballot_returned_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -834,7 +833,7 @@ def update_ballot_returned_with_latitude_and_longitude_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/candidate/views_admin.py b/candidate/views_admin.py index cda208273..0ba7e2f6b 100644 --- a/candidate/views_admin.py +++ b/candidate/views_admin.py @@ -152,7 +152,7 @@ def candidates_sync_out_view(request): # candidatesSyncOut @login_required def candidates_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -206,7 +206,7 @@ def candidates_import_from_sample_file_view(request): @login_required def candidate_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1950,7 +1950,7 @@ def remove_duplicate_candidate_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -2071,7 +2071,7 @@ def retrieve_candidate_photos_for_election_view(request, election_id): @login_required def candidate_summary_view(request, candidate_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -2268,7 +2268,7 @@ def candidate_delete_process_view(request): @login_required def compare_two_candidates_for_merge_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/donate/views_admin.py b/donate/views_admin.py index b8118c407..4744e33e0 100644 --- a/donate/views_admin.py +++ b/donate/views_admin.py @@ -18,7 +18,7 @@ @login_required def organization_subscription_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/elected_office/views_admin.py b/elected_office/views_admin.py index 1d174ea7b..326882793 100644 --- a/elected_office/views_admin.py +++ b/elected_office/views_admin.py @@ -32,7 +32,7 @@ @login_required def elected_office_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -228,7 +228,7 @@ def elected_office_edit_view(request, elected_office_id=0, elected_office_we_vot @login_required def elected_office_summary_view(request, elected_office_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/elected_official/views_admin.py b/elected_official/views_admin.py index 905491fbf..004f63654 100644 --- a/elected_official/views_admin.py +++ b/elected_official/views_admin.py @@ -34,7 +34,7 @@ @login_required def elected_official_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -452,7 +452,7 @@ def elected_official_edit_process_view(request): @login_required def elected_official_retrieve_photos_view(request, candidate_id): # TODO DALE Transition fully to elected_official - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/election/views_admin.py b/election/views_admin.py index 2fc1c328e..6577f8de1 100644 --- a/election/views_admin.py +++ b/election/views_admin.py @@ -82,7 +82,7 @@ def ballotpedia_election_delete_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -143,7 +143,7 @@ def election_all_ballots_retrieve_view(request, election_local_id=0): :param election_local_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -338,7 +338,7 @@ def election_one_ballot_retrieve_view(request, election_local_id=0): :param election_local_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -506,7 +506,7 @@ def election_one_ballot_retrieve_view(request, election_local_id=0): @login_required def election_edit_view(request, election_local_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -559,7 +559,7 @@ def election_delete_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -609,7 +609,7 @@ def election_edit_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -759,7 +759,7 @@ def election_edit_process_view(request): @login_required() def election_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -940,7 +940,7 @@ def election_list_view(request): @login_required() def nationwide_election_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -1165,7 +1165,7 @@ def election_remote_retrieve_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1181,7 +1181,7 @@ def election_remote_retrieve_view(request): @login_required() def election_summary_view(request, election_local_id=0, google_civic_election_id=''): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -1492,7 +1492,7 @@ def election_summary_view(request, election_local_id=0, google_civic_election_id @login_required def elections_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1522,7 +1522,7 @@ def elections_import_from_master_server_view(request): @login_required() def election_migration_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/electoral_district/views_admin.py b/electoral_district/views_admin.py index e1c1dbb5c..0769bb78c 100644 --- a/electoral_district/views_admin.py +++ b/electoral_district/views_admin.py @@ -106,7 +106,7 @@ def electoral_district_import_from_xml_view(request): @login_required def electoral_district_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/import_export_ballotpedia/views_admin.py b/import_export_ballotpedia/views_admin.py index 1b7c4e792..02ae18bb6 100644 --- a/import_export_ballotpedia/views_admin.py +++ b/import_export_ballotpedia/views_admin.py @@ -52,7 +52,7 @@ def import_ballot_items_for_location_view(request): status = "" success = True - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -145,7 +145,7 @@ def attach_ballotpedia_election_view(request, election_local_id=0): :param election_local_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -288,7 +288,7 @@ def refresh_ballotpedia_districts_for_polling_locations_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -411,7 +411,7 @@ def retrieve_ballotpedia_candidates_by_district_from_api_view(request): """ Reach out to Ballotpedia API to retrieve candidates. """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -483,7 +483,7 @@ def retrieve_ballotpedia_ballots_for_polling_locations_api_v4_view(request): """ status = "" - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -903,7 +903,7 @@ def refresh_ballotpedia_ballots_for_voters_api_v4_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1192,7 +1192,7 @@ def retrieve_ballotpedia_data_for_polling_locations_view(request, election_local :param election_local_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1478,7 +1478,7 @@ def retrieve_ballotpedia_data_for_polling_locations_view(request, election_local # """ # Reach out to Ballotpedia API to retrieve offices. # """ -# # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer +# # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer # authority_required = {'political_data_manager'} # if not voter_has_authority(request, authority_required): # return redirect_to_sign_in_page(request, authority_required) diff --git a/import_export_batches/views_admin.py b/import_export_batches/views_admin.py index ce72e2dd6..3eb2d9752 100755 --- a/import_export_batches/views_admin.py +++ b/import_export_batches/views_admin.py @@ -1343,7 +1343,7 @@ def batch_set_list_process_view(request): @login_required def batch_process_system_toggle_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1370,7 +1370,7 @@ def batch_process_system_toggle_view(request): @login_required def batch_process_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1592,7 +1592,7 @@ def batch_process_next_steps_view(request): @login_required def batch_process_pause_toggle_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1625,7 +1625,7 @@ def batch_process_pause_toggle_view(request): @login_required def batch_process_log_entry_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/import_export_google_civic/views_admin.py b/import_export_google_civic/views_admin.py index ae5766047..756d4e65d 100644 --- a/import_export_google_civic/views_admin.py +++ b/import_export_google_civic/views_admin.py @@ -36,7 +36,7 @@ def retrieve_representatives_for_many_addresses_view(request): # THIS FUNCTION :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -218,7 +218,7 @@ def retrieve_representatives_for_one_address_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/import_export_twitter/views_admin.py b/import_export_twitter/views_admin.py index 99bd20361..7c32a95da 100644 --- a/import_export_twitter/views_admin.py +++ b/import_export_twitter/views_admin.py @@ -32,7 +32,7 @@ @login_required def delete_possible_twitter_handles_view(request, candidate_campaign_we_vote_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -55,7 +55,7 @@ def delete_possible_twitter_handles_view(request, candidate_campaign_we_vote_id) @login_required def retrieve_possible_twitter_handles_view(request, candidate_campaign_we_vote_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -79,7 +79,7 @@ def retrieve_possible_twitter_handles_view(request, candidate_campaign_we_vote_i @login_required def bulk_retrieve_possible_twitter_handles_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -154,7 +154,7 @@ def bulk_retrieve_possible_twitter_handles_view(request): @login_required def delete_images_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -210,7 +210,7 @@ def delete_images_view(request): @login_required def refresh_twitter_candidate_details_view(request, candidate_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -231,7 +231,7 @@ def refresh_twitter_candidate_details_view(request, candidate_id): @login_required def refresh_twitter_organization_details_view(request, organization_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -256,7 +256,7 @@ def refresh_twitter_organization_details_view(request, organization_id): @login_required def refresh_twitter_politician_details_view(request, politician_id): # TODO DALE Get this working for politicians - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -278,7 +278,7 @@ def refresh_twitter_politician_details_view(request, politician_id): # TODO DAL @login_required def refresh_twitter_elected_official_details_view(request, elected_official_id): # TODO DALE Get this working for politicians - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -299,7 +299,7 @@ def refresh_twitter_elected_official_details_view(request, elected_official_id): @login_required def scrape_website_for_social_media_view(request, organization_id, force_retrieve=False): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -361,7 +361,7 @@ def scrape_website_for_social_media_view(request, organization_id, force_retriev @login_required def refresh_twitter_data_for_organizations_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -396,7 +396,7 @@ def refresh_twitter_data_for_organizations_view(request): @login_required def scrape_social_media_from_all_organizations_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -421,7 +421,7 @@ def scrape_social_media_from_all_organizations_view(request): @login_required def scrape_social_media_for_candidates_in_one_election_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -445,7 +445,7 @@ def scrape_social_media_for_candidates_in_one_election_view(request): @login_required def refresh_twitter_candidate_details_for_election_view(request, election_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -474,7 +474,7 @@ def refresh_twitter_candidate_details_for_election_view(request, election_id): @login_required def transfer_candidate_twitter_handles_from_google_civic_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/issue/views_admin.py b/issue/views_admin.py index e3c92e7d9..78b79f24f 100644 --- a/issue/views_admin.py +++ b/issue/views_admin.py @@ -124,7 +124,7 @@ def retrieve_issues_to_follow_view(request): # retrieveIssuesToFollow @login_required def issues_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -154,7 +154,7 @@ def issues_import_from_master_server_view(request): @login_required def issue_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -330,7 +330,7 @@ def issue_list_view(request): @login_required def issue_new_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -369,7 +369,7 @@ def issue_new_view(request): @login_required def issue_edit_view(request, issue_we_vote_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -447,7 +447,7 @@ def issue_edit_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -594,7 +594,7 @@ def issue_edit_process_view(request): @login_required def issue_summary_view(request, issue_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -627,7 +627,7 @@ def issue_summary_view(request, issue_id): @login_required def issue_delete_images_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -668,7 +668,7 @@ def issue_delete_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -727,7 +727,7 @@ def issue_delete_process_view(request): @login_required def organization_link_to_issue_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/measure/views_admin.py b/measure/views_admin.py index 98261032b..8f4c761f3 100644 --- a/measure/views_admin.py +++ b/measure/views_admin.py @@ -38,7 +38,7 @@ @login_required def compare_two_measures_for_merge_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -81,7 +81,7 @@ def compare_two_measures_for_merge_view(request): @login_required def find_and_merge_duplicate_measures_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -208,7 +208,7 @@ def measures_sync_out_view(request): # measuresSyncOut @login_required def measures_import_from_master_server_view(request): # GET '/m/import/?google_civic_election_id=nnn&state_code=xx' - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -416,7 +416,7 @@ def add_contest_measure_title_to_next_spot(contest_measure_to_update, google_civ @login_required def measure_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -752,7 +752,7 @@ def measure_edit_process_view(request): @login_required def measure_summary_view(request, measure_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/office/views_admin.py b/office/views_admin.py index dadcec04d..64b2b1794 100644 --- a/office/views_admin.py +++ b/office/views_admin.py @@ -39,7 +39,7 @@ @login_required def compare_two_offices_for_merge_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -150,7 +150,7 @@ def offices_visiting_sync_out_view(request): # officesVisitingSyncOut @login_required def offices_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} status = "" if not voter_has_authority(request, authority_required): @@ -196,7 +196,7 @@ def offices_import_from_master_server_view(request): @login_required def office_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -365,7 +365,7 @@ def office_list_view(request): @login_required def office_list_process_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'verified_volunteer', 'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -643,7 +643,7 @@ def office_edit_process_view(request): @login_required def office_summary_view(request, office_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -797,7 +797,7 @@ def office_summary_view(request, office_id): @login_required def delete_office_visiting_process_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -819,7 +819,7 @@ def delete_office_visiting_process_view(request): @login_required def office_delete_process_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -869,7 +869,7 @@ def office_delete_process_view(request): @login_required def find_duplicate_office_view(request, office_id=0): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -932,7 +932,7 @@ def find_duplicate_office_view(request, office_id=0): @login_required def find_and_merge_duplicate_offices_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/organization/views_admin.py b/organization/views_admin.py index f088b1092..ec30f837a 100644 --- a/organization/views_admin.py +++ b/organization/views_admin.py @@ -151,7 +151,7 @@ def organizations_sync_out_view(request): # organizationsSyncOut @login_required def organizations_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -184,7 +184,7 @@ def organizations_import_from_master_server_view(request): @login_required def organization_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -371,7 +371,7 @@ def organization_list_view(request): @login_required def organization_new_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -400,7 +400,7 @@ def organization_new_view(request): @login_required def organization_edit_view(request, organization_id=0, organization_we_vote_id=""): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -474,7 +474,7 @@ def organization_edit_view(request, organization_id=0, organization_we_vote_id=" @login_required def organization_edit_account_view(request, organization_id=0, organization_we_vote_id=""): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -618,7 +618,7 @@ def organization_edit_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -886,7 +886,7 @@ def organization_edit_account_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1001,7 +1001,7 @@ def organization_edit_account_process_view(request): @login_required def organization_position_list_view(request, organization_id=0, organization_we_vote_id="", incorrect_integer=0): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'political_data_manager', 'political_data_viewer', 'verified_volunteer'} if not voter_has_authority(request, authority_required): @@ -1183,7 +1183,7 @@ def organization_position_list_view(request, organization_id=0, organization_we_ @login_required def organization_position_new_view(request, organization_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} authority_results = retrieve_voter_authority(request) if not voter_has_authority(request, authority_required, authority_results): @@ -1335,7 +1335,7 @@ def organization_delete_existing_position_process_form_view(request, organizatio :param position_we_vote_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin', 'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1380,7 +1380,7 @@ def organization_position_edit_view(request, organization_id=0, organization_we_ :param position_we_vote_id: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1467,7 +1467,7 @@ def organization_position_edit_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1766,7 +1766,7 @@ def reserved_domain_edit_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1815,7 +1815,7 @@ def reserved_domain_edit_process_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -1958,7 +1958,7 @@ def reserved_domain_edit_process_view(request): @login_required def reserved_domain_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'political_data_manager'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/politician/views_admin.py b/politician/views_admin.py index f210af0b4..39237b75d 100644 --- a/politician/views_admin.py +++ b/politician/views_admin.py @@ -40,7 +40,7 @@ @login_required def politicians_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -73,7 +73,7 @@ def politicians_import_from_master_server_view(request): @login_required def politician_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/polling_location/views_admin.py b/polling_location/views_admin.py index 594f87237..bd7bd635f 100644 --- a/polling_location/views_admin.py +++ b/polling_location/views_admin.py @@ -132,7 +132,7 @@ def polling_locations_import_from_master_server_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -425,7 +425,7 @@ def polling_location_visualize_view(request, polling_location_local_id=0, pollin @login_required def polling_location_list_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -602,7 +602,7 @@ def polling_locations_add_latitude_and_longitude_view(request): @login_required def polling_location_statistics_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -654,7 +654,7 @@ def polling_location_statistics_view(request): @login_required def polling_location_summary_view(request, polling_location_local_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/position/views_admin.py b/position/views_admin.py index 5e5832771..bbff89385 100644 --- a/position/views_admin.py +++ b/position/views_admin.py @@ -98,7 +98,7 @@ def positions_sync_out_view(request): # positionsSyncOut @login_required def positions_import_from_master_server_view(request): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'admin'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -234,7 +234,7 @@ def position_list_view(request): :param request: :return: """ - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) @@ -610,7 +610,7 @@ def position_edit_process_view(request): # TODO DALE I don't think this is in u @login_required def position_summary_view(request, position_we_vote_id): - # admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer + # admin, analytics_admin, partner_organization, political_data_manager, political_data_viewer, verified_volunteer authority_required = {'partner_organization', 'verified_volunteer'} if not voter_has_authority(request, authority_required): return redirect_to_sign_in_page(request, authority_required) diff --git a/templates/apis_v1/apis_index.html b/templates/apis_v1/apis_index.html index d722b7fd0..80afdbc4a 100644 --- a/templates/apis_v1/apis_index.html +++ b/templates/apis_v1/apis_index.html @@ -910,6 +910,16 @@
+ Remove Analytics Admin Rights
+ {% else %} ++ Grant Analytics Admin Rights
+ {% endif %} + {% if voter.is_partner_organization %}Remove Partner Organization Rights
diff --git a/templates/voter/voter_list.html b/templates/voter/voter_list.html index 79c3d423b..a728f71b6 100644 --- a/templates/voter/voter_list.html +++ b/templates/voter/voter_list.html @@ -31,6 +31,12 @@