PluginProbe
Tiered Pricing Table for WooCommerce / 8.1.0
Tiered Pricing Table for WooCommerce v8.1.0
8.1.0 8.0.2 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 All 92 releases
tier-pricing-table / src / TierPricingTablePlugin.php

TierPricingTablePlugin.php in Tiered Pricing Table for WooCommerce 8.1.0, at src/TierPricingTablePlugin.php

305 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php namespace TierPricingTable;
2
3 use Automattic\WooCommerce\Utilities\FeaturesUtil;
4 use TierPricingTable\Addons\Addons;
5 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 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;
22
23 /**
24 * Class TierPricingTablePlugin
25 *
26 * @package TierPricingTable
27 */
28 class TierPricingTablePlugin {
29
30 use ServiceContainerTrait;
31
32 /**
33 * License instance
34 */
35 private Freemius $licence;
36
37 const VERSION = '8.1.0';
38
39 /**
40 * TierPricingTablePlugin constructor.
41 */
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
99 /**
100 * Entry point when every requirement is passed
101 */
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 } );
126 }
127
128 /**
129 * Add setting to plugin actions at plugins list
130 *
131 * @param array $actions
132 *
133 * @return array
134 */
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',
141 'tier-pricing-table' ) . '</b></a>';
142 }
143
144 return $actions;
145 }
146
147 public function addPluginsMeta( $links, $file ) {
148
149 if ( strpos( $file, 'tier-pricing-table' ) === false ) {
150 return $links;
151 }
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 }
166
167 /**
168 * Load plugin translations
169 */
170 public function loadTextDomain() {
171 $name = $this->getContainer()->getFileManager()->getPluginName();
172 load_plugin_textdomain( 'tier-pricing-table', false, $name . '/languages/' );
173 }
174
175 /**
176 * Fired after plugin uninstallation.
177 * This function is used to remove the activation timestamp option.
178 */
179 public static function uninstall() {
180 delete_option( 'tpt_plugin_activation_timestamp' );
181 }
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
218 /**
219 * Plugin activation
220 */
221 public function activate() {}
222
223 public static function getDocumentationURL(): string {
224 return 'https://tiered-pricing.com/documentation/user/';
225 }
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
235 /**
236 * Uses for separate rules during the import
237 *
238 * @return string
239 */
240 public static function getRulesSeparator(): string {
241 return apply_filters( 'tiered_pricing_table/rules_separator', ',' );
242 }
243
244 /**
245 * Separator between the quantity and the price inside one rule ("20:100") in CSV export.
246 * Spreadsheets read "20:100" as a time; a store that edits exports in Excel can switch to "=",
247 * which the importer accepts next to ":" out of the box.
248 */
249 public static function getRuleSeparator(): string {
250 $separator = (string) apply_filters( 'tiered_pricing_table/rule_separator', ':' );
251
252 return '' !== $separator ? $separator : ':';
253 }
254
255 /**
256 * Get current user the prices calculate for. Sometimes current user can be different from the logged-in user.
257 * For example, when admin creates an order for customer in administration panel
258 *
259 * @return WP_User
260 */
261 public static function getCurrentUser(): WP_User {
262
263 if ( ! empty( $GLOBALS['tpt_current_user_id'] ) ) {
264 $user = new WP_User( intval( $GLOBALS['tpt_current_user_id'] ) );
265 } else {
266 $user = wp_get_current_user();
267 }
268
269 return apply_filters( 'tiered_pricing_table/current_user', $user );
270 }
271
272 public static function getAvailablePricingLayouts() {
273 return apply_filters( 'tiered_pricing_table/pricing_layouts', array(
274 'table' => __( 'Table', 'tier-pricing-table' ),
275 'blocks' => __( 'Blocks', 'tier-pricing-table' ),
276 'options' => __( 'Options', 'tier-pricing-table' ),
277 'dropdown' => __( 'Dropdown', 'tier-pricing-table' ),
278 'horizontal-table' => __( 'Horizontal table', 'tier-pricing-table' ),
279 'plain-text' => __( 'Plain text', 'tier-pricing-table' ),
280 'tooltip' => __( 'Tooltip', 'tier-pricing-table' ),
281 ) );
282 }
283
284 /**
285 * Get current user roles
286 *
287 * @return array
288 */
289 public static function getCurrentUserRoles(): array {
290 $user = self::getCurrentUser();
291
292 return apply_filters( 'tiered_pricing_table/current_user_roles', $user->roles, get_current_user_id() );
293 }
294
295 public function saveActivationTime() {
296 if ( ! get_option( 'tpt_plugin_activation_timestamp', false ) ) {
297 update_option( 'tpt_plugin_activation_timestamp', time() );
298 }
299 }
300
301 public static function getPluginActivationDate(): ?int {
302 return intval( get_option( 'tpt_plugin_activation_timestamp', 0 ) );
303 }
304 }
305