aboutsummaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/lib/cache.php47
-rw-r--r--engine/lib/configuration.php2
-rw-r--r--engine/lib/entities.php58
-rw-r--r--engine/lib/navigation.php6
-rw-r--r--engine/lib/plugins.php2
-rw-r--r--engine/lib/users.php4
-rw-r--r--engine/lib/views.php2
-rw-r--r--engine/settings.example.php2
-rw-r--r--engine/tests/api/helpers.php12
-rw-r--r--engine/tests/objects/objects.php49
10 files changed, 103 insertions, 81 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index b329c58ec..c117b9ec9 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -369,7 +369,7 @@ function elgg_invalidate_simplecache() {
$return = true;
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
- $return = $return && unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
+ $return &= unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
}
}
closedir($handle);
@@ -382,8 +382,8 @@ function elgg_invalidate_simplecache() {
}
foreach ($viewtypes as $viewtype) {
- $return = $return && datalist_set("simplecache_lastupdate_$viewtype", 0);
- $return = $return && datalist_set("simplecache_lastcached_$viewtype", 0);
+ $return &= datalist_set("simplecache_lastupdate_$viewtype", 0);
+ $return &= datalist_set("simplecache_lastcached_$viewtype", 0);
}
return $return;
@@ -395,26 +395,23 @@ function elgg_invalidate_simplecache() {
*/
function _elgg_load_cache() {
global $CONFIG;
+
+ $CONFIG->system_cache_loaded = false;
+
+ $CONFIG->views = new stdClass();
+ $data = elgg_load_system_cache('view_locations');
+ if (!is_string($data)) {
+ return;
+ }
+ $CONFIG->views->locations = unserialize($data);
- $result = true;
- $cache_types = array(
- 'view_paths' => 'views',
- 'view_types' => 'view_types',
- );
- $data = array();
- foreach ($cache_types as $type => $var_name) {
- $data[$var_name] = elgg_load_system_cache($type);
- $result = $result && is_string($data[$var_name]);
+ $data = elgg_load_system_cache('view_types');
+ if (!is_string($data)) {
+ return;
}
+ $CONFIG->view_types = unserialize($data);
- if ($result) {
- $CONFIG->system_cache_loaded = true;
- foreach ($data as $name => $value) {
- $CONFIG->$name = unserialize($value);
- }
- } else {
- $CONFIG->system_cache_loaded = false;
- }
+ $CONFIG->system_cache_loaded = true;
}
/**
@@ -440,14 +437,8 @@ function _elgg_cache_init() {
// cache system data if enabled and not loaded
if ($CONFIG->system_cache_enabled && !$CONFIG->system_cache_loaded) {
- $cache_types = array(
- 'view_paths' => 'views',
- 'view_types' => 'view_types',
- );
- $data = array();
- foreach ($cache_types as $type => $var_name) {
- elgg_save_system_cache($type, serialize($CONFIG->$var_name));
- }
+ elgg_save_system_cache('view_locations', serialize($CONFIG->views->locations));
+ elgg_save_system_cache('view_types', serialize($CONFIG->view_types));
}
if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
index 998cd1943..9bf1529d6 100644
--- a/engine/lib/configuration.php
+++ b/engine/lib/configuration.php
@@ -303,7 +303,7 @@ function datalist_set($name, $value) {
. " set name = '{$sanitised_name}', value = '{$sanitised_value}'"
. " ON DUPLICATE KEY UPDATE value='{$sanitised_value}'");
- if ($success) {
+ if ($success !== FALSE) {
$DATALIST_CACHE[$name] = $value;
return true;
} else {
diff --git a/engine/lib/entities.php b/engine/lib/entities.php
index 2dc0eb8ae..4875b2c2f 100644
--- a/engine/lib/entities.php
+++ b/engine/lib/entities.php
@@ -738,6 +738,7 @@ function elgg_entity_exists($guid) {
* Joined with subtypes by AND. See below)
*
* subtypes => NULL|STR entity subtype (SQL: subtype IN ('subtype1', 'subtype2))
+ * Use ELGG_ENTITIES_NO_VALUE for no subtype.
*
* type_subtype_pairs => NULL|ARR (array('type' => 'subtype'))
* (type = '$type' AND subtype = '$subtype') pairs
@@ -1520,18 +1521,23 @@ function delete_entity($guid, $recursive = true) {
$entity_disable_override = access_get_show_hidden_status();
access_show_hidden_entities(true);
$ia = elgg_set_ignore_access(true);
- $sub_entities = get_data("SELECT * from {$CONFIG->dbprefix}entities
- WHERE container_guid=$guid
- or owner_guid=$guid
- or site_guid=$guid", 'entity_row_to_elggstar');
- if ($sub_entities) {
- foreach ($sub_entities as $e) {
- // check for equality so that an entity that is its own
- // owner or container does not cause infinite loop
- if ($e->guid != $guid) {
- $e->delete(true);
- }
- }
+
+ // @todo there was logic in the original code that ignored
+ // entities with owner or container guids of themselves.
+ // this should probably be prevented in ElggEntity instead of checked for here
+ $options = array(
+ 'wheres' => array(
+ "((container_guid = $guid OR owner_guid = $guid OR site_guid = $guid)"
+ . " AND guid != $guid)"
+ ),
+ 'limit' => 0
+ );
+
+ $batch = new ElggBatch('elgg_get_entities', $options);
+ $batch->setIncrementOffset(false);
+
+ foreach ($batch as $e) {
+ $e->delete(true);
}
access_show_hidden_entities($entity_disable_override);
@@ -2173,29 +2179,6 @@ function elgg_list_registered_entities(array $options = array()) {
}
/**
- * Check the recursive delete permissions token.
- *
- * If an entity is deleted recursively, a permissions override is required to allow
- * contained or owned entities to be removed.
- *
- * @return bool
- * @elgg_plugin_hook_handler permissions_check all
- * @elgg_plugin_hook_handler permissions_check:metadata all
- * @access private
- */
-function recursive_delete_permissions_check() {
- static $__RECURSIVE_DELETE_TOKEN;
-
- if ((elgg_is_logged_in()) && ($__RECURSIVE_DELETE_TOKEN)
- && (strcmp($__RECURSIVE_DELETE_TOKEN, md5(elgg_get_logged_in_user_guid())))) {
- return true;
- }
-
- // consult next function
- return NULL;
-}
-
-/**
* Checks if $entity is an ElggEntity and optionally for type and subtype.
*
* @tip Use this function in actions and views to check that you are dealing
@@ -2309,11 +2292,6 @@ function entities_init() {
elgg_register_plugin_hook_handler('unit_test', 'system', 'entities_test');
- // Allow a permission override for recursive entity deletion
- // @todo Can this be done better?
- elgg_register_plugin_hook_handler('permissions_check', 'all', 'recursive_delete_permissions_check');
- elgg_register_plugin_hook_handler('permissions_check:metadata', 'all', 'recursive_delete_permissions_check');
-
elgg_register_plugin_hook_handler('gc', 'system', 'entities_gc');
}
diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php
index dcbd7b397..a7984ce5a 100644
--- a/engine/lib/navigation.php
+++ b/engine/lib/navigation.php
@@ -78,7 +78,11 @@
* link_class => STR A class or classes for the <a> tag
* item_class => STR A class or classes for the <li> tag
*
- * Custom options can be added as key value pairs.
+ * Additional options that the view output/url takes can be
+ * passed in the array. If the 'confirm' key is passed, the
+ * menu link uses the 'output/confirmlink' view. Custom
+ * options can be added by using the 'data' key with the
+ * value being an associative array.
*
* @return bool
* @since 1.8.0
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index 07b21d276..70bfcb28b 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -62,7 +62,7 @@ function elgg_get_plugin_ids_in_dir($dir = null) {
$dir = elgg_get_plugins_path();
}
- $plugin_idss = array();
+ $plugin_ids = array();
$handle = opendir($dir);
if ($handle) {
diff --git a/engine/lib/users.php b/engine/lib/users.php
index 14cdd55d4..f1d42e25e 100644
--- a/engine/lib/users.php
+++ b/engine/lib/users.php
@@ -612,11 +612,11 @@ function get_user_by_code($code) {
}
/**
- * Get an array of users from their email addresses
+ * Get an array of users from an email address
*
* @param string $email Email address.
*
- * @return Array of users
+ * @return array
*/
function get_user_by_email($email) {
global $CONFIG;
diff --git a/engine/lib/views.php b/engine/lib/views.php
index 4883ee739..052387191 100644
--- a/engine/lib/views.php
+++ b/engine/lib/views.php
@@ -560,7 +560,7 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
*
* @return void
* @since 1.7.0
- * @link http://docs.elgg.org/Views/Ejxtend
+ * @link http://docs.elgg.org/Views/Extend
* @example views/extend.php
*/
function elgg_extend_view($view, $view_extension, $priority = 501, $viewtype = '') {
diff --git a/engine/settings.example.php b/engine/settings.example.php
index 011770f89..3b139d710 100644
--- a/engine/settings.example.php
+++ b/engine/settings.example.php
@@ -107,7 +107,7 @@ $CONFIG->broken_mta = FALSE;
*
* Elgg stores each query and its results in a query cache.
* On large sites or long-running scripts, this cache can grow to be
- * large. To disable query caching, set this to FALSE.
+ * large. To disable query caching, set this to TRUE.
*
* @global bool $CONFIG->db_disable_query_cache
*/
diff --git a/engine/tests/api/helpers.php b/engine/tests/api/helpers.php
index a615be0c0..62e4471e0 100644
--- a/engine/tests/api/helpers.php
+++ b/engine/tests/api/helpers.php
@@ -526,7 +526,7 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
'offset' => 0,
'limit' => 11
);
- $batch = new ElggBatch(array('ElggCoreHelpersTest', 'test_elgg_batch_callback'), $options,
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
null, 5);
$j = 0;
foreach ($batch as $e) {
@@ -539,12 +539,12 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
$this->assertEqual(11, $j);
// no increment, 0 start
- ElggCoreHelpersTest::test_elgg_batch_callback(array(), true);
+ ElggCoreHelpersTest::elgg_batch_callback_test(array(), true);
$options = array(
'offset' => 0,
'limit' => 11
);
- $batch = new ElggBatch(array('ElggCoreHelpersTest', 'test_elgg_batch_callback'), $options,
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
null, 5);
$batch->setIncrementOffset(false);
@@ -558,12 +558,12 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
$this->assertEqual(11, $j);
// no increment, 3 start
- ElggCoreHelpersTest::test_elgg_batch_callback(array(), true);
+ ElggCoreHelpersTest::elgg_batch_callback_test(array(), true);
$options = array(
'offset' => 3,
'limit' => 11
);
- $batch = new ElggBatch(array('ElggCoreHelpersTest', 'test_elgg_batch_callback'), $options,
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
null, 5);
$batch->setIncrementOffset(false);
@@ -578,7 +578,7 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
$this->assertEqual(11, $j);
}
- static function test_elgg_batch_callback($options, $reset = false) {
+ static function elgg_batch_callback_test($options, $reset = false) {
static $count = 1;
if ($reset) {
diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php
index cd507d5ab..915594e0a 100644
--- a/engine/tests/objects/objects.php
+++ b/engine/tests/objects/objects.php
@@ -239,6 +239,55 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
access_show_hidden_entities(false);
}
+ public function testElggRecursiveDelete() {
+ $types = array('ElggGroup', 'ElggObject', 'ElggUser', 'ElggSite');
+ $db_prefix = elgg_get_config('dbprefix');
+
+ foreach ($types as $type) {
+ $parent = new $type();
+ $this->assertTrue($parent->save());
+
+ $child = new ElggObject();
+ $child->container_guid = $parent->guid;
+ $this->assertTrue($child->save());
+
+ $grandchild = new ElggObject();
+ $grandchild->container_guid = $child->guid;
+ $this->assertTrue($grandchild->save());
+
+ $this->assertTrue($parent->delete(true));
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $parent->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $child->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $grandchild->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+ }
+
+ // object that owns itself
+ // can't check container_guid because of infinite loops in can_edit_entity()
+ $obj = new ElggObject();
+ $obj->save();
+ $obj->owner_guid = $obj->guid;
+ $obj->save();
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid";
+ $r = get_data_row($q);
+ $this->assertEqual($obj->guid, $r->owner_guid);
+
+ $this->assertTrue($obj->delete(true));
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid";
+ $r = get_data_row($q);
+ $this->assertFalse($r);
+ }
+
protected function get_object_row($guid) {
global $CONFIG;
return get_data_row("SELECT * FROM {$CONFIG->dbprefix}objects_entity WHERE guid='$guid'");