diff options
| -rw-r--r-- | CHANGES.txt | 15 | ||||
| -rw-r--r-- | actions/river/delete.php | 21 | ||||
| -rw-r--r-- | engine/classes/ElggPluginManifest.php | 6 | ||||
| -rw-r--r-- | engine/lib/actions.php | 44 | ||||
| -rw-r--r-- | engine/lib/navigation.php | 13 | ||||
| -rw-r--r-- | engine/lib/river.php | 4 | ||||
| -rw-r--r-- | languages/en.php | 2 | ||||
| -rw-r--r-- | mod/blog/lib/blog.php | 1 | ||||
| -rw-r--r-- | mod/blog/views/default/js/blog/save_draft.php | 6 | ||||
| -rw-r--r-- | mod/bookmarks/start.php | 5 | ||||
| -rw-r--r-- | mod/categories/views/default/input/categories.php | 6 | ||||
| -rw-r--r-- | mod/groups/actions/groups/edit.php | 5 | ||||
| -rw-r--r-- | mod/groups/lib/discussion.php | 2 | ||||
| -rw-r--r-- | mod/groups/start.php | 8 | ||||
| -rw-r--r-- | mod/groups/views/default/forms/groups/edit.php | 14 | ||||
| -rw-r--r-- | mod/htmlawed/start.php | 22 | ||||
| -rw-r--r-- | mod/htmlawed/tests/tags.php | 45 | ||||
| -rw-r--r-- | mod/profile/start.php | 2 | ||||
| -rw-r--r-- | mod/thewire/actions/delete.php | 2 | ||||
| -rw-r--r-- | version.php | 4 | ||||
| -rw-r--r-- | views/default/css/admin.php | 6 | ||||
| -rw-r--r-- | views/default/page/elements/comments.php | 3 | 
22 files changed, 189 insertions, 47 deletions
| diff --git a/CHANGES.txt b/CHANGES.txt index 45f561ab5..7a3422d7d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,18 @@ +Version 1.8.8 +(July 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8) + + Contributing Developers: +  * Cash Costello +  * Miguel Rodriguez +  * Sem + + Enhancements: +  * Added a delete button on river items for admins + + Bugfixes: +  * Fixed the significant bug with htmlawed plugin that caused duplicate tags + +  Version 1.8.7  (July 10, 2012 from https://github.com/Elgg/Elgg/tree/1.8) diff --git a/actions/river/delete.php b/actions/river/delete.php new file mode 100644 index 000000000..0d8297932 --- /dev/null +++ b/actions/river/delete.php @@ -0,0 +1,21 @@ +<?php +/** + * River item delete action + * + * @package Elgg + * @subpackage Core + */ + +$id = get_input('id', false); + +if ($id !== false && elgg_is_admin_logged_in()) { +	if (elgg_delete_river(array('id' => $id))) { +		system_message(elgg_echo('river:delete:success')); +	} else { +		register_error(elgg_echo('river:delete:fail')); +	} +} else { +	register_error(elgg_echo('river:delete:fail')); +} + +forward(REFERER); diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php index 7e79c15c8..6b3932b32 100644 --- a/engine/classes/ElggPluginManifest.php +++ b/engine/classes/ElggPluginManifest.php @@ -456,7 +456,7 @@ class ElggPluginManifest {  	 * Normalizes a dependency array using the defined structs.  	 * Can be used with either requires or suggests.  	 * -	 * @param array $dep An dependency array. +	 * @param array $dep A dependency array.  	 * @return array The normalized deps array.  	 */  	private function normalizeDep($dep) { @@ -500,8 +500,10 @@ class ElggPluginManifest {  							break;  					}  				} -  				break; +			default: +				// unrecognized so we just return the raw dependency +				return $dep;  		}  		$normalized_dep = $this->buildStruct($struct, $dep); diff --git a/engine/lib/actions.php b/engine/lib/actions.php index 3a7c02488..53b185dea 100644 --- a/engine/lib/actions.php +++ b/engine/lib/actions.php @@ -82,44 +82,28 @@ function action($action, $forwarder = "") {  	$forwarder = str_replace(elgg_get_site_url(), "", $forwarder);  	$forwarder = str_replace("http://", "", $forwarder);  	$forwarder = str_replace("@", "", $forwarder); -  	if (substr($forwarder, 0, 1) == "/") {  		$forwarder = substr($forwarder, 1);  	} -	if (isset($CONFIG->actions[$action])) { -		if (elgg_is_admin_logged_in() || ($CONFIG->actions[$action]['access'] !== 'admin')) { -			if (elgg_is_logged_in() || ($CONFIG->actions[$action]['access'] === 'public')) { - -				// Trigger action event -				// @todo This is only called before the primary action is called. -				$event_result = true; -				$event_result = elgg_trigger_plugin_hook('action', $action, null, $event_result); - -				// Include action -				// Event_result being false doesn't produce an error -				// since i assume this will be handled in the hook itself. -				// @todo make this better! -				if ($event_result) { -					if (!include($CONFIG->actions[$action]['file'])) { -						register_error(elgg_echo('actionnotfound', array($action))); -					} -				} -			} else { -				register_error(elgg_echo('actionloggedout')); +	if (!isset($CONFIG->actions[$action])) { +		register_error(elgg_echo('actionundefined', array($action))); +	} elseif (!elgg_is_admin_logged_in() && ($CONFIG->actions[$action]['access'] === 'admin')) { +		register_error(elgg_echo('actionunauthorized')); +	} elseif (!elgg_is_logged_in() && ($CONFIG->actions[$action]['access'] !== 'public')) { +		register_error(elgg_echo('actionloggedout')); +	} else { +		// Returning falsy doesn't produce an error +		// We assume this will be handled in the hook itself. +		if (elgg_trigger_plugin_hook('action', $action, null, true)) { +			if (!include($CONFIG->actions[$action]['file'])) { +				register_error(elgg_echo('actionnotfound', array($action)));  			} -		} else { -			register_error(elgg_echo('actionunauthorized'));  		} -	} else { -		register_error(elgg_echo('actionundefined', array($action)));  	} -	if (!empty($forwarder)) { -		forward($forwarder); -	} else { -		forward(REFERER); -	} +	$forwarder = empty($forwarder) ? REFERER : $forwarder; +	forward($forwarder);  }  /** diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php index 4ff009bfb..10b11acfe 100644 --- a/engine/lib/navigation.php +++ b/engine/lib/navigation.php @@ -335,6 +335,19 @@ function elgg_river_menu_setup($hook, $type, $return, $params) {  				$return[] = ElggMenuItem::factory($options);  			}  		} +		 +		if (elgg_is_admin_logged_in()) { +			$options = array( +				'name' => 'delete', +				'href' => "action/river/delete?id=$item->id", +				'text' => elgg_view_icon('delete'), +				'title' => elgg_echo('delete'), +				'confirm' => elgg_echo('deleteconfirm'), +				'is_action' => true, +				'priority' => 200, +			); +			$return[] = ElggMenuItem::factory($options); +		}  	}  	return $return; diff --git a/engine/lib/river.php b/engine/lib/river.php index 711832f70..b717a7756 100644 --- a/engine/lib/river.php +++ b/engine/lib/river.php @@ -643,9 +643,11 @@ function elgg_river_init() {  	elgg_register_page_handler('activity', 'elgg_river_page_handler');  	$item = new ElggMenuItem('activity', elgg_echo('activity'), 'activity');  	elgg_register_menu_item('site', $item); - +	  	elgg_register_widget_type('river_widget', elgg_echo('river:widget:title'), elgg_echo('river:widget:description')); +	elgg_register_action('river/delete', '', 'admin'); +  	elgg_register_plugin_hook_handler('unit_test', 'system', 'elgg_river_test');  } diff --git a/languages/en.php b/languages/en.php index 18d0c88d9..01b4d5d6b 100644 --- a/languages/en.php +++ b/languages/en.php @@ -437,6 +437,8 @@ $english = array(  	'river:ingroup' => 'in the group %s',  	'river:none' => 'No activity',  	'river:update' => 'Update for %s', +	'river:delete:success' => 'River item has been deleted', +	'river:delete:fail' => 'River item could not be deleted',  	'river:widget:title' => "Activity",  	'river:widget:description' => "Display latest activity", diff --git a/mod/blog/lib/blog.php b/mod/blog/lib/blog.php index 9a02a8cc3..4622a9e7e 100644 --- a/mod/blog/lib/blog.php +++ b/mod/blog/lib/blog.php @@ -272,7 +272,6 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) {  	$vars = array();  	$vars['id'] = 'blog-post-edit'; -	$vars['name'] = 'blog_post';  	$vars['class'] = 'elgg-form-alt';  	if ($page == 'edit') { diff --git a/mod/blog/views/default/js/blog/save_draft.php b/mod/blog/views/default/js/blog/save_draft.php index 8a994ffb0..8cd07ff5d 100644 --- a/mod/blog/views/default/js/blog/save_draft.php +++ b/mod/blog/views/default/js/blog/save_draft.php @@ -12,7 +12,7 @@ elgg.provide('elgg.blog');   */  elgg.blog.saveDraftCallback = function(data, textStatus, XHR) {  	if (textStatus == 'success' && data.success == true) { -		var form = $('form[name=blog_post]'); +		var form = $('form[id=blog-post-edit]');  		// update the guid input element for new posts that now have a guid  		form.find('input[name=guid]').val(data.guid); @@ -36,7 +36,7 @@ elgg.blog.saveDraft = function() {  	}  	// only save on changed content -	var form = $('form[name=blog_post]'); +	var form = $('form[id=blog-post-edit]');  	var description = form.find('textarea[name=description]').val();  	var title = form.find('input[name=title]').val(); @@ -59,7 +59,7 @@ elgg.blog.saveDraft = function() {  elgg.blog.init = function() {  	// get a copy of the body to compare for auto save -	oldDescription = $('form[name=blog_post]').find('textarea[name=description]').val(); +	oldDescription = $('form[id=blog-post-edit]').find('textarea[name=description]').val();  	setInterval(elgg.blog.saveDraft, 60000);  }; diff --git a/mod/bookmarks/start.php b/mod/bookmarks/start.php index 56bac984a..66e22b565 100644 --- a/mod/bookmarks/start.php +++ b/mod/bookmarks/start.php @@ -86,8 +86,13 @@ function bookmarks_init() {   * @return bool   */  function bookmarks_page_handler($page) { +  	elgg_load_library('elgg:bookmarks'); +	if (!isset($page[0])) { +		$page[0] = 'all'; +	} +  	elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all');  	// old group usernames diff --git a/mod/categories/views/default/input/categories.php b/mod/categories/views/default/input/categories.php index 75960d257..b543cde45 100644 --- a/mod/categories/views/default/input/categories.php +++ b/mod/categories/views/default/input/categories.php @@ -10,6 +10,12 @@  if (isset($vars['entity']) && $vars['entity'] instanceof ElggEntity) {  	$selected_categories = $vars['entity']->universal_categories;  } + +// use sticky values if set +if (isset($vars['universal_categories_list'])) { +	$selected_categories = $vars['universal_categories_list']; +} +  $categories = elgg_get_site_entity()->categories;  if (empty($categories)) {  	$categories = array(); diff --git a/mod/groups/actions/groups/edit.php b/mod/groups/actions/groups/edit.php index b513a6098..a3ad91622 100644 --- a/mod/groups/actions/groups/edit.php +++ b/mod/groups/actions/groups/edit.php @@ -15,6 +15,8 @@ function profile_array_decoder(&$v) {  	$v = html_entity_decode($v, ENT_COMPAT, 'UTF-8');  } +elgg_make_sticky_form('groups'); +  // Get group fields  $input = array();  foreach ($CONFIG->group as $shortname => $valuetype) { @@ -106,6 +108,9 @@ if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') {  $group->save(); +// group saved so clear sticky form +elgg_clear_sticky_form('groups'); +  // group creator needs to be member of new group and river entry created  if ($new_group_flag) {  	elgg_set_page_owner_guid($group->guid); diff --git a/mod/groups/lib/discussion.php b/mod/groups/lib/discussion.php index 02ab27fdc..ab2fe4849 100644 --- a/mod/groups/lib/discussion.php +++ b/mod/groups/lib/discussion.php @@ -15,7 +15,7 @@ function discussion_handle_all_page() {  		'type' => 'object',  		'subtype' => 'groupforumtopic',  		'order_by' => 'e.last_action desc', -		'limit' => 40, +		'limit' => 20,  		'full_view' => false,  	)); diff --git a/mod/groups/start.php b/mod/groups/start.php index 48df338c0..c591410c5 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -196,6 +196,10 @@ function groups_page_handler($page) {  	elgg_load_library('elgg:groups'); +	if (!isset($page[0])) { +		$page[0] = 'all'; +	} +  	elgg_push_breadcrumb(elgg_echo('groups'), "groups/all");  	switch ($page[0]) { @@ -785,6 +789,10 @@ function discussion_page_handler($page) {  	elgg_load_library('elgg:discussion'); +	if (!isset($page[0])) { +		$page[0] = 'all'; +	} +  	elgg_push_breadcrumb(elgg_echo('discussion'), 'discussion/all');  	switch ($page[0]) { diff --git a/mod/groups/views/default/forms/groups/edit.php b/mod/groups/views/default/forms/groups/edit.php index 8055b6430..7540d1bf9 100644 --- a/mod/groups/views/default/forms/groups/edit.php +++ b/mod/groups/views/default/forms/groups/edit.php @@ -5,8 +5,16 @@   * @package ElggGroups   */ +if (elgg_is_sticky_form('groups')) { +	$sticky_values = elgg_get_sticky_values('groups'); +	elgg_clear_sticky_form('groups'); +} +  // new groups default to open membership -if (isset($vars['entity'])) { +if (isset($sticky_values)) { +	$membership = $sticky_values['membership']; +	$access = $sticky_values['access_id']; +} elseif (isset($vars['entity'])) {  	$membership = $vars['entity']->membership;  	$access = $vars['entity']->access_id;  	if ($access != ACCESS_PUBLIC && $access != ACCESS_LOGGED_IN) { @@ -27,7 +35,7 @@ if (isset($vars['entity'])) {  	<label><?php echo elgg_echo("groups:name"); ?></label><br />  	<?php echo elgg_view("input/text", array(  		'name' => 'name', -		'value' => $vars['entity']->name, +		'value' => isset($sticky_values['name']) ? $sticky_values['name'] : $vars['entity']->name,  	));  	?>  </div> @@ -45,7 +53,7 @@ if ($group_profile_fields > 0) {  		echo "</label>$line_break";  		echo elgg_view("input/{$valtype}", array(  			'name' => $shortname, -			'value' => $vars['entity']->$shortname, +			'value' => isset($sticky_values[$shortname]) ? $sticky_values[$shortname] : $vars['entity']->$shortname,  		));  		echo '</div>';  	} diff --git a/mod/htmlawed/start.php b/mod/htmlawed/start.php index 5af18f4dd..12b6470a3 100644 --- a/mod/htmlawed/start.php +++ b/mod/htmlawed/start.php @@ -18,6 +18,8 @@ function htmlawed_init() {  	$lib = elgg_get_plugins_path() . "htmlawed/vendors/htmLawed/htmLawed.php";  	elgg_register_library('htmlawed', $lib); +	 +	elgg_register_plugin_hook_handler('unit_test', 'system', 'htmlawed_test');  }  /** @@ -90,7 +92,13 @@ function htmLawedArray(&$v, $k, $htmlawed_config) {   * @param array  $attributes An array of attributes   * @return string   */ -function htmlawed_tag_post_processor($element, $attributes = array()) { +function htmlawed_tag_post_processor($element, $attributes = false) { +    if ($attributes === false) { +        // This is a closing tag. Prevent further processing to avoid inserting a duplicate tag + +        return "</${element}>"; +    } +  	// these are the default styles used by tinymce.  	$allowed_styles = array(  		'color', 'cursor', 'text-align', 'vertical-align', 'font-size', @@ -143,3 +151,15 @@ function htmlawed_tag_post_processor($element, $attributes = array()) {  	$r = "<$element$string>";  	return $r;  } + +/** + * Runs unit tests for htmlawed + * + * @return array + *  */ +function htmlawed_test($hook, $type, $value, $params) { +    global $CONFIG; + +    $value[] = dirname(__FILE__) . '/tests/tags.php'; +    return $value; +} diff --git a/mod/htmlawed/tests/tags.php b/mod/htmlawed/tests/tags.php new file mode 100644 index 000000000..b3914a9d6 --- /dev/null +++ b/mod/htmlawed/tests/tags.php @@ -0,0 +1,45 @@ +<?php +/** + * Dupplicated tags in htmlawed + */ +class HtmLawedDuplicateTagsTest extends ElggCoreUnitTest { + +    /** +     * Called before each test object. +     */ +    public function __construct() { +        parent::__construct(); +    } +     +    /** +     * Called before each test method. +     */ +    public function setUp() { +    } +     +    /** +     * Called after each test method. +     */ +    public function tearDown() { +        // do not allow SimpleTest to interpret Elgg notices as exceptions +        $this->swallowErrors(); +    } +     +    /** +     * Called after each test object. +     */ +    public function __destruct() { +        elgg_set_ignore_access($this->ia); +        // all __destruct() code should go above here +        parent::__destruct(); +    } +     +    public function testNotDuplicateTags() { +        $filter_html = '<ul><li>item</li></ul>';     +        set_input('test', $filter_html); +         +        $expected = $filter_html; +        $result = get_input('test'); +        $this->assertEqual($result, $expected); +    } +}
\ No newline at end of file diff --git a/mod/profile/start.php b/mod/profile/start.php index abe044632..ab596f235 100644 --- a/mod/profile/start.php +++ b/mod/profile/start.php @@ -56,6 +56,8 @@ function profile_page_handler($page) {  		$username = $page[0];  		$user = get_user_by_username($username);  		elgg_set_page_owner_guid($user->guid); +	} elseif (elgg_is_logged_in()) { +		forward(elgg_get_logged_in_user_entity()->getURL());  	}  	// short circuit if invalid or banned username diff --git a/mod/thewire/actions/delete.php b/mod/thewire/actions/delete.php index 58502a7e7..38355d25e 100644 --- a/mod/thewire/actions/delete.php +++ b/mod/thewire/actions/delete.php @@ -24,7 +24,7 @@ if ($thewire->getSubtype() == "thewire" && $thewire->canEdit()) {  	}  	// Get owning user -	$owner = get_entity($thewire->getOwner()); +	$owner = get_entity($thewire->getOwnerGUID());  	// Delete it  	$rowsaffected = $thewire->delete(); diff --git a/version.php b/version.php index 0fb757b9c..dda087c52 100644 --- a/version.php +++ b/version.php @@ -11,7 +11,7 @@  // YYYYMMDD = Elgg Date  // XX = Interim incrementer -$version = 2012061800; +$version = 2012071100;  // Human-friendly version name -$release = '1.8.6'; +$release = '1.8.8'; diff --git a/views/default/css/admin.php b/views/default/css/admin.php index 78ec95c26..6f9ed643e 100644 --- a/views/default/css/admin.php +++ b/views/default/css/admin.php @@ -1510,6 +1510,12 @@ ul.elgg-plugin-categories, ul.elgg-plugin-categories > li {  	margin-bottom: 5px;  } +.elgg-text-help { +	display: block; +	font-size: 85%; +	font-style: italic; +} +  .elgg-longtext-control {  	margin-left: 14px;  	font-size: 80%; diff --git a/views/default/page/elements/comments.php b/views/default/page/elements/comments.php index cf9b5f08b..97cb9574e 100644 --- a/views/default/page/elements/comments.php +++ b/views/default/page/elements/comments.php @@ -36,8 +36,7 @@ if ($html) {  }  if ($show_add_form) { -	$form_vars = array('name' => 'elgg_add_comment'); -	echo elgg_view_form('comments/add', $form_vars, $vars); +	echo elgg_view_form('comments/add', array(), $vars);  }  echo '</div>'; | 
