]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Closes #998 : Operator selection on get by metadata multi
authormarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
Thu, 4 Jun 2009 14:37:50 +0000 (14:37 +0000)
committermarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
Thu, 4 Jun 2009 14:37:50 +0000 (14:37 +0000)
git-svn-id: https://code.elgg.org/elgg/trunk@3318 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/metadata.php

index da189fe30594715899325f8f3da0e3a3d03981bf..ebc425f1731c422cb46839857ff15cb528c05948 100644 (file)
         * @param int $offset\r
         * @param string $order_by Optional ordering.\r
         * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.\r
-        * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)\r
+        * @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\r
         * @return int|array List of ElggEntities, or the total number if count is set to false\r
         */\r
-       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)\r
+       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')\r
        {\r
                global $CONFIG;\r
                \r
                $where = array();\r
                \r
                $mindex = 1;\r
-               $join = "";\r
+               $join = "";
+               $metawhere = array();
+               $meta_array_operator = sanitise_string($meta_array_operator);\r
                foreach($meta_array as $meta_name => $meta_value) {\r
                        $meta_n = get_metastring_id($meta_name);\r
                        $meta_v = get_metastring_id($meta_value);\r
                        $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid "; \r
-                       if ($meta_name!=="")\r
+                       /*if ($meta_name!=="")\r
                                $where[] = "m{$mindex}.name_id='$meta_n'";\r
                        if ($meta_value!=="")\r
-                               $where[] = "m{$mindex}.value_id='$meta_v'";\r
+                               $where[] = "m{$mindex}.value_id='$meta_v'";*/
+                       $metawhere[] = "(m{$mindex}.name_id='$meta_n' AND m{$mindex}.value_id='$meta_v')";\r
                        $mindex++;\r
-               }\r
+               }
+               $where[] = "(".implode($meta_array_operator, $metawhere).")";\r
                        \r
                $entity_type = sanitise_string($entity_type);\r
                $entity_subtype = get_subtype_id($entity_type, $entity_subtype);\r