PluginProbe
Cooked – Recipe Management / 1.14.0
Cooked – Recipe Management v1.14.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.14.0, at cooked.php

560 lines 16.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.14.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_DEV', false );
34 define( 'COOKED_VERSION', '1.14.0' );
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 Updates Object.
101 *
102 * @var object|Cooked_Updates
103 * @since 1.0.0
104 */
105 public $updates;
106
107 /**
108 * Cooked Post Types Object.
109 *
110 * @var object|Cooked_Post_Types
111 * @since 1.0.0
112 */
113 public $post_types;
114
115 /**
116 * Cooked Recipe Meta Object.
117 *
118 * @var object|Cooked_Recipe_Meta
119 * @since 1.0.0
120 */
121 public $recipe_meta;
122
123 /**
124 * Cooked Measurements Object.
125 *
126 * @var object|Cooked_Measurements
127 * @since 1.0.0
128 */
129 public $measurements;
130
131 /**
132 * Cooked Users Object.
133 *
134 * @var object|Cooked_Users
135 * @since 1.0.0
136 */
137 public $users;
138
139 /**
140 * Cooked Recipes Object.
141 *
142 * @var object|Cooked_Recipes
143 * @since 1.0.0
144 */
145 public $recipes;
146
147 /**
148 * Cooked Shortcodes Object.
149 *
150 * @var object|Cooked_Shortcodes
151 * @since 1.0.0
152 */
153 public $shortcodes;
154
155 /**
156 * Cooked Ajax Object.
157 *
158 * @var object|Cooked_Ajax
159 * @since 1.0.0
160 */
161 public $ajax;
162
163 /**
164 * Cooked Functions Object.
165 *
166 * @var object|Cooked_Functions
167 * @since 1.0.0
168 */
169 public $functions;
170
171 /**
172 * Cooked Widgets Object.
173 *
174 * @var object|Cooked_Widgets
175 * @since 1.0.0
176 */
177 public $widget;
178
179 /**
180 * Cooked Gutenberg Object.
181 *
182 * @var object|Cooked_Gutenberg
183 * @since 1.0.0
184 */
185 public $gutenberg;
186
187 /**
188 * Cooked Elementor Object.
189 *
190 * @var object|Cooked_Elementor
191 * @since 1.0.0
192 */
193 public $elementor;
194
195 /**
196 * Cooked Rank Math SEO Object.
197 *
198 * @var object|Cooked_RankMathSEO
199 * @since 1.8.9
200 */
201 public $rankmathseo;
202
203 /**
204 * Cooked Yoast SEO Object.
205 *
206 * @var object|Cooked_YoastSEO
207 * @since 1.8.9
208 */
209 public $yoastseo;
210
211 /**
212 * Cooked Multilingual Object.
213 *
214 * @var object|Cooked_Multilingual
215 * @since 1.12.0
216 */
217 public $multilingual;
218
219 /**
220 * Cooked Related Recipes Object.
221 *
222 * @var object|Cooked_Related_Recipes
223 * @since 1.12.0
224 */
225 public $related_recipes;
226
227 /**
228 * Cooked Extra Object.
229 *
230 * @var object|Cooked_Plugin_Extra
231 * @since 1.8.7
232 */
233 public $extra;
234
235 /**
236 * Main Cooked_Plugin Instance.
237 *
238 * Insures that only one instance of Cooked_Plugin exists in memory at any one
239 * time. Also prevents needing to define globals everywhere.
240 *
241 * @since 1.0.0
242 * @static
243 * @staticvar array $instance
244 * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
245 * @uses Cooked_Plugin::includes() Include the required files.
246 * @uses Cooked_Plugin::load_textdomain() load the language files.
247 * @see Cooked()
248 * @return object|Cooked_Plugin
249 */
250 public static function instance() {
251 if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
252 self::$instance = new Cooked_Plugin;
253 self::$instance->setup_constants();
254
255 add_action( 'init', [self::$instance, 'load_textdomain'] );
256 add_action( 'plugins_loaded', [self::$instance, 'check_plugin_update'] );
257
258 self::$instance->includes();
259 self::$instance->roles = new Cooked_Roles();
260 self::$instance->admin_menus = new Cooked_Admin_Menus();
261
262 if (is_admin()) {
263 self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
264 } else {
265 self::$instance->enqueues = new Cooked_Enqueues();
266 }
267
268 self::$instance->admin_settings = new Cooked_Settings();
269 self::$instance->migration = new Cooked_Migration();
270 self::$instance->related_recipes = new Cooked_Related_Recipes();
271 self::$instance->updates = new Cooked_Updates();
272 self::$instance->post_types = new Cooked_Post_Types();
273 self::$instance->recipe_meta = new Cooked_Recipe_Meta();
274 self::$instance->measurements = new Cooked_Measurements();
275 self::$instance->users = new Cooked_Users();
276 self::$instance->recipes = new Cooked_Recipes();
277 self::$instance->shortcodes = new Cooked_Shortcodes();
278 self::$instance->ajax = new Cooked_Ajax();
279 self::$instance->functions = new Cooked_Functions();
280 self::$instance->widget = new Cooked_Widgets();
281 self::$instance->gutenberg = new Cooked_Gutenberg();
282 self::$instance->elementor = new Cooked_Elementor();
283 self::$instance->extra = new Cooked_Plugin_Extra();
284 self::$instance->multilingual = new Cooked_Multilingual();
285
286 self::$instance->module_setup();
287
288 add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 );
289
290 do_action('cooked_loaded');
291 }
292
293 return self::$instance;
294 }
295
296 /**
297 * Initialize module support.
298 *
299 * @since 1.0.0
300 * @return void
301 */
302 private function module_setup() {
303 // Look for Cooked Modules
304 $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
305 if ($modules):
306 foreach ($modules as $module_name):
307 if ($module_name !== '.' && $module_name !== '..'):
308 if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
309 require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
310 endif;
311 endif;
312 endforeach;
313 endif;
314
315 // Look for Cooked Modules in Parent Theme
316 $parent_theme_folder = trailingslashit( get_template_directory() );
317 $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
318 if ($modules):
319 foreach ($modules as $module_name):
320 if ($module_name !== '.' && $module_name !== '..'):
321 if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
322 require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
323 endif;
324 endif;
325 endforeach;
326 endif;
327
328 // Look for Cooked Modules in Child Theme (if one is active)
329 $child_theme_folder = trailingslashit( get_stylesheet_directory() );
330 if ($child_theme_folder != $parent_theme_folder):
331 $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
332 if ($modules):
333 foreach ($modules as $module_name):
334 if ($module_name !== '.' && $module_name !== '..'):
335 if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
336 require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
337 endif;
338 endif;
339 endforeach;
340 endif;
341 endif;
342 }
343
344 /**
345 * Initialize plugin support.
346 *
347 * @since 1.0.0
348 * @return void
349 */
350 public function initialize_plugin_support() {
351 if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
352 require_once COOKED_DIR . 'includes/class.cooked-yoastseo.php';
353 self::$instance->yoastseo = new Cooked_YoastSEO();
354 }
355
356 if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) {
357 require_once COOKED_DIR . 'includes/class.cooked-rankmathseo.php';
358 self::$instance->rankmathseo = new Cooked_RankMathSEO();
359 }
360 }
361
362 /**
363 * Check for plugin updates and run migrations if needed
364 *
365 * @since 1.10.0
366 */
367 public function check_plugin_update() {
368 $current_version = get_option('cooked_version', '0');
369
370 if (version_compare($current_version, COOKED_VERSION, '<')) {
371 // Run migrations
372 $this->migration->init();
373
374 // Update version in database
375 update_option('cooked_version', COOKED_VERSION);
376 }
377 }
378
379 /**
380 * Throw error on object clone.
381 *
382 * The whole idea of the singleton design pattern is that there is a single
383 * object therefore, we don't want the object to be cloned.
384 *
385 * @since 1.0.0
386 * @access protected
387 * @return void
388 */
389 public function __clone() {
390 // Nope, can't do that.
391 return false;
392 }
393
394 /**
395 * Disable unserializing of the class.
396 *
397 * @since 1.0.0
398 * @access protected
399 * @return void
400 */
401 public function __wakeup() {
402 // Nope, can't do that either.
403 return false;
404 }
405
406 /**
407 * Setup plugin constants.
408 *
409 * @access private
410 * @since 1.0.0
411 * @return void
412 */
413 private function setup_constants() {
414 // Plugin Folder Path.
415 if ( ! defined( 'COOKED_DIR' ) ) {
416 define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
417 }
418
419 // Plugin Folder Name.
420 if ( ! defined( 'COOKED_FOLDER' ) ) {
421 $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
422 define( 'COOKED_FOLDER', $foldername );
423 }
424
425 // Plugin Root File.
426 if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
427 define( 'COOKED_PLUGIN_FILE', __FILE__ );
428 }
429
430 // Plugin Folder URL.
431 if ( ! defined( 'COOKED_URL' ) ) {
432 define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
433 }
434
435 // WordPress Ajax URL.
436 if ( ! defined( 'COOKED_AJAX_URL' ) ) {
437 define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
438 }
439
440 // Make sure CAL_GREGORIAN is defined.
441 if ( ! defined( 'CAL_GREGORIAN' ) ) {
442 define( 'CAL_GREGORIAN', 1 );
443 }
444
445 // Time Format
446 if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
447 define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
448 }
449
450 // Date Format
451 if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
452 define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
453 }
454 }
455
456 /**
457 * Include required files.
458 *
459 * @access private
460 * @since 1.0.0
461 * @return void
462 */
463 private function includes() {
464 require_once COOKED_DIR . 'includes/class.cooked-users.php';
465 require_once COOKED_DIR . 'includes/class.cooked-roles.php';
466 require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
467 require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
468 require_once COOKED_DIR . 'includes/class.cooked-seo.php';
469 require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
470 require_once COOKED_DIR . 'includes/class.cooked-related-recipes.php';
471 require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
472 require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
473 require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
474 require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
475 require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
476 require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
477 require_once COOKED_DIR . 'includes/class.cooked-settings.php';
478 require_once COOKED_DIR . 'includes/class.cooked-migration.php';
479 require_once COOKED_DIR . 'includes/class.cooked-updates.php';
480 require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
481 require_once COOKED_DIR . 'includes/class.cooked-functions.php';
482 require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
483 require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
484 require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
485 require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php';
486 require_once COOKED_DIR . 'includes/class.cooked-multilingual.php';
487
488 if ( defined( 'WP_CLI' ) && WP_CLI ) {
489 require_once COOKED_DIR . 'includes/class.cooked-cli.php';
490 }
491 }
492
493 /**
494 * Loads the plugin language files.
495 *
496 * @access public
497 * @since 1.0.0
498 * @return void
499 */
500 public function load_textdomain() {
501 /*
502 * When translating Cooked, be sure to move your language file into the proper location:
503 *
504 * - wp-content/languages/plugins
505 *
506 * If you do not move custom language files here, they will be lost when updating Cooked. Gora Tech
507 * recommends Loco Translate for easy translations: hhttps://github.com/XjSv/Cooked/wiki/Translations-Text-Changes
508 */
509
510 // Set filter for plugin's languages directory.
511 $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
512
513 // Traditional WordPress plugin locale filter.
514 $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
515 $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
516
517 // Look in wp-content/languages/plugins/cooked
518 $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
519
520 if ( file_exists( $lang_file_ext ) ) {
521 // Load the externally located language files.
522 load_textdomain( 'cooked', $lang_file_ext );
523 } else {
524 // Load the default language files.
525 load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
526 }
527 }
528 }
529
530 endif; // End if class_exists check.
531
532 // Uninstall Hook.
533 register_uninstall_hook( __FILE__, 'cooked_uninstall' );
534 function cooked_uninstall() {
535 Cooked_Roles::remove_caps();
536 Cooked_Roles::remove_roles();
537 flush_rewrite_rules();
538 }
539
540 /**
541 * The main function for that returns Cooked_Plugin.
542 *
543 * The main function responsible for returning the Cooked_Plugin
544 * Instance to functions everywhere.
545 *
546 * Use this function like you would a global variable, except without needing
547 * to declare the global.
548 *
549 * Example: <?php $cooked = Cooked(); ?>
550 *
551 * @since 1.0.0
552 * @return object|Cooked_Plugin
553 */
554 function Cooked() {
555 return Cooked_Plugin::instance();
556 }
557
558 // Let's get cooking!
559 $CookedPlugin = Cooked();
560