PluginProbe
Tiered Pricing Table for WooCommerce / 2.0
Tiered Pricing Table for WooCommerce v2.0
7.1.7 7.1.5 7.1.4 7.1.1 6.5.0 6.4.0 6.1.0 trunk 1.0 1.1 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 All 90 releases
← All changes | src/TierPricingTablePlugin.php +150 -244 trunk2.0 View file →
@@ -1,25 +1,12 @@
1 1 <?php namespace TierPricingTable;
2 2
3 -use Automattic\WooCommerce\Utilities\FeaturesUtil;
4 -use TierPricingTable\Addons\Addons;
3 +use Premmerce\SDK\V2\Notifications\AdminNotifier;
4 +use TierPricingTable\Settings\Settings;
5 +use Premmerce\SDK\V2\FileManager\FileManager;
5 6 use TierPricingTable\Admin\Admin;
6 -use TierPricingTable\Admin\Notifications\Notifications;
7 -use TierPricingTable\Blocks\GutenbergBlocks;
8 -use TierPricingTable\Core\AdminNotifier;
9 -use TierPricingTable\Core\Cache;
10 -use TierPricingTable\Core\FileManager;
11 -use TierPricingTable\Core\ServiceContainerTrait;
12 7 use TierPricingTable\Frontend\Frontend;
13 -use TierPricingTable\Integrations\Integrations;
14 -use TierPricingTable\Services\API\WooCommerceRestAPI;
15 -use TierPricingTable\Services\DebugService;
16 -use TierPricingTable\Services\ProductPageService;
17 -use TierPricingTable\Services\RegularPricingService;
18 -use TierPricingTable\Services\SystemStatusReportService;
19 -use TierPricingTable\Settings\Settings;
20 -use WC_Product;
21 -use WP_User;
8 +use TierPricingTable\BackgroundProcessing\Updater\Updater;
22 9
23 10 /**
24 11 * Class TierPricingTablePlugin
25 12 *
@@ -25,269 +12,188 @@
25 12 *
26 13 * @package TierPricingTable
27 14 */
28 15 class TierPricingTablePlugin {
29 -
30 - use ServiceContainerTrait;
31 -
16 +
32 17 /**
33 - * License instance
18 + * @var FileManager
34 19 */
35 - private Freemius $licence;
36 -
37 - const VERSION = '7.1.7';
38 -
20 + private $fileManager;
21 +
39 22 /**
40 - * TierPricingTablePlugin constructor.
23 + * @var Settings
41 24 */
42 - public function __construct( string $mainFile ) {
43 -
44 - $this->licence = new Freemius( $mainFile );
45 -
46 - // Core
47 - $this->getContainer()->add( 'fileManager', new FileManager( $mainFile, 'tiered-pricing-table' ) );
48 - $this->getContainer()->add( 'adminNotifier', new AdminNotifier() );
49 -
50 - $this->saveActivationTime();
51 - $this->declareCompatibilities();
52 - }
53 -
54 - public function declareCompatibilities() {
55 - add_action( 'before_woocommerce_init', function () {
56 - if ( class_exists( FeaturesUtil::class ) ) {
57 -
58 - $mainFile = $this->getContainer()->getFileManager()->getMainFile();
59 -
60 - FeaturesUtil::declare_compatibility( 'custom_order_tables', $mainFile );
61 - FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', $mainFile );
62 - FeaturesUtil::declare_compatibility( 'product_block_editor', $mainFile );
63 - }
64 - } );
65 - }
66 -
67 - public function initializationHooks() {
68 - add_action( 'init', array( $this, 'loadTextDomain' ), - 999 );
69 - add_filter( 'plugin_row_meta', array( $this, 'addPluginsMeta' ), 10, 2 );
70 - add_filter( 'plugin_action_links_' . plugin_basename( $this->getContainer()->getFileManager()->getMainFile() ),
71 - array( $this, 'addPluginActions' ), 10, 4 );
72 - }
73 -
74 - public function checkRequirements(): bool {
75 - if ( ! function_exists( 'is_plugin_active' ) ) {
76 - include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
77 - }
78 -
79 - // Check if WooCommerce is active
80 - if ( ! ( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) ) {
81 - /* translators: %s: required plugin */
82 - $message = sprintf( __( '<b>Tiered Pricing Table</b> plugin requires %s to be installed and activated.',
83 - 'tier-pricing-table' ),
84 - '<a target="_blank" href="https://wordpress.org/plugins/woocommerce/">WooCommerce</a>' );
85 -
86 - $this->getContainer()->getAdminNotifier()->push( $message, AdminNotifier::ERROR );
87 -
88 - return false;
89 - }
90 -
91 - // Check license
92 - if ( ! $this->licence->isValid() ) {
93 - return false;
94 - }
95 -
96 - return true;
97 - }
98 -
25 + private $settings;
26 +
99 27 /**
100 - * Entry point when every requirement is passed
28 + * @var AdminNotifier
101 29 */
102 - public function run() {
103 -
104 - $this->getContainer()->add( 'settings', new Settings() );
105 - $this->getContainer()->add( 'cache', new Cache() );
106 -
107 - $this->initializationHooks();
108 -
109 - new Frontend();
110 - new Admin();
111 -
112 - new Addons();
113 - new Integrations();
114 -
115 - $this->getContainer()->initService( Notifications::class );
116 -
117 - // Init Services
118 - add_action( 'init', function () {
119 - $this->getContainer()->initService( DebugService::class );
120 - $this->getContainer()->initService( SystemStatusReportService::class );
121 - $this->getContainer()->initService( RegularPricingService::class );
122 - $this->getContainer()->initService( ProductPageService::class );
123 - $this->getContainer()->initService( WooCommerceRestAPI::class );
124 - $this->getContainer()->initService( GutenbergBlocks::class );
125 - } );
30 + private $notifier;
31 +
32 + /**
33 + * @var Freemius
34 + */
35 + private $licence;
36 +
37 + const VERSION = '2.0';
38 +
39 + /**
40 + * TierPricingTablePlugin constructor.
41 + *
42 + * @param string $mainFile
43 + */
44 + public function __construct( $mainFile ) {
45 + $this->licence = new Freemius( $mainFile );
46 + $this->fileManager = new FileManager( $mainFile, 'tier-pricing-table' );
47 + $this->settings = new Settings( $this->fileManager );
48 + $this->notifier = new AdminNotifier();
49 +
50 + add_action( 'init', [ $this, 'loadTextDomain' ], - 999 );
51 + add_action( 'admin_init', [ $this, 'checkRequirePlugins' ] );
52 +
53 + add_filter( 'plugin_action_links_' . plugin_basename( $this->fileManager->getMainFile() ),
54 + [ $this, 'addPluginAction' ], 10, 4 );
126 55 }
127 -
56 +
128 57 /**
129 58 * Add setting to plugin actions at plugins list
130 59 *
131 - * @param array $actions
60 + * @param array $actions
132 61 *
133 62 * @return array
134 63 */
135 - public function addPluginActions( array $actions ): array {
136 - $actions[] = '<a href="' . $this->getContainer()->getSettings()->getLink() . '">' . __( 'Settings',
137 - 'tier-pricing-table' ) . '</a>';
138 -
139 - if ( ! tpt_fs()->can_use_premium_code() ) {
140 - $actions[] = '<a href="' . tpt_fs_activation_url() . '"><b style="color: red">' . __( 'Go Premium',
64 + public function addPluginAction( $actions ) {
65 + $actions[] = '<a href="' . $this->settings->getLink() . '">' . __( 'Settings', 'tier-pricing-table' ) . '</a>';
66 +
67 + if ( ! tpt_fs()->is_anonymous() ) {
68 + $actions[] = '<a href="' . $this->licence->getAccountPageUrl() . '"><b style="color: green">' . __( 'Account',
141 69 'tier-pricing-table' ) . '</b></a>';
142 70 }
143 -
71 +
72 + $actions[] = '<a href="' . $this->licence->getContactUsPageUrl() . '"><b style="color: green">' . __( 'Contact Us',
73 + 'tier-pricing-table' ) . '</b></a>';
74 +
144 75 return $actions;
145 76 }
146 -
147 - public function addPluginsMeta( $links, $file ) {
148 -
149 - if ( strpos( $file, 'tier-pricing-table' ) === false ) {
150 - return $links;
77 +
78 + /**
79 + * Run plugin part
80 + */
81 + public function run() {
82 + $valid = count( $this->validateRequiredPlugins() ) === 0 && $this->licence->isValid();
83 + $updater = new Updater();
84 +
85 + if ( $valid && ! $updater->checkForUpdates() ) {
86 +
87 + if ( is_admin() ) {
88 + new Admin( $this->fileManager, $this->licence, $this->settings );
89 + } else {
90 + new Frontend( $this->fileManager, $this->licence, $this->settings );
91 + }
92 +
93 + } else {
94 + $updater->update();
151 95 }
152 -
153 - $links['docs'] = '<a target="_blank" href="' . self::getDocumentationURL() . '">' . __( 'Documentation',
154 - 'tier-pricing-table' ) . '</a>';
155 -
156 - $links['contact-us'] = '<a href="' . self::getContactUsURL() . '"><b style="color: green">' . __( 'Contact Us',
157 - 'tier-pricing-table' ) . '</b></a>';
158 -
159 - if ( ! tpt_fs()->is_anonymous() && tpt_fs()->is_installed_on_site() ) {
160 - $links['account'] = '<a href="' . self::getAccountPageURL() . '"><b>' . __( 'My Account',
161 - 'tier-pricing-table' ) . '</b></a>';
162 - }
163 -
164 - return $links;
165 96 }
166 -
97 +
167 98 /**
168 99 * Load plugin translations
169 100 */
170 101 public function loadTextDomain() {
171 - $name = $this->getContainer()->getFileManager()->getPluginName();
102 + $name = $this->fileManager->getPluginName();
172 103 load_plugin_textdomain( 'tier-pricing-table', false, $name . '/languages/' );
173 104 }
174 -
105 +
175 106 /**
176 - * Fired after plugin uninstallation.
177 - * This function is used to remove the activation timestamp option.
107 + * Validate required plugins
108 + *
109 + * @return array
178 110 */
179 - public static function uninstall() {
180 - delete_option( 'tpt_plugin_activation_timestamp' );
111 + private function validateRequiredPlugins() {
112 + $plugins = [];
113 +
114 + if ( ! function_exists( 'is_plugin_active' ) ) {
115 + include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
116 + }
117 +
118 + /**
119 + * Check if WooCommerce is active
120 + **/
121 + if ( ! ( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) ) {
122 + $plugins[] = '<a target="_blank" href="https://wordpress.org/plugins/woocommerce/">WooCommerce</a>';
123 + }
124 +
125 + return $plugins;
181 126 }
182 -
183 - public static function getSupportedSimpleProductTypes(): array {
184 - return (array) apply_filters( 'tiered_pricing_table/supported_simple_product_types', array(
185 - 'simple',
186 - 'variation',
187 - 'subscription',
188 - 'subscription-variation',
189 - ) );
190 - }
191 -
192 - public static function getSupportedVariableProductTypes(): array {
193 - return (array) apply_filters( 'tiered_pricing_table/supported_variable_product_types', array(
194 - 'variable',
195 - 'variable-subscription',
196 - ) );
197 - }
198 -
199 - public static function getSupportedVariationProductTypes(): array {
200 - return (array) apply_filters( 'tiered_pricing_table/supported_variation_product_types', array(
201 - 'variation',
202 - 'subscription-variation',
203 - ) );
204 - }
205 -
206 - public static function isSimpleProductSupported( WC_Product $product ): bool {
207 - return in_array( $product->get_type(), self::getSupportedSimpleProductTypes() );
208 - }
209 -
210 - public static function isVariableProductSupported( WC_Product $product ): bool {
211 - return in_array( $product->get_type(), self::getSupportedVariableProductTypes() );
212 - }
213 -
214 - public static function isVariationProductSupported( WC_Product $product ): bool {
215 - return in_array( $product->get_type(), self::getSupportedVariationProductTypes() );
216 - }
217 -
127 +
218 128 /**
219 - * Plugin activation
129 + * Check required plugins and push notifications
220 130 */
221 - public function activate() {}
222 -
223 - public static function getDocumentationURL(): string {
224 - return 'https://tiered-pricing.com/documentation/user/';
131 + public function checkRequirePlugins() {
132 + $message = __( 'The %s plugin requires %s plugin to be active!', 'tier-pricing-table' );
133 +
134 + $plugins = $this->validateRequiredPlugins();
135 +
136 + if ( count( $plugins ) ) {
137 + foreach ( $plugins as $plugin ) {
138 + $error = sprintf( $message, 'Tiered Pricing Table', $plugin );
139 + $this->notifier->push( $error, AdminNotifier::ERROR, false );
140 + }
141 + }
225 142 }
226 -
227 - public static function getContactUsURL(): string {
228 - return admin_url( 'admin.php?page=tiered-pricing-table-contact-us' );
229 - }
230 -
231 - public static function getAccountPageURL(): string {
232 - return admin_url( 'admin.php?page=tiered-pricing-table-account' );
233 - }
234 -
143 +
235 144 /**
236 - * Uses for separate rules during the import
237 - *
238 - * @return string
145 + * Fired during plugin uninstall
239 146 */
240 - public static function getRulesSeparator(): string {
241 - return apply_filters( 'tiered_pricing_table/rules_separator', ',' );
147 + public static function uninstall() {
148 + delete_post_meta_by_key( '_price_rules' );
149 +
150 + delete_option( Settings::SETTINGS_PREFIX . 'display' );
151 + delete_option( Settings::SETTINGS_PREFIX . 'position_hook' );
152 + delete_option( Settings::SETTINGS_PREFIX . 'head_quantity_text' );
153 + delete_option( Settings::SETTINGS_PREFIX . 'head_price_text' );
154 + delete_option( Settings::SETTINGS_PREFIX . 'display_type' );
155 + delete_option( Settings::SETTINGS_PREFIX . 'selected_quantity_color' );
156 + delete_option( Settings::SETTINGS_PREFIX . 'table_title' );
157 + delete_option( Settings::SETTINGS_PREFIX . 'table_css_class' );
158 + delete_option( Settings::SETTINGS_PREFIX . 'tooltip_size' );
159 +
160 + delete_option( Settings::SETTINGS_PREFIX . 'show_discount_in_cart' );
161 + delete_option( Settings::SETTINGS_PREFIX . 'tiered_price_at_catalog' );
162 + delete_option( Settings::SETTINGS_PREFIX . 'show_discount_column' );
163 + delete_option( Settings::SETTINGS_PREFIX . 'tiered_price_at_catalog_type' );
164 + delete_option( Settings::SETTINGS_PREFIX . 'lowest_prefix' );
165 + delete_option( Settings::SETTINGS_PREFIX . 'head_discount_text' );
166 +
167 + delete_option(Updater::DB_OPTION);
242 168 }
243 -
169 +
244 170 /**
245 - * Get current user the prices calculate for. Sometimes current user can be different from the logged-in user.
246 - * For example, when admin creates an order for customer in administration panel
247 - *
248 - * @return WP_User
171 + * Plugin activation
249 172 */
250 - public static function getCurrentUser(): WP_User {
251 -
252 - if ( ! empty( $GLOBALS['tpt_current_user_id'] ) ) {
253 - $user = new WP_User( intval( $GLOBALS['tpt_current_user_id'] ) );
254 - } else {
255 - $user = wp_get_current_user();
256 - }
257 -
258 - return apply_filters( 'tiered_pricing_table/current_user', $user );
173 + public function activate() {
174 + set_transient( 'tiered_pricing_table_activated', true, 100 );
175 +
176 + add_option( Settings::SETTINGS_PREFIX . 'display', 'yes' );
177 + add_option( Settings::SETTINGS_PREFIX . 'position_hook', 'woocommerce_after_add_to_cart_button' );
178 + add_option( Settings::SETTINGS_PREFIX . 'head_quantity_text', __( 'Quantity', 'tier-pricing-table' ) );
179 + add_option( Settings::SETTINGS_PREFIX . 'head_price_text', __( 'Price', 'tier-pricing-table' ) );
180 + add_option( Settings::SETTINGS_PREFIX . 'display_type', 'table' );
181 + add_option( Settings::SETTINGS_PREFIX . 'selected_quantity_color', '#cc99c2' );
182 + add_option( Settings::SETTINGS_PREFIX . 'table_title', '' );
183 + add_option( Settings::SETTINGS_PREFIX . 'table_css_class', '' );
184 + add_option( Settings::SETTINGS_PREFIX . 'tooltip_size', 15 );
185 + add_option( Settings::SETTINGS_PREFIX . 'tooltip_border', 'yes' );
186 +
187 + // Premium
188 + add_option( Settings::SETTINGS_PREFIX . 'show_discount_in_cart', 'yes' );
189 + add_option( Settings::SETTINGS_PREFIX . 'tiered_price_at_catalog', 'yes' );
190 + add_option( Settings::SETTINGS_PREFIX . 'show_discount_column', 'yes' );
191 + add_option( Settings::SETTINGS_PREFIX . 'tiered_price_at_catalog_type', 'lowest' );
192 + add_option( Settings::SETTINGS_PREFIX . 'lowest_prefix', __( 'From', 'tier-pricing-table' ) );
193 + add_option( Settings::SETTINGS_PREFIX . 'head_discount_text', __( 'Discount (%)', 'tier-pricing-table' ) );
259 194 }
260 -
261 - public static function getAvailablePricingLayouts() {
262 - return apply_filters( 'tiered_pricing_table/pricing_layouts', array(
263 - 'table' => __( 'Table', 'tier-pricing-table' ),
264 - 'blocks' => __( 'Blocks', 'tier-pricing-table' ),
265 - 'options' => __( 'Options', 'tier-pricing-table' ),
266 - 'dropdown' => __( 'Dropdown', 'tier-pricing-table' ),
267 - 'horizontal-table' => __( 'Horizontal table', 'tier-pricing-table' ),
268 - 'plain-text' => __( 'Plain text', 'tier-pricing-table' ),
269 - 'tooltip' => __( 'Tooltip', 'tier-pricing-table' ),
270 - ) );
195 +
196 + public function deactivate() {
197 +
271 198 }
272 -
273 - /**
274 - * Get current user roles
275 - *
276 - * @return array
277 - */
278 - public static function getCurrentUserRoles(): array {
279 - $user = self::getCurrentUser();
280 -
281 - return apply_filters( 'tiered_pricing_table/current_user_roles', $user->roles, get_current_user_id() );
282 - }
283 -
284 - public function saveActivationTime() {
285 - if ( ! get_option( 'tpt_plugin_activation_timestamp', false ) ) {
286 - update_option( 'tpt_plugin_activation_timestamp', time() );
287 - }
288 - }
289 -
290 - public static function getPluginActivationDate(): ?int {
291 - return intval( get_option( 'tpt_plugin_activation_timestamp', 0 ) );
292 - }
293 -}
199 +}