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;
}
?>