143 lines
4.0 KiB
PHP
143 lines
4.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* $Id: ExportPropertiesTask.php 905 2010-10-05 16:28:03Z mrook $
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*
|
||
|
* This software consists of voluntary contributions made by many individuals
|
||
|
* and is licensed under the LGPL. For more information please see
|
||
|
* <http://phing.info>.
|
||
|
*/
|
||
|
|
||
|
require_once "phing/Task.php";
|
||
|
|
||
|
/**
|
||
|
* Saves currently defined properties into a specified file
|
||
|
*
|
||
|
* @author Andrei Serdeliuc
|
||
|
* @extends Task
|
||
|
* @version $Id: ExportPropertiesTask.php 905 2010-10-05 16:28:03Z mrook $
|
||
|
* @package phing.tasks.ext
|
||
|
*/
|
||
|
class ExportPropertiesTask extends Task
|
||
|
{
|
||
|
/**
|
||
|
* Array of project properties
|
||
|
*
|
||
|
* (default value: null)
|
||
|
*
|
||
|
* @var array
|
||
|
* @access private
|
||
|
*/
|
||
|
private $_properties = null;
|
||
|
|
||
|
/**
|
||
|
* Target file for saved properties
|
||
|
*
|
||
|
* (default value: null)
|
||
|
*
|
||
|
* @var string
|
||
|
* @access private
|
||
|
*/
|
||
|
private $_targetFile = null;
|
||
|
|
||
|
/**
|
||
|
* Exclude properties starting with these prefixes
|
||
|
*
|
||
|
* @var array
|
||
|
* @access private
|
||
|
*/
|
||
|
private $_disallowedPropertyPrefixes = array(
|
||
|
'host.',
|
||
|
'phing.',
|
||
|
'os.',
|
||
|
'php.',
|
||
|
'line.',
|
||
|
'env.',
|
||
|
'user.'
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* setter for _targetFile
|
||
|
*
|
||
|
* @access public
|
||
|
* @param string $file
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function setTargetFile($file)
|
||
|
{
|
||
|
if(!is_dir(dirname($file))) {
|
||
|
throw new BuildException("Parent directory of target file doesn't exist");
|
||
|
}
|
||
|
|
||
|
if(!is_writable(dirname($file)) && (file_exists($file) && !is_writable($file))) {
|
||
|
throw new BuildException("Target file isn't writable");
|
||
|
}
|
||
|
|
||
|
$this->_targetFile = $file;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* setter for _disallowedPropertyPrefixes
|
||
|
*
|
||
|
* @access public
|
||
|
* @param string $file
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function setDisallowedPropertyPrefixes($prefixes)
|
||
|
{
|
||
|
$this->_disallowedPropertyPrefixes = explode(",", $prefixes);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public function main()
|
||
|
{
|
||
|
// Sets the currently declared properties
|
||
|
$this->_properties = $this->getProject()->getProperties();
|
||
|
|
||
|
if(is_array($this->_properties) && !empty($this->_properties) && null !== $this->_targetFile) {
|
||
|
$propertiesString = '';
|
||
|
foreach($this->_properties as $propertyName => $propertyValue) {
|
||
|
if(!$this->isDisallowedPropery($propertyName)) {
|
||
|
$propertiesString .= $propertyName . "=" . $propertyValue . PHP_EOL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!file_put_contents($this->_targetFile, $propertiesString)) {
|
||
|
throw new BuildException('Failed writing to ' . $this->_targetFile);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks if a property name is disallowed
|
||
|
*
|
||
|
* @access protected
|
||
|
* @param string $propertyName
|
||
|
* @return bool
|
||
|
*/
|
||
|
protected function isDisallowedPropery($propertyName)
|
||
|
{
|
||
|
foreach($this->_disallowedPropertyPrefixes as $property) {
|
||
|
if(substr($propertyName, 0, strlen($property)) == $property) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|