PluginProbe
Orderable – Restaurant & Food Ordering System / 1.8.2
Orderable – Restaurant & Food Ordering System v1.8.2
0.1.4 0.1.5 0.2.0 1.0.0 1.1.0 1.1.1 1.10.0 1.10.1 1.11.0 1.12.0 1.12.1 1.12.2 1.13.0 1.14.0 1.15.0 1.16.0 1.17.0 1.17.1 1.18.0 1.19.0 1.19.1 1.19.2 1.2.0 1.20.0 1.20.1 All 44 releases
orderable / orderable.php

orderable.php in Orderable – Restaurant & Food Ordering System 1.8.2, at orderable.php

222 lines 5.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: Orderable - Local Ordering System
4 * Author URI: https://orderable.com
5 * Description: Take local online ordering to a whole new level with Orderable.
6 * Version: 1.8.2
7 * Author: Orderable
8 * Text Domain: orderable
9 * WC requires at least: 5.4.0
10 * WC tested up to: 7.7
11 */
12
13 defined( 'ABSPATH' ) || exit;
14
15 /**
16 * Orderable main class.
17 */
18 class Orderable {
19 /**
20 * @var string Plugin version.
21 */
22 public static $version = '1.8.2';
23
24 /**
25 * @var string Required pro version.
26 */
27 public static $required_pro_version = '1.8.0';
28
29 /**
30 * Construct the plugin.
31 */
32 public function __construct() {
33 $this->define_constants();
34
35 add_action( 'init', array( $this, 'load_textdomain' ), 0 );
36 add_action( 'plugins_loaded', array( $this, 'run' ), 20 );
37
38 // Redirect to settings page on activate.
39 add_action( 'activated_plugin', array( $this, 'activate' ), 20 );
40 }
41
42 /**
43 * Load Textdomain.
44 */
45 public function load_textdomain() {
46 load_plugin_textdomain( 'orderable', false, ORDERABLE_LANGUAGES_PATH );
47 }
48
49 /**
50 * Run.
51 */
52 public function run() {
53 if ( ! self::is_woo_active() ) {
54 add_action( 'admin_notices', array( __CLASS__, 'orderable_notice_woocommerce' ) );
55
56 // If Woo is not active, don't run Orderable.
57 return;
58 }
59
60 $this->load_classes();
61 $this->update_check();
62 Orderable_Database::run();
63
64 if ( ! $this->validate_pro_version() ) {
65 add_action( 'admin_notices', array( __CLASS__, 'orderable_notice_pro_version' ) );
66
67 $this->define( 'ORDERABLE_PRO_INVALID', true );
68 }
69
70 do_action( 'orderable_init' );
71 }
72
73 /**
74 * Run when plugin activated.
75 *
76 * @param $plugin
77 *
78 * @return void
79 */
80 public function activate( $plugin ) {
81 if ( ! self::is_woo_active() ) {
82 return;
83 }
84
85 $checked = isset( $_REQUEST['checked'] ) ? $_REQUEST['checked'] : [];
86
87 // Ensure we are not doing a bulk activation.
88 if ( is_array( $checked ) && count( $checked ) > 1 ) {
89 return;
90 }
91
92 if ( ORDERABLE_BASENAME !== $plugin ) {
93 return;
94 }
95
96 wp_redirect( admin_url( 'admin.php?page=orderable-settings' ) );
97 exit;
98 }
99
100 /**
101 * Run script sif plugin version has changed.
102 */
103 private function update_check() {
104 if ( ORDERABLE_VERSION === get_site_option( 'orderable_version' ) ) {
105 return;
106 }
107
108 Orderable_Helpers::delete_orderable_transients();
109 update_option( 'orderable_version', ORDERABLE_VERSION );
110 }
111
112 /**
113 * Activate WooCommerce notice.
114 */
115 public static function orderable_notice_woocommerce() {
116 ?>
117 <div class="notice notice-error">
118 <p>
119 <?php _e( 'Orderable requires WooCommerce to be installed and activated.', 'orderable' ); ?>
120 </p>
121 </div>
122 <?php
123 }
124
125 /**
126 * Get Orderable pro version notice.
127 */
128 public static function orderable_notice_pro_version() {
129 ?>
130 <div class="notice notice-error">
131 <p>
132 <?php printf( __( 'Orderable Pro needs to be at least v%s for compatibility. Please update the Orderable Pro plugin.', 'orderable' ), self::$required_pro_version ); ?>
133 <a href="<?php echo esc_url( admin_url( 'update-core.php' ) ); ?>"><?php _e( 'Update now', 'orderable' ); ?></a>.
134 </p>
135 </div>
136 <?php
137 }
138
139 /**
140 * Define Constants.
141 */
142 private function define_constants() {
143 $this->define( 'ORDERABLE_PATH', plugin_dir_path( __FILE__ ) );
144 $this->define( 'ORDERABLE_URL', plugin_dir_url( __FILE__ ) );
145 $this->define( 'ORDERABLE_ASSETS_URL', ORDERABLE_URL . 'assets/' );
146 $this->define( 'ORDERABLE_INC_PATH', ORDERABLE_PATH . 'inc/' );
147 $this->define( 'ORDERABLE_MODULES_PATH', ORDERABLE_INC_PATH . 'modules/' );
148 $this->define( 'ORDERABLE_VENDOR_PATH', ORDERABLE_INC_PATH . 'vendor/' );
149 $this->define( 'ORDERABLE_TEMPLATES_PATH', ORDERABLE_PATH . 'templates/' );
150 $this->define( 'ORDERABLE_TPL_PATH', ORDERABLE_PATH . 'templates/' );
151 $this->define( 'ORDERABLE_BASENAME', plugin_basename( __FILE__ ) );
152 $this->define( 'ORDERABLE_LANGUAGES_PATH', dirname( ORDERABLE_BASENAME ) . '/languages/' );
153 $this->define( 'ORDERABLE_VERSION', self::$version );
154 }
155
156 /**
157 * Define constant if not already set.
158 *
159 * @param string $name
160 * @param string|bool $value
161 */
162 private function define( $name, $value ) {
163 if ( ! defined( $name ) ) {
164 define( $name, $value );
165 }
166 }
167
168 /**
169 * Load classes.
170 */
171 private function load_classes() {
172 require_once ORDERABLE_INC_PATH . 'database/class-database.php';
173 require_once ORDERABLE_INC_PATH . 'class-helpers.php';
174 require_once ORDERABLE_INC_PATH . 'class-settings.php';
175 require_once ORDERABLE_INC_PATH . 'class-modules.php';
176 require_once ORDERABLE_INC_PATH . 'class-assets.php';
177 require_once ORDERABLE_INC_PATH . 'class-products.php';
178 require_once ORDERABLE_INC_PATH . 'class-ajax.php';
179 require_once ORDERABLE_INC_PATH . 'class-orders.php';
180 require_once ORDERABLE_INC_PATH . 'class-admin-notices.php';
181 require_once ORDERABLE_INC_PATH . 'class-webhooks.php';
182 require_once ORDERABLE_INC_PATH . 'class-shortcodes.php';
183 require_once ORDERABLE_INC_PATH . 'class-ask-review.php';
184
185 Orderable_Settings::run();
186 Orderable_Assets::run();
187 Orderable_Modules::run();
188 Orderable_Products::run();
189 Orderable_Ajax::run();
190 Orderable_Shortcodes::run();
191 Orderable_Ask_Review::run();
192 }
193
194 /**
195 * Validate the Orderable core version number.
196 *
197 * @return bool
198 */
199 private static function validate_pro_version() {
200 if ( ! defined( 'ORDERABLE_PRO_VERSION' ) ) {
201 // Pro version is valid because it doesn't exist.
202 return true;
203 }
204
205 $pro_version = explode( '-', ORDERABLE_PRO_VERSION );
206
207 return version_compare( $pro_version[0], self::$required_pro_version, '>=' );
208 }
209
210 /**
211 * Is Woo active.
212 *
213 * @return bool
214 */
215 public static function is_woo_active() {
216 return in_array( 'woocommerce/woocommerce.php', (array) apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ||
217 in_array( 'woocommerce/woocommerce.php', array_keys( (array) get_site_option( 'active_sitewide_plugins' ), true ) );
218 }
219 }
220
221 $orderable = new Orderable();
222