diff --git a/emhttp/plugins/dynamix/ShareEdit.page b/emhttp/plugins/dynamix/ShareEdit.page index 097bea59a..093ad9ff6 100644 --- a/emhttp/plugins/dynamix/ShareEdit.page +++ b/emhttp/plugins/dynamix/ShareEdit.page @@ -50,6 +50,12 @@ $pools = array_filter($pools, function($pool) { return !isSubpool($pool); }); +/* Check for cachePool2 only which is a situation where the primary device is the cachePool2 device. */ +if ((! $share['cachePool']) && ($share['cachePool2'])) { + $share['cachePool'] = $share['cachePool2']; + $share['cachePool2'] = ""; +} + /* Check for non existent pool device. */ if ($share['cachePool'] && !in_array($share['cachePool'], $pools)) { $poolDefined = false; @@ -61,16 +67,16 @@ if ($share['cachePool'] && !in_array($share['cachePool'], $pools)) { /* Check for pool 2 (or array) being defined. */ if ((($share['useCache'] == "yes") || ($share['useCache'] == "prefer")) && ($poolsOnly) && (!$share['cachePool2'])) { - $poolDefined2 = false; - $share['useCache'] = "yes"; + $poolDefined2 = true; + $share['useCache'] = "only"; } else if ($share['cachePool2']) { $poolDefined2 = in_array($share['cachePool2'], $pools); } else { $poolDefined2 = true; } -$cachePoolCapitalized = ucfirst($share['cachePool']); -$cachePoolCapitalized2 = $share['cachePool2'] ? ucfirst($share['cachePool2']) : _("Array"); +$cachePoolCapitalized = compress(my_disk($share['cachePool'],$display['raw'])); +$cachePoolCapitalized2 = $share['cachePool2'] ? compress(my_disk($share['cachePool2'],$display['raw'])) : _("Array"); function globalInclude($name) { global $var; diff --git a/emhttp/plugins/dynamix/ShareList.page b/emhttp/plugins/dynamix/ShareList.page index 16d248725..b97e27954 100644 --- a/emhttp/plugins/dynamix/ShareList.page +++ b/emhttp/plugins/dynamix/ShareList.page @@ -18,7 +18,7 @@ Cond="_var($var,'fsState')!='Stopped' && _var($var,'shareUser')=='e'" '._(ucfirst($share['security'])).''; + if (empty($share)) return; + if ($protocol!='yes' || $share['export']=='-') return "-"; + return ($share['export']=='e') ? _(ucfirst($share['security'])) : ''._(ucfirst($share['security'])).''; } function globalInclude($name) { - global $var; - return substr($name,0,4)!='disk' || !$var['shareUserInclude'] || strpos("{$var['shareUserInclude']},","$name,")!==false; + global $var; + return substr($name,0,4)!='disk' || !$var['shareUserInclude'] || strpos("{$var['shareUserInclude']},","$name,")!==false; } function shareInclude($name) { - global $include; - return !$include || substr($name,0,4)!='disk' || strpos("$include,", "$name,")!==false; + global $include; + return !$include || substr($name,0,4)!='disk' || strpos("$include,", "$name,")!==false; } // Compute user shares & check encryption $crypto = false; foreach ($shares as $name => $share) { - if ($all!=0 && (!$compute || $compute==$name)) exec("$docroot/webGui/scripts/share_size ".escapeshellarg($name)." ssz1 ".escapeshellarg($pools)); - $crypto |= _var($share,'luksStatus',0)>0; + if ($all!=0 && (!$compute || $compute==$name)) exec("$docroot/webGui/scripts/share_size ".escapeshellarg($name)." ssz1 ".escapeshellarg($pools)); + $crypto |= _var($share,'luksStatus',0)>0; } // global shares include/exclude $myDisks = array_filter(array_diff(array_keys($disks), explode(',',$var['shareUserExclude'])), 'globalInclude'); // Share size per disk $ssz1 = []; -if ($all==0) - exec("rm -f /var/local/emhttp/*.ssz1"); -else - foreach (glob("state/*.ssz1",GLOB_NOSORT) as $entry) $ssz1[basename($entry,'.ssz1')] = parse_ini_file($entry); +if ($all==0) { + exec("rm -f /var/local/emhttp/*.ssz1"); +} else { + foreach (glob("state/*.ssz1",GLOB_NOSORT) as $entry) $ssz1[basename($entry,'.ssz1')] = parse_ini_file($entry); +} + +/* Define constants for magic strings */ +define('STATUS_GREEN_ON', 'green-on'); +define('STATUS_YELLOW_ON', 'yellow-on'); +define('LUKS_STATUS_UNKNOWN', 0); +define('LUKS_STATUS_ENCRYPTED', 1); +define('LUKS_STATUS_UNENCRYPTED', 2); // Build table $row = 0; foreach ($shares as $name => $share) { - /* Check if poolsOnly is true */ - $array = $share['cachePool2'] ? ucfirst($share['cachePool2']) : ""._('Array'); + /* Is cachePool2 defined? If it is we need to show the cache pool 2 device name instead of 'Array'. */ + if ($share['cachePool2']) { + $array = compress(my_disk($share['cachePool2'],$display['raw'])); + $indicator = ""; + } else { + $array = _('Array'); + $indicator = ""; + } + + /* Check that the share storage assignments are valid. */ + if (($share['cachePool']) && (! in_array($share['cachePool'], $pools_check))) { + $array = compress(my_disk($share['cachePool'],$display['raw'])); + $indicator = ""; + $share_valid = false; + } else if (($share['cachePool2']) && (! in_array($share['cachePool2'], $pools_check))) { + $array = compress(my_disk($share['cachePool2'],$display['raw'])); + $indicator = ""; + $share_valid = false; + } else if (($poolsOnly) && (! $share['cachePool']) && (! $share['cachePool2'])) { + $share_valid = false; + } else { + /* Is the share exclusive? */ + $exclusive = _var($share, 'exclusive') == 'yes' ? " " : ""; + $share_valid = true; + } + + /* Check if poolsOnly is true. */ if ($poolsOnly) { - /* If useCache is set to 'yes', change it to 'no'. */ - if (($share['useCache'] == 'yes') && (!$share['cachePool2'])) { - $share['useCache'] = 'no'; - } - /* If useCache is set to 'prefer', change it to 'only'. */ - if (($share['useCache'] == 'prefer') && (!$share['cachePool2'])) { + /* If useCache is set to 'yes' or 'prefer', change it to 'only'. */ + if ((($share['useCache'] == 'yes') || ($share['useCache'] == 'prefer')) && (!$share['cachePool2'])) { $share['useCache'] = 'only'; } } - $row++; - $color = $share['color']; - switch ($color) { - case 'green-on' : $orb = 'circle'; $color = 'green'; $help = _('All files protected'); break; - case 'yellow-on': $orb = 'warning'; $color = 'yellow'; $help = _('Some or all files unprotected'); break; - } - if ($crypto) switch ($share['luksStatus']) { - case 0: $luks = ""; break; - case 1: $luks = ""._('All files encrypted').""; break; - case 2: $luks = ""._('Some or all files unencrypted').""; break; - default: $luks = ""._('Unknown encryption state').""; break; - } else $luks = ""; - echo ""; - echo "$help$luks$name"; - echo "{$share['comment']}"; - echo "",user_share_settings($var['shareSMBEnabled'], $sec[$name]),""; - echo "",user_share_settings($var['shareNFSEnabled'], $sec_nfs[$name]),""; + $row++; + $color = $share['color'] ?? ''; + $orb = ''; + $help = ''; - // Check for non existent pool device - if (isset($share['cachePool']) && !in_array($share['cachePool'], $pools_check)) $share['useCache'] = "no"; + switch ($color) { + case STATUS_GREEN_ON: + $orb = 'circle'; + $color = 'green'; + $help = _('All files protected'); + break; + case STATUS_YELLOW_ON: + $orb = 'warning'; + $color = 'yellow'; + $help = _('Some or all files unprotected'); + break; + default: + /* Handle unexpected color values */ + $orb = 'question'; + $color = 'grey'; + $help = _('Unknown protection status'); + break; + } - switch ($share['useCache']) { - case 'no': - $cache = ""._('Array')."".sprintf(_('Primary storage %s'),_('Array')).""; - break; - case 'yes': - $cache = "".compress(my_disk($share['cachePool'],$display['raw']))." ".$array.""._('Primary storage to Secondary storage').""; - break; - case 'prefer': - $cache = "".compress(my_disk($share['cachePool'],$display['raw']))." ".$array.""._('Secondary storage to Primary storage').""; - break; - case 'only': - $exclusive = isset($share['exclusive']) && $share['exclusive']=='yes' ? " " : ""; - $cache = "$exclusive".my_disk($share['cachePool'],$display['raw'])."".sprintf(_('Primary storage %s'),$share['cachePool']).($exclusive ? ", "._('Exclusive access') : "").""; - break; - } - if (array_key_exists($name,$ssz1)) { - echo "$cache"; - echo "",my_scale($ssz1[$name]['disk.total'], $unit)," $unit"; - echo "",my_scale($share['free']*1024, $unit)," $unit"; - echo ""; - foreach ($ssz1[$name] as $diskname => $disksize) { - if ($diskname=='disk.total') continue; - $include = $share['include']; - $inside = in_array($diskname, array_filter(array_diff($myDisks, explode(',',$share['exclude'])), 'shareInclude')); - echo "" : "warning'>"); - echo " ",_(my_disk($diskname,$display['raw']),3),""; - echo "",($inside ? "" : ""._('Share is outside the list of designated disks').""),""; - echo ""; - echo ""; - echo ""; - echo "",my_scale($disksize, $unit)," $unit"; - echo "",my_scale($disks[$diskname]['fsFree']*1024, $unit)," $unit"; - echo ""; - } - } else { - echo "$cache"; - echo "",_('Compute'),"..."; - echo "",my_scale($share['free']*1024, $unit)," $unit"; - echo ""; - } + $luks = ''; + if ($crypto) { + switch ($share['luksStatus'] ?? LUKS_STATUS_UNKNOWN) { + case LUKS_STATUS_UNKNOWN: + $luks = ""; + break; + case LUKS_STATUS_ENCRYPTED: + $luks = ""._('All files encrypted').""; + break; + case LUKS_STATUS_UNENCRYPTED: + $luks = ""._('Some or all files unencrypted').""; + break; + default: + $luks = ""._('Unknown encryption state').""; + break; + } + } + + echo ""; + echo "$help$luks$name"; + echo "{$share['comment']}"; + echo "", user_share_settings($var['shareSMBEnabled'], $sec[$name]), ""; + echo "", user_share_settings($var['shareNFSEnabled'], $sec_nfs[$name]), ""; + + /* If the share pool or array is not valid, indicate that to the user. */ + if (!$share_valid) { + $cache = "".$indicator." ".$array.""._('This share is invalid').'; '. _('It references storage that does not exist').""; + } else { + switch ($share['useCache']) { + case 'no': + $cache = "".$indicator.$exclusive.$array."".sprintf(_('Primary storage %s'), $array).""; + break; + case 'yes': + $cache = "".compress(my_disk($share['cachePool'], $display['raw']))." ".$indicator.$array.""._('Primary storage to Secondary storage').""; + break; + case 'prefer': + $cache = "".compress(my_disk($share['cachePool'], $display['raw']))." ".$indicator.$array.""._('Secondary storage to Primary storage').""; + break; + case 'only': + $cache = "$exclusive".my_disk($share['cachePool'], $display['raw'])."".sprintf(_('Primary storage %s'), $share['cachePool']).($exclusive ? ", "._('Exclusive access') : "").""; + break; + default: + /* Handle unexpected useCache values */ + $cache = "". $indicator . $array . ""._('Unknown cache usage').""; + break; + } + } + + if (array_key_exists($name, $ssz1)) { + echo "$cache"; + echo "", my_scale($ssz1[$name]['disk.total'], $unit), " $unit"; + echo "", my_scale($share['free'] * 1024, $unit), " $unit"; + echo ""; + foreach ($ssz1[$name] as $diskname => $disksize) { + if ($diskname == 'disk.total') continue; + $include = $share['include']; + $inside = in_array($diskname, array_filter(array_diff($myDisks, explode(',', $share['exclude'])), 'shareInclude')); + echo "" : "warning'>"); + echo " ", _(my_disk($diskname, $display['raw']), 3), ""; + echo "", ($inside ? "" : ""._('Share is outside the list of designated disks').""), ""; + echo ""; + echo ""; + echo ""; + echo "", my_scale($disksize, $unit), " $unit"; + echo "", my_scale($disks[$diskname]['fsFree'] * 1024, $unit), " $unit"; + echo ""; + } + } else { + echo "$cache"; + echo "", _('Compute'), "..."; + echo "", my_scale($share['free'] * 1024, $unit), " $unit"; + echo ""; + } } if ($row==0) echo $noshares; ?>