gocodebox/lifterlms

View on GitHub
includes/admin/settings/class.llms.settings.accounts.php

Summary

Maintainability
D
1 day
Test Coverage
A
100%
<?php
/**
 * Admin Settings Page, Accounts Tab
 *
 * @package LifterLMS/Admin/Settings/Classes
 *
 * @since 1.0.0
 * @version 7.5.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Admin Settings Page, Accounts Tab class
 *
 * @since 1.0.0
 * @since 3.30.3 Fixed spelling errors.
 * @since 3.37.3 Renamed setting field IDs to be unique.
 *               Removed redundant functions defined in the `LLMS_Settings_Page` class.
 *               Removed constructor and added `get_label()` method to be compatible with changes in `LLMS_Settings_Page`.
 * @since 3.37.4 Revert $id to "account".
 */
class LLMS_Settings_Accounts extends LLMS_Settings_Page {

    /**
     * Settings identifier
     *
     * @var string
     */
    public $id = 'account';

    /**
     * Should permalinks be flushed on save?
     *
     * @var boolean
     */
    protected $flush = true;

    /**
     * Get settings array
     *
     * @since 1.0.0
     * @since 3.30.3 Fixed spelling errors.
     * @since 3.37.3 Renamed duplicate field id for section close (`user_info_field_options` to `user_info_field_options_end`)
     * @since 5.0.0 Removed field display settings.
     *              Reorganized open registration setting.
     *              Renamed "User Information Options" to "User Privacy Options".
     * @since 5.6.0 Added options to disable concurrent logins.
     * @since 7.5.0 Added settings for favorites endpoint.
     *
     * @return array
     */
    public function get_settings() {
        $account_settings = array(
            array(
                'class' => 'top',
                'id'    => 'course_account_options',
                'type'  => 'sectionstart',
            ),
            array(
                'id'    => 'account_page_options_start',
                'title' => __( 'Student Dashboard', 'lifterlms' ),
                'type'  => 'title',
            ),
            array(
                'title'             => __( 'Dashboard Page', 'lifterlms' ),
                'desc'              => __( 'Page where students can view and manage their current enrollments, earned certificates and achievements, account information, and purchase history.', 'lifterlms' ),
                'id'                => 'lifterlms_myaccount_page_id',
                'default'           => '',
                'desc_tip'          => true,
                'class'             => 'llms-select2-post',
                'type'              => 'select',
                'custom_attributes' => array(
                    'data-post-type' => 'page',
                ),
                'options'           => llms_make_select2_post_array( get_option( 'lifterlms_myaccount_page_id', '' ) ),
            ),
            array(
                'title'   => __( 'Courses Sorting', 'lifterlms' ),
                'default' => 'order,ASC',
                'desc'    => __( 'Determines the order of the courses in-progress listed on the student dashboard.', 'lifterlms' ),
                'id'      => 'lifterlms_myaccount_courses_in_progress_sorting',
                'type'    => 'select',
                'options' => array(
                    'title,ASC'  => __( 'Course Title (A to Z)', 'lifterlms' ),
                    'title,DESC' => __( 'Course Title (Z to A)', 'lifterlms' ),
                    'date,DESC'  => __( 'Enrollment Date (Most Recent to Least Recent)', 'lifterlms' ),
                    'order,ASC'  => __( 'Order (Low to High)', 'lifterlms' ),
                    'order,DESC' => __( 'Order (High to Low)', 'lifterlms' ),
                ),
            ),
            array(
                'default' => 'no',
                'desc'    => sprintf(
                    // Translators: %1$s = opening anchor tag; %2$s = closing anchor tag.
                    __( 'Enable new user registration on the Student Dashboard. %1$sLearn More%2$s.', 'lifterlms' ),
                    '<a href="https://lifterlms.com/docs/open-registration/" target="_blank">',
                    '</a>'
                ),
                'id'      => 'lifterlms_enable_myaccount_registration',
                'title'   => __( 'Open Registration', 'lifterlms' ),
                'type'    => 'checkbox',
            ),
            array(
                'default'           => 'no',
                'desc'              => __( 'Only allow the most recent login for each user account.', 'lifterlms' ),
                'id'                => 'lifterlms_prevent_concurrent_logins',
                'title'             => __( 'Prevent concurrent logins', 'lifterlms' ),
                'type'              => 'checkbox',
                'custom_attributes' => array(
                    'class'         => 'llms-conditional-controller',
                    'data-controls' => '#lifterlms_prevent_concurrent_logins_roles',
                ),
            ),
            array(
                'class'             => 'llms-select2',
                'default'           => array( 'student' ),
                'desc'              => __( 'Prevent concurrent logins for users with the selected user roles.', 'lifterlms' ),
                'id'                => 'lifterlms_prevent_concurrent_logins_roles',
                'options'           => LLMS_Roles::get_all_role_names(),
                'title'             => '',
                'type'              => 'multiselect',
                'custom_attributes' => array(
                    'data-placeholder' => __( 'Select user roles', 'lifterlms' ),
                ),
            ),
            array(
                'id'   => 'course_account_options_end',
                'type' => 'sectionend',
            ),
            array(
                'class' => 'top',
                'id'    => 'course_account_endpoint_options_start',
                'type'  => 'sectionstart',
            ),
            array(
                'id'    => 'account_page_endpoint_options_title',
                'title' => __( 'Student Dashboard Endpoints', 'lifterlms' ),
                'desc'  => __( 'Each endpoint allows students to view more information or manage parts of their account. Each endpoint should be unique, URL-safe, and can be left blank to disable the endpoint completely.', 'lifterlms' ),
                'type'  => 'title',
            ),
            array(
                'title'    => __( 'View Grades', 'lifterlms' ),
                'desc'     => __( 'Student grade and progress reporting', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_grades_endpoint',
                'type'     => 'text',
                'default'  => 'my-grades',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'View Courses', 'lifterlms' ),
                'desc'     => __( 'List of all the student\'s courses', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_courses_endpoint',
                'type'     => 'text',
                'default'  => 'my-courses',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'View Memberships', 'lifterlms' ),
                'desc'     => __( 'List of all the student\'s memberships', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_memberships_endpoint',
                'type'     => 'text',
                'default'  => 'my-memberships',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'View Achievements', 'lifterlms' ),
                'desc'     => __( 'List of all the student\'s achievements', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_achievements_endpoint',
                'type'     => 'text',
                'default'  => 'my-achievements',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'View Certificates', 'lifterlms' ),
                'desc'     => __( 'List of all the student\'s certificates', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_certificates_endpoint',
                'type'     => 'text',
                'default'  => 'my-certificates',
                'sanitize' => 'slug',
            ),

            array(
                'title'    => __( 'Notifications', 'lifterlms' ),
                'desc'     => __( 'View Notifications and adjust notification settings', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_notifications_endpoint',
                'type'     => 'text',
                'default'  => 'notifications',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'Edit Account', 'lifterlms' ),
                'desc'     => __( 'Edit Account page', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_edit_account_endpoint',
                'type'     => 'text',
                'default'  => 'edit-account',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'Lost Password', 'lifterlms' ),
                'desc'     => __( 'Lost Password page', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_lost_password_endpoint',
                'type'     => 'text',
                'default'  => 'lost-password',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'Redeem Vouchers', 'lifterlms' ),
                'desc'     => __( 'Redeem vouchers page', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_redeem_vouchers_endpoint',
                'type'     => 'text',
                'default'  => 'redeem-voucher',
                'sanitize' => 'slug',
            ),
            array(
                'title'    => __( 'Orders History', 'lifterlms' ),
                'desc'     => __( 'Students can review order history on this page', 'lifterlms' ),
                'id'       => 'lifterlms_myaccount_orders_endpoint',
                'type'     => 'text',
                'default'  => 'orders',
                'sanitize' => 'slug',
            ),
            array(
                'id'   => 'course_account_endpoint_options_end',
                'type' => 'sectionend',
            ),

            // Start user info fields options.
            array(
                'id'   => 'user_info_field_options',
                'type' => 'sectionstart',
            ),
            array(
                'title' => __( 'User Information & Privacy Options', 'lifterlms' ),
                'type'  => 'title',
                'id'    => 'user_info_field_options_title',
            ),

            array(
                'title' => __( 'User Information Field Settings', 'lifterlms' ),
                'type'  => 'subtitle',
                'desc'  => __( 'Since version 5.0, all user information fields are customized using the form editor.', 'lifterlms' ),
            ),
            array(
                'type'  => 'custom-html',
                'value' => '<p><a class="button-primary" href="' . admin_url( 'edit.php?post_type=llms_form' ) . '">' . __( 'Edit Forms', 'lifterlms' ) . '</a></p>',
            ),

            array(
                'title' => __( 'Terms and Conditions', 'lifterlms' ),
                'type'  => 'subtitle',
            ),
            array(
                'autoload'          => false,
                'default'           => 'no',
                'id'                => 'lifterlms_registration_require_agree_to_terms',
                'desc'              => __( 'When enabled users must agree to your site\'s Terms and Conditions to register for an account.', 'lifterlms' ),
                'title'             => __( 'Enable / Disable', 'lifterlms' ),
                'type'              => 'checkbox',
                'custom_attributes' => array(
                    'class'         => 'llms-conditional-controller',
                    'data-controls' => '#lifterlms_terms_page_id,#llms_terms_notice',
                ),
            ),
            array(
                'autoload'          => false,
                'desc'              => __( 'Select a page where your site\'s Terms and Conditions are described.', 'lifterlms' ),
                'id'                => 'lifterlms_terms_page_id',
                'default'           => '',
                'desc_tip'          => true,
                'class'             => 'llms-select2-post',
                'title'             => __( 'Terms and Conditions Page', 'lifterlms' ),
                'type'              => 'select',
                'custom_attributes' => array(
                    'data-post-type'   => 'page',
                    'data-placeholder' => __( 'Select a page', 'lifterlms' ),
                ),
                'options'           => llms_make_select2_post_array( get_option( 'lifterlms_terms_page_id', '' ) ),
            ),
            array(
                'autoload' => false,
                'default'  => llms_get_terms_notice(),
                'id'       => 'llms_terms_notice',
                'desc'     => __( 'Customize the text used to display the Terms and Conditions checkbox that students must accept.', 'lifterlms' ),
                'title'    => __( 'Terms and Conditions Notice', 'lifterlms' ),
                'type'     => 'textarea',
                'value'    => llms_get_terms_notice(),
            ),
            array(
                'title' => __( 'Privacy Policy', 'lifterlms' ),
                'type'  => 'subtitle',
            ),
            array(
                'autoload'          => false,
                'desc'              => sprintf(
                    __( 'Select a page where your site\'s Privacy Policy is described. See %1$sWordPress Privacy Settings%2$s for more information', 'lifterlms' ),
                    '<a href="' . esc_url( admin_url( 'privacy.php' ) ) . '">',
                    '</a>'
                ),
                'id'                => 'wp_page_for_privacy_policy',
                'class'             => 'llms-select2-post',
                'title'             => __( 'Privacy Policy Page', 'lifterlms' ),
                'type'              => 'select',
                'custom_attributes' => array(
                    'data-post-type'   => 'page',
                    'data-placeholder' => __( 'Select a page', 'lifterlms' ),
                ),
                'options'           => llms_make_select2_post_array( get_option( 'wp_page_for_privacy_policy' ) ),
            ),
            array(
                'autoload' => false,
                'default'  => llms_get_privacy_notice(),
                'id'       => 'llms_privacy_notice',
                'desc'     => __( 'Optionally display a privacy policy notice during registration and checkout.', 'lifterlms' ),
                'title'    => __( 'Privacy Policy Notice', 'lifterlms' ),
                'type'     => 'textarea',
            ),
            array(
                'title' => __( 'Account Erasure Requests', 'lifterlms' ),
                /* Translators: %$1s = opening anchor to account erasure screen; %2$s closing anchor */
                'desc'  => sprintf( __( 'Customize data retention during %1$saccount erasure requests%2$s.', 'lifterlms' ), '<a href="' . esc_url( admin_url( 'tools.php?page=remove_personal_data' ) ) . '">', '</a>' ),
                'type'  => 'subtitle',
            ),
            array(
                'autoload' => false,
                'default'  => 'no',
                'id'       => 'llms_erasure_request_removes_order_data',
                'desc'     => __( 'When enabled orders will be anonymized during a personal data erasure.', 'lifterlms' ),
                'title'    => __( 'Remove Order Data', 'lifterlms' ),
                'type'     => 'checkbox',
            ),
            array(
                'autoload' => false,
                'default'  => 'no',
                'id'       => 'llms_erasure_request_removes_lms_data',
                'desc'     => __( 'When enabled all student data related to course and membership activities will be removed.', 'lifterlms' ),
                'title'    => __( 'Remove Student LMS Data', 'lifterlms' ),
                'type'     => 'checkbox',
            ),
            array(
                'id'   => 'user_info_field_options_end',
                'type' => 'sectionend',
            ),

        );

        if ( llms_is_favorites_enabled() ) {
            array_splice(
                $account_settings,
                15,
                0,
                array(
                    array(
                        'title'    => __( 'View Favorites', 'lifterlms' ),
                        'desc'     => __( 'List of all the student\'s favorites', 'lifterlms' ),
                        'id'       => 'lifterlms_myaccount_favorites_endpoint',
                        'type'     => 'text',
                        'default'  => 'my-favorites',
                        'sanitize' => 'slug',
                    ),
                )
            );
        }

        /**
         * Filters the account settings.
         *
         * The dynamic portion of this filter `{$this->id}` refers to the unique ID for the settings page.
         *
         * @since Unknown
         *
         * @param array $account_settings The account page settings.
         */
        return apply_filters( "lifterlms_{$this->id}_settings", $account_settings );

    }

    /**
     * Retrieve the page label.
     *
     * @since 3.37.3
     *
     * @return string
     */
    protected function set_label() {
        return __( 'Accounts', 'lifterlms' );
    }

}

return new LLMS_Settings_Accounts();