Browse Source

The "Preferences" pages now allows a user to:
- change her/his favorite language
- set a global default for the length of all lists, overriding the system-wide configuration.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@2139 a333f486-631f-4898-b8df-5754b55c2be0

dflaven 13 years ago
parent
commit
bef7853706
1 changed files with 115 additions and 11 deletions
  1. 115 11
      pages/preferences.php

+ 115 - 11
pages/preferences.php

@@ -36,26 +36,31 @@ function DisplayPreferences($oP)
 {
 	$oAppContext = new ApplicationContext();
 
-	// Favorite organizations: the organizations listed in the drop-down menu
-	$sOQL = ApplicationMenu::GetFavoriteSiloQuery();
-	$oFilter = DBObjectSearch::FromOQL($sOQL);
-	$oBlock = new DisplayBlock($oFilter, 'list', false);
-
 	$oP->add('<div class="page_header"><h1><img style="vertical-align:middle" src="../images/preferences.png"/>&nbsp;'.Dict::S('UI:Preferences')."</h1></div>\n");
 	$oP->add('<div id="user_prefs" style="max-width:800px; min-width:400px;">');
+
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Favorite Organizations
+	//
+	//////////////////////////////////////////////////////////////////////////
+
 	$oP->add('<fieldset><legend>'.Dict::S('UI:FavoriteOrganizations').'</legend>');
 	$oP->p(Dict::S('UI:FavoriteOrganizations+'));
 	$oP->add('<form method="post">');	
-	$oBlock->Display($oP, 1, array('menu' => false, 'selection_mode' => true, 'selection_type' => 'multiple', 'cssCount'=> '.selectedCount'));
+	// Favorite organizations: the organizations listed in the drop-down menu
+	$sOQL = ApplicationMenu::GetFavoriteSiloQuery();
+	$oFilter = DBObjectSearch::FromOQL($sOQL);
+	$oBlock = new DisplayBlock($oFilter, 'list', false);
+	$oBlock->Display($oP, 1, array('menu' => false, 'selection_mode' => true, 'selection_type' => 'multiple', 'cssCount'=> '.selectedCount', 'table_id' => 'user_prefs'));
 	$oP->add($oAppContext->GetForForm());
 	$oP->add('<input type="hidden" name="operation" value="apply"/>');
-	$oP->add('</fieldset>');
-	$sURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php';
+	$sURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?'.$oAppContext->GetForLink();
 	$oP->add('<p><input type="button" onClick="window.location.href=\''.$sURL.'\'" value="'.Dict::S('UI:Button:Cancel').'"/>');
 	$oP->add('&nbsp;&nbsp;');
 	$oP->add('<input type="submit" value="'.Dict::S('UI:Button:Apply').'"/></p>');
 	$oP->add('</form>');
-	$oP->add('</div>');
+	$oP->add('</fieldset>');
 
 	$aFavoriteOrgs = appUserPreferences::GetPref('favorite_orgs', null);
 	if ($aFavoriteOrgs == null)
@@ -73,10 +78,11 @@ function DisplayPreferences($oP)
 	}
 	else
 	{
-		CheckAll('#user_prefs .listResults :checkbox:not(:disabled)', true);
+		$('#user_prefs table.listResults').trigger('check_all');
 	}
 EOF
 );
+
 	}
 	else
 	{
@@ -109,7 +115,81 @@ EOF
 	}
 EOF
 );
-	}}
+	}
+	
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// User Language selection
+	//
+	//////////////////////////////////////////////////////////////////////////
+
+	$oP->add('<fieldset><legend>'.Dict::S('UI:FavoriteLanguage').'</legend>');
+	$oP->add('<form method="post">');
+  	$aLanguages = Dict::GetLanguages();
+  	$aSortedlang = array();
+  	foreach($aLanguages as $sCode => $aLang)
+  	{
+  		$aSortedlang[$aLang['description']] = $sCode;
+  	}
+  	ksort($aSortedlang);
+  	$oP->add('<p>'.Dict::S('UI:Favorites:SelectYourLanguage').' <select name="language">');
+  	foreach($aSortedlang as $sCode)
+  	{
+  		$sSelected = ($sCode == Dict::GetUserLanguage()) ? 'selected' : '';
+		$oP->add('<option value="'.$sCode.'" '.$sSelected.'/>'.$aLanguages[$sCode]['description'].' ('.$aLanguages[$sCode]['localized_description'].')</option>');
+  	}
+  	$oP->add('</select></p>');
+  	$oP->add('<input type="hidden" name="operation" value="apply_language"/>');
+	$oP->add($oAppContext->GetForForm());
+	$oP->add('<p><input type="button" onClick="window.location.href=\''.$sURL.'\'" value="'.Dict::S('UI:Button:Cancel').'"/>');
+	$oP->add('&nbsp;&nbsp;');
+	$oP->add('<input type="submit" value="'.Dict::S('UI:Button:Apply').'"/></p>');
+	$oP->add('</form>');
+	$oP->add('</fieldset>');
+
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Other (miscellaneous) settings
+	//
+	//////////////////////////////////////////////////////////////////////////
+	
+	$oP->add('<fieldset><legend>'.Dict::S('UI:FavoriteOtherSettings').'</legend>');
+	$oP->add('<form method="post" onsubmit="return ValidateOtherSettings()">');
+	$iDefaultPageSize = appUserPreferences::GetPref('default_page_size', MetaModel::GetConfig()->GetMinDisplayLimit());
+	$oP->add('<p>'.Dict::Format('UI:Favorites:Default_X_ItemsPerPage', '<input id="default_page_size" name="default_page_size" type="text" size="3" value="'.$iDefaultPageSize.'"/><span id="v_default_page_size"></span>').'</p>');
+	$oP->add('<input type="hidden" name="operation" value="apply_others"/>');
+	$oP->add($oAppContext->GetForForm());
+	$oP->add('<p><input type="button" onClick="window.location.href=\''.$sURL.'\'" value="'.Dict::S('UI:Button:Cancel').'"/>');
+	$oP->add('&nbsp;&nbsp;');
+	$oP->add('<input id="other_submit" type="submit" value="'.Dict::S('UI:Button:Apply').'"/></p>');
+	$oP->add('</form>');
+	$oP->add('</fieldset>');
+	
+	$oP->add_script(
+<<<EOF
+function ValidateOtherSettings()
+{
+	var sPageLength = $('#default_page_size').val();
+	var iPageLength = parseInt(sPageLength , 10);
+	if (/^[0-9]+$/.test(sPageLength) && (iPageLength > 0))
+	{
+		$('#v_default_page_size').html('');
+		$('#other_submit').removeAttr('disabled');
+		return true;
+	}
+	else
+	{
+		$('#v_default_page_size').html('<img src="../images/validation_error.png"/>');
+		$('#other_submit').attr('disabled', 'disabled');
+		return false;
+	}
+}
+EOF
+	);
+	
+	$oP->add('</div>');
+	$oP->add_ready_script("$('#fav_page_length').bind('keyup change', function(){ ValidateOtherSettings(); })");
+}
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -148,6 +228,30 @@ try
 		DisplayPreferences($oPage);
 		break;
 		
+		case 'apply_language':
+		$sLangCode = utils::ReadParam('language', 'EN US');
+		$oUser = UserRights::GetUserObject();
+		$oUser->Set('language', $sLangCode);
+		$oMyChange = MetaModel::NewObject("CMDBChange");
+		$oMyChange->Set("date", time());
+		$sUserString = CMDBChange::GetCurrentUserName();
+		$oMyChange->Set("userinfo", $sUserString);
+		$iChangeId = $oMyChange->DBInsert();
+		$oUser->DBUpdateTracked($oMyChange);
+		// Redirect to force a reload/display of the page with the new language
+		$oAppContext = new ApplicationContext();
+		$sURL = utils::GetAbsoluteUrlAppRoot().'pages/preferences.php?'.$oAppContext->GetForLink();
+		$oPage->add_header('Location: '.$sURL);
+		break;
+		case 'apply_others':
+		$iDefaultPageSize = (int)utils::ReadParam('default_page_size', -1);
+		if ($iDefaultPageSize > 0)
+		{
+			appUserPreferences::SetPref('default_page_size', $iDefaultPageSize);
+		}
+		DisplayPreferences($oPage);
+		break;
+		
 		case 'display':
 		default:
 		DisplayPreferences($oPage);