diff --git a/css/backoffice/layout/_content.scss b/css/backoffice/layout/_content.scss index efc0cae9c..de70d0067 100644 --- a/css/backoffice/layout/_content.scss +++ b/css/backoffice/layout/_content.scss @@ -16,28 +16,39 @@ * You should have received a copy of the GNU Affero General Public License */ +$ibo-code--background-color: $ibo-color-white-200 !default; +$ibo-code--padding: 1.25rem 1.5rem !default; + /* Note: We have to wrap it in the ID in order to overload its rules, otherwise, the ID takes over the simple CSS class... */ #ibo-center-container { - &.ibo-center-container--with-side-content { - display: flex; - align-items: stretch; - overflow: hidden; /* Only the content areas should scroll */ + &.ibo-center-container--with-side-content { + display: flex; + align-items: stretch; + overflow: hidden; /* Only the content areas should scroll */ - > * { - height: 100%; - } - #ibo-main-content { - flex-grow: 1; /* To occupy maximum width, side content will handle its width */ - overflow-x: auto; /* To avoid main content to be too wide when the blocks within it have no width constraints. This way it will occupy only the remaining space left by the side part. */ - } - } + > * { + height: 100%; + } + + #ibo-main-content { + flex-grow: 1; /* To occupy maximum width, side content will handle its width */ + overflow-x: auto; /* To avoid main content to be too wide when the blocks within it have no width constraints. This way it will occupy only the remaining space left by the side part. */ + } + } } .ibo-v-spacer { - padding-top: 1em; + padding-top: 1em; } #ibo-side-content { - background-color: $ibo-content-block--background-color; - border-left: $ibo-content-block--border; + background-color: $ibo-content-block--background-color; + border-left: $ibo-content-block--border; +} + +.ibo-code { + font-family: $family-code; + font-size: $ibo-font-size-150; + background-color: $ibo-code--background-color; + padding: $ibo-code--padding; } \ No newline at end of file diff --git a/datamodels/2.x/combodo-db-tools/dbtools.php b/datamodels/2.x/combodo-db-tools/dbtools.php index f53ebf3fb..ad5e0c87a 100644 --- a/datamodels/2.x/combodo-db-tools/dbtools.php +++ b/datamodels/2.x/combodo-db-tools/dbtools.php @@ -23,7 +23,6 @@ use Combodo\iTop\Application\UI\Base\Component\CollapsibleSection\CollapsibleSec use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\FieldSet\FieldSetUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory; -use Combodo\iTop\Application\UI\Base\Component\Html\Html; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory; @@ -70,10 +69,10 @@ function DisplayDBInconsistencies(iTopWebPage &$oP, ApplicationContext &$oAppCon } } - $oPanel = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:SelectAnalysisType')); - $oP->AddUiBlock($oPanel); + $oFieldSet = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:SelectAnalysisType')); + $oP->AddUiBlock($oFieldSet); $oForm = FormUIBlockFactory::MakeStandard(); - $oPanel->AddSubBlock($oForm); + $oFieldSet->AddSubBlock($oForm); $oToolbar = ToolbarUIBlockFactory::MakeStandard(); $oForm->AddSubBlock($oToolbar); @@ -142,16 +141,18 @@ function DisplayDBInconsistencies(iTopWebPage &$oP, ApplicationContext &$oAppCon DisplayInconsistenciesReport($aResults); } - $oPanel = PanelUIBlockFactory::MakeForWarning(Dict::S('DBTools:ErrorsFound')); - $oPanel->AddCSSClass('ibo-datatable-panel'); - $oP->AddUiBlock($oPanel); if ($iShowId == 0) { // Error List + $oPanel = PanelUIBlockFactory::MakeForWarning(Dict::S('DBTools:ErrorsFound')); + $oPanel->AddCSSClass('ibo-datatable-panel'); + $oP->AddUiBlock($oPanel); $oPanel->AddSubBlock(DisplayErrorList($aResults)); } else { // Detail List - $oPanel->AddSubBlock(DisplayErrorDetails($aResults)); + $oFieldSet = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:ErrorsFound')); + $oP->AddUiBlock($oFieldSet); + $oFieldSet->AddSubBlock(DisplayErrorDetails($aResults)); } } @@ -229,7 +230,9 @@ function DisplayErrorDetails($aResults) $oFieldSet = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:SQLquery')); $oCollapsible->AddSubBlock($oFieldSet); - $oFieldSet->AddSubBlock(new Html("
{$aError['query']}
")); + + $oCode = UIContentBlockUIBlockFactory::MakeForCode($aError['query']); + $oFieldSet->AddSubBlock($oCode); if (isset($aError['fixit'])) { $oFieldSet = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:FixitSQLquery')); @@ -237,7 +240,8 @@ function DisplayErrorDetails($aResults) $aQueries = $aError['fixit']; foreach ($aQueries as $sFixQuery) { - $oFieldSet->AddSubBlock(new Html("
{$sFixQuery}
")); + $oCode = UIContentBlockUIBlockFactory::MakeForCode($sFixQuery); + $oFieldSet->AddSubBlock($oCode); } } @@ -258,7 +262,8 @@ function DisplayErrorDetails($aResults) } $sQueryResult .= '
'; } - $oFieldSet->AddSubBlock(new Html("
{$sQueryResult}
")); + $oCode = UIContentBlockUIBlockFactory::MakeForCode($sQueryResult); + $oFieldSet->AddSubBlock($oCode); } } diff --git a/pages/run_query.php b/pages/run_query.php index b013f1ab6..1a526f09a 100644 --- a/pages/run_query.php +++ b/pages/run_query.php @@ -27,6 +27,7 @@ use Combodo\iTop\Application\UI\Base\Component\Html\HtmlFactory; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\TextArea; use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; require_once('../approot.inc.php'); require_once(APPROOT.'/application/application.inc.php'); @@ -248,11 +249,11 @@ EOF $aMoreInfoBlocks = []; $oDevelopedQuerySet = new FieldSet(Dict::S('UI:RunQuery:DevelopedQuery')); - $oDevelopedQuerySet->AddSubBlock(new Html('
'.utils::EscapeHtml($oFilter->ToOQL()).'
')); + $oDevelopedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode(utils::EscapeHtml($oFilter->ToOQL()))); $aMoreInfoBlocks[] = $oDevelopedQuerySet; $oSerializedQuerySet = new FieldSet(Dict::S('UI:RunQuery:SerializedFilter')); - $oSerializedQuerySet->AddSubBlock(new Html('
'.utils::EscapeHtml($oFilter->serialize()).'
')); + $oSerializedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode(utils::EscapeHtml($oFilter->serialize()))); $aMoreInfoBlocks[] = $oSerializedQuerySet; @@ -275,14 +276,14 @@ EOF $oSQLObjectQueryBuilder = new SQLObjectQueryBuilder($oFilter); $oBuild = new QueryBuilderContext($oFilter, $aModifierProperties, null, null, null, $aCountAttToLoad); $oCountDevelopedQuerySet = new FieldSet(Dict::S('UI:RunQuery:DevelopedOQLCount')); - $oCountDevelopedQuerySet->AddSubBlock(new Html('
'.$oSQLObjectQueryBuilder->DebugOQLClassTree($oBuild).'
')); + $oCountDevelopedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($oSQLObjectQueryBuilder->DebugOQLClassTree($oBuild))); $aMoreInfoBlocks[] = $oCountDevelopedQuerySet; } // SQL Count $sSQL = $oFilter->MakeSelectQuery(array(), $aRealArgs, $aCountAttToLoad, null, 0, 0, true); $oCountResultQuerySet = new FieldSet(Dict::S('UI:RunQuery:ResultSQLCount')); - $oCountResultQuerySet->AddSubBlock(new Html('
'.$sSQL.'
')); + $oCountResultQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($sSQL)); $aMoreInfoBlocks[] = $oCountResultQuerySet; if (($oFilter instanceof DBObjectSearch) && !MetaModel::GetConfig()->Get('use_legacy_dbsearch')) { @@ -290,14 +291,14 @@ EOF $oSQLObjectQueryBuilder = new SQLObjectQueryBuilder($oFilter); $oBuild = new QueryBuilderContext($oFilter, $aModifierProperties); $oOqlDevelopedQuerySet = new FieldSet(Dict::S('UI:RunQuery:DevelopedOQL')); - $oOqlDevelopedQuerySet->AddSubBlock(new Html('
'.$oSQLObjectQueryBuilder->DebugOQLClassTree($oBuild).'
')); + $oOqlDevelopedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($oSQLObjectQueryBuilder->DebugOQLClassTree($oBuild))); $aMoreInfoBlocks[] = $oOqlDevelopedQuerySet; } // SQL $sSQL = $oFilter->MakeSelectQuery($aOrderBy, $aRealArgs, null, null, 0, 0, false); $oSqlQuerySet = new FieldSet(Dict::S('UI:RunQuery:ResultSQL')); - $oSqlQuerySet->AddSubBlock(new Html('
'.$sSQL.'
')); + $oSqlQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($sSQL)); $aMoreInfoBlocks[] = $oSqlQuerySet; $oMoreInfoSection = new CollapsibleSection(Dict::S('UI:RunQuery:MoreInfo'), $aMoreInfoBlocks); diff --git a/sources/application/UI/Base/Layout/UIContentBlockUIBlockFactory.php b/sources/application/UI/Base/Layout/UIContentBlockUIBlockFactory.php index 840dc45bd..ed707e3b1 100644 --- a/sources/application/UI/Base/Layout/UIContentBlockUIBlockFactory.php +++ b/sources/application/UI/Base/Layout/UIContentBlockUIBlockFactory.php @@ -9,6 +9,7 @@ namespace Combodo\iTop\Application\UI\Base\Layout; use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Html\Html; class UIContentBlockUIBlockFactory extends AbstractUIBlockFactory { @@ -19,4 +20,22 @@ class UIContentBlockUIBlockFactory extends AbstractUIBlockFactory { return new UIContentBlock($sId, $aContainerClasses); } + + + /** + * Used to display a block of code like
 but allows line break.
+	 * The \n are replaced by 
+ * + * @param string $sCode + * @param string|null $sId + */ + public static function MakeForCode(string $sCode, string $sId = null) + { + $oCode = new UIContentBlock($sId, ['ibo-code']); + $sCode = str_replace("\n", '
', $sCode); + $oCode->AddSubBlock(new Html($sCode)); + + return $oCode; + } + } \ No newline at end of file