]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Updating ElggEntity::clearMetaData() to fail when passed a non-existent metadata...
authornickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
Fri, 12 Nov 2010 23:37:29 +0000 (23:37 +0000)
committernickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
Fri, 12 Nov 2010 23:37:29 +0000 (23:37 +0000)
Fixes #2273

git-svn-id: http://code.elgg.org/elgg/trunk@7301 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/metadata.php
engine/tests/objects/entities.php

index ffa7b74e08ccb8f1d97a85cf72b7bd948f20de2f..8b6fe364fd670a314fb3b472557b3f0639e07c0e 100644 (file)
@@ -60,12 +60,19 @@ function remove_metadata($entity_guid, $name, $value = "") {
        $entity_guid = (int) $entity_guid;
        $name = sanitise_string($name);
        $value = sanitise_string($value);
+       
+       $name = get_metastring_id($name);
+       if ($name === FALSE) {
+               // name doesn't exist
+               return FALSE;
+       }
 
-       $query = "SELECT * from {$CONFIG->dbprefix}metadata"
-               . " WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name);
-
+       $query = "SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = '$entity_guid' and name_id = '$name'";
        if ($value != "") {
-               $query .= " and value_id=" . add_metastring($value);
+               $value = get_metastring_id($value);
+               if ($value !== FALSE) {
+                       $query .= " AND value_id = '$value'";
+               }
        }
 
        if ($existing = get_data($query)) {
index 018f7aa02146fa5fad7384d0139cf092f957973e..1f1f6d2b4f2d2486f9a67519dea99f282e779c38 100644 (file)
@@ -205,6 +205,29 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
                $this->assertTrue($this->entity->enable());
                $this->assertTrue($this->entity->delete());
        }
+       
+       public function testElggEntityMetadata() {
+               // let's delte a non-existent metadata
+               $this->assertFalse($this->entity->clearMetaData('important'));
+               
+               // let's add the meatadata
+               $this->assertTrue($this->entity->important = 'indeed!');
+               $this->assertTrue($this->entity->less_important = 'true, too!');
+               $this->save_entity();
+               
+               // test deleting incorrectly: Ticket #2273
+               $this->assertFalse($this->entity->clearMetaData('impotent'));
+               $this->assertEqual($this->entity->important, 'indeed!');
+               
+               // get rid of one metadata
+               $this->assertEqual($this->entity->important, 'indeed!');
+               $this->assertTrue($this->entity->clearMetaData('important'));
+               $this->assertEqual($this->entity->important, '');
+               
+               // get rid of all metadata
+               $this->assertTrue($this->entity->clearMetaData());
+               $this->assertEqual($this->entity->less_important, '');
+       }
 
        public function testElggEntityExportables() {
                $exportables = array(