Further refinement of the PHP parsing of the accounts file for SME Shared Folders info for use in generating config files for WebDAV clients like Bitkinex:
<?php
function getsfdata($dbfile, $reqkeylist) {
$a=file_get_contents("accounts");
$b = explode(chr(10), $a);
$c = array();
$e = array();
// Remove Comment Lines and blank lines
for ($i = 0; $i < count($b); $i++) {
$firstchar = substr(trim($b[$i]), 0,1);
if ((strlen($firstchar) <> 0) && ($firstchar <> '#')) $c[] = $b[$i];
}
for ($i=0; $i < count($c); $i++) {
$b = array();
$b[$i] = explode('|', $c[$i]);
$x = array();
$x = explode('=', $b[$i][0]);
$x[1] = trim($x[1]);
if (in_array($x[1], $reqkeylist)) {
$e[$x[0]]['InfoType'] = $x[1];
for ($j=1; $j < count($b[$i]); $j = $j+2) {
$e[$x[0]][$b[$i][$j]] = trim($b[$i][$j+1]);
}
}
}
// echo print_r($e, true);
return $e;
}
function getsfusergrouplist() {
$dbfile = 'accounts';
$reqkeylist = Array('group');
$groups = getsfdata($dbfile, $reqkeylist);
$a = Array();
foreach ($groups as $key => $value) {
$members = Array();
$members = explode(',', $value['Members']);
foreach ($members as $member) {
$a[] = Array('member' => $member, 'group' => $key);
}
}
return $a;
}
function getsfusers() {
$a = getsfusergrouplist();
$users = Array();
foreach ($a as $groupuser) {
$users[$groupuser['member']]['group'][] = $groupuser['group'];
}
ksort($users);
return $users;
}
function getsfgroupsharelist() {
$dbfile = 'accounts';
$reqkeylist = Array('share');
$shares = getsfdata($dbfile, $reqkeylist);
$a = Array();
foreach ($shares as $key => $value) {
$sharedesc = $value['Name'];
$groupsR = Array();
$groupsR = explode(',', $value['ReadGroups']);
if ((count($groupsR) > 0) && (strlen($value['ReadGroups'][0]) > 0)){
foreach ($groupsR as $group) {
$a[] = Array('group' => $group, 'share' => $key, 'sharedesc' => $sharedesc, 'RW' => 'R');
}
}
$groupsW = Array();
$groupsW = explode(',', $value['WriteGroups']);
if ((count($groupsW) > 0) && (strlen($value['WriteGroups'][0]) > 0)){
foreach ($groupsW as $group) {
$a[] = Array('group' => $group, 'share' => $key, 'sharedesc' => $sharedesc, 'RW' => 'W');
}
}
}
array_unique($a);
asort($a);
$b = Array();
foreach ($a as $shareset) {
$b[$shareset['group']][$shareset['share']] = Array('sharedesc' => $shareset['sharedesc'], 'RW' => $shareset['RW']);
}
return $b;
}
function getsfusershares() {
$shares = getsfgroupsharelist();
$users = getsfusers();
$a = Array();
foreach ($users as $user => $details) {
$group = $details['group'];
foreach ($group as $groupname) {
$shareset = $shares[$groupname];
foreach ($shareset as $sharename => $sharedetails) {
$shareRW = $sharedetails['RW'];
if ( (!array_key_exists($sharename, $a[$user])) ||
(($shareRW == 'W') && ($a[$user][$sharename] == 'R')) ) {
$a[$user][$sharename] = $sharedetails;
}
}
}
}
return $a;
}
?>