summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--HISTORY2
-rw-r--r--buildscripts/phing/tasks/BuildPradoPEARPackageTask.php6
-rw-r--r--framework/3rdParty/readme.html69
-rw-r--r--framework/I18N/core/data/license.txt35
-rw-r--r--framework/Web/Javascripts/js/prado.js4
-rw-r--r--framework/Web/Javascripts/prado/element.js4
-rw-r--r--framework/Web/THttpRequest.php34
-rw-r--r--framework/Web/UI/TTemplateManager.php2
-rw-r--r--framework/Web/UI/WebControls/TBaseValidator.php11
-rw-r--r--framework/Web/UI/WebControls/TValidationSummary.php6
-rw-r--r--tests/FunctionalTests/features/protected/pages/ValidatorEffects.page18
12 files changed, 157 insertions, 35 deletions
diff --git a/.gitattributes b/.gitattributes
index ea8660ec..a9170941 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -719,6 +719,7 @@ framework/I18N/core/data/kok.dat -text
framework/I18N/core/data/kok_IN.dat -text
framework/I18N/core/data/kw.dat -text
framework/I18N/core/data/kw_GB.dat -text
+framework/I18N/core/data/license.txt -text
framework/I18N/core/data/lt.dat -text
framework/I18N/core/data/lt_LT.dat -text
framework/I18N/core/data/lv.dat -text
diff --git a/HISTORY b/HISTORY
index b240e13e..6211df23 100644
--- a/HISTORY
+++ b/HISTORY
@@ -25,7 +25,7 @@ ENH: TLiteral will display body content if Text is empty (Qiang)
ENH: Format string in classes extending TDataGridColumn can now evaluate an expression (Qiang)
ENH: Format string in classes extending TListControl can now evaluate an expression (Qiang)
ENH: Added THttpResponse::reload() (Qiang)
-ENH: Custom visual effects can be added to client-side validators. (Wei)
+ENH: Custom visual effects can be added to client-side validators via ClientSide property in validators. (Wei)
ENH: TJavascript::encode() allows raw javascript code when string begins with "javascript:" (Wei)
ENH: Update TinyMCE to 2.0.5.1
CHG: Rewrote client-side javascript validators, check your client-side validation behaviour (Wei)
diff --git a/buildscripts/phing/tasks/BuildPradoPEARPackageTask.php b/buildscripts/phing/tasks/BuildPradoPEARPackageTask.php
index 0e764146..72ad8798 100644
--- a/buildscripts/phing/tasks/BuildPradoPEARPackageTask.php
+++ b/buildscripts/phing/tasks/BuildPradoPEARPackageTask.php
@@ -124,9 +124,9 @@ o Team Integration - PRADO enables separation of content and presentation. Compo
$package->addMaintainer('lead', 'knut', 'Knut Urdalen', 'knut.urdalen@gmail.com');
// "core" dependencies
- $package->setPhpDep('5.0.0');
- $package->setPearinstallerDep('1.4.0');
-
+ $package->setPhpDep('5.0.4');
+ $package->setPearinstallerDep('1.4.7');
+
$package->generateContents();
$e = $package->writePackageFile();
diff --git a/framework/3rdParty/readme.html b/framework/3rdParty/readme.html
index c81d263e..b48f5b74 100644
--- a/framework/3rdParty/readme.html
+++ b/framework/3rdParty/readme.html
@@ -45,10 +45,77 @@ projects.
<tr>
<td>N.A.</td>
<td>Tar.php</td>
- <td><a href="http://www.php.net/license/3_0.txt">Version 3.0 of the PHP license</a></td>
+ <td><a href="http://www.php.net/license/3_0.txt">PHP License 3.0</a></td>
<td>System.IO.TTarFileExtractor</td>
<td>TTarFileExtractor is based on Tar.php whose author is Vincent Blavet.</td>
</tr>
+<tr>
+ <td><a href="../I18N/core/data">../I18N/core/data</a></td>
+ <td><a href="http://icu.sourceforge.net/">International Components for Unicode (Locale Data)</a></td>
+ <td><a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/*checkout*/icu/license.html">BSD???</a></td>
+ <td>System.I18N.core.*</td>
+ <td>The ICU data http://dev.icu-project.org/cgi-bin/viewcvs.cgi/icu/source/data/locales/ are PHP serialized.</td>
+</tr>
+<tr>
+ <td><a href="../I18N/core/util.php">../I18N/core/util.php</a></td>
+ <td><a href="http://pear.php.net/package/DB">PEAR :: Package :: DB</a></td>
+ <td><a href="http://www.php.net/license/3_0.txt">PHP License 3.0</a></td>
+ <td>N.A.</td>
+ <td>The parseDSN() function from DB.php file.</td>
+</tr>
+<tr>
+ <td><a href="../I18N/core/TCache_Lite.php">../I18N/core/TCache_Lite.php</a></td>
+ <td><a href="http://pear.php.net/package/Cache_Lite">PEAR :: Package :: Cache_Lite</a></td>
+ <td><a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a></td>
+ <td>N.A.</td>
+ <td>Cache_Lite class was renamed as TCache_Lite for packaging purposes.</td>
+</tr>
+<tr>
+ <td><a href="../I18N/core/Gettext">../I18N/core/Gettext</a></td>
+ <td><a href="http://pear.php.net/package/File_Gettext">PEAR :: Package :: File_Gettext</a></td>
+ <td><a href="http://www.php.net/license/3_0.txt">PHP License 3.0</a></td>
+ <td>N.A.</td>
+ <td>File_Gettext, File::Gettext::MO, and File::Gettext::PO</td>
+</tr>
+
+<tr>
+ <td><a href="../Web/Javascripts/TJSON.php">../Web/Javascripts/TJSON.php</a></td>
+ <td><a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198">Service_JSON proposal</a></td>
+ <td><a href="http://www.opensource.org/licenses/bsd-license.php">BSD</a></td>
+ <td>N.A.</td>
+ <td>JSON encoder/decoder by Michal Migurski, Matt Knapp and Brett Stimmerman</td>
+</tr>
+
+<tr>
+ <td><a href="../Web/Javascripts/effects/rico.js">../Web/Javascripts/effects/rico.js</a></td>
+ <td><a href="http://openrico.org/">Rico</a></td>
+ <td><a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License v2</a></td>
+ <td>N.A.</td>
+ <td>Rico Javascript Library (not yet utilized in Prado)</td>
+</tr>
+<tr>
+ <td><a href="../Web/Javascripts/prototype/">../Web/Javascripts/prototype</a></td>
+ <td><a href="http://dev.rubyonrails.org/browser/spinoffs/prototype">Prototype javascript library</a></td>
+ <td><a href="../Web/Javascripts/prototype/LICENSE">The Prototype License (MIT based)</a></td>
+ <td>N.A.</td>
+ <td>Core of Prado javascript library.</td>
+</tr>
+<tr>
+ <td><a href="../Web/Javascripts/extra/logger.js">../Web/Javascripts/extra/logger.js</a></td>
+ <td><a href="http://gleepglop.com/javascripts/logger/">http://gleepglop.com/javascripts/logger/</a> <a href="http://slayeroffice.com">http://slayeroffice.com</a></td>
+ <td>None</td>
+ <td>TJavascriptLogger</td>
+ <td>Javascript logger by Corey Johnson. Object Tree by S.G. Chipman.</td>
+</tr>
+
+<tr>
+ <td><a href="../Web/Javascripts/extra/json.js">../Web/Javascripts/extra/json.js</a></td>
+ <td><a href="http://www.JSON.org">http://www.JSON.org</a></td>
+ <td><a href="http://www.json.org/license.html">MIT based</a></td>
+ <td>N.A.</td>
+ <td>Has "The Software shall be used for Good, not Evil." clause.</td>
+</tr>
+
</table>
</p>
</body>
diff --git a/framework/I18N/core/data/license.txt b/framework/I18N/core/data/license.txt
new file mode 100644
index 00000000..ccbd57fe
--- /dev/null
+++ b/framework/I18N/core/data/license.txt
@@ -0,0 +1,35 @@
+ICU License - ICU 1.8.1 and later
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2005 International Business Machines Corporation and others
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+--------------------------------------------------------------------------------
+All trademarks and registered trademarks mentioned herein are the property of their respective owners.
+
diff --git a/framework/Web/Javascripts/js/prado.js b/framework/Web/Javascripts/js/prado.js
index d80f984d..498a6cf7 100644
--- a/framework/Web/Javascripts/js/prado.js
+++ b/framework/Web/Javascripts/js/prado.js
@@ -256,7 +256,7 @@ selection[method](isList?element:el,value);},click:function(element)
{var el=$(element);if(!el)return;if(document.createEvent)
{var evt=document.createEvent('HTMLEvents');evt.initEvent('click',true,true);el.dispatchEvent(evt);}
else if(el.fireEvent)
-{el.fireEvent('onclick');if(isFunction(el.onclick))
+{el.fireEvent('onclick');if(typeof(el.onclick)=="function")
el.onclick();}},setAttribute:function(element,attribute,value)
{var el=$(element);if(attribute=="disabled"&&value==false)
el.removeAttribute(attribute);else
@@ -265,7 +265,7 @@ el.setAttribute(attribute,value);},setOptions:function(element,options)
{while(el.length>0)
el.remove(0);for(var i=0;i<options.length;i++)
el.options[el.options.length]=new Option(options[i][0],options[i][1]);}},focus:function(element)
-{var obj=$(element);if(isObject(obj)&&isdef(obj.focus))
+{var obj=$(element);if(typeof(obj)!="undefined"&&typeof(obj.focus)!="undefined")
setTimeout(function(){obj.focus();},100);return false;}}
Prado.Element.Selection={inputValue:function(el,value)
{switch(el.type.toLowerCase())
diff --git a/framework/Web/Javascripts/prado/element.js b/framework/Web/Javascripts/prado/element.js
index fc84e4b1..06937253 100644
--- a/framework/Web/Javascripts/prado/element.js
+++ b/framework/Web/Javascripts/prado/element.js
@@ -38,7 +38,7 @@ Prado.Element =
else if(el.fireEvent)
{
el.fireEvent('onclick');
- if(isFunction(el.onclick))
+ if(typeof(el.onclick) == "function")
el.onclick();
}
},
@@ -71,7 +71,7 @@ Prado.Element =
focus : function(element)
{
var obj = $(element);
- if(isObject(obj) && isdef(obj.focus))
+ if(typeof(obj) != "undefined" && typeof(obj.focus) != "undefined")
setTimeout(function(){ obj.focus(); }, 100);
return false;
}
diff --git a/framework/Web/THttpRequest.php b/framework/Web/THttpRequest.php
index 5ec09fc9..71237fa1 100644
--- a/framework/Web/THttpRequest.php
+++ b/framework/Web/THttpRequest.php
@@ -161,10 +161,13 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar
$paths=explode('/',$pathInfo);
$n=count($paths);
$getVariables=array();
- for($i=0;$i<$n;++$i)
+ for($i=0;$i<$n-1;++$i)
{
- if($i+1<$n)
- $getVariables[$paths[$i]]=$paths[++$i];
+ $name=$paths[$i];
+ if(($pos=strpos($name,'[]'))!==false)
+ $getVariables[substr($name,0,$pos)][]=$paths[++$i];
+ else
+ $getVariables[$name]=$paths[++$i];
}
$this->_items=array_merge($getVariables,array_merge($_GET,$_POST));
}
@@ -452,24 +455,41 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar
if($encodeGetItems)
{
foreach($getItems as $name=>$value)
- $url.=$amp.urlencode($name).'='.urlencode($value);
+ {
+ if(is_array($value))
+ {
+ $name=urlencode($name.'[]');
+ foreach($value as $v)
+ $url.=$amp.$name.'='.$v;
+ }
+ else
+ $url.=$amp.urlencode($name).'='.urlencode($value);
+ }
}
else
{
foreach($getItems as $name=>$value)
- $url.=$amp.$name.'='.$value;
+ {
+ if(is_array($value))
+ {
+ foreach($value as $v)
+ $url.=$amp.$name.'[]='.$v;
+ }
+ else
+ $url.=$amp.$name.'='.$value;
+ }
}
}
if($this->getUrlFormat()==='Path')
{
$url=strtr($url,array($amp=>'/','?'=>'/','='=>'/'));
- if(defined('SID') && SID != '')
+ if(defined('SID') && SID != '' && !((int)ini_get('session.use_cookies')===1 && ((int)ini_get('session.use_only_cookies')===1)))
$url.='?'.SID;
return $this->getApplicationUrl().'/'.$url;
}
else
{
- if(defined('SID') && SID != '')
+ if(defined('SID') && SID != '' && !((int)ini_get('session.use_cookies')===1 && ((int)ini_get('session.use_only_cookies')===1)))
$url.=$amp.SID;
return $this->getApplicationUrl().'?'.$url;
}
diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php
index 5f75caf3..eac7c157 100644
--- a/framework/Web/UI/TTemplateManager.php
+++ b/framework/Web/UI/TTemplateManager.php
@@ -158,7 +158,7 @@ class TTemplate extends TApplicationComponent implements ITemplate
* '<%@\s*((?:\s*[\w\.]+=\'.*?\'|\s*[\w\.]+=".*?")*)\s*%>' - directives
* '<%[%#~\\$=\\[](.*?)%>' - expressions
*/
- const REGEX_RULES='/<!.*?!>|<!--.*?-->|<\/?com:([\w\.]+)((?:\s*[\w\.]+=\'.*?\'|\s*[\w\.]+=".*?"|\s*[\w\.]+=<%.*?%>)*)\s*\/?>|<\/?prop:([\w\.]+)\s*>|<%@\s*((?:\s*[\w\.]+=\'.*?\'|\s*[\w\.]+=".*?")*)\s*%>|<%[%#~\\$=\\[](.*?)%>/msS';
+ const REGEX_RULES='/<!--.*?--!>|<!--.*?-->|<\/?com:([\w\.]+)((?:\s*[\w\.]+=\'.*?\'|\s*[\w\.]+=".*?"|\s*[\w\.]+=<%.*?%>)*)\s*\/?>|<\/?prop:([\w\.]+)\s*>|<%@\s*((?:\s*[\w\.]+=\'.*?\'|\s*[\w\.]+=".*?")*)\s*%>|<%[%#~\\$=\\[](.*?)%>/msS';
/**
* Different configurations of component property/event/attribute
diff --git a/framework/Web/UI/WebControls/TBaseValidator.php b/framework/Web/UI/WebControls/TBaseValidator.php
index a63941db..ea1a5836 100644
--- a/framework/Web/UI/WebControls/TBaseValidator.php
+++ b/framework/Web/UI/WebControls/TBaseValidator.php
@@ -42,7 +42,7 @@
* be displayed. Error display is controlled by {@link setDisplay Display} property.
*
* You can also customized the client-side behaviour by adding javascript
- * code to the subproperties of the {@link getClientValidation ClientValidation}
+ * code to the subproperties of the {@link getClientSide ClientSide}
* property. See quickstart documentation for further details.
*
* You can also place a {@link TValidationSummary} control on a page to display error messages
@@ -176,7 +176,7 @@ abstract class TBaseValidator extends TLabel implements IValidator
*
* @return TValidatorClientScript javascript validator event options.
*/
- public function getClientValidation()
+ public function getClientSide()
{
if(is_null($this->_clientScript))
$this->_clientScript = $this->createClientScript();
@@ -494,10 +494,9 @@ abstract class TBaseValidator extends TLabel implements IValidator
* TValidatorClientScript class.
*
* Client-side validator events can be modified through the {@link
- * TBaseValidator::getClientValidation ClientValidation} property of a
- * validator. The subproperties of ClientValidation are those of the
- * TValidatorClientScript properties. The client-side validator supports the
- * following events.
+ * TBaseValidator::getClientSide ClientSide} property of a validator. The
+ * subproperties of ClientSide are those of the TValidatorClientScript
+ * properties. The client-side validator supports the following events.
*
* The <tt>OnValidate</tt> event is raise before the validator validation
* functions are called.
diff --git a/framework/Web/UI/WebControls/TValidationSummary.php b/framework/Web/UI/WebControls/TValidationSummary.php
index aa46142b..87821292 100644
--- a/framework/Web/UI/WebControls/TValidationSummary.php
+++ b/framework/Web/UI/WebControls/TValidationSummary.php
@@ -258,7 +258,7 @@ class TValidationSummary extends TWebControl
* @return TValidationSummaryClientScript client-side validation summary
* event options.
*/
- public function getClientValidation()
+ public function getClientSide()
{
if(is_null($this->_clientScript))
$this->_clientScript = $this->createClientScript();
@@ -376,8 +376,8 @@ class TValidationSummary extends TWebControl
*
* Client-side validation summary events such as {@link setOnHideSummary
* OnHideSummary} and {@link setOnShowSummary OnShowSummary} can be modified
- * through the {@link TBaseValidator:: getClientValidation ClientValidation}
- * property of a validation summary.
+ * through the {@link TBaseValidator:: getClientSide ClientSide} property of a
+ * validation summary.
*
* The <tt>OnHideSummary</tt> event is raise when the validation summary
* requests to hide the messages.
diff --git a/tests/FunctionalTests/features/protected/pages/ValidatorEffects.page b/tests/FunctionalTests/features/protected/pages/ValidatorEffects.page
index da03f9b8..1a97a249 100644
--- a/tests/FunctionalTests/features/protected/pages/ValidatorEffects.page
+++ b/tests/FunctionalTests/features/protected/pages/ValidatorEffects.page
@@ -16,13 +16,13 @@
ControlCssClass="required"
Display="Dynamic"
ErrorMessage="a username is required.">
- <prop:ClientValidation.OnError>
+ <prop:ClientSide.OnError>
Effect.Shake(validator.control);
Effect.Appear(validator.message);
- </prop:ClientValidation.OnError>
- <prop:ClientValidation.OnSuccess>
+ </prop:ClientSide.OnError>
+ <prop:ClientSide.OnSuccess>
Effect.Fade(validator.message);
- </prop:ClientValidation.OnSuccess>
+ </prop:ClientSide.OnSuccess>
</com:TRequiredFieldValidator>
</div>
<div class="password">
@@ -37,8 +37,8 @@
ValidationGroup="registration"
ControlCssClass="required"
Display="Dynamic"
- ClientValidation.OnError="validator.message.visualEffect('appear')"
- ClientValidation.OnSuccess="validator.message.visualEffect('fade')"
+ ClientSide.OnError="validator.message.visualEffect('appear')"
+ ClientSide.OnSuccess="validator.message.visualEffect('fade')"
ErrorMessage="a password is required." />
</div>
<div class="create">
@@ -82,12 +82,12 @@
ID="summary2"
ValidationGroup="signin"
Display="Dynamic"
- ClientValidation.OnHideSummary="Effect.Squish(summary.messages)"
+ ClientSide.OnHideSummary="Effect.Squish(summary.messages)"
HeaderText="<p>You could not login because</p>">
- <prop:ClientValidation.OnShowSummary>
+ <prop:ClientSide.OnShowSummary>
Effect.Appear(summary.messages)
Effect.Shake(summary.messages,{ queue: 'end'})
- </prop:ClientValidation.OnShowSummary>
+ </prop:ClientSide.OnShowSummary>
</com:TValidationSummary>
</div>