PageRenderTime 49ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/flotsam/Servers/XmlRpcGroupsServer/xmlrpc.php

https://bitbucket.org/VirtualReality/flotsam
PHP | 1754 lines | 1396 code | 245 blank | 113 comment | 223 complexity | 78a280a37b0792fa190ba9b3ff00e762 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. // ini_set("display_errors",0);
  3. /*
  4. Actual failures that result in mysql or php errors should be returned as:
  5. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  6. Methods that run without errors, but do not have the intended result should return as:
  7. return array('succeed' => 'false', 'message' => 'No Groups Found', 'params' => var_export($params, TRUE));
  8. or if applicable:
  9. return array('succeed' => 'false', 'message' => 'What went wrong', 'params' => var_export($params, TRUE), 'sql' => $sql);
  10. */
  11. include("phpxmlrpclib/xmlrpc.inc");
  12. include("phpxmlrpclib/xmlrpcs.inc");
  13. include("config.php");
  14. $groupPowers = array(
  15. 'None' => '0',
  16. /// <summary>Can send invitations to groups default role</summary>
  17. 'Invite' => '2',
  18. /// <summary>Can eject members from group</summary>
  19. 'Eject' => '4',
  20. /// <summary>Can toggle 'Open Enrollment' and change 'Signup fee'</summary>
  21. 'ChangeOptions' => '8',
  22. /// <summary>Can create new roles</summary>
  23. 'CreateRole' => '16',
  24. /// <summary>Can delete existing roles</summary>
  25. 'DeleteRole' => '32',
  26. /// <summary>Can change Role names, titles and descriptions</summary>
  27. 'RoleProperties' => '64',
  28. /// <summary>Can assign other members to assigners role</summary>
  29. 'AssignMemberLimited' => '128',
  30. /// <summary>Can assign other members to any role</summary>
  31. 'AssignMember' => '256',
  32. /// <summary>Can remove members from roles</summary>
  33. 'RemoveMember' => '512',
  34. /// <summary>Can assign and remove abilities in roles</summary>
  35. 'ChangeActions' => '1024',
  36. /// <summary>Can change group Charter, Insignia, 'Publish on the web' and which
  37. /// members are publicly visible in group member listings</summary>
  38. 'ChangeIdentity' => '2048',
  39. /// <summary>Can buy land or deed land to group</summary>
  40. 'LandDeed' => '4096',
  41. /// <summary>Can abandon group owned land to Governor Linden on mainland, or Estate owner for
  42. /// private estates</summary>
  43. 'LandRelease' => '8192',
  44. /// <summary>Can set land for-sale information on group owned parcels</summary>
  45. 'LandSetSale' => '16384',
  46. /// <summary>Can subdivide and join parcels</summary>
  47. 'LandDivideJoin' => '32768',
  48. /// <summary>Can join group chat sessions</summary>
  49. 'JoinChat' => '65536',
  50. /// <summary>Can toggle "Show in Find Places" and set search category</summary>
  51. 'FindPlaces' => '131072',
  52. /// <summary>Can change parcel name, description, and 'Publish on web' settings</summary>
  53. 'LandChangeIdentity' => '262144',
  54. /// <summary>Can set the landing point and teleport routing on group land</summary>
  55. 'SetLandingPoint' => '524288',
  56. /// <summary>Can change music and media settings</summary>
  57. 'ChangeMedia' => '1048576',
  58. /// <summary>Can toggle 'Edit Terrain' option in Land settings</summary>
  59. 'LandEdit' => '2097152',
  60. /// <summary>Can toggle various About Land > Options settings</summary>
  61. 'LandOptions' => '4194304',
  62. /// <summary>Can always terraform land, even if parcel settings have it turned off</summary>
  63. 'AllowEditLand' => '8388608',
  64. /// <summary>Can always fly while over group owned land</summary>
  65. 'AllowFly' => '16777216',
  66. /// <summary>Can always rez objects on group owned land</summary>
  67. 'AllowRez' => '33554432',
  68. /// <summary>Can always create landmarks for group owned parcels</summary>
  69. 'AllowLandmark' => '67108864',
  70. /// <summary>Can use voice chat in Group Chat sessions</summary>
  71. 'AllowVoiceChat' => '134217728',
  72. /// <summary>Can set home location on any group owned parcel</summary>
  73. 'AllowSetHome' => '268435456',
  74. /// <summary>Can modify public access settings for group owned parcels</summary>
  75. 'LandManageAllowed' => '536870912',
  76. /// <summary>Can manager parcel ban lists on group owned land</summary>
  77. 'LandManageBanned' => '1073741824',
  78. /// <summary>Can manage pass list sales information</summary>
  79. 'LandManagePasses' => '2147483648',
  80. /// <summary>Can eject and freeze other avatars on group owned land</summary>
  81. 'LandEjectAndFreeze' => '4294967296',
  82. /// <summary>Can return objects set to group</summary>
  83. 'ReturnGroupSet' => '8589934592',
  84. /// <summary>Can return non-group owned/set objects</summary>
  85. 'ReturnNonGroup' => '17179869184',
  86. /// <summary>Can landscape using Linden plants</summary>
  87. 'LandGardening' => '34359738368',
  88. /// <summary>Can deed objects to group</summary>
  89. 'DeedObject' => '68719476736',
  90. /// <summary>Can moderate group chat sessions</summary>
  91. 'ModerateChat' => '137438953472',
  92. /// <summary>Can move group owned objects</summary>
  93. 'ObjectManipulate' => '274877906944',
  94. /// <summary>Can set group owned objects for-sale</summary>
  95. 'ObjectSetForSale' => '549755813888',
  96. /// <summary>Pay group liabilities and receive group dividends</summary>
  97. 'Accountable' => '1099511627776',
  98. /// <summary>Can send group notices</summary>
  99. 'SendNotices' => '4398046511104',
  100. /// <summary>Can receive group notices</summary>
  101. 'ReceiveNotices' => '8796093022208',
  102. /// <summary>Can create group proposals</summary>
  103. 'StartProposal' => '17592186044416',
  104. /// <summary>Can vote on group proposals</summary>
  105. 'VoteOnProposal' => '35184372088832',
  106. /// <summary>Can return group owned objects</summary>
  107. 'ReturnGroupOwned' => '281474976710656',
  108. /// <summary>Members are visible to non-owners</summary>
  109. 'RoleMembersVisible' => '140737488355328'
  110. );
  111. $uuidZero = "00000000-0000-0000-0000-000000000000";
  112. $groupDBCon = mysql_connect($dbHost,$dbUser,$dbPassword);
  113. if (!$groupDBCon)
  114. {
  115. die('Could not connect: ' . mysql_error());
  116. }
  117. mysql_select_db($dbName, $groupDBCon);
  118. // This is filled in by secure()
  119. $requestingAgent = $uuidZero;
  120. function test()
  121. {
  122. return array('name' => 'Joe','age' => 27);
  123. }
  124. // Use a common signature for all the group functions -> struct foo($struct)
  125. $common_sig = array(array($xmlrpcStruct, $xmlrpcStruct));
  126. function createGroup($params)
  127. {
  128. if( is_array($error = secureRequest($params, TRUE)) )
  129. {
  130. return $error;
  131. }
  132. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  133. $groupID = $params["GroupID"];
  134. $name = $params["Name"];
  135. $charter = $params["Charter"];
  136. $insigniaID = $params["InsigniaID"];
  137. $founderID = $params["FounderID"];
  138. $membershipFee = $params["MembershipFee"];
  139. $openEnrollment = $params["OpenEnrollment"];
  140. $showInList = $params["ShowInList"];
  141. $allowPublish = $params["AllowPublish"];
  142. $maturePublish = $params["MaturePublish"];
  143. $ownerRoleID = $params["OwnerRoleID"];
  144. $everyonePowers = $params["EveryonePowers"];
  145. $ownersPowers = $params["OwnersPowers"];
  146. $escapedParams = array_map("mysql_real_escape_string", $params);
  147. $escapedGroupID = $escapedParams["GroupID"];
  148. $escapedName = $escapedParams["Name"];
  149. $escapedCharter = $escapedParams["Charter"];
  150. $escapedInsigniaID = $escapedParams["InsigniaID"];
  151. $escapedFounderID = $escapedParams["FounderID"];
  152. $escapedMembershipFee = $escapedParams["MembershipFee"];
  153. $escapedOpenEnrollment = $escapedParams["OpenEnrollment"];
  154. $escapedShowInList = $escapedParams["ShowInList"];
  155. $escapedAllowPublish = $escapedParams["AllowPublish"];
  156. $escapedMaturePublish = $escapedParams["MaturePublish"];
  157. $escapedOwnerRoleID = $escapedParams["OwnerRoleID"];
  158. // Create group
  159. $sql = "INSERT INTO osgroup
  160. (GroupID, Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID)
  161. VALUES
  162. ('$escapedGroupID', '$escapedName', '$escapedCharter', '$escapedInsigniaID', '$escapedFounderID', $escapedMembershipFee, $escapedOpenEnrollment, $escapedShowInList, $escapedAllowPublish, $escapedMaturePublish, '$escapedOwnerRoleID')";
  163. if (!mysql_query($sql, $groupDBCon))
  164. {
  165. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  166. }
  167. // Create Everyone Role
  168. // NOTE: FIXME: This is a temp fix until the libomv enum for group powers is fixed in OpenSim
  169. $result = _addRoleToGroup(array('GroupID' => $groupID, 'RoleID' => $uuidZero, 'Name' => 'Everyone', 'Description' => 'Everyone in the group is in the everyone role.', 'Title' => "Member of $name", 'Powers' => $everyonePowers));
  170. if( isset($result['error']) )
  171. {
  172. return $result;
  173. }
  174. // Create Owner Role
  175. $result = _addRoleToGroup(array('GroupID' => $groupID, 'RoleID' => $ownerRoleID, 'Name' => 'Owners', 'Description' => "Owners of $name", 'Title' => "Owner of $name", 'Powers' => $ownersPowers));
  176. if( isset($result['error']) )
  177. {
  178. return $result;
  179. }
  180. // Add founder to group, will automatically place them in the Everyone Role, also places them in specified Owner Role
  181. $result = _addAgentToGroup(array('AgentID' => $founderID, 'GroupID' => $groupID, 'RoleID' => $ownerRoleID));
  182. if( isset($result['error']) )
  183. {
  184. return $result;
  185. }
  186. // Select the owner's role for the founder
  187. $result = _setAgentGroupSelectedRole(array('AgentID' => $founderID, 'RoleID' => $ownerRoleID, 'GroupID' => $groupID));
  188. if( isset($result['error']) )
  189. {
  190. return $result;
  191. }
  192. // Set the new group as the founder's active group
  193. $result = _setAgentActiveGroup(array('AgentID' => $founderID, 'GroupID' => $groupID));
  194. if( isset($result['error']) )
  195. {
  196. return $result;
  197. }
  198. return getGroup(array("GroupID"=>$groupID));
  199. }
  200. // Private method, does not include security, to only be called from places that have already verified security
  201. function _addRoleToGroup($params)
  202. {
  203. $everyonePowers = 8796495740928; // This should now be fixed, when libomv was updated...
  204. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  205. $groupID = mysql_real_escape_string( $params['GroupID'] );
  206. $roleID = mysql_real_escape_string( $params['RoleID'] );
  207. $name = mysql_real_escape_string( $params['Name'] );
  208. $desc = mysql_real_escape_string( $params['Description'] );
  209. $title = mysql_real_escape_string( $params['Title'] );
  210. $powers = mysql_real_escape_string( $params['Powers'] );
  211. if( !isset($powers) || ($powers == 0) || ($powers == '') )
  212. {
  213. $powers = $everyonePowers;
  214. }
  215. $sql = " INSERT INTO osrole (GroupID, RoleID, Name, Description, Title, Powers) VALUES "
  216. ." ('$groupID', '$roleID', '$name', '$desc', '$title', $powers)";
  217. if (!mysql_query($sql, $groupDBCon))
  218. {
  219. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error()
  220. , 'method' => 'addRoleToGroup'
  221. , 'params' => var_export($params, TRUE));
  222. }
  223. return array("success" => "true");
  224. }
  225. function addRoleToGroup($params)
  226. {
  227. if( is_array($error = secureRequest($params, TRUE)) )
  228. {
  229. return $error;
  230. }
  231. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  232. $groupID = $params['GroupID'];
  233. // Verify the requesting agent has permission
  234. if( is_array($error = checkGroupPermission($groupID, $groupPowers['CreateRole'])) )
  235. {
  236. return $error;
  237. }
  238. return _addRoleToGroup($params);
  239. }
  240. function updateGroupRole($params)
  241. {
  242. if( is_array($error = secureRequest($params, TRUE)) )
  243. {
  244. return $error;
  245. }
  246. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  247. $groupID = mysql_real_escape_string( $params['GroupID'] );
  248. $roleID = mysql_real_escape_string( $params['RoleID'] );
  249. $name = mysql_real_escape_string( $params['Name'] );
  250. $desc = mysql_real_escape_string( $params['Description'] );
  251. $title = mysql_real_escape_string( $params['Title'] );
  252. $powers = mysql_real_escape_string( $params['Powers'] );
  253. // Verify the requesting agent has permission
  254. if( is_array($error = checkGroupPermission($groupID, $groupPowers['RoleProperties'])) )
  255. {
  256. return $error;
  257. }
  258. $sql = " UPDATE osrole SET RoleID = '$roleID' ";
  259. if( isset($params['Name']) )
  260. {
  261. $sql .= ", Name = '$name'";
  262. }
  263. if( isset($params['Description']) )
  264. {
  265. $sql .= ", Description = '$desc'";
  266. }
  267. if( isset($params['Title']) )
  268. {
  269. $sql .= ", Title = '$title'";
  270. }
  271. if( isset($params['Powers']) )
  272. {
  273. $sql .= ", Powers = $powers";
  274. }
  275. $sql .= " WHERE GroupID = '$groupID' AND RoleID = '$roleID'";
  276. if (!mysql_query($sql, $groupDBCon))
  277. {
  278. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  279. }
  280. return array("success" => "true");
  281. }
  282. function removeRoleFromGroup($params)
  283. {
  284. if( is_array($error = secureRequest($params, TRUE)) )
  285. {
  286. return $error;
  287. }
  288. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  289. $groupID = mysql_real_escape_string( $params['GroupID'] );
  290. $roleID = mysql_real_escape_string( $params['RoleID'] );
  291. if( is_array($error = checkGroupPermission($groupID, $groupPowers['RoleProperties'])) )
  292. {
  293. return $error;
  294. }
  295. /// 1. Remove all members from Role
  296. /// 2. Set selected Role to uuidZero for anyone that had the role selected
  297. /// 3. Delete roll
  298. $sql = "DELETE FROM osgrouprolemembership WHERE GroupID = '$groupID' AND RoleID = '$roleID'";
  299. if (!mysql_query($sql, $groupDBCon))
  300. {
  301. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  302. }
  303. $sql = "UPDATE osgroupmembership SET SelectedRoleID = '$uuidZero' WHERE GroupID = '$groupID' AND SelectedRoleID = '$roleID'";
  304. if (!mysql_query($sql, $groupDBCon))
  305. {
  306. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  307. }
  308. $sql = "DELETE FROM osrole WHERE GroupID = '$groupID' AND RoleID = '$roleID'";
  309. if (!mysql_query($sql, $groupDBCon))
  310. {
  311. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  312. }
  313. return array("success" => "true");
  314. }
  315. function getGroup($params)
  316. {
  317. if( is_array($error = secureRequest($params, FALSE)) )
  318. {
  319. return $error;
  320. }
  321. return _getGroup($params);
  322. }
  323. function _getGroup($params)
  324. {
  325. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  326. $sql = " SELECT osgroup.GroupID, osgroup.Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID"
  327. ." , count(osrole.RoleID) as GroupRolesCount, count(osgroupmembership.AgentID) as GroupMembershipCount "
  328. ." FROM osgroup "
  329. ." LEFT JOIN osrole ON (osgroup.GroupID = osrole.GroupID)"
  330. ." LEFT JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID)"
  331. ." WHERE ";
  332. if( isset($params['GroupID']) )
  333. {
  334. $sql .= "osgroup.GroupID = '" . mysql_real_escape_string($params['GroupID']). "'";
  335. }
  336. else if( isset($params['Name']) )
  337. {
  338. $sql .= "osgroup.Name = '" . mysql_real_escape_string($params['Name']) . "'";
  339. }
  340. else
  341. {
  342. return array("error" => "Must specify GroupID or Name");
  343. }
  344. $sql .= " GROUP BY osgroup.GroupID, osgroup.name, charter, insigniaID, founderID, membershipFee, openEnrollment, showInList, allowPublish, maturePublish, ownerRoleID";
  345. $result = mysql_query($sql, $groupDBCon);
  346. if (!$result)
  347. {
  348. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  349. }
  350. if (mysql_num_rows($result) == 0)
  351. {
  352. return array('succeed' => 'false', 'error' => 'Group Not Found', 'params' => var_export($params, TRUE), 'sql' => $sql);
  353. }
  354. return mysql_fetch_assoc($result);
  355. }
  356. function updateGroup($params)
  357. {
  358. if( is_array($error = secureRequest($params, TRUE)) )
  359. {
  360. return $error;
  361. }
  362. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  363. $groupID = mysql_real_escape_string( $params["GroupID"] );
  364. $charter = mysql_real_escape_string( $params["Charter"] );
  365. $insigniaID = mysql_real_escape_string( $params["InsigniaID"] );
  366. $membershipFee = mysql_real_escape_string( $params["MembershipFee"] );
  367. $openEnrollment = mysql_real_escape_string( $params["OpenEnrollment"] );
  368. $showInList = mysql_real_escape_string( $params["ShowInList"] );
  369. $allowPublish = mysql_real_escape_string( $params["AllowPublish"] );
  370. $maturePublish = mysql_real_escape_string( $params["MaturePublish"] );
  371. if( is_array($error = checkGroupPermission($groupID, $groupPowers['ChangeOptions'])) )
  372. {
  373. return $error;
  374. }
  375. // Create group
  376. $sql = "UPDATE osgroup
  377. SET
  378. Charter = '$charter'
  379. , InsigniaID = '$insigniaID'
  380. , MembershipFee = $membershipFee
  381. , OpenEnrollment= $openEnrollment
  382. , ShowInList = $showInList
  383. , AllowPublish = $allowPublish
  384. , MaturePublish = $maturePublish
  385. WHERE
  386. GroupID = '$groupID'";
  387. if (!mysql_query($sql, $groupDBCon))
  388. {
  389. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  390. }
  391. return array('success' => 'true');
  392. }
  393. function findGroups($params)
  394. {
  395. if( is_array($error = secureRequest($params, FALSE)) )
  396. {
  397. return $error;
  398. }
  399. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  400. $search = mysql_real_escape_string( $params['Search'] );
  401. $sql = " SELECT osgroup.GroupID, osgroup.Name, count(osgroupmembership.AgentID) as Members "
  402. ." FROM osgroup LEFT JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID) "
  403. ." WHERE "
  404. ." ( MATCH (osgroup.name) AGAINST ('$search' IN BOOLEAN MODE)"
  405. ." OR osgroup.name LIKE '%$search%'"
  406. ." OR osgroup.name REGEXP '$search'"
  407. ." ) AND ShowInList = 1"
  408. ." GROUP BY osgroup.GroupID, osgroup.Name";
  409. $result = mysql_query($sql, $groupDBCon);
  410. if (!$result)
  411. {
  412. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  413. }
  414. if( mysql_num_rows($result) == 0 )
  415. {
  416. return array('succeed' => 'false', 'error' => 'No groups found.', 'params' => var_export($params, TRUE), 'sql' => $sql);
  417. }
  418. $results = array();
  419. while ($row = mysql_fetch_assoc($result))
  420. {
  421. $groupID = $row['GroupID'];
  422. $results[$groupID] = $row;
  423. }
  424. return array('results' => $results, 'success' => TRUE);
  425. }
  426. function _setAgentActiveGroup($params)
  427. {
  428. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  429. $agentID = mysql_real_escape_string( $params['AgentID'] );
  430. $groupID = mysql_real_escape_string( $params['GroupID'] );
  431. $sql = " UPDATE osagent "
  432. ." SET ActiveGroupID = '$groupID'"
  433. ." WHERE AgentID = '$agentID'";
  434. if (!mysql_query($sql, $groupDBCon))
  435. {
  436. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  437. }
  438. if( mysql_affected_rows() == 0 )
  439. {
  440. $sql = " INSERT INTO osagent (ActiveGroupID, AgentID) VALUES "
  441. ." ('$groupID', '$agentID')";
  442. if (!mysql_query($sql, $groupDBCon))
  443. {
  444. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  445. }
  446. }
  447. return array("success" => "true");
  448. }
  449. function setAgentActiveGroup($params)
  450. {
  451. if( is_array($error = secureRequest($params, TRUE)) )
  452. {
  453. return $error;
  454. }
  455. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  456. $agentID = $params['AgentID'];
  457. $groupID = $params['GroupID'];
  458. if( isset($requestingAgent) && ($requestingAgent != $uuidZero) && ($requestingAgent != $agentID) )
  459. {
  460. return array('error' => "Agent can only change their own Selected Group Role", 'params' => var_export($params, TRUE));
  461. }
  462. return _setAgentActiveGroup($params);
  463. }
  464. function addAgentToGroup($params)
  465. {
  466. if( is_array($error = secureRequest($params, TRUE)) )
  467. {
  468. return $error;
  469. }
  470. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  471. $groupID = $params["GroupID"];
  472. $agentID = $params["AgentID"];
  473. if( is_array($error = checkGroupPermission($groupID, $groupPowers['AssignMember'])) )
  474. {
  475. // If they don't have direct permission, check to see if the group is marked for open enrollment
  476. $groupInfo = _getGroup( array ('GroupID' => $groupID) );
  477. if( isset($groupInfo['error']))
  478. {
  479. return $groupInfo;
  480. }
  481. if($groupInfo['OpenEnrollment'] != 1)
  482. {
  483. $escapedAgentID = mysql_real_escape_string($agentID);
  484. $escapedGroupID = mysql_real_escape_string($groupID);
  485. // Group is not open enrollment, check if the specified agentid has an invite
  486. $sql = " SELECT GroupID, RoleID, AgentID FROM osgroupinvite"
  487. ." WHERE osgroupinvite.AgentID = '$escapedAgentID' AND osgroupinvite.GroupID = '$escapedGroupID'";
  488. $results = mysql_query($sql, $groupDBCon);
  489. if (!$results)
  490. {
  491. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  492. }
  493. if( mysql_num_rows($results) == 1 )
  494. {
  495. // if there is an invite, make sure we're adding the user to the role specified in the invite
  496. $inviteInfo = mysql_fetch_assoc($results);
  497. $params['RoleID'] = $inviteInfo['RoleID'];
  498. }
  499. else
  500. {
  501. // Not openenrollment, not invited, return permission denied error
  502. return $error;
  503. }
  504. }
  505. }
  506. return _addAgentToGroup($params);
  507. }
  508. // Private method, does not include security, to only be called from places that have already verified security
  509. function _addAgentToGroup($params)
  510. {
  511. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  512. $agentID = $params["AgentID"];
  513. $groupID = $params["GroupID"];
  514. $roleID = $uuidZero;
  515. if( isset($params["RoleID"]) )
  516. {
  517. $roleID = $params["RoleID"];
  518. }
  519. $escapedAgentID = mysql_real_escape_string($agentID);
  520. $escapedGroupID = mysql_real_escape_string($groupID);
  521. $escapedRoleID = mysql_real_escape_string($roleID);
  522. // Check if agent already a member
  523. $sql = " SELECT count(AgentID) as isMember FROM osgroupmembership WHERE AgentID = '$escapedAgentID' AND GroupID = '$escapedGroupID'";
  524. $result = mysql_query($sql, $groupDBCon);
  525. if (!$result)
  526. {
  527. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  528. }
  529. // If not a member, add membership, select role (defaults to uuidZero, or everyone role)
  530. if( mysql_result($result, 0) == 0 )
  531. {
  532. $sql = " INSERT INTO osgroupmembership (GroupID, AgentID, Contribution, ListInProfile, AcceptNotices, SelectedRoleID) VALUES "
  533. ."('$escapedGroupID','$escapedAgentID', 0, 1, 1,'$escapedRoleID')";
  534. if (!mysql_query($sql, $groupDBCon))
  535. {
  536. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  537. }
  538. }
  539. // Make sure they're in the Everyone role
  540. $result = _addAgentToGroupRole(array("GroupID" => $groupID, "RoleID" => $uuidZero, "AgentID" => $agentID));
  541. if( isset($result['error']) )
  542. {
  543. return $result;
  544. }
  545. // Make sure they're in specified role, if they were invited
  546. if( $roleID != $uuidZero )
  547. {
  548. $result = _addAgentToGroupRole(array("GroupID" => $groupID, "RoleID" => $roleID, "AgentID" => $agentID));
  549. if( isset($result['error']) )
  550. {
  551. return $result;
  552. }
  553. }
  554. //Set the role they were invited to as their selected role
  555. _setAgentGroupSelectedRole(array('AgentID' => $agentID, 'RoleID' => $roleID, 'GroupID' => $groupID));
  556. // Set the group as their active group.
  557. // _setAgentActiveGroup(array("GroupID" => $groupID, "AgentID" => $agentID));
  558. return array("success" => "true");
  559. }
  560. function removeAgentFromGroup($params)
  561. {
  562. if( is_array($error = secureRequest($params, TRUE)) )
  563. {
  564. return $error;
  565. }
  566. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  567. $agentID = $params["AgentID"];
  568. $groupID = $params["GroupID"];
  569. // An agent is always allowed to remove themselves from a group -- so only check if the requesting agent is different then the agent being removed.
  570. if( $agentID != $requestingAgent )
  571. {
  572. if( is_array($error = checkGroupPermission($groupID, $groupPowers['RemoveMember'])) )
  573. {
  574. return $error;
  575. }
  576. }
  577. $escapedAgentID = mysql_real_escape_string($agentID);
  578. $escapedGroupID = mysql_real_escape_string($groupID);
  579. // 1. If group is agent's active group, change active group to uuidZero
  580. // 2. Remove Agent from group (osgroupmembership)
  581. // 3. Remove Agent from all of the groups roles (osgrouprolemembership)
  582. $sql = " UPDATE osagent "
  583. ." SET ActiveGroupID = '$uuidZero'"
  584. ." WHERE AgentID = '$escapedAgentID' AND ActiveGroupID = '$escapedGroupID'";
  585. if (!mysql_query($sql, $groupDBCon))
  586. {
  587. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  588. }
  589. $sql = " DELETE FROM osgroupmembership "
  590. ." WHERE AgentID = '$agentID' AND GroupID = '$groupID'";
  591. if (!mysql_query($sql, $groupDBCon))
  592. {
  593. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  594. }
  595. $sql = " DELETE FROM osgrouprolemembership "
  596. ." WHERE AgentID = '$escapedAgentID' AND GroupID = '$escapedGroupID'";
  597. if (!mysql_query($sql, $groupDBCon))
  598. {
  599. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  600. }
  601. return array("success" => "true");
  602. }
  603. function _addAgentToGroupRole($params)
  604. {
  605. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  606. $agentID = mysql_real_escape_string($params["AgentID"]);
  607. $groupID = mysql_real_escape_string($params["GroupID"]);
  608. $roleID = mysql_real_escape_string($params["RoleID"]);
  609. // Check if agent already a member
  610. $sql = " SELECT count(AgentID) as isMember FROM osgrouprolemembership WHERE AgentID = '$agentID' AND RoleID = '$roleID' AND GroupID = '$groupID'";
  611. $result = mysql_query($sql, $groupDBCon);
  612. if (!$result)
  613. {
  614. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  615. }
  616. if( mysql_result($result, 0) == 0 )
  617. {
  618. $sql = " INSERT INTO osgrouprolemembership (GroupID, RoleID, AgentID) VALUES "
  619. ."('$groupID', '$roleID', '$agentID')";
  620. if (!mysql_query($sql, $groupDBCon))
  621. {
  622. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  623. }
  624. }
  625. return array("success" => "true");
  626. }
  627. function addAgentToGroupRole($params)
  628. {
  629. if( is_array($error = secureRequest($params, TRUE)) )
  630. {
  631. return $error;
  632. }
  633. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  634. $agentID = $params["AgentID"];
  635. $groupID = $params["GroupID"];
  636. $roleID = $params["RoleID"];
  637. $escapedAgentID = mysql_real_escape_string($agentID);
  638. $escapedGroupID = mysql_real_escape_string($groupID);
  639. $escapedRoleID = mysql_real_escape_string($roleID);
  640. // Check if being assigned to Owners role, assignments to an owners role can only be requested by owners.
  641. $sql = " SELECT OwnerRoleID, osgrouprolemembership.AgentID "
  642. ." FROM osgroup LEFT JOIN osgrouprolemembership ON (osgroup.GroupID = osgrouprolemembership.GroupID AND osgroup.OwnerRoleID = osgrouprolemembership.RoleID) "
  643. ." WHERE osgrouprolemembership.AgentID = '" . mysql_real_escape_string($requestingAgent) . "' AND osgroup.GroupID = '$escapedGroupID'";
  644. $results = mysql_query($sql, $groupDBCon);
  645. if (!$results)
  646. {
  647. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  648. }
  649. if( mysql_num_rows($results) == 0 )
  650. {
  651. return array('error' => "Group ($groupID) not found or Agent ($agentID) is not in the owner's role", 'params' => var_export($params, TRUE));
  652. }
  653. $ownerRoleInfo = mysql_fetch_assoc($results);
  654. if( ($ownerRoleInfo['OwnerRoleID'] == $roleID) && ($ownerRoleInfo['AgentID'] != $requestingAgent) )
  655. {
  656. return array('error' => "Requesting agent $requestingAgent is not a member of the Owners Role and cannot add members to the owners role.", 'params' => var_export($params, TRUE));
  657. }
  658. if( is_array($error = checkGroupPermission($groupID, $groupPowers['AssignMember'])) )
  659. {
  660. return $error;
  661. }
  662. return _addAgentToGroupRole($params);
  663. }
  664. function removeAgentFromGroupRole($params)
  665. {
  666. if( is_array($error = secureRequest($params, TRUE)) )
  667. {
  668. return $error;
  669. }
  670. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  671. $agentID = mysql_real_escape_string($params["AgentID"]);
  672. $groupID = mysql_real_escape_string($params["GroupID"]);
  673. $roleID = mysql_real_escape_string($params["RoleID"]);
  674. if( is_array($error = checkGroupPermission($groupID, $groupPowers['AssignMember'])) )
  675. {
  676. return $error;
  677. }
  678. // If agent has this role selected, change their selection to everyone (uuidZero) role
  679. $sql = " UPDATE osgroupmembership SET SelectedRoleID = '$uuidZero' WHERE AgentID = '$agentID' AND GroupID = '$groupID' AND SelectedRoleID = '$roleID'";
  680. $result = mysql_query($sql, $groupDBCon);
  681. if (!$result)
  682. {
  683. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  684. }
  685. $sql = " DELETE FROM osgrouprolemembership WHERE AgentID = '$agentID' AND GroupID = '$groupID' AND RoleID = '$roleID'";
  686. if (!mysql_query($sql, $groupDBCon))
  687. {
  688. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  689. }
  690. return array("success" => "true");
  691. }
  692. function _setAgentGroupSelectedRole($params)
  693. {
  694. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  695. $agentID = mysql_real_escape_string($params["AgentID"]);
  696. $groupID = mysql_real_escape_string($params["GroupID"]);
  697. $roleID = mysql_real_escape_string($params["RoleID"]);
  698. $sql = " UPDATE osgroupmembership SET SelectedRoleID = '$roleID' WHERE AgentID = '$agentID' AND GroupID = '$groupID'";
  699. $result = mysql_query($sql, $groupDBCon);
  700. if (!$result)
  701. {
  702. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  703. }
  704. return array('success' => 'true');
  705. }
  706. function setAgentGroupSelectedRole($params)
  707. {
  708. if( is_array($error = secureRequest($params, TRUE)) )
  709. {
  710. return $error;
  711. }
  712. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  713. $agentID = $params["AgentID"];
  714. $groupID = $params["GroupID"];
  715. $roleID = $params["RoleID"];
  716. if( isset($requestingAgent) && ($requestingAgent != $uuidZero) && ($requestingAgent != $agentID) )
  717. {
  718. return array('error' => "Agent can only change their own Selected Group Role", 'params' => var_export($params, TRUE));
  719. }
  720. return _setAgentGroupSelectedRole($params);
  721. }
  722. function getAgentGroupMembership($params)
  723. {
  724. if( is_array($error = secureRequest($params, FALSE)) )
  725. {
  726. return $error;
  727. }
  728. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  729. $groupID = mysql_real_escape_string($params['GroupID']);
  730. $agentID = mysql_real_escape_string($params['AgentID']);
  731. $sql = " SELECT osgroup.GroupID, osgroup.Name as GroupName, osgroup.Charter, osgroup.InsigniaID, osgroup.FounderID, osgroup.MembershipFee, osgroup.OpenEnrollment, osgroup.ShowInList, osgroup.AllowPublish, osgroup.MaturePublish"
  732. ." , osgroupmembership.Contribution, osgroupmembership.ListInProfile, osgroupmembership.AcceptNotices"
  733. ." , osgroupmembership.SelectedRoleID, osrole.Title"
  734. ." , osagent.ActiveGroupID "
  735. ." FROM osgroup JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID)"
  736. ." JOIN osrole ON (osgroupmembership.SelectedRoleID = osrole.RoleID AND osgroupmembership.GroupID = osrole.GroupID)"
  737. ." JOIN osagent ON (osagent.AgentID = osgroupmembership.AgentID)"
  738. ." WHERE osgroup.GroupID = '$groupID' AND osgroupmembership.AgentID = '$agentID'";
  739. $groupmembershipResult = mysql_query($sql, $groupDBCon);
  740. if (!$groupmembershipResult)
  741. {
  742. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  743. }
  744. if( mysql_num_rows($groupmembershipResult) == 0 )
  745. {
  746. return array('succeed' => 'false', 'error' => 'None Found', 'params' => var_export($params, TRUE), 'sql' => $sql);
  747. }
  748. $groupMembershipInfo = mysql_fetch_assoc($groupmembershipResult);
  749. $sql = " SELECT BIT_OR(osrole.Powers) AS GroupPowers"
  750. ." FROM osgrouprolemembership JOIN osrole ON (osgrouprolemembership.GroupID = osrole.GroupID AND osgrouprolemembership.RoleID = osrole.RoleID)"
  751. ." WHERE osgrouprolemembership.GroupID = '$groupID' AND osgrouprolemembership.AgentID = '$agentID'";
  752. $groupPowersResult = mysql_query($sql, $groupDBCon);
  753. if (!$groupPowersResult)
  754. {
  755. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  756. }
  757. $groupPowersInfo = mysql_fetch_assoc($groupPowersResult);
  758. return array_merge($groupMembershipInfo, $groupPowersInfo);
  759. }
  760. function getAgentGroupMemberships($params)
  761. {
  762. if( is_array($error = secureRequest($params, FALSE)) )
  763. {
  764. return $error;
  765. }
  766. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  767. $agentID = mysql_real_escape_string($params['AgentID']);
  768. $sql = " SELECT osgroup.GroupID, osgroup.Name as GroupName, osgroup.Charter, osgroup.InsigniaID, osgroup.FounderID, osgroup.MembershipFee, osgroup.OpenEnrollment, osgroup.ShowInList, osgroup.AllowPublish, osgroup.MaturePublish"
  769. ." , osgroupmembership.Contribution, osgroupmembership.ListInProfile, osgroupmembership.AcceptNotices"
  770. ." , osgroupmembership.SelectedRoleID, osrole.Title"
  771. ." , IFNULL(osagent.ActiveGroupID, '$uuidZero') AS ActiveGroupID"
  772. ." FROM osgroup JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID)"
  773. ." JOIN osrole ON (osgroupmembership.SelectedRoleID = osrole.RoleID AND osgroupmembership.GroupID = osrole.GroupID)"
  774. ." LEFT JOIN osagent ON (osagent.AgentID = osgroupmembership.AgentID)"
  775. ." WHERE osgroupmembership.AgentID = '$agentID'";
  776. $groupmembershipResults = mysql_query($sql, $groupDBCon);
  777. if (!$groupmembershipResults)
  778. {
  779. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  780. }
  781. if( mysql_num_rows($groupmembershipResults) == 0 )
  782. {
  783. return array('succeed' => 'false', 'error' => 'No Memberships', 'params' => var_export($params, TRUE), 'sql' => $sql);
  784. }
  785. $groupResults = array();
  786. while($groupMembershipInfo = mysql_fetch_assoc($groupmembershipResults))
  787. {
  788. $groupID = $groupMembershipInfo['GroupID'];
  789. $sql = " SELECT BIT_OR(osrole.Powers) AS GroupPowers"
  790. ." FROM osgrouprolemembership JOIN osrole ON (osgrouprolemembership.GroupID = osrole.GroupID AND osgrouprolemembership.RoleID = osrole.RoleID)"
  791. ." WHERE osgrouprolemembership.GroupID = '$groupID' AND osgrouprolemembership.AgentID = '$agentID'";
  792. $groupPowersResult = mysql_query($sql, $groupDBCon);
  793. if (!$groupPowersResult)
  794. {
  795. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  796. }
  797. $groupPowersInfo = mysql_fetch_assoc($groupPowersResult);
  798. $groupResults[$groupID] = array_merge($groupMembershipInfo, $groupPowersInfo);
  799. }
  800. return $groupResults;
  801. }
  802. // Parameters should not already be mysql_real_escape_string() escaped
  803. function canAgentViewRoleMembers( $agentID, $groupID, $roleID )
  804. {
  805. global $membersVisibleTo, $groupDBCon;
  806. if( $membersVisibleTo == 'All' )
  807. return true;
  808. $agentID = mysql_real_escape_string($agentID);
  809. $groupID = mysql_real_escape_string($groupID);
  810. $roleID = mysql_real_escape_string($roleID);
  811. $sql = " SELECT CASE WHEN min(OwnerRoleMembership.AgentID) IS NOT NULL THEN 1 ELSE 0 END AS IsOwner ";
  812. $sql .= " FROM osgroup JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID AND osgroupmembership.AgentID = '$agentID')";
  813. $sql .= " LEFT JOIN osgrouprolemembership AS OwnerRoleMembership ON (OwnerRoleMembership.GroupID = osgroup.GroupID ";
  814. $sql .= " AND OwnerRoleMembership.RoleID = osgroup.OwnerRoleID ";
  815. $sql .= " AND OwnerRoleMembership.AgentID = '$agentID')";
  816. $sql .= " WHERE osgroup.GroupID = '$groupID' GROUP BY osgroup.GroupID";
  817. $viewMemberResults = mysql_query($sql, $groupDBCon);
  818. if (!$viewMemberResults)
  819. {
  820. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error());
  821. }
  822. if (mysql_num_rows($viewMemberResults) == 0)
  823. {
  824. return false;
  825. }
  826. $viewMemberInfo = mysql_fetch_assoc($viewMemberResults);
  827. switch( $membersVisibleTo )
  828. {
  829. case 'Group':
  830. // if we get to here, there is at least one row, so they are a member of the group
  831. return true;
  832. case 'Owners':
  833. default:
  834. return $viewMemberInfo['IsOwner'];
  835. }
  836. }
  837. function getGroupMembers($params)
  838. {
  839. if( is_array($error = secureRequest($params, FALSE)) )
  840. {
  841. return $error;
  842. }
  843. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon, $groupPowers;
  844. $groupID = $params['GroupID'];
  845. $escapedGroupID = mysql_real_escape_string($groupID);
  846. $sql = " SELECT osgroupmembership.AgentID"
  847. ." , osgroupmembership.Contribution, osgroupmembership.ListInProfile, osgroupmembership.AcceptNotices"
  848. ." , osgroupmembership.SelectedRoleID, osrole.Title"
  849. ." , CASE WHEN OwnerRoleMembership.AgentID IS NOT NULL THEN 1 ELSE 0 END AS IsOwner"
  850. ." FROM osgroup JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID)"
  851. ." JOIN osrole ON (osgroupmembership.SelectedRoleID = osrole.RoleID AND osgroupmembership.GroupID = osrole.GroupID)"
  852. ." JOIN osrole AS OwnerRole ON (osgroup.OwnerRoleID = OwnerRole.RoleID AND osgroup.GroupID = OwnerRole.GroupID)"
  853. ." LEFT JOIN osgrouprolemembership AS OwnerRoleMembership ON (osgroup.OwnerRoleID = OwnerRoleMembership.RoleID
  854. AND (osgroup.GroupID = OwnerRoleMembership.GroupID)
  855. AND (osgroupmembership.AgentID = OwnerRoleMembership.AgentID))"
  856. ." WHERE osgroup.GroupID = '$escapedGroupID'";
  857. $groupmemberResults = mysql_query($sql, $groupDBCon);
  858. if (!$groupmemberResults)
  859. {
  860. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  861. }
  862. if (mysql_num_rows($groupmemberResults) == 0)
  863. {
  864. return array('succeed' => 'false', 'error' => 'No Group Members found', 'params' => var_export($params, TRUE), 'sql' => $sql);
  865. }
  866. $roleMembersVisibleBit = $groupPowers['RoleMembersVisible'];
  867. $canViewAllGroupRoleMembers = canAgentViewRoleMembers($requestingAgent, $groupID, '');
  868. $memberResults = array();
  869. while ($memberInfo = mysql_fetch_assoc($groupmemberResults))
  870. {
  871. $agentID = $memberInfo['AgentID'];
  872. $sql = " SELECT BIT_OR(osrole.Powers) AS AgentPowers, ( BIT_OR(osrole.Powers) & $roleMembersVisibleBit) as MemberVisible"
  873. ." FROM osgrouprolemembership JOIN osrole ON (osgrouprolemembership.GroupID = osrole.GroupID AND osgrouprolemembership.RoleID = osrole.RoleID)"
  874. ." WHERE osgrouprolemembership.GroupID = '$escapedGroupID' AND osgrouprolemembership.AgentID = '$agentID'";
  875. $memberPowersResult = mysql_query($sql, $groupDBCon);
  876. if (!$memberPowersResult)
  877. {
  878. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  879. }
  880. $memberPowersCount = mysql_num_rows($memberPowersResult);
  881. error_log("Found $memberPowersCount rows for agent $agentID for requesting agent $requestingAgent");
  882. if ($memberPowersCount == 0)
  883. {
  884. if ($canViewAllGroupRoleMembers || $agentID == $requestingAgent)
  885. {
  886. $memberResults[$agentID] = array_merge($memberInfo, array('AgentPowers' => 0));
  887. }
  888. else
  889. {
  890. // if can't view all group role members and there is no Member Visible bit, then don't return this member's info
  891. unset($memberResults[$agentID]);
  892. }
  893. }
  894. else
  895. {
  896. $memberPowersInfo = mysql_fetch_assoc($memberPowersResult);
  897. if ($memberPowersInfo['MemberVisible'] || $canViewAllGroupRoleMembers || $agentID == $requestingAgent)
  898. {
  899. $memberResults[$agentID] = array_merge($memberInfo, $memberPowersInfo);
  900. }
  901. else
  902. {
  903. // if can't view all group role members and there is no Member Visible bit, then don't return this member's info
  904. unset($memberResults[$agentID]);
  905. }
  906. }
  907. }
  908. error_log("Returning " . count($memberResults) . " visible members for group $groupID for agent $agentID");
  909. if (count($memberResults) == 0)
  910. {
  911. return array('succeed' => 'false', 'error' => 'No Visible Group Members found', 'params' => var_export($params, TRUE), 'sql' => $sql);
  912. }
  913. return $memberResults;
  914. }
  915. function getAgentActiveMembership($params)
  916. {
  917. if( is_array($error = secureRequest($params, FALSE)) )
  918. {
  919. return $error;
  920. }
  921. global $groupEnforceGroupPerms, $requestingAgent, $uuidZero, $groupDBCon;
  922. $agentID = mysql_real_escape_string($params['AgentID']);
  923. $sql = " SELECT osgroup.GroupID, osgroup.Name as GroupName, osgroup.Charter, osgroup.InsigniaID, osgroup.FounderID, osgroup.MembershipFee, osgroup.OpenEnrollment, osgroup.ShowInList, osgroup.AllowPublish, osgroup.MaturePublish"
  924. ." , osgroupmembership.Contribution, osgroupmembership.ListInProfile, osgroupmembership.AcceptNotices"
  925. ." , osgroupmembership.SelectedRoleID, osrole.Title"
  926. ." , osagent.ActiveGroupID "
  927. ." FROM osagent JOIN osgroup ON (osgroup.GroupID = osagent.ActiveGroupID)"
  928. ." JOIN osgroupmembership ON (osgroup.GroupID = osgroupmembership.GroupID AND osagent.AgentID = osgroupmembership.AgentID)"
  929. ." JOIN osrole ON (osgroupmembership.SelectedRoleID = osrole.RoleID AND osgroupmembership.GroupID = osrole.GroupID)"
  930. ." WHERE osagent.AgentID = '$agentID'";
  931. $groupmembershipResult = mysql_query($sql, $groupDBCon);
  932. if (!$groupmembershipResult)
  933. {
  934. return array('error' => "Could not successfully run query ($sql) from DB: " . mysql_error(), 'params' => var_export($params, TRUE));
  935. }
  936. if (mysql_num_rows($groupmembershipResult) == 0)
  937. {
  938. return arra

Large files files are truncated, but you can click here to view the full file