09ef1f000f
- Theme: momentry (custom theme with REST API routes) - Plugins: code-snippets (contains all API proxies) - Languages: zh_TW translations - Excludes: cache, backups, uploads, logs
138 lines
2.9 KiB
PHP
138 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace WPForms\Admin\Addons;
|
|
|
|
use WPForms\Helpers\CacheBase;
|
|
|
|
/**
|
|
* Addons cache handler.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
class AddonsCache extends CacheBase {
|
|
|
|
/**
|
|
* Remote source URL.
|
|
*
|
|
* @since 1.8.9
|
|
*
|
|
* @var string
|
|
*/
|
|
const REMOTE_SOURCE = 'https://wpformsapi.com/feeds/v1/addons/';
|
|
|
|
/**
|
|
* Determine if the class is allowed to load.
|
|
*
|
|
* @since 1.6.8
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function allow_load() {
|
|
|
|
if ( wp_doing_cron() || wpforms_doing_wp_cli() ) {
|
|
return true;
|
|
}
|
|
|
|
$has_permissions = wpforms_current_user_can( [ 'create_forms', 'edit_forms' ] );
|
|
$allowed_requests = wpforms_is_admin_ajax() || wpforms_is_admin_page() || wpforms_is_admin_page( 'builder' );
|
|
|
|
return $has_permissions && $allowed_requests;
|
|
}
|
|
|
|
/**
|
|
* Provide settings.
|
|
*
|
|
* @since 1.6.6
|
|
*
|
|
* @return array Settings array.
|
|
*/
|
|
protected function setup() {
|
|
|
|
return [
|
|
|
|
// Remote source URL.
|
|
'remote_source' => $this->get_remote_source(),
|
|
|
|
// Addons cache file name.
|
|
'cache_file' => 'addons.json',
|
|
|
|
/**
|
|
* Time-to-live of the addons cache file in seconds.
|
|
*
|
|
* This applies to `uploads/wpforms/cache/addons.json` file.
|
|
*
|
|
* @since 1.6.8
|
|
*
|
|
* @param integer $cache_ttl Cache time-to-live, in seconds.
|
|
* Default value: WEEK_IN_SECONDS.
|
|
*/
|
|
'cache_ttl' => (int) apply_filters( 'wpforms_admin_addons_cache_ttl', WEEK_IN_SECONDS ),
|
|
|
|
// Scheduled update action.
|
|
'update_action' => 'wpforms_admin_addons_cache_update',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get remote source URL.
|
|
*
|
|
* @since 1.8.9
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function get_remote_source(): string {
|
|
|
|
return defined( 'WPFORMS_ADDONS_REMOTE_SOURCE' ) ? WPFORMS_ADDONS_REMOTE_SOURCE : self::REMOTE_SOURCE;
|
|
}
|
|
|
|
/**
|
|
* Prepare addons data to store in a local cache -
|
|
* generate addons icon image file name for further use.
|
|
*
|
|
* @since 1.6.6
|
|
*
|
|
* @param array $data Raw addons data.
|
|
*
|
|
* @return array Prepared data for caching (with icons).
|
|
*/
|
|
protected function prepare_cache_data( $data ): array {
|
|
|
|
if ( empty( $data ) || ! is_array( $data ) ) {
|
|
return [];
|
|
}
|
|
|
|
$addons_cache = [];
|
|
|
|
foreach ( $data as $addon ) {
|
|
|
|
// Addon icon.
|
|
$addon['icon'] = str_replace( 'wpforms-', 'addon-icon-', $addon['slug'] ) . '.png';
|
|
|
|
// Special case when plugin addon renamed, for instance:
|
|
// Sendinblue to Brevo, or ConvertKit to Kit,
|
|
// but we keep the old slug for compatibility.
|
|
foreach (
|
|
[
|
|
'wpforms-sendinblue' => [
|
|
'old' => 'sendinblue',
|
|
'new' => 'brevo',
|
|
],
|
|
'wpforms-convertkit' => [
|
|
'old' => 'convertkit',
|
|
'new' => 'kit',
|
|
],
|
|
] as $slug => $renamed
|
|
) {
|
|
if ( $addon['slug'] === $slug ) {
|
|
$addon['icon'] = str_replace( $renamed['old'], $renamed['new'], $addon['icon'] );
|
|
}
|
|
}
|
|
|
|
// Use slug as a key for further usage.
|
|
$addons_cache[ $addon['slug'] ] = $addon;
|
|
}
|
|
|
|
return $addons_cache;
|
|
}
|
|
}
|