From c927f9343001b456c1fa25dc541c3f1b005510f8 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sat, 5 Aug 2006 03:42:04 +0000 Subject: Fixed #278 --- .gitattributes | 5 ++ HISTORY | 1 + demos/quickstart/protected/controls/DocLink.php | 3 +- .../Samples/TClientSideValidator/Home.page | 41 ++++++++++++++++ .../Controls/Samples/TClientSideValidator/Home.php | 23 +++++++++ .../protected/pages/Controls/Validation.page | 35 ++++++++++++++ framework/I18N/core/Gettext/MO.php | 1 + framework/I18N/core/Gettext/PO.php | 1 + framework/I18N/core/MessageSource_XLIFF.php | 1 + framework/Web/Javascripts/js/validator.js | 3 +- framework/Web/Javascripts/prado/validation3.js | 2 + .../tickets/protected/pages/Ticket278.page | 42 +++++++++++++++++ .../tickets/protected/pages/Ticket278.php | 23 +++++++++ .../tickets/tests/Ticket278TestCase.php | 54 ++++++++++++++++++++++ 14 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket278.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket278.php create mode 100644 tests/FunctionalTests/tickets/tests/Ticket278TestCase.php diff --git a/.gitattributes b/.gitattributes index 59691acb..59fc1a0d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -854,6 +854,8 @@ demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php -text +demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page -text +demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.page -text @@ -1631,6 +1633,8 @@ tests/FunctionalTests/tickets/protected/pages/Ticket239.php -text tests/FunctionalTests/tickets/protected/pages/Ticket269.page -text tests/FunctionalTests/tickets/protected/pages/Ticket27.page -text tests/FunctionalTests/tickets/protected/pages/Ticket274.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket278.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket278.php -text tests/FunctionalTests/tickets/protected/pages/Ticket28.page -text tests/FunctionalTests/tickets/protected/pages/Ticket28.php -text tests/FunctionalTests/tickets/protected/pages/Ticket284.page -text @@ -1658,6 +1662,7 @@ tests/FunctionalTests/tickets/tests/Ticket191TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket21TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket239TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket274TestCase.php -text +tests/FunctionalTests/tickets/tests/Ticket278TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket27TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket284TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket285TestCase.php -text diff --git a/HISTORY b/HISTORY index bb2026ca..8d3aa63f 100644 --- a/HISTORY +++ b/HISTORY @@ -20,6 +20,7 @@ ENH: Ticket#223 - Use TRequiredFieldValidator for TRadioButtons with GroupName p ENH: StringLength, multi-byte, check in TRangeValidator (Wei) ENH: Ticket#263 - TListBox and TDropDownList support optgroup now (Qiang) ENH: Ticket#277 - Added TControl.CustomData property (Qiang) +ENH: Ticket#278 - client-side validator enable/disable (conditional) (Wei) ENH: Ticket#287 - TControl::broadcastEvent() may raise events now (Qiang) ENH: Ticket#292 - Added THttpRequest::parseUrl() so that it is easier to be extended (Qiang) ENH: Ticket#309 - Added THttpRequest.UrlParamSeparator property (Qiang) diff --git a/demos/quickstart/protected/controls/DocLink.php b/demos/quickstart/protected/controls/DocLink.php index 74398efb..e8ca7dfa 100644 --- a/demos/quickstart/protected/controls/DocLink.php +++ b/demos/quickstart/protected/controls/DocLink.php @@ -22,7 +22,8 @@ class DocLink extends THyperLink { $classFile=array_pop($paths).'.html'; $this->setNavigateUrl(self::BASE_URL . '/' . implode('.',$paths) . '/' . $classFile); - $this->setText('API Manual'); + if($this->getText() === '') + $this->setText('API Manual'); } } } diff --git a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page new file mode 100644 index 00000000..e96e7c12 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page @@ -0,0 +1,41 @@ + +

Validator Toggle - Server and Client Side

+ + + +
+ +
+ + + + + + + Event.OnLoad(function() + { + Event.observe("<%= $this->check1->ClientID %>", "click", function(ev) + { + $("<%= $this->panel1->ClientID %>").toggle(); + }); + }); + +
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php new file mode 100644 index 00000000..c5440996 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php @@ -0,0 +1,23 @@ +Enabled = $this->check1->Checked; + } + + function validate2_onPostValidate($sender, $param) + { + $sender->Enabled = true; + } + + function onPreRender($param) + { + parent::onPreRender($param); + $this->panel1->Style = + $this->check1->Checked ? "display:block" : "display:none"; + } +} + +?> \ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Validation.page b/demos/quickstart/protected/pages/Controls/Validation.page index 12836b8c..2241f346 100644 --- a/demos/quickstart/protected/pages/Controls/Validation.page +++ b/demos/quickstart/protected/pages/Controls/Validation.page @@ -151,4 +151,39 @@ The summary can be displayed as a list, a bulleted list, or a single paragraph b

+

Client and Server Side Conditional Validation

+

+ All validators contains the following events. +

+ The corresponding events for the client side is available as sub-properties + of the ClientSide property of the validator. +

+

The following example pop-up a message saying "hello" when the validator fails on the client-side. + +<com:TRequiredFieldValidator ... > + <prop:ClientSide.OnError> + alert("hello"); + </prop:ClientSide.OnError> +</com:TRequiredFieldValidator> + +The resulting client-side event callback function is of the following form. + +function onErrorHandler(validator, sender) +{ + alert("hello"); +} + +Where validator is the current client-side validator and sender +is the control that invoked the validator. +

+

Conditional Validation Example

+

+The following example show the use of client-side and server side validator events. The example +demonstrates conditional validation. + +

\ No newline at end of file diff --git a/framework/I18N/core/Gettext/MO.php b/framework/I18N/core/Gettext/MO.php index f3be1a30..a93e956f 100644 --- a/framework/I18N/core/Gettext/MO.php +++ b/framework/I18N/core/Gettext/MO.php @@ -349,6 +349,7 @@ class TGettext_MO extends TGettext // done @flock($this->_handle, LOCK_UN); @fclose($this->_handle); + chmod($file,0777); return true; } } diff --git a/framework/I18N/core/Gettext/PO.php b/framework/I18N/core/Gettext/PO.php index 3c69c091..90942fa1 100644 --- a/framework/I18N/core/Gettext/PO.php +++ b/framework/I18N/core/Gettext/PO.php @@ -154,6 +154,7 @@ class TGettext_PO extends TGettext //done @flock($fh, LOCK_UN); @fclose($fh); + chmod($file,0777); return true; } } diff --git a/framework/I18N/core/MessageSource_XLIFF.php b/framework/I18N/core/MessageSource_XLIFF.php index 15af971a..7f2f27c5 100644 --- a/framework/I18N/core/MessageSource_XLIFF.php +++ b/framework/I18N/core/MessageSource_XLIFF.php @@ -481,6 +481,7 @@ class MessageSource_XLIFF extends MessageSource if(!is_dir($dir)) throw new TException("Unable to create directory $dir"); file_put_contents($file, $this->getTemplate($catalogue)); + chmod($file, 0777); return array($variant, $file); } diff --git a/framework/Web/Javascripts/js/validator.js b/framework/Web/Javascripts/js/validator.js index 0e39d191..cecc6881 100644 --- a/framework/Web/Javascripts/js/validator.js +++ b/framework/Web/Javascripts/js/validator.js @@ -96,7 +96,8 @@ control.addClassName(CssClass);}},hide:function() {this.isValid=true;this.updateControl();this.visible=false;},validate:function(invoker) {if(typeof(this.options.OnValidate)=="function") this.options.OnValidate(this,invoker);if(this.enabled) -this.isValid=this.evaluateIsValid();if(this.isValid) +this.isValid=this.evaluateIsValid();else +this.isValid=true;if(this.isValid) {if(typeof(this.options.OnSuccess)=="function") {this.visible=true;this.message.style.visibility="visible";this.updateControlCssClass(this.control,this.isValid);this.options.OnSuccess(this,invoker);} else diff --git a/framework/Web/Javascripts/prado/validation3.js b/framework/Web/Javascripts/prado/validation3.js index b1b20722..139f99f1 100644 --- a/framework/Web/Javascripts/prado/validation3.js +++ b/framework/Web/Javascripts/prado/validation3.js @@ -652,6 +652,8 @@ Prado.WebUI.TBaseValidator.prototype = if(this.enabled) this.isValid = this.evaluateIsValid(); + else + this.isValid = true; if(this.isValid) { diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket278.page b/tests/FunctionalTests/tickets/protected/pages/Ticket278.page new file mode 100644 index 00000000..75aed4d9 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket278.page @@ -0,0 +1,42 @@ + + + + + +
+ +
+ + + + + + + Event.OnLoad(function() + { + Event.observe("<%= $this->check1->ClientID %>", "click", function(ev) + { + $("<%= $this->panel1->ClientID %>").toggle(); + }); + }); + + +
\ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket278.php b/tests/FunctionalTests/tickets/protected/pages/Ticket278.php new file mode 100644 index 00000000..1aadee77 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket278.php @@ -0,0 +1,23 @@ +Enabled = $this->check1->Checked; + } + + function validate2_onPostValidate($sender, $param) + { + $sender->Enabled = true; + } + + function onPreRender($param) + { + parent::onPreRender($param); + $this->panel1->Style = + $this->check1->Checked ? "display:block" : "display:none"; + } +} + +?> \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/tests/Ticket278TestCase.php b/tests/FunctionalTests/tickets/tests/Ticket278TestCase.php new file mode 100644 index 00000000..bd631c14 --- /dev/null +++ b/tests/FunctionalTests/tickets/tests/Ticket278TestCase.php @@ -0,0 +1,54 @@ +open('tickets/index.php?page=Ticket278'); + $this->assertTitle('Verifying Ticket 278'); + $this->assertNotVisible($base.'validator1'); + $this->assertNotVisible($base.'validator2'); + $this->assertNotVisible($base.'panel1'); + + $this->click($base.'button1'); + $this->assertVisible($base.'validator1'); + $this->assertNotVisible($base.'validator2'); + + $this->type($base.'text1', 'asd'); + $this->clickAndWait($base.'button1'); + $this->assertNotVisible($base.'validator1'); + $this->assertNotVisible($base.'validator2'); + $this->assertNotVisible($base.'panel1'); + + $this->click($base.'check1'); + $this->click($base.'button1'); + $this->assertNotVisible($base.'validator1'); + $this->assertVisible($base.'validator2'); + $this->assertVisible($base.'panel1'); + + + $this->type($base.'text1', ''); + $this->type($base.'text2', 'asd'); + $this->click($base.'button1'); + $this->assertVisible($base.'validator1'); + $this->assertNotVisible($base.'validator2'); + $this->assertVisible($base.'panel1'); + + + $this->type($base.'text1', 'asd'); + $this->clickAndWait($base.'button1'); + $this->assertNotVisible($base.'validator1'); + $this->assertNotVisible($base.'validator2'); + $this->assertVisible($base.'panel1'); + + $this->type($base.'text1', ''); + $this->type($base.'text2', ''); + $this->click($base.'button1'); + $this->assertVisible($base.'validator1'); + $this->assertVisible($base.'validator2'); + $this->assertVisible($base.'panel1'); + } +} + +?> \ No newline at end of file -- cgit v1.2.3