Skip to content

Commit

Permalink
Added URLEncodeTask. (#973)
Browse files Browse the repository at this point in the history
  • Loading branch information
siad007 authored and mrook committed Nov 7, 2018
1 parent 9c03a96 commit 8fcfe00
Show file tree
Hide file tree
Showing 6 changed files with 229 additions and 0 deletions.
1 change: 1 addition & 0 deletions classes/phing/tasks/defaults.properties
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ pathtofileset=phing.tasks.ext.property.PathToFileSet
propertycopy=phing.tasks.ext.property.PropertyCopy
propertyregex=phing.tasks.ext.property.RegexTask
propertyselector=phing.tasks.ext.property.PropertySelector
urlencode=phing.tasks.ext.property.URLEncodeTask
var=phing.tasks.ext.property.Variable
sortlist=phing.tasks.ext.property.SortList
zsdtvalidate=phing.tasks.ext.zendserverdeploymenttool.zsdtValidateTask
Expand Down
71 changes: 71 additions & 0 deletions classes/phing/tasks/ext/property/URLEncodeTask.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php
/**
* 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>.
*/

/**
* @author Siad Ardroumli <siad.ardroumli@gmail.com>
* @package phing.tasks.ext.property
*/
class URLEncodeTask extends AbstractPropertySetterTask
{
/** @var string */
private $value = '';

/** @var Reference */
private $ref;

public function setValue(string $value)
{
$this->value = urlencode($value);
}

public function getValue(Project $p): string
{
if ($this->ref !== null) {
$this->setValue($this->ref->getReferencedObject($p));
}

return $this->value;
}

public function setRefid(Reference $ref)
{
$this->ref = $ref;
}

public function __toString()
{
return $this->value;
}

protected function validate()
{
parent::validate();
if ($this->value === null && $this->ref === null) {
throw new BuildException('You must specify value or refid with the name attribute',
$this->getLocation());
}
}

public function main()
{
parent::validate();
$val = $this->getValue($this->getProject());
$this->setPropertyValue($val);
}
}
60 changes: 60 additions & 0 deletions docs/guide/en/source/appendixes/optionaltasks.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10448,6 +10448,66 @@ description="Measures the size of the project and counts the tests">
casesensitive="false" /></programlisting>
</sect2>
</sect1>
<sect1 role="taskdef" xml:id="URLEncodeTask">
<title>URLEncodeTask</title>
<para> The URLEncode task will encode a given property for use within a a URL string. This value which is
actually set will be encoded via the urlencode() function. Typically, you must do this
for all parameter values within a URL.
</para>
<table>
<title>Attributes</title>
<tgroup cols="5">
<colspec colname="name" colnum="1" colwidth="1.5*"/>
<colspec colname="type" colnum="2" colwidth="0.8*"/>
<colspec colname="description" colnum="3" colwidth="3.5*"/>
<colspec colname="default" colnum="4" colwidth="0.8*"/>
<colspec colname="required" colnum="5" colwidth="1.2*"/>
<thead>
<row>
<entry>Name</entry>
<entry>Type</entry>
<entry>Description</entry>
<entry>Default</entry>
<entry>Required</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>property</literal></entry>
<entry><literal role="type">String</literal></entry>
<entry>The name of the property to set.</entry>
<entry>n/a</entry>
<entry>Yes</entry>
</row>
<row>
<entry><literal>override</literal></entry>
<entry><literal role="type">Boolean</literal></entry>
<entry>If the property is already set, should we change it's value. Can be <literal>true</literal> or <literal>false</literal></entry>
<entry>false</entry>
<entry>No</entry>
</row>
<row>
<entry><literal>value</literal></entry>
<entry><literal role="type">String</literal></entry>
<entry>The value of the property.</entry>
<entry>n/a</entry>
<entry>No, if refid is specified</entry>
</row>
<row>
<entry><literal>refid</literal></entry>
<entry><literal role="type">String</literal></entry>
<entry>The id of a saved reference whose value will be the value of the property.</entry>
<entry>n/a</entry>
<entry>No, if value is specified</entry>
</row>
</tbody>
</tgroup>
</table>
<sect2>
<title>Example</title>
<programlisting language="xml">&lt;urlencode name="file.location" value="C:\\wwwhome\\my reports\\report.xml" /></programlisting>
</sect2>
</sect1>
</sect1>
<sect1 role="taskdef" xml:id="rSTTask">
<title>rSTTask</title>
Expand Down
18 changes: 18 additions & 0 deletions etc/phing-grammar.rng
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@
<ref name="throw"/>
<ref name="untar"/>
<ref name="unzip"/>
<ref name="urlencode"/>
<ref name="version"/>
<ref name="wikipublish"/>
<ref name="xmllint"/>
Expand Down Expand Up @@ -5500,6 +5501,23 @@
</element>
</define>

<define name="urlencode">
<element name="urlencode">
<interleave>
<attribute name="property"/>
<optional>
<attribute name="override">
<data type="boolean"/>
</attribute>
</optional>
<choice>
<attribute name="value"/>
<attribute name="refid"/>
</choice>
</interleave>
</element>
</define>

<define name="replaceregexp_task">
<element name="replaceregexp">
<interleave>
Expand Down
46 changes: 46 additions & 0 deletions test/classes/phing/tasks/ext/property/URLEncodeTaskTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php
/**
* 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>.
*/

/**
* Tests the URLEncode Task
*
* @author Siad Ardroumli <siad.ardroumli@gmail.com>
* @package phing.tasks.ext.property
*/
class URLEncodeTaskTest extends BuildFileTest
{
public function setUp()
{
$this->configureProject(
PHING_TEST_BASE . '/etc/tasks/ext/property/URLEncodeTaskTest.xml'
);
}

public function testURLEncodeTask()
{
$this->executeTarget(__FUNCTION__);
$this->assertPropertyEquals('test1', '%C3%B6%C3%B6%C3%B6%C3%B6');
}

public function testRefid()
{
$this->executeTarget(__FUNCTION__);
$this->assertPropertyEquals('test2', '%C3%BC%C3%BC%C3%BC%C3%BC');
}
}
33 changes: 33 additions & 0 deletions test/etc/tasks/ext/property/URLEncodeTaskTest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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>.
-->

<project name="URLEncodeTaskTest" default="testURLEncodeTask">

<property id="ref" name="reference" value="üüüü"/>

<target name="testURLEncodeTask">
<urlencode property="test1" value="öööö" />
<echo msg="${test1}" />
</target>

<target name="testRefid">
<urlencode property="test2" refid="ref" />
<echo msg="${test2}" />
</target>
</project>

0 comments on commit 8fcfe00

Please sign in to comment.