valid() ? '0' : '1'); } if (isset($_POST['cleanup'])) { $n = 0; // active shares $shares = array_map('strtolower',array_keys(parse_ini_file('state/shares.ini',true))); // stored shares foreach (glob("/boot/config/shares/*.cfg",GLOB_NOSORT) as $name) { if (!in_array(strtolower(basename($name,'.cfg')),$shares)) { $n++; if ($_POST['cleanup']==1) unlink($name); } } // return number of deleted files die((string)$n); } $compute = rawurldecode(_var($_POST,'compute')); $path = rawurldecode(_var($_POST,'path')); $all = _var($_POST,'all'); $shares = parse_ini_file('state/shares.ini',true); $disks = parse_ini_file('state/disks.ini',true); $var = parse_ini_file('state/var.ini'); $sec = parse_ini_file('state/sec.ini',true); $sec_nfs = parse_ini_file('state/sec_nfs.ini',true); // exit when no shares $noshares = ""._('There are no exportable user shares').""; if (!$shares) die($noshares); // GUI settings extract(parse_plugin_cfg('dynamix',true)); $pools_check = pools_filter(cache_filter($disks)); $pools = implode(',', $pools_check); // Natural sorting of share names uksort($shares,'strnatcasecmp'); // Display export settings function user_share_settings($protocol,$share) { 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; } function shareInclude($name) { 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; } // 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); // Build table $row = 0; foreach ($shares as $name => $share) { $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",compress($name),""; echo "{$share['comment']}"; echo "",user_share_settings($var['shareSMBEnabled'], $sec[$name]),""; echo "",user_share_settings($var['shareNFSEnabled'], $sec_nfs[$name]),""; // Check for non existent pool device if (isset($share['cachePool']) && !in_array($share['cachePool'], $pools_check)) $share['useCache'] = "no"; 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".compress(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 ""; } } if ($row==0) echo $noshares; ?>