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

345 lines 9.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4
5 Plugin Name: Cooked
6 Plugin URI: https://cooked.pro
7 Description: A recipe plugin for WordPress.
8 Author: Boxy Studio
9 Author URI: https://boxystudio.com
10 Version: 1.7.11
11 Text Domain: cooked
12 Domain Path: languages
13 License: GPL2
14
15 Cooked is free software: you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 2 of the License, or
18 any later version.
19
20 Cooked is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with Cooked. If not, see http://www.gnu.org/licenses/.
27
28 */
29
30 // Exit if accessed directly.
31 if ( ! defined( 'ABSPATH' ) ) exit;
32
33 define( 'COOKED_VERSION', '1.7.11' );
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 * Main Cooked_Plugin Instance.
61 *
62 * Insures that only one instance of Cooked_Plugin exists in memory at any one
63 * time. Also prevents needing to define globals everywhere.
64 *
65 * @since 1.0.0
66 * @static
67 * @staticvar array $instance
68 * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
69 * @uses Cooked_Plugin::includes() Include the required files.
70 * @uses Cooked_Plugin::load_textdomain() load the language files.
71 * @see Cooked()
72 * @return object|Cooked_Plugin
73 */
74 public static function instance() {
75
76 if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
77
78 self::$instance = new Cooked_Plugin;
79 self::$instance->setup_constants();
80
81 add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
82
83 self::$instance->includes();
84 self::$instance->roles = new Cooked_Roles();
85 self::$instance->admin_menus = new Cooked_Admin_Menus();
86
87 if (is_admin()):
88 self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
89 else:
90 self::$instance->enqueues = new Cooked_Enqueues();
91 endif;
92
93 self::$instance->admin_settings = new Cooked_Settings();
94 self::$instance->migration = new Cooked_Migration();
95 self::$instance->post_types = new Cooked_Post_Types();
96 self::$instance->recipe_meta = new Cooked_Recipe_Meta();
97 self::$instance->recipe_meta = new Cooked_Measurements();
98 self::$instance->users = new Cooked_Users();
99 self::$instance->recipes = new Cooked_Recipes();
100 self::$instance->shortcodes = new Cooked_Shortcodes();
101 self::$instance->ajax = new Cooked_Ajax();
102 self::$instance->functions = new Cooked_Functions();
103 self::$instance->widget = new Cooked_Widgets();
104 self::$instance->gutenberg = new Cooked_Gutenberg();
105 self::$instance->elementor = new Cooked_Elementor();
106
107 self::$instance->module_setup();
108
109 }
110
111 return self::$instance;
112
113 }
114
115 private function module_setup(){
116
117 // Look for Cooked Modules
118 $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
119 if ($modules):
120 foreach($modules as $module_name):
121 if ($module_name !== '.' && $module_name !== '..'):
122 if ( file_exists( COOKED_DIR . 'modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php' ) ):
123 require_once COOKED_DIR . 'modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php';
124 endif;
125 endif;
126 endforeach;
127 endif;
128
129 // Look for Cooked Modules in Parent Theme
130 $parent_theme_folder = trailingslashit( get_template_directory() );
131 $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
132 if ($modules):
133 foreach($modules as $module_name):
134 if ($module_name !== '.' && $module_name !== '..'):
135 if ( file_exists( $parent_theme_folder . 'cooked-modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php' ) ):
136 require_once $parent_theme_folder . 'cooked-modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php';
137 endif;
138 endif;
139 endforeach;
140 endif;
141
142 // Look for Cooked Modules in Child Theme (if one is active)
143 $child_theme_folder = trailingslashit( get_stylesheet_directory() );
144 if ($child_theme_folder != $parent_theme_folder):
145 $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
146 if ($modules):
147 foreach($modules as $module_name):
148 if ($module_name !== '.' && $module_name !== '..'):
149 if ( file_exists( $child_theme_folder . 'cooked-modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php' ) ):
150 require_once $child_theme_folder . 'cooked-modules/'.esc_attr( $module_name ).'/'.esc_attr( $module_name ).'.php';
151 endif;
152 endif;
153 endforeach;
154 endif;
155 endif;
156
157 }
158
159 /**
160 * Throw error on object clone.
161 *
162 * The whole idea of the singleton design pattern is that there is a single
163 * object therefore, we don't want the object to be cloned.
164 *
165 * @since 1.0.0
166 * @access protected
167 * @return void
168 */
169 public function __clone() {
170 // Nope, can't do that.
171 return false;
172 }
173
174 /**
175 * Disable unserializing of the class.
176 *
177 * @since 1.0.0
178 * @access protected
179 * @return void
180 */
181 public function __wakeup() {
182 // Nope, can't do that either.
183 return false;
184 }
185
186 /**
187 * Setup plugin constants.
188 *
189 * @access private
190 * @since 1.0.0
191 * @return void
192 */
193 private function setup_constants() {
194
195 // Plugin Folder Path.
196 if ( ! defined( 'COOKED_DIR' ) ) {
197 define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
198 }
199
200 // Plugin Folder Name.
201 if ( ! defined( 'COOKED_FOLDER' ) ) {
202 $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
203 define( 'COOKED_FOLDER', $foldername );
204 }
205
206 // Plugin Root File.
207 if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
208 define( 'COOKED_PLUGIN_FILE', __FILE__ );
209 }
210
211 // Plugin Folder URL.
212 if ( ! defined( 'COOKED_URL' ) ) {
213 define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
214 }
215
216 // WordPress Ajax URL.
217 if ( ! defined( 'COOKED_AJAX_URL' ) ) {
218 define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
219 }
220
221 // Make sure CAL_GREGORIAN is defined.
222 if ( ! defined( 'CAL_GREGORIAN' ) ) {
223 define( 'CAL_GREGORIAN', 1 );
224 }
225
226 // Time Format
227 if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
228 define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
229 }
230
231 // Date Format
232 if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
233 define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
234 }
235
236 }
237
238 /**
239 * Include required files.
240 *
241 * @access private
242 * @since 1.0.0
243 * @return void
244 */
245 private function includes() {
246
247 require_once COOKED_DIR . 'includes/class.cooked-users.php';
248 require_once COOKED_DIR . 'includes/class.cooked-roles.php';
249 require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
250 require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
251 require_once COOKED_DIR . 'includes/class.cooked-seo.php';
252 require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
253 require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
254 require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
255 require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
256 require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
257 require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
258 require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
259 require_once COOKED_DIR . 'includes/class.cooked-settings.php';
260 require_once COOKED_DIR . 'includes/class.cooked-migration.php';
261 require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
262 require_once COOKED_DIR . 'includes/class.cooked-functions.php';
263 require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
264 require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
265 require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
266
267 }
268
269 /**
270 * Loads the plugin language files.
271 *
272 * @access public
273 * @since 1.0.0
274 * @return void
275 */
276 public function load_textdomain() {
277
278 /*
279 * When translating Cooked, be sure to move your language file into the proper location:
280 *
281 * - wp-content/languages/plugins/cooked
282 *
283 * If you do not move custom language files here, they will be lost when updating Cooked. Boxy Studio
284 * recommends Loco Translate for easy translations: https://boxystudio.ticksy.com/article/3235/
285 */
286
287 // Set filter for plugin's languages directory.
288 $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
289
290 // Traditional WordPress plugin locale filter.
291 $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
292 $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
293
294 // Look in wp-content/languages/plugins/cooked
295 $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
296
297 if ( file_exists( $lang_file_ext ) ) {
298
299 // Load the externally located language files.
300 load_textdomain( 'cooked', $lang_file_ext );
301
302 } else {
303
304 // Load the default language files.
305 load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
306
307 }
308
309 }
310
311 }
312
313 endif; // End if class_exists check.
314
315
316 // Uninstall Hook
317 register_uninstall_hook( __FILE__, 'cooked_uninstall' );
318 function cooked_uninstall(){
319 Cooked_Roles::remove_caps();
320 Cooked_Roles::remove_roles();
321 flush_rewrite_rules();
322 }
323
324
325 /**
326 * The main function for that returns Cooked_Plugin
327 *
328 * The main function responsible for returning the Cooked_Plugin
329 * Instance to functions everywhere.
330 *
331 * Use this function like you would a global variable, except without needing
332 * to declare the global.
333 *
334 * Example: <?php $cooked = Cooked(); ?>
335 *
336 * @since 1.0.0
337 * @return object|Cooked_Plugin
338 */
339 function Cooked() {
340 return Cooked_Plugin::instance();
341 }
342
343 // Let's get cooking!
344 $CookedPlugin = Cooked();
345