From a5c006b593e1386b5e42577efde208a62e3acf93 Mon Sep 17 00:00:00 2001
From: Cameron <e107inc@gmail.com>
Date: Mon, 12 Sep 2016 11:30:08 -0700
Subject: [PATCH] AdminUI: Fixes saving of checkbox values when values are
 empty. Language-class: additional option added to installed() for en=>English
  array format.

---
 e107_handlers/admin_ui.php       |  9 +++++++
 e107_handlers/language_class.php | 40 ++++++++++++++++++++++++--------
 2 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php
index 84199675f..9347fd6a3 100644
--- a/e107_handlers/admin_ui.php
+++ b/e107_handlers/admin_ui.php
@@ -5403,8 +5403,17 @@ class e_admin_ui extends e_admin_controller_ui
 	{
 		$data = $this->getPosted();
 
+		foreach($this->prefs as $k=>$v) // fix for empty checkboxes - need to save a value.
+		{
+			if(!isset($data[$k]) && $v['data'] !== false && ($v['type'] == 'checkboxes' || $v['type'] == 'checkbox'))
+			{
+				$data[$k] = null;
+			}
+		}
+
 		foreach($data as $key=>$val)
 		{
+
 			if(!empty($this->prefs[$key]['multilan']))
 			{
 
diff --git a/e107_handlers/language_class.php b/e107_handlers/language_class.php
index 97fdbf010..a2b59d484 100644
--- a/e107_handlers/language_class.php
+++ b/e107_handlers/language_class.php
@@ -392,6 +392,7 @@ class language{
 	 * @param str $type - English or Native.
 	 * @example type = english: array(0=>'English', 1=>'French' ...)
 	 * @example type = native: array('English'=>'English', 'French'=>'Francais'...)
+	 * @example type = abbr: array('en'=>'English, 'fr'=>'French' ... )
 	 * @return array
 	 */
 	function installed($type='english')
@@ -415,20 +416,39 @@ class language{
 			$this->lanlist = array_intersect($lanlist,$this->list);
 		}
 
-		if($type == 'native')
+		switch($type)
 		{
-			$natList = array();
-			foreach($this->lanlist as $lang)
-			{
-				$natList[$lang] = $this->toNative($lang);
-			}
+			case "native":
+				$natList = array();
+				foreach($this->lanlist as $lang)
+				{
+					$natList[$lang] = $this->toNative($lang);
+				}
 
-			natsort($natList);
+				natsort($natList);
 
-			return $natList;
+				return $natList;
+				break;
+
+			case "abbr":
+				$natList = array();
+				foreach($this->lanlist as $lang)
+				{
+					$iso = $this->convert($lang);
+					$natList[$iso] = $lang;
+				}
+
+				natsort($natList);
+
+				return $natList;
+				break;
+
+			case "english":
+			default:
+				return $this->lanlist;
 		}
-		
-		return $this->lanlist;
+
+
 	}