-/**
- * Adds a "lang" specification in a "postopts" element of given $arr,
- * if possible and not already present.
- * Expects "body" element to exist in $arr.
- *
- * @todo Add a parameter to request forcing override
- */
-function item_add_language_opt(&$arr) {
-
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
- // LanguageDetect.php not available ?
- return;
- }
-
- if (x($arr, 'postopts') ) {
- if (strstr($arr['postopts'], 'lang=') ) {
- // do not override
- /// @TODO Add parameter to request overriding
- return;
- }
- $postopts = $arr['postopts'];
- } else {
- $postopts = "";
- }
-
- $naked_body = preg_replace('/\[(.+?)\]/','', $arr['body']);
- $l = new Text_LanguageDetect();
- $lng = $l->detect($naked_body, 3);
-
- if (sizeof($lng) > 0) {
- if ($postopts != "") $postopts .= '&'; // arbitrary separator, to be reviewed
- $postopts .= 'lang=';
- $sep = "";
- foreach ($lng as $language => $score) {
- $postopts .= $sep . $language . ";" . $score;
- $sep = ':';
- }
- $arr['postopts'] = $postopts;
- }
-}
-
-/**
- * @brief Creates an unique guid out of a given uri
- *
- * @param string $uri uri of an item entry
- * @param string $host (Optional) hostname for the GUID prefix
- * @return string unique guid
- */
-function uri_to_guid($uri, $host = "") {
-
- // Our regular guid routine is using this kind of prefix as well
- // We have to avoid that different routines could accidentally create the same value
- $parsed = parse_url($uri);
-
- // When the hostname isn't given, we take it from the uri
- if ($host == "") {
- // Is it in the format data@host.tld?
- if ((count($parsed) == 1) && strstr($uri, '@')) {
- $mailparts = explode('@', $uri);
- $host = array_pop($mailparts);
- } else {
- $host = $parsed["host"];
- }
- }
-
- // We use a hash of the hostname as prefix for the guid
- $guid_prefix = hash("crc32", $host);
-
- // Remove the scheme to make sure that "https" and "http" doesn't make a difference
- unset($parsed["scheme"]);
-
- // Glue it together to be able to make a hash from it
- $host_id = implode("/", $parsed);
-
- // We could use any hash algorithm since it isn't a security issue
- $host_hash = hash("ripemd128", $host_id);
-
- return $guid_prefix.$host_hash;
-}
-
-/**
- * @brief Store the conversation data
- *
- * @param array $arr Item array with conversation data
- * @return array Item array with removed conversation data
- */
-function store_conversation($arr) {
- if (in_array(defaults($arr, 'network', NETWORK_PHANTOM), array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)) && !empty($arr['uri'])) {
- $conversation = array('item-uri' => $arr['uri'], 'received' => DBM::date());
-
- if (isset($arr['parent-uri']) && ($arr['parent-uri'] != $arr['uri'])) {
- $conversation['reply-to-uri'] = $arr['parent-uri'];
- }
- if (isset($arr['thr-parent']) && ($arr['thr-parent'] != $arr['uri'])) {
- $conversation['reply-to-uri'] = $arr['thr-parent'];
- }
-
- if (isset($arr['conversation-uri'])) {
- $conversation['conversation-uri'] = $arr['conversation-uri'];
- }
-
- if (isset($arr['conversation-href'])) {
- $conversation['conversation-href'] = $arr['conversation-href'];
- }
-
- if (isset($arr['protocol'])) {
- $conversation['protocol'] = $arr['protocol'];
- }
-
- if (isset($arr['source'])) {
- $conversation['source'] = $arr['source'];
- }
-
- $old_conv = dba::fetch_first("SELECT `item-uri`, `reply-to-uri`, `conversation-uri`, `conversation-href`, `protocol`, `source`
- FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
- if (DBM::is_result($old_conv)) {
- // Don't update when only the source has changed.
- // Only do this when there had been no source before.
- if ($old_conv['source'] != '') {
- unset($old_conv['source']);
- }
- // Update structure data all the time but the source only when its from a better protocol.
- if (($old_conv['protocol'] < $conversation['protocol']) && ($old_conv['protocol'] != 0)) {
- unset($conversation['protocol']);
- unset($conversation['source']);
- }
- if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']), $old_conv)) {
- logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
- }
- } else {
- if (!dba::insert('conversation', $conversation, true)) {
- logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
- }
- }
- }
-
- unset($arr['conversation-uri']);
- unset($arr['conversation-href']);
- unset($arr['protocol']);
- unset($arr['source']);
-
- return $arr;
-}
-