def account_settings(request):
    """Render the current user's account settings page.

    Args:
        request (HttpRequest)

    Returns:
        HttpResponse: 200 if the page was sent successfully
        HttpResponse: 302 if not logged in (redirect to login page)
        HttpResponse: 405 if using an unsupported HTTP method

    Example usage:

        GET /account/settings

    """
    if should_redirect_to_account_microfrontend():
        url = settings.ACCOUNT_MICROFRONTEND_URL

        duplicate_provider = pipeline.get_duplicate_provider(messages.get_messages(request))
        if duplicate_provider:
            url = '{url}?{params}'.format(
                url=url,
                params=urllib.parse.urlencode({
                    'duplicate_provider': duplicate_provider,
                }),
            )

        return redirect(url)

    context = account_settings_context(request)
    return render_to_response('student_account/account_settings.html', context)
Beispiel #2
0
def account_settings(request):
    """Render the current user's account settings page.

    Args:
        request (HttpRequest)

    Returns:
        HttpResponse: 200 if the page was sent successfully
        HttpResponse: 302 if not logged in (redirect to login page)
        HttpResponse: 405 if using an unsupported HTTP method

    Example usage:

        GET /account/settings

    """
    if should_redirect_to_account_microfrontend():
        url = settings.ACCOUNT_MICROFRONTEND_URL

        duplicate_provider = pipeline.get_duplicate_provider(
            messages.get_messages(request))
        if duplicate_provider:
            url = '{url}?{params}'.format(
                url=url,
                params=six.moves.urllib.parse.urlencode({
                    'duplicate_provider':
                    duplicate_provider,
                }),
            )

        return redirect(url)

    #Added by Mahendra
    if request.is_ajax():
        user_id = request.user.id
        if request.method == 'GET':
            if 'mobile_number' in request.GET:
                phone = request.GET.get('mobile_number')
                try:
                    uphone = extrafields.objects.get(phone=phone)
                    if uphone.user_id != user_id:
                        msg = {}
                        msg['msg'] = "Mobile number is associated with different account."
                        msg['status'] = 400
                except ObjectDoesNotExist:
                    gmember = extrafields.objects.filter(
                        user_id=user_id).update(phone=phone)
                    msg = {}
                    msg['msg'] = 'Mobile number updated succesfully'
                    msg['status'] = 200
                return JsonResponse(msg, status=200, safe=False)
            elif 'extra_data' in request.GET:
                extra_data = request.GET.get('extra_data')
                speczid = request.GET.get('specz')
                if extra_data != '' and speczid != 0:
                    gmember = extrafields.objects.filter(
                        user_id=user_id).update(user_extra_data=extra_data,
                                                specialization_id=speczid)
                    if gmember:
                        msg = {}
                        msg['msg'] = 'IDAVL updated succesfully'
                        msg['status'] = 200
                    else:
                        msg = {}
                        msg['msg'] = 'IDAVL not updated succesfully'
                        msg['status'] = 400
                else:
                    msg = {}
                    msg['msg'] = 'Please enter data'
                    msg['status'] = 400
                return JsonResponse(msg, status=200, safe=False)
            else:
                vfields = request.GET

                for key in vfields:
                    dict1 = {}
                    vfield = key
                    columname = vfield
                    fieldvalue = vfields[key]
                    #log.info('column->data %s,%s',columname,fieldvalue)
                    gmember = extrafields.objects.filter(
                        user_id=user_id).update(**{columname: fieldvalue})
                # Below code to send pincode and reg_num data to docvidya
                if 'rpincode' or 'reg_num' in request.GET:
                    import json
                    import requests
                    gmember = extrafields.objects.get(user_id=user_id)
                    data = request.GET.dict()
                    data_final = {}
                    data_final["emailAddress"] = str(request.user.email)
                    data_final["pincode"] = str(gmember.rpincode)
                    data_final["reg_num"] = str(gmember.reg_num)
                    #log.info(" data_final%s",data_final)
                    data_final = json.dumps(data_final)
                    #log.info(" data_final%s",data_final)
                    response = requests.post(
                        "https://drlprdoic-bmjxfxmxbrbt-bo.integration.ocp.oraclecloud.com:443/ic/api/integration/v1/flows/rest/DOCV_UPDATE_USER_DOCMODE/1.0/DocVUpdate",
                        data_final,
                        headers={
                            'Authorization':
                            'Basic YmhhdW1pay5zaGFoQGlubm92YWN4LmNvbTpJbm5vdmFjeEAxMjM=',
                            'Content-Type': 'application/json'
                        })
                    #log.info("docvidya responseee %s",response.__dict__)
                msg = ' Updated succesfully'
                return HttpResponse(msg)

    context = account_settings_context(request)
    return render_to_response('student_account/account_settings.html', context)
Beispiel #3
0
def account_settings_context(request):
    """ Context for the account settings page.

    Args:
        request: The request object.

    Returns:
        dict

    """
    user = request.user

    year_of_birth_options = [(six.text_type(year), six.text_type(year))
                             for year in UserProfile.VALID_YEARS]
    try:
        user_orders = get_user_orders(user)
    except:  # pylint: disable=bare-except
        log.exception('Error fetching order history from Otto.')
        # Return empty order list as account settings page expect a list and
        # it will be broken if exception raised
        user_orders = []

    beta_language = {}
    dark_lang_config = DarkLangConfig.current()
    if dark_lang_config.enable_beta_languages:
        user_preferences = get_user_preferences(user)
        pref_language = user_preferences.get('pref-lang')
        if pref_language in dark_lang_config.beta_languages_list:
            beta_language['code'] = pref_language
            beta_language['name'] = settings.LANGUAGE_DICT.get(pref_language)

    context = {
        'auth': {},
        'duplicate_provider':
        None,
        'nav_hidden':
        True,
        'fields': {
            'country': {
                'options': list(countries),
            },
            'gender': {
                'options': [(choice[0], _(choice[1]))
                            for choice in UserProfile.GENDER_CHOICES],
            },
            'language': {
                'options': released_languages(),
            },
            'level_of_education': {
                'options':
                [(choice[0], _(choice[1]))
                 for choice in UserProfile.LEVEL_OF_EDUCATION_CHOICES],
            },
            'password': {
                'url': reverse('password_reset'),
            },
            'year_of_birth': {
                'options': year_of_birth_options,
            },
            'preferred_language': {
                'options': all_languages(),
            },
            'time_zone': {
                'options': TIME_ZONE_CHOICES,
            }
        },
        'platform_name':
        configuration_helpers.get_value('PLATFORM_NAME',
                                        settings.PLATFORM_NAME),
        'password_reset_support_link':
        configuration_helpers.get_value('PASSWORD_RESET_SUPPORT_LINK',
                                        settings.PASSWORD_RESET_SUPPORT_LINK)
        or settings.SUPPORT_SITE_LINK,
        'user_accounts_api_url':
        reverse("accounts_api", kwargs={'username': user.username}),
        'user_preferences_api_url':
        reverse('preferences_api', kwargs={'username': user.username}),
        'disable_courseware_js':
        True,
        'show_program_listing':
        ProgramsApiConfig.is_enabled(),
        'show_dashboard_tabs':
        True,
        'order_history':
        user_orders,
        'disable_order_history_tab':
        should_redirect_to_order_history_microfrontend(),
        'enable_account_deletion':
        configuration_helpers.get_value(
            'ENABLE_ACCOUNT_DELETION',
            settings.FEATURES.get('ENABLE_ACCOUNT_DELETION', False)),
        'extended_profile_fields':
        _get_extended_profile_fields(),
        'beta_language':
        beta_language,
    }

    enterprise_customer = enterprise_customer_for_request(request)
    update_account_settings_context_for_enterprise(context,
                                                   enterprise_customer, user)

    if third_party_auth.is_enabled():
        # If the account on the third party provider is already connected with another edX account,
        # we display a message to the user.
        context['duplicate_provider'] = pipeline.get_duplicate_provider(
            messages.get_messages(request))

        auth_states = pipeline.get_provider_user_states(user)

        context['auth']['providers'] = [
            {
                'id':
                state.provider.provider_id,
                'name':
                state.provider.name,  # The name of the provider e.g. Facebook
                'connected':
                state.
                has_account,  # Whether the user's edX account is connected with the provider.
                # If the user is not connected, they should be directed to this page to authenticate
                # with the particular provider, as long as the provider supports initiating a login.
                'connect_url':
                pipeline.get_login_url(
                    state.provider.provider_id,
                    pipeline.AUTH_ENTRY_ACCOUNT_SETTINGS,
                    # The url the user should be directed to after the auth process has completed.
                    redirect_url=reverse('account_settings'),
                ),
                'accepts_logins':
                state.provider.accepts_logins,
                # If the user is connected, sending a POST request to this url removes the connection
                # information for this provider from their edX account.
                'disconnect_url':
                pipeline.get_disconnect_url(state.provider.provider_id,
                                            state.association_id),
                # We only want to include providers if they are either currently available to be logged
                # in with, or if the user is already authenticated with them.
            } for state in auth_states
            if state.provider.display_for_login or state.has_account
        ]

    return context