diff options
Diffstat (limited to 'engine/lib/group.php')
| -rw-r--r-- | engine/lib/group.php | 469 | 
1 files changed, 469 insertions, 0 deletions
diff --git a/engine/lib/group.php b/engine/lib/group.php index 7b3f76e27..e69ae6070 100644 --- a/engine/lib/group.php +++ b/engine/lib/group.php @@ -79,6 +79,23 @@ function create_group_entity($guid, $name, $description) {  }  /** + * THIS FUNCTION IS DEPRECATED. + * + * Delete a group's extra data. + * + * @param int $guid The guid of the group + * + * @return bool + * @deprecated 1.6 + */ +function delete_group_entity($guid) { +	elgg_deprecated_notice("delete_group_entity has been deprecated", 1.6); + +	// Always return that we have deleted one row in order to not break existing code. +	return 1; +} + +/**   * Add an object to the given group.   *   * @param int $group_guid  The group to add the object to. @@ -147,6 +164,352 @@ function remove_object_from_group($group_guid, $object_guid) {  }  /** + * Return an array of objects in a given container. + * + * @see get_entities() + * + * @param int    $group_guid The container (defaults to current page owner) + * @param string $subtype    The subtype + * @param int    $owner_guid Owner + * @param int    $site_guid  The site + * @param string $order_by   Order + * @param int    $limit      Limit on number of elements to return, by default 10. + * @param int    $offset     Where to start, by default 0. + * @param bool   $count      Whether to return the entities or a count of them. + * + * @return array|false + * @deprecated 1.8 Use elgg_get_entities() instead + */ +function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = FALSE) { +	elgg_deprecated_notice("get_objects_in_group was deprected in 1.8.  Use elgg_get_entities() instead", 1.8); + +	global $CONFIG; + +	if ($subtype === FALSE || $subtype === null || $subtype === 0) { +		return FALSE; +	} + +	if ($order_by == "") { +		$order_by = "e.time_created desc"; +	} +	$order_by = sanitise_string($order_by); +	$limit = (int)$limit; +	$offset = (int)$offset; +	$site_guid = (int) $site_guid; +	if ($site_guid == 0) { +		$site_guid = $CONFIG->site_guid; +	} + +	$container_guid = (int)$group_guid; +	if ($container_guid == 0) { +		$container_guid = elgg_get_page_owner_guid(); +	} + +	$where = array(); + +	$where[] = "e.type='object'"; + +	if (!empty($subtype)) { +		if (!$subtype = get_subtype_id('object', $subtype)) { +			return FALSE; +		} +		$where[] = "e.subtype=$subtype"; +	} +	if ($owner_guid != "") { +		if (!is_array($owner_guid)) { +			$owner_guid = (int) $owner_guid; +			$where[] = "e.container_guid = '$owner_guid'"; +		} else if (sizeof($owner_guid) > 0) { +			// Cast every element to the owner_guid array to int +			$owner_guid = array_map("sanitise_int", $owner_guid); +			$owner_guid = implode(",", $owner_guid); +			$where[] = "e.container_guid in ({$owner_guid})"; +		} +	} +	if ($site_guid > 0) { +		$where[] = "e.site_guid = {$site_guid}"; +	} + +	if ($container_guid > 0) { +		$where[] = "e.container_guid = {$container_guid}"; +	} + +	if (!$count) { +		$query = "SELECT * from {$CONFIG->dbprefix}entities e" +			. " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; +	} else { +		$query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e" +			. " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; +	} +	foreach ($where as $w) { +		$query .= " $w and "; +	} + +	// Add access controls +	$query .= get_access_sql_suffix('e'); +	if (!$count) { +		$query .= " order by $order_by"; + +		// Add order and limit +		if ($limit) { +			$query .= " limit $offset, $limit"; +		} + +		$dt = get_data($query, "entity_row_to_elggstar"); +		return $dt; +	} else { +		$total = get_data_row($query); +		return $total->total; +	} +} + +/** + * Lists entities that belong to a group. + * + * @param string $subtype        The arbitrary subtype of the entity + * @param int    $owner_guid     The GUID of the owning user + * @param int    $container_guid The GUID of the containing group + * @param int    $limit          The number of entities to display per page (default: 10) + * @param bool   $fullview       Whether or not to display the full view (default: true) + * @param bool   $listtypetoggle Whether or not to allow gallery view (default: true) + * @param bool   $pagination     Whether to display pagination (default: true) + * + * @return string List of parsed entities + * + * @see elgg_list_entities() + * @deprecated 1.8 Use elgg_list_entities() instead + */ +function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, +$limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) { +	elgg_deprecated_notice("list_entities_groups was deprecated in 1.8.  Use elgg_list_entities() instead.", 1.8); +	$offset = (int) get_input('offset'); +	$count = get_objects_in_group($container_guid, $subtype, $owner_guid, +		0, "", $limit, $offset, true); +	$entities = get_objects_in_group($container_guid, $subtype, $owner_guid, +		0, "", $limit, $offset); + +	return elgg_view_entity_list($entities, $count, $offset, $limit, +		$fullview, $listtypetoggle, $pagination); +} + +/** + * Get all the entities from metadata from a group. + * + * @param int    $group_guid     The ID of the group. + * @param mixed  $meta_name      Metadata name + * @param mixed  $meta_value     Metadata value + * @param string $entity_type    The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param int    $owner_guid     Owner guid + * @param int    $limit          Limit + * @param int    $offset         Offset + * @param string $order_by       Optional ordering. + * @param int    $site_guid      Site GUID. 0 for current, -1 for any + * @param bool   $count          Return count instead of entities + * + * @return array|false + * @deprecated 1.8 Use elgg_get_entities_from_metadata() + */ +function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", +$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, +$order_by = "", $site_guid = 0, $count = false) { +	elgg_deprecated_notice("get_entities_from_metadata_groups was deprecated in 1.8.", 1.8); +	global $CONFIG; + +	$meta_n = get_metastring_id($meta_name); +	$meta_v = get_metastring_id($meta_value); + +	$entity_type = sanitise_string($entity_type); +	$entity_subtype = get_subtype_id($entity_type, $entity_subtype); +	$limit = (int)$limit; +	$offset = (int)$offset; +	if ($order_by == "") { +		$order_by = "e.time_created desc"; +	} +	$order_by = sanitise_string($order_by); +	$site_guid = (int) $site_guid; +	if (is_array($owner_guid)) { +		foreach ($owner_guid as $key => $guid) { +			$owner_guid[$key] = (int) $guid; +		} +	} else { +		$owner_guid = (int) $owner_guid; +	} +	if ($site_guid == 0) { +		$site_guid = $CONFIG->site_guid; +	} + +	$container_guid = (int)$group_guid; +	if ($container_guid == 0) { +		$container_guid = elgg_get_page_owner_guid(); +	} + +	$where = array(); + +	if ($entity_type != "") { +		$where[] = "e.type='$entity_type'"; +	} +	if ($entity_subtype) { +		$where[] = "e.subtype=$entity_subtype"; +	} +	if ($meta_name != "") { +		$where[] = "m.name_id='$meta_n'"; +	} +	if ($meta_value != "") { +		$where[] = "m.value_id='$meta_v'"; +	} +	if ($site_guid > 0) { +		$where[] = "e.site_guid = {$site_guid}"; +	} +	if ($container_guid > 0) { +		$where[] = "e.container_guid = {$container_guid}"; +	} + +	if (is_array($owner_guid)) { +		$where[] = "e.container_guid in (" . implode(",", $owner_guid ) . ")"; +	} else if ($owner_guid > 0) { +		$where[] = "e.container_guid = {$owner_guid}"; +	} + +	if (!$count) { +		$query = "SELECT distinct e.* "; +	} else { +		$query = "SELECT count(e.guid) as total "; +	} + +	$query .= "from {$CONFIG->dbprefix}entities e" +		. " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid " +		. " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where"; + +	foreach ($where as $w) { +		$query .= " $w and "; +	} + +	// Add access controls +	$query .= get_access_sql_suffix("e"); + +	if (!$count) { +		$query .= " order by $order_by limit $offset, $limit"; // Add order and limit +		return get_data($query, "entity_row_to_elggstar"); +	} else { +		if ($row = get_data_row($query)) { +			return $row->total; +		} +	} +	return false; +} + +/** + * As get_entities_from_metadata_groups() but with multiple entities. + * + * @param int    $group_guid     The ID of the group. + * @param array  $meta_array     Array of 'name' => 'value' pairs + * @param string $entity_type    The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param int    $owner_guid     Owner GUID + * @param int    $limit          Limit + * @param int    $offset         Offset + * @param string $order_by       Optional ordering. + * @param int    $site_guid      Site GUID. 0 for current, -1 for any + * @param bool   $count          Return count of entities instead of entities + * + * @return int|array List of ElggEntities, or the total number if count is set to false + * @deprecated 1.8 Use elgg_get_entities_from_metadata() + */ +function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", +$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", +$site_guid = 0, $count = false) { +	elgg_deprecated_notice("get_entities_from_metadata_groups_multi was deprecated in 1.8.", 1.8); + +	global $CONFIG; + +	if (!is_array($meta_array) || sizeof($meta_array) == 0) { +		return false; +	} + +	$where = array(); + +	$mindex = 1; +	$join = ""; +	foreach ($meta_array as $meta_name => $meta_value) { +		$meta_n = get_metastring_id($meta_name); +		$meta_v = get_metastring_id($meta_value); +		$join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid" +			. " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid "; + +		if ($meta_name != "") { +			$where[] = "m{$mindex}.name_id='$meta_n'"; +		} + +		if ($meta_value != "") { +			$where[] = "m{$mindex}.value_id='$meta_v'"; +		} + +		$mindex++; +	} + +	$entity_type = sanitise_string($entity_type); +	$entity_subtype = get_subtype_id($entity_type, $entity_subtype); +	$limit = (int)$limit; +	$offset = (int)$offset; +	if ($order_by == "") { +		$order_by = "e.time_created desc"; +	} +	$order_by = sanitise_string($order_by); +	$owner_guid = (int) $owner_guid; + +	$site_guid = (int) $site_guid; +	if ($site_guid == 0) { +		$site_guid = $CONFIG->site_guid; +	} + +	//$access = get_access_list(); + +	if ($entity_type != "") { +		$where[] = "e.type = '{$entity_type}'"; +	} + +	if ($entity_subtype) { +		$where[] = "e.subtype = {$entity_subtype}"; +	} + +	if ($site_guid > 0) { +		$where[] = "e.site_guid = {$site_guid}"; +	} + +	if ($owner_guid > 0) { +		$where[] = "e.owner_guid = {$owner_guid}"; +	} + +	if ($container_guid > 0) { +		$where[] = "e.container_guid = {$container_guid}"; +	} + +	if ($count) { +		$query = "SELECT count(e.guid) as total "; +	} else { +		$query = "SELECT distinct e.* "; +	} + +	$query .= " from {$CONFIG->dbprefix}entities e {$join} where"; +	foreach ($where as $w) { +		$query .= " $w and "; +	} +	$query .= get_access_sql_suffix("e"); // Add access controls + +	if (!$count) { +		$query .= " order by $order_by limit $offset, $limit"; // Add order and limit +		return get_data($query, "entity_row_to_elggstar"); +	} else { +		if ($count = get_data_row($query)) { +			return $count->total; +		} +	} +	return false; +} + +/**   * Return a list of this group's members.   *   * @param int  $group_guid The ID of the container/group. @@ -332,3 +695,109 @@ function remove_group_tool_option($name) {  		}  	}  } + + +/** + * Searches for a group based on a complete or partial name or description + * + * @param string  $criteria The partial or full name or description + * @param int     $limit    Limit of the search. + * @param int     $offset   Offset. + * @param string  $order_by The order. + * @param boolean $count    Whether to return the count of results or just the results. + * + * @return mixed + * @deprecated 1.7 + */ +function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) { +	elgg_deprecated_notice('search_for_group() was deprecated by new search plugin.', 1.7); +	global $CONFIG; + +	$criteria = sanitise_string($criteria); +	$limit = (int)$limit; +	$offset = (int)$offset; +	$order_by = sanitise_string($order_by); + +	$access = get_access_sql_suffix("e"); + +	if ($order_by == "") { +		$order_by = "e.time_created desc"; +	} + +	if ($count) { +		$query = "SELECT count(e.guid) as total "; +	} else { +		$query = "SELECT e.* "; +	} +	$query .= "from {$CONFIG->dbprefix}entities e" +		. " JOIN {$CONFIG->dbprefix}groups_entity g on e.guid=g.guid where "; + +	$query .= "(g.name like \"%{$criteria}%\" or g.description like \"%{$criteria}%\")"; +	$query .= " and $access"; + +	if (!$count) { +		$query .= " order by $order_by limit $offset, $limit"; // Add order and limit +		return get_data($query, "entity_row_to_elggstar"); +	} else { +		if ($count = get_data_row($query)) { +			return $count->total; +		} +	} +	return false; +} + +/** + * Returns a formatted list of groups suitable for injecting into search. + * + * @deprecated 1.7 + * + * @param string $hook        Hook name + * @param string $user        User + * @param mixed  $returnvalue Previous hook's return value + * @param string $tag         Tag to search on + * + * @return string + */ +function search_list_groups_by_name($hook, $user, $returnvalue, $tag) { +	elgg_deprecated_notice('search_list_groups_by_name() was deprecated by new search plugin', 1.7); +	// Change this to set the number of groups that display on the search page +	$threshold = 4; + +	$object = get_input('object'); + +	if (!get_input('offset') && (empty($object) || $object == 'group')) { +		if ($groups = search_for_group($tag, $threshold)) { +			$countgroups = search_for_group($tag, 0, 0, "", true); + +			$return = elgg_view('group/search/startblurb', array('count' => $countgroups, 'tag' => $tag)); +			foreach ($groups as $group) { +				$return .= elgg_view_entity($group); +			} +			$vars = array('count' => $countgroups, 'threshold' => $threshold, 'tag' => $tag); +			$return .= elgg_view('group/search/finishblurb', $vars); +			return $return; +		} +	} +} + +/** + * Displays a list of group objects that have been searched for. + * + * @see elgg_view_entity_list + * + * @param string $tag   Search criteria + * @param int    $limit The number of entities to display on a page + * + * @return string The list in a form suitable to display + * @deprecated 1.7 + */ +function list_group_search($tag, $limit = 10) { +	elgg_deprecated_notice('list_group_search() was deprecated by new search plugin.', 1.7); +	$offset = (int) get_input('offset'); +	$limit = (int) $limit; +	$count = (int) search_for_group($tag, 10, 0, '', true); +	$entities = search_for_group($tag, $limit, $offset); + +	return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, false); + +}  | 
