diff options
Diffstat (limited to 'mod/reportedcontent')
| -rw-r--r-- | mod/reportedcontent/actions/reportedcontent/add.php | 39 | ||||
| -rw-r--r-- | mod/reportedcontent/actions/reportedcontent/archive.php | 27 | ||||
| -rw-r--r-- | mod/reportedcontent/actions/reportedcontent/delete.php | 28 | ||||
| -rw-r--r-- | mod/reportedcontent/graphics/icon_reportthis.gif | bin | 0 -> 570 bytes | |||
| -rw-r--r-- | mod/reportedcontent/languages/en.php | 44 | ||||
| -rw-r--r-- | mod/reportedcontent/manifest.xml | 16 | ||||
| -rw-r--r-- | mod/reportedcontent/start.php | 103 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php | 13 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/forms/reportedcontent/add.php | 57 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/object/reported_content.php | 84 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/reportedcontent/admin_css.php | 46 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/reportedcontent/css.php | 14 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/widgets/reportedcontent/content.php | 16 | ||||
| -rw-r--r-- | mod/reportedcontent/views/default/widgets/reportedcontent/edit.php | 22 | 
14 files changed, 509 insertions, 0 deletions
diff --git a/mod/reportedcontent/actions/reportedcontent/add.php b/mod/reportedcontent/actions/reportedcontent/add.php new file mode 100644 index 000000000..f0a1b05c8 --- /dev/null +++ b/mod/reportedcontent/actions/reportedcontent/add.php @@ -0,0 +1,39 @@ +<?php +/** + * Elgg report action + *  + * @package ElggReportContent + */ +$title = get_input('title'); +$description = get_input('description'); +$address = get_input('address'); +$access = ACCESS_PRIVATE; //this is private and only admins can see it + +if ($title && $address) { + +	$report = new ElggObject; +	$report->subtype = "reported_content"; +	$report->owner_guid = elgg_get_logged_in_user_guid(); +	$report->title = $title; +	$report->address = $address; +	$report->description = $description; +	$report->access_id = $access; + +	if ($report->save()) { +		if (!elgg_trigger_plugin_hook('reportedcontent:add', 'system', array('report' => $report), true)) { +			$report->delete(); +			register_error(elgg_echo('reportedcontent:failed')); +		} else { +			system_message(elgg_echo('reportedcontent:success')); +			$report->state = "active"; +		} +		forward($address); +	} else { +		register_error(elgg_echo('reportedcontent:failed')); +		forward($address); +	} +} else { + +	register_error(elgg_echo('reportedcontent:failed')); +	forward($address); +} diff --git a/mod/reportedcontent/actions/reportedcontent/archive.php b/mod/reportedcontent/actions/reportedcontent/archive.php new file mode 100644 index 000000000..dd5c6aef1 --- /dev/null +++ b/mod/reportedcontent/actions/reportedcontent/archive.php @@ -0,0 +1,27 @@ +<?php +/** + * Elgg reported content: archive action + *  + * @package ElggReportedContent + */ + +$guid = (int) get_input('guid'); + +$report = get_entity($guid); + +// Make sure we actually have permission to edit +if ($report->getSubtype() == "reported_content" && $report->canEdit()) { + +	// allow another plugin to override +	if (!elgg_trigger_plugin_hook('reportedcontent:archive', 'system', array('report' => $report), TRUE)) { +		system_message(elgg_echo("reportedcontent:notarchived")); +		forward(REFERER); +	} + +	// change the state +	$report->state = "archived"; + +	system_message(elgg_echo("reportedcontent:archived")); + +	forward(REFERER); +} diff --git a/mod/reportedcontent/actions/reportedcontent/delete.php b/mod/reportedcontent/actions/reportedcontent/delete.php new file mode 100644 index 000000000..f7d4e2107 --- /dev/null +++ b/mod/reportedcontent/actions/reportedcontent/delete.php @@ -0,0 +1,28 @@ +<?php +/** + * Elgg reported content: delete action + *  + * @package ElggReportedContent + */ + +$guid = (int) get_input('guid'); + +$report = get_entity($guid); + +// Make sure we actually have permission to delete +if ($report->getSubtype() == "reported_content" && $report->canEdit()) { + +	// give another plugin a chance to override +	if (!elgg_trigger_plugin_hook('reportedcontent:delete', 'system', array('report' => $report), TRUE)) { +		register_error(elgg_echo("reportedcontent:notdeleted")); +		forward(REFERER); +	} + +	if ($report->delete()) { +		system_message(elgg_echo("reportedcontent:deleted")); +	} else { +		register_error(elgg_echo("reportedcontent:notdeleted")); +	} +	 +	forward(REFERER); +} diff --git a/mod/reportedcontent/graphics/icon_reportthis.gif b/mod/reportedcontent/graphics/icon_reportthis.gif Binary files differnew file mode 100644 index 000000000..0590f96e6 --- /dev/null +++ b/mod/reportedcontent/graphics/icon_reportthis.gif diff --git a/mod/reportedcontent/languages/en.php b/mod/reportedcontent/languages/en.php new file mode 100644 index 000000000..c2e197879 --- /dev/null +++ b/mod/reportedcontent/languages/en.php @@ -0,0 +1,44 @@ +<?php +/** + * Elgg reported content plugin language pack + * + * @package ElggReportedContent + */ + +$english = array( + +	'item:object:reported_content' => 'Reported items', +	'admin:administer_utilities:reportedcontent' => 'Reported content', +	'reportedcontent' => 'Reported content', +	'reportedcontent:this' => 'Report this', +	'reportedcontent:this:tooltip' => 'Report this page to an administrator', +	'reportedcontent:none' => 'There is no reported content', +	'reportedcontent:report' => 'Report to admin', +	'reportedcontent:title' => 'Page title', +	'reportedcontent:deleted' => 'The reported content has been deleted', +	'reportedcontent:notdeleted' => 'We were not able to delete that report', +	'reportedcontent:delete' => 'Delete report', +	'reportedcontent:areyousure' => 'Are you sure you want to delete?', +	'reportedcontent:archive' => 'Archive report', +	'reportedcontent:archived' => 'The report has been archived', +	'reportedcontent:visit' => 'Visit reported item', +	'reportedcontent:by' => 'Report by', +	'reportedcontent:objecttitle' => 'Page title', +	'reportedcontent:objecturl' => 'Page url', +	'reportedcontent:reason' => 'Reason for report', +	'reportedcontent:description' => 'Why are you reporting this?', +	'reportedcontent:address' => 'Location of the item', +	'reportedcontent:success' => 'Your report has been sent to the site admin', +	'reportedcontent:failing' => 'Your report could not be sent', +	'reportedcontent:report' => 'Report this', +	'reportedcontent:moreinfo' => 'More info', +	'reportedcontent:instructions' => 'This report will be sent to the administrators of this site for review.', +	'reportedcontent:numbertodisplay' => 'Number of reports to display', +	'reportedcontent:widget:description' => 'Display reported content', +	'reportedcontent:user' => 'Report user', + +	'reportedcontent:failed' => 'Sorry, the attempt to report this content has failed.', +	'reportedcontent:notarchived' => 'We were not able to archive that report', +); + +add_translation("en", $english); diff --git a/mod/reportedcontent/manifest.xml b/mod/reportedcontent/manifest.xml new file mode 100644 index 000000000..e96620b01 --- /dev/null +++ b/mod/reportedcontent/manifest.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8"> +	<name>Reported Content</name> +	<author>Core developers</author> +	<version>1.8</version> +	<category>bundled</category> +	<description>Adds the option for users to report content and for admins to check it out.</description> +	<website>http://www.elgg.org/</website> +	<copyright>See COPYRIGHT.txt</copyright> +	<license>GNU General Public License version 2</license> +	<requires> +		<type>elgg_release</type> +		<version>1.8</version> +	</requires> +	<activate_on_install>true</activate_on_install> +</plugin_manifest> diff --git a/mod/reportedcontent/start.php b/mod/reportedcontent/start.php new file mode 100644 index 000000000..8b18a4d64 --- /dev/null +++ b/mod/reportedcontent/start.php @@ -0,0 +1,103 @@ +<?php +/** + * Elgg Reported content. + * + * @package ElggReportedContent + */ + +elgg_register_event_handler('init', 'system', 'reportedcontent_init'); + +/** + * Initialize the plugin + */ +function reportedcontent_init() { + +	// Register a page handler, so we can have nice URLs +	elgg_register_page_handler('reportedcontent', 'reportedcontent_page_handler'); +	 +	// Extend CSS +	elgg_extend_view('css/elgg', 'reportedcontent/css'); +	elgg_extend_view('css/admin', 'reportedcontent/admin_css'); + +	// Extend footer with report content link +	if (elgg_is_logged_in()) { +		$href = "javascript:elgg.forward('reportedcontent/add'"; +		$href .= "+'?address='+encodeURIComponent(location.href)"; +		$href .= "+'&title='+encodeURIComponent(document.title));"; +		 +		elgg_register_menu_item('footer', array( +			'name' => 'report_this', +			'href' => $href, +			'title' => elgg_echo('reportedcontent:this:tooltip'), +			'text' => elgg_view_icon('report-this') . elgg_echo('reportedcontent:this'), +			'priority' => 500, +			'section' => 'alt', +		)); +	} + +	elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'reportedcontent_user_hover_menu'); + +	// Add admin menu item +	// @todo Might want to move this to a 'feedback' section. something other than utils +	elgg_register_admin_menu_item('administer', 'reportedcontent', 'administer_utilities'); + +	elgg_register_widget_type( +			'reportedcontent', +			elgg_echo('reportedcontent'), +			elgg_echo('reportedcontent:widget:description'), +			'admin'); + +	// Register actions +	$action_path = elgg_get_plugins_path() . "reportedcontent/actions/reportedcontent"; +	elgg_register_action('reportedcontent/add', "$action_path/add.php"); +	elgg_register_action('reportedcontent/delete', "$action_path/delete.php", 'admin'); +	elgg_register_action('reportedcontent/archive', "$action_path/archive.php", 'admin'); +} + +/** + * Reported content page handler + * + * Serves the add report page + * + * @param array $page Array of page routing elements + * @return bool + */ +function reportedcontent_page_handler($page) { +	// only logged in users can report things +	gatekeeper(); + +	$content .= elgg_view_title(elgg_echo('reportedcontent:this')); +	$content .= elgg_view_form('reportedcontent/add'); +	$sidebar = elgg_echo('reportedcontent:instructions'); + +	$params = array( +		'content' => $content, +		'sidebar' => $sidebar, +	); +	$body = elgg_view_layout('one_sidebar', $params); + +	echo elgg_view_page(elgg_echo('reportedcontent:this'), $body); +	return true; +} + +/** + * Add report user link to hover menu + */ +function reportedcontent_user_hover_menu($hook, $type, $return, $params) { +	$user = $params['entity']; + +	$profile_url = urlencode($user->getURL()); +	$name = urlencode($user->name); +	$url = "reportedcontent/add?address=$profile_url&title=$name"; + +	if (elgg_is_logged_in() && elgg_get_logged_in_user_guid() != $user->guid) { +		$item = new ElggMenuItem( +				'reportuser', +				elgg_echo('reportedcontent:user'), +				$url); +		$item->setSection('action'); +		$return[] = $item; +	} + +	return $return; +}
\ No newline at end of file diff --git a/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php b/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php new file mode 100644 index 000000000..ed52a536d --- /dev/null +++ b/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg Reported content admin page + * + * @package ElggReportedContent + */ + +$list = elgg_list_entities(array('type' => 'object', 'subtype' => 'reported_content')); +if (!$list) { +	$list = '<p class="mtm">' . elgg_echo('reportedcontent:none') . '</p>'; +} + +echo $list;
\ No newline at end of file diff --git a/mod/reportedcontent/views/default/forms/reportedcontent/add.php b/mod/reportedcontent/views/default/forms/reportedcontent/add.php new file mode 100644 index 000000000..f9986849d --- /dev/null +++ b/mod/reportedcontent/views/default/forms/reportedcontent/add.php @@ -0,0 +1,57 @@ +<?php +/** + * Elgg report content plugin form + *  + * @package ElggReportContent + */ + +$guid = 0; +$title = get_input('title', ""); +$address = get_input('address', ""); + +$description = ""; +$owner = elgg_get_logged_in_user_entity(); + +?> + +<div> +	<label> +		<?php +			echo elgg_echo('reportedcontent:title'); +			echo elgg_view('input/text', array( +				'name' => 'title', +				'value' => $title, +			)); +		?> +	</label> +</div> +<div> +	<label> +		<?php +			echo elgg_echo('reportedcontent:address'); +			echo elgg_view('input/url', array( +					'name' => 'address', +							'value' => $address, +					));  +			 +			?> +	</label> +</div> +<div> +	<label> +		<?php 	echo elgg_echo('reportedcontent:description'); ?> +	</label> +	<?php +		echo elgg_view('input/longtext',array( +			'name' => 'description', +			'value' => $description, +		));  +	?> +</div> +<div class="elgg-foot"> +	<?php +		echo elgg_view('input/submit', array( +			'value' => elgg_echo('reportedcontent:report'), +		)); +	?> +</div> diff --git a/mod/reportedcontent/views/default/object/reported_content.php b/mod/reportedcontent/views/default/object/reported_content.php new file mode 100644 index 000000000..cc33f54fb --- /dev/null +++ b/mod/reportedcontent/views/default/object/reported_content.php @@ -0,0 +1,84 @@ +<?php +/** + * Elgg reported content object view + * + * @package ElggReportContent + */ + +$report = $vars['entity']; +$reporter = $report->getOwnerEntity(); + +$archive_url = elgg_get_site_url() . "action/reportedcontent/archive?guid=$report->guid"; +$delete_url = elgg_get_site_url() . "action/reportedcontent/delete?guid=$report->guid"; + +//find out if the report is current or archive +if ($report->state == 'archived') { +	$reportedcontent_background = "reported-content-archived"; +} else { +	$reportedcontent_background = "reported-content-active"; +} + +?> + +<div class="reported-content <?php echo $reportedcontent_background; ?>"> +	<div class="clearfix"> +		<div class="clearfix controls"> +<?php +	if ($report->state != 'archived') { +		$params = array( +			'href' => $archive_url, +			'text' => elgg_echo('reportedcontent:archive'), +			'is_action' => true, +			'is_trusted' => true, +			'class' => 'elgg-button elgg-button-action', +		); +		echo elgg_view('output/url', $params); +	} +	$params = array( +		'href' => $delete_url, +		'text' => elgg_echo('reportedcontent:delete'), +		'is_action' => true, +		'is_trusted' => true, +		'class' => 'elgg-button elgg-button-action', +	); +	echo elgg_view('output/url', $params); +?> +		</div> +		<p> +			<b><?php echo elgg_echo('reportedcontent:by'); ?>:</b> +			<?php echo elgg_view('output/url', array( +				'href' => $reporter->getURL(), +				'text' => $reporter->name, +				'is_trusted' => true, +			)); +			?>, +			<?php echo elgg_view_friendly_time($report->time_created); ?> +		</p> +		<p> +			<b><?php echo elgg_echo('reportedcontent:objecttitle'); ?>:</b> +			<?php echo $report->title; ?> +		<p> +			<b><?php echo elgg_echo('reportedcontent:objecturl'); ?>:</b> +			<?php echo elgg_view('output/url', array( +				'href' => $report->address, +				'text' => elgg_echo('reportedcontent:visit'), +				'is_trusted' => true, +			)); +			?> +		</p> +		<p> +			<?php echo elgg_view('output/url', array( +				'href' => "#report-$report->guid", +				'text' => elgg_echo('reportedcontent:moreinfo'), +				'rel' => "toggle", +			)); +			?> +		</p> +	</div> +	<div class="report-details hidden" id="report-<?php echo $report->getGUID();?>"> +		<p> +			<b><?php echo elgg_echo('reportedcontent:reason'); ?>:</b> +			<?php echo $report->description; ?> +		</p> +	</div> +</div> diff --git a/mod/reportedcontent/views/default/reportedcontent/admin_css.php b/mod/reportedcontent/views/default/reportedcontent/admin_css.php new file mode 100644 index 000000000..1ed240f3b --- /dev/null +++ b/mod/reportedcontent/views/default/reportedcontent/admin_css.php @@ -0,0 +1,46 @@ +<?php +/** + * Elgg reported content admin CSS + * + * @package ElggReportContent + */ +?> + +/* REPORTED CONTENT */ +.reported-content { +	margin: 5px 0 0; +	padding: 5px 7px 3px 9px; +	 +	-webkit-border-radius: 5px; +	-moz-border-radius: 5px; +	border-radius: 5px; +} +.reported-content p { +	margin: 0; +} +.reported-content-active { +	border: 1px solid #D3322A; +	background: #F7DAD8; +} +.reported-content-archived { +	border: 1px solid #666666; +	background: #dedede; +} +.reported-content .controls { +	float: right; +	margin: 5px 0 0 10px; +} +.report-details { +	background-color: white; +	padding: 5px; +	margin-bottom: 5px; +	max-width: 500px; +	 +	-webkit-border-radius: 5px; +	-moz-border-radius: 5px; +	border-radius: 5px; +} +.elgg-widget-content .reported-content .elgg-button { +	display: block; +	margin: 5px; +} diff --git a/mod/reportedcontent/views/default/reportedcontent/css.php b/mod/reportedcontent/views/default/reportedcontent/css.php new file mode 100644 index 000000000..da88ecf70 --- /dev/null +++ b/mod/reportedcontent/views/default/reportedcontent/css.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg reported content CSS + * + * Footer link CSS + *  + * @package ElggReportContent + */ + +?> +/* Reported Content */ +.elgg-icon-report-this { +	background: url(<?php echo elgg_get_site_url(); ?>mod/reportedcontent/graphics/icon_reportthis.gif) no-repeat left top; +} diff --git a/mod/reportedcontent/views/default/widgets/reportedcontent/content.php b/mod/reportedcontent/views/default/widgets/reportedcontent/content.php new file mode 100644 index 000000000..0095decca --- /dev/null +++ b/mod/reportedcontent/views/default/widgets/reportedcontent/content.php @@ -0,0 +1,16 @@ +<?php +/** + * List the latest reports + */ + +$list = elgg_list_entities(array( +	'type' => 'object', +	'subtype' => 'reported_content', +	'limit' => $vars['entity']->num_display, +	'pagination' => false, +)); +if (!$list) { +	$list = '<p class="mtm">' . elgg_echo('reportedcontent:none') . '</p>'; +} + +echo $list;
\ No newline at end of file diff --git a/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php b/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php new file mode 100644 index 000000000..ecd732d23 --- /dev/null +++ b/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php @@ -0,0 +1,22 @@ +<?php +/** + * Widget edit view + */ + +// set default value +if (!isset($vars['entity']->num_display)) { +	$vars['entity']->num_display = 4; +} + +$params = array( +	'name' => 'params[num_display]', +	'value' => $vars['entity']->num_display, +	'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), +); +$dropdown = elgg_view('input/dropdown', $params); + +?> +<div> +	<?php echo elgg_echo('reportedcontent:numbertodisplay'); ?>: +	<?php echo $dropdown; ?> +</div>  | 
