WordPress.org

Make WordPress Core

Ticket #18546: 18546.4.diff

File 18546.4.diff, 3.3 KB (added by xkon, 8 months ago)
  • Gruntfile.js

    diff --git a/Gruntfile.js b/Gruntfile.js
    index 2d0b8b295c..f72fafec16 100644
    a b module.exports = function(grunt) { 
    14451445                                'build:css',
    14461446                                'includes:emoji',
    14471447                                'includes:embed',
    1448                                 'replace:emojiBannerText'
     1448                                'replace:emojiBannerText',
     1449                                'build:protect_folders'
    14491450                        ] );
    14501451                }
    14511452        } );
    module.exports = function(grunt) { 
    15161517                } );
    15171518        } );
    15181519
     1520        grunt.registerTask( 'build:protect_folders', 'Ensures every directory has an index.php file.', function() {
     1521                var defaultIndexFile = BUILD_DIR + 'wp-content/index.php',
     1522                        folders = [
     1523                                'wp-includes',
     1524                                'wp-admin',
     1525                                'wp-content',
     1526                        ],
     1527                        excluded = [
     1528                                'wp-includes/ID3',
     1529                                'wp-includes/PHPMailer',
     1530                                'wp-includes/Requests',
     1531                                'wp-includes/SimplePie',
     1532                                'wp-includes/sodium_compat',
     1533                                'wp-includes/Text',
     1534                        ];
     1535
     1536                /**
     1537                 * Gets all folders from a given path.
     1538                 *
     1539                 * @param   {string} dirPath Directory path to search against.
     1540                 * @param   {array}  arrayOfFiles Array of files in the directory.
     1541                 * @param   {array}  arrayOfFolders Array of directories in the directory.
     1542                 * @returns {array}  Array of folders
     1543                 */
     1544                var getAllFolders = function( dirPath, arrayOfFiles, arrayOfFolders ) {
     1545                        // Let's get all of the folders on this path.
     1546                        var files = fs.readdirSync( dirPath );
     1547
     1548                        arrayOfFiles = arrayOfFiles || [];
     1549                        arrayOfFolders = arrayOfFolders || [];
     1550
     1551                        // Let's loop through the folders, looking for more directories.
     1552                        files.forEach( function( file ) {
     1553                                // Let's look for a directory.
     1554                                if ( fs.statSync( dirPath + "/" + file ).isDirectory() ) {
     1555                                        // Let's see if the path contains any of the `excluded` paths.
     1556                                        var dir = dirPath + "/" + file,
     1557                                                block = false;
     1558
     1559                                                excluded.map( function( path ) {
     1560                                                if ( dir.includes( BUILD_DIR + path ) ) {
     1561                                                        block = true;
     1562                                                }
     1563                                        });
     1564
     1565                                        // This is a legit path, let's add to our array of valid paths.
     1566                                        if ( ! block ) {
     1567                                                arrayOfFolders.push( dir );
     1568                                                arrayOfFolders = getAllFolders( dirPath + "/" + file, arrayOfFiles, arrayOfFolders );
     1569                                        }
     1570                                } else {
     1571                                        // Keep digging for paths.
     1572                                        arrayOfFiles.push( path.join( __dirname, dirPath, "/", file ) );
     1573                                }
     1574                        });
     1575
     1576                        return arrayOfFolders;
     1577                }
     1578
     1579                /**
     1580                 * Checks if index.php exists in the current directory.
     1581                 *
     1582                 * @param   {string} dirPath Path to start a search for index.php files.
     1583                 * @returns {bool}
     1584                 */
     1585                var doesDirHaveIndex = function ( dirPath ) {
     1586                        var index = '/index.php';
     1587
     1588                        return fs.existsSync( dirPath + index );
     1589                }
     1590
     1591                // Loop through folders, looking for blank index.php files.
     1592                folders.forEach( function( path ) {
     1593                        var folder = getAllFolders( BUILD_DIR + path );
     1594
     1595                        folder.forEach( function( path ) {
     1596                                if( ! doesDirHaveIndex( path ) ) {
     1597                                        var newFile = path + '/index.php',
     1598                                                index = fs.readFileSync( defaultIndexFile );
     1599
     1600                                        // The `wx` flag ensures that it doesn't overwrite any existing files.
     1601                                        fs.writeFileSync( newFile, index, {flag: "wx"} );
     1602                                }
     1603                        })
     1604                });
     1605        });
     1606
    15191607        // Travis CI tasks.
    15201608        grunt.registerTask('travis:js', 'Runs JavaScript Travis CI tasks.', [ 'jshint:corejs', 'qunit:compiled' ]);
    15211609        grunt.registerTask('travis:phpunit', 'Runs PHPUnit Travis CI tasks.', [ 'build', 'phpunit' ]);