]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Deprecated get_entities_from_metadata() and get_entities_from_metadata_multi().
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 28 Oct 2009 18:15:37 +0000 (18:15 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 28 Oct 2009 18:15:37 +0000 (18:15 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@3592 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/entities.php
engine/lib/metadata.php

index 9c05377091eef9ce889dd95bfe2d12cc5d3a3818..3c2adc5ed8561864fdec29e80228107aa25a417e 100644 (file)
@@ -1751,6 +1751,7 @@ function elgg_get_entities(array $options = array()) {
                        $query .= " LIMIT $offset, $limit";
                }
                $dt = get_data($query, "entity_row_to_elggstar");
+
                //@todo normalize this to array()
                return $dt;
        } else {
@@ -1777,7 +1778,7 @@ function elgg_get_entities(array $options = array()) {
 function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0,
 $count = false, $site_guid = 0, $container_guid = null, $timelower = 0, $timeupper = 0) {
 
-       elgg_log('get_entities() is deprecated in 1.7 by elgg_get_entities()!', 'WARNING');
+       elgg_log('get_entities() was deprecated in 1.7 by elgg_get_entities()!', 'WARNING');
        // rewrite owner_guid to container_guid to emulate old functionality
        $container_guid = $owner_guid;
        $owner_guid = NULL;
@@ -2137,7 +2138,7 @@ function elgg_list_entities($options) {
  * @return unknown_type
  */
 function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) {
-       elgg_log('list_entities() deprecated in 1.7.  Use elgg_list_entities()!', 'WARNING');
+       elgg_log('list_entities() was deprecated in 1.7.  Use elgg_list_entities()!', 'WARNING');
 
        $options = array();
 
@@ -2452,7 +2453,7 @@ function delete_entity($guid, $recursive = true) {
  * @param int $owner_guid The GUID of the owning user
  */
 function delete_entities($type = "", $subtype = "", $owner_guid = 0) {
-       elgg_log('delete_entities() is deprecated in 1.7 because no one should use it.');
+       elgg_log('delete_entities() was deprecated in 1.7 because no one should use it.');
        return false;
 }
 
@@ -2974,7 +2975,7 @@ function entities_page_handler($page) {
  * @return unknown_type
  */
 function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $allowedtypes = true) {
-       elgg_log('list_registered_entities() deprecated in 1.7 by elgg_list_registered_entities().', 'WARNING');
+       elgg_log('list_registered_entities() was deprecated in 1.7 by elgg_list_registered_entities().', 'WARNING');
 
        $options = array();
 
index 35eebdd66f7947f7242089a5e21cdb89c295b969..24820316241ee8294c9a03ea508c1e800e7d67b5 100644 (file)
@@ -573,21 +573,23 @@ function elgg_get_entities_from_metadata(array $options = array()) {
                'name' => NULL,
                'values' => NULL,
                'value' => NULL,
+               'name_value_pair' => NULL,
                'name_value_pairs' => NULL,
+               'name_value_pairs_operator' => 'AND',
                'case_sensitive' => TRUE
        );
 
        $options = array_merge($defaults, $options);
 
-       $singulars = array('name', 'value');
+       $singulars = array('name', 'value', 'name_value_pair');
        $options = elgg_normalise_plural_options_array($options, $singulars);
 
        if (!is_array($options['wheres'])) {
                $options['wheres'] = array();
        }
 
-       $clauses = elgg_get_entity_metadata_where_sql('e', $options['names'],
-               $options['values'], $options['name_value_pairs'], $options['case_sensitive']);
+       $clauses = elgg_get_entity_metadata_where_sql('e', $options['names'], $options['values'],
+               $options['name_value_pairs'], $options['name_value_pairs_operator'], $options['case_sensitive']);
 
        // merge wheres to pass to get_entities()
        if (isset($options['wheres']) && !is_array($options['wheres'])) {
@@ -619,7 +621,7 @@ function elgg_get_entities_from_metadata(array $options = array()) {
  * @param $values
  * @return FALSE|array False on fail, array('joins', 'wheres')
  */
-function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NULL, $pairs = NULL, $case_sensitive = TRUE) {
+function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NULL, $pairs = NULL, $pair_operator = 'AND', $case_sensitive = TRUE) {
        global $CONFIG;
 
        // short circuit if nothing requested
@@ -632,7 +634,7 @@ function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NU
        }
 
        // binary forces byte-to-byte comparision of strings, making
-       // it case and diacritical mark sensitive.
+       // it case- and diacritical-mark- sensitive.
        // only supported on values.
        $binary = ($case_sensitive) ? ' BINARY ' : '';
 
@@ -691,8 +693,6 @@ function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NU
        }
 
        if ($names_where && $values_where) {
-               // @todo DECIDE IF AND OR OR!
-               // And rationale: Being more specific shouldn't give you more results, should give fewer.
                $wheres[] = "($names_where AND $values_where AND $access)";
        } elseif ($names_where) {
                $wheres[] = "($names_where AND $access)";
@@ -703,9 +703,12 @@ function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NU
        // add pairs
        // pairs must be in arrays.
        if (is_array($pairs)) {
-               $return['joins'][] = "JOIN {$CONFIG->dbprefix}metadata md on e.guid = md.entity_guid";
-               $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn on md.name_id = msn.id";
-               $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv on md.value_id = msv.id";
+               $array = array(
+                       'name' => 'test',
+                       'value' => 5
+               );
+
+               $array = array('test' => 5);
 
                // check if this is an array of pairs or just a single pair.
                if (isset($pairs['name']) || isset($pairs['value'])) {
@@ -714,7 +717,22 @@ function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NU
 
                $pair_wheres = array();
 
-               foreach ($pairs as $pair) {
+               $i = 1;
+               foreach ($pairs as $index => $pair) {
+                       // @todo move this elsewhere?
+                       // support shortcut 'n' => 'v' method.
+                       if (!is_array($pair)) {
+                               $pair = array(
+                                       'name' => $index,
+                                       'value' => $pair
+                               );
+                       }
+
+                       // @todo The multiple joins are only needed when the operator is AND
+                       $return['joins'][] = "JOIN {$CONFIG->dbprefix}metadata md{$i} on e.guid = md{$i}.entity_guid";
+                       $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i} on md{$i}.name_id = msn{$i}.id";
+                       $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i} on md{$i}.value_id = msv{$i}.id";
+
                        // must have at least a name and value
                        if (!isset($pair['name']) || !isset($pair['value'])) {
                                // @todo should probably return false.
@@ -744,12 +762,13 @@ function elgg_get_entity_metadata_where_sql($prefix, $names = NULL, $values = NU
                                $value = "'{$pair['value']}'";
                        }
 
-
-                       $pair_wheres[] = "(msn.string = '{$pair['name']}' AND {$pair_binary}msv.string $operand $value)";
+                       $access = get_access_sql_suffix("md{$i}");
+                       $pair_wheres[] = "(msn{$i}.string = '{$pair['name']}' AND {$pair_binary}msv{$i}.string $operand $value AND $access)";
+                       $i++;
                }
 
-               if ($where = implode (' OR ', $pair_wheres)) {
-                       $wheres[] = "($where AND $access)";
+               if ($where = implode (" $pair_operator ", $pair_wheres)) {
+                       $wheres[] = "($where)";
                }
        }
 
@@ -779,6 +798,8 @@ function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type =
 $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
 $count = FALSE, $case_sensitive = TRUE) {
 
+       elgg_log('get_entities_from_metadata() was deprecated in 1.7 by elgg_get_entities()!', 'WARNING');
+
        $options = array();
 
        $options['names'] = $meta_name;
@@ -851,116 +872,67 @@ function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type
 }
 
 /**
- * Returns a list of entities based on the given search criteria.
- *
- * @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 $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- * @param string $meta_array_operator Operator used for joining the metadata array together
- * @return int|array List of ElggEntities, or the total number if count is set to false
+ * @deprecated 1.7.  Use elgg_get_entities_from_metadata().
+ * @param $meta_array
+ * @param $entity_type
+ * @param $entity_subtype
+ * @param $owner_guid
+ * @param $limit
+ * @param $offset
+ * @param $order_by
+ * @param $site_guid
+ * @param $count
+ * @param $meta_array_operator
+ * @return unknown_type
  */
-function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false, $meta_array_operator = 'and') {
-       global $CONFIG;
+function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "",
+$owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false, $meta_array_operator = 'and') {
+       elgg_log('get_entities_from_metadata_multi() was deprecated in 1.7 by elgg_get_entities_from_metadata()!', 'WARNING');
 
        if (!is_array($meta_array) || sizeof($meta_array) == 0) {
                return false;
        }
 
-       $where = array();
+       $options = array();
 
-       $mindex = 1;
-       $join = "";
-       $metawhere = array();
-       $meta_array_operator = sanitise_string($meta_array_operator);
-       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 ";
-               /*if ($meta_name!=="")
-                       $where[] = "m{$mindex}.name_id='$meta_n'";
-               if ($meta_value!=="")
-                       $where[] = "m{$mindex}.value_id='$meta_v'";*/
-               $metawhere[] = "(m{$mindex}.name_id='$meta_n' AND m{$mindex}.value_id='$meta_v')";
-               $mindex++;
-       }
-       $where[] = "(".implode($meta_array_operator, $metawhere).")";
+       $options['name_value_pairs'] = $meta_array;
 
-       $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);
-       if ((is_array($owner_guid) && (count($owner_guid)))) {
-               foreach($owner_guid as $key => $guid) {
-                       $owner_guid[$key] = (int) $guid;
-               }
-       } else {
-               $owner_guid = (int) $owner_guid;
+       if ($entity_type) {
+               $options['types'] = $entity_type;
        }
 
-       $site_guid = (int) $site_guid;
-       if ($site_guid == 0) {
-               $site_guid = $CONFIG->site_guid;
+       if ($entity_subtype) {
+               $options['subtypes'] = $entity_subtype;
        }
 
-       //$access = get_access_list();
-
-       if ($entity_type!="") {
-               $where[] = "e.type = '{$entity_type}'";
+       if ($owner_guid) {
+               $options['owner'] = $owner_guid;
        }
 
-       if ($entity_subtype) {
-               $where[] = "e.subtype = {$entity_subtype}";
+       if ($limit) {
+               $options['limit'] = $limit;
        }
 
-       if ($site_guid > 0) {
-               $where[] = "e.site_guid = {$site_guid}";
+       if ($offset) {
+               $options['offset'] = $offset;
        }
 
-       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 ($order_by) {
+               $options['order_by'];
        }
 
-       //if ($owner_guid > 0)
-       //      $where[] = "e.container_guid = {$owner_guid}";
-
-       if ($count) {
-               $query = "SELECT count(distinct e.guid) as total ";
-       } else {
-               $query = "SELECT distinct e.* ";
+       if ($site_guid) {
+               $options['site_guid'];
        }
 
-       $query .= " from {$CONFIG->dbprefix}entities e {$join} where";
-       foreach ($where as $w) {
-               $query .= " $w and ";
+       if ($count) {
+               $options['count'] = $count;
        }
-       $query .= get_access_sql_suffix("e"); // Add access controls
 
-       $mindex = 1;
-       foreach($meta_array as $meta_name => $meta_value) {
-               $query .= ' and ' . get_access_sql_suffix("m{$mindex}"); // Add access controls
-               $mindex++;
-       }
+       $options['name_value_pairs_operator'] = $meta_array_operator;
 
-       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 elgg_get_entities_from_metadata($options);
 }
 
 /**