diff options
Diffstat (limited to 'mod/pages')
| -rw-r--r-- | mod/pages/actions/pages/delete.php | 26 | ||||
| -rw-r--r-- | mod/pages/start.php | 13 | ||||
| -rw-r--r-- | mod/pages/upgrades/2012061800.php | 49 | 
3 files changed, 86 insertions, 2 deletions
| diff --git a/mod/pages/actions/pages/delete.php b/mod/pages/actions/pages/delete.php index 7a314a280..fd5791e4d 100644 --- a/mod/pages/actions/pages/delete.php +++ b/mod/pages/actions/pages/delete.php @@ -21,11 +21,33 @@ if (elgg_instanceof($page, 'object', 'page') || elgg_instanceof($page, 'object',  			'metadata_value' => $page->getGUID()  		));  		if ($children) { +			$db_prefix = elgg_get_config('dbprefix'); +			$subtype_id = (int)get_subtype_id('object', 'page_top'); +			$newentity_cache = is_memcache_available() ? new ElggMemcache('new_entity_cache') : null; +  			foreach ($children as $child) { -				$child->parent_guid = $parent; +				if ($parent) { +					$child->parent_guid = $parent; +				} else { +					// If no parent, we need to transform $child to a page_top +					$child_guid = (int)$child->guid; + +					update_data("UPDATE {$db_prefix}entities +						SET subtype = $subtype_id WHERE guid = $child_guid"); + +					elgg_delete_metadata(array( +						'guid' => $child_guid, +						'metadata_name' => 'parent_guid', +					)); + +					_elgg_invalidate_cache_for_entity($child_guid); +					if ($newentity_cache) { +						$newentity_cache->delete($child_guid); +					} +				}  			}  		} -		 +  		if ($page->delete()) {  			system_message(elgg_echo('pages:delete:success'));  			if ($parent) { diff --git a/mod/pages/start.php b/mod/pages/start.php index 8debeef24..c1183c9bf 100644 --- a/mod/pages/start.php +++ b/mod/pages/start.php @@ -82,6 +82,8 @@ function pages_init() {  	// register ecml views to parse  	elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook'); +	 +	elgg_register_event_handler('upgrade', 'system', 'pages_run_upgrades');  }  /** @@ -362,3 +364,14 @@ function pages_ecml_views_hook($hook, $entity_type, $return_value, $params) {  	return $return_value;  } + +/** + * Process upgrades for the pages plugin + */ +function pages_run_upgrades() { +	$path = elgg_get_plugins_path() . 'pages/upgrades/'; +	$files = elgg_get_upgrade_files($path); +	foreach ($files as $file) { +		include "$path{$file}"; +	} +} diff --git a/mod/pages/upgrades/2012061800.php b/mod/pages/upgrades/2012061800.php new file mode 100644 index 000000000..c21ccae3b --- /dev/null +++ b/mod/pages/upgrades/2012061800.php @@ -0,0 +1,49 @@ +<?php +/** + * Restore disappeared subpages. This is caused by its parent page being deleted + * when the parent page is a top level page. We take advantage of the fact that + * the parent_guid was deleted for the subpages. + * + * This upgrade script will no longer work once we have converted all pages to + * have the same entity subtype. + */ + + +/** + * Update subtype + * + * @param ElggObject $page + */ +function pages_2012061800($page) { +	$dbprefix = elgg_get_config('dbprefix'); +	$subtype_id = (int)get_subtype_id('object', 'page_top'); +	$page_guid = (int)$page->guid; +	update_data("UPDATE {$dbprefix}entities +		SET subtype = $subtype_id WHERE guid = $page_guid"); +	error_log("called"); +	return true; +} + +$previous_access = elgg_set_ignore_access(true); + +$dbprefix = elgg_get_config('dbprefix'); +$name_metastring_id = get_metastring_id('parent_guid'); +if (!$name_metastring_id) { +	return; +} + +// Looking for pages without metadata +$options = array( +	'type' => 'object', +	'subtype' => 'page', +	'wheres' => "NOT EXISTS ( +		SELECT 1 FROM {$dbprefix}metadata md +		WHERE md.entity_guid = e.guid +		AND md.name_id = $name_metastring_id)" +); +$batch = new ElggBatch('elgg_get_entities_from_metadata', $options, 'pages_2012061800', 50, false); +elgg_set_ignore_access($previous_access); + +if ($batch->callbackResult) { +	error_log("Elgg Pages upgrade (2012061800) succeeded"); +} | 
