link('usrgrp_grp_id', func_get_arg(0)) : $this->link('usrgrp_grp_id'); } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE function syncGroups($person) { $name = $person->pgname(); $gm = DB_DataObject::Factory('group_members'); $new = $gm->listGroupMembership($person, 'name'); $g = DB_DataObject::Factory('grp'); $grps = $g->fetchAll('grp_id', 'grp_name'); $gmap = array_flip($grps); $cur = DB_DataObject::Factory('usrgrp'); $cur->usrgrp_username = $name; $oldids = $cur->fetchAll('usrgrp_grp_id'); $old = array(); foreach($oldids as $id) { $old[$grps[$id]] = true; } foreach($new as $i=> $n) { if ($n == 'Administrators') { $n = 'ADMIN'; } if (isset($old[$n])) { unset($old[$n]); continue; } // skip groups we do not know about.. if (!isset($gmap[$n])) { unset($new[$i]); continue; } $ug = DB_DataObject::Factory('usrgrp'); $ug->usrgrp_grp_id = $gmap[$n]; $ug->usrgrp_username = $name; $ug->insert(); unset($new[$i]); } // finally remove from group.. foreach($old as $n => $tr) { $ug = DB_DataObject::Factory('usrgrp'); $ug->usrgrp_grp_id = $gmap[$n]; $ug->usrgrp_username = $name; if ($ug->find(true)) { $ug->delete(); } } } }