PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.3.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.3.9
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / TemplateHooks / CourseBuilder / Settings / BuilderSettingsTemplate.php

BuilderSettingsTemplate.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.3.9, at inc/TemplateHooks/CourseBuilder/Settings/BuilderSettingsTemplate.php

200 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Template hooks Settings in Course Builder.
4 *
5 * @since 4.3.x
6 * @version 1.0.2
7 */
8
9 namespace LearnPress\TemplateHooks\CourseBuilder\Settings;
10
11 use LearnPress\Helpers\Singleton;
12 use LearnPress\Helpers\Template;
13 use LearnPress\Models\UserModel;
14 use LP_Settings;
15 use Throwable;
16
17 class BuilderSettingsTemplate {
18 use Singleton;
19
20 public function init() {
21 add_action( 'learn-press/course-builder/settings/layout', [ $this, 'layout' ] );
22 }
23
24 public function layout( array $data = [] ) {
25 try {
26 if ( ! $this->can_manage_settings( $data ) ) {
27 echo Template::print_message( __( 'Only administrators can manage instructor access in Course Builder.', 'learnpress' ), 'error', false );
28 return;
29 }
30
31 wp_enqueue_script( 'lp-course-builder' );
32
33 $settings_data = $this->get_settings_data();
34 $layout_sections = apply_filters(
35 'learn-press/course-builder/settings/sections',
36 [
37 'wrapper' => '<div class="lp-cb-settings">',
38 'header' => $this->html_header(),
39 'content' => '<div class="lp-cb-settings__content">',
40 'form' => $this->html_content( $settings_data ),
41 'content_end' => '</div>',
42 'wrapper_end' => '</div>',
43 ],
44 $settings_data
45 );
46
47 echo Template::combine_components( $layout_sections );
48 } catch ( Throwable $e ) {
49 error_log( __METHOD__ . ': ' . $e->getMessage() );
50 }
51 }
52
53 protected function html_header(): string {
54 return Template::combine_components(
55 [
56 'wrapper' => '<div class="cb-tab-header">',
57 'title' => sprintf( '<h2 class="lp-cb-tab__title">%s</h2>', __( 'Settings', 'learnpress' ) ),
58 'wrapper_end' => '</div>',
59 ]
60 );
61 }
62
63 protected function can_manage_settings( array $data = [] ): bool {
64 $userModel = $data['userModel'] ?? false;
65 if ( $userModel instanceof UserModel ) {
66 return user_can( $userModel->get_id(), ADMIN_ROLE );
67 }
68
69 $user_id = get_current_user_id();
70
71 return $user_id && current_user_can( ADMIN_ROLE );
72 }
73
74 protected function get_settings_data(): array {
75 $course_builder_logo = absint( LP_Settings::get_option( 'course_builder_logo_id', 0 ) );
76 $course_builder_src = $course_builder_logo ? wp_get_attachment_image_url( $course_builder_logo, 'full' ) : '';
77
78 return apply_filters(
79 'learn-press/course-builder/settings/data',
80 [
81 'hide_instructor_access_admin_screen' => LP_Settings::is_hide_instructor_access_admin_screen(),
82 'course_builder_logo' => $course_builder_logo,
83 'course_builder_src' => $course_builder_src,
84 'has_custom_logo' => ! empty( $course_builder_src ),
85 ]
86 );
87 }
88
89 protected function html_content( array $settings_data ): string {
90 $form_sections = apply_filters(
91 'learn-press/course-builder/settings/form/sections',
92 [
93 'wrapper' => '<form id="lp-cb-settings-form" method="post" novalidate>',
94 'access' => $this->html_section_instructor_access( $settings_data ),
95 'logo' => $this->html_section_logo( $settings_data ),
96 'wrapper_end' => '</form>',
97 ],
98 $settings_data
99 );
100
101 return Template::combine_components( $form_sections );
102 }
103
104 protected function html_section_instructor_access( array $settings_data ): string {
105 $field_checked = checked( $settings_data['hide_instructor_access_admin_screen'], true, false );
106 $field = [
107 'wrapper' => '<div class="form-field lp-cb-settings__field hide_instructor_access_admin_screen_field">',
108 'label' => sprintf(
109 '<label for="hide_instructor_access_admin_screen">%s</label>',
110 esc_html__( 'Restrict Instructor Access', 'learnpress' )
111 ),
112 'input' => sprintf(
113 '<input type="checkbox"
114 id="hide_instructor_access_admin_screen"
115 name="hide_instructor_access_admin_screen" value="yes" %s>',
116 $field_checked
117 ),
118 'description' => sprintf(
119 '<span class="description">%s</span>',
120 esc_html__(
121 'When enabled, the admin menu will be hidden for instructors. Instructors will not be able to access wp-admin.',
122 'learnpress'
123 )
124 ),
125 'wrapper_end' => '</div>',
126 ];
127
128 $section = apply_filters(
129 'learn-press/course-builder/settings/section/instructor-access',
130 [
131 'wrapper' => '<div class="lp-cb-settings__section">',
132 'field' => Template::combine_components( $field ),
133 'wrapper_end' => '</div>',
134 ],
135 $settings_data
136 );
137
138 return Template::combine_components( $section );
139 }
140
141 protected function html_section_logo( array $settings_data ): string {
142 $preview_default_class = trim( 'lp-cb-logo-setting__preview-default ' . ( $settings_data['has_custom_logo'] ? 'is-hidden' : '' ) );
143 $preview_image_class = $settings_data['has_custom_logo'] ? '' : 'is-hidden';
144 $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' ) );
145
146 $preview = [
147 'wrapper' => '<div class="lp-cb-logo-setting__preview">',
148 'default' => sprintf( '<span class="%s" data-cb-logo-preview-default></span>', esc_attr( $preview_default_class ) ),
149 'image' => sprintf(
150 '<img class="%1$s" src="%2$s" alt="%3$s" data-cb-logo-preview-image />',
151 esc_attr( $preview_image_class ),
152 esc_url( $settings_data['course_builder_src'] ),
153 esc_attr__( 'Course Builder logo preview', 'learnpress' )
154 ),
155 'wrapper_end' => '</div>',
156 ];
157
158 $logo_setting = [
159 'wrapper' => sprintf(
160 '<div class="lp-cb-logo-setting" data-cb-logo-setting data-cb-default-logo-url="%s">',
161 esc_url( LP_PLUGIN_URL . 'assets/images/icons/ico-logo-course-builder.svg' )
162 ),
163 'preview_wrapper' => '<div class="lp-cb-logo-setting__preview-wrap" data-cb-logo-preview-wrap>',
164 'preview_row' => '<div class="lp-cb-logo-setting__preview-row">',
165 'preview' => Template::combine_components( $preview ),
166 'preview_row_end' => '</div>',
167 'actions' => '<div class="lp-cb-logo-setting__actions">',
168 'btn_remove' => sprintf( '<button type="button" class="%s" data-cb-logo-remove>%s</button>', esc_attr( $remove_btn_class ), esc_html__( 'Remove', 'learnpress' ) ),
169 'btn_replace' => sprintf( '<button type="button" class="button lp-button lp-cb-logo-setting__btn" data-cb-logo-choose>%s</button>', esc_html__( 'Replace', 'learnpress' ) ),
170 'actions_end' => '</div>',
171 'preview_wrapper_end' => '</div>',
172 'input_logo_id' => sprintf(
173 '<input type="hidden" id="course_builder_logo_id" name="course_builder_logo_id" value="%d" />',
174 absint( $settings_data['course_builder_logo'] )
175 ),
176 'input_logo_remove' => '<input type="hidden" name="course_builder_logo_remove" value="no" />',
177 'wrapper_end' => '</div>',
178 ];
179
180 $field = [
181 'wrapper' => '<div class="form-field lp-cb-settings__field course_builder_logo_field">',
182 'label' => sprintf( '<label for="course_builder_logo_id">%s</label>', esc_html__( 'Course Builder Logo', 'learnpress' ) ),
183 'setting' => Template::combine_components( $logo_setting ),
184 'wrapper_end' => '</div>',
185 ];
186
187 $section = apply_filters(
188 'learn-press/course-builder/settings/section/logo',
189 [
190 'wrapper' => '<div class="lp-cb-settings__section">',
191 'field' => Template::combine_components( $field ),
192 'wrapper_end' => '</div>',
193 ],
194 $settings_data
195 );
196
197 return Template::combine_components( $section );
198 }
199 }
200