"._('There are no mounted array or pool disks - cannot add shares')."."; if (!checkDisks($disks)) die($nodisks); // No shared disks $nodisks = ""._('There are no exportable disk shares').""; // GUI settings extract(parse_plugin_cfg('dynamix',true)); /* Function to test if any Mouned volumes exist. */ function checkDisks(&$disks) { $rc = false; foreach ($disks as $disk) { if ($disk['name']!=='flash' && _var($disk,'fsStatus',"")==='Mounted') { $rc = true; break; } } return $rc; } // Display export settings function disk_share_settings($protocol,$share) { if (empty($share)) return; if ($protocol!='yes' || _var($share,'export')=='-') return "-"; return (_var($share,'export')=='e') ? _(ucfirst(_var($share,'security'))) : ''._(ucfirst(_var($share,'security'))).''; } function globalInclude($name) { global $var; return substr($name,0,4)!='disk' || !_var($var,'shareUserInclude') || strpos(_var($var,'shareUserInclude').",","$name,")!==false; } function shareInclude($name) { global $include; return !$include || substr($name,0,4)!='disk' || strpos("$include,", "$name,")!==false; } function sharesOnly($disk) { return in_array(_var($disk,'type'),['Data','Cache']) && _var($disk,'exportable')=='yes'; } // filter disk shares $disks = array_filter($disks,'sharesOnly'); // Compute disk shares & check encryption $crypto = false; foreach ($disks as $name => $disk) { if ($all!=0 && (!$compute || $compute==$name)) exec("/$docroot/webGui/scripts/disk_size ".escapeshellarg($name)." ssz2"); $crypto |= strpos(_var($disk,'fsType'),'luks:')!==false; } // global shares include/exclude $myDisks = array_filter(array_diff(array_keys($disks), explode(',',_var($var,'shareUserExclude'))), 'globalInclude'); // Share size per disk $ssz2 = []; if ($all==0) exec("rm -f /var/local/emhttp/*.ssz2"); else foreach (glob("state/*.ssz2",GLOB_NOSORT) as $entry) $ssz2[basename($entry,'.ssz2')] = file($entry,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); // Build table $row = 0; foreach ($disks as $name => $disk) { $color = _var($disk,'fsColor'); $row++; switch ($color) { case 'green-on' : $orb = 'circle'; $color = 'green'; $help = _('All files protected'); break; case 'yellow-on': $orb = 'warning'; $color = 'yellow'; $help = _('All files unprotected'); break; } if ($crypto) switch (_var($disk,'luksState',0)) { 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 "",htmlspecialchars(_var($disk,'comment')),""; echo "",disk_share_settings(_var($var,'shareSMBEnabled'), $sec[$name]),""; echo "",disk_share_settings(_var($var,'shareNFSEnabled'), $sec_nfs[$name]),""; $cmd="/webGui/scripts/disk_size&arg1=$name&arg2=ssz2"; $type = _var($disk,'rotational') ? _('HDD') : _('SSD'); if (array_key_exists($name,$ssz2)) { echo "$type"; echo "",my_scale(_var($disk,'fsSize',0)*1024, $unit)," $unit"; echo "",my_scale(_var($disk,'fsFree',0)*1024, $unit)," $unit"; echo ""; foreach ($ssz2[$name] as $entry) { [$sharename,$sharesize] = my_explode('=',$entry); if ($sharename=='share.total') continue; $inside = in_array(_var($disk,'name'), array_filter(array_diff($myDisks, explode(',',_var($shares[$sharename],'exclude'))), 'shareInclude')); echo "" : "warning'>"); echo " $sharename"; echo "",($inside ? "" : ""._('Share is outside the list of designated disks').""),""; echo ""; echo ""; echo ""; echo "",my_scale($sharesize, $unit)," $unit"; echo "",my_scale(_var($disk,'fsFree',0)*1024, $unit)," $unit"; echo ""; } } else { echo "$type"; echo "",_('Compute'),"..."; echo "",my_scale(_var($disk,'fsFree',0)*1024, $unit)," $unit"; echo ""; } } if ($row==0) echo $nodisks; ?>