From e303914c3962cacd38d09b3d80a51627d1dc4f5c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 16 Apr 2019 09:46:09 +0200 Subject: [statistics] Handle system an mainboard model separately ...especially for BIOS updates checks... --- modules-available/statistics/inc/parser.inc.php | 15 ++++++--- .../statistics/lang/de/template-tags.json | 2 ++ .../statistics/lang/en/template-tags.json | 2 ++ modules-available/statistics/page.inc.php | 38 +++++++++++++--------- .../statistics/templates/machine-main.html | 8 +++-- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/modules-available/statistics/inc/parser.inc.php b/modules-available/statistics/inc/parser.inc.php index 4e0740fc..be9300f4 100644 --- a/modules-available/statistics/inc/parser.inc.php +++ b/modules-available/statistics/inc/parser.inc.php @@ -40,12 +40,19 @@ class Parser { } continue; } - if ($section === 'System Information' || $section === 'Base Board Information') { - if (empty($row['pcmodel']) && preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) { + if ($section === 'Base Board Information') { + if (preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) { + $row['mobomodel'] = $out[1]; + } + if (preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) { + $row['mobomanufacturer'] = $out[1]; + } + } elseif ($section === 'System Information') { + if (preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) { $row['pcmodel'] = $out[1]; } - if (empty($row['manufacturer']) && preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) { - $row['manufacturer'] = $out[1]; + if (preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) { + $row['pcmanufacturer'] = $out[1]; } } elseif ($section === 'Physical Memory Array') { if (!$ramOk && preg_match('/Use: System Memory/i', $line)) { diff --git a/modules-available/statistics/lang/de/template-tags.json b/modules-available/statistics/lang/de/template-tags.json index 7fc90201..24de69df 100644 --- a/modules-available/statistics/lang/de/template-tags.json +++ b/modules-available/statistics/lang/de/template-tags.json @@ -48,6 +48,7 @@ "lang_maximumAbbrev": "Max.", "lang_memFree": "RAM frei (MB)", "lang_memoryStats": "Arbeitsspeicher", + "lang_mobomodel": "Mainboard", "lang_model": "Modell", "lang_modelCount": "Anzahl", "lang_modelName": "Modellname", @@ -64,6 +65,7 @@ "lang_partSize": "Gr\u00f6\u00dfe", "lang_partType": "Typ", "lang_partitionSize": "Gr\u00f6\u00dfe", + "lang_pcmodel": "PC-Modell", "lang_pendingSectors": "Potentiell defekte Sektoren", "lang_powerOnTime": "Betriebszeit", "lang_projector": "Beamer", diff --git a/modules-available/statistics/lang/en/template-tags.json b/modules-available/statistics/lang/en/template-tags.json index 4fb57e72..b06137cf 100644 --- a/modules-available/statistics/lang/en/template-tags.json +++ b/modules-available/statistics/lang/en/template-tags.json @@ -48,6 +48,7 @@ "lang_maximumAbbrev": "max.", "lang_memFree": "RAM free (MB)", "lang_memoryStats": "Memory", + "lang_mobomodel": "Mainboard", "lang_model": "Model", "lang_modelCount": "Count", "lang_modelName": "Model name", @@ -64,6 +65,7 @@ "lang_partSize": "Size", "lang_partType": "Type", "lang_partitionSize": "Size", + "lang_pcmodel": "System model", "lang_pendingSectors": "Sectors pending reallocation", "lang_powerOnTime": "Power on time", "lang_projector": "Projector", diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php index b49115da..c5da85fe 100644 --- a/modules-available/statistics/page.inc.php +++ b/modules-available/statistics/page.inc.php @@ -970,11 +970,13 @@ class Page_Statistics extends Page unset($client['data']); // BIOS update check if (!empty($client['biosrevision'])) { - $model = $client['manufacturer'] . '##' . $client['pcmodel']; - $ret = $this->checkBios($model, $client['biosdate'], $client['biosrevision']); + $mainboard = $client['mobomanufacturer'] . '##' . $client['mobomodel']; + $system = $client['pcmanufacturer'] . '##' . $client['pcmodel']; + $ret = $this->checkBios($mainboard, $system, $client['biosdate'], $client['biosrevision']); if ($ret === false) { // Not loaded, use AJAX $params = [ - 'model' => $model, + 'mainboard' => $mainboard, + 'system' => $system, 'date' => $client['biosdate'], 'revision' => $client['biosrevision'], ]; @@ -1247,10 +1249,11 @@ class Page_Statistics extends Page private function ajaxCheckBios() { - $model = Request::any('model', false, 'string'); + $mainboard = Request::any('mainboard', false, 'string'); + $system = Request::any('system', false, 'string'); $date = Request::any('date', false, 'string'); $revision = Request::any('revision', false, 'string'); - $reply = $this->checkBios($model, $date, $revision); + $reply = $this->checkBios($mainboard, $system, $date, $revision); if ($reply === false) { $data = Download::asString(CONFIG_BIOS_URL, 3, $err); if ($err < 200 || $err >= 300) { @@ -1258,7 +1261,7 @@ class Page_Statistics extends Page } else { file_put_contents(self::BIOS_CACHE, $data); $data = json_decode($data, true); - $reply = $this->checkBios($model, $date, $revision, $data); + $reply = $this->checkBios($mainboard, $system, $date, $revision, $data); } } if ($reply === false) { @@ -1269,7 +1272,7 @@ class Page_Statistics extends Page die(Render::parse('machine-bios-update', $reply)); } - private function checkBios($model, $date, $revision, $json = null) + private function checkBios($mainboard, $system, $date, $revision, $json = null) { if ($json === null) { if (!file_exists(self::BIOS_CACHE) || filemtime(self::BIOS_CACHE) + 3600 < time()) @@ -1278,22 +1281,27 @@ class Page_Statistics extends Page } if (!is_array($json) || !isset($json['system'])) return ['error' => 'Malformed JSON, no system key']; - if (!isset($json['system'][$model]) || !isset($json['system'][$model]['fixes']) || !isset($json['system'][$model]['match'])) + if (isset($json['system'][$system]) && isset($json['system'][$system]['fixes']) && isset($json['system'][$system]['match'])) { + $match =& $json['system'][$system]; + } elseif (isset($json['mainboard'][$mainboard]) && isset($json['mainboard'][$mainboard]['fixes']) && isset($json['mainboard'][$mainboard]['match'])) { + $match =& $json['mainboard'][$mainboard]; + } else { return ['status' => 0]; - $m = $json['system'][$model]['match']; - if ($m === 'revision') { + } + $key = $match['match']; + if ($key === 'revision') { $cmp = function ($item) { $s = explode('.', $item); return $s[0] * 0x10000 + $s[1]; }; $reference = $cmp($revision); - } elseif ($m === 'date') { + } elseif ($key === 'date') { $cmp = function ($item) { $s = explode('.', $item); return $s[2] * 10000 + $s[1] * 100 + $s[0]; }; $reference = $cmp($date); } else { - return ['error' => 'Invalid comparison key: ' . $m]; + return ['error' => 'Invalid comparison key: ' . $key]; } $retval = ['fixes' => []]; $level = 0; - foreach ($json['system'][$model]['fixes'] as $fix) { - if ($cmp($fix[$m]) > $reference) { + foreach ($match['fixes'] as $fix) { + if ($cmp($fix[$key]) > $reference) { class_exists('Dictionary'); // Trigger setup of lang stuff $lang = isset($fix['text'][LANG]) ? LANG : 'en'; $fix['text'] = $fix['text'][$lang]; @@ -1301,7 +1309,7 @@ class Page_Statistics extends Page $level = max($level, $fix['level']); } } - $retval['url'] = $json['system'][$model]['url']; + $retval['url'] = $match['url']; $retval['status'] = $level; if ($level > 5) { $retval['class'] = 'danger'; diff --git a/modules-available/statistics/templates/machine-main.html b/modules-available/statistics/templates/machine-main.html index 960531f6..12f1d4c5 100644 --- a/modules-available/statistics/templates/machine-main.html +++ b/modules-available/statistics/templates/machine-main.html @@ -199,8 +199,12 @@ - {{lang_model}} - {{pcmodel}} ({{manufacturer}}) + {{lang_pcmodel}} + {{pcmodel}} ({{pcmanufacturer}}) + + + {{lang_mobomodel}} + {{mobomodel}} ({{mobomanufacturer}}) {{#biosdate}} -- cgit v1.2.3-55-g7522