/** * Returns the logged in user entity * * @return SuccessResult|ErrorResult */ function ws_pack_users_get_logged_in_user() { $result = false; if ($user = elgg_get_logged_in_user_entity()) { if ($export = ws_pack_export_entity($user)) { $result = new SuccessResult($export); } } if ($result === false) { $result = new ErrorResult(elgg_echo("notfound")); } return $result; }
/** * Serch members * * @param int $guid Member GUID * * @return SuccessResult|ErrorResult */ function ws_pack_get_member($guid) { $result = false; $user = elgg_get_logged_in_user_entity(); $api_application = ws_pack_get_current_api_application(); if (!empty($user) && !empty($api_application)) { $member_result = get_entity($guid); if ($member_result !== false) { $member_result = ws_pack_export_entity($member_result); $result = new SuccessResult($member_result); } } if ($result === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } return $result; }
/** * Get Notifications * * @return SuccessResult|ErrorResult */ function ws_pack_get_notifications() { $result = false; $user = elgg_get_logged_in_user_entity(); $api_application = ws_pack_get_current_api_application(); if (!empty($user) && !empty($api_application)) { if (!$user_guid) { $user_guid = elgg_get_logged_in_user_guid(); } $options = array('type' => 'object', 'subtype' => 'site_notification', 'limit' => 50, 'order_by' => 'e.last_action desc', 'owner_guid' => $user->guid, 'full_view' => false, 'relationship' => 'hasActor', 'no_results' => elgg_echo('site_notifications:empty')); $notifications = elgg_get_entities_from_metadata($options); if ($notifications === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } else { $notifications["entities"] = ws_pack_export_entities($notifications); $guids = array(); foreach ($notifications["entities"] as $key => $notification) { $notification_guid = $notification["guid"]; if (!in_array($notification_guid, $guids)) { $guids[] = $notification_guid; $notification_entity = get_entity($notification_guid); $owner = get_entity($notification["owner_guid"]); $notification["owner"] = ws_pack_export_entity($owner); $notification["parent_guid"] = $notification_entity->getURL(); $notifications["entities"][$key] = $notification; } else { unset($notifications["entities"][$key]); } } $result = new SuccessResult($notifications); } if ($result === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } } return $result; }
/** * Get Last Conversation * * @param int $user_guid User GUID * @param int $limit Limit of Conversations * @param int $offset Offset * @param int $count Count * * @return SuccessResult|ErrorResult */ function ws_pack_get_last_conversations($user_guid, $limit = 100, $offset = 0, $count = false) { $result = false; $user = elgg_get_logged_in_user_entity(); $api_application = ws_pack_get_current_api_application(); if (!empty($user) && !empty($api_application)) { if (!$user_guid) { $user_guid = elgg_get_logged_in_user_guid(); } $db_prefix = elgg_get_config('dbprefix'); $strings = array('toId', $user_guid, 'msg', 1, 'fromId', $fromto_guid); $map = array(); foreach ($strings as $string) { $id = elgg_get_metastring_id($string); $map[$string] = $id; } $options = array('selects' => array("MAX(e.guid) as guid", "MAX(e.time_created) as time_created"), 'joins' => array("JOIN {$db_prefix}metadata msg_toId on e.guid = msg_toId.entity_guid", "JOIN {$db_prefix}metadata msg_msg on e.guid = msg_msg.entity_guid", "JOIN {$db_prefix}metadata msg_fromId on e.guid = msg_fromId.entity_guid"), 'owner_guid' => $user_guid, 'limit' => $limit, 'offset' => $offset, 'count' => $count); $options["wheres"] = array("msg_msg.name_id='{$map['msg']}' AND msg_msg.value_id='{$map[1]}'"); $options["group_by"] = "msg_fromId.value_id, msg_toId.value_id"; $messages = elgg_get_entities_from_metadata($options); if ($messages === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } else { $messages["entities"] = ws_pack_export_entities($messages); $guids = array(); foreach ($messages["entities"] as $key => $message) { $message_guid = $message["guid"]; if (!in_array($message_guid, $guids)) { $guids[] = $message_guid; $message_entity = get_entity($message_guid); $recipient_id = $message_entity->toId; if ($recipient_id === $user_guid) { $recipient_id = $message_entity->fromId; } $recipient = get_entity($recipient_id); $message["recipient"] = ws_pack_export_entity($recipient); $messages["entities"][$key] = $message; } else { unset($messages["entities"][$key]); } } $result = new SuccessResult($messages); } } if ($result === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } return $result; }
/** * Get Thread * * @param int $thread_id Thread GUID * * @return SuccessResult|ErrorResult */ function ws_pack_get_thread($thread_id = false) { $result = false; $user = elgg_get_logged_in_user_entity(); $api_application = ws_pack_get_current_api_application(); if (!empty($user) && !empty($api_application)) { $threads = elgg_get_entities_from_metadata(array("metadata_name" => "wire_thread", "metadata_value" => $thread_id, "type" => "object", "subtype" => "thewire", "limit" => 20)); // returns guid of wire post if ($threads === false) { // error } else { $wires = array(); $wires["entities"] = ws_pack_export_entities($threads); $guids_thread = array(); foreach ($wires["entities"] as $k => $wt) { $wire_guid_th = $wt["guid"]; if (!in_array($wire_guid_th, $guids_thread)) { $guids_thread[] = $wire_guid_th; $owner_thread = get_entity($wt["owner_guid"]); $wt["owner"] = ws_pack_export_entity($owner_thread); $parent = thewire_get_parent($wire_guid_th); $wt["parent"] = ws_pack_export_entity($parent); if ($parent !== false) { $parent_owner = get_entity($wt["parent"]["owner_guid"]); $wt["parent_owner"] = ws_pack_export_entity($parent_owner); } $wires["entities"][$k] = $wt; } else { unset($wires["entities"][$k]); } } $result = new SuccessResult($wires); } if ($result === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } } return $result; }
/** * 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; }
/** * Get Discussion * * @param int $guid Discussion GUID * * @return SuccessResult|ErrorResult */ function ws_pack_get_discussion($guid) { $result = false; $user = elgg_get_logged_in_user_entity(); $api_application = ws_pack_get_current_api_application(); if (!empty($user) && !empty($api_application)) { $options = array('type' => 'object', 'order_by' => 'e.last_action desc', 'guid' => $guid, 'full_view' => false, 'no_results' => elgg_echo('discussion:none')); $discussions = elgg_get_entities($options); // returns guid of wire post if ($discussions === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } else { $discussions["entities"] = ws_pack_export_entities($discussions); $guids = array(); foreach ($discussions["entities"] as $key => $discussion) { $discussion_guid = $discussion["guid"]; if (!in_array($discussion_guid, $guids)) { $guids[] = $discussion_guid; $owner = get_entity($discussion["owner_guid"]); $discussion["owner"] = ws_pack_export_entity($owner); $discussions["entities"][$key] = $discussion; } else { unset($discussions["entities"][$key]); } } $result = new SuccessResult($discussions); } if ($result === false) { $result = new ErrorResult(elgg_echo("ws_pack:error:notfound")); } } return $result; }