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

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