/** * Send push notifications if event is added to the activity river * * @param string $event name of the event * @param string $type type of the event * @param ElggRiverItem $river_item river item object * * @return void */ function ws_pack_created_river_event_handler($event, $type, $river_item) { if (!empty($river_item) && $river_item instanceof ElggRiverItem) { if (!function_exists('str_get_html')) { elgg_load_library("simple_html_dom"); } $message = ""; $html_view = elgg_view_river_item($river_item); if ($res = str_get_html($html_view)) { // get the river summary if ($summary_element = $res->find("div.elgg-river-summary")) { $summary_element = $summary_element[0]; $text = $summary_element->innertext(); list($left, $right) = explode("<span class=\"elgg-river-timestamp\">", $text); $message = trim(elgg_strip_tags($left)); } } if (!empty($message)) { $user_guids = false; switch ($river_item->access_id) { case ACCESS_PRIVATE: // do nothing break; case ACCESS_PUBLIC: case ACCESS_LOGGED_IN: // notify everyone $site_user_options = array("type" => "user", "limit" => false, "relationship" => "member_of_site", "relationship_guid" => elgg_get_site_entity()->getGUID(), "inverse_relationship" => true, "callback" => "ws_pack_row_to_guid"); $user_guids = elgg_get_entities_from_relationship($site_user_options); break; case ACCESS_FRIENDS: // notify friends of subject_guid $friends_options = array("type" => "user", "limit" => false, "relationship" => "friend", "relationship_guid" => $river_item->subject_guid, "callback" => "ws_pack_row_to_guid", "joins" => array("JOIN " . elgg_get_config("dbprefix") . "entity_relationships r2 ON e.guid = r2.guid_one"), "wheres" => array("(r2.relationship = 'member_of_site' AND r2.guid_two = " . elgg_get_site_entity()->getGUID() . ")")); $user_guids = elgg_get_entities_from_relationship($friends_options); break; default: // probably some acl, so notify members of the acl $user_guids = get_members_of_access_collection($river_item->access_id, true); break; } // we found potential interested users, so push if (!empty($user_guids) && is_array($user_guids)) { $api_application_options = array("type" => "object", "subtype" => APIApplication::SUBTYPE, "limit" => false, "annotation_name" => "push_notification_service"); if ($api_applications = elgg_get_entities_from_annotations($api_application_options)) { foreach ($api_applications as $api_application) { $api_application->sendPushNotification($message, $user_guids); } } } } } }
/** * View an item in a list * * @param ElggEntity|ElggAnnotation $item * @param array $vars Additional parameters for the rendering * * @return string * @since 1.8.0 * @access private */ function elgg_view_list_item($item, array $vars = array()) { global $CONFIG; $type = $item->getType(); if (in_array($type, $CONFIG->entity_types)) { return elgg_view_entity($item, $vars); } else { if ($type == 'annotation') { return elgg_view_annotation($item, $vars); } else { if ($type == 'river') { return elgg_view_river_item($item, $vars); } } } return ''; }
/** * View an item in a list * * @param object $item ElggEntity or ElggAnnotation * @param array $vars Additional parameters for the rendering * * @return string * @since 1.8.0 * @access private */ function elgg_view_list_item($item, array $vars = array()) { switch ($item->getType()) { case 'user': case 'object': case 'group': case 'site': return elgg_view_entity($item, $vars); case 'annotation': return elgg_view_annotation($item, $vars); case 'river': return elgg_view_river_item($item, $vars); default: return false; break; } }
/** * * @package Elgg * @subpackage Core * @author Curverider Ltd * @link http://elgg.org/ * */ ?> <div class="river_item_list"> <?php if (isset($vars['items']) && is_array($vars['items'])) { $i = 0; if (!empty($vars['items'])) { foreach ($vars['items'] as $item) { echo elgg_view_river_item($item); $i++; if ($i >= $vars['limit']) { break; } } } } if ($vars['pagination'] !== false) { $baseurl = $_SERVER['REQUEST_URI']; $nav = ''; if (sizeof($vars['items']) > $vars['limit']) { $newoffset = $vars['offset'] + $vars['limit']; $nexturl = elgg_http_add_url_query_elements($baseurl, array('offset' => $newoffset)); $nav .= '<a class="back" href="' . $nexturl . '">« ' . elgg_echo('previous') . '</a> '; }
/** * View an item in a list * * @param \ElggEntity|\ElggAnnotation $item * @param array $vars Additional parameters for the rendering * 'item_view' Alternative view used to render list items * @return string * @since 1.8.0 * @access private */ function elgg_view_list_item($item, array $vars = array()) { if ($item instanceof \ElggEntity) { return elgg_view_entity($item, $vars); } else { if ($item instanceof \ElggAnnotation) { return elgg_view_annotation($item, $vars); } else { if ($item instanceof \ElggRiverItem) { return elgg_view_river_item($item, $vars); } } } return ''; }
/** * Export river items * * @param array $items river items to export * * @return boolean|array */ function ws_pack_export_river_items($items) { elgg_load_library("simple_html_dom"); $result = false; if (!empty($items) && is_array($items)) { $result = array(); foreach ($items as $item) { if ($item instanceof ElggRiverItem) { $tmp_result = array(); // default export values $export_values = array("id", "subject_guid", "object_guid", "annotation_id", "type", "subtype", "action_type", "posted"); foreach ($export_values as $field_name) { $tmp_result[$field_name] = $item->{$field_name}; } // add object and subject entities $tmp_result["object"] = ws_pack_export_entity($item->getObjectEntity()); $tmp_result["subject"] = ws_pack_export_entity($item->getSubjectEntity()); // add some html views // set viewtype to default $viewtype = elgg_get_viewtype(); elgg_set_viewtype("default"); $tmp_result["html_view"] = elgg_view_river_item($item); // parse the html to get some usefull information if ($res = str_get_html($tmp_result["html_view"])) { // get the river summary if ($summary_element = $res->find("div.elgg-river-summary")) { $summary_element = $summary_element[0]; $text = $summary_element->innertext(); list($left, $right) = explode("<span class=\"elgg-river-timestamp\">", $text); $tmp_result["summary"] = trim(elgg_strip_tags($left)); } // get the river message (optional) if ($message_element = $res->find("div.elgg-river-message")) { $message_element = $message_element[0]; $tmp_result["message"] = trim(elgg_strip_tags($message_element->innertext())); } // get river attachments (optional) if ($attachment_element = $res->find("div.elgg-river-attachments")) { $attachment_element = $attachment_element[0]; $tmp_result["attachments"] = array(); // find images if ($images = $attachment_element->find("img")) { $image_urls = array(); foreach ($images as $img) { $image_urls[] = $img->src; } $tmp_result["attachments"]["images"] = $image_urls; } // find links if ($links = $attachment_element->find("a")) { $link_urls = array(); foreach ($links as $link) { $link_urls[] = $link->href; } $tmp_result["attachments"]["links"] = $link_urls; } } } // add friendly time $friendly_time = elgg_view_friendly_time($item->posted); $tmp_result["friendly_time"] = trim(elgg_strip_tags($friendly_time)); // restore viewtype elgg_set_viewtype($viewtype); // add this item to the result set $result[] = $tmp_result; } } } return $result; }