PluginProbe
Cooked – Recipe Management / 1.11.3
Cooked – Recipe Management v1.11.3
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.3, at cooked.php

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