WordPress.org

Make WordPress Core

Ticket #16971: 16971.2.patch

File 16971.2.patch, 2.9 KB (added by hakre, 3 years ago)

Example only

  • wp-admin/includes/misc.php

    ### Eclipse Workspace Patch 1.0
    #P wordpress-trunk
     
    6565 * @return bool True on write success, false on failure. 
    6666 */ 
    6767function insert_with_markers( $filename, $marker, $insertion ) { 
    68         if (!file_exists( $filename ) || is_writeable( $filename ) ) { 
    69                 if (!file_exists( $filename ) ) { 
    70                         $markerdata = ''; 
    71                 } else { 
    72                         $markerdata = explode( "\n", implode( '', file( $filename ) ) ); 
    73                 } 
     68        $file_exists = file_exists( $filename ); 
    7469 
    75                 if ( !$f = @fopen( $filename, 'w' ) ) 
     70        if (!$file_exists) { 
     71                $r = @file_put_contents( $filename, '' ); 
     72                if ( false  === $r ) 
    7673                        return false; 
     74                chmod( $filename, FS_CHMOD_FILE ); 
     75                $lines = array(); 
     76        } else { 
     77                $lines = file( $filename, FILE_IGNORE_NEW_LINES ); 
     78        } 
    7779 
    78                 $foundit = false; 
    79                 if ( $markerdata ) { 
    80                         $state = true; 
    81                         foreach ( $markerdata as $n => $markerline ) { 
    82                                 if (strpos($markerline, '# BEGIN ' . $marker) !== false) 
    83                                         $state = false; 
    84                                 if ( $state ) { 
    85                                         if ( $n + 1 < count( $markerdata ) ) 
    86                                                 fwrite( $f, "{$markerline}\n" ); 
    87                                         else 
    88                                                 fwrite( $f, "{$markerline}" ); 
    89                                 } 
    90                                 if (strpos($markerline, '# END ' . $marker) !== false) { 
    91                                         fwrite( $f, "# BEGIN {$marker}\n" ); 
    92                                         if ( is_array( $insertion )) 
    93                                                 foreach ( $insertion as $insertline ) 
    94                                                         fwrite( $f, "{$insertline}\n" ); 
    95                                         fwrite( $f, "# END {$marker}\n" ); 
    96                                         $state = true; 
    97                                         $foundit = true; 
    98                                 } 
    99                         } 
     80        if ( !is_writable($filename) ) 
     81                return false; 
     82 
     83        $marker_begin = "# BEGIN $marker"; 
     84        $marker_end = "# END $marker"; 
     85        $buffer = array(); 
     86        $foundit = array(); 
     87        $state = true; 
     88        foreach ($lines as $line) { 
     89                if ( false !== strpos( $line, $marker_begin ) ) 
     90                        $state = false; 
     91                if ( $state ) 
     92                        $buffer[] = $line; 
     93                if ( false !== strpos( $line, $marker_end ) ) { 
     94                        $foundit[] = count( $buffer ); 
     95                        $buffer[] = ''; # placeholder 
    10096                } 
    101                 if (!$foundit) { 
    102                         fwrite( $f, "\n# BEGIN {$marker}\n" ); 
    103                         foreach ( $insertion as $insertline ) 
    104                                 fwrite( $f, "{$insertline}\n" ); 
    105                         fwrite( $f, "# END {$marker}\n" ); 
    106                 } 
    107                 fclose( $f ); 
    108                 return true; 
     97        } 
     98 
     99        if ( 0 === count( $foundit ) ) { 
     100                $foundit[] = count( $buffer ); 
     101                $buffer[] = ''; # placeholder 
    109102        } else { 
     103                // backwards compat: non array insertions are ignored if markers were found 
     104                // @todo this should be streamlined 
     105                if (!is_array($insertion)) 
     106                        $insertion = array(); 
     107        } 
     108 
     109        array_unshift($insertion, $marker_begin ); 
     110        $insertion[] = $marker_end; 
     111        $insertion = implode( "\n", $insertion ); 
     112         
     113        foreach( $foundit as $index ) 
     114                $buffer[$index] = $insertion; 
     115        $buffer = implode( "\n", $buffer); 
     116 
     117        if ( false === @file_put_contents( $filename, $buffer) ) 
    110118                return false; 
    111         } 
     119 
     120        return true; 
    112121} 
    113122 
    114123/**