From 565372df0e271c144fc3427d9571c3b7df8f67bc Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Fri, 20 May 2022 16:15:07 +0200 Subject: [PATCH] Removed external communication with xentral servers --- www/pages/systemlog.php | 2158 ++++++++++++++++++++------------------- www/pages/welcome.php | 14 +- 2 files changed, 1089 insertions(+), 1083 deletions(-) diff --git a/www/pages/systemlog.php b/www/pages/systemlog.php index 28a3719b..26afca20 100644 --- a/www/pages/systemlog.php +++ b/www/pages/systemlog.php @@ -1,1081 +1,1083 @@ -app=$app; - if($intern) - { - return; - } - $this->app->ActionHandlerInit($this); - - $this->app->ActionHandler("list","SystemlogList"); - $this->app->ActionHandler("minidetail","SystemlogMiniDetail"); - $this->app->ActionHandler("datenbank","SystemlogDatenbank"); - $this->app->ActionHandler("timeout","SystemlogTimeout"); - //$this->app->ActionHandler("delete","SystemlogDelete"); - //$this->app->ActionHandler("deleteall","SystemlogDeleteAll"); - - $this->app->DefaultActionHandler("list"); - - $this->app->ActionHandlerListen($app); - } - /* - function SystemlogDelete() - { - $id = $this->app->Secure->GetGET("id"); - $this->app->DB->Delete("DELETE FROM systemlog WHERE id='$id' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Der Logeintrag wurde gelöscht!
"); - header("Location: index.php?module=systemlog&action=list&msg=$msg"); - exit; - } - */ - /* - function SystemlogDeleteAll() - { - $id = $this->app->Secure->GetGET("id"); - $this->app->DB->Delete("DELETE FROM systemlog WHERE id > 0"); - $msg = $this->app->erp->base64_url_encode("
Alle Logeinträge wurden wurden gelöscht!
"); - header("Location: index.php?module=systemlog&action=list&msg=$msg"); - exit; - } - */ - - /** - * @param Application $app - * @param string $name - * @param array $erlaubtevars - * - * @return array - */ - public function TableSearch($app, $name, $erlaubtevars) - { - // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul - switch($name) { - case 'systemlog': - $allowed['systemlog'] = array('list'); - - // headings - $heading = array('', 'Level', 'Zeit', 'Bearbeiter', 'Module', 'Action', 'Parameter', 'Funktion', 'Meldung', 'Menü'); - $width = array('4%', '4%', '15%', '10%', '10%', '10%', '10%', '10%', '40%', '10%', '5%'); - $findcols = array('open', 'a.level', 'a.datum', 'a.bearbeiter', 'a.module', 'a.action', 'a.parameter', 'a.funktionsname', 'a.meldung', 'a.id'); - $searchsql = array("DATE_FORMAT(a.datum,'%d.%m.%Y %H:%i:%s')", 'a.bearbeiter', 'a.module', 'a.meldung', 'a.action', 'a.parameter', 'a.funktionsname'); - $defaultorder = 3; - $defaultorderdesc = 1; - $menucol = 1; - $moreinfo = true; - $menu = "
" . - "
"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, a.level,DATE_FORMAT(a.datum,'%d.%m.%Y %H:%i:%s'), a.bearbeiter, - a.module, a.action, a.parameter, a.funktionsname,a.meldung,CONCAT('module=',a.module,'&action=',a.action,'&id=',a.parameter) FROM systemlog a"; - - $count = 'SELECT COUNT(a.id) FROM systemlog a'; - break; - } - $erg = []; - - foreach($erlaubtevars as $k => $v) { - if(isset($$v)) { - $erg[$v] = $$v; - } - } - return $erg; - } - - /** - * @return array - */ - public function testDatabase() - { - $ret = ['html' => [],'deleteformdata' => []]; - foreach($this->dataBaseLinkings() as $verknuepfung) { - $verknuepfung[4] = 'delete'; - $tabelle = $verknuepfung[0]; - $spalte = $verknuepfung[1]; - $subtabelle = $verknuepfung[2]; - $subspalte = $verknuepfung[3]; - $subwhere = ''; - if(isset($verknuepfung[5]) && $verknuepfung[5] != '' && isset($verknuepfung[6]) && $verknuepfung[6] != ''){ - $subwhere = ' AND s.'.$verknuepfung[5]." = '".$verknuepfung[6]."' "; - } - if(isset($verknuepfung[7])) { - $subwhere .= $verknuepfung[7]; - } - $check = $this->app->DB->Select( - "SELECT s.`$subspalte` - FROM `$subtabelle` s - LEFT JOIN `$tabelle` t ON s.`$subspalte` = t.`$spalte` - WHERE isnull(t.`$spalte`) AND s.`$subspalte` <> 0 AND not isnull(s.`$subspalte`) $subwhere - LIMIT 1" - ); - if($check) { - $aktion = ''; - if(isset($verknuepfung[4]) && $verknuepfung[4] === 'delete') { - $aktion = '
- - - - - -
'; - $warnung = true; - $ret['deleteformdata'][] = [ - 'tabelle'=>$tabelle, - 'spalte' => $spalte, - 'subtabelle' => $subtabelle, - 'subspalte'=>$subspalte, - ]; - } - $ret['html'][] = ''.$subtabelle.'.'.$subspalte.''.$tabelle.'.'.$spalte.'-Einträge mit nicht existierender '.$tabelle.'.'.$spalte.' gefunden'.$aktion.''; - $ret['warning'] = true; - } - else{ - if(!$this->app->DB->error()) { - $ret['html'][] = ''.$subtabelle.'.'.$subspalte.''.$tabelle.'.'.$spalte.'OK'; - } - } - } - - if(!empty($ret['warning']) && method_exists($this->app->erp, 'setSystemHealth')) { - $this->app->erp->setSystemHealth( - 'database', - 'sql_integrity', - 'warning', - 'Einträge mit nicht existierender Verknüpfungen gefunden.' - ); - } - else { - if(method_exists($this->app->erp, 'setSystemHealth')) { - $this->app->erp->setSystemHealth( - 'database', - 'sql_integrity', - 'ok', - '' - ); - } - } - - return $ret; - } - - /** - * @return array - */ - public function dataBaseLinkings() - { - return array( - array('adresse','id','adresse_accounts','adresse','delete'), - array('adresse','id','adresse_kontakte','adresse','delete'), - array('adresse','id','lieferadressen','adresse','delete'), - array('adresse','id','ansprechpartner','adresse','delete'), - array('adresse','id','abrechnungsartikel','adresse'), - array('artikel','id','abrechnungsartikel','artikel'), - //array('adresse','id','dokumente','adresse_from'), - array('adresse','id','dokumente','adresse_to'), - array('adresse','id','dokumente_send','adresse'), - array('artikel','id','einkaufspreise','artikel'), - array('adresse','id','einkaufspreise','adresse'), - array('artikel','id','verkaufspreise','artikel'), - array('drucker','id','drucker_spooler','drucker'), - array('datei','id','datei_version','datei'), - array('datei','id','datei_stichwoerter','datei'), - array('adresse','id','user','adresse'), - array('projekt','id','arbeitspaket','projekt'), - array('lager','id','lager_platz','lager'), - array('lager_platz','id','lager_platz_inhalt','lager_platz'), - array('artikel','id','lager_reserviert','artikel','delete'), - array('adresse','id','lager_reserviert','adresse'), - array('artikel','id','lager_seriennummern','artikel','delete'), - array('artikel','id','lager_platz_inhalt','artikel','delete'), - array('artikel','id','lager_mindesthaltbarkeitsdatum','artikel'), - array('lager_platz','id','lager_mindesthaltbarkeitsdatum','lager_platz'), - array('artikel','id','artikel','variante_von'), - array('artikel','id','stueckliste','stuecklistevonartikel'), - array('artikel','id','stueckliste','artikel'), - array('rechnung','id','rechnung_position','rechnung','delete'), - array('rechnung','id','rechnung_protokoll','rechnung','delete'), - array('auftrag','id','auftrag_position','auftrag','delete'), - array('auftrag','id','auftrag_protokoll','auftrag','delete'), - array('angebot','id','angebot_position','angebot','delete'), - array('angebot','id','angebot_protokoll','angebot','delete'), - array('gutschrift','id','gutschrift_position','gutschrift','delete'), - array('gutschrift','id','gutschrift_protokoll','gutschrift','delete'), - array('bestellung','id','bestellung_position','bestellung','delete'), - array('bestellung','id','bestellung_protokoll','bestellung','delete'), - array('produktion','id','produktion_position','produktion','delete'), - array('produktion','id','produktion_protokoll','produktion','delete'), - array('inventur','id','inventur_position','inventur','delete'), - array('inventur','id','inventur_protokoll','inventur','delete'), - array('adresse','id','rechnung','adresse'), - array('adresse','id','lieferschein','adresse'), - array('adresse','id','gutschrift','adresse'), - array('adresse','id','auftrag','adresse'), - array('adresse','id','angebot','adresse'), - array('adresse','id','bestellung','adresse'), - array('adresse','id','produktion','adresse'), - array('adresse','id','inventur','adresse'), - array('artikel','id','produktion_position','artikel'), - array('artikel','id','rechnung_position','artikel'), - array('artikel','id','auftrag_position','artikel'), - array('artikel','id','lieferschein_position','artikel'), - array('artikel','id','gutschrift_position','artikel'), - array('artikel','id','bestellung_position','artikel'), - array('artikel','id','angebot_position','artikel'), - array('rechnung','id','pdfarchiv','table_id','delete','table_name','rechnung'), - array('auftrag','id','pdfarchiv','table_id','delete','table_name','auftrag'), - array('angebot','id','pdfarchiv','table_id','delete','table_name','angebot'), - array('gutschrift','id','pdfarchiv','table_id','delete','table_name','gutschrift'), - array('bestellung','id','pdfarchiv','table_id','delete','table_name','bestellung'), - array('lieferschein','id','pdfarchiv','table_id','delete','table_name','lieferschein'), - array('produktion','id','pdfarchiv','table_id','delete','table_name','produktion'), - array('rechnung','id','pdfmirror_md5pool','table_id','delete','table_name','rechnung'), - array('auftrag','id','pdfmirror_md5pool','table_id','delete','table_name','auftrag'), - array('angebot','id','pdfmirror_md5pool','table_id','delete','table_name','angebot'), - array('gutschrift','id','pdfmirror_md5pool','table_id','delete','table_name','gutschrift'), - array('bestellung','id','pdfmirror_md5pool','table_id','delete','table_name','bestellung'), - array('lieferschein','id','pdfmirror_md5pool','table_id','delete','table_name','lieferschein'), - array('produktion','id','pdfmirror_md5pool','table_id','delete','table_name','auftrag'), - array('auftrag','id','beleg_chargesnmhd','doctypeid','delete','doctype','auftrag'), - array('angebot','id','beleg_chargesnmhd','doctypeid','delete','doctype','angebot'), - array('gutschrift','id','beleg_chargesnmhd','doctypeid','delete','doctype','gutschrift'), - array('lieferschein','id','beleg_chargesnmhd','doctypeid','delete','doctype','lieferschein'), - array('rechnung','id','beleg_chargesnmhd','doctypeid','delete','doctype','rechnung'), - array('bestellung','id','beleg_chargesnmhd','doctypeid','delete','doctype','bestellung') - ); - } - - /** - * @param string $table - * @param string $column - * @param string $subTable - * @param string $subColumn - * - * @return int - */ - public function deleteTableEntries($table, $column, $subTable, $subColumn) - { - $ret = 0; - if(empty($table) || empty($column) || empty($subColumn) || empty($subTable)) { - return 0; - } - - $linkinSchemas = $this->dataBaseLinkings(); - foreach ($linkinSchemas as $linkinSchema) { - $linkinSchema[4] = 'delete'; - if( - $table == $linkinSchema[0] - && $column == $linkinSchema[1] - && $subTable == $linkinSchema[2] - && $subColumn == $linkinSchema[3] - && !empty($linkinSchema[4]) - && $linkinSchema[4] === 'delete' - ) { - $subwhere = ''; - if(!empty($linkinSchema[5]) && $linkinSchema[5] != '' && isset($linkinSchema[6]) && $linkinSchema[6] != '') { - $subwhere = ' AND s.' . $linkinSchema[5] . " = '" . $linkinSchema[6] . "' "; - } - if(!empty($linkinSchema[7])){ - $subwhere .= $linkinSchema[7]; - } - $this->app->DB->Delete( - "DELETE `s` - FROM `$subTable` AS `s` - LEFT JOIN `$table` `t` ON s.`$subColumn` = t.`$column` - WHERE isnull(t.`$column`) AND s.`$subColumn` <> 0 AND not isnull(s.`$subColumn`) $subwhere" - ); - $anz = (int)$this->app->DB->affected_rows(); - if($anz <= 0) { - continue; - } - $ret += $anz; - } - } - - return $ret; - } - - public function SystemlogDatenbank() - { - if($this->app->Secure->GetPOST('cleanconfirm') && $this->app->Secure->GetPOST('cleanall')) { - $test = $this->testDatabase(); - $message = '
Keine Datenintegrietätsprobleme gefunden
'; - if(!empty($test['warning']) && !empty($test['deleteformdata'])) { - $sum = 0; - foreach($test['deleteformdata'] as $formdata) { - $anz = $this->deleteTableEntries( - $formdata['tabelle'], $formdata['spalte'], $formdata['subtabelle'], $formdata['subspalte'] - ); - if($anz > 0) { - $sum += $anz; - } - } - //$anz = $this->deleteTableEntries($tabelle, $spalte, $subtabelle, $subspalte); - $test = $this->testDatabase(); - if(empty($test['warning'])) { - $message = sprintf('
Es wurden %d Datensätze gelöscht
', $sum); - } - else { - $message = sprintf('
Es wurden %d Datensätze gelöscht. - Es konnten nicht alle Datenintegrietätsprobleme gelöst werden
', $sum); - } - } - - $this->app->Location->execute( - 'index.php?module=systemlog&action=datenbank&msg='.$this->app->erp->base64_url_encode($message) - ); - } - $this->SystemlogMenu(); - - $this->app->Tpl->Add( - 'MESSAGE', - '
-
- In dieser Übersicht können Sie die Datenintegrität von Xentral überprüfen.
- Für weitere Informationen lesen Sie bitte im Handbuch nach. - -
-
' - ); - - if($this->app->Secure->GetPOST('delete')) { - $tabelle = $this->app->Secure->GetPOST('tabelle'); - $spalte = $this->app->Secure->GetPOST('spalte'); - $subtabelle = $this->app->Secure->GetPOST('subtabelle'); - $subspalte = $this->app->Secure->GetPOST('subspalte'); - $anz = $this->deleteTableEntries($tabelle, $spalte, $subtabelle, $subspalte); - if($anz > 0) { - $this->app->Tpl->Add( - 'MESSAGE', - '
'.$anz.' Einträge gelöscht
' - ); - $this->SystemlogShowResultTable(); - } - } - - if($this->app->Secure->GetPOST('testen')) { - $this->SystemlogShowResultTable(); - } - - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - public function SystemlogShowResultTable(){ - $test = $this->testDatabase(); - - $warnung = false; - if(!empty($test)) { - $this->app->Tpl->Add( - 'TAB1', - ' - ' - ); - foreach($test['html'] as $row) { - $this->app->Tpl->Add('TAB1', $row); - } - $warnung = !empty($test['warning']); - } - - if($warnung) { - $this->app->Tpl->Add( - 'MESSAGE', - '
- Vor dem Löschen ist es dringend empfohlen ein Backup der Datenbank zu machen. -
- - -
' - ); - } - $this->app->Tpl->Add('TAB1','
Tabelle vonzuStatusBeschreibungAktion
'); - } - - public function SystemlogMiniDetail() - { - $id = (int)$this->app->Secure->GetGET('id'); - $dump = $id <= 0?null:$this->app->DB->SelectRow( - sprintf( - 'SELECT `argumente`, `funktionsname`, `dump` FROM `systemlog` WHERE `id` = %d LIMIT 1', - $id - ) - ); - if(empty($dump)) { - $this->app->ExitXentral(); - } - echo '
Argumente der Funktion '.$dump['funktionsname']
-      .':

'.base64_decode($dump['argumente']) - .'
'; - echo '

Dump:'.$dump['dump'].'
'; - - $this->app->ExitXentral(); - } - - public function SystemlogTimeout() - { - $cmd = $this->app->Secure->GetGET('cmd'); - - if(is_numeric($cmd) && (int)$cmd > 0) { - usleep((int)$cmd * 1000000); - } - echo 'Erfolgreich durchgelaufen!'; - $this->app->ExitXentral(); - } - - /** - * @param string $name - * - * @return bool - */ - public function hasExectuableExtension($name) { - if (!function_exists('exec')) { - throw new Exception('Required Function exec is missing'); - } - if (!is_string($name)) { - return false; - } - exec(sprintf('whereis %s',$name), $out); - if (empty($out)) { - return false; - } - $result = $out[0]; - $resultExploded = explode(':', $result); - array_shift($resultExploded); - return !empty(trim(implode("",$resultExploded))); - } - - /** - * @return bool - */ - public function isTls12Available(): bool - { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, self::TLS_TEST_URL); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt ($ch, CURLOPT_SSLVERSION, 6); - curl_exec($ch); - $curlInfo = curl_getinfo($ch); - curl_close($ch); - - return (int)$curlInfo['http_code'] !== 0; - } - - /** - * @return array - */ - public function getCompatibilities() - { - $ret = []; - $typeToMessage = []; - if(!function_exists('fsockopen')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'fsocket nicht installiert!'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'fsocket verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['fsocket'] = count($ret) - 1; - if(!function_exists('mysqli_connect')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'MYSQLi nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'MYSQLi verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['mysqli'] = count($ret) - 1; - if(!extension_loaded('mysqlnd')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'Mysqlnd nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Mysqlnd verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['mysqlnd'] = count($ret) - 1; - if(!class_exists('\PDO')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'PDO nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'PDO verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['pdo'] = count($ret) - 1; - if(!function_exists('curl_init')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'cURL nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'cURL verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['curl'] = count($ret) - 1; - if(!function_exists('stream_socket_enable_crypto')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'stream_socket_enable_crypto nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'stream_socket_enable_crypto verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['crypto'] = count($ret) - 1; - if(!function_exists('openssl_error_string')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'OpenSSL nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'OpenSSL verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['openssl'] = count($ret) - 1; - if(!function_exists('mb_encode_numericentity')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'php-mbstring nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'php-mbstring verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-mbstring'] = count($ret) - 1; - if(!class_exists('SoapClient')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'php-soap nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'php-soap verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-soap'] = count($ret) - 1; - if(!function_exists('imap_open')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'imap nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'imap verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['imap'] = count($ret) - 1; - if(!function_exists('simplexml_load_string')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'php-xml nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'php-xml verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-xml'] = count($ret) - 1; - if(!class_exists('ZipArchive')) { - $tmp['status'] = 'error'; - $tmp['text'] = 'php-zip nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'php-zip verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-zip'] = count($ret) - 1; - try { - $hasZip = $this->hasExectuableExtension('zip'); - } - catch(Exception $e) { - $hasZip = false; - } - - if(!$hasZip) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Binary Zip-extension für Kommandozeilen nicht installiert'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'extension_zip', - 'warning', - 'nicht installiert. Backups können nicht erstellt werden' - ); - } - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Binary Zip-extension für Kommandozeilen verfügbar'; - $ret[] = $tmp; - if(!empty($_GET) && method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'extension_zip', - 'ok', - 'installiert.' - ); - } - } - $typeToMessage['extension-zip'] = count($ret) - 1; - - if(!function_exists('imagejpeg')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'PHP GD-Erweiterung nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'PHP GD-Erweiterung verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-gd'] = count($ret) - 1; - if(!function_exists('ldap_connect')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'PHP LDAP-Erweiterung nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'PHP LDAP-Erweiterung verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['php-ldap'] = count($ret) - 1; - if(!function_exists('ssh2_connect')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'PHP SSH2-Erweiterung nicht installiert'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'PHP SSH2-Erweiterung verfügbar'; - $ret[] = $tmp; - } - $typeToMessage['tls1-2'] = count($ret) - 1; - if(!$this->isTls12Available()) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'TLS 1.2 ist nicht verfügbar'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'tls1-2', - 'warning', - 'TLS 1.2 ist nicht verfügbar' - ); - } - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'TLS 1.2 ist verfügbar'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'tls1-2', - 'ok', - 'TLS 1.2 ist verfügbar' - ); - } - } - $typeToMessage['php-ssh2'] = count($ret) - 1; - if(!function_exists('ioncube_loader_version')) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Ioncube ist nicht installiert (Eine Installation ist trotzdem möglich)'; - $ret[] = $tmp; - } - else { - $ioncube_loader_version = ioncube_loader_version(); - if($ioncube_loader_version[0]< 5 && $ioncube_loader_version[1] === '.') { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Die Ioncubeversion ist zu alt (Eine Installation ist trotzdem möglich)'; - $ret[] = $tmp; - } - else{ - $tmp['status'] = 'ok'; - $tmp['text'] = 'Ioncube verfügbar'; - $ret[] = $tmp; - } - } - $typeToMessage['ioncube'] = count($ret) - 1; - $post_max_size = @ini_get('client_max_body_size'); - if($post_max_size == ''){ - $post_max_size = @ini_get('post_max_size'); - } - if(!$post_max_size) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Es war nicht möglich die verfügbare Upload-Kapazität zu ermitteln. Es werden mindestens 8 MB empfohlen'; - $ret[] = $tmp; - } - else{ - if(strpos($post_max_size, 'M') !== false) { - $post_max_size = str_replace('M','', $post_max_size); - $post_max_size *= 1024*1024; - } - elseif(strpos($post_max_size, 'K') !== false) { - $post_max_size = str_replace('K','', $post_max_size); - $post_max_size *= 1024; - } - - if($post_max_size < 8*1024*1024) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Es sind nur '.round($post_max_size/(1024*1024)).' MB Datei-Upload möglich. Empfohlen werden mindestens 8 MB'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'max_upload', - 'warning', - 'Es sind nur '.round($post_max_size/(1024*1024)).' MB Datei-Upload möglich. Empfohlen werden mindestens 8 MB' - ); - } - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Ausreichend Upload-Kapazität verfügbar (>=8MB)'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'max_upload', - 'ok', - 'Ausreichend Upload-Kapazität verfügbar (>=8MB)' - ); - } - } - } - $typeToMessage['max_post_size'] = $post_max_size; - $max_execution_time = @ini_get('fastcgi_read_timeout'); - if($max_execution_time == ''){ - $max_execution_time = @ini_get('max_execution_time'); - } - if(!$max_execution_time) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Es war nicht möglich die verfügbare die Scriptlauftzeit zu ermitteln. Es werden mindestens 30 Sekunden empfohlen'; - $ret[] = $tmp; - } - elseif($max_execution_time < 30) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Es stehen nur '.$max_execution_time.' Sekunden Scriptlauftzeit zur verfügung. Es werden mindestens 30 Sekunden empfohlen'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'max_execution_time', - 'warning', - $tmp['text'] - ); - } - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Es steht genügend Scriptlauftzeit zur Verfügung (>= 30 Sekunden).'; - $ret[] = $tmp; - if(method_exists($this->app->erp, 'setSystemHealth')){ - $this->app->erp->setSystemHealth( - 'server', - 'max_execution_time', - 'ok', - 'Es steht genügend Scriptlauftzeit zur Verfügung (>= 30 Sekunden).' - ); - } - } - $typeToMessage['max_execution_size'] = $max_execution_time; - $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit'); - $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time'); - if($system_cronjob_memory_limit !== '') { - if((int)$system_cronjob_memory_limit <= 0) { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Der Prozessstarter hat genügend Speicher zur Verfügung'; - $ret[] = $tmp; - } - elseif((int)$system_cronjob_memory_limit < 256 * 1024 * 1024) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Es stehen nur '.round($system_cronjob_memory_limit / 1024 / 1024).' MB Arbeitsspeicher für den Prozessstarter zur Verfügung'; - $ret[] = $tmp; - } - else { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Der Prozessstarter hat genügend Speicher zur Verfügung'; - $ret[] = $tmp; - } - } - if($system_cronjob_max_execution_time !== '') { - if((int)$system_cronjob_max_execution_time <= 0) { - $tmp['status'] = 'ok'; - $tmp['text'] = 'Die Prozessstarterlaufzeit ist unbegrenzt'; - $ret[] = $tmp; - } - elseif((int)$system_cronjob_max_execution_time < 300) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden'; - $ret[] = $tmp; - } - else{ - $tmp['status'] = 'ok'; - $tmp['text'] = 'Die Prozessstarterlaufzeit beträgt '.$system_cronjob_max_execution_time.' Sekunden'; - $ret[] = $tmp; - } - } - - - if(PHP_VERSION < 7.2) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Die PHP Version ist unter 7.2. Ab Xentral 20.2 wird mindestens PHP 7.2 benötigt'; - $ret[] = $tmp; - } - if($this->app->DB->GetVersion() < 57) { - $tmp['status'] = 'warning'; - $tmp['text'] = 'Die MySQL Version ist unter 5.7. Ab Xentral 20.2 wird mindestens Mysql 5.7 benötigt'; - $ret[] = $tmp; - } - - $fopenUrlEnabled = ini_get('allow_url_fopen'); - $fopenUrlEnabled = strtolower($fopenUrlEnabled); - if(!in_array($fopenUrlEnabled, ['1', 'true', 'on'])){ - $ret[] = [ - 'status' => 'warning', - 'text' => 'allow_url_fopen ist nicht in der php.ini aktiviert' - ]; - } - - return ['type_to_message' => $typeToMessage ,'messages' => $ret]; - } - - public function SystemlogList() - { - $this->SystemlogMenu(); - $this->app->YUI->TableSearch('TAB1','systemlog','show','','',basename(__FILE__), __CLASS__); - $cli_infos = []; - $system_phpversion_cli = $this->app->erp->GetKonfiguration('system_phpversion_cli'); - if(!empty($system_phpversion_cli)){ - $cli_infos[] = 'CLI-PHP-Version: '.$system_phpversion_cli; - } - $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit'); - if($system_cronjob_memory_limit === '-1' || $system_cronjob_memory_limit === '0') { - $cli_infos[] = 'Memory-Limit: unbegrenzt'; - } - elseif(!empty($system_cronjob_memory_limit)) { - $cli_infos[] = 'Memory-Limit: '.$system_cronjob_memory_limit; - } - $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time'); - if($system_cronjob_max_execution_time === '0') { - $cli_infos[] = 'Max-Execution-Time: unbegrenzt'; - } - elseif(!empty($system_cronjob_max_execution_time)) { - $cli_infos[] = 'Max-Execution-Time: '.$system_cronjob_max_execution_time; - } - $system_cronjob_php_ini_loaded_file = $this->app->erp->GetKonfiguration('system_cronjob_php_ini_loaded_file'); - if(!empty($system_cronjob_php_ini_loaded_file)) { - $cli_infos[] = 'Geladene ini-Datei: '.$system_cronjob_php_ini_loaded_file; - } - $system_cronjob_get_current_user = $this->app->erp->GetKonfiguration('system_cronjob_get_current_user'); - if(!empty($system_cronjob_get_current_user)) { - $cli_infos[] = 'CLI-Benutzer: '.$system_cronjob_get_current_user; - } - $cli_infos[] = 'Xentral-Pfad: '.dirname(dirname(__DIR__)); - - $cli_infos[] = 'Userdata-Pfad: '.$this->app->Conf->WFuserdata; - - $size = (int)$this->app->erp->GetKonfiguration('userdatasize'); - if($size > 0) { - $cli_infos[] = 'Useredata: '.number_format($size,0,',','.') .' MB'; - } - foreach([ - 'dms', - 'pdfarchiv', - 'pdfmirror', - 'tmp', - 'wiki', - 'emailbackup', - 'uebertragung', - ] as $value) { - $size = (int)$this->app->erp->GetKonfiguration('userdata'.$value.'size'); - if($size > 0) { - $cli_infos[] = 'Useredata '.$value.': '.number_format($size,0,',','.') .' MB'; - } - } - $backupsize = (int)$this->app->erp->GetKonfiguration('backupsize'); - if($backupsize > 0) { - $cli_infos[] = 'Backup: '.number_format($backupsize,0,',','.') .' MB'; - } - $databasesize = (int)$this->app->erp->GetKonfiguration('databasesize'); - if($databasesize > 0) { - $cli_infos[] = 'Datenbank: '.number_format($databasesize,0,',','.') .' MB'; - } - $databasesizelog = (int)$this->app->erp->GetKonfiguration('databasesizelog'); - if($databasesizelog > 0) { - $cli_infos[] = 'davon Logeinträge: '.number_format($databasesizelog,0,',','.') .' MB'; - } - - $lastSizeUpdate = $this->app->erp->GetKonfiguration('lastsizeupdate'); - if(!empty($lastSizeUpdate) && strtotime($lastSizeUpdate) > 1) { - $cli_infos[] = 'Letzte Speicherprüfung: '.date('d.m.Y H:i:s',strtotime($lastSizeUpdate)); - } - /** @var Systemhealth $sytemHealth */ - $sytemHealth = $this->app->loadModule('systemhealth'); - $memory = method_exists($sytemHealth, 'getMemory')?$sytemHealth->getMemory():[]; - if(!empty($memory['memory'])) { - $cli_infos[] = 'Arbeitssteicher: '.number_format($memory['memory']['sum'] / 1024,0,',','.') .' MB ('. - number_format($memory['memory']['free'] / 1024,0,',','.').' MB frei)'; - } - if(!empty($memory['swap'])) { - $cli_infos[] = 'Swap: '.number_format($memory['swap']['sum'] / 1024,0,',','.') .' MB ('. - number_format($memory['swap']['free'] / 1024,0,',','.').' MB frei)'; - } - - if(!empty($cli_infos)) { - $this->app->Tpl->Add('TAB3','
'.implode('
',$cli_infos).'
'); - } - $system_cronjob_phpinfo = $this->app->erp->GetKonfiguration('system_cronjob_phpinfo'); - if(!empty($system_cronjob_phpinfo)) { - $this->app->Tpl->Add('TAB3','
PHP-Info
');
-      $this->app->Tpl->Add('TAB3',$system_cronjob_phpinfo);
-      $this->app->Tpl->Add('TAB3','
'); - } - - ob_start(); - phpinfo(); - $phpinfo = ob_get_clean(); - - $phpinfo = explode('',$phpinfo,2); - $phpinfo = $phpinfo[1]; - $phpinfo = explode('', $phpinfo); - $phpinfo = reset($phpinfo); - $this->app->Tpl->Add('TAB2',''); - $this->app->YUI->CkEditor('phpinfo','none',array('height'=>'500px')); - - $ret = $this->getCompatibilities(); - - foreach($ret['messages'] as $Message) { - $this->app->Tpl->Add( - 'TAB4', - '
'.$Message['text']."
\r\n" - ); - } - - $this->app->Tpl->Parse('PAGE','systemlog_list.tpl'); - } - - public function SystemlogMenu() - { - $this->app->erp->Headlines('Systemlog'); - $this->app->erp->MenuEintrag('index.php?module=servicetools&action=list','Zurück zur Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=systemlog&action=list','Aktualisieren'); - $this->app->erp->MenuEintrag('index.php?module=systemlog&action=datenbank','Datenbank prüfen'); - } - - public function Install() { - $this->app->erp->CheckTable('systemlog'); - $this->app->erp->CheckColumn('id','int(11)','systemlog','NOT NULL AUTO_INCREMENT'); - $this->app->erp->CheckColumn('meldung','TEXT','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('dump','TEXT','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('module','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('action','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('bearbeiter','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('funktionsname','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('datum','DATETIME','systemlog'); - $this->app->erp->CheckColumn('parameter','int(11)','systemlog','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('argumente','TEXT','systemlog','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('level','int(11)','systemlog','DEFAULT 0 NOT NULL'); - - $this->app->erp->RegisterHook('systemhealth_cronjob', 'systemlog', 'SystemhealthCronjob'); - } - - public function SystemhealthCronjob() - { - $this->testDatabase(); - - $this->getCompatibilities(); - } - - /** - * @param string $meldung - * @param int $level - * @param string $dump - * @param string $module - * @param string $action - * @param string $functionname - * - * @return int|string|null - */ - public function addSystemLog($meldung='',$level=0,$dump='',$module='',$action='',$functionname='') - { - $isSecure = isset($this->app->Secure); - if($module=='' && $isSecure) { - $module = (string)$this->app->Secure->GetGET('module'); - } - if($action=='' && $isSecure) { - $action = (string)$this->app->Secure->GetGET('action'); - } - $id = 0; - if($isSecure){ - $id = $this->app->Secure->GetGET('id'); - } - - $argumente = ''; - if($functionname=='') { - if (strnatcmp(phpversion(),'5.0.0') >= 0) { - $backtrace = debug_backtrace(); - $functionname = $backtrace[1]['function']; - if($functionname!=='Run'){ - $argumente = base64_encode(print_r($backtrace[1]['args'], true)); - } - } - } - - $this->app->DB->Insert( - sprintf( - "INSERT INTO `systemlog` (`module`, `action`, `meldung`, `dump`, `datum`, `bearbeiter`, - `funktionsname`, `parameter`, `argumente`, `level`) - VALUES ('%s','%s','%s','%s',NOW(), '%s', '%s',%d,'%s',%d)", - $module,$action, $meldung, $dump, isset($this->app->User)?$this->app->User->GetName():'', - $this->app->DB->real_escape_string($functionname), $id, $argumente, $level - ) - ); - - return $this->app->DB->GetInsertID(); - } -} +app=$app; + if($intern) + { + return; + } + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("list","SystemlogList"); + $this->app->ActionHandler("minidetail","SystemlogMiniDetail"); + $this->app->ActionHandler("datenbank","SystemlogDatenbank"); + $this->app->ActionHandler("timeout","SystemlogTimeout"); + //$this->app->ActionHandler("delete","SystemlogDelete"); + //$this->app->ActionHandler("deleteall","SystemlogDeleteAll"); + + $this->app->DefaultActionHandler("list"); + + $this->app->ActionHandlerListen($app); + } + /* + function SystemlogDelete() + { + $id = $this->app->Secure->GetGET("id"); + $this->app->DB->Delete("DELETE FROM systemlog WHERE id='$id' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
Der Logeintrag wurde gelöscht!
"); + header("Location: index.php?module=systemlog&action=list&msg=$msg"); + exit; + } + */ + /* + function SystemlogDeleteAll() + { + $id = $this->app->Secure->GetGET("id"); + $this->app->DB->Delete("DELETE FROM systemlog WHERE id > 0"); + $msg = $this->app->erp->base64_url_encode("
Alle Logeinträge wurden wurden gelöscht!
"); + header("Location: index.php?module=systemlog&action=list&msg=$msg"); + exit; + } + */ + + /** + * @param Application $app + * @param string $name + * @param array $erlaubtevars + * + * @return array + */ + public function TableSearch($app, $name, $erlaubtevars) + { + // in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul + switch($name) { + case 'systemlog': + $allowed['systemlog'] = array('list'); + + // headings + $heading = array('', 'Level', 'Zeit', 'Bearbeiter', 'Module', 'Action', 'Parameter', 'Funktion', 'Meldung', 'Menü'); + $width = array('4%', '4%', '15%', '10%', '10%', '10%', '10%', '10%', '40%', '10%', '5%'); + $findcols = array('open', 'a.level', 'a.datum', 'a.bearbeiter', 'a.module', 'a.action', 'a.parameter', 'a.funktionsname', 'a.meldung', 'a.id'); + $searchsql = array("DATE_FORMAT(a.datum,'%d.%m.%Y %H:%i:%s')", 'a.bearbeiter', 'a.module', 'a.meldung', 'a.action', 'a.parameter', 'a.funktionsname'); + $defaultorder = 3; + $defaultorderdesc = 1; + $menucol = 1; + $moreinfo = true; + $menu = "
" . + "
"; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, a.level,DATE_FORMAT(a.datum,'%d.%m.%Y %H:%i:%s'), a.bearbeiter, + a.module, a.action, a.parameter, a.funktionsname,a.meldung,CONCAT('module=',a.module,'&action=',a.action,'&id=',a.parameter) FROM systemlog a"; + + $count = 'SELECT COUNT(a.id) FROM systemlog a'; + break; + } + $erg = []; + + foreach($erlaubtevars as $k => $v) { + if(isset($$v)) { + $erg[$v] = $$v; + } + } + return $erg; + } + + /** + * @return array + */ + public function testDatabase() + { + $ret = ['html' => [],'deleteformdata' => []]; + foreach($this->dataBaseLinkings() as $verknuepfung) { + $verknuepfung[4] = 'delete'; + $tabelle = $verknuepfung[0]; + $spalte = $verknuepfung[1]; + $subtabelle = $verknuepfung[2]; + $subspalte = $verknuepfung[3]; + $subwhere = ''; + if(isset($verknuepfung[5]) && $verknuepfung[5] != '' && isset($verknuepfung[6]) && $verknuepfung[6] != ''){ + $subwhere = ' AND s.'.$verknuepfung[5]." = '".$verknuepfung[6]."' "; + } + if(isset($verknuepfung[7])) { + $subwhere .= $verknuepfung[7]; + } + $check = $this->app->DB->Select( + "SELECT s.`$subspalte` + FROM `$subtabelle` s + LEFT JOIN `$tabelle` t ON s.`$subspalte` = t.`$spalte` + WHERE isnull(t.`$spalte`) AND s.`$subspalte` <> 0 AND not isnull(s.`$subspalte`) $subwhere + LIMIT 1" + ); + if($check) { + $aktion = ''; + if(isset($verknuepfung[4]) && $verknuepfung[4] === 'delete') { + $aktion = '
+ + + + + +
'; + $warnung = true; + $ret['deleteformdata'][] = [ + 'tabelle'=>$tabelle, + 'spalte' => $spalte, + 'subtabelle' => $subtabelle, + 'subspalte'=>$subspalte, + ]; + } + $ret['html'][] = ''.$subtabelle.'.'.$subspalte.''.$tabelle.'.'.$spalte.'-Einträge mit nicht existierender '.$tabelle.'.'.$spalte.' gefunden'.$aktion.''; + $ret['warning'] = true; + } + else{ + if(!$this->app->DB->error()) { + $ret['html'][] = ''.$subtabelle.'.'.$subspalte.''.$tabelle.'.'.$spalte.'OK'; + } + } + } + + if(!empty($ret['warning']) && method_exists($this->app->erp, 'setSystemHealth')) { + $this->app->erp->setSystemHealth( + 'database', + 'sql_integrity', + 'warning', + 'Einträge mit nicht existierender Verknüpfungen gefunden.' + ); + } + else { + if(method_exists($this->app->erp, 'setSystemHealth')) { + $this->app->erp->setSystemHealth( + 'database', + 'sql_integrity', + 'ok', + '' + ); + } + } + + return $ret; + } + + /** + * @return array + */ + public function dataBaseLinkings() + { + return array( + array('adresse','id','adresse_accounts','adresse','delete'), + array('adresse','id','adresse_kontakte','adresse','delete'), + array('adresse','id','lieferadressen','adresse','delete'), + array('adresse','id','ansprechpartner','adresse','delete'), + array('adresse','id','abrechnungsartikel','adresse'), + array('artikel','id','abrechnungsartikel','artikel'), + //array('adresse','id','dokumente','adresse_from'), + array('adresse','id','dokumente','adresse_to'), + array('adresse','id','dokumente_send','adresse'), + array('artikel','id','einkaufspreise','artikel'), + array('adresse','id','einkaufspreise','adresse'), + array('artikel','id','verkaufspreise','artikel'), + array('drucker','id','drucker_spooler','drucker'), + array('datei','id','datei_version','datei'), + array('datei','id','datei_stichwoerter','datei'), + array('adresse','id','user','adresse'), + array('projekt','id','arbeitspaket','projekt'), + array('lager','id','lager_platz','lager'), + array('lager_platz','id','lager_platz_inhalt','lager_platz'), + array('artikel','id','lager_reserviert','artikel','delete'), + array('adresse','id','lager_reserviert','adresse'), + array('artikel','id','lager_seriennummern','artikel','delete'), + array('artikel','id','lager_platz_inhalt','artikel','delete'), + array('artikel','id','lager_mindesthaltbarkeitsdatum','artikel'), + array('lager_platz','id','lager_mindesthaltbarkeitsdatum','lager_platz'), + array('artikel','id','artikel','variante_von'), + array('artikel','id','stueckliste','stuecklistevonartikel'), + array('artikel','id','stueckliste','artikel'), + array('rechnung','id','rechnung_position','rechnung','delete'), + array('rechnung','id','rechnung_protokoll','rechnung','delete'), + array('auftrag','id','auftrag_position','auftrag','delete'), + array('auftrag','id','auftrag_protokoll','auftrag','delete'), + array('angebot','id','angebot_position','angebot','delete'), + array('angebot','id','angebot_protokoll','angebot','delete'), + array('gutschrift','id','gutschrift_position','gutschrift','delete'), + array('gutschrift','id','gutschrift_protokoll','gutschrift','delete'), + array('bestellung','id','bestellung_position','bestellung','delete'), + array('bestellung','id','bestellung_protokoll','bestellung','delete'), + array('produktion','id','produktion_position','produktion','delete'), + array('produktion','id','produktion_protokoll','produktion','delete'), + array('inventur','id','inventur_position','inventur','delete'), + array('inventur','id','inventur_protokoll','inventur','delete'), + array('adresse','id','rechnung','adresse'), + array('adresse','id','lieferschein','adresse'), + array('adresse','id','gutschrift','adresse'), + array('adresse','id','auftrag','adresse'), + array('adresse','id','angebot','adresse'), + array('adresse','id','bestellung','adresse'), + array('adresse','id','produktion','adresse'), + array('adresse','id','inventur','adresse'), + array('artikel','id','produktion_position','artikel'), + array('artikel','id','rechnung_position','artikel'), + array('artikel','id','auftrag_position','artikel'), + array('artikel','id','lieferschein_position','artikel'), + array('artikel','id','gutschrift_position','artikel'), + array('artikel','id','bestellung_position','artikel'), + array('artikel','id','angebot_position','artikel'), + array('rechnung','id','pdfarchiv','table_id','delete','table_name','rechnung'), + array('auftrag','id','pdfarchiv','table_id','delete','table_name','auftrag'), + array('angebot','id','pdfarchiv','table_id','delete','table_name','angebot'), + array('gutschrift','id','pdfarchiv','table_id','delete','table_name','gutschrift'), + array('bestellung','id','pdfarchiv','table_id','delete','table_name','bestellung'), + array('lieferschein','id','pdfarchiv','table_id','delete','table_name','lieferschein'), + array('produktion','id','pdfarchiv','table_id','delete','table_name','produktion'), + array('rechnung','id','pdfmirror_md5pool','table_id','delete','table_name','rechnung'), + array('auftrag','id','pdfmirror_md5pool','table_id','delete','table_name','auftrag'), + array('angebot','id','pdfmirror_md5pool','table_id','delete','table_name','angebot'), + array('gutschrift','id','pdfmirror_md5pool','table_id','delete','table_name','gutschrift'), + array('bestellung','id','pdfmirror_md5pool','table_id','delete','table_name','bestellung'), + array('lieferschein','id','pdfmirror_md5pool','table_id','delete','table_name','lieferschein'), + array('produktion','id','pdfmirror_md5pool','table_id','delete','table_name','auftrag'), + array('auftrag','id','beleg_chargesnmhd','doctypeid','delete','doctype','auftrag'), + array('angebot','id','beleg_chargesnmhd','doctypeid','delete','doctype','angebot'), + array('gutschrift','id','beleg_chargesnmhd','doctypeid','delete','doctype','gutschrift'), + array('lieferschein','id','beleg_chargesnmhd','doctypeid','delete','doctype','lieferschein'), + array('rechnung','id','beleg_chargesnmhd','doctypeid','delete','doctype','rechnung'), + array('bestellung','id','beleg_chargesnmhd','doctypeid','delete','doctype','bestellung') + ); + } + + /** + * @param string $table + * @param string $column + * @param string $subTable + * @param string $subColumn + * + * @return int + */ + public function deleteTableEntries($table, $column, $subTable, $subColumn) + { + $ret = 0; + if(empty($table) || empty($column) || empty($subColumn) || empty($subTable)) { + return 0; + } + + $linkinSchemas = $this->dataBaseLinkings(); + foreach ($linkinSchemas as $linkinSchema) { + $linkinSchema[4] = 'delete'; + if( + $table == $linkinSchema[0] + && $column == $linkinSchema[1] + && $subTable == $linkinSchema[2] + && $subColumn == $linkinSchema[3] + && !empty($linkinSchema[4]) + && $linkinSchema[4] === 'delete' + ) { + $subwhere = ''; + if(!empty($linkinSchema[5]) && $linkinSchema[5] != '' && isset($linkinSchema[6]) && $linkinSchema[6] != '') { + $subwhere = ' AND s.' . $linkinSchema[5] . " = '" . $linkinSchema[6] . "' "; + } + if(!empty($linkinSchema[7])){ + $subwhere .= $linkinSchema[7]; + } + $this->app->DB->Delete( + "DELETE `s` + FROM `$subTable` AS `s` + LEFT JOIN `$table` `t` ON s.`$subColumn` = t.`$column` + WHERE isnull(t.`$column`) AND s.`$subColumn` <> 0 AND not isnull(s.`$subColumn`) $subwhere" + ); + $anz = (int)$this->app->DB->affected_rows(); + if($anz <= 0) { + continue; + } + $ret += $anz; + } + } + + return $ret; + } + + public function SystemlogDatenbank() + { + if($this->app->Secure->GetPOST('cleanconfirm') && $this->app->Secure->GetPOST('cleanall')) { + $test = $this->testDatabase(); + $message = '
Keine Datenintegrietätsprobleme gefunden
'; + if(!empty($test['warning']) && !empty($test['deleteformdata'])) { + $sum = 0; + foreach($test['deleteformdata'] as $formdata) { + $anz = $this->deleteTableEntries( + $formdata['tabelle'], $formdata['spalte'], $formdata['subtabelle'], $formdata['subspalte'] + ); + if($anz > 0) { + $sum += $anz; + } + } + //$anz = $this->deleteTableEntries($tabelle, $spalte, $subtabelle, $subspalte); + $test = $this->testDatabase(); + if(empty($test['warning'])) { + $message = sprintf('
Es wurden %d Datensätze gelöscht
', $sum); + } + else { + $message = sprintf('
Es wurden %d Datensätze gelöscht. + Es konnten nicht alle Datenintegrietätsprobleme gelöst werden
', $sum); + } + } + + $this->app->Location->execute( + 'index.php?module=systemlog&action=datenbank&msg='.$this->app->erp->base64_url_encode($message) + ); + } + $this->SystemlogMenu(); + + $this->app->Tpl->Add( + 'MESSAGE', + '
+
+ In dieser Übersicht können Sie die Datenintegrität von Xentral überprüfen.
+ Für weitere Informationen lesen Sie bitte im Handbuch nach. + +
+
' + ); + + if($this->app->Secure->GetPOST('delete')) { + $tabelle = $this->app->Secure->GetPOST('tabelle'); + $spalte = $this->app->Secure->GetPOST('spalte'); + $subtabelle = $this->app->Secure->GetPOST('subtabelle'); + $subspalte = $this->app->Secure->GetPOST('subspalte'); + $anz = $this->deleteTableEntries($tabelle, $spalte, $subtabelle, $subspalte); + if($anz > 0) { + $this->app->Tpl->Add( + 'MESSAGE', + '
'.$anz.' Einträge gelöscht
' + ); + $this->SystemlogShowResultTable(); + } + } + + if($this->app->Secure->GetPOST('testen')) { + $this->SystemlogShowResultTable(); + } + + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + public function SystemlogShowResultTable(){ + $test = $this->testDatabase(); + + $warnung = false; + if(!empty($test)) { + $this->app->Tpl->Add( + 'TAB1', + ' + ' + ); + foreach($test['html'] as $row) { + $this->app->Tpl->Add('TAB1', $row); + } + $warnung = !empty($test['warning']); + } + + if($warnung) { + $this->app->Tpl->Add( + 'MESSAGE', + '
+ Vor dem Löschen ist es dringend empfohlen ein Backup der Datenbank zu machen. +
+ + +
' + ); + } + $this->app->Tpl->Add('TAB1','
Tabelle vonzuStatusBeschreibungAktion
'); + } + + public function SystemlogMiniDetail() + { + $id = (int)$this->app->Secure->GetGET('id'); + $dump = $id <= 0?null:$this->app->DB->SelectRow( + sprintf( + 'SELECT `argumente`, `funktionsname`, `dump` FROM `systemlog` WHERE `id` = %d LIMIT 1', + $id + ) + ); + if(empty($dump)) { + $this->app->ExitXentral(); + } + echo '
Argumente der Funktion '.$dump['funktionsname']
+      .':

'.base64_decode($dump['argumente']) + .'
'; + echo '

Dump:'.$dump['dump'].'
'; + + $this->app->ExitXentral(); + } + + public function SystemlogTimeout() + { + $cmd = $this->app->Secure->GetGET('cmd'); + + if(is_numeric($cmd) && (int)$cmd > 0) { + usleep((int)$cmd * 1000000); + } + echo 'Erfolgreich durchgelaufen!'; + $this->app->ExitXentral(); + } + + /** + * @param string $name + * + * @return bool + */ + public function hasExectuableExtension($name) { + if (!function_exists('exec')) { + throw new Exception('Required Function exec is missing'); + } + if (!is_string($name)) { + return false; + } + exec(sprintf('whereis %s',$name), $out); + if (empty($out)) { + return false; + } + $result = $out[0]; + $resultExploded = explode(':', $result); + array_shift($resultExploded); + return !empty(trim(implode("",$resultExploded))); + } + + /** + * @return bool + */ + public function isTls12Available(): bool + { +/* $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, self::TLS_TEST_URL); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt ($ch, CURLOPT_SSLVERSION, 6); + curl_exec($ch); + $curlInfo = curl_getinfo($ch); + curl_close($ch); + + return (int)$curlInfo['http_code'] !== 0; +*/ + return(false); + } + + /** + * @return array + */ + public function getCompatibilities() + { + $ret = []; + $typeToMessage = []; + if(!function_exists('fsockopen')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'fsocket nicht installiert!'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'fsocket verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['fsocket'] = count($ret) - 1; + if(!function_exists('mysqli_connect')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'MYSQLi nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'MYSQLi verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['mysqli'] = count($ret) - 1; + if(!extension_loaded('mysqlnd')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'Mysqlnd nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Mysqlnd verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['mysqlnd'] = count($ret) - 1; + if(!class_exists('\PDO')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'PDO nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'PDO verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['pdo'] = count($ret) - 1; + if(!function_exists('curl_init')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'cURL nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'cURL verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['curl'] = count($ret) - 1; + if(!function_exists('stream_socket_enable_crypto')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'stream_socket_enable_crypto nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'stream_socket_enable_crypto verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['crypto'] = count($ret) - 1; + if(!function_exists('openssl_error_string')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'OpenSSL nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'OpenSSL verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['openssl'] = count($ret) - 1; + if(!function_exists('mb_encode_numericentity')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'php-mbstring nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'php-mbstring verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-mbstring'] = count($ret) - 1; + if(!class_exists('SoapClient')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'php-soap nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'php-soap verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-soap'] = count($ret) - 1; + if(!function_exists('imap_open')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'imap nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'imap verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['imap'] = count($ret) - 1; + if(!function_exists('simplexml_load_string')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'php-xml nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'php-xml verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-xml'] = count($ret) - 1; + if(!class_exists('ZipArchive')) { + $tmp['status'] = 'error'; + $tmp['text'] = 'php-zip nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'php-zip verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-zip'] = count($ret) - 1; + try { + $hasZip = $this->hasExectuableExtension('zip'); + } + catch(Exception $e) { + $hasZip = false; + } + + if(!$hasZip) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Binary Zip-extension für Kommandozeilen nicht installiert'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'extension_zip', + 'warning', + 'nicht installiert. Backups können nicht erstellt werden' + ); + } + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Binary Zip-extension für Kommandozeilen verfügbar'; + $ret[] = $tmp; + if(!empty($_GET) && method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'extension_zip', + 'ok', + 'installiert.' + ); + } + } + $typeToMessage['extension-zip'] = count($ret) - 1; + + if(!function_exists('imagejpeg')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'PHP GD-Erweiterung nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'PHP GD-Erweiterung verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-gd'] = count($ret) - 1; + if(!function_exists('ldap_connect')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'PHP LDAP-Erweiterung nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'PHP LDAP-Erweiterung verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['php-ldap'] = count($ret) - 1; + if(!function_exists('ssh2_connect')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'PHP SSH2-Erweiterung nicht installiert'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'PHP SSH2-Erweiterung verfügbar'; + $ret[] = $tmp; + } + $typeToMessage['tls1-2'] = count($ret) - 1; + if(!$this->isTls12Available()) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'TLS 1.2 ist nicht verfügbar'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'tls1-2', + 'warning', + 'TLS 1.2 ist nicht verfügbar' + ); + } + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'TLS 1.2 ist verfügbar'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'tls1-2', + 'ok', + 'TLS 1.2 ist verfügbar' + ); + } + } + $typeToMessage['php-ssh2'] = count($ret) - 1; + if(!function_exists('ioncube_loader_version')) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Ioncube ist nicht installiert (Eine Installation ist trotzdem möglich)'; + $ret[] = $tmp; + } + else { + $ioncube_loader_version = ioncube_loader_version(); + if($ioncube_loader_version[0]< 5 && $ioncube_loader_version[1] === '.') { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Die Ioncubeversion ist zu alt (Eine Installation ist trotzdem möglich)'; + $ret[] = $tmp; + } + else{ + $tmp['status'] = 'ok'; + $tmp['text'] = 'Ioncube verfügbar'; + $ret[] = $tmp; + } + } + $typeToMessage['ioncube'] = count($ret) - 1; + $post_max_size = @ini_get('client_max_body_size'); + if($post_max_size == ''){ + $post_max_size = @ini_get('post_max_size'); + } + if(!$post_max_size) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Es war nicht möglich die verfügbare Upload-Kapazität zu ermitteln. Es werden mindestens 8 MB empfohlen'; + $ret[] = $tmp; + } + else{ + if(strpos($post_max_size, 'M') !== false) { + $post_max_size = str_replace('M','', $post_max_size); + $post_max_size *= 1024*1024; + } + elseif(strpos($post_max_size, 'K') !== false) { + $post_max_size = str_replace('K','', $post_max_size); + $post_max_size *= 1024; + } + + if($post_max_size < 8*1024*1024) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Es sind nur '.round($post_max_size/(1024*1024)).' MB Datei-Upload möglich. Empfohlen werden mindestens 8 MB'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'max_upload', + 'warning', + 'Es sind nur '.round($post_max_size/(1024*1024)).' MB Datei-Upload möglich. Empfohlen werden mindestens 8 MB' + ); + } + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Ausreichend Upload-Kapazität verfügbar (>=8MB)'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'max_upload', + 'ok', + 'Ausreichend Upload-Kapazität verfügbar (>=8MB)' + ); + } + } + } + $typeToMessage['max_post_size'] = $post_max_size; + $max_execution_time = @ini_get('fastcgi_read_timeout'); + if($max_execution_time == ''){ + $max_execution_time = @ini_get('max_execution_time'); + } + if(!$max_execution_time) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Es war nicht möglich die verfügbare die Scriptlauftzeit zu ermitteln. Es werden mindestens 30 Sekunden empfohlen'; + $ret[] = $tmp; + } + elseif($max_execution_time < 30) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Es stehen nur '.$max_execution_time.' Sekunden Scriptlauftzeit zur verfügung. Es werden mindestens 30 Sekunden empfohlen'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'max_execution_time', + 'warning', + $tmp['text'] + ); + } + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Es steht genügend Scriptlauftzeit zur Verfügung (>= 30 Sekunden).'; + $ret[] = $tmp; + if(method_exists($this->app->erp, 'setSystemHealth')){ + $this->app->erp->setSystemHealth( + 'server', + 'max_execution_time', + 'ok', + 'Es steht genügend Scriptlauftzeit zur Verfügung (>= 30 Sekunden).' + ); + } + } + $typeToMessage['max_execution_size'] = $max_execution_time; + $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit'); + $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time'); + if($system_cronjob_memory_limit !== '') { + if((int)$system_cronjob_memory_limit <= 0) { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Der Prozessstarter hat genügend Speicher zur Verfügung'; + $ret[] = $tmp; + } + elseif((int)$system_cronjob_memory_limit < 256 * 1024 * 1024) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Es stehen nur '.round($system_cronjob_memory_limit / 1024 / 1024).' MB Arbeitsspeicher für den Prozessstarter zur Verfügung'; + $ret[] = $tmp; + } + else { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Der Prozessstarter hat genügend Speicher zur Verfügung'; + $ret[] = $tmp; + } + } + if($system_cronjob_max_execution_time !== '') { + if((int)$system_cronjob_max_execution_time <= 0) { + $tmp['status'] = 'ok'; + $tmp['text'] = 'Die Prozessstarterlaufzeit ist unbegrenzt'; + $ret[] = $tmp; + } + elseif((int)$system_cronjob_max_execution_time < 300) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden'; + $ret[] = $tmp; + } + else{ + $tmp['status'] = 'ok'; + $tmp['text'] = 'Die Prozessstarterlaufzeit beträgt '.$system_cronjob_max_execution_time.' Sekunden'; + $ret[] = $tmp; + } + } + + + if(PHP_VERSION < 7.2) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Die PHP Version ist unter 7.2. Ab Xentral 20.2 wird mindestens PHP 7.2 benötigt'; + $ret[] = $tmp; + } + if($this->app->DB->GetVersion() < 57) { + $tmp['status'] = 'warning'; + $tmp['text'] = 'Die MySQL Version ist unter 5.7. Ab Xentral 20.2 wird mindestens Mysql 5.7 benötigt'; + $ret[] = $tmp; + } + + $fopenUrlEnabled = ini_get('allow_url_fopen'); + $fopenUrlEnabled = strtolower($fopenUrlEnabled); + if(!in_array($fopenUrlEnabled, ['1', 'true', 'on'])){ + $ret[] = [ + 'status' => 'warning', + 'text' => 'allow_url_fopen ist nicht in der php.ini aktiviert' + ]; + } + + return ['type_to_message' => $typeToMessage ,'messages' => $ret]; + } + + public function SystemlogList() + { + $this->SystemlogMenu(); + $this->app->YUI->TableSearch('TAB1','systemlog','show','','',basename(__FILE__), __CLASS__); + $cli_infos = []; + $system_phpversion_cli = $this->app->erp->GetKonfiguration('system_phpversion_cli'); + if(!empty($system_phpversion_cli)){ + $cli_infos[] = 'CLI-PHP-Version: '.$system_phpversion_cli; + } + $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit'); + if($system_cronjob_memory_limit === '-1' || $system_cronjob_memory_limit === '0') { + $cli_infos[] = 'Memory-Limit: unbegrenzt'; + } + elseif(!empty($system_cronjob_memory_limit)) { + $cli_infos[] = 'Memory-Limit: '.$system_cronjob_memory_limit; + } + $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time'); + if($system_cronjob_max_execution_time === '0') { + $cli_infos[] = 'Max-Execution-Time: unbegrenzt'; + } + elseif(!empty($system_cronjob_max_execution_time)) { + $cli_infos[] = 'Max-Execution-Time: '.$system_cronjob_max_execution_time; + } + $system_cronjob_php_ini_loaded_file = $this->app->erp->GetKonfiguration('system_cronjob_php_ini_loaded_file'); + if(!empty($system_cronjob_php_ini_loaded_file)) { + $cli_infos[] = 'Geladene ini-Datei: '.$system_cronjob_php_ini_loaded_file; + } + $system_cronjob_get_current_user = $this->app->erp->GetKonfiguration('system_cronjob_get_current_user'); + if(!empty($system_cronjob_get_current_user)) { + $cli_infos[] = 'CLI-Benutzer: '.$system_cronjob_get_current_user; + } + $cli_infos[] = 'Xentral-Pfad: '.dirname(dirname(__DIR__)); + + $cli_infos[] = 'Userdata-Pfad: '.$this->app->Conf->WFuserdata; + + $size = (int)$this->app->erp->GetKonfiguration('userdatasize'); + if($size > 0) { + $cli_infos[] = 'Useredata: '.number_format($size,0,',','.') .' MB'; + } + foreach([ + 'dms', + 'pdfarchiv', + 'pdfmirror', + 'tmp', + 'wiki', + 'emailbackup', + 'uebertragung', + ] as $value) { + $size = (int)$this->app->erp->GetKonfiguration('userdata'.$value.'size'); + if($size > 0) { + $cli_infos[] = 'Useredata '.$value.': '.number_format($size,0,',','.') .' MB'; + } + } + $backupsize = (int)$this->app->erp->GetKonfiguration('backupsize'); + if($backupsize > 0) { + $cli_infos[] = 'Backup: '.number_format($backupsize,0,',','.') .' MB'; + } + $databasesize = (int)$this->app->erp->GetKonfiguration('databasesize'); + if($databasesize > 0) { + $cli_infos[] = 'Datenbank: '.number_format($databasesize,0,',','.') .' MB'; + } + $databasesizelog = (int)$this->app->erp->GetKonfiguration('databasesizelog'); + if($databasesizelog > 0) { + $cli_infos[] = 'davon Logeinträge: '.number_format($databasesizelog,0,',','.') .' MB'; + } + + $lastSizeUpdate = $this->app->erp->GetKonfiguration('lastsizeupdate'); + if(!empty($lastSizeUpdate) && strtotime($lastSizeUpdate) > 1) { + $cli_infos[] = 'Letzte Speicherprüfung: '.date('d.m.Y H:i:s',strtotime($lastSizeUpdate)); + } + /** @var Systemhealth $sytemHealth */ + $sytemHealth = $this->app->loadModule('systemhealth'); + $memory = method_exists($sytemHealth, 'getMemory')?$sytemHealth->getMemory():[]; + if(!empty($memory['memory'])) { + $cli_infos[] = 'Arbeitssteicher: '.number_format($memory['memory']['sum'] / 1024,0,',','.') .' MB ('. + number_format($memory['memory']['free'] / 1024,0,',','.').' MB frei)'; + } + if(!empty($memory['swap'])) { + $cli_infos[] = 'Swap: '.number_format($memory['swap']['sum'] / 1024,0,',','.') .' MB ('. + number_format($memory['swap']['free'] / 1024,0,',','.').' MB frei)'; + } + + if(!empty($cli_infos)) { + $this->app->Tpl->Add('TAB3','
'.implode('
',$cli_infos).'
'); + } + $system_cronjob_phpinfo = $this->app->erp->GetKonfiguration('system_cronjob_phpinfo'); + if(!empty($system_cronjob_phpinfo)) { + $this->app->Tpl->Add('TAB3','
PHP-Info
');
+      $this->app->Tpl->Add('TAB3',$system_cronjob_phpinfo);
+      $this->app->Tpl->Add('TAB3','
'); + } + + ob_start(); + phpinfo(); + $phpinfo = ob_get_clean(); + + $phpinfo = explode('',$phpinfo,2); + $phpinfo = $phpinfo[1]; + $phpinfo = explode('', $phpinfo); + $phpinfo = reset($phpinfo); + $this->app->Tpl->Add('TAB2',''); + $this->app->YUI->CkEditor('phpinfo','none',array('height'=>'500px')); + + $ret = $this->getCompatibilities(); + + foreach($ret['messages'] as $Message) { + $this->app->Tpl->Add( + 'TAB4', + '
'.$Message['text']."
\r\n" + ); + } + + $this->app->Tpl->Parse('PAGE','systemlog_list.tpl'); + } + + public function SystemlogMenu() + { + $this->app->erp->Headlines('Systemlog'); + $this->app->erp->MenuEintrag('index.php?module=servicetools&action=list','Zurück zur Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=systemlog&action=list','Aktualisieren'); + $this->app->erp->MenuEintrag('index.php?module=systemlog&action=datenbank','Datenbank prüfen'); + } + + public function Install() { + $this->app->erp->CheckTable('systemlog'); + $this->app->erp->CheckColumn('id','int(11)','systemlog','NOT NULL AUTO_INCREMENT'); + $this->app->erp->CheckColumn('meldung','TEXT','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('dump','TEXT','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('module','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('action','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('bearbeiter','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('funktionsname','VARCHAR(64)','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('datum','DATETIME','systemlog'); + $this->app->erp->CheckColumn('parameter','int(11)','systemlog','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('argumente','TEXT','systemlog','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('level','int(11)','systemlog','DEFAULT 0 NOT NULL'); + + $this->app->erp->RegisterHook('systemhealth_cronjob', 'systemlog', 'SystemhealthCronjob'); + } + + public function SystemhealthCronjob() + { + $this->testDatabase(); + + $this->getCompatibilities(); + } + + /** + * @param string $meldung + * @param int $level + * @param string $dump + * @param string $module + * @param string $action + * @param string $functionname + * + * @return int|string|null + */ + public function addSystemLog($meldung='',$level=0,$dump='',$module='',$action='',$functionname='') + { + $isSecure = isset($this->app->Secure); + if($module=='' && $isSecure) { + $module = (string)$this->app->Secure->GetGET('module'); + } + if($action=='' && $isSecure) { + $action = (string)$this->app->Secure->GetGET('action'); + } + $id = 0; + if($isSecure){ + $id = $this->app->Secure->GetGET('id'); + } + + $argumente = ''; + if($functionname=='') { + if (strnatcmp(phpversion(),'5.0.0') >= 0) { + $backtrace = debug_backtrace(); + $functionname = $backtrace[1]['function']; + if($functionname!=='Run'){ + $argumente = base64_encode(print_r($backtrace[1]['args'], true)); + } + } + } + + $this->app->DB->Insert( + sprintf( + "INSERT INTO `systemlog` (`module`, `action`, `meldung`, `dump`, `datum`, `bearbeiter`, + `funktionsname`, `parameter`, `argumente`, `level`) + VALUES ('%s','%s','%s','%s',NOW(), '%s', '%s',%d,'%s',%d)", + $module,$action, $meldung, $dump, isset($this->app->User)?$this->app->User->GetName():'', + $this->app->DB->real_escape_string($functionname), $id, $argumente, $level + ) + ); + + return $this->app->DB->GetInsertID(); + } +} diff --git a/www/pages/welcome.php b/www/pages/welcome.php index ef43aa3d..891f74b5 100644 --- a/www/pages/welcome.php +++ b/www/pages/welcome.php @@ -165,7 +165,7 @@ class Welcome $this->app->User->GetID(), $this->app->Secure->POST ); - try{ +/* try{ $surveyService->sendToXentral( $surveyId, "https://{$this->app->Conf->updateHost}/sendsurvey.php", @@ -175,7 +175,7 @@ class Welcome } catch (Exception $e) { - } + }*/ } catch(Exception $e) { return new JsonResponse( @@ -840,6 +840,7 @@ $this->app->Tpl->Add('TODOFORUSER',"".$tmp[$i]['aufgabe']. ) ); +/* $result_news = file_get_contents("https://{$this->app->Conf->updateHost}/news.php?version=".$this->app->erp->Version(),0, $ctx); if($result_news=='') @@ -851,10 +852,11 @@ $this->app->Tpl->Add('TODOFORUSER',"".$tmp[$i]['aufgabe']. Neues von Xentral '; } - - $this->app->Tpl->Set('EXTERNALNEWS', $result_news); +*/ + +/* $result_handbook = file_get_contents('https://xentral.biz/handbook.php?version='.$this->app->erp->Version(),0, $ctx); if($result_handbook=='') { @@ -867,6 +869,7 @@ $this->app->Tpl->Add('TODOFORUSER',"".$tmp[$i]['aufgabe']. } $this->app->Tpl->Set('EXTERNALHANDBOOK', $result_handbook); +*/ // Aufgabe-Bearbeiten-Popup $pinnwaende = $this->app->erp->GetPinwandSelect(); @@ -1110,7 +1113,7 @@ $this->app->Tpl->Add('TODOFORUSER',"".$tmp[$i]['aufgabe']. { $version = $this->app->erp->Version(); $revision = $this->app->erp->Revision(); - +/* $tmp = explode('.',$revision); $branch = strtolower($version).'_'.$tmp[0].'.'.$tmp[1]; @@ -1191,6 +1194,7 @@ $this->app->Tpl->Add('TODOFORUSER',"".$tmp[$i]['aufgabe']. } $this->app->erp->RunHook('welcome_news'); $this->app->Tpl->Parse('WELCOMENEWS','welcome_news.tpl'); +*/ } }