]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #4269. Not using ElggBatch to delete metadata / annotations. Added unit tests...
authorBrett Profitt <brett.profitt@gmail.com>
Wed, 11 Jan 2012 00:54:49 +0000 (16:54 -0800)
committerBrett Profitt <brett.profitt@gmail.com>
Wed, 11 Jan 2012 00:54:49 +0000 (16:54 -0800)
engine/lib/annotations.php
engine/lib/metadata.php
engine/lib/metastrings.php
engine/tests/api/annotations.php
engine/tests/api/metadata.php

index 7eb72612ffcbaa4e6307be90b73b96c10d46a83f..5049d455b1b4ab98e7bef4f25643c3ef4e284651 100644 (file)
@@ -237,7 +237,7 @@ function elgg_disable_annotations(array $options) {
                return false;
        }
 
-       $options['metastrings_type'] = 'annotations';
+       $options['metastring_type'] = 'annotations';
        return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback');
 }
 
index a097cd3ef2c523e6b9d6b2a07e8a7cb9329d2573..19e8aa3c83e0007a9358868803350201bda7382e 100644 (file)
@@ -324,7 +324,7 @@ function elgg_disable_metadata(array $options) {
                return false;
        }
 
-       $options['metastrings_type'] = 'metadata';
+       $options['metastring_type'] = 'metadata';
        return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback');
 }
 
index d8fef6f1cff54cc63080b9f40e620ad37c0d63ef..62b60e279ef3e6cbaf7191c5356c1090e6960287 100644 (file)
@@ -727,10 +727,38 @@ function elgg_batch_metastring_based_objects(array $options, $callback) {
                return false;
        }
 
-       $batch = new ElggBatch('elgg_get_metastring_based_objects', $options, $callback);
-       $r = $batch->callbackResult;
+       switch($options['metastring_type']) {
+               case 'metadata':
+                       $objects = elgg_get_metadata($options);
+                       break;
+
+               case 'annotations':
+                       $objects = elgg_get_annotations($options);
+                       break;
+
+               default:
+                       return false;
+       }
+
+       if (!is_array($objects)) {
+               $r = false;
+       } elseif (empty($objects)) {
+               // ElggBatch returns null if the results are an empty array
+               $r = null;
+       } else {
+               $r = true;
+               foreach($objects as $object) {
+                       $r = $r && $callback($object);
+               }
+       }
 
        return $r;
+
+//     // @todo restore once ElggBatch supports callbacks that delete rows.
+//     $batch = new ElggBatch('elgg_get_metastring_based_objects', $options, $callback);
+//     $r = $batch->callbackResult;
+//
+//     return $r;
 }
 
 /**
index d7551a0fa751fb7c19ce6e605a1db6221f5690be..947292970bddc566bf3856d40abef4a502877f9a 100644 (file)
@@ -43,4 +43,28 @@ class ElggCoreAnnotationAPITest extends ElggCoreUnitTest {
 
                $this->object->delete();
        }
+
+       public function testElggDeleteAnnotations() {
+               $e = new ElggObject();
+               $e->save();
+
+               for ($i=0; $i<30; $i++) {
+                       $e->annotate('test_annotation', rand(0,10000));
+               }
+
+               $options = array(
+                       'guid' => $e->getGUID(),
+                       'limit' => 0
+               );
+
+               $annotations = elgg_get_annotations($options);
+               $this->assertIdentical(30, count($annotations));
+
+               $this->assertTrue(elgg_delete_annotations($options));
+
+               $annotations = elgg_get_annotations($options);
+               $this->assertTrue(empty($annotations));
+
+               $this->assertTrue($e->delete());
+       }
 }
index f5b615ca84824b40f99017fea209da6c47a87881..be8ac269ccf0a395a4013fc1154919014bcd7ba3 100644 (file)
@@ -99,6 +99,31 @@ class ElggCoreMetadataAPITest extends ElggCoreUnitTest {
                $this->object->delete();
        }
 
+       public function testElggDeleteMetadata() {
+               $e = new ElggObject();
+               $e->save();
+
+               for ($i=0; $i<30; $i++) {
+                       $name = "test_metadata" . rand(0, 10000);
+                       $e->$name = rand(0, 10000);
+               }
+
+               $options = array(
+                       'guid' => $e->getGUID(),
+                       'limit' => 0
+               );
+
+               $md = elgg_get_metadata($options);
+               $this->assertIdentical(30, count($md));
+
+               $this->assertTrue(elgg_delete_metadata($options));
+
+               $md = elgg_get_metadata($options);
+               $this->assertTrue(empty($md));
+
+               $e->delete();
+       }
+
 
        protected function create_metastring($string) {
                global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;