PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 4.14.2
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v4.14.2
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / classes / WpMatomo / Admin / TrackingSettings / Forms.php
matomo / classes / WpMatomo / Admin / TrackingSettings Last commit date
Forms.php 4 years ago
Forms.php
181 lines
1 <?php
2 /**
3 * Matomo - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 * @package matomo
8 * Code Based on
9 * @author Andr&eacute; Br&auml;kling
10 * https://github.com/braekling/matomo
11 *
12 */
13
14 namespace WpMatomo\Admin\TrackingSettings;
15
16 use Piwik\Config;
17 use WpMatomo;
18 use WpMatomo\Admin\TrackingSettings;
19 use WpMatomo\Bootstrap;
20 use WpMatomo\Settings;
21
22 if ( ! defined( 'ABSPATH' ) ) {
23 exit; // if accessed directly
24 }
25 /**
26 * we deal with HTML
27 * phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
28 */
29 class Forms {
30 /**
31 * @var Settings
32 */
33 private $settings;
34
35 public function __construct( $settings ) {
36 $this->settings = $settings;
37 }
38
39 /**
40 * Show an option's description
41 *
42 * @param string $id option id
43 * @param string $description option description
44 * @param boolean $hide_description set to false to show description initially (default: true)
45 *
46 * @return string full description HTML
47 */
48 public function get_description( $id, $description, $hide_description = true ) {
49 $title = esc_html__( 'Click to read help', 'matomo' );
50
51 return sprintf( '<span class="dashicons dashicons-editor-help" title="%1$s" style="cursor: pointer;" onclick="jQuery(\'#%2$s-desc\').toggleClass(\'hidden\');"></span> <p class="description' . ( $hide_description ? ' hidden' : '' ) . '" id="%2$s-desc">%3$s</p>', $title, esc_attr( $id ), $description );
52 }
53
54 /**
55 * Show a checkbox option
56 *
57 * @param string $id option id
58 * @param string $name descriptive option name
59 * @param string $description option description
60 * @param boolean $is_hidden set to true to initially hide the option (default: false)
61 * @param string $group_name define a class name to access a group of option rows by javascript (default: empty)
62 * @param boolean $hide_description $hideDescription set to false to show description initially (default: true)
63 * @param string $on_change javascript for onchange event (default: empty)
64 */
65 public function show_checkbox( $id, $name, $description, $is_hidden = false, $group_name = '', $hide_description = true, $on_change = '' ) {
66 printf( '<tr class="' . esc_attr( $group_name ) . ( $is_hidden ? ' hidden' : '' ) . '"><th scope="row"><label for="%2$s">%s</label>:</th><td><input type="checkbox" value="1"' . ( $this->settings->get_global_option( $id ) ? ' checked="checked"' : '' ) . ' onchange="jQuery(\'#%s\').val(this.checked?1:0);%s" /><input id="%2$s" type="hidden" name="' . esc_attr( TrackingSettings::FORM_NAME ) . '[%2$s]" value="' . (int) $this->settings->get_global_option( $id ) . '" /> %s</td></tr>', esc_html( $name ), esc_attr( $id ), $on_change, $this->get_description( $id, $description, $hide_description ) );
67 }
68
69 /**
70 * Show a textarea option
71 *
72 * @param string $id option id
73 * @param string $name descriptive option name
74 * @param int $rows number of rows to show
75 * @param string $description option description
76 * @param boolean $is_hidden set to true to initially hide the option (default: false)
77 * @param string $group_name define a class name to access a group of option rows by javascript (default: empty)
78 * @param boolean $hide_description $hideDescription set to false to show description initially (default: true)
79 * @param string $on_change javascript for onchange event (default: empty)
80 * @param boolean $is_readonly set textarea to read only (default: false)
81 * @param boolean $global set to false if the textarea shows a site-specific option (default: true)
82 */
83 public function show_textarea( $id, $name, $rows, $description, $is_hidden, $group_name, $hide_description = true, $on_change = '', $is_readonly = false, $global = true ) {
84 printf(
85 '<tr class="' . esc_attr( $group_name ) . ( $is_hidden ? ' hidden' : '' ) . '"><th scope="row"><label for="%2$s">%s</label>:</th><td><textarea cols="80" rows="' . esc_attr( $rows ) . '" id="%s" name="' . esc_attr( TrackingSettings::FORM_NAME ) . '[%2$s]" onchange="%s"' . ( $is_readonly ? ' readonly="readonly"' : '' ) . '>%s</textarea> %s</td></tr>',
86 esc_html( $name ),
87 esc_attr( $id ),
88 $on_change,
89 ( $global ? $this->settings->get_global_option( $id ) : $this->settings->get_option( $id ) ),
90 $this->get_description( $id, $description, $hide_description )
91 );
92 }
93
94 /**
95 * Show a simple text
96 *
97 * @param string $text Text to show
98 */
99 public function show_text( $text, $group_name = '' ) {
100 printf( '<tr class="%s"><td colspan="2"><p>%s</p></td></tr>', esc_attr( $group_name ), esc_html( $text ) );
101 }
102
103 /**
104 * Show a simple text
105 *
106 * @param string $text Text to show
107 */
108 public function show_headline( $text, $group_name = '' ) {
109 printf( '<tr class="%s"><td colspan="2"><h3>%s</h3></td></tr>', esc_attr( $group_name ), esc_html( $text ) );
110 }
111
112 /**
113 * Show an input option
114 *
115 * @param string $id option id
116 * @param string $name descriptive option name
117 * @param string $description option description
118 * @param boolean $is_hidden set to true to initially hide the option (default: false)
119 * @param string $group_name define a class name to access a group of option rows by javascript (default: empty)
120 * @param string $row_name define a class name to access the specific option row by javascript (default: empty)
121 * @param boolean $hide_description $hideDescription set to false to show description initially (default: true)
122 * @param boolean $wide Create a wide box (default: false)
123 */
124 public function show_input( $id, $name, $description, $is_hidden = false, $group_name = '', $row_name = false, $hide_description = true, $wide = false ) {
125 printf( '<tr class="%s%s"%s><th scope="row"><label for="%5$s">%s:</label></th><td><input ' . ( $wide ? 'class="matomo-wide" ' : '' ) . 'name="' . esc_attr( TrackingSettings::FORM_NAME ) . '[%s]" id="%5$s" value="%s" /> %s</td></tr>', $is_hidden ? 'hidden ' : '', $group_name ? $group_name : '', $row_name ? ' id="' . $group_name . '-' . $row_name . '"' : '', esc_html( $name ), esc_attr( $id ), htmlentities( $this->settings->get_global_option( $id ), ENT_QUOTES, 'UTF-8', false ), ! empty( $description ) ? $this->get_description( $id, $description, $hide_description ) : '' );
126 }
127
128 /**
129 * Show a select box option
130 *
131 * @param string $id option id
132 * @param string $name descriptive option name
133 * @param array $options list of options to show array[](option id => descriptive name)
134 * @param string $description option description
135 * @param string $on_change javascript for onchange event (default: empty)
136 * @param boolean $is_hidden set to true to initially hide the option (default: false)
137 * @param string $group_name define a class name to access a group of option rows by javascript (default: empty)
138 * @param boolean $hide_description $hideDescription set to false to show description initially (default: true)
139 * @param boolean $global set to false if the textarea shows a site-specific option (default: true)
140 */
141 public function show_select( $id, $name, $options = [], $description = '', $on_change = '', $is_hidden = false, $group_name = '', $hide_description = true, $global = true ) {
142 $options_list = '';
143
144 if ( 'tracker_debug' === $id && ! WpMatomo::is_safe_mode() && ! $this->settings->is_network_enabled() ) {
145 Bootstrap::do_bootstrap();
146 if ( Config::getInstance()->Tracker['debug'] ) {
147 $default = 'always';
148 } elseif ( Config::getInstance()->Tracker['debug_on_demand'] ) {
149 $default = 'on_demand';
150 } else {
151 $default = 'disabled';
152 }
153 } else {
154 $default = $global ? $this->settings->get_global_option( $id ) : $this->settings->get_option( $id );
155 }
156 if ( is_array( $options ) ) {
157 foreach ( $options as $key => $value ) {
158 // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
159 $options_list .= sprintf( '<option value="%s"' . ( $key == $default ? ' selected="selected"' : '' ) . '>%s</option>', esc_attr( $key ), esc_html( $value ) );
160 }
161 }
162 $script_change = '';
163 if ( $on_change ) {
164 // we make sure it will select the right settings by default
165 $script_change .= '<script type="text/javascript">setTimeout(function () { jQuery("#' . esc_js( $id ) . '").change(); }, 800);</script>';
166 }
167 printf( '<tr class="' . esc_attr( $group_name ) . ( $is_hidden ? ' hidden' : '' ) . '"><th scope="row"><label for="%3$s">%s:%s</label></th><td><select name="' . esc_attr( TrackingSettings::FORM_NAME ) . '[%s]" id="%3$s" onchange="%s">%s</select> %s</td></tr>', esc_html( $name ), $script_change, esc_attr( $id ), $on_change, $options_list, $this->get_description( $id, $description, $hide_description ) );
168 }
169
170 /**
171 * Show an info box
172 *
173 * @param string $type box style (e.g., updated, error)
174 * @param string $icon box icon, see https://developer.wordpress.org/resource/dashicons/
175 * @param string $content box message
176 */
177 public function show_box( $type, $icon, $content ) {
178 printf( '<tr><td colspan="2"><div class="%s"><p><span class="dashicons dashicons-%s"></span> %s</p></div></td></tr>', esc_attr( $type ), esc_attr( $icon ), esc_html( $content ) );
179 }
180 }
181