Closed alxndr-w closed 4 years ago
Außerdem eine Überprüfung, ob der Debug-Modus aktiv ist - was er in einem Live/Produktiv-System ja nicht soll, aber hin und wieder vorgekommen ist.
Hier eine Addon-Übersicht evtl. als Ausgangsbasis.
<?php
$func = rex_request('func', 'string');
$start = rex_request('start', 'int');
$addons = rex_request('addons', 'string', "");
$csrfToken = rex_csrf_token::factory('hello_server_details');
$check_addons['adminer'] = "adminer";
$check_addons['bloecks'] = "bloecks";
$check_addons['dsgvo'] = "dsgvo";
$check_addons['global_settings'] = "global_settings";
$check_addons['hello'] = "hello";
$check_addons['maintenance'] = "maintenance";
$check_addons['markitup'] = "markitup";
$check_addons['mblock'] = "mblock";
$check_addons['mediapool'] = "mediapool";
$check_addons['media_manager'] = "media_manager";
$check_addons['mform'] = "mform";
$check_addons['minify'] = "minify";
$check_addons['navigation_factory'] = "navigation_factory";
$check_addons['php_mailer'] = "php_mailer";
$check_addons['project'] = "project";
$check_addons['quick_navigation'] = "quick_navigation";
$check_addons['search_it'] = "search_it";
$check_addons['uploader'] = "uploader";
$check_addons['users'] = "users";
$check_addons['ycom'] = "ycom";
$check_addons['yfeed'] = "yfeed";
$check_addons['yform'] = "yform";
$check_addons['yform_usability'] = "yform_usability";
$check_addons['yrewrite'] = "yform_usability";
$formElements = [];
$n = [];
$n['label'] = '<label for="addons">' . rex_i18n::msg('Addon wählen') . ', z.B. <code>dsgvo,mform,mblock,phpmailer,users,ycom,yform,yrewrite</code></label>';
$n['field'] = '<input type="text" name="addons" value="" class="form-control" />';
$n['notice'] = "z.B. <code>dsgvo,mform,mblock,ycom,yform</code>";
$formElements[] = $n;
$fragment = new rex_fragment();
$fragment->setVar('elements', $formElements, false);
$content = $fragment->parse('core/form/form.php');
$formElements = [];
$n = [];
$n['field'] = '<button class="btn btn-save rex-form-aligned" type="submit" name="sendit">' . 'Anzeigen' . '</button>';
$formElements[] = $n;
$fragment = new rex_fragment();
$fragment->setVar('elements', $formElements, false);
$buttons = $fragment->parse('core/form/submit.php');
$fragment = new rex_fragment();
$fragment->setVar('class', 'edit', false);
$fragment->setVar('title', rex_i18n::msg('system_settings'));
$fragment->setVar('body', $content, false);
$fragment->setVar('buttons', $buttons, false);
$content = $fragment->parse('core/page/section.php');
$content = '
<form id="rex-form-system-setup" action="' . rex_url::currentBackendPage() . '" method="get">
<input type="hidden" name="func" value="updateinfos" />
<input type="hidden" name="page" value="project_manager/server/addons" />
' . $csrfToken->getHiddenField() . '
' . $content . '
</form>';
echo $content;
// Domain-Übersicht ANFANG //
$query = 'SELECT * FROM (SELECT id, domain FROM `rex_project_manager_domain` ORDER BY domain ASC) AS D
LEFT JOIN (SELECT domain_id, `raw` as log_raw FROM rex_project_manager_logs WHERE id IN (SELECT MAX(id) FROM rex_project_manager_logs GROUP BY domain_id)) AS HLOG
ON D.id = HLOG.domain_id
ORDER BY D.domain ASC';
$list = rex_list::factory($query, 1000);
$list->addTableAttribute('class', 'table-striped');
$list->setNoRowsMessage($this->i18n('hello_domain_norows_message'));
$items = rex_sql::factory()->getArray($query);
echo rex_view::info("Anzahl der REDAXO-Projekte: ".count($items));
// icon column (Domain hinzufügen bzw. bearbeiten)
$thIcon = '<a href="'.$list->getUrl(['func' => 'domain_add','start' => $start]).'"><i class="rex-icon rex-icon-structure-root-level"></i></a>';
$tdIcon = '<i class="rex-icon rex-icon-structure-root-level"></i>';
$list->addColumn($thIcon, $tdIcon, 0, ['<th class="rex-table-icon">###VALUE###</th>', '<td class="rex-table-icon">###VALUE###</td>']);
$list->setColumnParams($thIcon, ['func' => 'domain_edit', 'id' => '###id###','start' => $start]);
$list->setColumnFormat($thIcon, 'custom', function ($params) {
return '<img src="/assets/addons/hello/plugins/server/favicon/'.$params['list']->getValue('domain').'.png" />';
});
$list->addColumn($this->i18n('domain'), '###domain###', 3);
$list->setColumnParams($this->i18n('domain'), ['page' => 'hello/server-details', 'func' => 'updateinfos', 'domain' => '###domain###']);
$list->setColumnLabel('domain', $this->i18n('project'));
$list->setColumnLayout('domain', ['<th data-sorter="text">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnLabel('cms_version', $this->i18n('cms_version'));
$list->setColumnLayout('cms_version', ['<th data-sorter="digit" data-string="min">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnFormat('cms_version', 'custom', function ($params) {
if($params['list']->getValue('cms') == "REDAXO") {
if (rex_string::versionCompare($params['list']->getValue('cms_version'), "5.6.0", '>=') && rex_string::versionCompare($params['list']->getValue('cms_version'), "5", '>')) {
return '<span class="rex-icon fa-check text-success"></span> '. $params['list']->getValue('cms_version');
} else if (rex_string::versionCompare($params['list']->getValue('cms_version'), "5.6.4", '<') && rex_string::versionCompare($params['list']->getValue('cms_version'), "5", '>')) {
return '<span class="rex-icon fa-question text-danger"></span> '. $params['list']->getValue('cms_version');
} else if (rex_string::versionCompare($params['list']->getValue('cms_version'), "4", '>') && rex_string::versionCompare($params['list']->getValue('cms_version'), "4.7", '<')) {
return '<span class="rex-icon fa-question text-danger"></span> '.$params['list']->getValue('cms_version');
}
} else {
return $params['list']->getValue('cms') . " " . $params['list']->getValue('cms_version');
}
});
$list->setColumnLabel('php_version', $this->i18n('php_version'));
$list->setColumnLayout('php_version', ['<th data-sorter="digit">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnFormat('php_version', 'custom', function ($params) {
if($params['list']->getValue('cms') == "REDAXO") {
if (rex_string::versionCompare($params['list']->getValue('php_version'), "7.1", '>') && rex_string::versionCompare($params['list']->getValue('cms_version'), "5.0", '>')) {
return '<span class="rex-icon fa-check text-success"></span> '. $params['list']->getValue('php_version');
} else if (rex_string::versionCompare($params['list']->getValue('php_version'), "7.2", '<') && rex_string::versionCompare($params['list']->getValue('cms_version'), "5.0", '>')) {
return '<span class="rex-icon fa-question text-danger"></span> '. $params['list']->getValue('php_version');
} else if (rex_string::versionCompare($params['list']->getValue('php_version'), "5.7", '>') && rex_string::versionCompare($params['list']->getValue('cms_version'), "4.7", '<')) {
return '<span class="rex-icon fa-question text-danger"></span> '.$params['list']->getValue('php_version');
} else if (rex_string::versionCompare($params['list']->getValue('php_version'), "5.6", '<')) {
return '<span class="rex-icon fa-question text-danger"></span> '.$params['list']->getValue('php_version');
}
} else {
return $params['list']->getValue('php_version');
}
});
$list->setColumnLabel('hello_version', $this->i18n('hello_version'));
$list->setColumnLayout('hello_version', ['<th data-sorter="digit">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnLabel('status', $this->i18n('status'));
$list->setColumnFormat('status', 'custom', function ($params) {
if ($params['list']->getValue('status') == "1") {
return '<span class="rex-icon fa-check"></span>';
} else if ($params['list']->getValue('status') == "0") {
return '<span class="rex-icon fa-question"></span>';
} else if ($params['list']->getValue('status') == "-1") {
return '<span class="rex-icon fa-exclamation-triangle"></span>';
} else {
return "?";
}
});
$list->setColumnLayout('status', ['<th data-sorter="digit">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->addColumn("debug_mode", false, -1, ['<th class="rex-table-icon">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnLabel('debug_mode', $this->i18n('debug_mode'));
$list->setColumnFormat("debug_mode", 'custom', function ($params) {
if($params['list']->getValue('log_raw')) {
$log = json_decode($params['list']->getValue('log_raw'), true);
if(json_last_error() === JSON_ERROR_NONE) {
$config = rex_string::yamlDecode($log["config"]);
if(isset($config["debug"]["enabled"]) && $config["debug"]["enabled"] == "enabled") {
return '<i title="" class="rex-icon fa-check text-danger"></i> '.$config["debug"]["enabled"].'';
} else if(isset($config["debug"]["enabled"])) {
return '<span class="rex-icon fa-check text-success"></span>';
} else {
return "?";
}
} else {
return "";
}
}
});
$list->addColumn("dsgvo_version", false, -1, ['<th class="rex-table-icon">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnLabel('dsgvo_version', $this->i18n('DSGVO'));
$list->setColumnFormat("dsgvo_version", 'custom', function ($params) {
if($params['list']->getValue('log_raw')) {
$log = json_decode($params['list']->getValue('log_raw'), true);
if(json_last_error() === JSON_ERROR_NONE) {
if(rex_string::versionCompare($log["rex_addons"]['dsgvo']['version_current'], $log["rex_addons"]['dsgvo']['version_latest'], '<')) {
return '<i title="" class="rex-icon fa-exclamation-triangle"></i> '.$log["rex_addons"]['dsgvo']['version_current'];
} else if (rex_string::versionCompare($log["cms_version"], "5", '>')) {
return '<i title="" class="rex-icon fa-exclamation-triangle"></i> ohne';
} else {
return $log["rex_addons"]['dsgvo']['version_current'];
}
} else {
return "";
}
}
});
foreach(explode(",",$addons) as $addon) {
$list->addColumn($addon, false, -1, ['<th class="rex-table-icon">###VALUE###</th>', '<td>###VALUE###</td>']);
$list->setColumnLabel($addon, ($addon));
$list->setColumnFormat($addon, 'custom', function ($params) {
$addon = $params['field'];
if($params['list']->getValue('log_raw')) {
$log = json_decode($params['list']->getValue('log_raw'), true);
if(json_last_error() === JSON_ERROR_NONE) {
if(rex_string::versionCompare($log["rex_addons"][$addon]['version_current'], $log["rex_addons"][$addon]['version_latest'], '<')) {
return '<span style="white-space: nowrap;"><i title="" class="rex-icon fa-exclamation-triangle"></i> '.$log["rex_addons"][$addon]['version_current'].'</span>';
} else {
return $log["rex_addons"][$addon]['version_current'];
}
} else {
return "";
}
}
});
}
$list->removeColumn('id');
$list->removeColumn('cms');
$list->removeColumn('domain');
$list->removeColumn('createdate');
$list->removeColumn('updatedate');
$list->removeColumn('log_raw');
$content1 = $list->get();
$content1 = str_replace('<table class="', '<table class="hello-tablesorter ', $content1);
$fragment = new rex_fragment();
$fragment->setVar('class', "info", false);
$fragment->setVar('title', $this->i18n('hello_domain_list_title'), false);
$fragment->setVar('content', $content1, false);
$content1 = $fragment->parse('core/page/section.php');
echo $content1;
echo "<style>th, td {white-space: nowrap; }</style>";
// Domain-Übersicht ENDE //
in der letzten DEV-Version habe ich eine Übersicht der REDAXO-Infos aus den Logs zusammengestellt. Für uns ist das hilfreich um zu sehen, welche Addons aktualisiert werden müssen und auch, welchen Kunden wir auf Wartungsupdates etc. ansprechen können - oder warnen können, wenn ein externer Hoster bekannt gibt, eine PHP-Version einzustellen.