# double-opt-in/2.11/core/Compatibility.class.php

Double Opt-In for Contact Form 7 – Secure, GDPR-Compliant Email Verification, version 2.11. 75 lines.

- Page: https://pluginprobe.com/plugins/double-opt-in/2.11/code/core/Compatibility.class.php
- Raw: https://pluginprobe.com/plugins/double-opt-in/2.11/raw/core/Compatibility.class.php
- Modified: 2022-12-16T11:04:54+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/double-opt-in/2.11/code/core/Compatibility.class.php#L10-L20`.

```php
<?php

namespace forge12\contactform7\CF7DoubleOptIn {
    if(!defined('ABSPATH')){
        exit;
    }

    /**
     * Class Compatibility
     */
    class Compatibility
    {
        /**
         * @var array<string, string>
         */
        private $components = array();

        /**
         * UI constructor.
         * @param $slug
         */
        public function __construct()
        {
            $this->load(dirname(dirname(__FILE__)) . '/compatibility', 0);

            add_action('after_setup_theme', function(){
                add_action('f12_cf7_doubleoptin_ui_after_load_compatibilities', array($this, 'registerComponents'), 10, 1);
                do_action('f12_cf7_doubleoptin_ui_after_load_compatibilities', $this);
            });
        }

        public function registerComponents($Compatibility)
        {
            foreach ($this->components as $component) {
                if (isset($component['name']) && isset($component['path'])) {
                    require_once($component['path']);
                    new $component['name']();
                }
            }
        }

        private function addComponent($name, $path)
        {
            $this->components[] = array(
                'name' => $name,
                'path' => $path
            );
        }

        private function load($directory, $lvl)
        {
            if (is_dir($directory)) {
                $handle = opendir($directory);

                if (!$handle) {
                    return;
                }

                while (false !== ($entry = readdir($handle))) {
                    if ($entry != '.' && $entry != '..') {
                        if (is_dir($directory . '/' . $entry) && $lvl == 0) {
                            $this->load($directory . '/' . $entry, $lvl + 1);
                        } else {
                            if (preg_match('!Controller([a-zA-Z_0-9]+)\.class\.php!', $entry, $matches)) {
                                if (isset($matches[1])) {
                                    $this->addComponent('\\'.__NAMESPACE__.'\Controller' . $matches[1], $directory . '/' . $entry);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
