| @@ -224,9 +224,223 @@ | ||
| 224 | 224 | } |
| 225 | 225 | } |
| 226 | 226 | |
| 227 | 227 | /** |
| 228 | - * Check if any shortcode starts with merchant. | |
| 228 | + * Check if Ohio theme is installed and active. | |
| 229 | + * | |
| 230 | + * @return bool | |
| 231 | + */ | |
| 232 | +if ( ! function_exists( 'merchant_is_ohio_active' ) ) { | |
| 233 | + function merchant_is_ohio_active() { | |
| 234 | + return function_exists( 'ohio_setup' ); | |
| 235 | + } | |
| 236 | +} | |
| 237 | + | |
| 238 | +if ( ! function_exists( 'merchant_supply_defaults' ) ) { | |
| 239 | + /** | |
| 240 | + * Recursively merge two arrays, preserving distinct values. | |
| 241 | + * | |
| 242 | + * Merges the provided arguments into the defaults recursively. If a key exists in both arrays | |
| 243 | + * and both values are arrays, they are merged recursively. Otherwise, the value from the | |
| 244 | + * arguments array overrides the default value. | |
| 245 | + * | |
| 246 | + * @param array $defaults The default array containing base values. | |
| 247 | + * @param array $args The arguments array containing values to override or supplement defaults. | |
| 248 | + * | |
| 249 | + * @return array The merged array with defaults supplemented or overridden by arguments. | |
| 250 | + */ | |
| 251 | + function merchant_supply_defaults( array $defaults, array $args ) { | |
| 252 | + $merged = $defaults; | |
| 253 | + foreach ( $args as $key => $value ) { | |
| 254 | + if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) { | |
| 255 | + $merged[ $key ] = merchant_supply_defaults( $merged[ $key ], $value ); | |
| 256 | + } else { | |
| 257 | + $merged[ $key ] = $value; | |
| 258 | + } | |
| 259 | + } | |
| 260 | + | |
| 261 | + return $merged; | |
| 262 | + } | |
| 263 | +} | |
| 264 | + | |
| 265 | +if ( ! function_exists( 'merchant_admin_upgrade_link' ) ) { | |
| 266 | + /** | |
| 267 | + * Get the Merchant Pro upgrade link. | |
| 268 | + * | |
| 269 | + * @param string $url The base URL for the upgrade link. | |
| 270 | + * @param array $args The arguments for the upgrade link. (Key-value pairs) | |
| 271 | + * @param string $type The type of upgrade link. | |
| 272 | + * | |
| 273 | + * @return string The upgrade link. | |
| 274 | + */ | |
| 275 | + function merchant_admin_upgrade_link( $url, $args = array(), $type = 'plugins-page-upgrade-link' ) { | |
| 276 | + if ( ! empty( $args ) ) { | |
| 277 | + $url = add_query_arg( $args, $url ); | |
| 278 | + } | |
| 279 | + | |
| 280 | + /** | |
| 281 | + * Modify upgrade link. | |
| 282 | + * | |
| 283 | + * @param string $url The upgrade link URL. | |
| 284 | + * @param string $type The type of upgrade link. | |
| 285 | + * | |
| 286 | + * @since 2.1.5 | |
| 287 | + * | |
| 288 | + */ | |
| 289 | + return apply_filters( 'merchant_upgrade_link', $url, $type ); | |
| 290 | + } | |
| 291 | +} | |
| 292 | + | |
| 293 | +if ( ! function_exists( 'merchant_pro_is_active' ) ) { | |
| 294 | + /** | |
| 295 | + * Check if Merchant Pro is active. | |
| 296 | + * | |
| 297 | + * @return bool | |
| 298 | + */ | |
| 299 | + function merchant_pro_is_active() { | |
| 300 | + return defined( 'MERCHANT_PRO_VERSION' ); | |
| 301 | + } | |
| 302 | +} | |
| 303 | + | |
| 304 | +if ( ! function_exists( 'merchant_pro_license_exists' ) ) { | |
| 305 | + /** | |
| 306 | + * Check if Merchant Pro license exists. | |
| 307 | + * | |
| 308 | + * @return bool | |
| 309 | + */ | |
| 310 | + function merchant_pro_license_exists() { | |
| 311 | + return ! empty( get_option( 'merchant_pro_license_key' ) ); | |
| 312 | + } | |
| 313 | +} | |
| 314 | + | |
| 315 | +if ( ! function_exists( 'merchant_white_label_get_settings' ) ) { | |
| 316 | + /** | |
| 317 | + * Read the White Label settings stored by the aThemes White Label plugin. | |
| 318 | + * | |
| 319 | + * That option is the single source of truth, so values stay shared whether | |
| 320 | + * they were saved from Merchant's settings or from the aThemes White Label plugin. | |
| 321 | + * | |
| 322 | + * @return array | |
| 323 | + */ | |
| 324 | + function merchant_white_label_get_settings() { | |
| 325 | + $settings = get_option( 'athemes_white_label_settings', array() ); | |
| 326 | + | |
| 327 | + return is_array( $settings ) ? $settings : array(); | |
| 328 | + } | |
| 329 | +} | |
| 330 | + | |
| 331 | +if ( ! function_exists( 'merchant_white_label_is_available' ) ) { | |
| 332 | + /** | |
| 333 | + * Whether this site is entitled to White Label. | |
| 334 | + * | |
| 335 | + * False in the free plugin alone. Merchant Pro answers the filter with its | |
| 336 | + * Agency-tier check, so the free plugin never calls into Pro. | |
| 337 | + * | |
| 338 | + * @return bool | |
| 339 | + */ | |
| 340 | + function merchant_white_label_is_available() { | |
| 341 | + /** | |
| 342 | + * Filter White Label entitlement. | |
| 343 | + * | |
| 344 | + * @param bool $available Whether the site is entitled. | |
| 345 | + * | |
| 346 | + * @since 2.3.1 | |
| 347 | + */ | |
| 348 | + return (bool) apply_filters( 'merchant_white_label_available', false ); | |
| 349 | + } | |
| 350 | +} | |
| 351 | + | |
| 352 | +if ( ! function_exists( 'merchant_white_label_switch_key' ) ) { | |
| 353 | + /** | |
| 354 | + * The key Merchant's own White Label switch is stored under. | |
| 355 | + * | |
| 356 | + * @return string | |
| 357 | + */ | |
| 358 | + function merchant_white_label_switch_key() { | |
| 359 | + return 'merchant_activate_white_label'; | |
| 360 | + } | |
| 361 | +} | |
| 362 | + | |
| 363 | +if ( ! function_exists( 'merchant_white_label_is_switched_on' ) ) { | |
| 364 | + /** | |
| 365 | + * Whether Merchant's own White Label switch is on. | |
| 366 | + * | |
| 367 | + * @return bool | |
| 368 | + */ | |
| 369 | + function merchant_white_label_is_switched_on() { | |
| 370 | + $options = get_option( 'merchant', array() ); | |
| 371 | + | |
| 372 | + if ( ! is_array( $options ) || empty( $options['white-label'] ) || ! is_array( $options['white-label'] ) ) { | |
| 373 | + return false; | |
| 374 | + } | |
| 375 | + | |
| 376 | + return ! empty( $options['white-label'][ merchant_white_label_switch_key() ] ); | |
| 377 | + } | |
| 378 | +} | |
| 379 | + | |
| 380 | +if ( ! function_exists( 'merchant_white_label_plugin_is_switched_on' ) ) { | |
| 381 | + /** | |
| 382 | + * Whether the aThemes White Label plugin's own switch is on. | |
| 383 | + * | |
| 384 | + * Every aThemes product shares this key, so it only speaks for Merchant while | |
| 385 | + * the aThemes White Label plugin is the one in charge. | |
| 386 | + * | |
| 387 | + * @return bool | |
| 388 | + */ | |
| 389 | + function merchant_white_label_plugin_is_switched_on() { | |
| 390 | + $settings = merchant_white_label_get_settings(); | |
| 391 | + | |
| 392 | + return ! empty( $settings['activate_white_label'] ); | |
| 393 | + } | |
| 394 | +} | |
| 395 | + | |
| 396 | +if ( ! function_exists( 'merchant_white_label_plugin_is_applying' ) ) { | |
| 397 | + /** | |
| 398 | + * Whether the aThemes White Label plugin is the one white-labelling this site. | |
| 399 | + * | |
| 400 | + * Installed is not enough: the plugin has to be switched on, and the shared | |
| 401 | + * key alone proves nothing, since Botiga Pro writes it too. | |
| 402 | + * | |
| 403 | + * @return bool | |
| 404 | + */ | |
| 405 | + function merchant_white_label_plugin_is_applying() { | |
| 406 | + return merchant_white_label_plugin_available() && merchant_white_label_plugin_is_switched_on(); | |
| 407 | + } | |
| 408 | +} | |
| 409 | + | |
| 410 | +if ( ! function_exists( 'merchant_white_label_is_applied' ) ) { | |
| 411 | + /** | |
| 412 | + * Whether White Label is in effect for Merchant. | |
| 413 | + * | |
| 414 | + * Either switch is enough. The plugin's own switch forces it on whatever our | |
| 415 | + * tier says, the way it always has; Merchant's switch answers for the rest, | |
| 416 | + * entitlement included — so a site with the plugin merely installed and | |
| 417 | + * switched off still gets to use the feature from here. | |
| 418 | + * | |
| 419 | + * @return bool | |
| 420 | + */ | |
| 421 | + function merchant_white_label_is_applied() { | |
| 422 | + if ( merchant_white_label_plugin_is_applying() ) { | |
| 423 | + return true; | |
| 424 | + } | |
| 425 | + | |
| 426 | + return merchant_white_label_is_switched_on() && merchant_white_label_is_available(); | |
| 427 | + } | |
| 428 | +} | |
| 429 | + | |
| 430 | +if ( ! function_exists( 'merchant_white_label_plugin_available' ) ) { | |
| 431 | + /** | |
| 432 | + * Whether the aThemes White Label plugin is installed. | |
| 433 | + * | |
| 434 | + * @return bool | |
| 435 | + */ | |
| 436 | + function merchant_white_label_plugin_available() { | |
| 437 | + return class_exists( 'aThemes_White_Label' ); | |
| 438 | + } | |
| 439 | +} | |
| 440 | + | |
| 441 | +/** | |
| 442 | + * Check if any shortcode starts with merchant doesn't exist. | |
| 229 | 443 | * If the shortcode is not registered, register it with return null to guarantee it exists. |
| 230 | 444 | */ |
| 231 | 445 | if ( ! function_exists( 'merchant_modules_shortcode_exists' ) ) { |
| 232 | 446 | function merchant_modules_shortcode_exists() { |
| @@ -265,8 +479,10 @@ | ||
| 265 | 479 | 'merchant_module_free_shipping_progress_bar_cart_page', |
| 266 | 480 | 'merchant_module_free_shipping_progress_bar_checkout_page', |
| 267 | 481 | 'merchant_module_quick_view', |
| 268 | 482 | 'merchant_module_real_time_search', |
| 483 | + 'merchant_reviews_carousel', | |
| 484 | + 'merchant_module_complementary_products', | |
| 269 | 485 | ) |
| 270 | 486 | ); |
| 271 | 487 | |
| 272 | 488 | // Loop through the shortcodes and register them if they don't exist. |