aboutsummaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/lib/relationships.php21
1 files changed, 14 insertions, 7 deletions
diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php
index 409de0015..d98daffab 100644
--- a/engine/lib/relationships.php
+++ b/engine/lib/relationships.php
@@ -704,6 +704,7 @@
* metadata
*
* @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
* @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" (default: true)
* @param String $meta_name The metadata name
* @param String $meta_value The metadata value
@@ -716,15 +717,17 @@
* @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
* @return array|int|false An array of entities, or the number of entities, or false on failure
*/
- function get_entities_from_relationships_and_meta($relationship, $inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0)
+ function get_entities_from_relationships_and_meta($relationship, $relationship_guid, $inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0)
{
global $CONFIG;
$relationship = sanitise_string($relationship);
$inverse_relationship = (bool)$inverse_relationship;
+ $relationship_guid = (int)$relationship_guid;
$type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
+ if ($subtype)
+ $subtype = get_subtype_id($type, $subtype);
$owner_guid = (int)$owner_guid;
$order_by = sanitise_string($order_by);
$limit = (int)$limit;
@@ -742,11 +745,11 @@
if ($relationship!="")
$where[] = "r.relationship='$relationship'";
- if ($inverse_relationship) {
- $on = 'e.guid = r.guid_two';
- } else {
- $on = 'e.guid = r.guid_one';
- }
+
+ $on = "e.guid = r.guid_one";
+ if (!$inverse_relationship)
+ $on = "e.guid = r.guid_two";
+
if ($type != "")
$where[] = "e.type='$type'";
if ($subtype)
@@ -755,6 +758,9 @@
$where[] = "e.container_guid='$owner_guid'";
if ($site_guid > 0)
$where[] = "e.site_guid = {$site_guid}";
+ if ($relationship_guid)
+ $where[] = ($inverse_relationship ? "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'");
+
$metajoin = "";
if (($meta_name!=="") || ($meta_value!=="")) {
@@ -783,6 +789,7 @@
if (!$count) {
$query .= " group by e.guid ";
$query .= " order by total desc limit {$offset}, {$limit}"; // Add order and limit
+
return get_data($query, "entity_row_to_elggstar");
} else {
if ($count = get_data_row($query)) {