function render_partition($disk, $partition) { global $plugin; if (!isset($partition['device'])) { return ''; } $out = array(); $mounted = is_mounted($partition['device']); if (!$mounted && $partition['fstype'] != 'btrfs' || $mounted && $partition['fstype'] == 'btrfs') { $fscheck = "<a class='exec' onclick='openWindow_fsck(\"/plugins/{$plugin}/include/fsck.php?disk={$partition[device]}&fs={$partition[fstype]}&type=ro\",\"Check filesystem\",600,900);'><i class='glyphicon glyphicon-th-large partition'></i>{$partition[part]}</a>"; } else { $fscheck = "<i class='glyphicon glyphicon-th-large partition'></i>{$partition[part]}"; } $mpoint = "<div>{$fscheck}<i class='glyphicon glyphicon-arrow-right'></i>"; $mbutton = "<span style='width:auto;text-align:right;'>"; if ($mounted) { $mpoint .= "<a href='/Shares/Browse?dir={$partition[mountpoint]}' target='_blank'>{$partition[mountpoint]}</a></div>"; $mbutton .= "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/unassigned_umount {$partition[device]}');\"><i class='glyphicon glyphicon-export'></i> Unmount</button>"; } else { $mpoint .= "<form method='POST' action='/plugins/{$plugin}/UnassignedDevices.php?action=change_mountpoint&serial={$partition[serial]}&partition={$partition[part]}' target='progressFrame' style='display:inline;margin:0;padding:0;'><span class='text exec'><a>{$partition[mountpoint]}</a></span><input class='input' type='text' name='mountpoint' value='{$partition[mountpoint]}' hidden /></form></div>"; $mbutton .= "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/unassigned_mount {$partition[device]}');\"><i class='glyphicon glyphicon-import'></i> Mount</button>"; } $out[] = "<tr class='{$outdd} toggle-parts toggle-" . basename($disk['device']) . "' style='__SHOW__' >"; $out[] = "<td></td>"; $out[] = "<td>{$mpoint}</td>"; $out[] = "<td>{$mbutton}</td>"; $out[] = "<td>-</td>"; $out[] = "<td >" . $partition['fstype'] . "</td>"; $out[] = "<td><span>" . my_scale($partition['size'], $unit) . " {$unit}</span></td>"; $out[] = render_used_and_free($partition); $out[] = "<td>" . (strlen($partition['target']) ? shell_exec("lsof '{$partition[target]}' 2>/dev/null|grep -c -v COMMAND") : "-") . "</td>"; $out[] = "<td>-</td>"; $out[] = "<td><input type='checkbox' class='toggle_share' info='" . htmlentities(json_encode($partition)) . "' " . ($partition['shared'] ? 'checked' : '') . "></td>"; $out[] = "<td><a href='/Main/EditScript?s=" . urlencode($partition['serial']) . "&l=" . urlencode(basename($partition['mountpoint'])) . "&p=" . urlencode($partition['part']) . "'><img src='/webGui/images/default.png' style='cursor:pointer;width:16px;" . (get_config($partition['serial'], "command.{$partition[part]}") ? "" : "opacity: 0.4;") . "'></a></td>"; $out[] = "<tr>"; return $out; }
foreach ($disks as $disk) { echo "<tr class='{$odd}'>"; printf("<td><img src='/webGui/images/%s'> %s</td>", is_disk_running($disk['device']) ? "green-on.png" : "green-blink.png", basename($disk['device'])); $disk_mounted = false; foreach ($disk['partitions'] as $p) { if (is_mounted($p['device'])) { $disk_mounted = TRUE; } } $m_button = "<td><span style='width:auto;text-align:right;'>" . ($disk_mounted ? "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/usb_umount {$disk[device]}');\"><i class='glyphicon glyphicon-export'></i> Unmount</button>" : "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/usb_mount {$disk[device]}');\"><i class='glyphicon glyphicon-import'></i> Mount</button>") . "</span></td>"; echo "<td><i class='glyphicon glyphicon-hdd hdd'></i>" . $disk['partitions'][0]['serial'] . $m_button . "</td>"; $temp = my_temp($disk['temperature']); echo "<td >{$temp}</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>"; echo "<td><input type='checkbox' class='automount' serial='" . $disk['partitions'][0]['serial'] . "' " . ($disk['partitions'][0]['automount'] ? 'checked' : '') . "></td><td>-</td></tr>"; foreach ($disk['partitions'] as $partition) { $mounted = is_mounted($partition['device']); echo "<tr class='{$odd}'><td></td><td><div>"; $fscheck = sprintf(get_fsck_commands($partition['fstype'])['ro'], $partition['device']); $icon = "<i class='glyphicon glyphicon-th-large partition'></i>"; $fscheck = !$mounted ? "<a class='exec' onclick='openWindow(\"{$fscheck}\",\"Check filesystem\",600,900);'>{$icon}{$partition[part]}</a>" : "{$icon}{$partition[part]}"; echo "{$fscheck}<i class='glyphicon glyphicon-arrow-right'></i>"; if ($mounted) { echo $partition['mountpoint']; } else { echo "<form method='POST' action='/plugins/{$plugin}/USBDevicesList.php?action=change_mountpoint&serial={$partition[serial]}&partition={$partition[part]}' target='progressFrame' style='display:inline;margin:0;padding:0;'>"; echo "<span class='text exec'><a>{$partition[mountpoint]}</a></span><input class='input' type='text' name='mountpoint' value='{$partition[mountpoint]}' hidden />"; echo "</form>"; } echo "<td><span style='width:auto;text-align:right;'>" . ($mounted ? "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/usb_umount {$partition[device]}');\"><i class='glyphicon glyphicon-export'></i> Unmount</button>" : "<button type='button' style='padding:2px 7px 2px 7px;' onclick=\"usb_mount('/usr/local/sbin/usb_mount {$partition[device]}');\"><i class='glyphicon glyphicon-import'></i> Mount</button>") . "</span></td>"; echo "</div></td><td>-</td>"; echo "<td >" . $partition['fstype'] . "</td>";
function make_mount_button($device) { global $paths, $Preclear; $button = "<span style='width:auto;text-align:right;'><button type='button' device='{$device[device]}' class='array' context='%s' role='%s' %s><i class='%s'></i> %s</button></span>"; if (isset($device['partitions'])) { $mounted = in_array(TRUE, array_map(function ($ar) { return is_mounted($ar['device']); }, $device['partitions'])); $disable = count(array_filter($device['partitions'], function ($p) { if (!empty($p['fstype']) && $p['fstype'] != "precleared") { return TRUE; } })) ? "" : "disabled"; $format = isset($device['partitions']) && !count($device['partitions']) || $device['partitions'][0]['fstype'] == "precleared" ? true : false; $context = "disk"; } else { $mounted = is_mounted($device['device']); $disable = !empty($device['fstype']) && $device['fstype'] != "precleared" ? "" : "disabled"; $format = isset($device['fstype']) && empty($device['fstype']) || $device['fstype'] == "precleared" ? true : false; $context = "partition"; } $is_mounting = array_values(preg_grep("@/mounting_" . basename($device['device']) . "@i", listDir(dirname($paths['mounting']))))[0]; $is_mounting = time() - filemtime($is_mounting) < 300 ? TRUE : FALSE; $is_unmounting = array_values(preg_grep("@/unmounting_" . basename($device['device']) . "@i", listDir(dirname($paths['mounting']))))[0]; $is_unmounting = time() - filemtime($is_unmounting) < 300 ? TRUE : FALSE; $dev = basename($device['device']); $preclearing = $Preclear ? $Preclear->isRunning(basename($device['device'])) : false; if ($device['size'] == 0) { $button = sprintf($button, $context, 'mount', 'disabled', 'glyphicon glyphicon-erase', 'Insert'); } elseif ($format) { $disable = get_config("Config", "destructive_mode") == "enabled" ? "" : "disabled"; $disable = $preclearing ? "disabled" : $disable; $button = sprintf($button, $context, 'format', $disable, 'glyphicon glyphicon-erase', 'Format'); } elseif ($is_mounting) { $button = sprintf($button, $context, 'umount', 'disabled', 'fa fa-circle-o-notch fa-spin', 'Mounting...'); } elseif ($is_unmounting) { $button = sprintf($button, $context, 'mount', 'disabled', 'fa fa-circle-o-notch fa-spin', 'Unmounting...'); } elseif ($mounted) { $button = sprintf($button, $context, 'umount', '', 'glyphicon glyphicon-export', 'Unmount'); } else { $disable = $preclearing ? "disabled" : $disable; $button = sprintf($button, $context, 'mount', $disable, 'glyphicon glyphicon-import', 'Mount'); } return $button; }
function do_mount_iso($info) { $dev = $info['device']; $dir = $info['mountpoint']; if (is_file($info['file'])) { if (!is_mounted($dev) || !is_mounted($dir, true)) { @mkdir($dir, 0777, TRUE); $cmd = "/sbin/mount -t iso9660 -o loop '{$dev}' '{$dir}'"; unassigned_log("Mount iso command: mount -t iso9660 -o loop '{$dev}' '{$dir}'"); $o = shell_exec($cmd . " 2>&1"); foreach (range(0, 5) as $t) { if (is_mounted($dev)) { @chmod($dir, 0777); @chown($dir, 99); @chgrp($dir, 100); unassigned_log("Successfully mounted '{$dev}' on '{$dir}'."); return TRUE; } else { sleep(0.5); } } unassigned_log("Mount of '{$dev}' failed. Error message: {$o}"); return FALSE; } else { unassigned_log("Share '{$dev}' already mounted..."); } } else { unassigned_log("Mount of '{$dev}' failed. Iso file '{$info['file']}' is missing."); return FALSE; } }
function do_unmount($dev, $dir) { if (is_mounted($dev) != 0){ debug("Unmounting ${dev}..."); $o = shell_exec("umount '${dev}' 2>&1"); for ($i=0; $i < 10; $i++) { if (! is_mounted($dev)){ if (is_dir($dir)) rmdir($dir); debug("Successfully unmounted '$dev'"); return TRUE; } else { sleep(0.5);} } debug("Unmount of ${dev} failed. Error message: $o"); return FALSE; } }
} return "*"; } if (isset($_POST['display'])) $display = $_POST['display']; switch ($_POST['action']) { case 'get_content': $disks = get_all_disks_info(); echo "<table class='preclear custom_head'><thead><tr><td>Device</td><td>Identification</td><td>Temp</td><td>Size</td><td>Preclear Status</td></tr></thead>"; echo "<tbody>"; if ( count($disks) ) { $odd="odd"; foreach ($disks as $disk) { $disk_mounted = false; foreach ($disk['partitions'] as $p) if (is_mounted(realpath($p))) $disk_mounted = TRUE; $temp = my_temp($disk['temperature']); $disk_name = basename($disk['device']); $serial = $disk['serial']; echo "<tr class='$odd'>"; printf( "<td><img src='/webGui/images/%s'> %s</td>", ( is_disk_running($disk['device']) ? "green-on.png":"green-blink.png" ), $disk_name); echo "<td><span class='toggle-hdd' hdd='{$disk_name}'><i class='glyphicon glyphicon-hdd hdd'></i>".($p?"<span style='margin:4px;'></span>":"<i class='glyphicon glyphicon-plus-sign glyphicon-append'></i>").$serial."</td>"; echo "<td>{$temp}</td>"; $status = $disk_mounted ? "Disk mounted" : "<a class='exec' onclick='start_preclear(\"".$serial."\",\"{$disk_name}\")'>Start Preclear</a>"; if (tmux_is_session("preclear_disk_{$disk_name}")) { $status = "<a class='exec' onclick='openPreclear(\"{$disk_name}\");' title='Preview'><i class='glyphicon glyphicon-eye-open'></i></a>"; $status = "{$status}<a title='Clear' style='color:#CC0000;' class='exec' onclick='remove_session(\"{$disk_name}\");'> <i class='glyphicon glyphicon-remove hdd'></i></a>"; } if (is_file("/tmp/preclear_stat_{$disk_name}")) { $preclear = explode("|", file_get_contents("/tmp/preclear_stat_{$disk_name}")); if (count($preclear) > 3) {