PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.21
Advanced Ads – Ad Manager & AdSense v2.0.21
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / admin / class-shortcode-creator.php
advanced-ads / includes / admin Last commit date
ads 3 months ago groups 3 months ago metaboxes 1 year ago pages 3 months ago placements 2 months ago class-action-links.php 1 year ago class-addon-box.php 1 year ago class-addon-updater.php 3 months ago class-admin-menu.php 3 months ago class-admin-notices.php 1 year ago class-ajax.php 3 months ago class-assets.php 3 months ago class-authors.php 1 year ago class-compatibility.php 1 year ago class-edd-updater.php 3 months ago class-list-filters.php 2 months ago class-marketing.php 1 year ago class-metabox-ad-settings.php 1 year ago class-metabox-ad.php 1 year ago class-misc.php 1 year ago class-page-quick-edit.php 1 year ago class-plugin-installer.php 1 year ago class-post-list.php 1 year ago class-post-types.php 3 months ago class-screen-options.php 3 months ago class-settings.php 1 year ago class-shortcode-creator.php 1 year ago class-system-info.php 1 year ago class-tinymce.php 2 years ago class-translation-promo.php 1 year ago class-upgrades.php 1 year ago class-version-control.php 3 months ago class-welcome.php 1 year ago class-wordpress-dashboard.php 1 year ago index.php 2 years ago
class-shortcode-creator.php
203 lines
1 <?php
2 /**
3 * Admin Shortcode Creator.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.50.0
8 */
9
10 namespace AdvancedAds\Admin;
11
12 use _WP_Editors;
13 use AdvancedAds\Utilities\Data;
14 use AdvancedAds\Utilities\Conditional;
15 use AdvancedAds\Framework\Interfaces\Integration_Interface;
16
17 defined( 'ABSPATH' ) || exit;
18
19 /**
20 * Admin Shortcode Creator.
21 */
22 class Shortcode_Creator implements Integration_Interface {
23
24 /**
25 * Contains ids of the editors that contains the Advanced Ads button.
26 *
27 * @var array
28 */
29 private $editors = [];
30
31 /**
32 * Hook into WordPress.
33 *
34 * @return void
35 */
36 public function hooks(): void {
37 if (
38 true !== boolval( get_user_option( 'rich_editing' ) ) ||
39 ! Conditional::user_can( 'advanced_ads_place_ads' ) ||
40 defined( 'ADVANCED_ADS_DISABLE_SHORTCODE_BUTTON' ) ||
41 apply_filters( 'advanced-ads-disable-shortcode-button', false )
42 ) {
43 return;
44 }
45
46 add_filter( 'mce_buttons', [ $this, 'register_buttons' ], 10, 2 );
47 add_filter( 'tiny_mce_plugins', [ $this, 'register_plugin' ] );
48 add_filter( 'tiny_mce_before_init', [ $this, 'tiny_mce_before_init' ], 10, 2 );
49
50 add_action( 'wp_tiny_mce_init', [ $this, 'print_shortcode_plugin' ] );
51 add_action( 'print_default_editor_scripts', [ $this, 'print_shortcode_plugin' ] );
52
53 add_action( 'wp_ajax_advads_content_for_shortcode_creator', [ $this, 'get_content_for_shortcode_creator' ] );
54 }
55
56 /**
57 * Add button to tinyMCE window
58 *
59 * @param array $buttons Array with existing buttons.
60 * @param string $editor_id Unique editor identifier.
61 *
62 * @return array
63 */
64 public function register_buttons( $buttons, $editor_id ): array {
65 if ( ! $this->hooks_exist() ) {
66 return $buttons;
67 }
68
69 if ( ! is_array( $buttons ) ) {
70 $buttons = [];
71 }
72
73 $this->editors[] = $editor_id;
74 $buttons[] = 'advads_shortcode_button';
75
76 return $buttons;
77 }
78
79 /**
80 * Add the plugin to the array of default TinyMCE plugins.
81 *
82 * @param array $plugins An array of default TinyMCE plugins.
83 *
84 * @return array
85 */
86 public function register_plugin( $plugins ): array {
87 if ( ! $this->hooks_exist() ) {
88 return $plugins;
89 }
90
91 $plugins[] = 'advads_shortcode';
92
93 return $plugins;
94 }
95
96 /**
97 * Delete the plugin added by the {@see `tiny_mce_plugins`} method when necessary hooks do not exist.
98 *
99 * @param array $mce_init An array with TinyMCE config.
100 * @param string $editor_id Unique editor identifier.
101 *
102 * @return array
103 */
104 public function tiny_mce_before_init( $mce_init, $editor_id = '' ): array {
105 // Early bail!!
106 if ( ! isset( $mce_init['plugins'] ) || ! is_string( $mce_init['plugins'] ) ) {
107 return $mce_init;
108 }
109
110 $plugins = explode( ',', $mce_init['plugins'] );
111 $found = array_search( 'advads_shortcode', $plugins, true );
112
113 if ( ! $found || ( '' !== $editor_id && in_array( $editor_id, $this->editors, true ) ) ) {
114 return $mce_init;
115 }
116
117 unset( $plugins[ $found ] );
118 $mce_init['plugins'] = implode( ',', $plugins );
119
120 return $mce_init;
121 }
122
123 /**
124 * Print shortcode plugin inline.
125 *
126 * @param array|null $mce_settings TinyMCE settings array.
127 *
128 * @return void
129 */
130 public function print_shortcode_plugin( $mce_settings = [] ): void {
131 static $printed = null;
132
133 if ( null !== $printed ) {
134 return;
135 }
136
137 $printed = true;
138
139 // The `tinymce` argument of the `wp_editor()` function is set to `false`.
140 if ( empty( $mce_settings ) && ! ( doing_action( 'print_default_editor_scripts' ) && user_can_richedit() ) ) {
141 return;
142 }
143
144 if ( empty( $this->editors ) ) {
145 return;
146 }
147
148 ?>
149 <script type="text/javascript">
150 <?php echo $this->get_l10n(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
151 <?php echo file_get_contents( ADVADS_ABSPATH . 'assets/js/admin/shortcode.js' ); // phpcs:ignore ?>
152 </script>
153 <?php
154 }
155
156 /**
157 * Prints html select field for shortcode creator
158 *
159 * @return void
160 */
161 public function get_content_for_shortcode_creator(): void {
162 if ( ! ( current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' ) ) ) {
163 return;
164 }
165
166 Data::items_dropdown( [ 'id' => 'advads-select-for-shortcode' ] );
167 exit();
168 }
169
170 /**
171 * Check if needed actions have not been removed by a plugin.
172 *
173 * @return array
174 */
175 private function hooks_exist() {
176 if (
177 has_action( 'wp_tiny_mce_init', [ $this, 'print_shortcode_plugin' ] ) ||
178 has_action( 'print_default_editor_scripts', [ $this, 'print_shortcode_plugin' ] )
179 ) {
180 return true;
181 }
182
183 return false;
184 }
185
186 /**
187 * Get localization strings.
188 *
189 * @return string
190 */
191 private function get_l10n() {
192 $strings = [
193 'title' => esc_html_x( 'Add an ad', 'shortcode creator', 'advanced-ads' ),
194 'ok' => esc_html_x( 'Add shortcode', 'shortcode creator', 'advanced-ads' ),
195 'cancel' => esc_html_x( 'Cancel', 'shortcode creator', 'advanced-ads' ),
196 'image' => ADVADS_BASE_URL . 'assets/img/icons/tinymce-icon.png',
197 ];
198 $locale = _WP_Editors::get_mce_locale();
199
200 return 'tinyMCE.addI18n("' . $locale . '.advads_shortcode", ' . wp_json_encode( $strings ) . ");\n";
201 }
202 }
203