PluginProbe ʕ •ᴥ•ʔ
Code Manager / 1.0.0
Code Manager v1.0.0
1.0.47 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.2 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.3 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.4 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9
code-manager / Code_Manager / Code_Manager.php
code-manager / Code_Manager Last commit date
Code_Manager.php 5 years ago Code_Manager_Export.php 5 years ago Code_Manager_Form.php 5 years ago Code_Manager_Import.php 5 years ago Code_Manager_Import_File.php 5 years ago Code_Manager_List.php 5 years ago Code_Manager_List_View.php 5 years ago Code_Manager_Model.php 5 years ago Code_Manager_Preview.php 5 years ago Code_Manager_Settings.php 5 years ago Code_Manager_Tabs.php 5 years ago Message_Box.php 5 years ago WP_List_Table.php 5 years ago
Code_Manager.php
240 lines
1 <?php
2
3 namespace Code_Manager {
4
5 /**
6 * Class Code_Manager
7 *
8 * Add plugin actions and runs the code saved in the code manager table.
9 *
10 * @author Peter Schulz
11 * @since 1.0.0
12 */
13 class Code_Manager {
14
15 /**
16 * Add Code Manager specific actions
17 *
18 * @since 1.0.0
19 */
20 public function add_actions( $loader ) {
21 $code_manager_model_class = CODE_MANAGER_MODEL_CLASS;
22 $code_manager_model = new $code_manager_model_class();
23
24 if ( is_admin() ) {
25 // Admin actions
26 $loader->add_action( 'admin_action_code_manager_export', Code_Manager_Export::class, 'export' );
27 $loader->add_action( 'wp_ajax_code_manager_export', Code_Manager_Export::class, 'export_ajax' );
28 $loader->add_action( 'wp_ajax_nopriv_code_manager_export', Code_Manager_Export::class, 'export_ajax' );
29
30 $loader->add_action( 'wp_ajax_code_manager_update_code', $code_manager_model, 'update_code' );
31 $loader->add_action( 'wp_ajax_code_manager_activate_code', $code_manager_model, 'activate_code' );
32 $loader->add_action( 'wp_ajax_code_manager_activate_code_preview', $code_manager_model, 'activate_code_preview' );
33 $loader->add_action( 'wp_ajax_code_manager_deactivate_code_preview', $code_manager_model, 'deactivate_code_preview' );
34 $loader->add_action( 'wp_ajax_code_manager_reset_preview', $code_manager_model, 'reset_preview' );
35 $loader->add_action( 'wp_ajax_code_manager_get_code_list', $code_manager_model, 'get_code_list' );
36 $loader->add_action( 'wp_ajax_code_manager_get_code', $code_manager_model, 'get_code' );
37 $loader->add_action( 'wp_ajax_code_manager_code_name_exists', $code_manager_model, 'code_name_exists' );
38 } else {
39 // Public actions
40 }
41 }
42
43 /**
44 * Run shortcode
45 *
46 * @since 1.0.0
47 *
48 * @var array
49 */
50 public function add_shortcode( $atts ) {
51 if ( self::code_manager_disabled() ) {
52 // Code manager disabled
53 return '';
54 }
55
56 global $pagenow;
57 if ( $pagenow === 'post.php' ) {
58 // Prevent errors on execution if shortcode is shown in visual editor
59 return '';
60 }
61
62 $atts = array_change_key_case( (array) $atts, CASE_LOWER );
63 $wp_atts = shortcode_atts(
64 [
65 'id' => '',
66 'name' => '',
67 ], $atts
68 );
69
70 if ( '' === $wp_atts['id'] && '' === $wp_atts['name'] ) {
71 return '';
72 }
73
74 ob_start();
75
76 $ids = explode( ',', $wp_atts['id'] );
77 foreach ( $ids as $id ) {
78 $this->run_shortcode_id( $id );
79 }
80
81 $names = explode( ',', $wp_atts['name'] );
82 foreach ( $names as $name ) {
83 $this->run_shortcode_name( $name );
84 }
85
86 $content = ob_get_contents();
87 ob_end_clean();
88
89 return $content;
90 }
91
92 protected function run_shortcode_id( $id ) {
93 if ( '' !== $id ) {
94 $code_manager_model_class = CODE_MANAGER_MODEL_CLASS;
95 $code_manager_model = new $code_manager_model_class();
96 $code_row = $code_manager_model::dml_query( $id );
97 if ( 1 === sizeof( $code_row ) ) {
98 if (
99 1 == $code_row[0]['code_enabled'] ||
100 Code_Manager_Preview::is_code_id_preview_enabled( $id )
101 ) {
102 $this->run_shortcode( $code_row[0]['code_type'], $code_row[0]['code'] );
103 }
104 }
105 }
106 }
107
108 protected function run_shortcode_name( $name ) {
109 if ( '' !== $name ) {
110 $code_manager_model_class = CODE_MANAGER_MODEL_CLASS;
111 $code_manager_model = new $code_manager_model_class();
112 $code_row = $code_manager_model::dml_query_by_name( $name );
113 if ( 1 === sizeof( $code_row ) ) {
114 if (
115 1 == $code_row[0]['code_enabled'] ||
116 Code_Manager_Preview::is_code_id_preview_enabled( $code_row[0]['code_id'] )
117 ) {
118 $this->run_shortcode( $code_row[0]['code_type'], $code_row[0]['code'] );
119 }
120 }
121 }
122 }
123
124 /**
125 * Adds code de pending on the code type
126 *
127 * @since 1.0.0
128 *
129 * @param string $code_type Code type (shortcodes only)
130 * @param string $code The code (PHP, JS, CSS or HTML)
131 */
132 protected function run_shortcode( $code_type, $code ) {
133 if ( strpos( $code_type, 'html' ) !== false ) {
134 echo wp_unslash( $code );
135 } elseif ( strpos( $code_type, 'css' ) !== false ) {
136 echo '<style type="text/css">' . wp_unslash( $code ) . '</style>';
137 } elseif ( strpos( $code_type, 'javascript' ) !== false ) {
138 echo '<script type="text/javascript">' . wp_unslash( $code ) . '</script>';
139 } elseif ( 'php shortcode' === $code_type) {
140 $this->add_php_code( $code, false );
141 }
142 }
143
144 public function run_shortcode_id_from_anywhere( $id ) {
145 ob_start();
146
147 $this->run_shortcode_id( $id );
148
149 $content = ob_get_contents();
150 ob_end_clean();
151
152 return $content;
153 }
154
155 public function run_shortcode_name_from_anywhere( $name ) {
156 ob_start();
157
158 $this->run_shortcode_name( $name );
159
160 $content = ob_get_contents();
161 ob_end_clean();
162
163 return $content;
164 }
165
166 /**
167 * Adds PHP code
168 *
169 * @since 1.0.0
170 *
171 * @param string $php_code PHP code to be added
172 * @param bool $php7_required Indicates whether PHP7 is required for this code type
173 */
174 protected function add_php_code( $php_code, $php7_required = true ) {
175 if ( self::is_code_manager_page() ) {
176 // Do not execute any code on Code Manager pages!!!
177 // This is an admins rescue in case code fails.
178 } else {
179 eval( $this->strip_code( $php_code ) );
180 }
181 }
182
183 /**
184 * Remove PHP opening and closing tags (when found) from given code
185 *
186 * @since 1.0.0
187 *
188 * @param string $php_code PHP source code
189 *
190 * @return string PHP code without PHP opening and closing tags
191 */
192 protected function strip_code( $php_code ) {
193 $php_code = rtrim( ltrim( $php_code ) );
194
195 if ( '<?php' === strtolower( substr( $php_code, 0, 5 ) ) ) {
196 $php_code = substr( $php_code, 5 );
197 }
198
199 if ( '?>' === substr( $php_code, strlen( $php_code ) - 2 ) ) {
200 $php_code = substr( $php_code, 0, strlen( $php_code ) - 2 );
201 }
202
203 return $php_code;
204 }
205
206 /**
207 * Checks if Code Manager is disabled
208 *
209 * (1) Disabled in settings page
210 * (2) Disabled in config file
211 *
212 * @since 1.0.0
213 *
214 * @return bool TRUE - Code Manager is disabled
215 */
216 public static function code_manager_disabled() {
217 $plugin_code_execution = get_option('code_manager_plugin_code_execution');
218 if ( false === $plugin_code_execution ) {
219 $plugin_code_execution = 'on';
220 }
221
222 return 'on' !== $plugin_code_execution || ( defined( 'CODE_MANAGER_DISABLED' ) && CODE_MANAGER_DISABLED );
223 }
224
225 public static function is_code_manager_page() {
226 return (
227 is_admin() &&
228 isset( $_REQUEST['page'] ) &&
229 (
230 CODE_MANAGER_MENU_SLUG === $_REQUEST['page'] ||
231 CODE_MANAGER_SETTINGS_MENU_SLUG === $_REQUEST['page'] ||
232 'code_manager_post' === $_REQUEST['page']
233 )
234 );
235 }
236
237 }
238
239 }
240