Page MenuHomeWickedGov Phorge

PhpFileWriter.php
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

PhpFileWriter.php

<?php
namespace MediaWiki\Extension\CLDR;
/**
* Simple formatter to produce PHP files from input arrays.
*
* @author Niklas Laxström
* @author Ryan Kaldari
* @author Santhosh Thottingal
* @author Sam Reed
* @copyright Copyright © 2007-2015
* @license GPL-2.0-or-later
*/
class PhpFileWriter {
/**
* Will build and return a string containing properly formatted php
* output of all the vars we've just parsed out of the XML file.
* @param array $data The variable names and values we want defined in the php output
* @param string $location File location to write
* @return bool
*/
public function savephp( $data, $location ) {
$hasData = false;
foreach ( $data as $v ) {
if ( count( $v ) ) {
$hasData = true;
break;
}
}
if ( !$hasData ) {
return false;
}
// Yes, I am aware I could have simply used var_export.
// ...the spacing was ugly.
$output = "<?php\n// This file is generated by rebuild.php. Do not edit it directly.\n";
foreach ( $data as $varname => $values ) {
if ( !count( $values ) ) {
// Don't output empty arrays
continue;
}
$output .= "\n\$$varname = [\n";
if ( $this->isAssoc( $values ) ) {
foreach ( $values as $key => $value ) {
if ( is_array( $value ) ) {
$output .= $this->makePrettyArrayOuts( $key, $value, 1 );
} else {
$key = addcslashes( $key, "'" );
$value = addcslashes( $value, "'" );
if ( !is_numeric( $key ) ) {
$key = "'$key'";
}
$output .= "\t$key => '$value',\n";
}
}
} else {
foreach ( $values as $value ) {
if ( is_array( $value ) ) {
$output .= $this->makePrettyArrayOuts( null, $value, 1 );
} else {
$value = addcslashes( $value, "'" );
$output .= "\t'$value',\n";
}
}
}
$output .= "];\n";
}
file_put_contents( $location, $output );
return true;
}
/**
* It makes pretty array values.
* @param string|null $key Use null to omit outputting the key
* @param array $value
* @param int $level
* @return string
*/
protected function makePrettyArrayOuts( $key, $value, $level = 1 ) {
$subKeys = '';
$isAssoc = $this->isAssoc( $value );
$tabs = str_repeat( "\t", $level );
foreach ( $value as $subkey => $subvalue ) {
$subkey = $isAssoc ? $subkey : null;
if ( is_array( $subvalue ) ) {
$subKeys .= $this->makePrettyArrayOuts( $subkey, $subvalue, $level + 1 );
} else {
$subkey = $isAssoc ? $this->formatKey( $subkey ) : '';
$subvalue = addcslashes( $subvalue, "'" );
$subKeys .= "$tabs\t$subkey'$subvalue',\n";
}
}
if ( $subKeys === '' ) {
return '';
}
$key = $key !== null ? $this->formatKey( $key ) : '';
return "$tabs$key" . "[\n$subKeys$tabs],\n";
}
/**
* It makes pretty array keys.
* @param string $key
* @return string
*/
protected function formatKey( $key ) {
$key = addcslashes( $key, "'" );
if ( !is_numeric( $key ) ) {
$key = "'$key'";
}
return "$key => ";
}
/**
* Checks if array is associative or sequential.
*
* @param array $arr
* @return bool
*/
protected function isAssoc( array $arr ) {
return array_keys( $arr ) !== range( 0, count( $arr ) - 1 );
}
}

File Metadata

Mime Type
text/x-php
Expires
Sat, Oct 3, 11:25 (5 d, 8 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
74/38/8407a8ae1ed5eebd6b76659c7a67
Default Alt Text
PhpFileWriter.php (3 KB)

Event Timeline