mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°2311 - Preferences extensibility
This commit is contained in:
@@ -186,6 +186,24 @@ interface iLoginDataExtension extends iLoginExtension
|
||||
public function GetLoginData();
|
||||
}
|
||||
|
||||
|
||||
interface iPreferencesExtension
|
||||
{
|
||||
/**
|
||||
* @param \WebPage $oPage
|
||||
*
|
||||
*/
|
||||
public function DisplayPreferences(WebPage $oPage);
|
||||
|
||||
/**
|
||||
* @param \WebPage $oPage
|
||||
* @param string $sOperation
|
||||
*
|
||||
* @return bool true if the operation has been used
|
||||
*/
|
||||
public function ApplyPreferences(WebPage $oPage, $sOperation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement this interface to change the behavior of the GUI for some objects.
|
||||
*
|
||||
|
||||
@@ -68,7 +68,14 @@ class LoginForm extends AbstractLoginFSMExtension implements iLoginDataExtension
|
||||
{
|
||||
if ($_SESSION['login_mode'] == 'form')
|
||||
{
|
||||
$sAuthUser = utils::ReadPostedParam('auth_user', '', 'raw_data');
|
||||
if (isset($_SESSION['auth_user']))
|
||||
{
|
||||
$sAuthUser = $_SESSION['auth_user'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sAuthUser = utils::ReadPostedParam('auth_user', '', 'raw_data');
|
||||
}
|
||||
LoginWebPage::OnLoginSuccess($sAuthUser, 'internal', $_SESSION['login_mode']);
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_RETURN_CONTINUE;
|
||||
|
||||
@@ -2781,7 +2781,7 @@ abstract class MetaModel
|
||||
|
||||
// Build the list of available extensions
|
||||
//
|
||||
$aInterfaces = array('iApplicationUIExtension', 'iApplicationObjectExtension', 'iLoginFSMExtension', 'iLoginDataExtension', 'iLogoutExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface', 'iNewsroomProvider');
|
||||
$aInterfaces = array('iApplicationUIExtension', 'iPreferencesExtension', 'iApplicationObjectExtension', 'iLoginFSMExtension', 'iLoginDataExtension', 'iLogoutExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface', 'iNewsroomProvider');
|
||||
foreach($aInterfaces as $sInterface)
|
||||
{
|
||||
self::$m_aExtensionClasses[$sInterface] = array();
|
||||
|
||||
@@ -363,7 +363,13 @@ EOF
|
||||
$oP->add('</form>');
|
||||
$oP->add('</fieldset>');
|
||||
}
|
||||
|
||||
|
||||
/** @var iPreferencesExtension $oLoginExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iPreferencesExtension') as $oPreferencesExtensionInstance)
|
||||
{
|
||||
$oPreferencesExtensionInstance->DisplayPreferences($oP);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Footer
|
||||
@@ -389,101 +395,122 @@ $sOperation = utils::ReadParam('operation', '');
|
||||
|
||||
try
|
||||
{
|
||||
switch($sOperation)
|
||||
/** @var iPreferencesExtension $oLoginExtensionInstance */
|
||||
$bOperationUsed = false;
|
||||
foreach(MetaModel::EnumPlugins('iPreferencesExtension') as $oPreferencesExtensionInstance)
|
||||
{
|
||||
case 'apply':
|
||||
$oFilter = DBObjectSearch::FromOQL('SELECT Organization');
|
||||
$sSelectionMode = utils::ReadParam('selectionMode', '');
|
||||
$aExceptions = utils::ReadParam('storedSelection', array());
|
||||
if (($sSelectionMode == 'negative') && (count($aExceptions) == 0))
|
||||
if ($oPreferencesExtensionInstance->ApplyPreferences($oPage, $sOperation))
|
||||
{
|
||||
// All Orgs selected
|
||||
appUserPreferences::SetPref('favorite_orgs', null);
|
||||
$bOperationUsed = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
}
|
||||
|
||||
if (!$bOperationUsed)
|
||||
{
|
||||
switch ($sOperation)
|
||||
{
|
||||
// Some organizations selected... store them
|
||||
$aSelectOrgs = utils::ReadMultipleSelection($oFilter);
|
||||
appUserPreferences::SetPref('favorite_orgs', $aSelectOrgs);
|
||||
}
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'apply_language':
|
||||
$sLangCode = utils::ReadParam('language', 'EN US');
|
||||
$oUser = UserRights::GetUserObject();
|
||||
$oUser->Set('language', $sLangCode);
|
||||
utils::PushArchiveMode(false);
|
||||
$oUser->AllowWrite(true);
|
||||
$oUser->DBUpdate();
|
||||
utils::PopArchiveMode();
|
||||
// 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);
|
||||
}
|
||||
$bShowObsoleteData = (bool)utils::ReadParam('show_obsolete_data', 0);
|
||||
appUserPreferences::SetPref('show_obsolete_data', $bShowObsoleteData);
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'apply_newsroom_preferences':
|
||||
$iCountProviders = 0;
|
||||
$oUser = UserRights::GetUserObject();
|
||||
$aProviders = MetaModel::EnumPlugins('iNewsroomProvider');
|
||||
foreach($aProviders as $oProvider)
|
||||
{
|
||||
if ($oProvider->IsApplicable($oUser))
|
||||
{
|
||||
$iCountProviders++;
|
||||
}
|
||||
}
|
||||
$bNewsroomEnabled = (MetaModel::GetConfig()->Get('newsroom_enabled') !== false);
|
||||
if ($bNewsroomEnabled && ($iCountProviders > 0))
|
||||
{
|
||||
$iNewsroomDisplaySize = (int)utils::ReadParam('newsroom_display_size', 7);
|
||||
if ($iNewsroomDisplaySize < 1) $iNewsroomDisplaySize = 1;
|
||||
if ($iNewsroomDisplaySize > 20) $iNewsroomDisplaySize = 20;
|
||||
$iCurrentDisplaySize = (int)appUserPreferences::GetPref('newsroom_display_size', $iNewsroomDisplaySize);
|
||||
if ($iCurrentDisplaySize != $iNewsroomDisplaySize)
|
||||
{
|
||||
// Save the preference only if it differs from the current (or default) value
|
||||
appUserPreferences::SetPref('newsroom_display_size', $iNewsroomDisplaySize);
|
||||
}
|
||||
}
|
||||
$bProvidersModified = false;
|
||||
foreach($aProviders as $oProvider)
|
||||
{
|
||||
if ($oProvider->IsApplicable($oUser))
|
||||
{
|
||||
$sProviderClass = get_class($oProvider);
|
||||
$bProviderEnabled = (utils::ReadParam('newsroom_provider_'.$sProviderClass, 'off') == 'on');
|
||||
$bCurrentValue = appUserPreferences::GetPref('newsroom_provider_'.$sProviderClass, true);
|
||||
if ($bCurrentValue != $bProviderEnabled)
|
||||
case 'apply':
|
||||
$oFilter = DBObjectSearch::FromOQL('SELECT Organization');
|
||||
$sSelectionMode = utils::ReadParam('selectionMode', '');
|
||||
$aExceptions = utils::ReadParam('storedSelection', array());
|
||||
if (($sSelectionMode == 'negative') && (count($aExceptions) == 0))
|
||||
{
|
||||
// Save the preference only if it differs from the current value
|
||||
$bProvidersModified = true;
|
||||
appUserPreferences::SetPref('newsroom_provider_'.$sProviderClass, $bProviderEnabled);
|
||||
// All Orgs selected
|
||||
appUserPreferences::SetPref('favorite_orgs', null);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Some organizations selected... store them
|
||||
$aSelectOrgs = utils::ReadMultipleSelection($oFilter);
|
||||
appUserPreferences::SetPref('favorite_orgs', $aSelectOrgs);
|
||||
}
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'apply_language':
|
||||
$sLangCode = utils::ReadParam('language', 'EN US');
|
||||
$oUser = UserRights::GetUserObject();
|
||||
$oUser->Set('language', $sLangCode);
|
||||
utils::PushArchiveMode(false);
|
||||
$oUser->AllowWrite(true);
|
||||
$oUser->DBUpdate();
|
||||
utils::PopArchiveMode();
|
||||
// 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);
|
||||
}
|
||||
$bShowObsoleteData = (bool)utils::ReadParam('show_obsolete_data', 0);
|
||||
appUserPreferences::SetPref('show_obsolete_data', $bShowObsoleteData);
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'apply_newsroom_preferences':
|
||||
$iCountProviders = 0;
|
||||
$oUser = UserRights::GetUserObject();
|
||||
$aProviders = MetaModel::EnumPlugins('iNewsroomProvider');
|
||||
foreach ($aProviders as $oProvider)
|
||||
{
|
||||
if ($oProvider->IsApplicable($oUser))
|
||||
{
|
||||
$iCountProviders++;
|
||||
}
|
||||
}
|
||||
$bNewsroomEnabled = (MetaModel::GetConfig()->Get('newsroom_enabled') !== false);
|
||||
if ($bNewsroomEnabled && ($iCountProviders > 0))
|
||||
{
|
||||
$iNewsroomDisplaySize = (int)utils::ReadParam('newsroom_display_size', 7);
|
||||
if ($iNewsroomDisplaySize < 1)
|
||||
{
|
||||
$iNewsroomDisplaySize = 1;
|
||||
}
|
||||
if ($iNewsroomDisplaySize > 20)
|
||||
{
|
||||
$iNewsroomDisplaySize = 20;
|
||||
}
|
||||
$iCurrentDisplaySize = (int)appUserPreferences::GetPref('newsroom_display_size', $iNewsroomDisplaySize);
|
||||
if ($iCurrentDisplaySize != $iNewsroomDisplaySize)
|
||||
{
|
||||
// Save the preference only if it differs from the current (or default) value
|
||||
appUserPreferences::SetPref('newsroom_display_size', $iNewsroomDisplaySize);
|
||||
}
|
||||
}
|
||||
$bProvidersModified = false;
|
||||
foreach ($aProviders as $oProvider)
|
||||
{
|
||||
if ($oProvider->IsApplicable($oUser))
|
||||
{
|
||||
$sProviderClass = get_class($oProvider);
|
||||
$bProviderEnabled = (utils::ReadParam('newsroom_provider_'.$sProviderClass, 'off') == 'on');
|
||||
$bCurrentValue = appUserPreferences::GetPref('newsroom_provider_'.$sProviderClass, true);
|
||||
if ($bCurrentValue != $bProviderEnabled)
|
||||
{
|
||||
// Save the preference only if it differs from the current value
|
||||
$bProvidersModified = true;
|
||||
appUserPreferences::SetPref('newsroom_provider_'.$sProviderClass, $bProviderEnabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($bProvidersModified)
|
||||
{
|
||||
$oPage->add_ready_script('$(".itop-newsroom_menu").newsroom_menu("clearCache");');
|
||||
}
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'display':
|
||||
default:
|
||||
$oPage->SetBreadCrumbEntry('ui-tool-preferences', Dict::S('UI:Preferences'), Dict::S('UI:Preferences'), '',
|
||||
utils::GetAbsoluteUrlAppRoot().'images/wrench.png');
|
||||
DisplayPreferences($oPage);
|
||||
}
|
||||
if ($bProvidersModified)
|
||||
{
|
||||
$oPage->add_ready_script('$(".itop-newsroom_menu").newsroom_menu("clearCache");');
|
||||
}
|
||||
DisplayPreferences($oPage);
|
||||
break;
|
||||
|
||||
case 'display':
|
||||
default:
|
||||
$oPage->SetBreadCrumbEntry('ui-tool-preferences', Dict::S('UI:Preferences'), Dict::S('UI:Preferences'), '', utils::GetAbsoluteUrlAppRoot().'images/wrench.png');
|
||||
DisplayPreferences($oPage);
|
||||
}
|
||||
$oPage->output();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user