aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Profitt <brett.profitt@gmail.com>2012-01-10 16:54:49 -0800
committerBrett Profitt <brett.profitt@gmail.com>2012-01-10 16:54:49 -0800
commita3f0353600e749a16abbdab3cbc75b3469d6fd69 (patch)
treefc534efde38eebc2db7b9b8d5044b9943dc93db2
parent0fe0f9d6dc6577d39bf0615c0e714c7fa7d2ebf3 (diff)
downloadelgg-a3f0353600e749a16abbdab3cbc75b3469d6fd69.tar.gz
elgg-a3f0353600e749a16abbdab3cbc75b3469d6fd69.tar.bz2
Fixes #4269. Not using ElggBatch to delete metadata / annotations. Added unit tests for deleting annotations/md. Fixed an annoying inconsistency with "metastring/s" option in private functions.
-rw-r--r--engine/lib/annotations.php2
-rw-r--r--engine/lib/metadata.php2
-rw-r--r--engine/lib/metastrings.php32
-rw-r--r--engine/tests/api/annotations.php24
-rw-r--r--engine/tests/api/metadata.php25
5 files changed, 81 insertions, 4 deletions
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php
index 7eb72612f..5049d455b 100644
--- a/engine/lib/annotations.php
+++ b/engine/lib/annotations.php
@@ -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');
}
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php
index a097cd3ef..19e8aa3c8 100644
--- a/engine/lib/metadata.php
+++ b/engine/lib/metadata.php
@@ -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');
}
diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php
index d8fef6f1c..62b60e279 100644
--- a/engine/lib/metastrings.php
+++ b/engine/lib/metastrings.php
@@ -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;
}
/**
diff --git a/engine/tests/api/annotations.php b/engine/tests/api/annotations.php
index d7551a0fa..947292970 100644
--- a/engine/tests/api/annotations.php
+++ b/engine/tests/api/annotations.php
@@ -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());
+ }
}
diff --git a/engine/tests/api/metadata.php b/engine/tests/api/metadata.php
index f5b615ca8..be8ac269c 100644
--- a/engine/tests/api/metadata.php
+++ b/engine/tests/api/metadata.php
@@ -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;