FriendsOfREDAXO / project_manager

Bietet Unterstützung bei der Verwaltung und Überprüfung von REDAXO-Installationen.
MIT License
26 stars 2 forks source link

Feature: REDAXO-Reiter #20

Closed alxndr-w closed 4 years ago

alxndr-w commented 5 years ago

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.

image

alxndr-w commented 5 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.

alxndr-w commented 5 years ago

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 //