' . gettext("PASSED") . ''; $replacements[1] = '' . gettext("FAILED") . ''; $replacements[2] = '' . gettext("Warning") . ''; ksort($patterns); ksort($replacements); return preg_replace($patterns, $replacements, $string); } // Edits smartd.conf file, adds or removes email for failed disk reporting function update_email($email) { /* Bail if an e-mail address is invalid */ if (!empty($email) && (filter_var($email, FILTER_VALIDATE_EMAIL) === false)) { return; } if (!file_exists("/usr/local/etc/smartd.conf") && file_exists("/usr/local/etc/smartd.conf.sample")) { copy("/usr/local/etc/smartd.conf.sample", "/usr/local/etc/smartd.conf"); } // Did they pass an email? if (!empty($email)) { // Put it in the smartd.conf file shell_exec("/usr/bin/sed -i .old " . escapeshellarg("s/^DEVICESCAN.*/DEVICESCAN -H -m {$email}/") . " /usr/local/etc/smartd.conf"); } else { // Remove email flags in smartd.conf shell_exec("/usr/bin/sed -i .old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf"); } } function smartmonctl($action) { global $start_script; shell_exec($start_script . escapeshellarg($action)); } $targetdev = basename($_POST['device']); if (!file_exists('/dev/' . $targetdev)) { echo gettext("Device does not exist, bailing."); return; } $tab_array = array(); $tab_array[0] = array(htmlspecialchars(gettext("Information & Tests")), ($action != 'config'), $_SERVER['PHP_SELF'] . "?action=default"); $tab_array[1] = array(gettext("Config"), ($action == 'config'), $_SERVER['PHP_SELF'] . "?action=config"); display_top_tabs($tab_array); $specplatform = system_identify_specific_platform(); if ($specplatform['name'] == "Hyper-V") { echo gettext("S.M.A.R.T. is not supported in Hyper-V guests."); include("foot.inc"); exit; } switch ($action) { // Testing devices case 'test': { $test = $_POST['testType']; if (!in_array($test, $valid_test_types)) { echo gettext("Invalid test type, bailing."); return; } $output = add_colors(shell_exec($smartctl . " -t " . escapeshellarg($test) . " /dev/" . escapeshellarg($targetdev))); ?>

addInput(new Form_Input( 'smartmonemail', 'Email Address', 'text', $pconfig['smartmonemail'] )); $form->add($section); if (!empty($pconfig['smartmonemail'])) { $form->addGlobal(new Form_Button( 'test', 'Send test email', null, 'fa-send' ))->addClass('btn-info'); } print($form); break; } // Default page, prints the forms to view info, test, etc... default: { // Information $devs = get_smart_drive_list(); $form = new Form(false); $btnview = new Form_Button( 'submit', 'View', null, 'fa-file-text-o' ); $btnview->addClass('btn-primary'); $btnview->setAttribute('id'); $section = new Form_Section('Information'); $section->addInput(new Form_Input( 'action', null, 'hidden', 'info' ))->setAttribute('id'); $group = new Form_Group('Info type'); $group->add(new Form_Checkbox( 'type', null, 'Info', false, 'i' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'type', null, 'Health', true, 'H' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'type', null, 'S.M.A.R.T. Capabilities', false, 'c' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'type', null, 'Attributes', false, 'A' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'type', null, 'All', false, 'a' ))->displayAsRadio(); $section->add($group); $section->addInput(new Form_Select( 'device', 'Device: /dev/', false, array_combine($devs, $devs) ))->setAttribute('id'); $section->addInput(new Form_StaticText( '', $btnview )); $form->add($section); print($form); // Tests $form = new Form(false); $btntest = new Form_Button( 'submit', 'Test', null, 'fa-wrench' ); $btntest->addClass('btn-primary'); $btntest->setAttribute('id'); $section = new Form_Section('Perform self-tests'); $section->addInput(new Form_Input( 'action', null, 'hidden', 'test' ))->setAttribute('id'); $group = new Form_Group('Test type'); $group->add(new Form_Checkbox( 'testType', null, 'Offline', false, 'offline' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'testType', null, 'Short', true, 'short' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'testType', null, 'Long', false, 'long' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'testType', null, 'Conveyance', false, 'conveyance' ))->displayAsRadio(); $group->setHelp('Select "Conveyance" for ATA disks only.'); $section->add($group); $section->addInput(new Form_Select( 'device', 'Device: /dev/', false, array_combine($devs, $devs) ))->setAttribute('id'); $section->addInput(new Form_StaticText( '', $btntest )); $form->add($section); print($form); // Logs $form = new Form(false); $btnview = new Form_Button( 'submit', 'View', null, 'fa-file-text-o' ); $btnview->addClass('btn-primary'); $btnview->setAttribute('id'); $section = new Form_Section('View Logs'); $section->addInput(new Form_Input( 'action', null, 'hidden', 'logs' ))->setAttribute('id'); $group = new Form_Group('Log type'); $group->add(new Form_Checkbox( 'type', null, 'Error', true, 'error' ))->displayAsRadio(); $group->add(new Form_Checkbox( 'type', null, 'Self-test', false, 'selftest' ))->displayAsRadio(); $section->add($group); $section->addInput(new Form_Select( 'device', 'Device: /dev/', false, array_combine($devs, $devs) ))->setAttribute('id'); $section->addInput(new Form_StaticText( '', $btnview )); $form->add($section); print($form); // Abort $btnabort = new Form_Button( 'submit', 'Abort', null, 'fa-times' ); $btnabort->addClass('btn-danger')->setAttribute('id'); $form = new Form(false); $section = new Form_Section('Abort'); $section->addInput(new Form_Input( 'action', null, 'hidden', 'abort' ))->setAttribute('id'); $section->addInput(new Form_Select( 'device', 'Device: /dev/', false, array_combine($devs, $devs) ))->setAttribute('id'); $section->addInput(new Form_StaticText( '', $btnabort )); $form->add($section); print($form); break; } } include("foot.inc");