Plugin Directory

Changeset 3670394


Ignore:
Timestamp:
08/28/2026 01:06:31 PM (2 months ago)
Author:
alexkovalevv
Message:

Release 1.0.35: fix plugin ZIP installation flow

Location:
ads-destroyer
Files:
89 added
8 edited

Legend:

Unmodified
Added
Removed
  • ads-destroyer/trunk/ads-destroyer.php

    r3668815 r3670394  
    66 * Author: Wp Ai Factory
    77 * Author URI: https://wp-aifactory.com
    8  * Version: 1.0.34
     8 * Version: 1.0.35
    99 * Requires PHP: 7.4
    1010 * Requires at least: 6.0
    … …  
    2323define('ADSD_PLUGIN_FILE', __FILE__);
    2424define('ADSD_PLUGIN_DIR', __DIR__);
    25 define('ADSD_PLUGIN_VERSION', '1.0.34');
     25define('ADSD_PLUGIN_VERSION', '1.0.35');
    2626
    2727if (!defined('ADSD_PLUGIN_URL')) {
  • ads-destroyer/trunk/languages/ads-destroyer.pot

    r3668815 r3670394  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: AdsDestroyer – clean admin panel & white label 1.0.34\n"
     5"Project-Id-Version: AdsDestroyer – clean admin panel & white label 1.0.35\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ads-destroyer\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  • ads-destroyer/trunk/readme.txt

    r3668815 r3670394  
    22Contributors: wpaifactory, alexkovalevv
    33Author: wpaifactory
    4 Author URI: https://wp-aifactory.com/adsdestroyer-disable-admin-ads-wordpress-plugin/
     4Author URI: https://wp-aifactory.com
    55Tags: admin-notices, hide-notices, white-label, admin-cleanup, dashboard
    66Requires at least: 6.0
    77Tested up to: 7.1
    88Requires PHP: 7.4
    9 Stable tag: 1.0.34
     9Stable tag: 1.0.35
    1010License: GPLv2 or later
    1111License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    169169== Changelog ==
    170170
     171= 1.0.35 =
     172- Fixed plugin installation from ZIP archives getting stuck while unpacking when AdsDestroyer rules are active
     173- Excluded streaming updater screens and incomplete HTML documents from server-side parsing
     174
    171175= 1.0.34 =
    172176- Added verified compatibility with PHP 7.4 through PHP 8.4 and WordPress 7.1
  • ads-destroyer/trunk/src/Admin/OutputBufferService.php

    r3668815 r3670394  
    2424
    2525    /**
    26      * Admin screens skipped because the HTML5 parser reflows their markup.
    27      *
    28      * WordPress emits unbalanced `div` tags there; browsers tolerate it, the
    29      * parser "fixes" it and the layout breaks. Such pages are handled entirely
    30      * client-side instead.
     26     * Admin screens skipped because server-side HTML processing breaks them.
     27     *
     28     * `options-general.php` emits unbalanced `div` tags; browsers tolerate it,
     29     * the HTML5 parser "fixes" it and the layout breaks. `update.php` and
     30     * `update-core.php` stream installer progress via show_message(), which
     31     * force-flushes all output buffers mid-page; processing that partial HTML
     32     * prematurely closes the document and the rest of the install output never
     33     * renders. Such pages are handled entirely client-side instead.
    3134     *
    3235     * @var array<string>
    3336     */
    34     private const EXCLUDED_PAGES = ['options-general.php'];
     37    private const EXCLUDED_PAGES = ['options-general.php', 'update.php', 'update-core.php'];
    3538
    3639    /**
    … …  
    7982     */
    8083    public function process_output(string $content): string {
    81         if (!$this->is_html_document($content)) {
     84        if (!$this->is_html_document($content) || !$this->is_complete_document($content)) {
    8285            return $content;
    8386        }
    … …  
    191194
    192195    /**
     196     * Check that the buffered content is a finished HTML document.
     197     *
     198     * Streaming screens (the plugin installer, importers) force-flush output
     199     * buffers mid-page via wp_ob_end_flush_all(). Running the HTML5 parser on
     200     * such a fragment would close `body`/`html` prematurely and hide everything
     201     * WordPress prints afterwards, so partial documents pass through untouched.
     202     *
     203     * @param string $content Buffered output.
     204     * @return bool True when the document has a closing html tag.
     205     */
     206    private function is_complete_document(string $content): bool {
     207        return stripos(substr($content, -512), '</html>') !== false;
     208    }
     209
     210    /**
    193211     * Check if selection mode is active.
    194212     *
  • ads-destroyer/trunk/vendor/autoload.php

    r3668815 r3670394  
    2323require_once __DIR__ . '/composer/autoload_real.php';
    2424
    25 return ComposerAutoloaderInit2a6c415e4ab781bdf15f5266cae27cc7::getLoader();
     25return ComposerAutoloaderInitcd3a330b1d8a3fdf84e9747795dac2d8::getLoader();
  • ads-destroyer/trunk/vendor/composer/autoload_real.php

    r3668815 r3670394  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit2a6c415e4ab781bdf15f5266cae27cc7
     5class ComposerAutoloaderInitcd3a330b1d8a3fdf84e9747795dac2d8
    66{
    77    private static $loader;
    … …  
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit2a6c415e4ab781bdf15f5266cae27cc7', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitcd3a330b1d8a3fdf84e9747795dac2d8', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit2a6c415e4ab781bdf15f5266cae27cc7', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitcd3a330b1d8a3fdf84e9747795dac2d8', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInit2a6c415e4ab781bdf15f5266cae27cc7::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInitcd3a330b1d8a3fdf84e9747795dac2d8::getInitializer($loader));
    3333
    3434        $loader->register(true);
  • ads-destroyer/trunk/vendor/composer/autoload_static.php

    r3668815 r3670394  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit2a6c415e4ab781bdf15f5266cae27cc7
     7class ComposerStaticInitcd3a330b1d8a3fdf84e9747795dac2d8
    88{
    99    public static $prefixLengthsPsr4 = array (
    … …  
    7373    {
    7474        return \Closure::bind(function () use ($loader) {
    75             $loader->prefixLengthsPsr4 = ComposerStaticInit2a6c415e4ab781bdf15f5266cae27cc7::$prefixLengthsPsr4;
    76             $loader->prefixDirsPsr4 = ComposerStaticInit2a6c415e4ab781bdf15f5266cae27cc7::$prefixDirsPsr4;
    77             $loader->classMap = ComposerStaticInit2a6c415e4ab781bdf15f5266cae27cc7::$classMap;
     75            $loader->prefixLengthsPsr4 = ComposerStaticInitcd3a330b1d8a3fdf84e9747795dac2d8::$prefixLengthsPsr4;
     76            $loader->prefixDirsPsr4 = ComposerStaticInitcd3a330b1d8a3fdf84e9747795dac2d8::$prefixDirsPsr4;
     77            $loader->classMap = ComposerStaticInitcd3a330b1d8a3fdf84e9747795dac2d8::$classMap;
    7878
    7979        }, null, ClassLoader::class);
  • ads-destroyer/trunk/vendor/composer/installed.php

    r3668815 r3670394  
    44        'pretty_version' => 'dev-main',
    55        'version' => 'dev-main',
    6         'reference' => 'a00d9334211c7867e93c7ab5aa3f78ade8307f22',
     6        'reference' => '7a91f3fede98c5d295321dd92365fb64c67c20bc',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
    … …  
    1414            'pretty_version' => 'dev-main',
    1515            'version' => 'dev-main',
    16             'reference' => 'a00d9334211c7867e93c7ab5aa3f78ade8307f22',
     16            'reference' => '7a91f3fede98c5d295321dd92365fb64c67c20bc',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.