• File: importable-detector-service.php
  • Full Path: /home/matthif/www/wp-content/plugins/wordpress-seo/src/services/importing/importable-detector-service.php
  • Date Modified: 02/24/2024 11:29 PM
  • File size: 2.52 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace Yoast\WP\SEO\Services\Importing;

use 
Yoast\WP\SEO\Actions\Importing\Importing_Action_Interface;

/**
 * Detects if any data from other SEO plugins is available for importing.
 */
class Importable_Detector_Service {

    
/**
     * All known import actions
     *
     * @var array|Importing_Action_Interface[]
     */
    
protected $importers;

    
/**
     * Importable_Detector_Service constructor.
     *
     * @param Importing_Action_Interface ...$importers All of the known importers.
     */
    
public function __constructImporting_Action_Interface ...$importers ) {
        
$this->importers $importers;
    }

    
/**
     * Returns the detected importers that have data to work with.
     *
     * @param string|null $plugin The plugin name of the importer.
     * @param string|null $type   The type of the importer.
     *
     * @return array The detected importers that have data to work with.
     */
    
public function detect_importers$plugin null$type null ) {
        
$detectors $this->filter_actions$this->importers$plugin$type );

        
$detected = [];
        foreach ( 
$detectors as $detector ) {
            if ( 
$detector->is_enabled() && $detector->get_type() !== 'cleanup' && ! $detector->get_completed() && $detector->get_limited_unindexed_count) > ) {
                
$detected$detector->get_plugin() ][] = $detector->get_type();
            }
        }

        return 
$detected;
    }

    
/**
     * Returns the detected cleanups that have data to work with.
     *
     * @param string|null $plugin The plugin name of the cleanup.
     *
     * @return array The detected importers that have data to work with.
     */
    
public function detect_cleanups$plugin null ) {
        
$detectors $this->filter_actions$this->importers$plugin'cleanup' );

        
$detected = [];
        foreach ( 
$detectors as $detector ) {
            if ( 
$detector->is_enabled() && ! $detector->get_completed() && $detector->get_limited_unindexed_count) > ) {
                
$detected$detector->get_plugin() ][] = $detector->get_type();
            }
        }

        return 
$detected;
    }

    
/**
     * Filters all import actions from a list that do not match the given Plugin or Type.
     *
     * @param Importing_Action_Interface[] $all_actions The complete list of actions.
     * @param string|null                  $plugin      The Plugin name whose actions to keep.
     * @param string|null                  $type        The type of actions to keep.
     *
     * @return array
     */
    
public function filter_actions$all_actions$plugin null$type null ) {
        return 
\array_filter(
            
$all_actions,
            static function ( 
$action ) use ( $plugin$type ) {
                return 
$action->is_compatible_with$plugin$type );
            }
        );
    }
}