PluginProbe
Cooked – Recipe Management / trunk
Cooked – Recipe Management vtrunk
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 trunk, at cooked.php

565 lines 16.9 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.0
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.0
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.0' );
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 * Main Cooked_Plugin Instance.
246 *
247 * Insures that only one instance of Cooked_Plugin exists in memory at any one
248 * time. Also prevents needing to define globals everywhere.
249 *
250 * @since 1.0.0
251 * @static
252 * @staticvar array $instance
253 * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
254 * @uses Cooked_Plugin::includes() Include the required files.
255 * @uses Cooked_Plugin::load_textdomain() load the language files.
256 * @see Cooked()
257 * @return object|Cooked_Plugin
258 */
259 public static function instance() {
260 if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
261 self::$instance = new Cooked_Plugin;
262 self::$instance->setup_constants();
263
264 add_action( 'init', [self::$instance, 'load_textdomain'] );
265 add_action( 'plugins_loaded', [self::$instance, 'check_plugin_update'] );
266
267 self::$instance->includes();
268 self::$instance->roles = new Cooked_Roles();
269 self::$instance->admin_menus = new Cooked_Admin_Menus();
270
271 if (is_admin()) {
272 self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
273 } else {
274 self::$instance->enqueues = new Cooked_Enqueues();
275 }
276
277 self::$instance->admin_settings = new Cooked_Settings();
278 self::$instance->migration = new Cooked_Migration();
279 self::$instance->related_recipes = new Cooked_Related_Recipes();
280 self::$instance->updates = new Cooked_Updates();
281 self::$instance->post_types = new Cooked_Post_Types();
282 self::$instance->recipe_meta = new Cooked_Recipe_Meta();
283 self::$instance->measurements = new Cooked_Measurements();
284 self::$instance->users = new Cooked_Users();
285 self::$instance->recipes = new Cooked_Recipes();
286 self::$instance->shortcodes = new Cooked_Shortcodes();
287 self::$instance->ajax = new Cooked_Ajax();
288 self::$instance->functions = new Cooked_Functions();
289 self::$instance->widget = new Cooked_Widgets();
290 self::$instance->gutenberg = new Cooked_Gutenberg();
291 self::$instance->elementor = new Cooked_Elementor();
292 self::$instance->extra = new Cooked_Plugin_Extra();
293 self::$instance->multilingual = new Cooked_Multilingual();
294 self::$instance->pixwell = new Cooked_Pixwell();
295
296 self::$instance->module_setup();
297
298 add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 );
299
300 do_action('cooked_loaded');
301 }
302
303 return self::$instance;
304 }
305
306 /**
307 * Initialize module support.
308 *
309 * @since 1.0.0
310 * @return void
311 */
312 private function module_setup() {
313 // Look for Cooked Modules
314 $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
315 if ($modules):
316 foreach ($modules as $module_name):
317 if ($module_name !== '.' && $module_name !== '..'):
318 if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
319 require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
320 endif;
321 endif;
322 endforeach;
323 endif;
324
325 // Look for Cooked Modules in Parent Theme
326 $parent_theme_folder = trailingslashit( get_template_directory() );
327 $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
328 if ($modules):
329 foreach ($modules as $module_name):
330 if ($module_name !== '.' && $module_name !== '..'):
331 if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
332 require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
333 endif;
334 endif;
335 endforeach;
336 endif;
337
338 // Look for Cooked Modules in Child Theme (if one is active)
339 $child_theme_folder = trailingslashit( get_stylesheet_directory() );
340 if ($child_theme_folder != $parent_theme_folder):
341 $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
342 if ($modules):
343 foreach ($modules as $module_name):
344 if ($module_name !== '.' && $module_name !== '..'):
345 if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
346 require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
347 endif;
348 endif;
349 endforeach;
350 endif;
351 endif;
352 }
353
354 /**
355 * Initialize plugin support.
356 *
357 * @since 1.0.0
358 * @return void
359 */
360 public function initialize_plugin_support() {
361 if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
362 require_once COOKED_DIR . 'includes/class.cooked-yoastseo.php';
363 self::$instance->yoastseo = new Cooked_YoastSEO();
364 }
365
366 if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) {
367 require_once COOKED_DIR . 'includes/class.cooked-rankmathseo.php';
368 self::$instance->rankmathseo = new Cooked_RankMathSEO();
369 }
370 }
371
372 /**
373 * Check for plugin updates and run migrations if needed
374 *
375 * @since 1.10.0
376 */
377 public function check_plugin_update() {
378 $current_version = get_option('cooked_version', '0');
379
380 if (version_compare($current_version, COOKED_VERSION, '<')) {
381 // Run migrations
382 $this->migration->init();
383
384 // Update version in database
385 update_option('cooked_version', COOKED_VERSION);
386 }
387 }
388
389 /**
390 * Throw error on object clone.
391 *
392 * The whole idea of the singleton design pattern is that there is a single
393 * object therefore, we don't want the object to be cloned.
394 *
395 * @since 1.0.0
396 * @access protected
397 * @return void
398 */
399 public function __clone() {
400 // Nope, can't do that.
401 return false;
402 }
403
404 /**
405 * Disable unserializing of the class.
406 *
407 * @since 1.0.0
408 * @access protected
409 * @return void
410 */
411 public function __wakeup() {
412 // Nope, can't do that either.
413 return false;
414 }
415
416 /**
417 * Setup plugin constants.
418 *
419 * @access private
420 * @since 1.0.0
421 * @return void
422 */
423 private function setup_constants() {
424 // Plugin Folder Path.
425 if ( ! defined( 'COOKED_DIR' ) ) {
426 define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
427 }
428
429 // Plugin Folder Name.
430 if ( ! defined( 'COOKED_FOLDER' ) ) {
431 $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
432 define( 'COOKED_FOLDER', $foldername );
433 }
434
435 // Plugin Root File.
436 if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
437 define( 'COOKED_PLUGIN_FILE', __FILE__ );
438 }
439
440 // Plugin Folder URL.
441 if ( ! defined( 'COOKED_URL' ) ) {
442 define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
443 }
444
445 // WordPress Ajax URL.
446 if ( ! defined( 'COOKED_AJAX_URL' ) ) {
447 define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
448 }
449
450 // Make sure CAL_GREGORIAN is defined.
451 if ( ! defined( 'CAL_GREGORIAN' ) ) {
452 define( 'CAL_GREGORIAN', 1 );
453 }
454
455 // Time Format
456 if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
457 define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
458 }
459
460 // Date Format
461 if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
462 define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
463 }
464 }
465
466 /**
467 * Include required files.
468 *
469 * @access private
470 * @since 1.0.0
471 * @return void
472 */
473 private function includes() {
474 require_once COOKED_DIR . 'includes/class.cooked-users.php';
475 require_once COOKED_DIR . 'includes/class.cooked-roles.php';
476 require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
477 require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
478 require_once COOKED_DIR . 'includes/class.cooked-seo.php';
479 require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
480 require_once COOKED_DIR . 'includes/class.cooked-related-recipes.php';
481 require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
482 require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
483 require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
484 require_once COOKED_DIR . 'includes/class.cooked-unit-converter.php';
485 require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
486 require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
487 require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
488 require_once COOKED_DIR . 'includes/class.cooked-settings.php';
489 require_once COOKED_DIR . 'includes/class.cooked-migration.php';
490 require_once COOKED_DIR . 'includes/class.cooked-updates.php';
491 require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
492 require_once COOKED_DIR . 'includes/class.cooked-functions.php';
493 require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
494 require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
495 require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
496 require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php';
497 require_once COOKED_DIR . 'includes/class.cooked-multilingual.php';
498 require_once COOKED_DIR . 'includes/class.cooked-allergens.php';
499 require_once COOKED_DIR . 'includes/class.cooked-pixwell.php';
500
501 if ( defined( 'WP_CLI' ) && WP_CLI ) {
502 require_once COOKED_DIR . 'includes/class.cooked-cli.php';
503 }
504 }
505
506 /**
507 * Loads the plugin language files.
508 *
509 * @access public
510 * @since 1.0.0
511 * @return void
512 */
513 public function load_textdomain() {
514 /*
515 * When translating Cooked, be sure to move your language file into the proper location:
516 *
517 * - wp-content/languages/plugins
518 *
519 * If you do not move custom language files here, they will be lost when updating Cooked. Gora Tech
520 * recommends Loco Translate for easy translations: hhttps://github.com/XjSv/Cooked/wiki/Translations-Text-Changes
521 */
522
523 // Set filter for plugin's languages directory.
524 $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
525
526 // Traditional WordPress plugin locale filter.
527 $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
528 $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
529
530 // Look in wp-content/languages/plugins/cooked
531 $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
532
533 if ( file_exists( $lang_file_ext ) ) {
534 // Load the externally located language files.
535 load_textdomain( 'cooked', $lang_file_ext );
536 } else {
537 // Load the default language files.
538 load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
539 }
540 }
541 }
542
543 endif; // End if class_exists check.
544
545 /**
546 * The main function for that returns Cooked_Plugin.
547 *
548 * The main function responsible for returning the Cooked_Plugin
549 * Instance to functions everywhere.
550 *
551 * Use this function like you would a global variable, except without needing
552 * to declare the global.
553 *
554 * Example: <?php $cooked = Cooked(); ?>
555 *
556 * @since 1.0.0
557 * @return object|Cooked_Plugin
558 */
559 function Cooked() {
560 return Cooked_Plugin::instance();
561 }
562
563 // Let's get cooking!
564 $CookedPlugin = Cooked();
565