123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace AU\RiverPrivacy;
- const PLUGIN_ID = 'river_privacy';
- elgg_register_event_handler('init', 'system', __NAMESPACE__ . '\\init');
- /**
- * Plugin Init
- */
- function init() {
- // set the river item to private if it's not an object
- elgg_register_plugin_hook_handler('creating', 'river', __NAMESPACE__ . '\\creating_river_hook');
- // filter river views if necessary
- elgg_register_plugin_hook_handler('view_vars', 'page/components/list', __NAMESPACE__ . '\\filter_list_vars');
-
- // add access check back into the river queries
- elgg_register_plugin_hook_handler('get_sql', 'access', __NAMESPACE__ . '\\river_access_query');
- }
- /**
- * hook called before river creation
- * return associative array of parameters to create the river entry
- *
- * @param type $hook
- * @param type $type
- * @param string $returnvalue
- * @param type $params
- * @return string
- */
- function creating_river_hook($hook, $type, $returnvalue, $params) {
- if ($returnvalue['type'] != 'object') {
- $returnvalue['access_id'] = ACCESS_PRIVATE;
- }
- return $returnvalue;
- }
- /**
- * filter the items sent to a list view
- *
- * @param type $hook
- * @param type $type
- * @param type $return
- * @param type $params
- * @return type
- */
- function filter_list_vars($hook, $type, $return, $params) {
- $filter_river = elgg_get_plugin_setting('hide_old_items', PLUGIN_ID);
- if ($filter_river == 'no') {
- // no need to filter
- return $return;
- }
- if ($return['items'] && is_array($return['items'])) {
- foreach ($return['items'] as $key => $item) {
- if (!($item instanceof \ElggRiverItem)) {
- continue;
- }
- if ($item->type == 'object') {
- continue;
- }
- if ($item->subject_guid == elgg_get_logged_in_user_guid()) {
- continue;
- }
- if (elgg_is_admin_logged_in()) {
- continue;
- }
-
- if (elgg_get_ignore_access()) {
- continue;
- }
- unset($return['items'][$key]);
- }
- }
-
- return $return;
- }
- /**
- * Add a custom access clause for river queries
- *
- * @param type $hook
- * @param type $type
- * @param array $return
- * @param type $params
- * @return type
- */
- function river_access_query($hook, $type, $return, $params) {
- // anything else we can use to isolate river queries?
- // currently 'oe' is only used in core by river queries
- // but it's not really a great way to judge...
- if ($params['table_alias'] != 'oe') {
- return $return;
- }
-
- if ($params['ignore_access']) {
- return $return;
- }
-
- if (elgg_is_admin_logged_in()) {
- return $return;
- }
- $guid = (int) elgg_get_logged_in_user_guid();
- $return['ands'][] = "((rv.type != 'object' AND rv.subject_guid = {$guid}) OR rv.access_id != 0)";
-
- return $return;
- }
|