PluginProbe ʕ •ᴥ•ʔ
Strong Testimonials / 3.3.2
Strong Testimonials v3.3.2
3.3.2 3.3.1 trunk 1.0.1 2.30.9 2.31.10 2.32 2.32.1 2.32.2 2.32.3 2.32.4 2.33 2.34 2.35 2.36 2.37 2.38 2.38.1 2.39 2.39.1 2.39.2 2.39.3 2.40.0 2.40.1 2.40.2 2.40.3 2.40.4 2.40.5 2.40.6 2.40.7 2.41.0 2.41.1 2.50.0 2.50.1 2.50.2 2.50.3 2.50.4 2.51.0 2.51.1 2.51.2 2.51.3 2.51.4 2.51.5 2.51.6 2.51.7 2.51.8 2.51.9 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.17 3.2.18 3.2.19 3.2.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0
strong-testimonials / includes / functions-activation.php
strong-testimonials / includes Last commit date
elementor 1 year ago logs 1 month ago strong-testimonials-beaver-block 1 year ago submodules 8 months ago class-strong-gutemberg.php 1 year ago class-strong-log.php 1 year ago class-strong-mail.php 1 year ago class-strong-testimonials-average-shortcode.php 1 year ago class-strong-testimonials-count-shortcode.php 1 year ago class-strong-testimonials-defaults.php 1 month ago class-strong-testimonials-form.php 1 month ago class-strong-testimonials-order.php 1 year ago class-strong-testimonials-privacy.php 1 year ago class-strong-testimonials-render.php 1 month ago class-strong-testimonials-templates.php 1 year ago class-strong-testimonials-view-shortcode.php 1 week ago class-strong-testimonials-view-widget.php 1 year ago class-strong-view-display.php 1 day ago class-strong-view-form.php 1 day ago class-strong-view-slideshow.php 1 day ago class-strong-view.php 1 day ago class-walker-strong-category-checklist-front.php 1 year ago deprecated.php 1 year ago filters.php 1 month ago functions-activation.php 1 month ago functions-content.php 11 months ago functions-image.php 5 months ago functions-rating.php 1 year ago functions-template-form.php 1 week ago functions-template.php 4 months ago functions-views.php 1 year ago functions.php 1 month ago l10n-polylang.php 1 year ago l10n-wpml.php 1 year ago post-types.php 1 week ago retro.php 1 year ago scripts.php 1 month ago
functions-activation.php
188 lines
1 <?php
2
3 /**
4 * Add tables for Views.
5 *
6 * @since 1.21.0
7 */
8 function wpmtst_update_tables() {
9 global $wpdb;
10 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
11
12 $charset_collate = $wpdb->get_charset_collate();
13
14 $table_name = $wpdb->prefix . 'strong_views';
15
16 $sql = "CREATE TABLE $table_name (
17 id mediumint(9) NOT NULL AUTO_INCREMENT,
18 name varchar(100) NOT NULL,
19 value text NOT NULL,
20 PRIMARY KEY (id)
21 ) $charset_collate;";
22
23 $wpdb->show_errors();
24 $result = dbDelta( $sql );
25 $wpdb->hide_errors();
26
27 if ( $wpdb->last_error ) {
28 deactivate_plugins( 'strong-testimonials/strong-testimonials.php' );
29 $message = '<p><span style="color: #CD0000;">';
30 $message .= esc_html__( 'An error occurred:', 'strong-testimonials' ) . '</span>&nbsp;';
31 $message .= esc_html__( 'The plugin has been deactivated.', 'strong-testimonials' );
32 $message .= '</p>';
33 $message .= '<p><code>' . $wpdb->last_error . '</code></p>';
34 // translators: %s is the URL to the WordPress dashboard.
35 $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>';
36
37 wp_die( sprintf( '<div class="error strong-view-error">%s</div>', wp_kses_post( $message ) ) );
38 }
39
40 update_option( 'wpmtst_db_version', WPMST()->get_db_version(), 'no' );
41 }
42
43 /**
44 * Returns true if any view in the table has the given mode.
45 *
46 * @since 3.2.23
47 */
48 function wpmtst_mode_view_exists( $table, $mode ) {
49 global $wpdb;
50 $rows = $wpdb->get_col( "SELECT value FROM {$table}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
51 foreach ( $rows as $row ) {
52 $data = maybe_unserialize( $row );
53 if ( isset( $data['mode'] ) && $data['mode'] === $mode ) {
54 return true;
55 }
56 }
57 return false;
58 }
59
60 /**
61 * Create default views on plugin activation (and on admin_init as a safety net).
62 *
63 * - Single Template: protected, re-created if its stored ID no longer exists.
64 * - Display / Form: created once; skipped if any view with that mode already exists.
65 *
66 * @since 3.2.23
67 */
68 function wpmtst_create_default_views() {
69 global $wpdb;
70
71 $table = $wpdb->prefix . 'strong_views';
72 $stored_ids = get_option( 'wpmtst_default_views', array() );
73 $updated = false;
74
75 // Single Template — always ensure one view is protected.
76 // If the stored protected ID is still in the DB, nothing to do.
77 // Otherwise find the first existing single_template view and protect it,
78 // or create a new one if none exist.
79 $protected_id = absint( $stored_ids['single_template'] ?? 0 );
80 $still_exists = $protected_id > 0 && $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$table} WHERE id = %d", $protected_id ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
81
82 if ( ! $still_exists ) {
83 // Find the first existing single_template view in the DB.
84 $rows = $wpdb->get_results( "SELECT id, value FROM {$table}", ARRAY_A ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
85 $first_id = 0;
86 foreach ( $rows as $row ) {
87 $data = maybe_unserialize( $row['value'] );
88 if ( isset( $data['mode'] ) && 'single_template' === $data['mode'] ) {
89 $first_id = absint( $row['id'] );
90 break;
91 }
92 }
93
94 if ( $first_id > 0 ) {
95 // Promote the first found view to protected.
96 $stored_ids['single_template'] = $first_id;
97 $updated = true;
98 } else {
99 // No single_template view exists — create one.
100 $view = Strong_Testimonials_Defaults::get_default_view();
101 $view['mode'] = 'single_template';
102 $view['client_section'] = array(
103 array(
104 'field' => 'client_name',
105 'type' => 'text',
106 'before' => '',
107 'class' => 'testimonial-name',
108 ),
109 array(
110 'field' => 'company_name',
111 'type' => 'link',
112 'before' => '',
113 'url' => 'company_website',
114 'class' => 'testimonial-company',
115 'new_tab' => true,
116 ),
117 array(
118 'field' => 'star_rating',
119 'type' => 'rating',
120 'before' => '',
121 'class' => 'testimonial-rating',
122 ),
123 );
124 $wpdb->query( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
125 $wpdb->prepare(
126 "INSERT INTO {$table} (name, value) VALUES (%s, %s)",
127 __( 'Single Template', 'strong-testimonials' ),
128 serialize( $view ) // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
129 )
130 );
131 $new_id = absint( $wpdb->insert_id );
132 if ( $new_id > 0 ) {
133 $stored_ids['single_template'] = $new_id;
134 $updated = true;
135 }
136 }
137 }
138
139 // Testimonials Display — create once; if stored ID exists the user has already seen/deleted it.
140 if ( ! isset( $stored_ids['display'] ) && ! wpmtst_mode_view_exists( $table, 'display' ) ) {
141 $view = Strong_Testimonials_Defaults::get_default_view();
142 $view['mode'] = 'display';
143 $wpdb->query( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
144 $wpdb->prepare(
145 "INSERT INTO {$table} (name, value) VALUES (%s, %s)",
146 __( 'Testimonials Display', 'strong-testimonials' ),
147 serialize( $view ) // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
148 )
149 );
150 $new_id = absint( $wpdb->insert_id );
151 if ( $new_id > 0 ) {
152 $stored_ids['display'] = $new_id;
153 $updated = true;
154 }
155 } elseif ( ! isset( $stored_ids['display'] ) && wpmtst_mode_view_exists( $table, 'display' ) ) {
156 // Existing install already has a display view — mark as seen so we never create one.
157 $stored_ids['display'] = 0;
158 $updated = true;
159 }
160
161 // Testimonials Collection Form — create once; if stored ID exists the user has already seen/deleted it.
162 if ( ! isset( $stored_ids['form'] ) && ! wpmtst_mode_view_exists( $table, 'form' ) ) {
163 $view = Strong_Testimonials_Defaults::get_default_view();
164 $view['mode'] = 'form';
165 $view['template'] = 'default-form';
166 $wpdb->query( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
167 $wpdb->prepare(
168 "INSERT INTO {$table} (name, value) VALUES (%s, %s)",
169 __( 'Testimonials Collection Form', 'strong-testimonials' ),
170 serialize( $view ) // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
171 )
172 );
173 $new_id = absint( $wpdb->insert_id );
174 if ( $new_id > 0 ) {
175 $stored_ids['form'] = $new_id;
176 $updated = true;
177 }
178 } elseif ( ! isset( $stored_ids['form'] ) && wpmtst_mode_view_exists( $table, 'form' ) ) {
179 // Existing install already has a form view — mark as seen so we never create one.
180 $stored_ids['form'] = 0;
181 $updated = true;
182 }
183
184 if ( $updated ) {
185 update_option( 'wpmtst_default_views', $stored_ids, 'no' );
186 }
187 }
188