Browse Source

Multi Select for future extra groups

Cerothen 9 years ago
parent
commit
3879b51381
2 changed files with 95 additions and 70 deletions
  1. 57 34
      functions.php
  2. 38 36
      settings.php

+ 57 - 34
functions.php

@@ -13,7 +13,6 @@ function debug_out($variable, $die = false) {
 }
 
 // ==== Auth Plugins START ====
-
 if (function_exists('ldap_connect')) :
 	// Pass credentials to LDAP backend
 	function plugin_auth_ldap($username, $password) {
@@ -83,7 +82,7 @@ function plugin_auth_ftp($username, $password) {
 
 // Pass credentials to Emby Backend
 function plugin_auth_emby_local($username, $password) {
-	$embyAddress = qualifyURL(AUTHBACKENDHOST);
+	$embyAddress = qualifyURL(EMBYURL);
 	
 	$headers = array(
 		'Authorization'=> 'MediaBrowser UserId="e8837bc1-ad67-520e-8cd2-f629e3155721", Client="None", Device="Organizr", DeviceId="xxx", Version="1.0.0.0"',
@@ -124,7 +123,7 @@ if (function_exists('curl_version')) :
 	
 	// Authenicate against emby connect
 	function plugin_auth_emby_connect($username, $password) {
-		$embyAddress = qualifyURL(AUTHBACKENDHOST);
+		$embyAddress = qualifyURL(EMBYURL);
 		
 		// Get A User
 		$connectId = '';
@@ -969,6 +968,11 @@ function upgradeCheck() {
 		}
 		unset($config['authBackendPort']);
 		
+		// If auth is being used move it to embyURL as that is now used in auth functions
+		if ((isset($config['authType']) && $config['authType'] == 'true') && (isset($config['authBackendHost']) && $config['authBackendHost'] == 'true') && (isset($config['authBackend']) && in_array($config['authBackend'], array('emby_all','emby_local','emby_connect')))) {
+			$config['embyURL'] = $config['authBackendHost'];
+		}
+		
 		// Update Version and Commit
 		$config['CONFIG_VERSION'] = '1.33';
 		$createConfigSuccess = createConfig($config);
@@ -1027,18 +1031,19 @@ function removeFiles($path) {
 // Lazy select options
 function resolveSelectOptions($array, $selected = '') {
 	$output = array();
+	$selectedArr = explode('|', $selected);
 	foreach ($array as $key => $value) {
 		if (is_array($value)) {
 			if (isset($value['optgroup'])) {
 				$output[] = '<optgroup label="'.$key.'">';
 				foreach($value['optgroup'] as $k => $v) {
-					$output[] = '<option value="'.$v['value'].'"'.($selected===$v['value']?' selected':'').(isset($v['disabled']) && $v['disabled']?' disabled':'').'>'.$k.'</option>';
+					$output[] = '<option value="'.$v['value'].'"'.($selected===$v['value']||in_array($v['value'],$selectedArr)?' selected':'').(isset($v['disabled']) && $v['disabled']?' disabled':'').'>'.$k.'</option>';
 				}
 			} else {
-				$output[] = '<option value="'.$value['value'].'"'.($selected===$value['value']?' selected':'').(isset($value['disabled']) && $value['disabled']?' disabled':'').'>'.$key.'</option>';
+				$output[] = '<option value="'.$value['value'].'"'.($selected===$value['value']||in_array($v['value'],$selectedArr)?' selected':'').(isset($value['disabled']) && $value['disabled']?' disabled':'').'>'.$key.'</option>';
 			}
 		} else {
-			$output[] = '<option value="'.$value.'"'.($selected===$value?' selected':'').'>'.$key.'</option>';
+			$output[] = '<option value="'.$value.'"'.($selected===$value||in_array($value,$selectedArr)?' selected':'').'>'.$key.'</option>';
 		}
 		
 	}
@@ -1134,26 +1139,22 @@ function buildSettings($array) {
 		<div class="email-inner small-box">
 			<div class="email-inner-section">
 				<div class="small-box fade in" id="'.$pageID.'_frame">
-					<div class="row">
-						<div class="col-lg-12">
-							<form class="content-form" name="'.$pageID.'" id="'.$pageID.'_form" onsubmit="return false;">
-								<div style="position: relative; left: 2.5%; width: 95%;">
-									'.$fields.'
-								</div>
-								<div class="tabbable tabs-with-bg" id="'.$pageID.'_tabs">
-									<ul class="nav nav-tabs apps">
-										'.implode('', $tabSelectors).'
-									</ul>
-									<div class="clearfix"></div>
-									<div class="tab-content">
-										'.implode('', $tabContent).'
-									</div>
+					<div class="col-lg-12">
+						<form class="content-form" name="'.$pageID.'" id="'.$pageID.'_form" onsubmit="return false;">
+							'.$fields.'
+							<div class="tabbable tabs-with-bg" id="'.$pageID.'_tabs">
+								<ul class="nav nav-tabs apps">
+									'.implode('', $tabSelectors).'
+								</ul>
+								<div class="clearfix"></div>
+								<div class="tab-content">
+									'.implode('', $tabContent).'
 								</div>
-								<button type="submit" class="btn waves btn-labeled btn-success btn btn-sm pull-right text-uppercase waves-effect waves-float">
-									<span class="btn-label"><i class="fa fa-floppy-o"></i></span>Save
-								</button>
-							</form>
-						</div>
+							</div>
+							<button type="submit" class="btn waves btn-labeled btn-success btn btn-sm pull-right text-uppercase waves-effect waves-float">
+								<span class="btn-label"><i class="fa fa-floppy-o"></i></span>Save
+							</button>
+						</form>
 					</div>
 				</div>
 			</div>
@@ -1161,22 +1162,38 @@ function buildSettings($array) {
 	</div>
 	<script>
 		$(document).ready(function() {
-			$(\'#'.$pageID.'_form\').find(\'input, select, textarea\').on(\'change\', function() {
-				$(this).attr(\'data-changed\', \'true\');			
-			});
+			$(\'#'.$pageID.'_form\').find(\'input, select, textarea\').on(\'change\', function() { $(this).attr(\'data-changed\', \'true\'); });
+			$(\'#'.$pageID.'_form\').find(\'select[multiple]\').on(\'click\', function() { $(this).attr(\'data-changed\', \'true\'); });
+			
 			$(\'#'.$pageID.'_form\').submit(function () {
 				var newVals = {};
+				var hasVals = false;
 				$(\'#'.$pageID.'_form\').find(\'[data-changed=true]\').each(function() {
+					hasVals = true;
 					if (this.type == \'checkbox\') {
 						newVals[this.name] = this.checked;
 					} else {
-						newVals[this.name] = $(this).val();
+						var fieldVal = $(this).val();
+						if (typeof fieldVal == \'object\') {
+							if (typeof fieldVal.join == \'function\') {
+								fieldVal = fieldVal.join(\'|\');
+							} else {
+								fieldVal = JSON.stringify(fieldVal);
+							}
+						}
+						newVals[this.name] = fieldVal;
 					}
 				});
-				$.post(\'ajax.php?a=update-config\', newVals, function(data) {
-					console.log(data);
-					parent.notify(data.html, data.icon, data.type, data.length, data.layout, data.effect);
-				}, \'json\');
+				if (hasVals) {
+					console.log(newVals);
+					$.post(\'ajax.php?a=update-config\', newVals, function(data) {
+						console.log(data);
+						$(\'#'.$pageID.'_form\').find(\'[data-changed=true]\').removeAttr(\'data-changed\');
+						parent.notify(data.html, data.icon, data.type, data.length, data.layout, data.effect);
+					}, \'json\');
+				} else {
+					parent.notify(\'Nothing to update!\', \'bullhorn\', \'success\', 5000, \'bar\', \'slidetop\');
+				}
 				return false;
 			});
 			'.(isset($array['onready'])?$array['onready']:'').'
@@ -1226,7 +1243,13 @@ function buildField($params) {
 		case 'select':
 		case 'dropdown':
 			$field = '<select id="'.$id.'" name="'.$name.'" class="form-control material input-sm" '.implode(' ',$tags).'>
-			'.resolveSelectOptions($params['options'], $val).'
+				'.resolveSelectOptions($params['options'], $val).'
+			</select>';
+			break;
+		case 'select-multi':
+		case 'dropdown-multi':
+			$field = '<select id="'.$id.'" name="'.$name.'" class="form-control input-sm" '.implode(' ',$tags).' multiple="multiple">
+				'.resolveSelectOptions($params['options'], $val).'
 			</select>';
 			break;
 		case 'check':

+ 38 - 36
settings.php

@@ -1117,24 +1117,38 @@ endif;?></textarea>
                 </div>
                 <div class="email-content homepage-box white-bg">
 <?php
-$urlPattern = '.*'; // https?:\/\/([-a-zA-Z0-9@:%._\+~#=]{2,256}\.)+[a-z]{2,}\b(:\d{2,5})?[^?.\s]*
+// Qualify most typical hostnames prior to form submission
+$urlPattern = '([hH][tT][tT][pP][sS]?):\/\/([\w\.]{1,250})(?::(\d{1,5}))?((?:\/[^?.\s]+))?';
+
+// Once configurable user groups is added change to select-multi to allow specific group selection
+$userSelectType = 'select'; 
 $userTypes = array(
 	'None' => 'false',
 	'User' => 'user|admin',
 	'Admin' => 'admin',
 );
+
+// Build Advanced Settings
 echo buildSettings(
 	array(
 		'title' => 'Homepage Settings',
 		'id' => 'homepage_settings',
 		'fields' => array(
 			array(
-				'type' => 'select',
+				'type' => 'header',
+				'value' => 'General',
+			),
+			array(
+				'type' => $userSelectType,
 				'labelTranslate' => 'SHOW_HOMEPAGE',
 				'name' => 'homePageAuthNeeded',
 				'value' => HOMEPAGEAUTHNEEDED,
 				'options' => $userTypes,
 			),
+			array(
+				'type' => 'header',
+				'value' => 'Services',
+			),
 		),
 		'tabs' => array(
 			array(
@@ -1186,7 +1200,7 @@ echo buildSettings(
 						),
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'plexHomeAuth',
 						'value' => PLEXHOMEAUTH,
@@ -1243,7 +1257,7 @@ echo buildSettings(
 						),
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'embyHomeAuth',
 						'value' => EMBYHOMEAUTH,
@@ -1274,7 +1288,7 @@ echo buildSettings(
 						'value' => SONARRKEY,
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'sonarrHomeAuth',
 						'value' => SONARRHOMEAUTH,
@@ -1305,7 +1319,7 @@ echo buildSettings(
 						'value' => RADARRKEY,
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'radarrHomeAuth',
 						'value' => RADARRHOMEAUTH,
@@ -1332,11 +1346,10 @@ echo buildSettings(
 						'placeholder' => randString(32),
 						'labelTranslate' => 'SICK_KEY',
 						'name' => 'sickrageKey',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => SICKRAGEKEY,
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'sickrageHomeAuth',
 						'value' => SICKRAGEHOMEAUTH,
@@ -1363,11 +1376,10 @@ echo buildSettings(
 						'placeholder' => randString(32),
 						'labelTranslate' => 'HEADPHONES_KEY',
 						'name' => 'headphonesKey',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => HEADPHONESKEY,
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'headphonesHomeAuth',
 						'value' => HEADPHONESHOMEAUTH,
@@ -1394,11 +1406,10 @@ echo buildSettings(
 						'placeholder' => randString(32),
 						'labelTranslate' => 'SABNZBD_KEY',
 						'name' => 'sabnzbdKey',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => SABNZBDKEY,
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'sabnzbdHomeAuth',
 						'value' => SABNZBDHOMEAUTH,
@@ -1424,18 +1435,16 @@ echo buildSettings(
 						'type' => 'text',
 						'labelTranslate' => 'USERNAME',
 						'name' => 'nzbgetUsername',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => NZBGETUSERNAME,
 					),
 					array(
 						'type' => 'password',
 						'labelTranslate' => 'PASSWORD',
 						'name' => 'nzbgetPassword',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => (empty(NZBGETPASSWORD)?'':randString(20)),
 					),
 					array(
-						'type' => 'select',
+						'type' => $userSelectType,
 						'labelTranslate' => 'SHOW_ON_HOMEPAGE',
 						'name' => 'nzbgetHomeAuth',
 						'value' => NZBGETHOMEAUTH,
@@ -1524,7 +1533,8 @@ foreach (array_filter(get_defined_functions()['user'],function($v) { return strp
 		);
 	}
 }
-$urlPattern = '.*'; // https?:\/\/([-a-zA-Z0-9@:%._\+~#=]{2,256}\.)+[a-z]{2,}\b(:\d{2,5})?[^?.\s]*
+ksort($backendOptions);
+
 echo buildSettings(
 	array(
 		'title' => 'Advanced Settings',
@@ -1571,19 +1581,10 @@ echo buildSettings(
 						'labelTranslate' => 'AUTHBACKENDHOST',
 						'assist' => 'http(s)://hostname:8181 | Ldap(s)://localhost:389 | ftp(s)://localhost:21',
 						'name' => 'authBackendHost',
-						'class' => 'be-auth be-auth-emby_local be-auth-emby_all be-auth-emby_connect be-auth-ftp be-auth-ldap',
-						'pattern' => $urlPattern,
+						'class' => 'be-auth be-auth-ftp be-auth-ldap',
+						'pattern' => '((?:[hH][tT][tT][pP]|[lL][dD][aA][pP]|[fF][tT][pP])[sS]?):\/\/([\w\.]{1,250})(?::(\d{1,5}))?((?:\/[^?.\s]+))?',
 						'value' => AUTHBACKENDHOST,
 					),
-					array(
-						'type' => 'number',
-						'placeholder' => 'DEPRECIATED',
-						'labelTranslate' => 'AUTHBACKENDPORT',
-						'assist' => 'DEPRECIATED',
-						'name' => 'authBackendPort',
-						'class' => 'be-auth be-auth-emby_local be-auth-emby_all be-auth-emby_connect be-auth-ftp be-auth-ldap',
-						'value' => AUTHBACKENDPORT,
-					),
 					array(
 						'type' => 'text',
 						'placeholder' => 'domain',
@@ -1592,6 +1593,16 @@ echo buildSettings(
 						'class' => 'be-auth be-auth-ldap',
 						'value' => AUTHBACKENDDOMAIN,
 					),
+					array(
+						'type' => 'text',
+						'placeholder' => 'http://hostname:8096/emby',
+						'labelTranslate' => 'EMBY_URL',
+						'assist' => 'http://hostname:8096 | https://hostname/emby | http://hostname:8096/emby',
+						'class' => 'be-auth be-auth-emby_local be-auth-emby_all be-auth-emby_connect',
+						'name' => 'embyURL',
+						'pattern' => $urlPattern,
+						'value' => EMBYURL,
+					),
 					array(
 						'type' => 'text',
 						'placeholder' => randString(32),
@@ -1606,7 +1617,6 @@ echo buildSettings(
 						'labelTranslate' => 'PLEX_USERNAME',
 						'name' => 'plexUsername',
 						'class' => 'be-auth be-auth-plex',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => PLEXUSERNAME,
 					),
 					array(
@@ -1614,7 +1624,6 @@ echo buildSettings(
 						'labelTranslate' => 'PLEX_PASSWORD',
 						'name' => 'plexPassword',
 						'class' => 'be-auth be-auth-plex',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => (empty(PLEXPASSWORD)?'':randString(20)),
 					),
 				),
@@ -1642,28 +1651,24 @@ echo buildSettings(
 						'type' => 'text',
 						'labelTranslate' => 'REGISTER_PASSWORD',
 						'name' => 'registerPassword',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => REGISTERPASSWORD,
 					),
 					array(
 						'type' => 'text',
 						'labelTranslate' => 'COOKIE_DOMAIN',
 						'name' => 'domain',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => DOMAIN,
 					),
 					array(
 						'type' => 'password',
 						'labelTranslate' => 'COOKIE_PASSWORD',
 						'name' => 'cookiePassword',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => (empty(COOKIEPASSWORD)?'':randString(20)),
 					),
 					array(
 						'type' => 'checkbox',
 						'labelTranslate' => 'MULTIPLE_LOGINS',
 						'name' => 'multipleLogin',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => MULTIPLELOGIN,
 					),
 				),
@@ -1692,14 +1697,12 @@ echo buildSettings(
 						'type' => 'text',
 						'labelTranslate' => 'SMTP_HOST_USERNAME',
 						'name' => 'smtpHostUsername',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => SMTPHOSTUSERNAME,
 					),
 					array(
 						'type' => 'password',
 						'labelTranslate' => 'SMTP_HOST_PASSWORD',
 						'name' => 'smtpHostPassword',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => (empty(SMTPHOSTPASSWORD)?'':randString(20)),
 					),
 					array(
@@ -1712,7 +1715,6 @@ echo buildSettings(
 						'type' => 'text',
 						'labelTranslate' => 'SMTP_HOST_SENDER_EMAIL',
 						'name' => 'smtpHostSenderEmail',
-						//'pattern' => '[a-zA-Z0-9]{32}',
 						'value' => SMTPHOSTSENDEREMAIL,
 					),
 					array(