فهرست منبع

N°743 Portal: Only editable fields are now passed in forms submit, fixing issue where a portal user could unwillingly change the UserRequest status if a Support Agent had assign the ticket while the portal user was editing.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4855 a333f486-631f-4898-b8df-5754b55c2be0
glajarige 7 سال پیش
والد
کامیت
4a2c0b4289

+ 8 - 8
sources/renderer/bootstrap/fieldrenderer/bslinkedsetfieldrenderer.class.inc.php

@@ -287,11 +287,14 @@ EOF
 EOF
 			);
 
-			// Attaching JS widget
-			$sObjectInformationsUrl = $this->oField->GetInformationEndpoint();
-			$oOutput->AddJs(
+			// Additional features if in edition mode
+			if (!$this->oField->GetReadOnly())
+			{
+                // Attaching JS widget
+                $sObjectInformationsUrl = $this->oField->GetInformationEndpoint();
+                $oOutput->AddJs(
 <<<EOF
-				$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field({
+                $("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field({
 					'validators': {$this->GetValidatorsAsJson()},
 					'get_current_value_callback': function(me, oEvent, oData){
 						var value = null;
@@ -386,11 +389,8 @@ EOF
 					}
 				});
 EOF
-			);
+                );
 
-			// Additional features if in edition mode
-			if (!$this->oField->GetReadOnly())
-			{
 				// Rendering table
 				// - Vars
 				$sButtonRemoveId = 'btn_remove_' . $this->oField->GetGlobalId();

+ 0 - 24
sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php

@@ -352,30 +352,6 @@ EOF
 
 			// Closing container
 			$oOutput->AddHtml('</div>');
-
-			// JS FieldChange trigger (:input are not always at the same depth)
-			$oOutput->AddJs(
-<<<EOF
-				$("#{$this->oField->GetGlobalId()}").off("change keyup").on("change keyup", function(){
-					var me = this;
-
-					$(this).closest(".field_set").trigger("field_change", {
-						id: $(me).attr("id"),
-						name: $(me).closest(".form_field").attr("data-field-id"),
-						value: $(me).val()
-					});
-				});
-EOF
-			);
-
-			// Attaching JS widget
-			$oOutput->AddJs(
-<<<EOF
-				$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field({
-					'validators': {$this->GetValidatorsAsJson()}
-				});
-EOF
-			);
 		}
 
 		return $oOutput;

+ 124 - 123
sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php

@@ -53,6 +53,7 @@ class BsSimpleFieldRenderer extends FieldRenderer
 		// Rendering field in edition mode
 		if (!$this->oField->GetReadOnly() && !$this->oField->GetHidden())
 		{
+		    // HTML content
 			switch ($sFieldClass)
 			{
                 case 'Combodo\\iTop\\Form\\Field\\DateTimeField':
@@ -211,6 +212,128 @@ EOF
 					$oOutput->AddHtml('<input type="hidden" id="' . $this->oField->GetGlobalId() . '" name="' . $this->oField->GetId() . '" value="')->AddHtml($this->oField->GetCurrentValue(), true)->AddHtml('"/>');
 					break;
 			}
+
+            // JS FieldChange trigger (:input are not always at the same depth)
+            switch ($sFieldClass)
+            {
+                case 'Combodo\\iTop\\Form\\Field\\PasswordField':
+                case 'Combodo\\iTop\\Form\\Field\\StringField':
+                case 'Combodo\\iTop\\Form\\Field\\UrlField':
+                case 'Combodo\\iTop\\Form\\Field\\EmailField':
+                case 'Combodo\\iTop\\Form\\Field\\TextAreaField':
+                case 'Combodo\\iTop\\Form\\Field\\CaseLogField':
+                case 'Combodo\\iTop\\Form\\Field\\SelectField':
+                case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField':
+                case 'Combodo\\iTop\\Form\\Field\\HiddenField':
+                    $oOutput->AddJs(
+                        <<<EOF
+                        					$("#{$this->oField->GetGlobalId()}").off("change keyup").on("change keyup", function(){
+						var me = this;
+
+						$(this).closest(".field_set").trigger("field_change", {
+							id: $(me).attr("id"),
+							name: $(me).closest(".form_field").attr("data-field-id"),
+							value: $(me).val()
+						});
+					});
+EOF
+                    );
+                    break;
+                case 'Combodo\\iTop\\Form\\Field\\DateTimeField':
+                    // We need the focusout event has the datepicker widget seems to override the change event
+                    $oOutput->AddJs(
+                        <<<EOF
+                        					$("#{$this->oField->GetGlobalId()}").off("change keyup focusout").on("change keyup focusout", function(){
+						var me = this;
+
+						$(this).closest(".field_set").trigger("field_change", {
+							id: $(me).attr("id"),
+							name: $(me).closest(".form_field").attr("data-field-id"),
+							value: $(me).val()
+						});
+					});
+EOF
+                    );
+                    break;
+
+                case 'Combodo\\iTop\\Form\\Field\\RadioField':
+                case 'Combodo\\iTop\\Form\\Field\\CheckboxField':
+                    $oOutput->AddJs(
+                        <<<EOF
+                        					$("#{$this->oField->GetGlobalId()} input").off("change").on("change", function(){
+						var me = this;
+
+						$(this).closest(".field_set").trigger("field_change", {
+							id: $(me).closest("#{$this->oField->GetGlobalId()}").attr("id"),
+							name: $(me).attr("name"),
+							value: $(me).val()
+						});
+					});
+EOF
+                    );
+                    break;
+            }
+
+            // JS Form field widget construct
+            $aValidators = array();
+            foreach ($this->oField->GetValidators() as $oValidator)
+            {
+                $aValidators[$oValidator::GetName()] = array(
+                    'reg_exp' => $oValidator->GetRegExp(),
+                    'message' => Dict::S($oValidator->GetErrorMessage())
+                );
+            }
+
+            $sFormFieldOptions = json_encode(array(
+                'validators' => $aValidators
+            ));
+
+            switch ($sFieldClass)
+            {
+                case 'Combodo\\iTop\\Form\\Field\\PasswordField':
+                case 'Combodo\\iTop\\Form\\Field\\StringField':
+                case 'Combodo\\iTop\\Form\\Field\\UrlField':
+                case 'Combodo\\iTop\\Form\\Field\\EmailField':
+                case 'Combodo\\iTop\\Form\\Field\\SelectField':
+                case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField':
+                case 'Combodo\\iTop\\Form\\Field\\HiddenField':
+                case 'Combodo\\iTop\\Form\\Field\\RadioField':
+                case 'Combodo\\iTop\\Form\\Field\\CheckboxField':
+                case 'Combodo\\iTop\\Form\\Field\\DateTimeField':
+                    $oOutput->AddJs(
+                        <<<EOF
+    					$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field($sFormFieldOptions);
+EOF
+                    );
+                    break;
+                case 'Combodo\\iTop\\Form\\Field\\TextAreaField':
+                case 'Combodo\\iTop\\Form\\Field\\CaseLogField':
+                    $bRichEditor = ($this->oField->GetFormat() === TextAreaField::ENUM_FORMAT_HTML);
+                    if($bRichEditor)
+                    {
+                        // Overloading $sFormFieldOptions to include the set_current_value_callback. It would have been nicer to refactor the variable for all field types, but as this is a fix for a maintenance release, we rather be safe.
+                        $sValidators = json_encode($aValidators);
+                        $oOutput->AddJs(
+                            <<<EOF
+                            $("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field_html({
+                            validators: $sValidators,
+                            set_current_value_callback: function(me, oEvent, oData){ $(me.element).find('textarea').val(oData); }
+                        });
+EOF
+                        );
+                        // MagnificPopup on images
+                        $oOutput->AddJs(InlineImage::FixImagesWidth());
+                    }
+                    else
+                    {
+                        $oOutput->AddJs(
+                            <<<EOF
+        					$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field($sFormFieldOptions);
+EOF
+                        );
+                    }
+                    break;
+            }
 		}
 		// ... and in read-only mode (or hidden)
 		else
@@ -246,7 +369,7 @@ EOF
                             $oOutput->AddHtml('</div>');
 
                             // Value
-                            $bEncodeHtmlEntities = (in_array($sFieldClass, array('Combodo\\iTop\\Form\\Field\\UrlField', 'Combodo\\iTop\\Form\\Field\\EmailField'))) ? false : true;
+                            $bEncodeHtmlEntities = ($sFieldClass === 'Combodo\\iTop\\Form\\Field\\UrlField') ? false : true;
                             $oOutput->AddHtml('<div class="form_field_control">');
 							$oOutput->AddHtml('<div class="form-control-static">')->AddHtml($this->oField->GetDisplayValue(), $bEncodeHtmlEntities)->AddHtml('</div>');
                             $oOutput->AddHtml('</div>');
@@ -389,128 +512,6 @@ EOF
 			}
 		}
 
-		// JS FieldChange trigger (:input are not always at the same depth)
-		switch ($sFieldClass)
-		{
-			case 'Combodo\\iTop\\Form\\Field\\PasswordField':
-            case 'Combodo\\iTop\\Form\\Field\\StringField':
-            case 'Combodo\\iTop\\Form\\Field\\UrlField':
-            case 'Combodo\\iTop\\Form\\Field\\EmailField':
-			case 'Combodo\\iTop\\Form\\Field\\TextAreaField':
-			case 'Combodo\\iTop\\Form\\Field\\CaseLogField':
-			case 'Combodo\\iTop\\Form\\Field\\SelectField':
-			case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField':
-			case 'Combodo\\iTop\\Form\\Field\\HiddenField':
-				$oOutput->AddJs(
-<<<EOF
-					$("#{$this->oField->GetGlobalId()}").off("change keyup").on("change keyup", function(){
-						var me = this;
-
-						$(this).closest(".field_set").trigger("field_change", {
-							id: $(me).attr("id"),
-							name: $(me).closest(".form_field").attr("data-field-id"),
-							value: $(me).val()
-						});
-					});
-EOF
-				);
-				break;
-			case 'Combodo\\iTop\\Form\\Field\\DateTimeField':
-				// We need the focusout event has the datepicker widget seems to override the change event
-				$oOutput->AddJs(
-<<<EOF
-					$("#{$this->oField->GetGlobalId()}").off("change keyup focusout").on("change keyup focusout", function(){
-						var me = this;
-
-						$(this).closest(".field_set").trigger("field_change", {
-							id: $(me).attr("id"),
-							name: $(me).closest(".form_field").attr("data-field-id"),
-							value: $(me).val()
-						});
-					});
-EOF
-				);
-				break;
-
-			case 'Combodo\\iTop\\Form\\Field\\RadioField':
-			case 'Combodo\\iTop\\Form\\Field\\CheckboxField':
-				$oOutput->AddJs(
-<<<EOF
-					$("#{$this->oField->GetGlobalId()} input").off("change").on("change", function(){
-						var me = this;
-
-						$(this).closest(".field_set").trigger("field_change", {
-							id: $(me).closest("#{$this->oField->GetGlobalId()}").attr("id"),
-							name: $(me).attr("name"),
-							value: $(me).val()
-						});
-					});
-EOF
-				);
-				break;
-		}
-
-		// JS Form field widget construct
-		$aValidators = array();
-		foreach ($this->oField->GetValidators() as $oValidator)
-		{
-			$aValidators[$oValidator::GetName()] = array(
-				'reg_exp' => $oValidator->GetRegExp(),
-				'message' => Dict::S($oValidator->GetErrorMessage())
-			);
-		}
-
-		$sFormFieldOptions = json_encode(array(
-			'validators' => $aValidators
-		));
-
-		switch ($sFieldClass)
-		{
-			case 'Combodo\\iTop\\Form\\Field\\PasswordField':
-            case 'Combodo\\iTop\\Form\\Field\\StringField':
-            case 'Combodo\\iTop\\Form\\Field\\UrlField':
-            case 'Combodo\\iTop\\Form\\Field\\EmailField':
-			case 'Combodo\\iTop\\Form\\Field\\SelectField':
-			case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField':
-			case 'Combodo\\iTop\\Form\\Field\\HiddenField':
-			case 'Combodo\\iTop\\Form\\Field\\RadioField':
-			case 'Combodo\\iTop\\Form\\Field\\CheckboxField':
-			case 'Combodo\\iTop\\Form\\Field\\DateTimeField':
-				$oOutput->AddJs(
-					<<<EOF
-					$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field($sFormFieldOptions);
-EOF
-				);
-				break;
-			case 'Combodo\\iTop\\Form\\Field\\TextAreaField':
-			case 'Combodo\\iTop\\Form\\Field\\CaseLogField':
-                $bRichEditor = ($this->oField->GetFormat() === TextAreaField::ENUM_FORMAT_HTML);
-			    if($bRichEditor)
-			    {
-                    // Overloading $sFormFieldOptions to include the set_current_value_callback. It would have been nicer to refactor the variable for all field types, but as this is a fix for a maintenance release, we rather be safe.
-                    $sValidators = json_encode($aValidators);
-                    $oOutput->AddJs(
-                        <<<EOF
-                        $("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field_html({
-                            validators: $sValidators,
-                            set_current_value_callback: function(me, oEvent, oData){ $(me.element).find('textarea').val(oData); }
-                        });
-EOF
-                    );
-                    // MagnificPopup on images
-                    $oOutput->AddJs(InlineImage::FixImagesWidth());
-                }
-                else
-                {
-                    $oOutput->AddJs(
-                        <<<EOF
-    					$("[data-field-id='{$this->oField->GetId()}'][data-form-path='{$this->oField->GetFormPath()}']").portal_form_field($sFormFieldOptions);
-EOF
-                    );
-                }
-				break;
-		}
-
 		return $oOutput;
 	}