can_manage_settings( $data ) ) { echo Template::print_message( __( 'Only administrators can manage instructor access in Course Builder.', 'learnpress' ), 'error', false ); return; } wp_enqueue_script( 'lp-course-builder' ); $settings_data = $this->get_settings_data(); $layout_sections = apply_filters( 'learn-press/course-builder/settings/sections', [ 'wrapper' => '
', 'header' => $this->html_header(), 'content' => '
', 'form' => $this->html_content( $settings_data ), 'content_end' => '
', 'wrapper_end' => '
', ], $settings_data ); echo Template::combine_components( $layout_sections ); } catch ( Throwable $e ) { error_log( __METHOD__ . ': ' . $e->getMessage() ); } } protected function html_header(): string { return Template::combine_components( [ 'wrapper' => '
', 'title' => sprintf( '

%s

', __( 'Settings', 'learnpress' ) ), 'wrapper_end' => '
', ] ); } protected function can_manage_settings( array $data = [] ): bool { $userModel = $data['userModel'] ?? false; if ( $userModel instanceof UserModel ) { return user_can( $userModel->get_id(), ADMIN_ROLE ); } $user_id = get_current_user_id(); return $user_id && current_user_can( ADMIN_ROLE ); } protected function get_settings_data(): array { $course_builder_logo = absint( LP_Settings::get_option( 'course_builder_logo_id', 0 ) ); $course_builder_src = $course_builder_logo ? wp_get_attachment_image_url( $course_builder_logo, 'full' ) : ''; return apply_filters( 'learn-press/course-builder/settings/data', [ 'hide_instructor_access_admin_screen' => LP_Settings::is_hide_instructor_access_admin_screen(), 'course_builder_logo' => $course_builder_logo, 'course_builder_src' => $course_builder_src, 'has_custom_logo' => ! empty( $course_builder_src ), ] ); } protected function html_content( array $settings_data ): string { $form_sections = apply_filters( 'learn-press/course-builder/settings/form/sections', [ 'wrapper' => '
', 'access' => $this->html_section_instructor_access( $settings_data ), 'logo' => $this->html_section_logo( $settings_data ), 'wrapper_end' => '
', ], $settings_data ); return Template::combine_components( $form_sections ); } protected function html_section_instructor_access( array $settings_data ): string { $field_checked = checked( $settings_data['hide_instructor_access_admin_screen'], true, false ); $field = [ 'wrapper' => '
', 'label' => sprintf( '', esc_html__( 'Restrict Instructor Access', 'learnpress' ) ), 'input' => sprintf( '', $field_checked ), 'description' => sprintf( '%s', esc_html__( 'When enabled, the admin menu will be hidden for instructors. Instructors will not be able to access wp-admin.', 'learnpress' ) ), 'wrapper_end' => '
', ]; $section = apply_filters( 'learn-press/course-builder/settings/section/instructor-access', [ 'wrapper' => '
', 'field' => Template::combine_components( $field ), 'wrapper_end' => '
', ], $settings_data ); return Template::combine_components( $section ); } protected function html_section_logo( array $settings_data ): string { $preview_default_class = trim( 'lp-cb-logo-setting__preview-default ' . ( $settings_data['has_custom_logo'] ? 'is-hidden' : '' ) ); $preview_image_class = $settings_data['has_custom_logo'] ? '' : 'is-hidden'; $remove_btn_class = trim( 'button lp-button lp-cb-logo-setting__btn lp-cb-logo-setting__btn-danger ' . ( $settings_data['has_custom_logo'] ? '' : 'is-hidden' ) ); $preview = [ 'wrapper' => '
', 'default' => sprintf( '', esc_attr( $preview_default_class ) ), 'image' => sprintf( '%3$s', esc_attr( $preview_image_class ), esc_url( $settings_data['course_builder_src'] ), esc_attr__( 'Course Builder logo preview', 'learnpress' ) ), 'wrapper_end' => '
', ]; $logo_setting = [ 'wrapper' => sprintf( '
', esc_url( LP_PLUGIN_URL . 'assets/images/icons/ico-logo-course-builder.svg' ) ), 'preview_wrapper' => '
', 'preview_row' => '
', 'preview' => Template::combine_components( $preview ), 'preview_row_end' => '
', 'actions' => '
', 'btn_remove' => sprintf( '', esc_attr( $remove_btn_class ), esc_html__( 'Remove', 'learnpress' ) ), 'btn_replace' => sprintf( '', esc_html__( 'Replace', 'learnpress' ) ), 'actions_end' => '
', 'preview_wrapper_end' => '
', 'input_logo_id' => sprintf( '', absint( $settings_data['course_builder_logo'] ) ), 'input_logo_remove' => '', 'wrapper_end' => '
', ]; $field = [ 'wrapper' => '
', 'label' => sprintf( '', esc_html__( 'Course Builder Logo', 'learnpress' ) ), 'setting' => Template::combine_components( $logo_setting ), 'wrapper_end' => '
', ]; $section = apply_filters( 'learn-press/course-builder/settings/section/logo', [ 'wrapper' => '
', 'field' => Template::combine_components( $field ), 'wrapper_end' => '
', ], $settings_data ); return Template::combine_components( $section ); } }