Plugin Directory

Changeset 2708216


Ignore:
Timestamp:
04/11/2022 08:12:22 PM (4 years ago)
Author:
cleverplugins
Message:

Code hardening and verified compatibility with WP 5.9.3

Location:
remove-xmlrpc-pingback-ping
Files:
97 added
10 edited

Legend:

Unmodified
Added
Removed
  • remove-xmlrpc-pingback-ping/trunk/README.txt

    r2581091 r2708216  
    11=== Remove & Disable XML-RPC Pingback ===
    2 Contributors: cleverplugins, lkoudal
     2Contributors: lkoudal, cleverplugins
    33Tags: xmlrpc, xml-rpc, ping, pingback, disable ping, disable xmlrpc, disable pingback, disable xml-rpc
    44Requires at least: 5.2
    55Requires PHP: 5.6
    6 Tested up to: 5.8
    7 Stable tag: 1.4
     6Tested up to: 5.9.3
     7Stable tag: 1.5
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    3636= Why Not Just Disable XMLRPC Altogether? =
    3737
    38 Yes, you can choose to do that, but if you use popular plugins like JetPack (that use XMLRPC) then those plugins will stop working 100%. That is why this small plugin exists.
     38Yes, you can choose to do that, but if you use popular plugins like JetPack (that use XMLRPC) then those plugins will stop working. That is why this small plugin exists.
    3939
    4040== Installation ==
     
    7575== Changelog ==
    7676
     77= 1.5 =
     78* Code hardening.
     79* Verified compatibility with WP 5.9.3
     80
     81
    7782= 1.4 =
    7883* New: Added a count under "Settings -> General" to see number of blocked attempts.
     
    9499= 1.0.0 =
    95100* First release
     101
     102== Upgrade Notice ==
     103
     104= 1.5 =
     105Worth the update...
  • remove-xmlrpc-pingback-ping/trunk/remove-xmlrpc-pingback-ping.php

    r2581091 r2708216  
    44Plugin URI:        http://wordpress.org/plugins/remove-xmlrpc-pingback-ping
    55Description:       Prevent WordPress from participating in and being a victim of pingback denial of service attacks.
    6 Version:           1.4
     6Version:           1.5
    77Author:            WP Security Ninja
    88Author URI:        https://wpsecurityninja.com/
     
    2828
    2929// If this file is called directly, abort.
    30 if ( ! defined( 'WPINC' ) ) {
     30if (!defined('WPINC')) {
    3131    die;
    3232}
    3333
    34     define( 'RXPP_PLUGIN_URL', plugin_dir_path( __FILE__ ) );
    35 
    36     require RXPP_PLUGIN_URL . 'vendor/autoload.php';
    37     add_action( 'admin_init', array( 'PAnD', 'init' ) );
    38 
    39     add_filter( 'admin_init', 'xrpp_settings_register_fields' );
    40     add_action( 'admin_notices', 'xrpp_admin_notice_blocked_attempts' );
    41     add_filter( 'xmlrpc_methods', 'rxpp_remove_xmlrpc_pingback_ping' );
    42     register_uninstall_hook( __FILE__, 'do_rxpp_uninstall_function' );
    43 
    44     /**
    45      * Returns current plugin version (read dynamically from file itself)
    46      *
    47      * @author  Lars Koudal
    48      * @since   v0.0.1
    49      * @version v1.0.0  Monday, August 9th, 2021.
    50      * @access  public static
    51      * @return  mixed
    52      */
    53 function xrpp_get_plugin_version() {
    54     $plugin_data = get_file_data( __FILE__, array( 'version' => 'Version' ), 'plugin' );
     34define('RXPP_PLUGIN_URL', plugin_dir_path(__FILE__));
     35
     36require RXPP_PLUGIN_URL . 'vendor/autoload.php';
     37add_action('admin_init', array('PAnD', 'init'));
     38
     39add_filter('admin_init', 'xrpp_settings_register_fields');
     40add_action('admin_notices', 'xrpp_admin_notice_blocked_attempts');
     41add_filter('xmlrpc_methods', 'rxpp_remove_xmlrpc_pingback_ping');
     42register_uninstall_hook(__FILE__, 'do_rxpp_uninstall_function');
     43
     44/**
     45 * Returns current plugin version (read dynamically from file itself)
     46 *
     47 * @author  Lars Koudal
     48 * @since   v0.0.1
     49 * @version v1.0.0  Monday, August 9th, 2021.
     50 * @access  public static
     51 * @return  mixed
     52 */
     53function xrpp_get_plugin_version()
     54{
     55    $plugin_data = get_file_data(__FILE__, array('version' => 'Version'), 'plugin');
    5556    return $plugin_data['version'];
    5657}
     
    5859
    5960
    60     /**
    61      * xrpp_admin_notice_blocked_attempts.
    62      *
    63      * @author  Lars Koudal
    64      * @since   v0.0.1
    65      * @version v1.0.0  Monday, August 9th, 2021.
    66      * @return  void
    67      */
    68 function xrpp_admin_notice_blocked_attempts() {
    69 
    70     if ( PAnD::is_admin_notice_active( 'xrpp-newsletter-notice-30' ) ) {
    71         ?>
    72 <div data-dismissible="xrpp-newsletter-notice-30" class="updated notice notice-success is-dismissible">
    73 <h3>Join the WP Security Ninja Newsletter</h3>
    74 
    75 <p>WordPress security made easy - Protect your website from hackers and malicious software.</p>
    76 
    77 <form class="ml-block-form" action="https://static.mailerlite.com/webforms/submit/h9i9y0" data-code="h9i9y0" method="post" target="_blank">
    78 
    79 <table>
    80     <tbody>
    81         <tr>
    82             <td>
    83             <img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) . 'images/sn-icon.png' ); ?>"  class="alignleft" width="100" style="margin-right:10px;" alt="Sign up for wpsecurityninja.com newsletter">
    84             </td>
    85         <td>
    86             <input type="text" class="regular-text" data-inputmask="" name="fields[name]" placeholder="Name" autocomplete="name" style="width:15em;">
    87         </td>
    88         <td>
    89             <input aria-label="email" aria-required="true" data-inputmask="" type="email" class="regular-text required email" data-inputmask="" name="fields[email]" placeholder="Email" autocomplete="email" style="width:15em;">
    90         </td>
    91         <td>
    92         <button type="submit" class="button button-primary">Subscribe</button>
    93         </td>
    94         </tr>
    95     </table>
    96 
    97     <input type="hidden" name="fields[signupsource]" value="RXPP Plugin <?php echo esc_attr( xrpp_get_plugin_version() ); ?>">
    98 <input type="hidden" name="ml-submit" value="1">
    99 <input type="hidden" name="anticsrf" value="true">
    100 </form>
    101 <p>You can unsubscribe anytime. For more details, review our <a href="https://wpsecurityninja.com/privacy-policy/" target="_blank">Privacy Policy</a>.</p>
    102 <p><small>Signup form is shown every 30 days until dismissed</small></p>
     61/**
     62 * xrpp_admin_notice_blocked_attempts.
     63 *
     64 * @author  Lars Koudal
     65 * @since   v0.0.1
     66 * @version v1.0.0  Monday, August 9th, 2021.
     67 * @return  void
     68 */
     69function xrpp_admin_notice_blocked_attempts()
     70{
     71
     72    if (PAnD::is_admin_notice_active('xrpp-newsletter-notice-30')) {
     73
     74        $current_user = wp_get_current_user();
     75        $admin_name   = $current_user->user_firstname;
     76
     77        if ($current_user->user_lastname) {
     78            $admin_name .= ' ' . $current_user->user_lastname;
     79        }
     80?>
     81        <div data-dismissible="xrpp-newsletter-notice-30" class="updated notice notice-success is-dismissible">
     82            <h3>Join the WP Security Ninja Newsletter</h3>
     83
     84            <p>WordPress security made easy - Protect your website from hackers and malicious software.</p>
     85
     86            <form class="ml-block-form" action="https://static.mailerlite.com/webforms/submit/h9i9y0" data-code="h9i9y0" method="post" target="_blank">
     87
     88                <table>
     89                    <tbody>
     90                        <tr>
     91                            <td>
     92                                <img src="<?php echo esc_url(plugin_dir_url(__FILE__) . 'images/sn-icon.png'); ?>" class="alignleft" width="100" style="margin-right:10px;" alt="Sign up for wpsecurityninja.com newsletter">
     93                            </td>
     94                            <td>
     95                                <input type="text" class="regular-text" data-inputmask="" name="fields[name]" placeholder="Name" autocomplete="name" value="<?php echo esc_html($admin_name); ?>" style="width:15em;">
     96                            </td>
     97                            <td>
     98                                <input aria-label="email" aria-required="true" data-inputmask="" type="email" class="regular-text required email" data-inputmask="" name="fields[email]" placeholder="Email" autocomplete="email" value="<?php echo esc_html($current_user->user_email); ?>" style="width:15em;">
     99                            </td>
     100                            <td>
     101                                <button type="submit" class="button button-primary">Subscribe</button>
     102                            </td>
     103                        </tr>
     104                </table>
     105
     106                <input type="hidden" name="fields[signupsource]" value="RXPP Plugin <?php echo esc_attr(xrpp_get_plugin_version()); ?>">
     107                <input type="hidden" name="ml-submit" value="1">
     108                <input type="hidden" name="anticsrf" value="true">
     109            </form>
     110            <p>You can unsubscribe anytime. For more details, review our <a href="https://wpsecurityninja.com/privacy-policy/" target="_blank">Privacy Policy</a>.</p>
     111            <p><small>Signup form is shown every 30 days until dismissed</small></p>
    103112        </div>
    104113
    105         <?php
     114    <?php
    106115    }
    107116
    108     if ( ! PAnD::is_admin_notice_active( 'xrpp-admin-notice-14' ) ) {
     117    if (!PAnD::is_admin_notice_active('xrpp-admin-notice-14')) {
    109118        return;
    110119    }
    111     $rxpp_blocked_methods_count = get_option( 'rxpp_blocked_methods_count', false );
     120    $rxpp_blocked_methods_count = get_option('rxpp_blocked_methods_count', false);
    112121    ?>
    113         <div data-dismissible="xrpp-admin-notice-14" class="updated notice notice-success is-dismissible">
    114             <h2>Protected from XML-RPC pingback DOS attacks!</h2>
    115             <p>You are preventing denial of service attacks on your website.</p>
     122    <div data-dismissible="xrpp-admin-notice-14" class="updated notice notice-success is-dismissible">
     123        <h2>You are protected from XML-RPC pingback DOS attacks!</h2>
     124        <p>You are preventing denial of service attacks on your website.</p>
    116125        <?php
    117         if ( $rxpp_blocked_methods_count ) {
    118             ?>
    119                 <p><strong>
    120                 <?php
    121                 // translators: Show number of attempts blocked so far
    122                 printf( esc_html__( '%s blocked attempts so far!', 'remove-xmlrpc-pingback-ping' ), esc_attr( $rxpp_blocked_methods_count ) );
    123                 ?>
     126        if ($rxpp_blocked_methods_count) {
     127        ?>
     128            <p><strong>
     129                    <?php
     130                    // translators: Show number of attempts blocked so far
     131                    printf(esc_html__('%s blocked attempts so far!', 'remove-xmlrpc-pingback-ping'), esc_attr($rxpp_blocked_methods_count));
     132                    ?>
    124133                </strong></p>
    125                 <?php
     134        <?php
    126135        }
    127136        ?>
    128 
    129 
    130             <p>Serious about security? Try out our Security Ninja plugin that protects you for many more security problems.</p>
     137<?php
     138
     139$current_user = wp_get_current_user();
     140$admin_name   = $current_user->user_firstname;
     141
     142if ($current_user->user_lastname) {
     143    $admin_name .= ' ' . $current_user->user_lastname;
     144}
     145
     146if ('' === $admin_name) {
     147    $admin_name = $current_user->display_name;
     148}
     149?>
     150
     151        <p>Serious about security? Try out our Security Ninja plugin that protects you for many more security problems. <a class="button button-primary button-small" href="https://wpsecurityninja.com/?utm_source=remove_xmlrpc_plugin&utm_medium=plugin&utm_content=notice" aria-label="Visit wpsecurityninja.com now" data-name="WP Security Ninja" target="_blank" rel="noopener">Visit wpsecurityninja.com</a></p>
     152
     153        <form class="ml-block-form" action="https://static.mailerlite.com/webforms/submit/h9i9y0" data-code="h9i9y0" method="post" target="_blank">
     154            <hr>
     155            <p>Sign up for our newsletter here:</p>
    131156            <table>
    132                 <th>
    133                     <td>
    134                         <a class="button button-secondary" href="https://wpsecurityninja.com/?utm_source=remove_xmlrpc_plugin&utm_medium=plugin&utm_content=notice" aria-label="Visit wpsecurityninja.com now" data-name="WP Security Ninja" target="_blank" rel="noopener">Visit wpsecurityninja.com</a>
    135                     </td>
    136                     <td>or</td>
    137                     <td>
    138                         <a class="button button-primary" href="<?php echo esc_url( admin_url( 'plugin-install.php?s="Security+Ninja+–+Secure+Firewall+%26+Secure+Malware+Scanner"+"WP+Security+Ninja"&tab=search&type=term' ) ); ?>" aria-label="Install WP Security Ninja free" data-name="WP Security Ninja">Install for free</a>
    139                     </td>
    140                 </th>
     157                <tbody>
     158                    <tr>
     159                        <td>
     160                            <input type="text" class="regular-text" data-inputmask="" name="fields[name]" placeholder="Name" autocomplete="name" value="<?php echo esc_html($admin_name); ?>" style="width:15em;">
     161                        </td>
     162                        <td>
     163                            <input aria-label="email" aria-required="true" data-inputmask="" type="email" class="regular-text required email" data-inputmask="" name="fields[email]" placeholder="Email" autocomplete="email" value="<?php echo esc_html($current_user->user_email); ?>" style="width:15em;">
     164                        </td>
     165                        <td>
     166                            <button type="submit" class="button button-primary">Subscribe</button>
     167                        </td>
     168                    </tr>
    141169            </table>
    142             <p></p>
    143 
    144         </div>
    145         <?php
    146 }
    147 
    148 
    149 
    150     /**
    151      * rxpp_remove_xmlrpc_pingback_ping.
    152      *
    153      * @author  Lars Koudal
    154      * @since   v0.0.1
    155      * @version v1.0.0  Monday, August 9th, 2021.
    156      * @param   mixed   $methods
    157      * @return  mixed
    158      */
    159 function rxpp_remove_xmlrpc_pingback_ping( $methods ) {
    160     unset( $methods['pingback.ping'] );
     170
     171            <input type="hidden" name="fields[signupsource]" value="RXPP Plugin <?php echo esc_attr(xrpp_get_plugin_version()); ?>">
     172            <input type="hidden" name="ml-submit" value="1">
     173            <input type="hidden" name="anticsrf" value="true">
     174        </form>
     175<br/>
     176
     177
     178    </div>
     179<?php
     180}
     181
     182
     183
     184/**
     185 * rxpp_remove_xmlrpc_pingback_ping.
     186 *
     187 * @author  Lars Koudal
     188 * @since   v0.0.1
     189 * @version v1.0.0  Monday, August 9th, 2021.
     190 * @param   mixed   $methods
     191 * @return  mixed
     192 */
     193function rxpp_remove_xmlrpc_pingback_ping($methods)
     194{
     195    unset($methods['pingback.ping']);
    161196    // update count
    162     $rxpp_blocked_methods_count = get_option( 'rxpp_blocked_methods_count', 0 );
     197    $rxpp_blocked_methods_count = get_option('rxpp_blocked_methods_count', 0);
    163198    $rxpp_blocked_methods_count++;
    164     update_option( 'rxpp_blocked_methods_count', $rxpp_blocked_methods_count, false );
     199    update_option('rxpp_blocked_methods_count', $rxpp_blocked_methods_count, false);
    165200    return $methods;
    166201}
    167202
    168203
    169     /**
    170      * do_rxpp_uninstall_function.
    171      *
    172      * @author  Lars Koudal
    173      * @since   v0.0.1
    174      * @version v1.0.0  Monday, August 9th, 2021.
    175      * @return  void
    176      */
    177 function do_rxpp_uninstall_function() {
    178     delete_option( 'rxpp_blocked_methods_count' );
     204/**
     205 * do_rxpp_uninstall_function.
     206 *
     207 * @author  Lars Koudal
     208 * @since   v0.0.1
     209 * @version v1.0.0  Monday, August 9th, 2021.
     210 * @return  void
     211 */
     212function do_rxpp_uninstall_function()
     213{
     214    delete_option('rxpp_blocked_methods_count');
    179215}
    180216
     
    189225 * @return  void
    190226 */
    191 function xrpp_settings_register_fields() {
    192         register_setting( 'general', 'blocked_pingback_ping', 'esc_attr' );
    193         add_settings_field( 'blocked_pingback_ping', '<label for="blocked_pingback_ping">' . __( 'Blocked pingback.ping attacks', 'xrpp_blocked_count' ) . '</label>', 'xrpp_settings_fields_html', 'general' );
     227function xrpp_settings_register_fields()
     228{
     229    register_setting('general', 'blocked_pingback_ping', 'esc_attr');
     230    add_settings_field('blocked_pingback_ping', '<label for="blocked_pingback_ping">' . __('Blocked pingback.ping attacks', 'xrpp_blocked_count') . '</label>', 'xrpp_settings_fields_html', 'general');
    194231}
    195232
     
    204241 * @return  void
    205242 */
    206 function xrpp_settings_fields_html() {
    207         $value = get_option( 'rxpp_blocked_methods_count', 0 );
    208     echo esc_html( number_format_i18n( $value ) );
     243function xrpp_settings_fields_html()
     244{
     245    $value = get_option('rxpp_blocked_methods_count', 0);
     246    echo esc_html(number_format_i18n($value));
    209247    echo '<p class="description">Proteced by the Remove & Disable XML-RPC Pingback plugin.</p>';
    210248}
    211 
    212 
    213 
    214 
    215 
  • remove-xmlrpc-pingback-ping/trunk/vendor/autoload.php

    r2385891 r2708216  
    33// autoload.php @generated by Composer
    44
     5if (PHP_VERSION_ID < 50600) {
     6    echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
     7    exit(1);
     8}
     9
    510require_once __DIR__ . '/composer/autoload_real.php';
    611
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/ClassLoader.php

    r2581091 r2708216  
    3838 * @author Fabien Potencier <[email protected]>
    3939 * @author Jordi Boggiano <[email protected]>
    40  * @see    http://www.php-fig.org/psr/psr-0/
    41  * @see    http://www.php-fig.org/psr/psr-4/
     40 * @see    https://www.php-fig.org/psr/psr-0/
     41 * @see    https://www.php-fig.org/psr/psr-4/
    4242 */
    4343class ClassLoader
    4444{
     45    /** @var ?string */
     46    private $vendorDir;
     47
    4548    // PSR-4
     49    /**
     50     * @var array[]
     51     * @psalm-var array<string, array<string, int>>
     52     */
    4653    private $prefixLengthsPsr4 = array();
     54    /**
     55     * @var array[]
     56     * @psalm-var array<string, array<int, string>>
     57     */
    4758    private $prefixDirsPsr4 = array();
     59    /**
     60     * @var array[]
     61     * @psalm-var array<string, string>
     62     */
    4863    private $fallbackDirsPsr4 = array();
    4964
    5065    // PSR-0
     66    /**
     67     * @var array[]
     68     * @psalm-var array<string, array<string, string[]>>
     69     */
    5170    private $prefixesPsr0 = array();
     71    /**
     72     * @var array[]
     73     * @psalm-var array<string, string>
     74     */
    5275    private $fallbackDirsPsr0 = array();
    5376
     77    /** @var bool */
    5478    private $useIncludePath = false;
     79
     80    /**
     81     * @var string[]
     82     * @psalm-var array<string, string>
     83     */
    5584    private $classMap = array();
     85
     86    /** @var bool */
    5687    private $classMapAuthoritative = false;
     88
     89    /**
     90     * @var bool[]
     91     * @psalm-var array<string, bool>
     92     */
    5793    private $missingClasses = array();
     94
     95    /** @var ?string */
    5896    private $apcuPrefix;
    5997
     98    /**
     99     * @var self[]
     100     */
     101    private static $registeredLoaders = array();
     102
     103    /**
     104     * @param ?string $vendorDir
     105     */
     106    public function __construct($vendorDir = null)
     107    {
     108        $this->vendorDir = $vendorDir;
     109    }
     110
     111    /**
     112     * @return string[]
     113     */
    60114    public function getPrefixes()
    61115    {
     
    67121    }
    68122
     123    /**
     124     * @return array[]
     125     * @psalm-return array<string, array<int, string>>
     126     */
    69127    public function getPrefixesPsr4()
    70128    {
     
    72130    }
    73131
     132    /**
     133     * @return array[]
     134     * @psalm-return array<string, string>
     135     */
    74136    public function getFallbackDirs()
    75137    {
     
    77139    }
    78140
     141    /**
     142     * @return array[]
     143     * @psalm-return array<string, string>
     144     */
    79145    public function getFallbackDirsPsr4()
    80146    {
     
    82148    }
    83149
     150    /**
     151     * @return string[] Array of classname => path
     152     * @psalm-return array<string, string>
     153     */
    84154    public function getClassMap()
    85155    {
     
    88158
    89159    /**
    90      * @param array $classMap Class to filename map
     160     * @param string[] $classMap Class to filename map
     161     * @psalm-param array<string, string> $classMap
     162     *
     163     * @return void
    91164     */
    92165    public function addClassMap(array $classMap)
     
    103176     * appending or prepending to the ones previously set for this prefix.
    104177     *
    105      * @param string       $prefix  The prefix
    106      * @param array|string $paths   The PSR-0 root directories
    107      * @param bool         $prepend Whether to prepend the directories
     178     * @param string          $prefix  The prefix
     179     * @param string[]|string $paths   The PSR-0 root directories
     180     * @param bool            $prepend Whether to prepend the directories
     181     *
     182     * @return void
    108183     */
    109184    public function add($prefix, $paths, $prepend = false)
     
    148223     * appending or prepending to the ones previously set for this namespace.
    149224     *
    150      * @param string       $prefix  The prefix/namespace, with trailing '\\'
    151      * @param array|string $paths   The PSR-4 base directories
    152      * @param bool         $prepend Whether to prepend the directories
     225     * @param string          $prefix  The prefix/namespace, with trailing '\\'
     226     * @param string[]|string $paths   The PSR-4 base directories
     227     * @param bool            $prepend Whether to prepend the directories
    153228     *
    154229     * @throws \InvalidArgumentException
     230     *
     231     * @return void
    155232     */
    156233    public function addPsr4($prefix, $paths, $prepend = false)
     
    196273     * replacing any others previously set for this prefix.
    197274     *
    198      * @param string       $prefix The prefix
    199      * @param array|string $paths  The PSR-0 base directories
     275     * @param string          $prefix The prefix
     276     * @param string[]|string $paths  The PSR-0 base directories
     277     *
     278     * @return void
    200279     */
    201280    public function set($prefix, $paths)
     
    212291     * replacing any others previously set for this namespace.
    213292     *
    214      * @param string       $prefix The prefix/namespace, with trailing '\\'
    215      * @param array|string $paths  The PSR-4 base directories
     293     * @param string          $prefix The prefix/namespace, with trailing '\\'
     294     * @param string[]|string $paths  The PSR-4 base directories
    216295     *
    217296     * @throws \InvalidArgumentException
     297     *
     298     * @return void
    218299     */
    219300    public function setPsr4($prefix, $paths)
     
    235316     *
    236317     * @param bool $useIncludePath
     318     *
     319     * @return void
    237320     */
    238321    public function setUseIncludePath($useIncludePath)
     
    257340     *
    258341     * @param bool $classMapAuthoritative
     342     *
     343     * @return void
    259344     */
    260345    public function setClassMapAuthoritative($classMapAuthoritative)
     
    277362     *
    278363     * @param string|null $apcuPrefix
     364     *
     365     * @return void
    279366     */
    280367    public function setApcuPrefix($apcuPrefix)
     
    297384     *
    298385     * @param bool $prepend Whether to prepend the autoloader or not
     386     *
     387     * @return void
    299388     */
    300389    public function register($prepend = false)
    301390    {
    302391        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
     392
     393        if (null === $this->vendorDir) {
     394            return;
     395        }
     396
     397        if ($prepend) {
     398            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
     399        } else {
     400            unset(self::$registeredLoaders[$this->vendorDir]);
     401            self::$registeredLoaders[$this->vendorDir] = $this;
     402        }
    303403    }
    304404
    305405    /**
    306406     * Unregisters this instance as an autoloader.
     407     *
     408     * @return void
    307409     */
    308410    public function unregister()
    309411    {
    310412        spl_autoload_unregister(array($this, 'loadClass'));
     413
     414        if (null !== $this->vendorDir) {
     415            unset(self::$registeredLoaders[$this->vendorDir]);
     416        }
    311417    }
    312418
     
    315421     *
    316422     * @param  string    $class The name of the class
    317      * @return bool|null True if loaded, null otherwise
     423     * @return true|null True if loaded, null otherwise
    318424     */
    319425    public function loadClass($class)
     
    324430            return true;
    325431        }
     432
     433        return null;
    326434    }
    327435
     
    368476    }
    369477
     478    /**
     479     * Returns the currently registered loaders indexed by their corresponding vendor directories.
     480     *
     481     * @return self[]
     482     */
     483    public static function getRegisteredLoaders()
     484    {
     485        return self::$registeredLoaders;
     486    }
     487
     488    /**
     489     * @param  string       $class
     490     * @param  string       $ext
     491     * @return string|false
     492     */
    370493    private function findFileWithExtension($class, $ext)
    371494    {
     
    439562 *
    440563 * Prevents access to $this/self from included files.
     564 *
     565 * @param  string $file
     566 * @return void
     567 * @private
    441568 */
    442569function includeFile($file)
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/autoload_classmap.php

    r2385891 r2708216  
    33// autoload_classmap.php @generated by Composer
    44
    5 $vendorDir = dirname(dirname(__FILE__));
     5$vendorDir = dirname(__DIR__);
    66$baseDir = dirname($vendorDir);
    77
    88return array(
     9    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    910    'PAnD' => $vendorDir . '/collizo4sky/persist-admin-notices-dismissal/persist-admin-notices-dismissal.php',
     11    'TypistTech\\Imposter\\ArrayUtil' => $vendorDir . '/typisttech/imposter/src/ArrayUtil.php',
     12    'TypistTech\\Imposter\\Config' => $vendorDir . '/typisttech/imposter/src/Config.php',
     13    'TypistTech\\Imposter\\ConfigCollection' => $vendorDir . '/typisttech/imposter/src/ConfigCollection.php',
     14    'TypistTech\\Imposter\\ConfigCollectionFactory' => $vendorDir . '/typisttech/imposter/src/ConfigCollectionFactory.php',
     15    'TypistTech\\Imposter\\ConfigCollectionInterface' => $vendorDir . '/typisttech/imposter/src/ConfigCollectionInterface.php',
     16    'TypistTech\\Imposter\\ConfigFactory' => $vendorDir . '/typisttech/imposter/src/ConfigFactory.php',
     17    'TypistTech\\Imposter\\ConfigInterface' => $vendorDir . '/typisttech/imposter/src/ConfigInterface.php',
     18    'TypistTech\\Imposter\\Filesystem' => $vendorDir . '/typisttech/imposter/src/Filesystem.php',
     19    'TypistTech\\Imposter\\FilesystemInterface' => $vendorDir . '/typisttech/imposter/src/FilesystemInterface.php',
     20    'TypistTech\\Imposter\\Imposter' => $vendorDir . '/typisttech/imposter/src/Imposter.php',
     21    'TypistTech\\Imposter\\ImposterFactory' => $vendorDir . '/typisttech/imposter/src/ImposterFactory.php',
     22    'TypistTech\\Imposter\\ImposterInterface' => $vendorDir . '/typisttech/imposter/src/ImposterInterface.php',
     23    'TypistTech\\Imposter\\Plugin\\AutoloadMerger' => $vendorDir . '/typisttech/imposter-plugin/src/AutoloadMerger.php',
     24    'TypistTech\\Imposter\\Plugin\\ImposterPlugin' => $vendorDir . '/typisttech/imposter-plugin/src/ImposterPlugin.php',
     25    'TypistTech\\Imposter\\Plugin\\Transformer' => $vendorDir . '/typisttech/imposter-plugin/src/Transformer.php',
     26    'TypistTech\\Imposter\\ProjectConfig' => $vendorDir . '/typisttech/imposter/src/ProjectConfig.php',
     27    'TypistTech\\Imposter\\ProjectConfigInterface' => $vendorDir . '/typisttech/imposter/src/ProjectConfigInterface.php',
     28    'TypistTech\\Imposter\\StringUtil' => $vendorDir . '/typisttech/imposter/src/StringUtil.php',
     29    'TypistTech\\Imposter\\Transformer' => $vendorDir . '/typisttech/imposter/src/Transformer.php',
     30    'TypistTech\\Imposter\\TransformerInterface' => $vendorDir . '/typisttech/imposter/src/TransformerInterface.php',
    1031);
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/autoload_namespaces.php

    r2385891 r2708216  
    33// autoload_namespaces.php @generated by Composer
    44
    5 $vendorDir = dirname(dirname(__FILE__));
     5$vendorDir = dirname(__DIR__);
    66$baseDir = dirname($vendorDir);
    77
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/autoload_psr4.php

    r2385891 r2708216  
    33// autoload_psr4.php @generated by Composer
    44
    5 $vendorDir = dirname(dirname(__FILE__));
     5$vendorDir = dirname(__DIR__);
    66$baseDir = dirname($vendorDir);
    77
    88return array(
     9    'TypistTech\\Imposter\\Plugin\\' => array($vendorDir . '/typisttech/imposter-plugin/src'),
     10    'TypistTech\\Imposter\\' => array($vendorDir . '/typisttech/imposter/src'),
    911);
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/autoload_real.php

    r2385891 r2708216  
    2323        }
    2424
     25        require __DIR__ . '/platform_check.php';
     26
    2527        spl_autoload_register(array('ComposerAutoloaderInitc69f9e022a7575f97fc2ef8db9826a94', 'loadClassLoader'), true, true);
    26         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
     28        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    2729        spl_autoload_unregister(array('ComposerAutoloaderInitc69f9e022a7575f97fc2ef8db9826a94', 'loadClassLoader'));
    2830
    29         $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
    30         if ($useStaticLoader) {
    31             require_once __DIR__ . '/autoload_static.php';
    32 
    33             call_user_func(\Composer\Autoload\ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94::getInitializer($loader));
    34         } else {
    35             $map = require __DIR__ . '/autoload_namespaces.php';
    36             foreach ($map as $namespace => $path) {
    37                 $loader->set($namespace, $path);
    38             }
    39 
    40             $map = require __DIR__ . '/autoload_psr4.php';
    41             foreach ($map as $namespace => $path) {
    42                 $loader->setPsr4($namespace, $path);
    43             }
    44 
    45             $classMap = require __DIR__ . '/autoload_classmap.php';
    46             if ($classMap) {
    47                 $loader->addClassMap($classMap);
    48             }
    49         }
     31        require __DIR__ . '/autoload_static.php';
     32        call_user_func(\Composer\Autoload\ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94::getInitializer($loader));
    5033
    5134        $loader->register(true);
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/autoload_static.php

    r2385891 r2708216  
    77class ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94
    88{
     9    public static $prefixLengthsPsr4 = array (
     10        'T' =>
     11        array (
     12            'TypistTech\\Imposter\\Plugin\\' => 27,
     13            'TypistTech\\Imposter\\' => 20,
     14        ),
     15    );
     16
     17    public static $prefixDirsPsr4 = array (
     18        'TypistTech\\Imposter\\Plugin\\' =>
     19        array (
     20            0 => __DIR__ . '/..' . '/typisttech/imposter-plugin/src',
     21        ),
     22        'TypistTech\\Imposter\\' =>
     23        array (
     24            0 => __DIR__ . '/..' . '/typisttech/imposter/src',
     25        ),
     26    );
     27
    928    public static $classMap = array (
     29        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
    1030        'PAnD' => __DIR__ . '/..' . '/collizo4sky/persist-admin-notices-dismissal/persist-admin-notices-dismissal.php',
     31        'TypistTech\\Imposter\\ArrayUtil' => __DIR__ . '/..' . '/typisttech/imposter/src/ArrayUtil.php',
     32        'TypistTech\\Imposter\\Config' => __DIR__ . '/..' . '/typisttech/imposter/src/Config.php',
     33        'TypistTech\\Imposter\\ConfigCollection' => __DIR__ . '/..' . '/typisttech/imposter/src/ConfigCollection.php',
     34        'TypistTech\\Imposter\\ConfigCollectionFactory' => __DIR__ . '/..' . '/typisttech/imposter/src/ConfigCollectionFactory.php',
     35        'TypistTech\\Imposter\\ConfigCollectionInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/ConfigCollectionInterface.php',
     36        'TypistTech\\Imposter\\ConfigFactory' => __DIR__ . '/..' . '/typisttech/imposter/src/ConfigFactory.php',
     37        'TypistTech\\Imposter\\ConfigInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/ConfigInterface.php',
     38        'TypistTech\\Imposter\\Filesystem' => __DIR__ . '/..' . '/typisttech/imposter/src/Filesystem.php',
     39        'TypistTech\\Imposter\\FilesystemInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/FilesystemInterface.php',
     40        'TypistTech\\Imposter\\Imposter' => __DIR__ . '/..' . '/typisttech/imposter/src/Imposter.php',
     41        'TypistTech\\Imposter\\ImposterFactory' => __DIR__ . '/..' . '/typisttech/imposter/src/ImposterFactory.php',
     42        'TypistTech\\Imposter\\ImposterInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/ImposterInterface.php',
     43        'TypistTech\\Imposter\\Plugin\\AutoloadMerger' => __DIR__ . '/..' . '/typisttech/imposter-plugin/src/AutoloadMerger.php',
     44        'TypistTech\\Imposter\\Plugin\\ImposterPlugin' => __DIR__ . '/..' . '/typisttech/imposter-plugin/src/ImposterPlugin.php',
     45        'TypistTech\\Imposter\\Plugin\\Transformer' => __DIR__ . '/..' . '/typisttech/imposter-plugin/src/Transformer.php',
     46        'TypistTech\\Imposter\\ProjectConfig' => __DIR__ . '/..' . '/typisttech/imposter/src/ProjectConfig.php',
     47        'TypistTech\\Imposter\\ProjectConfigInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/ProjectConfigInterface.php',
     48        'TypistTech\\Imposter\\StringUtil' => __DIR__ . '/..' . '/typisttech/imposter/src/StringUtil.php',
     49        'TypistTech\\Imposter\\Transformer' => __DIR__ . '/..' . '/typisttech/imposter/src/Transformer.php',
     50        'TypistTech\\Imposter\\TransformerInterface' => __DIR__ . '/..' . '/typisttech/imposter/src/TransformerInterface.php',
    1151    );
    1252
     
    1454    {
    1555        return \Closure::bind(function () use ($loader) {
     56            $loader->prefixLengthsPsr4 = ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94::$prefixLengthsPsr4;
     57            $loader->prefixDirsPsr4 = ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94::$prefixDirsPsr4;
    1658            $loader->classMap = ComposerStaticInitc69f9e022a7575f97fc2ef8db9826a94::$classMap;
    1759
  • remove-xmlrpc-pingback-ping/trunk/vendor/composer/installed.json

    r2581091 r2708216  
    1 [
    2     {
    3         "name": "collizo4sky/persist-admin-notices-dismissal",
    4         "version": "1.4.4",
    5         "version_normalized": "1.4.4.0",
    6         "source": {
    7             "type": "git",
    8             "url": "https://github.com/w3guy/persist-admin-notices-dismissal.git",
    9             "reference": "900739eb6b0ec0210465f5983a6d4e0e420289e4"
     1{
     2    "packages": [
     3        {
     4            "name": "collizo4sky/persist-admin-notices-dismissal",
     5            "version": "1.4.4",
     6            "version_normalized": "1.4.4.0",
     7            "source": {
     8                "type": "git",
     9                "url": "https://github.com/w3guy/persist-admin-notices-dismissal.git",
     10                "reference": "900739eb6b0ec0210465f5983a6d4e0e420289e4"
     11            },
     12            "dist": {
     13                "type": "zip",
     14                "url": "https://api.github.com/repos/w3guy/persist-admin-notices-dismissal/zipball/900739eb6b0ec0210465f5983a6d4e0e420289e4",
     15                "reference": "900739eb6b0ec0210465f5983a6d4e0e420289e4",
     16                "shasum": ""
     17            },
     18            "require": {
     19                "php": ">=5.4"
     20            },
     21            "time": "2020-12-31T17:12:37+00:00",
     22            "type": "library",
     23            "installation-source": "dist",
     24            "autoload": {
     25                "classmap": [
     26                    "persist-admin-notices-dismissal.php"
     27                ]
     28            },
     29            "notification-url": "https://packagist.org/downloads/",
     30            "license": [
     31                "GPL-3.0-or-later"
     32            ],
     33            "authors": [
     34                {
     35                    "name": "Collins Agbonghama",
     36                    "email": "[email protected]",
     37                    "role": "developer"
     38                }
     39            ],
     40            "description": "Simple library to persist dismissal of admin notices across pages in WordPress dashboard.",
     41            "install-path": "../collizo4sky/persist-admin-notices-dismissal"
    1042        },
    11         "dist": {
    12             "type": "zip",
    13             "url": "https://api.github.com/repos/w3guy/persist-admin-notices-dismissal/zipball/900739eb6b0ec0210465f5983a6d4e0e420289e4",
    14             "reference": "900739eb6b0ec0210465f5983a6d4e0e420289e4",
    15             "shasum": ""
     43        {
     44            "name": "typisttech/imposter",
     45            "version": "0.6.1",
     46            "version_normalized": "0.6.1.0",
     47            "source": {
     48                "type": "git",
     49                "url": "https://github.com/TypistTech/imposter.git",
     50                "reference": "f52b1a2289d2ea9c660cf9595085d0b11469af83"
     51            },
     52            "dist": {
     53                "type": "zip",
     54                "url": "https://api.github.com/repos/TypistTech/imposter/zipball/f52b1a2289d2ea9c660cf9595085d0b11469af83",
     55                "reference": "f52b1a2289d2ea9c660cf9595085d0b11469af83",
     56                "shasum": ""
     57            },
     58            "require": {
     59                "ext-json": "*",
     60                "php": "^7.3 || ^8.0"
     61            },
     62            "require-dev": {
     63                "codeception/codeception": "^4.1",
     64                "codeception/mockery-module": "^0.4.0",
     65                "codeception/module-asserts": "^1.3",
     66                "codeception/module-filesystem": "^1.0",
     67                "squizlabs/php_codesniffer": "^3.5"
     68            },
     69            "suggest": {
     70                "typisttech/imposter-plugin": "Composer plugin to integrate composer and imposter"
     71            },
     72            "time": "2020-12-06T22:57:09+00:00",
     73            "type": "library",
     74            "extra": {
     75                "branch-alias": {
     76                    "dev-master": "0.6.x-dev"
     77                }
     78            },
     79            "installation-source": "dist",
     80            "autoload": {
     81                "psr-4": {
     82                    "TypistTech\\Imposter\\": "src"
     83                }
     84            },
     85            "notification-url": "https://packagist.org/downloads/",
     86            "license": [
     87                "MIT"
     88            ],
     89            "authors": [
     90                {
     91                    "name": "Typist Tech",
     92                    "email": "[email protected]",
     93                    "homepage": "https://typist.tech"
     94                },
     95                {
     96                    "name": "Tang Rufus",
     97                    "email": "[email protected]",
     98                    "homepage": "https://typist.tech",
     99                    "role": "Developer"
     100                }
     101            ],
     102            "description": "Wrapping all composer vendor packages inside your own namespace. Intended for WordPress plugins.",
     103            "homepage": "https://github.com/TypistTech/imposter",
     104            "keywords": [
     105                "composer",
     106                "dependency",
     107                "monkey-patching",
     108                "namespace",
     109                "wordpress"
     110            ],
     111            "support": {
     112                "email": "[email protected]",
     113                "issues": "https://github.com/TypistTech/imposter/issues",
     114                "source": "https://github.com/TypistTech/imposter"
     115            },
     116            "funding": [
     117                {
     118                    "url": "https://typist.tech/donation/",
     119                    "type": "custom"
     120                },
     121                {
     122                    "url": "https://www.paypal.me/iAmTangRufus/30usd",
     123                    "type": "custom"
     124                },
     125                {
     126                    "url": "https://github.com/tangrufus",
     127                    "type": "github"
     128                }
     129            ],
     130            "install-path": "../typisttech/imposter"
    16131        },
    17         "require": {
    18             "php": ">=5.4"
    19         },
    20         "time": "2020-12-31T17:12:37+00:00",
    21         "type": "library",
    22         "installation-source": "dist",
    23         "autoload": {
    24             "classmap": [
    25                 "persist-admin-notices-dismissal.php"
    26             ]
    27         },
    28         "notification-url": "https://packagist.org/downloads/",
    29         "license": [
    30             "GPL-3.0-or-later"
    31         ],
    32         "authors": [
    33             {
    34                 "name": "Collins Agbonghama",
    35                 "email": "[email protected]",
    36                 "role": "developer"
    37             }
    38         ],
    39         "description": "Simple library to persist dismissal of admin notices across pages in WordPress dashboard."
    40     }
    41 ]
     132        {
     133            "name": "typisttech/imposter-plugin",
     134            "version": "0.6.2",
     135            "version_normalized": "0.6.2.0",
     136            "source": {
     137                "type": "git",
     138                "url": "https://github.com/TypistTech/imposter-plugin.git",
     139                "reference": "15fa3c90aca3b79497f438b9e02a6176498de53c"
     140            },
     141            "dist": {
     142                "type": "zip",
     143                "url": "https://api.github.com/repos/TypistTech/imposter-plugin/zipball/15fa3c90aca3b79497f438b9e02a6176498de53c",
     144                "reference": "15fa3c90aca3b79497f438b9e02a6176498de53c",
     145                "shasum": ""
     146            },
     147            "require": {
     148                "composer-plugin-api": "^1.1 || ^2.0",
     149                "php": "^7.3 || ^8.0",
     150                "typisttech/imposter": "^0.6.1"
     151            },
     152            "require-dev": {
     153                "codeception/codeception": "^4.1",
     154                "codeception/module-asserts": "^1.3",
     155                "codeception/module-cli": "^1.1",
     156                "codeception/module-filesystem": "^1.0",
     157                "composer/composer": "^1.10.19 || ^2.0",
     158                "squizlabs/php_codesniffer": "^3.5",
     159                "typisttech/codeception-composer-project-module": "^0.1.1"
     160            },
     161            "time": "2020-12-06T23:41:30+00:00",
     162            "type": "composer-plugin",
     163            "extra": {
     164                "branch-alias": {
     165                    "dev-master": "0.6.x-dev"
     166                },
     167                "class": "TypistTech\\Imposter\\Plugin\\ImposterPlugin"
     168            },
     169            "installation-source": "dist",
     170            "autoload": {
     171                "psr-4": {
     172                    "TypistTech\\Imposter\\Plugin\\": "src"
     173                }
     174            },
     175            "notification-url": "https://packagist.org/downloads/",
     176            "license": [
     177                "MIT"
     178            ],
     179            "authors": [
     180                {
     181                    "name": "Typist Tech",
     182                    "email": "[email protected]",
     183                    "homepage": "https://www.typist.tech"
     184                },
     185                {
     186                    "name": "Tang Rufus",
     187                    "email": "[email protected]",
     188                    "homepage": "https://www.typist.tech",
     189                    "role": "Developer"
     190                }
     191            ],
     192            "description": "Composer plugin that wraps all composer vendor packages inside your own namespace. Intended for WordPress plugins.",
     193            "homepage": "https://github.com/TypistTech/imposter-plugin",
     194            "keywords": [
     195                "composer",
     196                "composer-plugin",
     197                "dependency",
     198                "monkey-patching",
     199                "namespace",
     200                "wordpress"
     201            ],
     202            "support": {
     203                "email": "[email protected]",
     204                "issues": "https://github.com/TypistTech/imposter-plugin/issues",
     205                "source": "https://github.com/TypistTech/imposter-plugin"
     206            },
     207            "funding": [
     208                {
     209                    "url": "https://typist.tech/donation/",
     210                    "type": "custom"
     211                },
     212                {
     213                    "url": "https://www.paypal.me/iAmTangRufus/30usd",
     214                    "type": "custom"
     215                },
     216                {
     217                    "url": "https://github.com/tangrufus",
     218                    "type": "github"
     219                }
     220            ],
     221            "install-path": "../typisttech/imposter-plugin"
     222        }
     223    ],
     224    "dev": false,
     225    "dev-package-names": []
     226}
Note: See TracChangeset for help on using the changeset viewer.