From b1067cd328c10c6697408d490f742fbfc9c36b46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=B3na=20Lore?= <lonalore@freemail.hu>
Date: Thu, 2 Feb 2017 20:59:51 +0100
Subject: [PATCH] Possible fix for issue #2351.

---
 e107_handlers/form_handler.php   |  6 ++---
 e107_web/js/core/admin.jquery.js | 40 +++++++++++++++++++++++++++-----
 2 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 2cb7917f9..a588d724b 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -3871,8 +3871,8 @@ class e_form
 				$jsonArray[$k] = str_replace("'", "`", $v);	
 			}
 		}
-		$source = str_replace('"',"'",json_encode($jsonArray, JSON_FORCE_OBJECT)); // SecretR - force object, fix number of bugs
-		
+
+		$source = e107::getParser()->toJSON($jsonArray);
 		
 		$mode = preg_replace('/[^\w]/', '', vartrue($_GET['mode'], ''));
 
@@ -3892,7 +3892,7 @@ class e_form
 		unset( $options['title']);
 
 		$text = "<a class='e-tip e-editable editable-click ".$class."' data-name='".$dbField."' ";
-		$text .= (is_array($array)) ? "data-source=\"".$source."\"  " : "";
+		$text .= (is_array($array)) ? "data-source='".$source."'  " : "";
 		$text .= " title=\"".$title."\" data-type='".$type."' data-inputclass='x-editable-".$this->name2id($dbField)." ".$class."' data-value=\"{$curVal}\"   href='#' ";
 
 		if(!empty($options))
diff --git a/e107_web/js/core/admin.jquery.js b/e107_web/js/core/admin.jquery.js
index d9f8b2b21..2b786f65d 100644
--- a/e107_web/js/core/admin.jquery.js
+++ b/e107_web/js/core/admin.jquery.js
@@ -173,12 +173,40 @@ $(document).ready(function()
 		
 		$("#uiModal").draggable({
    			 handle: ".modal-header"
-		}); 
-		
-	
-		$('div.e-container').editable({
-			selector: '.e-editable'
-         });
+		});
+
+
+	$('div.e-container').editable({
+		selector: '.e-editable',
+		display: function (value, sourceData)
+		{
+			// HTML entities decoding... fix for:
+			// @see https://github.com/e107inc/e107/issues/2351
+			$.each(sourceData, function (index, element)
+			{
+				element.text = $("<div/>").html(element.text).text();
+				sourceData[index] = element;
+			});
+
+			// Display checklist as comma-separated values.
+			var html = [];
+			var checked = $.fn.editableutils.itemsByValue(value, sourceData);
+
+			if(checked.length)
+			{
+				$.each(checked, function (i, v)
+				{
+					html.push($.fn.editableutils.escape(v.text));
+				});
+
+				$(this).html(html.join(', '));
+			}
+			else
+			{
+				$(this).empty();
+			}
+		}
+	});
 		
 //		$('.e-editable').editable();