/**
  * Shows result of database check or fix (with or without dryrun)
  *
  * @param  DatabaseUpgrade|CBDatabaseChecker|cbInstallerPlugin  $dbChecker
  * @param  boolean                                              $upgrade
  * @param  boolean                                              $dryRun
  * @param  boolean                                              $result
  * @param  array                                                $messagesBefore
  * @param  array                                                $messagesAfter
  * @param  string                                               $dbName
  * @param  int                                                  $dbId
  * @param  boolean                                              $showConclusion
  */
 public static function renderDatabaseResults(&$dbChecker, $upgrade, $dryRun, $result, $messagesBefore, $messagesAfter, $dbName, $dbId, $showConclusion = true)
 {
     global $_CB_framework;
     static $JS_LOADED = 0;
     if (!$JS_LOADED++) {
         $js = "\$( '.cbDbResultsLogShow' ).on( 'click', function() {" . "\$( this ).addClass( 'hidden' );" . "\$( this ).siblings( '.cbDbResultsLogHide' ).removeClass( 'hidden' );" . "\$( this ).siblings( '.cbDbResultsLogMsgs' ).slideDown();" . "});" . "\$( '.cbDbResultsLogHide' ).on( 'click', function() {" . "\$( this ).addClass( 'hidden' );" . "\$( this ).siblings( '.cbDbResultsLogShow' ).removeClass( 'hidden' );" . "\$( this ).siblings( '.cbDbResultsLogMsgs' ).slideUp();" . "});" . "\$( '.cbDbResultsLogMsgs' ).hide();";
         $_CB_framework->outputCbJQuery($js);
     }
     $cbSpoofField = cbSpoofField();
     $cbSpoofString = cbSpoofString(null, 'plugin');
     $return = '<div class="cbDbResults">';
     if ($messagesBefore) {
         $return .= '<div class="form-group cb_form_line clearfix cbDbResultsMsgs">';
         foreach ($messagesBefore as $msg) {
             if ($msg) {
                 $return .= '<div class="cbDbResultsMsg">' . $msg . '</div>';
             }
         }
         $return .= '</div>';
     }
     if ($dbChecker !== null) {
         $return .= '<div class="form-group cb_form_line clearfix cbDbResultsCheck">';
         if ($result == true) {
             $return .= '<div class="text-success cbDbResultsSuccess">';
             if ($upgrade) {
                 if ($dryRun) {
                     $return .= CBTxt::T('NAME_DATABASE_ADJS_DRY_SUCCESS', '[name] database adjustments dryrun is successful. See results below.', array('[name]' => $dbName));
                 } else {
                     $return .= CBTxt::T('NAME_DATABASE_ADJS_SUCCESS', '[name] database adjustments have been performed successfully.', array('[name]' => $dbName));
                 }
             } else {
                 $return .= CBTxt::T('ALL_NAME_DATABASE_UPTODATE', 'All [name] database is up to date.', array('[name]' => $dbName));
             }
             $return .= '</div>';
         } elseif (is_string($result)) {
             $return .= '<div class="text-danger">' . $result . '</div>';
         } else {
             $return .= '<div class="text-danger cbDbResultsErrors">';
             if ($upgrade) {
                 $return .= CBTxt::T('NAME_DATABASE_ADJS_ERRORS', '[name] database adjustments errors:', array('[name]' => $dbName));
             } else {
                 $return .= CBTxt::T('NAME_DATABASE_STRUCT_DIFF', '[name] database structure differences:', array('[name]' => $dbName));
             }
             foreach ($dbChecker->getErrors(false) as $error) {
                 $return .= '<div class="text-large cbDbResultsError">' . htmlspecialchars($error[0]) . ($error[1] ? '<div class="text-small">' . htmlspecialchars($error[1]) . '</div>' : null) . '</div>';
             }
             $return .= '</div>';
             if (!$upgrade) {
                 $return .= '<div class="text-danger cbDbResultsErrorsFix">' . CBTxt::T('NAME_DATABASE_STRUCT_FIX', 'The [name] database structure differences can be fixed (adjusted) by clicking here:', array('[name]' => $dbName)) . ' <span class="alert alert-sm alert-danger text-large">' . '<a href="' . $_CB_framework->backendUrl("index.php?option=com_comprofiler&view=fixcbdb&dryrun=0&databaseid={$dbId}&{$cbSpoofField}={$cbSpoofString}") . '">' . CBTxt::T('NAME_DATABASE_DIFF_FIX_CLICK_HERE', 'Click here to fix (adjust) all [name] database differences listed above', array('[name]' => $dbName)) . '</a>' . '</span> ' . CBTxt::T('DATABASE_STRUCT_DRY_CLICK_HERE', '(you can also <a href="[url]">Click here to preview fixing (adjusting) queries in a dry-run</a>), but <strong class="text-large text-underline">in all cases you need to backup database first</strong> as this adjustment is changing the database structure to match the needed structure for the installed version.', array('[url]' => $_CB_framework->backendUrl("index.php?option=com_comprofiler&view=fixcbdb&dryrun=1&databaseid={$dbId}&{$cbSpoofField}={$cbSpoofString}"))) . '</div>';
             }
         }
         $logs = $dbChecker->getLogs(false);
         if (count($logs) > 0) {
             $return .= '<div class="cbDbResultsLog">' . '<a href="javascript:void(0);" class="cbDbResultsLogShow">' . CBTxt::T('Click here to show details') . ' <span class="fa fa-caret-down"></span></a>' . '<a href="javascript:void(0);" class="cbDbResultsLogHide hidden">' . CBTxt::T('Click here to hide details') . ' <span class="fa fa-caret-up"></span></a>' . '<div class="text-success cbDbResultsLogMsgs" style="display: none;">';
             foreach ($logs as $log) {
                 $return .= '<div class="text-large cbDbResultsLogMsg">' . htmlspecialchars($log[0]) . ($log[1] ? '<div class="text-small">' . htmlspecialchars($log[1]) . '</div>' : null) . '</div>';
             }
             $return .= '</div>' . '</div>';
         }
         $return .= '</div>';
     }
     if ($showConclusion) {
         if ($upgrade) {
             if ($dryRun) {
                 $return .= '<div class="form-group cb_form_line clearfix cbDbResultsConclusion">' . CBTxt::T('NAME_DATABASE_ADJS_DRY', 'Dry-run of [name] database adjustments done. None of the queries listed in details have been performed.', array('[name]' => $dbName)) . '<br />' . CBTxt::T('NAME_DATABASE_ADJS_FIX', 'The [name] database adjustments listed above can be applied by clicking here:', array('[name]' => $dbName)) . ' <span class="alert alert-sm alert-danger text-large">' . '<a href="' . $_CB_framework->backendUrl("index.php?option=com_comprofiler&view=fixcbdb&dryrun=0&databaseid={$dbId}&{$cbSpoofField}={$cbSpoofString}") . '">' . CBTxt::T('NAME_DATABASE_DIFF_FIX_CLICK_HERE', 'Click here to fix (adjust) all [name] database differences listed above', array('[name]' => $dbName)) . '</a>' . '</span> ' . CBTxt::T('DATABASE_FIX_BACKUP_FIRST', '<strong class="text-danger text-large text-underline">You need to backup database first</strong> as this fixing/adjusting is changing the database structure to match the needed structure for the installed version.') . '</div>';
             } else {
                 $return .= '<div class="form-group cb_form_line clearfix cbDbResultsConclusion">' . CBTxt::T('NAME_DATABASE_ADJS_DONE', 'The [name] database adjustments have been done. If all lines above are in green, database adjustments completed successfully. Otherwise, if some lines are red, please report exact errors and queries to authors forum, and try checking database again.', array('[name]' => $dbName)) . '<br />' . CBTxt::T('NAME_DATABASE_STRUCT_CHECK', 'The [name] database structure can be checked again by clicking here:', array('[name]' => $dbName)) . ' <span class="alert alert-sm alert-warning text-large">' . '<a href="' . $_CB_framework->backendUrl("index.php?option=com_comprofiler&view=checkcbdb&databaseid={$dbId}&{$cbSpoofField}={$cbSpoofString}") . '">' . CBTxt::T('NAME_DATABASE_DIFF_CHECK_CLICK_HERE', 'Click here to check [name] database', array('[name]' => $dbName)) . '</a>' . '</span> ' . '</div>';
             }
         } else {
             $return .= '<div class="form-group cb_form_line clearfix cbDbResultsConclusion">' . CBTxt::T('NAME_DATABASE_CHECKS_DONE', '[name] database checks done. If all lines above are in green, test completed successfully. Otherwise, please take corrective measures proposed in red.', array('[name]' => $dbName)) . '</div>';
         }
     }
     if ($messagesAfter) {
         $return .= '<div class="form-group cb_form_line clearfix cbDbResultsMsgs">';
         foreach ($messagesAfter as $msg) {
             if ($msg) {
                 $return .= '<div class="cbDbResultsMsg">' . $msg . '</div>';
             }
         }
         $return .= '</div>';
     }
     $return .= '</div>';
     echo $return;
 }