• File: AddonsCache.php
  • Full Path: /home/matthif/www/wp-content/plugins/wpforms-lite/src/Admin/Addons/AddonsCache.php
  • Date Modified: 02/16/2024 11:45 AM
  • File size: 2.26 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace WPForms\Admin\Addons;

use 
WPForms\Helpers\CacheBase;

/**
 * Addons cache handler.
 *
 * @since 1.6.6
 */
class AddonsCache extends CacheBase {

    
/**
     * 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' => 'https://wpforms.com/wp-content/addons.json',

            
// 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',
        ];
    }

    
/**
     * 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 ) {

        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 for Sendinblue addon. The service was renamed to Brevo, but we keep the old slug for compatibility.
            
if ( $addon['slug'] === 'wpforms-sendinblue' ) {
                
$addon['icon'] = str_replace'sendinblue''brevo'$addon['icon'] );
            }

            
// Use slug as a key for further usage.
            
$addons_cache$addon['slug'] ] = $addon;
        }

        return 
$addons_cache;
    }
}