Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions setup/ajax.dataloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ function FatalErrorCatcher($sOutput)
// Never cache this page
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Fri, 17 Jul 1970 05:00:00 GMT"); // Date in the past
$oCtx = new ContextTag(ContextTag::TAG_SETUP);

/**
* Main program
Expand Down
3 changes: 2 additions & 1 deletion setup/wizard.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ function json_decode($json, $assoc = null)
//N°3671 setup context: force $bForceTrustProxy to be persisted in next calls
utils::GetAbsoluteUrlAppRoot(true);
$oWizard = new WizardController('WizStepWelcome');
$oCtx = new ContextTag(ContextTag::TAG_SETUP);
//N°3952
if (SetupUtils::IsSessionSetupTokenValid()) {
// Normal operation
Expand All @@ -69,5 +70,5 @@ function json_decode($json, $assoc = null)
SetupUtils::ExitMaintenanceMode(false);
// Force initializing the setup
$oWizard->Start();
SetupUtils::CreateSetupToken();
//SetupUtils::CreateSetupToken();
}
6 changes: 4 additions & 2 deletions setup/wizardcontroller.class.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,8 @@ protected function DisplayStep(WizardStep $oStep): void
}
}
$oPage->LinkScriptFromAppRoot('setup/setup.js');
$oStep->PreFormDisplay($oPage);

$oPage->add('<form id="wiz_form" class="ibo-setup--wizard" method="post">');
$oPage->add('<div class="ibo-setup--wizard--content">');
$oStep->Display($oPage);
Expand Down Expand Up @@ -283,8 +285,8 @@ protected function DisplayStep(WizardStep $oStep): void
$oPage->output();
}
/**
* Make the wizard run: Start, Next or Back depending WizardUpdateButtons();
on the page's parameters
* Make the wizard run: 'Start', 'Next' or 'Back' depending WizardUpdateButtons();
* on the page's parameters
*/
public function Run()
{
Expand Down
14 changes: 11 additions & 3 deletions setup/wizardsteps/WizStepLandingBeforeAudit.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function __construct(WizardController $oWizard, $sCurrentState)
$oWizard->SetParameter('datamodel_version', ITOP_CORE_VERSION);
$oWizard->SetParameter('upgrade_type', 'use-compatible');

$oWizard->SaveParameter('use_symbolic_links', MFCompiler::UseSymbolicLinks());
$oWizard->SaveParameter('use_symbolic_links', MFCompiler::UseSymbolicLinks() ? 'on' : 'off');
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems like a bug fix not related to current enhancement, right?

$oWizard->SaveParameter('force-uninstall', '');

// should be done at the end
Expand All @@ -40,8 +40,8 @@ public function Display(SetupPage $oPage): void
*/
public function UpdateWizardStateAndGetNextStep($bMoveForward = true): WizardState
{
$oProductionEnv = new RunTimeEnvironment();
$sBuildConfigFile = APPCONF.$oProductionEnv->GetBuildEnv().'/'.ITOP_CONFIG_FILE;
$oRuntimeEnv = new RunTimeEnvironment();
$sBuildConfigFile = APPCONF.$oRuntimeEnv->GetBuildEnv().'/'.ITOP_CONFIG_FILE;
@chmod($sBuildConfigFile, 0770); // In case it exists: RWX for owner and group, nothing for others

$oConfig = new Config($sBuildConfigFile);
Expand All @@ -56,6 +56,14 @@ public function UpdateWizardStateAndGetNextStep($bMoveForward = true): WizardSta
$this->oWizard->SetParameter('display_choices', '[]');
$this->oWizard->SetParameter('extensions_not_uninstallable', '[]');

if ($this->oWizard->GetParameter('skip_wizard', false)) {
$oExtensionMap = new iTopExtensionsMap($oRuntimeEnv->GetBuildEnv());
$aExtensionsFromDatabase = $oExtensionMap->GetChoicesFromDatabase($oConfig);
$this->oWizard->SetParameter('selected_extensions', json_encode($aExtensionsFromDatabase));
$adModulesFromDatabase = ModuleInstallationRepository::GetInstance()->ReadComputeInstalledModules($oConfig);
$this->oWizard->SetParameter('selected_modules', json_encode(array_keys($adModulesFromDatabase)));
Comment on lines +59 to +64
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Extension diff missing

When the fast-track path is used, this branch only restores selected_extensions and selected_modules from the current database. It skips the normal GetAddedAndRemovedExtensions() finalization, so downstream audit and cleanup forms receive removed_extensions as the default empty list. If an installed extension is no longer present or should be treated as removed during the update, the compatibility compile and feature-removal flow can run without the required removal set and miss cleanup work before the upgrade continues.

}

$aWizardSteps = $this->GetWizardSteps();
$this->oWizard->SetWizardSteps($aWizardSteps);
$this->sCurrentState = count($aWizardSteps) - 1;
Expand Down
117 changes: 81 additions & 36 deletions setup/wizardsteps/WizStepWelcome.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,23 @@
* You should have received a copy of the GNU Affero General Public License
*/

use Combodo\iTop\Application\WebPage\WebPage;

/**
* First step of the iTop Installation Wizard: Welcome screen, requirements
*/
class WizStepWelcome extends WizardStep
{
protected $bCanMoveForward;
private array $aInfo;
private array $aWarnings;
private array $aErrors;
private string $sUID;

public function __construct(WizardController $oWizard, $sCurrentState)
{
parent::__construct($oWizard, $sCurrentState);
$this->CheckInstallation();
$this->sUID = SetupUtils::CreateSetupToken();
}

public function GetTitle()
{
Expand All @@ -48,8 +57,7 @@ public function GetPossibleSteps()

public function UpdateWizardStateAndGetNextStep($bMoveForward = true): WizardState
{
$sUID = SetupUtils::CreateSetupToken();
$this->oWizard->SetParameter('authent', $sUID);
$this->oWizard->SetParameter('authent', $this->sUID);
return new WizardState(WizStepInstallOrUpgrade::class);
}

Expand All @@ -70,39 +78,14 @@ public function Display(SetupPage $oPage): void
EOF
);
$oPage->add('<h1>'.ITOP_APPLICATION.' Installation Wizard</h1>');
$aResults = SetupUtils::CheckPhpAndExtensions();
$this->bCanMoveForward = true;
$aInfo = [];
$aWarnings = [];
$aErrors = [];
foreach ($aResults as $oCheckResult) {
switch ($oCheckResult->iSeverity) {
case CheckResult::ERROR:
$aErrors[] = $oCheckResult->sLabel;
$this->bCanMoveForward = false;
break;

case CheckResult::WARNING:
$aWarnings[] = $oCheckResult->sLabel;
break;

case CheckResult::INFO:
$aInfo[] = $oCheckResult->sLabel;
break;

case CheckResult::TRACE:
SetupLog::Ok($oCheckResult->sLabel);
break;
}
}
$sStyle = 'style="display:none;overflow:auto;"';
$sToggleButtons = '<button type="button" id="show_details" class="ibo-button ibo-is-alternative ibo-is-neutral" onclick="$(\'#details\').toggle(); $(this).toggle(); $(\'#hide_details\').toggle();"><span class="ibo-button--icon fa fa-caret-down"></span><span class="ibo-button--label">Show details</span></button><button type="button" id="hide_details" class="ibo-button ibo-is-alternative ibo-is-neutral" style="display:none;" onclick="$(\'#details\').toggle(); $(this).toggle(); $(\'#show_details\').toggle();"><span class="ibo-button--icon fa fa-caret-up"></span><span class="ibo-button--label">Hide details</span></button>';
if (count($aErrors) > 0) {
if (count($this->aErrors) > 0) {
$sStyle = 'overflow:auto;"';
$sTitle = count($aErrors).' Error(s), '.count($aWarnings).' Warning(s).';
$sTitle = count($this->aErrors).' Error(s), '.count($this->aWarnings).' Warning(s).';
$sH2Class = 'text-error';
} elseif (count($aWarnings) > 0) {
$sTitle = count($aWarnings).' Warning(s) '.$sToggleButtons;
} elseif (count($this->aWarnings) > 0) {
$sTitle = count($this->aWarnings).' Warning(s) '.$sToggleButtons;
$sH2Class = 'text-warning';
} else {
$sTitle = 'Ok. '.$sToggleButtons;
Expand All @@ -114,13 +97,13 @@ public function Display(SetupPage $oPage): void
<div id="details" $sStyle>
HTML
);
foreach ($aErrors as $sText) {
foreach ($this->aErrors as $sText) {
$oPage->error($sText);
}
foreach ($aWarnings as $sText) {
foreach ($this->aWarnings as $sText) {
$oPage->warning($sText);
}
foreach ($aInfo as $sText) {
foreach ($this->aInfo as $sText) {
$oPage->ok($sText);
}
$oPage->add('</div>');
Expand All @@ -131,8 +114,70 @@ public function Display(SetupPage $oPage): void
$oPage->add_ready_script('CheckDirectoryConfFilesPermissions("'.utils::GetItopVersionWikiSyntax().'")');
}

/**
* Add post display stuff to the setup screen
* @param \SetupPage $oPage
*
* @return void
*/
public function PostFormDisplay(SetupPage $oPage)
{
if ($this->bCanMoveForward) {
$sBuildConfigFile = APPCONF.ITOP_DEFAULT_ENV.'/'.ITOP_CONFIG_FILE;
if (file_exists($sBuildConfigFile)) {
$oPage->add(
<<<HTML
<form method="post">
<input type="hidden" name="_class" value="WizStepLandingBeforeAudit"/>
<input type="hidden" name="operation" value="next"/>
<input type="hidden" name="_params[skip_wizard]" value="1"/>
<input type="hidden" name="authent" value="{$this->sUID}"/>
<input type="hidden" name="_params[authent]" value="{$this->sUID}"/>
<table style="width:100%;" class="ibo-setup--wizard--buttons-container">
<tr>
<td style="text-align: right"><button type="submit" class="ibo-button ibo-is-regular ibo-is-secondary">Keep current choices</button></td>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe a tooltip to detail what will happen if user clicks on this button?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this button is so powerfull that I would change his color to highlight it!

</tr>
</table>
</form>
HTML
);
}
}
}

public function CanMoveForward()
{
return $this->bCanMoveForward;
}

/**
*/
public function CheckInstallation(): void
{
$aResults = SetupUtils::CheckPhpAndExtensions();
$this->bCanMoveForward = true;
$this->aInfo = [];
$this->aWarnings = [];
$this->aErrors = [];
foreach ($aResults as $oCheckResult) {
switch ($oCheckResult->iSeverity) {
case CheckResult::ERROR:
$this->aErrors[] = $oCheckResult->sLabel;
$this->bCanMoveForward = false;
break;

case CheckResult::WARNING:
$this->aWarnings[] = $oCheckResult->sLabel;
break;

case CheckResult::INFO:
$this->aInfo[] = $oCheckResult->sLabel;
break;

case CheckResult::TRACE:
SetupLog::Ok($oCheckResult->sLabel);
break;
}
}
}
}
4 changes: 4 additions & 0 deletions setup/wizardsteps/WizardStep.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ public function PostFormDisplay(SetupPage $oPage)
{
}

public function PreFormDisplay(SetupPage $oPage)
{
}

protected function CheckDependencies()
{
if (is_null($this->bDependencyCheck)) {
Expand Down