PluginProbe ʕ •ᴥ•ʔ
Code Manager / 1.0.3
Code Manager v1.0.3
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
226 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 $this->run_shortcode_id( $id );
146 }
147
148 public function run_shortcode_name_from_anywhere( $name ) {
149 $this->run_shortcode_name( $name );
150 }
151
152 /**
153 * Adds PHP code
154 *
155 * @since 1.0.0
156 *
157 * @param string $php_code PHP code to be added
158 * @param bool $php7_required Indicates whether PHP7 is required for this code type
159 */
160 protected function add_php_code( $php_code, $php7_required = true ) {
161 if ( self::is_code_manager_page() ) {
162 // Do not execute any code on Code Manager pages!!!
163 // This is an admins rescue in case code fails.
164 } else {
165 eval( $this->strip_code( $php_code ) );
166 }
167 }
168
169 /**
170 * Remove PHP opening and closing tags (when found) from given code
171 *
172 * @since 1.0.0
173 *
174 * @param string $php_code PHP source code
175 *
176 * @return string PHP code without PHP opening and closing tags
177 */
178 protected function strip_code( $php_code ) {
179 $php_code = rtrim( ltrim( $php_code ) );
180
181 if ( '<?php' === strtolower( substr( $php_code, 0, 5 ) ) ) {
182 $php_code = substr( $php_code, 5 );
183 }
184
185 if ( '?>' === substr( $php_code, strlen( $php_code ) - 2 ) ) {
186 $php_code = substr( $php_code, 0, strlen( $php_code ) - 2 );
187 }
188
189 return $php_code;
190 }
191
192 /**
193 * Checks if Code Manager is disabled
194 *
195 * (1) Disabled in settings page
196 * (2) Disabled in config file
197 *
198 * @since 1.0.0
199 *
200 * @return bool TRUE - Code Manager is disabled
201 */
202 public static function code_manager_disabled() {
203 $plugin_code_execution = get_option('code_manager_plugin_code_execution');
204 if ( false === $plugin_code_execution ) {
205 $plugin_code_execution = 'on';
206 }
207
208 return 'on' !== $plugin_code_execution || ( defined( 'CODE_MANAGER_DISABLED' ) && CODE_MANAGER_DISABLED );
209 }
210
211 public static function is_code_manager_page() {
212 return (
213 is_admin() &&
214 isset( $_REQUEST['page'] ) &&
215 (
216 CODE_MANAGER_MENU_SLUG === $_REQUEST['page'] ||
217 CODE_MANAGER_SETTINGS_MENU_SLUG === $_REQUEST['page'] ||
218 'code_manager_post' === $_REQUEST['page']
219 )
220 );
221 }
222
223 }
224
225 }
226