/** * Include $targetUser in access groups given by $groupids by the $sourceUser. * * @param Default_Model_Researcher|integer $sourceUser User profile object or id. * @param Default_Model_Researcher|integer $targetUser User profile object or id. * @param integer[] $groupIds The ids of the access groups. * @param {id, name, canAdd, canRemove, canRequest, canAcceptReject, hasRequest}[] $accesspermissions Optional array of $sourceUser's access groups permissions. * @return boolean|string True on success, text message on error, False on unknown error. */ private static function includeUserInGroups($sourceUser, $targetUser, $groupIds, $accesspermissions) { $res = array(); foreach ($groupIds as $gid) { $g = array($gid => self::canPerformAction($targetUser, $targetUser, "include", $gid, $accesspermissions)); $res[] = $g; if ($g[$gid] !== true) { continue; } //Check if user is already in access group, then ignore if (self::inAllAccessGroups($targetUser, array($gid)) === true) { continue; } $actormember = new Default_Model_ActorGroupMember(); $actormember->groupID = $gid; $actormember->actorGUID = $targetUser->guid; if (trim($gid) === "-3") { $actormember->payload = $targetUser->countryID; } $actormember->save(); //if targetuser has a pending reqeust to join current group, then accept the request foreach ($accesspermissions as $ap) { if (trim($ap["id"]) === trim($gid) && is_numeric($ap["hasRequest"]) && intval($ap["hasRequest"]) > 0) { self::acceptAccessGroupRequest($sourceUser, $targetUser, intval($ap["hasRequest"])); } } } return $res; }