N°2315 - Login screen extensibility API refactor

This commit is contained in:
Eric
2019-10-24 14:56:01 +02:00
parent 1851163cee
commit c552e73d20
13 changed files with 215 additions and 104 deletions

View File

@@ -181,9 +181,9 @@ interface iLogoutExtension extends iLoginExtension
interface iLoginUIExtension extends iLoginExtension
{
/**
* @return LoginTwigData
* @return LoginTwigContext
*/
public function GetTwigBlockData();
public function GetTwigContext();
}

View File

@@ -105,14 +105,14 @@ class LoginForm extends AbstractLoginFSMExtension implements iLoginUIExtension
}
/**
* @return LoginTwigData
* @return LoginTwigContext
* @throws \Exception
*/
public function GetTwigBlockData()
public function GetTwigContext()
{
$aPostedVars = array('auth_user', 'auth_pwd');
$oLoginData = new LoginTwigData($aPostedVars);
$oLoginContext = new LoginTwigContext();
$oLoginContext->AddPostedVar('auth_user');
$oLoginContext->AddPostedVar('auth_pwd');
$sAuthUser = utils::ReadParam('auth_user', '', true, 'raw_data');
$sAuthPwd = utils::ReadParam('suggest_pwd', '', true, 'raw_data');
@@ -121,9 +121,9 @@ class LoginForm extends AbstractLoginFSMExtension implements iLoginUIExtension
'sAuthUser' => $sAuthUser,
'sAuthPwd' => $sAuthPwd,
);
$oLoginData->AddBlockData('login_input', new LoginBlockData('loginforminput.html.twig', $aData));
$oLoginData->AddBlockData('login_submit', new LoginBlockData('loginformsubmit.html.twig'));
$oLoginData->AddBlockData('login_form_footer', new LoginBlockData('loginformfooter.html.twig'));
$oLoginContext->AddBlockExtension('login_input', new LoginBlockExtension('loginforminput.html.twig', $aData));
$oLoginContext->AddBlockExtension('login_submit', new LoginBlockExtension('loginformsubmit.html.twig'));
$oLoginContext->AddBlockExtension('login_form_footer', new LoginBlockExtension('loginformfooter.html.twig'));
$bEnableResetPassword = empty(MetaModel::GetConfig()->Get('forgot_password')) ? true : MetaModel::GetConfig()->Get('forgot_password');
$sResetPasswordUrl = utils::GetAbsoluteUrlAppRoot() . 'pages/UI.php?loginop=forgot_pwd';
@@ -132,8 +132,8 @@ class LoginForm extends AbstractLoginFSMExtension implements iLoginUIExtension
'bEnableResetPassword' => $bEnableResetPassword,
'sResetPasswordUrl' => $sResetPasswordUrl,
);
$oLoginData->AddBlockData('login_links', new LoginBlockData('loginformlinks.html.twig', $aData));
$oLoginContext->AddBlockExtension('login_links', new LoginBlockExtension('loginformlinks.html.twig', $aData));
return $oLoginData;
return $oLoginContext;
}
}

View File

@@ -9,61 +9,130 @@
use Combodo\iTop\TwigExtension;
class LoginTwigData
/**
* Twig context for modules extending the login screen
* Class LoginTwigContext
*/
class LoginTwigContext
{
private $aBlockData;
/** @var array */
private $aBlockExtension;
/** @var array */
private $aPostedVars;
/** @var string */
private $sTwigLoaderPath;
private $sCSSFile;
/** @var array */
private $aCSSFiles;
/** @var array */
private $aJsFiles;
private $sTwigNameSpace;
/**
* LoginTwigData constructor.
* Build a context to display the twig files used
* to extend the login screens
*
* @param array $aPostedVars
* @param string $sLoaderPath
* @param string $sCSSFile
* @param array $aJsFiles
* LoginTwigContext constructor.
* @api
*/
public function __construct($aPostedVars = array(), $sLoaderPath = null, $sCSSFile = null, $aJsFiles = array())
public function __construct()
{
$this->aBlockData = array();
$this->aPostedVars = $aPostedVars;
$this->sTwigLoaderPath = $sLoaderPath;
$this->sCSSFile = $sCSSFile;
$this->aJsFiles = $aJsFiles;
$this->aBlockExtension = array();
$this->aPostedVars = array();
$this->sTwigLoaderPath = null;
$this->aCSSFiles = array();
$this->aJsFiles = array();
$this->sTwigNameSpace = null;
}
/**
* Set the absolute path on disk of the folder containing the twig templates
*
* @param string $sPath absolute path of twig templates directory
* @api
*/
public function SetLoaderPath($sPath)
{
$this->sTwigLoaderPath = $sPath;
}
/**
* Add a Twig block extension
*
* @param string $sBlockName
* @param LoginBlockExtension $oBlockExtension
*/
public function AddBlockExtension($sBlockName, $oBlockExtension)
{
$this->aBlockExtension[$sBlockName] = $oBlockExtension;
}
/**
* Add a variable intended to be posted on URL (and managed) by the module.
* Declaring the posted variables will prevent the core engine to manipulate these variables.
*
* @param string $sPostedVar Name of the posted variable
* @api
*/
public function AddPostedVar($sPostedVar)
{
$this->aPostedVars[] = $sPostedVar;
}
/**
* Add the URL of a CSS file to link to the login screen
*
* @param string $sFile URL of the CSS file to link
* @api
*/
public function AddCSSFile($sFile)
{
$this->aCSSFiles[] = $sFile;
}
/**
* Add the URL of a javascript file to link to the login screen
* @param string $sFile URL of the javascript file to link
* @api
*/
public function AddJsFile($sFile)
{
$this->aJsFiles[] = $sFile;
}
/**
* @param string $sBlockName
* @param LoginBlockData $oBlockData
*
* @return \LoginBlockExtension
*/
public final function AddBlockData($sBlockName, $oBlockData)
public function GetBlockExtension($sBlockName)
{
$this->aBlockData[$sBlockName] = $oBlockData;
/** @var LoginBlockExtension $oBlockExtension */
$oBlockExtension = isset($this->aBlockExtension[$sBlockName]) ? $this->aBlockExtension[$sBlockName] : null;
return $oBlockExtension;
}
public final function GetBlockData($sBlockName)
{
/** @var LoginBlockData $oBlockData */
$oBlockData = isset($this->aBlockData[$sBlockName]) ? $this->aBlockData[$sBlockName] : null;
return $oBlockData;
}
public final function GetPostedVars()
/**
* @return array
*/
public function GetPostedVars()
{
return $this->aPostedVars;
}
public final function GetTwigLoaderPath()
/**
* @return string
*/
public function GetTwigLoaderPath()
{
return $this->sTwigLoaderPath;
}
public final function GetCSSFile()
/**
* @return array
*/
public function GetCSSFiles()
{
return $this->sCSSFile;
return $this->aCSSFiles;
}
/**
@@ -73,18 +142,33 @@ class LoginTwigData
{
return $this->aJsFiles;
}
}
class LoginBlockData
/**
* Twig block description for login screen extension
* The login screen can be extended by adding twig templates
* to specific blocks of the login screens
*
* Class LoginBlockExtension
*/
class LoginBlockExtension
{
private $sTwig;
private $aData;
/**
* LoginBlockData constructor.
* Create a new twig extension block
* The given twig template can be HTML, CSS or JavaScript.
* CSS goes to the block named 'css' and is inline in the page.
* JavaScript goes to the blocks named 'script' or 'ready_script' and are inline in the page.
* HTML goes to everywhere else
*
* @param string $sTwig
* @param array $aData
* LoginBlockExtension constructor.
*
* @param string $sTwig name of the twig file relative to the path given to the LoginTwigContext
* @param array $aData Data given to the twig template (into the variable {{ aData }})
* @api
*/
public function __construct($sTwig, $aData = array())
{
@@ -92,18 +176,22 @@ class LoginBlockData
$this->aData = $aData;
}
public final function GetTwig()
public function GetTwig()
{
return $this->sTwig;
}
public final function GetData()
public function GetData()
{
return $this->aData;
}
}
class LoginTwigContext
/**
* Used by LoginWebPage to display the login screen
* Class LoginTwigRenderer
*/
class LoginTwigRenderer
{
private $aLoginPluginList;
private $aPluginFormData;
@@ -119,14 +207,20 @@ class LoginTwigContext
foreach ($this->aLoginPluginList as $oLoginPlugin)
{
/** @var \iLoginUIExtension $oLoginPlugin */
$oLoginData = $oLoginPlugin->GetTwigBlockData();
$this->aPluginFormData[] = $oLoginData;
$sTwigLoaderPath = $oLoginData->GetTwigLoaderPath();
$oLoginContext = $oLoginPlugin->GetTwigContext();
if (is_null($oLoginContext))
{
continue;
}
$this->aPluginFormData[] = $oLoginContext;
$sTwigLoaderPath = $oLoginContext->GetTwigLoaderPath();
if ($sTwigLoaderPath != null)
{
$aTwigLoaders[] = new Twig_Loader_Filesystem($sTwigLoaderPath);
$oExtensionLoader = new Twig_Loader_Filesystem();
$oExtensionLoader->setPaths($sTwigLoaderPath);
$aTwigLoaders[] = $oExtensionLoader;
}
$this->aPostedVars = array_merge($this->aPostedVars, $oLoginData->GetPostedVars());
$this->aPostedVars = array_merge($this->aPostedVars, $oLoginContext->GetPostedVars());
}
$oCoreLoader = new Twig_Loader_Filesystem(array(), APPROOT.'templates');
@@ -178,9 +272,9 @@ class LoginTwigContext
// Render CSS links
foreach ($this->aPluginFormData as $oFormData)
{
/** @var \LoginTwigData $oFormData */
$sCSSFile = $oFormData->GetCSSFile();
if (!empty($sCSSFile))
/** @var \LoginTwigContext $oFormData */
$aCSSFiles = $oFormData->GetCSSFiles();
foreach ($aCSSFiles as $sCSSFile)
{
$oPage->add_linked_stylesheet($sCSSFile);
}

View File

@@ -118,7 +118,7 @@ class LoginWebPage extends NiceWebPage
public function DisplayLoginForm($bFailedLogin = false)
{
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aPostedVars = array_merge(array('login_mode', 'loginop'), $oTwigContext->GetPostedVars());
$sMessage = Dict::S('UI:Login:IdentifyYourself');
@@ -171,7 +171,7 @@ class LoginWebPage extends NiceWebPage
{
$sAuthUser = utils::ReadParam('auth_user', '', true, 'raw_data');
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$aVars['sAuthUser'] = $sAuthUser;
$aVars['bFailedToReset'] = $bFailedToReset;
@@ -235,7 +235,7 @@ class LoginWebPage extends NiceWebPage
throw new Exception(Dict::S('UI:ResetPwd-Error-Send'));
}
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$oTwigContext->Render($this, 'forgotpwdsent.html.twig', $aVars);
}
@@ -253,7 +253,7 @@ class LoginWebPage extends NiceWebPage
UserRights::Login($sAuthUser); // Set the user's language
$oUser = UserRights::GetUserObject();
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$aVars['sAuthUser'] = $sAuthUser;
@@ -290,7 +290,7 @@ class LoginWebPage extends NiceWebPage
UserRights::Login($sAuthUser); // Set the user's language
$oUser = UserRights::GetUserObject();
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$aVars['sAuthUser'] = $sAuthUser;
@@ -324,7 +324,7 @@ class LoginWebPage extends NiceWebPage
public function DisplayChangePwdForm($bFailedLogin = false)
{
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$aVars['bFailedLogin'] = $bFailedLogin;
$oTwigContext->Render($this, 'changepwdform.html.twig', $aVars);
@@ -337,7 +337,7 @@ class LoginWebPage extends NiceWebPage
$sTitle = empty($sTitle) ? Dict::S('UI:LogOff:ThankYou') : $sTitle;
$sMessage = Dict::S('UI:LogOff:ClickHereToLoginAgain');
$oTwigContext = new LoginTwigContext();
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$aVars['sUrl'] = $sUrl;
$aVars['sTitle'] = $sTitle;

View File

@@ -2167,4 +2167,9 @@ class utils
}
return $sFullPath;
}
public static function GetAbsoluteModulePath($sModule)
{
return APPROOT.'env-'.utils::GetCurrentEnvironment().'/'.$sModule.'/';
}
}

2
composer.readme Normal file
View File

@@ -0,0 +1,2 @@
to regenerate the autoload:
composer dump-autoload -a

View File

@@ -13,8 +13,8 @@ use DBObjectSet;
use Dict;
use iLoginUIExtension;
use iLogoutExtension;
use LoginBlockData;
use LoginTwigData;
use LoginBlockExtension;
use LoginTwigContext;
use LoginWebPage;
use MetaModel;
use phpCAS;
@@ -198,23 +198,21 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
}
/**
* @return LoginTwigData
* @return LoginTwigContext
*/
public function GetTwigBlockData()
public function GetTwigContext()
{
$sPath = APPROOT.'env-'.utils::GetCurrentEnvironment().'/authent-cas/view';
$oLoginData = new LoginTwigData(array(), $sPath);
$oLoginContext = new LoginTwigContext();
$oLoginContext->SetLoaderPath(APPROOT.'env-'.utils::GetCurrentEnvironment().'/authent-cas/view');
$aData = array(
'sLoginMode' => 'cas',
'sLabel' => Dict::S('CAS:Login:SignIn'),
'sTooltip' => Dict::S('CAS:Login:SignInTooltip'),
);
$oLoginData->AddBlockData('login_sso_buttons', new LoginBlockData('cas_sso_button.html.twig', $aData));
$oLoginContext->AddBlockExtension('login_sso_buttons', new LoginBlockExtension('cas_sso_button.html.twig', $aData));
$oLoginData->AddBlockData('css', new LoginBlockData('cas_css.css.twig'));
return $oLoginData;
return $oLoginContext;
}
}

View File

@@ -1,2 +0,0 @@
{# @copyright Copyright (C) 2010-2019 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}

View File

@@ -151,6 +151,7 @@ return array(
'DBProperty' => $baseDir . '/core/dbproperty.class.inc.php',
'DBSearch' => $baseDir . '/core/dbsearch.class.php',
'DBUnionSearch' => $baseDir . '/core/dbunionsearch.class.php',
'DailyRotatingLogFileNameBuilder' => $baseDir . '/core/log.class.inc.php',
'Dashboard' => $baseDir . '/application/dashboard.class.inc.php',
'DashboardLayout' => $baseDir . '/application/dashboardlayout.class.inc.php',
'DashboardLayoutMultiCol' => $baseDir . '/application/dashboardlayout.class.inc.php',
@@ -175,6 +176,7 @@ return array(
'DataTableSettings' => $baseDir . '/application/datatable.class.inc.php',
'Datamatrix' => $vendorDir . '/combodo/tcpdf/include/barcodes/datamatrix.php',
'DateTimeFormat' => $baseDir . '/core/datetimeformat.class.inc.php',
'DefaultLogFileNameBuilder' => $baseDir . '/core/log.class.inc.php',
'DefaultMetricComputer' => $baseDir . '/core/computing.inc.php',
'DefaultWorkingTimeComputer' => $baseDir . '/core/computing.inc.php',
'DeleteException' => $baseDir . '/core/deletionplan.class.inc.php',
@@ -243,6 +245,7 @@ return array(
'HistoryBlock' => $baseDir . '/application/displayblock.class.inc.php',
'Html2Text\\Html2Text' => $baseDir . '/application/Html2Text.php',
'Html2Text\\Html2TextException' => $baseDir . '/application/Html2TextException.php',
'ILogFileNameBuilder' => $baseDir . '/core/log.class.inc.php',
'ITopArchiveTar' => $baseDir . '/core/tar-itop.class.inc.php',
'InlineImage' => $baseDir . '/core/inlineimage.class.inc.php',
'InlineImageGC' => $baseDir . '/core/inlineimage.class.inc.php',
@@ -257,9 +260,10 @@ return array(
'ListExpression' => $baseDir . '/core/oql/expression.class.inc.php',
'ListOqlExpression' => $baseDir . '/core/oql/oqlquery.class.inc.php',
'LogAPI' => $baseDir . '/core/log.class.inc.php',
'LoginBlockData' => $baseDir . '/application/logintwig.class.inc.php',
'LogFileNameBuilderFactory' => $baseDir . '/core/log.class.inc.php',
'LoginBlockExtension' => $baseDir . '/application/logintwig.class.inc.php',
'LoginTwigContext' => $baseDir . '/application/logintwig.class.inc.php',
'LoginTwigData' => $baseDir . '/application/logintwig.class.inc.php',
'LoginTwigRenderer' => $baseDir . '/application/logintwig.class.inc.php',
'LoginWebPage' => $baseDir . '/application/loginwebpage.class.inc.php',
'MatchExpression' => $baseDir . '/core/oql/expression.class.inc.php',
'MatchOqlExpression' => $baseDir . '/core/oql/oqlquery.class.inc.php',
@@ -391,6 +395,7 @@ return array(
'RestResultWithObjects' => $baseDir . '/core/restservices.class.inc.php',
'RestResultWithRelations' => $baseDir . '/core/restservices.class.inc.php',
'RestUtils' => $baseDir . '/application/applicationextension.inc.php',
'RotatingLogFileNameBuilder' => $baseDir . '/core/log.class.inc.php',
'RowStatus' => $baseDir . '/core/bulkchange.class.inc.php',
'RowStatus_Disappeared' => $baseDir . '/core/bulkchange.class.inc.php',
'RowStatus_Issue' => $baseDir . '/core/bulkchange.class.inc.php',
@@ -1878,6 +1883,7 @@ return array(
'VariableOqlExpression' => $baseDir . '/core/oql/oqlquery.class.inc.php',
'WebPage' => $baseDir . '/application/webpage.class.inc.php',
'WebPageMenuNode' => $baseDir . '/application/menunode.class.inc.php',
'WeeklyRotatingLogFileNameBuilder' => $baseDir . '/core/log.class.inc.php',
'WizardHelper' => $baseDir . '/application/wizardhelper.class.inc.php',
'XLSXWriter' => $baseDir . '/application/xlsxwriter.class.php',
'XMLBulkExport' => $baseDir . '/core/xmlbulkexport.class.inc.php',
@@ -1893,9 +1899,9 @@ return array(
'iDBObjectSetIterator' => $baseDir . '/core/dbobjectiterator.php',
'iDBObjectURLMaker' => $baseDir . '/application/applicationcontext.class.inc.php',
'iDisplay' => $baseDir . '/core/dbobject.class.php',
'iLoginUIExtension' => $baseDir . '/application/applicationextension.inc.php',
'iLoginExtension' => $baseDir . '/application/applicationextension.inc.php',
'iLoginFSMExtension' => $baseDir . '/application/applicationextension.inc.php',
'iLoginUIExtension' => $baseDir . '/application/applicationextension.inc.php',
'iLogoutExtension' => $baseDir . '/application/applicationextension.inc.php',
'iMetricComputer' => $baseDir . '/core/computing.inc.php',
'iNewsroomProvider' => $baseDir . '/application/newsroomprovider.class.inc.php',

View File

@@ -372,6 +372,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'DBProperty' => __DIR__ . '/../..' . '/core/dbproperty.class.inc.php',
'DBSearch' => __DIR__ . '/../..' . '/core/dbsearch.class.php',
'DBUnionSearch' => __DIR__ . '/../..' . '/core/dbunionsearch.class.php',
'DailyRotatingLogFileNameBuilder' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'Dashboard' => __DIR__ . '/../..' . '/application/dashboard.class.inc.php',
'DashboardLayout' => __DIR__ . '/../..' . '/application/dashboardlayout.class.inc.php',
'DashboardLayoutMultiCol' => __DIR__ . '/../..' . '/application/dashboardlayout.class.inc.php',
@@ -396,6 +397,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'DataTableSettings' => __DIR__ . '/../..' . '/application/datatable.class.inc.php',
'Datamatrix' => __DIR__ . '/..' . '/combodo/tcpdf/include/barcodes/datamatrix.php',
'DateTimeFormat' => __DIR__ . '/../..' . '/core/datetimeformat.class.inc.php',
'DefaultLogFileNameBuilder' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'DefaultMetricComputer' => __DIR__ . '/../..' . '/core/computing.inc.php',
'DefaultWorkingTimeComputer' => __DIR__ . '/../..' . '/core/computing.inc.php',
'DeleteException' => __DIR__ . '/../..' . '/core/deletionplan.class.inc.php',
@@ -464,6 +466,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'HistoryBlock' => __DIR__ . '/../..' . '/application/displayblock.class.inc.php',
'Html2Text\\Html2Text' => __DIR__ . '/../..' . '/application/Html2Text.php',
'Html2Text\\Html2TextException' => __DIR__ . '/../..' . '/application/Html2TextException.php',
'ILogFileNameBuilder' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'ITopArchiveTar' => __DIR__ . '/../..' . '/core/tar-itop.class.inc.php',
'InlineImage' => __DIR__ . '/../..' . '/core/inlineimage.class.inc.php',
'InlineImageGC' => __DIR__ . '/../..' . '/core/inlineimage.class.inc.php',
@@ -478,9 +481,10 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'ListExpression' => __DIR__ . '/../..' . '/core/oql/expression.class.inc.php',
'ListOqlExpression' => __DIR__ . '/../..' . '/core/oql/oqlquery.class.inc.php',
'LogAPI' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'LoginBlockData' => __DIR__ . '/../..' . '/application/logintwig.class.inc.php',
'LogFileNameBuilderFactory' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'LoginBlockExtension' => __DIR__ . '/../..' . '/application/logintwig.class.inc.php',
'LoginTwigContext' => __DIR__ . '/../..' . '/application/logintwig.class.inc.php',
'LoginTwigData' => __DIR__ . '/../..' . '/application/logintwig.class.inc.php',
'LoginTwigRenderer' => __DIR__ . '/../..' . '/application/logintwig.class.inc.php',
'LoginWebPage' => __DIR__ . '/../..' . '/application/loginwebpage.class.inc.php',
'MatchExpression' => __DIR__ . '/../..' . '/core/oql/expression.class.inc.php',
'MatchOqlExpression' => __DIR__ . '/../..' . '/core/oql/oqlquery.class.inc.php',
@@ -612,6 +616,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'RestResultWithObjects' => __DIR__ . '/../..' . '/core/restservices.class.inc.php',
'RestResultWithRelations' => __DIR__ . '/../..' . '/core/restservices.class.inc.php',
'RestUtils' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'RotatingLogFileNameBuilder' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'RowStatus' => __DIR__ . '/../..' . '/core/bulkchange.class.inc.php',
'RowStatus_Disappeared' => __DIR__ . '/../..' . '/core/bulkchange.class.inc.php',
'RowStatus_Issue' => __DIR__ . '/../..' . '/core/bulkchange.class.inc.php',
@@ -2099,6 +2104,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'VariableOqlExpression' => __DIR__ . '/../..' . '/core/oql/oqlquery.class.inc.php',
'WebPage' => __DIR__ . '/../..' . '/application/webpage.class.inc.php',
'WebPageMenuNode' => __DIR__ . '/../..' . '/application/menunode.class.inc.php',
'WeeklyRotatingLogFileNameBuilder' => __DIR__ . '/../..' . '/core/log.class.inc.php',
'WizardHelper' => __DIR__ . '/../..' . '/application/wizardhelper.class.inc.php',
'XLSXWriter' => __DIR__ . '/../..' . '/application/xlsxwriter.class.php',
'XMLBulkExport' => __DIR__ . '/../..' . '/core/xmlbulkexport.class.inc.php',
@@ -2114,9 +2120,9 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
'iDBObjectSetIterator' => __DIR__ . '/../..' . '/core/dbobjectiterator.php',
'iDBObjectURLMaker' => __DIR__ . '/../..' . '/application/applicationcontext.class.inc.php',
'iDisplay' => __DIR__ . '/../..' . '/core/dbobject.class.php',
'iLoginUIExtension' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'iLoginExtension' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'iLoginFSMExtension' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'iLoginUIExtension' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'iLogoutExtension' => __DIR__ . '/../..' . '/application/applicationextension.inc.php',
'iMetricComputer' => __DIR__ . '/../..' . '/core/computing.inc.php',
'iNewsroomProvider' => __DIR__ . '/../..' . '/application/newsroomprovider.class.inc.php',

View File

@@ -7,7 +7,7 @@
<div id="login-body">
{% block login_header %}
<div id="login-header">
{{ Macro.BlockData(aPluginFormData, 'login_header') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_header') }}
</div>
{% endblock login_header %}
{% block login_logo %}
@@ -17,16 +17,18 @@
</a>
</div>
{% endblock login_logo %}
{% block login_content %}
{% endblock login_content %}
{% block login_additional_content %}
<div id="login-additional-content">
{{ Macro.BlockData(aPluginFormData, 'login_additional_content') }}
</div>
{% endblock login_additional_content %}
{% block login_content_outer %}
{% block login_content %}
{% endblock login_content %}
{% block login_additional_content %}
<div id="login-additional-content">
{{ Macro.BlockExtension(aPluginFormData, 'login_additional_content') }}
</div>
{% endblock login_additional_content %}
{% endblock login_content_outer %}
{% block login_footer %}
<div id="login-footer">
{{ Macro.BlockData(aPluginFormData, 'login_footer') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_footer') }}
</div>
{% endblock login_footer %}
</div>
@@ -34,15 +36,15 @@
{% block script %}
{% import "macros.twig" as Macro %}
{{ Macro.BlockData(aPluginFormData, 'script') }}
{{ Macro.BlockExtension(aPluginFormData, 'script') }}
{% endblock script %}
{% block ready_script %}
{% import "macros.twig" as Macro %}
{{ Macro.BlockData(aPluginFormData, 'ready_script') }}
{{ Macro.BlockExtension(aPluginFormData, 'ready_script') }}
{% endblock ready_script %}
{% block css %}
{% import "macros.twig" as Macro %}
{{ Macro.BlockData(aPluginFormData, 'css') }}
{{ Macro.BlockExtension(aPluginFormData, 'css') }}
{% endblock css %}

View File

@@ -22,32 +22,32 @@
<div id="login-form-content">
{% block login_sso_buttons %}
<div id="login-sso-buttons">
{{ Macro.BlockData(aPluginFormData, 'login_sso_buttons', '<div class="divider"><hr class="left"/>' ~ 'UI:Login:SeparatorOr'|dict_s ~ '<hr class="right"/></div>') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_sso_buttons', '<div class="divider"><hr class="left"/>' ~ 'UI:Login:SeparatorOr'|dict_s ~ '<hr class="right"/></div>') }}
</div>
{% endblock login_sso_buttons %}
{% block login_input %}
<div id="login-input">
{{ Macro.BlockData(aPluginFormData, 'login_input') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_input') }}
</div>
{% endblock login_input %}
{% block login_submit %}
<div id="login-submit">
{{ Macro.BlockData(aPluginFormData, 'login_submit') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_submit') }}
</div>
{% endblock login_submit %}
{% block login_additional_controls %}
<div id="login-additional-controls">
{{ Macro.BlockData(aPluginFormData, 'login_additional_controls') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_additional_controls') }}
</div>
{% endblock login_additional_controls %}
{% block login_links %}
<div id="login-links">
{{ Macro.BlockData(aPluginFormData, 'login_links') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_links') }}
</div>
{% endblock login_links %}
{% block login_form_footer %}
<div id="login-form-footer">
{{ Macro.BlockData(aPluginFormData, 'login_form_footer') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_form_footer') }}
</div>
{% endblock login_form_footer %}
</div>
@@ -64,7 +64,7 @@
{% block login_footer %}
<div id="login-footer">
{{ Macro.BlockData(aPluginFormData, 'login_footer') }}
{{ Macro.BlockExtension(aPluginFormData, 'login_footer') }}
</div>
{% endblock login_footer %}

View File

@@ -1,13 +1,13 @@
{# @copyright Copyright (C) 2010-2019 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
{% macro BlockData(aPluginFormData, sBlockName, sText = '') %}
{% macro BlockExtension(aPluginFormData, sBlockName, sText = '') %}
{% set bHaveBlock = 'false' %}
{% for oLoginData in aPluginFormData if (oLoginData is defined and oLoginData.GetBlockData(sBlockName)) %}
{% for oLoginData in aPluginFormData if (oLoginData is defined and oLoginData.GetBlockExtension(sBlockName)) %}
{% set bHaveBlock = 'true' %}
{% set oBlockData = oLoginData.GetBlockData(sBlockName) %}
{% set sTwig = oBlockData.GetTwig() %}
{% set aData = oBlockData.GetData() %}
{% set oBlockExtension = oLoginData.GetBlockExtension(sBlockName) %}
{% set sTwig = oBlockExtension.GetTwig() %}
{% set aData = oBlockExtension.GetData() %}
{% include sTwig ignore missing %}
{% endfor %}
{% if bHaveBlock == 'true' %}