PluginProbe
Cooked – Recipe Management / 1.16.1
Cooked – Recipe Management v1.16.1
1.16.1 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 All 37 releases
cooked / cooked.php

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

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