PluginProbe
Cooked – Recipe Management / 1.11.0
Cooked – Recipe Management v1.11.0
1.16.0 1.15.0 trunk 1.10.0 1.11.0 1.11.1 1.11.2 1.11.3 1.11.4 1.12.0 1.13.0 1.14.0 1.7.10 1.7.11 1.7.12 1.7.13 1.7.15.1 1.7.15.3 1.7.15.4 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 All 36 releases
cooked / cooked.php

cooked.php in Cooked – Recipe Management 1.11.0, at cooked.php

524 lines 15.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 Plugin Name: Cooked - Recipe Management
5 Plugin URI: https://wordpress.org/plugins/cooked/
6 Description: A recipe plugin for WordPress.
7 Author: Gora Tech
8 Author URI: https://goratech.dev
9 Version: 1.11.0
10 Text Domain: cooked
11 Domain Path: languages
12 License: GPL2
13
14 Cooked is free software: you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 2 of the License, or
17 any later version.
18
19 Cooked is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with Cooked. If not, see http://www.gnu.org/licenses/.
26 */
27
28 // Exit if accessed directly.
29 if ( ! defined( 'ABSPATH' ) ) exit;
30
31 require_once __DIR__ . '/vendor/autoload.php';
32
33 define( 'COOKED_VERSION', '1.11.0' );
34 define( 'COOKED_DEV', false );
35
36 if ( ! class_exists( 'Cooked_Plugin' ) ) :
37
38 /**
39 * Cooked_Plugin Class.
40 *
41 * @since 1.0.0
42 */
43 final class Cooked_Plugin {
44
45 /**
46 * @var Cooked_Plugin
47 * @since 1.0.0
48 */
49 private static $instance;
50
51 /**
52 * Cooked Roles Object.
53 *
54 * @var object|Cooked_Roles
55 * @since 1.0.0
56 */
57 public $roles;
58
59 /**
60 * Cooked Admin Menus Object.
61 *
62 * @var object|Cooked_Admin_Menus
63 * @since 1.0.0
64 */
65 public $admin_menus;
66
67 /**
68 * Cooked Admin Enqueues Object.
69 *
70 * @var object|Cooked_Admin_Enqueues
71 * @since 1.0.0
72 */
73 public $admin_enqueues;
74
75 /**
76 * Cooked Enqueues Object.
77 *
78 * @var object|Cooked_Enqueues
79 * @since 1.0.0
80 */
81 public $enqueues;
82
83 /**
84 * Cooked Settings Object.
85 *
86 * @var object|Cooked_Settings
87 * @since 1.0.0
88 */
89 public $admin_settings;
90
91 /**
92 * Cooked Migration Object.
93 *
94 * @var object|Cooked_Migration
95 * @since 1.0.0
96 */
97 public $migration;
98
99 /**
100 * Cooked Post Types Object.
101 *
102 * @var object|Cooked_Post_Types
103 * @since 1.0.0
104 */
105 public $post_types;
106
107 /**
108 * Cooked Recipe Meta Object.
109 *
110 * @var object|Cooked_Recipe_Meta
111 * @since 1.0.0
112 */
113 public $recipe_meta;
114
115 /**
116 * Cooked Measurements Object.
117 *
118 * @var object|Cooked_Measurements
119 * @since 1.0.0
120 */
121 public $measurements;
122
123 /**
124 * Cooked Users Object.
125 *
126 * @var object|Cooked_Users
127 * @since 1.0.0
128 */
129 public $users;
130
131 /**
132 * Cooked Recipes Object.
133 *
134 * @var object|Cooked_Recipes
135 * @since 1.0.0
136 */
137 public $recipes;
138
139 /**
140 * Cooked Shortcodes Object.
141 *
142 * @var object|Cooked_Shortcodes
143 * @since 1.0.0
144 */
145 public $shortcodes;
146
147 /**
148 * Cooked Ajax Object.
149 *
150 * @var object|Cooked_Ajax
151 * @since 1.0.0
152 */
153 public $ajax;
154
155 /**
156 * Cooked Functions Object.
157 *
158 * @var object|Cooked_Functions
159 * @since 1.0.0
160 */
161 public $functions;
162
163 /**
164 * Cooked Widgets Object.
165 *
166 * @var object|Cooked_Widgets
167 * @since 1.0.0
168 */
169 public $widget;
170
171 /**
172 * Cooked Gutenberg Object.
173 *
174 * @var object|Cooked_Gutenberg
175 * @since 1.0.0
176 */
177 public $gutenberg;
178
179 /**
180 * Cooked Elementor Object.
181 *
182 * @var object|Cooked_Elementor
183 * @since 1.0.0
184 */
185 public $elementor;
186
187 /**
188 * Cooked Rank Math SEO Object.
189 *
190 * @var object|Cooked_RankMathSEO
191 * @since 1.8.9
192 */
193 public $rankmathseo;
194
195 /**
196 * Cooked Yoast SEO Object.
197 *
198 * @var object|Cooked_YoastSEO
199 * @since 1.8.9
200 */
201 public $yoastseo;
202
203 /**
204 * Cooked Extra Object.
205 *
206 * @var object|Cooked_Extra
207 * @since 1.8.7
208 */
209 public $extra;
210
211 /**
212 * Main Cooked_Plugin Instance.
213 *
214 * Insures that only one instance of Cooked_Plugin exists in memory at any one
215 * time. Also prevents needing to define globals everywhere.
216 *
217 * @since 1.0.0
218 * @static
219 * @staticvar array $instance
220 * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
221 * @uses Cooked_Plugin::includes() Include the required files.
222 * @uses Cooked_Plugin::load_textdomain() load the language files.
223 * @see Cooked()
224 * @return object|Cooked_Plugin
225 */
226 public static function instance() {
227 if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
228 self::$instance = new Cooked_Plugin;
229 self::$instance->setup_constants();
230
231 add_action( 'init', [self::$instance, 'load_textdomain'] );
232 add_action( 'plugins_loaded', [self::$instance, 'check_plugin_update'] );
233
234 self::$instance->includes();
235 self::$instance->roles = new Cooked_Roles();
236 self::$instance->admin_menus = new Cooked_Admin_Menus();
237
238 if (is_admin()) {
239 self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
240 } else {
241 self::$instance->enqueues = new Cooked_Enqueues();
242 }
243
244 self::$instance->admin_settings = new Cooked_Settings();
245 self::$instance->migration = new Cooked_Migration();
246 self::$instance->post_types = new Cooked_Post_Types();
247 self::$instance->recipe_meta = new Cooked_Recipe_Meta();
248 self::$instance->recipe_meta = new Cooked_Measurements();
249 self::$instance->users = new Cooked_Users();
250 self::$instance->recipes = new Cooked_Recipes();
251 self::$instance->shortcodes = new Cooked_Shortcodes();
252 self::$instance->ajax = new Cooked_Ajax();
253 self::$instance->functions = new Cooked_Functions();
254 self::$instance->widget = new Cooked_Widgets();
255 self::$instance->gutenberg = new Cooked_Gutenberg();
256 self::$instance->elementor = new Cooked_Elementor();
257 self::$instance->extra = new Cooked_Plugin_Extra();
258
259 self::$instance->module_setup();
260
261 add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 );
262 }
263
264 return self::$instance;
265 }
266
267 /**
268 * Initialize module support.
269 *
270 * @since 1.0.0
271 * @return void
272 */
273 private function module_setup() {
274 // Look for Cooked Modules
275 $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
276 if ($modules):
277 foreach ($modules as $module_name):
278 if ($module_name !== '.' && $module_name !== '..'):
279 if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
280 require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
281 endif;
282 endif;
283 endforeach;
284 endif;
285
286 // Look for Cooked Modules in Parent Theme
287 $parent_theme_folder = trailingslashit( get_template_directory() );
288 $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
289 if ($modules):
290 foreach ($modules as $module_name):
291 if ($module_name !== '.' && $module_name !== '..'):
292 if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
293 require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
294 endif;
295 endif;
296 endforeach;
297 endif;
298
299 // Look for Cooked Modules in Child Theme (if one is active)
300 $child_theme_folder = trailingslashit( get_stylesheet_directory() );
301 if ($child_theme_folder != $parent_theme_folder):
302 $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
303 if ($modules):
304 foreach ($modules as $module_name):
305 if ($module_name !== '.' && $module_name !== '..'):
306 if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
307 require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
308 endif;
309 endif;
310 endforeach;
311 endif;
312 endif;
313 }
314
315 /**
316 * Initialize plugin support.
317 *
318 * @since 1.0.0
319 * @return void
320 */
321 public function initialize_plugin_support() {
322 if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
323 require_once COOKED_DIR . 'includes/class.cooked-yoastseo.php';
324 self::$instance->yoastseo = new Cooked_YoastSEO();
325 }
326
327 if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) {
328 require_once COOKED_DIR . 'includes/class.cooked-rankmathseo.php';
329 self::$instance->rankmathseo = new Cooked_RankMathSEO();
330 }
331 }
332
333 /**
334 * Check for plugin updates and run migrations if needed
335 *
336 * @since 1.10.0
337 */
338 public function check_plugin_update() {
339 $current_version = get_option('cooked_version', '0');
340
341 if (version_compare($current_version, COOKED_VERSION, '<')) {
342 // Run migrations
343 $this->migration->init();
344
345 // Update version in database
346 update_option('cooked_version', COOKED_VERSION);
347 }
348 }
349
350 /**
351 * Throw error on object clone.
352 *
353 * The whole idea of the singleton design pattern is that there is a single
354 * object therefore, we don't want the object to be cloned.
355 *
356 * @since 1.0.0
357 * @access protected
358 * @return void
359 */
360 public function __clone() {
361 // Nope, can't do that.
362 return false;
363 }
364
365 /**
366 * Disable unserializing of the class.
367 *
368 * @since 1.0.0
369 * @access protected
370 * @return void
371 */
372 public function __wakeup() {
373 // Nope, can't do that either.
374 return false;
375 }
376
377 /**
378 * Setup plugin constants.
379 *
380 * @access private
381 * @since 1.0.0
382 * @return void
383 */
384 private function setup_constants() {
385 // Plugin Folder Path.
386 if ( ! defined( 'COOKED_DIR' ) ) {
387 define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
388 }
389
390 // Plugin Folder Name.
391 if ( ! defined( 'COOKED_FOLDER' ) ) {
392 $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
393 define( 'COOKED_FOLDER', $foldername );
394 }
395
396 // Plugin Root File.
397 if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
398 define( 'COOKED_PLUGIN_FILE', __FILE__ );
399 }
400
401 // Plugin Folder URL.
402 if ( ! defined( 'COOKED_URL' ) ) {
403 define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
404 }
405
406 // WordPress Ajax URL.
407 if ( ! defined( 'COOKED_AJAX_URL' ) ) {
408 define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
409 }
410
411 // Make sure CAL_GREGORIAN is defined.
412 if ( ! defined( 'CAL_GREGORIAN' ) ) {
413 define( 'CAL_GREGORIAN', 1 );
414 }
415
416 // Time Format
417 if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
418 define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
419 }
420
421 // Date Format
422 if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
423 define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
424 }
425 }
426
427 /**
428 * Include required files.
429 *
430 * @access private
431 * @since 1.0.0
432 * @return void
433 */
434 private function includes() {
435 require_once COOKED_DIR . 'includes/class.cooked-users.php';
436 require_once COOKED_DIR . 'includes/class.cooked-roles.php';
437 require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
438 require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
439 require_once COOKED_DIR . 'includes/class.cooked-seo.php';
440 require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
441 require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
442 require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
443 require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
444 require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
445 require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
446 require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
447 require_once COOKED_DIR . 'includes/class.cooked-settings.php';
448 require_once COOKED_DIR . 'includes/class.cooked-migration.php';
449 require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
450 require_once COOKED_DIR . 'includes/class.cooked-functions.php';
451 require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
452 require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
453 require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
454 require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php';
455 }
456
457 /**
458 * Loads the plugin language files.
459 *
460 * @access public
461 * @since 1.0.0
462 * @return void
463 */
464 public function load_textdomain() {
465 /*
466 * When translating Cooked, be sure to move your language file into the proper location:
467 *
468 * - wp-content/languages/plugins
469 *
470 * If you do not move custom language files here, they will be lost when updating Cooked. Gora Tech
471 * recommends Loco Translate for easy translations: hhttps://github.com/XjSv/Cooked/wiki/Translations-Text-Changes
472 */
473
474 // Set filter for plugin's languages directory.
475 $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
476
477 // Traditional WordPress plugin locale filter.
478 $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
479 $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
480
481 // Look in wp-content/languages/plugins/cooked
482 $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
483
484 if ( file_exists( $lang_file_ext ) ) {
485 // Load the externally located language files.
486 load_textdomain( 'cooked', $lang_file_ext );
487 } else {
488 // Load the default language files.
489 load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
490 }
491 }
492 }
493
494 endif; // End if class_exists check.
495
496 // Uninstall Hook.
497 register_uninstall_hook( __FILE__, 'cooked_uninstall' );
498 function cooked_uninstall() {
499 Cooked_Roles::remove_caps();
500 Cooked_Roles::remove_roles();
501 flush_rewrite_rules();
502 }
503
504 /**
505 * The main function for that returns Cooked_Plugin.
506 *
507 * The main function responsible for returning the Cooked_Plugin
508 * Instance to functions everywhere.
509 *
510 * Use this function like you would a global variable, except without needing
511 * to declare the global.
512 *
513 * Example: <?php $cooked = Cooked(); ?>
514 *
515 * @since 1.0.0
516 * @return object|Cooked_Plugin
517 */
518 function Cooked() {
519 return Cooked_Plugin::instance();
520 }
521
522 // Let's get cooking!
523 $CookedPlugin = Cooked();
524