public function Display(WebPage $oPage)
 {
     // Check if there are some manual steps required:
     $aManualSteps = array();
     $aAvailableModules = SetupUtils::AnalyzeInstallation($this->oWizard);
     $sRootUrl = utils::GetAbsoluteUrlAppRoot();
     $aSelectedModules = json_decode($this->oWizard->GetParameter('selected_modules'), true);
     foreach ($aSelectedModules as $sModuleId) {
         if (!empty($aAvailableModules[$sModuleId]['doc.manual_setup'])) {
             $aManualSteps[$aAvailableModules[$sModuleId]['label']] = $sRootUrl . $aAvailableModules[$sModuleId]['doc.manual_setup'];
         }
     }
     if (count($aManualSteps) > 0) {
         $oPage->add("<h2>Manual operations required</h2>");
         $oPage->p("In order to complete the installation, the following manual operations are required:");
         foreach ($aManualSteps as $sModuleLabel => $sUrl) {
             $oPage->p("<a href=\"{$sUrl}\" target=\"_blank\">Manual instructions for {$sModuleLabel}</a>");
         }
         $oPage->add("<h2>Congratulations for installing " . ITOP_APPLICATION . "</h2>");
     } else {
         $oPage->add("<h2>Congratulations for installing " . ITOP_APPLICATION . "</h2>");
         $oPage->ok("The installation completed successfully.");
     }
     if ($this->oWizard->GetParameter('mode', '') == 'upgrade' && $this->oWizard->GetParameter('db_backup', false)) {
         $sBackupDestination = $this->oWizard->GetParameter('db_backup_path', '');
         if (file_exists($sBackupDestination)) {
             // To mitigate security risks: pass only the filename without the extension, the download will add the extension itself
             $sTruncatedFilePath = preg_replace('/\\.zip$/', '', $sBackupDestination);
             $oPage->p('Your backup is ready');
             $oPage->p('<a style="background:transparent;" href="' . utils::GetAbsoluteUrlAppRoot() . 'setup/ajax.dataloader.php?operation=async_action&step_class=WizStepDone&params[backup]=' . urlencode($sTruncatedFilePath) . '" target="_blank"><img src="../images/tar.png" style="border:0;vertical-align:middle;">&nbsp;Download ' . basename($sBackupDestination) . '</a>');
         } else {
             $oPage->p('<img src="../images/error.png"/>&nbsp;Warning: Backup creation failed !');
         }
     }
     // Form goes here.. No back button since the job is done !
     $oPage->add('<table style="width:600px;border:0;padding:0;"><tr>');
     $oPage->add("<td><a style=\"background:transparent;padding:0;\" title=\"Free: Register your iTop version.\" href=\"http://www.combodo.com/register?product=iTop&version=" . urlencode(ITOP_VERSION . " revision " . ITOP_REVISION) . "\" target=\"_blank\"><img style=\"border:0\" src=\"../images/setup-register.gif\"/></td></a>");
     $oPage->add("<td><a style=\"background:transparent;padding:0;\" title=\"Get Professional Support from Combodo\" href=\"http://www.combodo.com/itopsupport\" target=\"_blank\"><img style=\"border:0\" src=\"../images/setup-support.gif\"/></td></a>");
     $oPage->add("<td><a style=\"background:transparent;padding:0;\" title=\"Get Professional Training from Combodo\" href=\"http://www.combodo.com/itoptraining\" target=\"_blank\"><img style=\"border:0\" src=\"../images/setup-training.gif\"/></td></a>");
     $oPage->add('</tr></table>');
     $sForm = '<form method="post" action="' . $this->oWizard->GetParameter('application_url') . 'pages/UI.php">';
     $sForm .= '<input type="hidden" name="auth_user" value="' . htmlentities($this->oWizard->GetParameter('admin_user'), ENT_QUOTES, 'UTF-8') . '">';
     $sForm .= '<input type="hidden" name="auth_pwd" value="' . htmlentities($this->oWizard->GetParameter('admin_pwd'), ENT_QUOTES, 'UTF-8') . '">';
     $sForm .= "<p style=\"text-align:center;width:100%\"><button id=\"enter_itop\" type=\"submit\">Enter " . ITOP_APPLICATION . "</button></p>";
     $sForm .= '</form>';
     $sPHPVersion = phpversion();
     $sMySQLVersion = SetupUtils::GetMySQLVersion($this->oWizard->GetParameter('db_server'), $this->oWizard->GetParameter('db_user'), $this->oWizard->GetParameter('db_pwd'));
     $oPage->add('<img style="border:0" src="http://www.combodo.com/stats/?p=' . urlencode(ITOP_APPLICATION) . '&v=' . urlencode(ITOP_VERSION) . '&php=' . urlencode($sPHPVersion) . '&mysql=' . urlencode($sMySQLVersion) . '&os=' . urlencode(PHP_OS) . '"/>');
     $sForm = addslashes($sForm);
     $oPage->add_ready_script("\$('#wiz_form').after('{$sForm}');");
 }