protected function renderTable($limit, $offset = 0) { static $count; static $iterator; $options = ['query' => sanitize_string($this->option('keyword')), 'guids' => $this->option('guid') ?: ELGG_ENTITIES_ANY_VALUE, 'types' => $this->option('type') ?: 'object', 'subtypes' => $this->option('subtype') ?: ELGG_ENTITIES_ANY_VALUE, 'limit' => $limit, 'offset' => (int) $offset, 'order_by' => 'e.guid ASC']; if ($this->option('keyword')) { $results = elgg_trigger_plugin_hook('search', $this->option('type') ?: 'object', $options, []); $count = $results['count']; $batch = $results['entities']; } else { $options['count'] = true; if (!$count) { $count = elgg_get_entities($options); } unset($options['count']); $batch = new ElggBatch('elgg_get_entities', $options); } if (!$count) { $this->write('<comment>No entities to display</comment>'); return; } $headers = ['#', 'GUID', 'Type', 'Title/name', 'Description', 'Owner', 'Container', 'Access']; if ($this->option('full-view')) { $headers[] = 'Metadata'; } $table = new Table($this->output); $table->setHeaders($headers); foreach ($batch as $entity) { /* @var $entity \ElggEntity */ $row = [$iterator, $entity->guid, ($subtype = $entity->getSubtype()) ? elgg_echo("item:{$entity->type}:{$subtype}") : elgg_echo("item:{$entity->type}"), elgg_get_excerpt($entity->getDisplayName(), 25), elgg_get_excerpt($entity->description, 25), ($owner = $entity->getOwnerEntity()) ? '[' . $owner->guid . '] ' . elgg_get_excerpt($owner->getDisplayName(), 25) : '', ($container = $entity->getContainerEntity()) ? '[' . $container->guid . '] ' . elgg_get_excerpt($container->getDisplayName(), 25) : '', '[' . $entity->access_id . '] ' . elgg_get_excerpt(get_readable_access_level($entity->access_id), 25)]; if ($this->option('full-view')) { $metadata = new \ElggBatch('elgg_get_metadata', ['guids' => $entity->guid, 'limit' => 0]); $metatable = []; foreach ($metadata as $md) { $name = $md->name; $values = (array) $md->value; foreach ($values as $value) { $metatable[] = "{$name}: {$value}"; } } $row[] = implode("\n", $metatable); } $table->addRow($row); $table->addRow(new TableSeparator()); $iterator++; } $table->render(); if ($count > $limit + $offset) { $helper = $this->getHelper('question'); $question = new ConfirmationQuestion('Load next batch [y,n]?', true); if (!$helper->ask($this->input, $this->output, $question)) { return; } $this->renderTable($limit, $limit + $offset); } }
/** * Show the group access status indicator * * @param string $hook the name of the hook * @param string $type the type of the hook * @param \ElggMenuItem[] $return_value current return vaue * @param array $params supplied params * * @return void|\ElggMenuItem[] */ public static function showGroupHiddenIndicator($hook, $type, $return_value, $params) { $entity = elgg_extract('entity', $params); if (!$entity instanceof \ElggGroup) { return; } if (!group_tools_show_hidden_indicator($entity)) { return; } $access_id_string = get_readable_access_level($entity->access_id); $text = elgg_format_element('span', ['title' => $access_id_string], elgg_view_icon('eye')); $return_value[] = \ElggMenuItem::factory(['name' => 'hidden_indicator', 'text' => $text, 'href' => false, 'priority' => 1]); return $return_value; }
<?php /** * Displays HTML for entity access levels. * Requires an entity because some special logic for containers is used. * * @uses int $vars['entity'] - The entity whose access ID to display. */ //sort out the access level for display if (isset($vars['entity']) && elgg_instanceof($vars['entity'])) { $access_id = $vars['entity']->access_id; $access_class = 'elgg-access'; $access_id_string = get_readable_access_level($access_id); // if within a group or shared access collection display group name and open/closed membership status // @todo have a better way to do this instead of checking against subtype / class. $container = $vars['entity']->getContainerEntity(); if ($container && $container instanceof ElggGroup) { // we decided to show that the item is in a group, rather than its actual access level // not required. Group ACLs are prepended with "Group: " when written. //$access_id_string = elgg_echo('groups:group') . $container->name; $membership = $container->membership; if ($membership == ACCESS_PUBLIC) { $access_class .= ' elgg-access-group-open'; } else { $access_class .= ' elgg-access-group-closed'; } // @todo this is plugin specific code in core. Should be removed. } elseif ($container && $container->getSubtype() == 'shared_access') { $access_class .= ' shared_collection'; } elseif ($access_id == ACCESS_PRIVATE) { $access_class .= ' elgg-access-private';
public static function getAccess(PropertyInterface $prop, $object) { $key = $prop->getAttributeName(); $modes = array_flip($prop->getEnumOptions()); return array('id' => $object->{$key}, 'label' => elgg_extract($key, $modes, get_readable_access_level($object->{$key}))); }
foreach ($annotations as $ann) { $hidden = elgg_view('input/hidden', array('name' => "{$name}[id][{$index}]", 'value' => $ann->id, 'data-reset' => true)); $hidden .= elgg_view('input/hidden', array('name' => "{$name}[name][{$index}]", 'value' => $ann->name ? $ann->name : $name)); $hidden .= elgg_view('input/hidden', array('name' => "{$name}[owner_guid][{$index}]", 'value' => $ann->owner_guid ? $ann->owner_guid : elgg_get_logged_in_user_guid())); $input_vars = $field->getInputVars($entity); $input_vars['name'] = "{$name}[value][{$index}]"; $input_vars['value'] = $ann->value; $input_vars['data-reset'] = true; $input_vars['placeholder'] = $label; $type = $field->getType(); $view = $field->getInputView(); $input = elgg_view($view, $input_vars); $show_access = $field->hasAccessInput(); $access = ''; if (is_int($show_access)) { $access .= '<span class="elgg-access">' . get_readable_access_level($access_id) . '</span>'; $access_id = $show_access; $access_type = 'hidden'; } else { $access_id = $ann->access_id ? $ann->access_id : $entity->guid ? $entity->access_id : get_default_access(); if ($show_access === true && $type !== 'hidden') { $access_type = 'access'; } else { $access_type = 'hidden'; } } $access .= elgg_view("input/{$access_type}", array('name' => "{$name}[access_id][{$index}]", 'value' => $access_id)); if ($type == 'hidden') { echo $hidden . $access . $input; continue; }
/** * Change some menu items to icons * * @param string $hook the name of the hook * @param string $type the type of the hook * @param ElggMenuItem[] $return_value current return value * @param mixed $params supplied params * * @return ElggMenuItem[] */ function theme_haarlem_intranet_entity_menu_icons($hook, $type, $return_value, $params) { if (empty($return_value) || !is_array($return_value)) { return $return_value; } if (empty($params) || !is_array($params)) { return $return_value; } $entity = elgg_extract('entity', $params); if (empty($entity) || !elgg_instanceof($entity)) { return $return_value; } $site = elgg_get_site_entity(); $container = $entity->getContainerEntity(); foreach ($return_value as $menu_item) { switch ($menu_item->getName()) { case 'edit': if (!$menu_item->getTooltip()) { $menu_item->setTooltip($menu_item->getText()); } $menu_item->setPriority(1); $menu_item->setText(elgg_view_icon('pencil')); break; case 'access': $access_id_string = get_readable_access_level($entity->access_id); $access_id_string = htmlspecialchars($access_id_string, ENT_QUOTES, 'UTF-8', false); $menu_item->setTooltip($access_id_string); $menu_item->setHref('#'); switch ($entity->access_id) { case ACCESS_PRIVATE: $menu_item->setText(elgg_view_icon('minus-circle')); break; case ACCESS_LOGGED_IN: $menu_item->setText(elgg_view_icon('circle-o-notch')); break; default: if ($site instanceof Subsite && $entity->access_id == $site->getACL()) { // subsite $menu_item->setText(elgg_view_icon('circle-o')); } if ($container instanceof ElggGroup && $entity->access_id == $container->group_acl) { // group $menu_item->setText(elgg_view_icon('dot-circle-o')); } break; } break; case 'history': $menu_item->setTooltip($menu_item->getText()); $menu_item->setText(elgg_view_icon('clock-o')); break; } } }
/** * Modify the entity menu. * * @param string $hook the 'register' hook * @param string $type for the 'menu:entity' menu * @param array $return_value the menu items to show * @param array $params params to help extend the menu items * * @return ElggMenuItem[] a list of menu items */ function group_tools_menu_entity_handler($hook, $type, $return_value, $params) { $result = $return_value; if (!empty($params) && is_array($params)) { $entity = elgg_extract("entity", $params); $page_owner = elgg_get_page_owner_entity(); if (elgg_in_context("group_tools_related_groups") && !empty($page_owner) && elgg_instanceof($page_owner, "group") && $page_owner->canEdit() && elgg_instanceof($entity, "group")) { // remove related group $result[] = ElggMenuItem::factory(array("name" => "related_group", "text" => elgg_echo("group_tools:related_groups:entity:remove"), "href" => "action/group_tools/remove_related_groups?group_guid=" . $page_owner->getGUID() . "&guid=" . $entity->getGUID(), "confirm" => elgg_echo("question:areyousure"))); } elseif (elgg_in_context("widgets_groups_show_members") && elgg_instanceof($entity, "group")) { // number of members $num_members = $entity->getMembers(10, 0, true); $result[] = ElggMenuItem::factory(array("name" => "members", "text" => $num_members . " " . elgg_echo("groups:member"), "href" => false, "priority" => 200)); } elseif (elgg_instanceof($entity, "object", "groupforumtopic") && $entity->canEdit()) { $result[] = ElggMenuItem::factory(array("name" => "status_change_open", "text" => elgg_echo("open"), "confirm" => elgg_echo("group_tools:discussion:confirm:open"), "href" => "action/discussion/toggle_status?guid=" . $entity->getGUID(), "is_trusted" => true, "priority" => 200, "item_class" => $entity->status == "closed" ? "" : "hidden")); $result[] = ElggMenuItem::factory(array("name" => "status_change_close", "text" => elgg_echo("close"), "confirm" => elgg_echo("group_tools:discussion:confirm:close"), "href" => "action/discussion/toggle_status?guid=" . $entity->getGUID(), "is_trusted" => true, "priority" => 201, "item_class" => $entity->status == "closed" ? "hidden" : "")); } elseif (elgg_instanceof($entity, "group") && group_tools_show_hidden_indicator($entity)) { $access_id_string = get_readable_access_level($entity->access_id); $access_id_string = htmlspecialchars($access_id_string, ENT_QUOTES, "UTF-8", false); $text = "<span title='" . $access_id_string . "'>" . elgg_view_icon("eye") . "</span>"; $result[] = ElggMenuItem::factory(array("name" => "hidden_indicator", "text" => $text, "href" => false, "priority" => 1)); } elseif (!elgg_in_context("widgets") && !empty($page_owner) && elgg_instanceof($page_owner, "group") && $page_owner->canEdit() && elgg_instanceof($entity, "user")) { // user listing in a group if ($page_owner->getOwnerGUID() != $entity->getGUID() && $entity->getGUID() != elgg_get_logged_in_user_guid() && $page_owner->isMember($entity)) { // remove user from group $result[] = ElggMenuItem::factory(array("name" => "removeuser", "text" => elgg_echo('groups:removeuser'), "href" => "action/groups/remove?user_guid=" . $entity->getGUID() . "&group_guid=" . $page_owner->getGUID(), "confirm" => elgg_echo("question:areyousure"), "priority" => 900)); // add/remove group admins if (group_tools_group_multiple_admin_enabled($page_owner)) { $is_admin = check_entity_relationship($entity->getGUID(), "group_admin", $page_owner->getGUID()); $result[] = ElggMenuItem::factory(array("name" => "group_admin", "text" => elgg_echo("group_tools:multiple_admin:profile_actions:add"), "href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $entity->getGUID(), "is_action" => true, "priority" => 800, "item_class" => $is_admin ? "hidden" : "")); $result[] = ElggMenuItem::factory(array("name" => "group_admin_remove", "text" => elgg_echo("group_tools:multiple_admin:profile_actions:remove"), "href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $entity->getGUID(), "is_action" => true, "priority" => 801, "item_class" => $is_admin ? "" : "hidden")); } } } } return $result; }
/** * Extender export * * @param string $hook "to:object" * @param string $type Metadata or annotation name * @param stdClass $return Export object * @param array $params Hook params * @return stdClass */ public function exportExtender($hook, $type, $return, $params) { if (!elgg_in_context('graph')) { return $return; } $aliases = $this->getAliases(); $annotation_names = (array) elgg_extract('annotation', $aliases, array()); $metadata_names = (array) elgg_extract('metadata', $aliases, array()); $extender_names = array_merge($annotation_names, $metadata_names); foreach ($params as $key => $entity) { if (in_array($key, $extender_names) && $entity instanceof \ElggExtender) { break; } } if (!$entity instanceof ElggExtender) { return $return; } $allowed = $this->getFields($entity); $fields = get_input('fields') ?: $allowed; if (is_string($fields)) { $fields = string_to_tag_array($fields); } $result = array(); foreach ($fields as $key) { if (!in_array($key, $allowed)) { $result[$key] = ELGG_ENTITIES_ANY_VALUE; continue; } switch ($key) { default: $result[$key] = $entity->{$key}; break; case 'uid': if ($entity->getType() == 'metadata') { $result[$key] = "md{$entity->id}"; } else { $result[$key] = "an{$entity->id}"; } break; case 'type': $result[$key] = $entity->getType(); break; case 'subtype': $result[$key] = $entity->getSubtype(); break; case 'owner': $owner = $entity->getOwnerEntity(); $result[$key] = $owner ? $owner->toObject() : null; break; case 'entity': $parent = $entity->getEntity(); $result[$key] = $parent ? $parent->toObject() : null; break; case 'time_created': $result[$key] = date(DATE_ATOM, $entity->time_created); break; case 'access': $result[$key] = array('id' => $entity->access_id, 'label' => get_readable_access_level($entity->access_id)); break; } } return (object) $result; }
/** * Elgg bookmark view * * @package ElggBookmarks * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Curverider <*****@*****.**> * @copyright Curverider Ltd 2008-2010 * @link http://elgg.org/ */ $owner = $vars['entity']->getOwnerEntity(); $friendlytime = friendly_time($vars['entity']->time_created); $parsed_url = parse_url($vars['entity']->address); $faviconurl = $parsed_url['scheme'] . "://" . $parsed_url['host'] . "/favicon.ico"; //sort out the access level for display $object_acl = get_readable_access_level($vars['entity']->access_id); //files with these access level don't need an icon $general_access = array('Public', 'Logged in users', 'Friends'); //set the right class for access level display - need it to set on groups and shared access only $is_group = get_entity($vars['entity']->container_guid); if ($is_group instanceof ElggGroup) { //get the membership type open/closed $membership = $is_group->membership; //we decided to show that the item is in a group, rather than its actual access level $object_acl = "Group: " . $is_group->name; if ($membership == 2) { $access_level = "class='access_level group_open'"; } else { $access_level = "class='access_level group_closed'"; } } elseif ($object_acl == 'Private') {
/** * Add ACCESS_FRIENDS to the available access levels * * @param string $hook "access:collections:write" * @param string $type "user" * @param array $access_array Access array * @param array $params Hook params * * @return array */ function _elgg_friends_write_access($hook, $type, $access_array, $params) { // rebuild array, putting friends 1st or 2nd $ret = []; // private exists, it goes first if (isset($access_array[ACCESS_PRIVATE])) { $ret[ACCESS_PRIVATE] = $access_array[ACCESS_PRIVATE]; unset($access_array[ACCESS_PRIVATE]); } // friends $ret[ACCESS_FRIENDS] = get_readable_access_level(ACCESS_FRIENDS); // rest foreach ($access_array as $key => $value) { $ret[$key] = $value; } return $ret; }
/** * Modify the entity menu. * * @param string $hook the 'register' hook * @param string $type for the 'menu:entity' menu * @param array $return_value the menu items to show * @param array $params params to help extend the menu items * * @return ElggMenuItem[] a list of menu items */ function group_tools_menu_entity_handler($hook, $type, $return_value, $params) { $result = $return_value; if (!empty($params) && is_array($params)) { $entity = elgg_extract("entity", $params); $page_owner = elgg_get_page_owner_entity(); if (elgg_in_context("group_tools_related_groups") && !empty($page_owner) && elgg_instanceof($page_owner, "group") && $page_owner->canEdit() && elgg_instanceof($entity, "group")) { // remove relatede group $result[] = ElggMenuItem::factory(array("name" => "related_group", "text" => elgg_echo("group_tools:related_groups:entity:remove"), "href" => "action/group_tools/remove_related_groups?group_guid=" . $page_owner->getGUID() . "&guid=" . $entity->getGUID(), "confirm" => elgg_echo("question:areyousure"))); } elseif (elgg_in_context("widgets_groups_show_members") && elgg_instanceof($entity, "group")) { // number of members $num_members = $entity->getMembers(10, 0, true); $result[] = ElggMenuItem::factory(array("name" => "members", "text" => $num_members . " " . elgg_echo("groups:member"), "href" => false, "priority" => 200)); } elseif (elgg_instanceof($entity, "object", "groupforumtopic") && $entity->canEdit()) { $text = elgg_echo("close"); $confirm = elgg_echo("group_tools:discussion:confirm:close"); if ($entity->status == "closed") { $text = elgg_echo("open"); $confirm = elgg_echo("group_tools:discussion:confirm:open"); } $result[] = ElggMenuItem::factory(array("name" => "status_change", "text" => $text, "confirm" => $confirm, "href" => "action/discussion/toggle_status?guid=" . $entity->getGUID(), "is_trusted" => true, "priority" => 200)); } elseif (elgg_instanceof($entity, "group") && group_tools_show_hidden_indicator($entity)) { $access_id_string = get_readable_access_level($entity->access_id); $access_id_string = htmlspecialchars($access_id_string, ENT_QUOTES, "UTF-8", false); $text = "<span title='" . $access_id_string . "'>" . elgg_view_icon("eye") . "</span>"; $result[] = ElggMenuItem::factory(array("name" => "hidden_indicator", "text" => $text, "href" => false, "priority" => 1)); } } return $result; }