/** * void Snoop::process ($user, $new, $old) * Find new / removed snoop references in $user's plan. */ function process(&$user, $new, $old) { /* find references in old plan */ // $old_matches = Snoop::_getReferences($old); $dbh = Planworld::_connect(); $old_matches = $dbh->getCol("SELECT username FROM snoop, users WHERE snoop.uid = users.id AND s_uid = {$user->getUserID()}"); /* find references in new plan */ $new_matches = Snoop::_getReferences($new); /* find differences */ $users_to_add = Snoop::snoop_diff($new_matches[1], $old_matches); $users_to_del = Snoop::snoop_diff($old_matches, $new_matches[1]); $success = true; foreach ($users_to_add as $u) { if (strstr($u, '@')) { list($username, $host) = explode('@', $u); } $sid = Planworld::nameToID($u); if (!isset($host) && $sid > 0) { /* valid local user */ $success = $success && Snoop::addReference($user->getUserID(), $sid); } else { if (isset($host) && ($node = Planworld::getNodeInfo($host))) { /* remote planworld user */ unset($host); /* JLO2 4/12/10 Required to stop permasnoops after calling remote users. */ if ($node['Version'] < 2) { Snoop::_call($node, 'snoop.addReference', array($username, $user->getUsername() . '@' . PW_NAME)); } else { Snoop::_call($node, 'planworld.snoop.add', array($username, $user->getUsername() . '@' . PW_NAME)); } } } } foreach ($users_to_del as $u) { if (strstr($u, '@')) { list($username, $host) = explode('@', $u); } $sid = Planworld::nameToID($u); if (!isset($host) && $sid > 0) { /* valid local user */ $success = $success && Snoop::removeReference($user->getUserID(), $sid); } else { if (isset($host) && ($node = Planworld::getNodeInfo($host))) { /* remote planworld user */ unset($host); /* JLO2 4/12/10 Required to stop permasnoops after calling remote users. */ if ($node['Version'] < 2) { Snoop::_call($node, 'snoop.removeReference', array($username, $user->getUsername() . '@' . PW_NAME)); } else { Snoop::_call($node, 'planworld.snoop.remove', array($username, $user->getUsername() . '@' . PW_NAME)); } } } } return $success; }
function xmlrpc_addSnoopReference($method_name, $params) { $uid =& $params[0]; $sbid =& $params[1]; if (!($uid = Planworld::nameToID($uid))) { return false; } if (!($sbid_id = Planworld::nameToID($sbid))) { $sbid_id = Planworld::addUser($sbid); } Snoop::addReference($sbid_id, $uid); return true; }