From 28df35052a452ad992ad8d67cffbfa380759e414 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 5 Jan 2014 16:10:02 +0100 Subject: [PATCH 1/4] Send notifications for each new post of a contact, option for creating a summary for a feed post --- boot.php | 6 +- include/enotify.php | 36 ++++++++---- include/items.php | 101 +++++++++++++++++++++++++++----- mod/contacts.php | 12 +++- mod/crepair.php | 9 ++- update.php | 18 +++++- view/templates/contact_edit.tpl | 3 +- view/templates/crepair.tpl | 2 + 8 files changed, 155 insertions(+), 32 deletions(-) diff --git a/boot.php b/boot.php index 6b130edf9c..72eaec8fe5 100644 --- a/boot.php +++ b/boot.php @@ -14,7 +14,7 @@ require_once('include/features.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.2.1745' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1167 ); +define ( 'DB_UPDATE_VERSION', 1169 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); @@ -197,6 +197,7 @@ define ( 'NOTIFY_PROFILE', 0x0040 ); define ( 'NOTIFY_TAGSELF', 0x0080 ); define ( 'NOTIFY_TAGSHARE', 0x0100 ); define ( 'NOTIFY_POKE', 0x0200 ); +define ( 'NOTIFY_SHARE', 0x0400 ); define ( 'NOTIFY_SYSTEM', 0x8000 ); @@ -395,6 +396,9 @@ if(! class_exists('App')) { // array of instanced template engines ('name'=>'instance') public $template_engine_instance = array(); + // Used for reducing load to the ostatus completion + public $last_ostatus_conversation_url; + private $ldelim = array( 'internal' => '', 'smarty3' => '{{' diff --git a/include/enotify.php b/include/enotify.php index 72365a762f..c121debe66 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -58,11 +58,12 @@ function notification($params) { // Check to see if there was already a tag notify or comment notify for this post. // If so don't create a second notification - + $p = null; - $p = q("select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d limit 1", + $p = q("select id from notify where (type = %d or type = %d or type = %d) and link = '%s' and uid = %d limit 1", intval(NOTIFY_TAGSELF), intval(NOTIFY_COMMENT), + intval(NOTIFY_SHARE), dbesc($params['link']), intval($params['uid']) ); @@ -70,7 +71,7 @@ function notification($params) { pop_lang(); return; } - + // if it's a post figure out who's post it is. @@ -99,7 +100,7 @@ function notification($params) { $itemlink, $p[0]['author-name'], $item_post_type); - + // "your post" if($p[0]['owner-name'] == $p[0]['author-name'] && $p[0]['wall']) $dest_str = sprintf(t('%1$s commented on [url=%2$s]your %3$s[/url]'), @@ -114,7 +115,7 @@ function notification($params) { $subject = sprintf( t('[Friendica:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $params['source_name']); $preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']); - $epreamble = $dest_str; + $epreamble = $dest_str; $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf( $sitelink, $siteurl ); @@ -126,11 +127,11 @@ function notification($params) { $subject = sprintf( t('[Friendica:Notify] %s posted to your profile wall') , $params['source_name']); $preamble = sprintf( t('%1$s posted to your profile wall at %2$s') , $params['source_name'], $sitename); - - $epreamble = sprintf( t('%1$s posted to [url=%2$s]your wall[/url]') , + + $epreamble = sprintf( t('%1$s posted to [url=%2$s]your wall[/url]') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', - $params['link']); - + $params['link']); + $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf( $sitelink, $siteurl ); $hsitelink = sprintf( $sitelink, '' . $sitename . ''); @@ -140,9 +141,22 @@ function notification($params) { if($params['type'] == NOTIFY_TAGSELF) { $subject = sprintf( t('[Friendica:Notify] %s tagged you') , $params['source_name']); $preamble = sprintf( t('%1$s tagged you at %2$s') , $params['source_name'], $sitename); - $epreamble = sprintf( t('%1$s [url=%2$s]tagged you[/url].') , + $epreamble = sprintf( t('%1$s [url=%2$s]tagged you[/url].') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', - $params['link']); + $params['link']); + + $sitelink = t('Please visit %s to view and/or reply to the conversation.'); + $tsitelink = sprintf( $sitelink, $siteurl ); + $hsitelink = sprintf( $sitelink, '' . $sitename . ''); + $itemlink = $params['link']; + } + + if($params['type'] == NOTIFY_SHARE) { + $subject = sprintf( t('[Friendica:Notify] %s shared a new post') , $params['source_name']); + $preamble = sprintf( t('%1$s shared a new post at %2$s') , $params['source_name'], $sitename); + $epreamble = sprintf( t('%1$s [url=%2$s]shared a post[/url].') , + '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', + $params['link']); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf( $sitelink, $siteurl ); diff --git a/include/items.php b/include/items.php index a1aad551f6..ffd549ea14 100755 --- a/include/items.php +++ b/include/items.php @@ -406,7 +406,7 @@ function title_is_body($title, $body) { -function get_atom_elements($feed,$item) { +function get_atom_elements($feed, $item, $contact = array()) { require_once('library/HTMLPurifier.auto.php'); require_once('include/html2bbcode.php'); @@ -542,7 +542,7 @@ function get_atom_elements($feed,$item) { $res['body'] = notags(base64url_decode($res['body'])); } - + $res['body'] = limit_body_size($res['body']); // It isn't certain at this point whether our content is plaintext or html and we'd be foolish to trust @@ -846,6 +846,11 @@ function get_atom_elements($feed,$item) { }; } + if (isset($contact["network"]) AND ($contact["network"] == NETWORK_FEED) AND $contact['fetch_further_information']) { + $res["body"] = $res["title"]."\n\n[class=type-link]".fetch_siteinfo($res['plink'])."[/class]"; + $res["title"] = ""; + } + $arr = array('feed' => $feed, 'item' => $item, 'result' => $res); call_hooks('parse_atom', $arr); @@ -860,6 +865,31 @@ function get_atom_elements($feed,$item) { return $res; } +function fetch_siteinfo($url) { + require_once("mod/parse_url.php"); + + // Fetch site infos - but only from the meta data + $data = parseurl_getsiteinfo($url, true); + + $text = ""; + + if (!is_string($data["text"]) AND (sizeof($data["images"]) == 0) AND ($data["title"] == $url)) + return(""); + + if (is_string($data["title"])) + $text .= "[bookmark=".$url."]".trim($data["title"])."[/bookmark]\n"; + + if (sizeof($data["images"]) > 0) { + $imagedata = $data["images"][0]; + $text .= '[img='.$imagedata["width"].'x'.$imagedata["height"].']'.$imagedata["src"].'[/img]' . "\n"; + } + + if (is_string($data["text"])) + $text .= "[quote]".$data["text"]."[/quote]"; + + return($text); +} + function encode_rel_links($links) { $o = ''; if(! ((is_array($links)) && (count($links)))) @@ -1100,10 +1130,10 @@ function item_store($arr,$force_parent = false) { logger('item_store: ' . print_r($arr,true), LOGGER_DATA); - $r = dbq("INSERT INTO `item` (`" - . implode("`, `", array_keys($arr)) - . "`) VALUES ('" - . implode("', '", array_values($arr)) + $r = dbq("INSERT INTO `item` (`" + . implode("`, `", array_keys($arr)) + . "`) VALUES ('" + . implode("', '", array_values($arr)) . "')" ); // find the item we just created @@ -1117,6 +1147,49 @@ function item_store($arr,$force_parent = false) { $current_post = $r[0]['id']; logger('item_store: created item ' . $current_post); create_tags_from_item($r[0]['id']); + + // Only check for notifications on start posts + if ($arr['parent-uri'] === $arr['uri']) { + logger('item_store: Check notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG); + + // Send a notification for every new post? + $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1", + intval($arr['contact-id']), + intval($arr['uid']) + ); + + if(count($r)) { + logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG); + $u = q("SELECT * FROM user WHERE uid = %d LIMIT 1", + intval($arr['uid'])); + + $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d", + intval($current_post), + intval($arr['uid']) + ); + + $a = get_app(); + + require_once('include/enotify.php'); + notification(array( + 'type' => NOTIFY_SHARE, + 'notify_flags' => $u[0]['notify-flags'], + 'language' => $u[0]['language'], + 'to_name' => $u[0]['username'], + 'to_email' => $u[0]['email'], + 'uid' => $u[0]['uid'], + 'item' => $item[0], + 'link' => $a->get_baseurl().'/display/'.$u[0]['nickname'].'/'.$current_post, + 'source_name' => $item[0]['author-name'], + 'source_link' => $item[0]['author-link'], + 'source_photo' => $item[0]['author-avatar'], + 'verb' => ACTIVITY_TAG, + 'otype' => 'item' + )); + logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG); + } + } + } else { logger('item_store: could not locate created item'); return 0; @@ -1136,9 +1209,9 @@ function item_store($arr,$force_parent = false) { if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid)) $private = 1; else - $private = $arr['private']; + $private = $arr['private']; - // Set parent id - and also make sure to inherit the parent's ACL's. + // Set parent id - and also make sure to inherit the parent's ACLs. $r = q("UPDATE `item` SET `parent` = %d, `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `private` = %d, `deleted` = %d WHERE `id` = %d", @@ -1201,7 +1274,7 @@ function item_store($arr,$force_parent = false) { // current post can be deleted if is for a communuty page and no mention are // in it. if (!$deleted) { - + // Store the fresh generated item into the cache $cachefile = get_cachefile($arr["guid"]."-".hash("md5", $arr['body'])); @@ -2023,7 +2096,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) // Have we seen it? If not, import it. $item_id = $item->get_id(); - $datarray = get_atom_elements($feed,$item); + $datarray = get_atom_elements($feed, $item, $contact); if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN)) $datarray['author-name'] = $contact['name']; @@ -2164,7 +2237,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $item_id = $item->get_id(); - $datarray = get_atom_elements($feed,$item); + $datarray = get_atom_elements($feed, $item, $contact); if(is_array($contact)) { if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN)) @@ -2894,7 +2967,7 @@ function local_delivery($importer,$data) { foreach($feed->get_items() as $item) { - $is_reply = false; + $is_reply = false; $item_id = $item->get_id(); $rawthread = $item->get_item_tags( NAMESPACE_THREAD, 'in-reply-to'); if(isset($rawthread[0]['attribs']['']['ref'])) { @@ -2961,7 +3034,7 @@ function local_delivery($importer,$data) { $is_like = false; // remote reply to our post. Import and then notify everybody else. - $datarray = get_atom_elements($feed,$item); + $datarray = get_atom_elements($feed, $item); $r = q("SELECT `id`, `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), @@ -3426,7 +3499,7 @@ function local_delivery($importer,$data) { // send a notification require_once('include/enotify.php'); - + notification(array( 'type' => NOTIFY_POKE, 'notify_flags' => $importer['notify-flags'], diff --git a/mod/contacts.php b/mod/contacts.php index a405cedbc6..f48978aaec 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -68,7 +68,7 @@ function contacts_init(&$a) { } function contacts_post(&$a) { - + if(! local_user()) return; @@ -103,6 +103,10 @@ function contacts_post(&$a) { $hidden = intval($_POST['hidden']); + $notify = intval($_POST['notify']); + + $fetch_further_information = intval($_POST['fetch_further_information']); + $priority = intval($_POST['poll']); if($priority > 5 || $priority < 0) $priority = 0; @@ -110,11 +114,13 @@ function contacts_post(&$a) { $info = fix_mce_lf(escape_tags(trim($_POST['info']))); $r = q("UPDATE `contact` SET `profile-id` = %d, `priority` = %d , `info` = '%s', - `hidden` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", + `hidden` = %d, `notify_new_posts` = %d, `fetch_further_information` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($profile_id), intval($priority), dbesc($info), intval($hidden), + intval($notify), + intval($fetch_further_information), intval($contact_id), intval(local_user()) ); @@ -417,6 +423,8 @@ function contacts_content(&$a) { '$ignored' => (($contact['readonly']) ? t('Currently ignored') : ''), '$archived' => (($contact['archive']) ? t('Currently archived') : ''), '$hidden' => array('hidden', t('Hide this contact from others'), ($contact['hidden'] == 1), t('Replies/likes to your public posts may still be visible')), + '$notify' => array('notify', t('Notification for new posts'), ($contact['notify_new_posts'] == 1), t('Send a notification of every new post of this contact')), + '$fetch_further_information' => array('fetch_further_information', t('Fetch further information for feeds'), ($contact['fetch_further_information'] == 1), t('Fetch further information for feeds')), '$photo' => $contact['photo'], '$name' => $contact['name'], '$dir_icon' => $dir_icon, diff --git a/mod/crepair.php b/mod/crepair.php index ec56d7c284..171e88f312 100644 --- a/mod/crepair.php +++ b/mod/crepair.php @@ -28,7 +28,7 @@ function crepair_init(&$a) { $o .= ''; $a->page['aside'] .= $o; - } + } } @@ -59,8 +59,9 @@ function crepair_post(&$a) { $poll = ((x($_POST,'poll')) ? $_POST['poll'] : ''); $attag = ((x($_POST,'attag')) ? $_POST['attag'] : ''); $photo = ((x($_POST,'photo')) ? $_POST['photo'] : ''); + $remote_self = ((x($_POST,'remote_self')) ? $_POST['remote_self'] : false); - $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' + $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' , `remote_self` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", dbesc($name), dbesc($nick), @@ -70,6 +71,7 @@ function crepair_post(&$a) { dbesc($notify), dbesc($poll), dbesc($attag), + intval($remote_self), intval($contact['id']), local_user() ); @@ -154,6 +156,7 @@ function crepair_content(&$a) { '$label_notify' => t('Notification Endpoint URL'), '$label_poll' => t('Poll/Feed URL'), '$label_photo' => t('New photo from this URL'), + '$label_self' => t('Mirror all posts to the wall?'), '$contact_name' => $contact['name'], '$contact_nick' => $contact['nick'], '$contact_id' => $contact['id'], @@ -163,6 +166,8 @@ function crepair_content(&$a) { '$notify' => $contact['notify'], '$poll' => $contact['poll'], '$contact_attag' => $contact['attag'], + '$contact_self' => array('remote_self', t('Mirror all posts to the wall?'), $contact['remote_self'], + t('Shall all posts from this contact posted like your own posts?')), '$lbl_submit' => t('Submit') )); diff --git a/update.php b/update.php index 343be1a4c1..ed631fee4e 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ {{/if}}
- + {{include file="field_checkbox.tpl" field=$notify}} + {{include file="field_checkbox.tpl" field=$fetch_further_information}} {{include file="field_checkbox.tpl" field=$hidden}}
diff --git a/view/templates/crepair.tpl b/view/templates/crepair.tpl index 8d3ed7df89..5278e42f08 100644 --- a/view/templates/crepair.tpl +++ b/view/templates/crepair.tpl @@ -44,6 +44,8 @@
+{{include file="field_checkbox.tpl" field=$contact_self}} + From b4c3f0253876894ea16f4d86a9ca22a2f135fce8 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 5 Jan 2014 16:12:03 +0100 Subject: [PATCH 2/4] API: Several improvements to make the api more compatible --- include/api.php | 124 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 105 insertions(+), 19 deletions(-) diff --git a/include/api.php b/include/api.php index 974d59db0e..3d8ecb35d3 100644 --- a/include/api.php +++ b/include/api.php @@ -1,7 +1,6 @@ 0, 'cid' => 0, 'self' => 0, + 'network' => '', ); return $ret; @@ -374,7 +379,7 @@ ); // count public wall messages - $r = q("SELECT COUNT(`id`) as `count` FROM `item` + $r = q("SELECT COUNT(`id`) as `count` FROM `item` USE INDEX (uid, type) WHERE `uid` = %d AND `type`='wall' AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`=''", @@ -466,6 +471,7 @@ 'uid' => intval($uinfo[0]['uid']), 'cid' => intval($uinfo[0]['cid']), 'self' => $uinfo[0]['self'], + 'network' => $uinfo[0]['network'], ); return $ret; @@ -553,17 +559,24 @@ unset($_REQUEST["user_id"]); unset($_GET["user_id"]); + unset($_REQUEST["screen_name"]); + unset($_GET["screen_name"]); + + $skip_status = (x($_REQUEST,'skip_status')?$_REQUEST['skip_status']:false); + $user_info = api_get_user($a); // "verified" isn't used here in the standard unset($user_info["verified"]); // - Adding last status - $user_info["status"] = api_status_show($a,"raw"); - if (!count($user_info["status"])) - unset($user_info["status"]); - else - unset($user_info["status"]["user"]); + if (!$skip_status) { + $user_info["status"] = api_status_show($a,"raw"); + if (!count($user_info["status"])) + unset($user_info["status"]); + else + unset($user_info["status"]["user"]); + } // "cid", "uid" and "self" are only needed for some internal stuff, so remove it from here unset($user_info["cid"]); @@ -706,6 +719,7 @@ return api_status_show($a,$type); } api_register_func('api/statuses/update','api_statuses_update', true); + api_register_func('api/statuses/update_with_media','api_statuses_update', true); function api_status_show(&$a, $type){ @@ -871,6 +885,9 @@ unset($_REQUEST["user_id"]); unset($_GET["user_id"]); + unset($_REQUEST["screen_name"]); + unset($_GET["screen_name"]); + $user_info = api_get_user($a); // get last newtork messages @@ -1173,6 +1190,9 @@ unset($_REQUEST["user_id"]); unset($_GET["user_id"]); + unset($_REQUEST["screen_name"]); + unset($_GET["screen_name"]); + $user_info = api_get_user($a); // get last newtork messages @@ -1326,14 +1346,20 @@ if ($user_info['self']==0) { $ret = array(); } else { + $sql_extra = ""; // params + $since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0); + $max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0); $count = (x($_GET,'count')?$_GET['count']:20); $page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0); if ($page<0) $page=0; $start = $page*$count; + if ($max_id > 0) + $sql_extra .= ' AND `item`.`id` <= '.intval($max_id); + $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, @@ -1345,9 +1371,11 @@ AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra + AND `item`.`id`>%d ORDER BY `item`.`received` DESC LIMIT %d ,%d ", //intval($user_info['uid']), intval(api_user()), + intval($since_id), intval($start), intval($count) ); @@ -1641,12 +1669,6 @@ if (api_user()===false) return false; $user_info = api_get_user($a); - - // friends and followers only for self - if ($user_info['self']==0){ - return false; - } - if (x($_GET,'cursor') && $_GET['cursor']=='undefined'){ /* this is to stop Hotot to load friends multiple times * I'm not sure if I'm missing return something or @@ -1663,13 +1685,17 @@ if($qtype == 'followers') $sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_FOLLOWER), intval(CONTACT_IS_FRIEND)); - $r = q("SELECT id FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra", + // friends and followers only for self + if ($user_info['self'] == 0) + $sql_extra = " AND false "; + + $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra", intval(api_user()) ); $ret = array(); foreach($r as $cid){ - $user = api_get_user($a, $cid['id']); + $user = api_get_user($a, $cid['nurl']); // "cid", "uid" and "self" are only needed for some internal stuff, so remove it from here unset($user["cid"]); unset($user["uid"]); @@ -1679,7 +1705,6 @@ $ret[] = $user; } - return array('$users' => $ret); } @@ -1756,11 +1781,17 @@ if(! api_user()) return false; + $user_info = api_get_user($a); + if($qtype == 'friends') $sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND)); if($qtype == 'followers') $sql_extra = sprintf(" AND ( `rel` = %d OR `rel` = %d ) ", intval(CONTACT_IS_FOLLOWER), intval(CONTACT_IS_FRIEND)); + if (!$user_info["self"]) + $sql_extra = " AND false "; + + $stringify_ids = (x($_REQUEST,'stringify_ids')?$_REQUEST['stringify_ids']:false); $r = q("SELECT unique_contacts.id FROM contact, unique_contacts WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra", intval(api_user()) @@ -1779,7 +1810,12 @@ elseif($type === 'json') { $ret = array(); header("Content-type: application/json"); - foreach($r as $rr) $ret[] = $rr['id']; + foreach($r as $rr) + if ($stringify_ids) + $ret[] = $rr['id']; + else + $ret[] = intval($rr['id']); + echo json_encode($ret); killme(); } @@ -1806,10 +1842,13 @@ require_once("include/message.php"); if ($_POST['screen_name']) { - $r = q("SELECT `id`, `nurl` FROM `contact` WHERE `uid`=%d AND `nick`='%s'", + $r = q("SELECT `id`, `nurl`, `network` FROM `contact` WHERE `uid`=%d AND `nick`='%s'", intval(api_user()), dbesc($_POST['screen_name'])); + // Selecting the id by priority, friendica first + api_best_nickname($r); + $recipient = api_get_user($a, $r[0]['nurl']); } else $recipient = api_get_user($a, $_POST['user_id']); @@ -1861,6 +1900,9 @@ unset($_REQUEST["user_id"]); unset($_GET["user_id"]); + unset($_REQUEST["screen_name"]); + unset($_GET["screen_name"]); + $user_info = api_get_user($a); // params @@ -1869,6 +1911,7 @@ if ($page<0) $page=0; $since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0); + $max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0); $start = $page*$count; @@ -1888,6 +1931,9 @@ $sql_extra = "`mail`.`from-url`!='".dbesc( $profile_url )."'"; } + if ($max_id > 0) + $sql_extra .= ' AND `mail`.`id` <= '.intval($max_id); + $r = q("SELECT `mail`.*, `contact`.`nurl` AS `contact-url` FROM `mail`,`contact` WHERE `mail`.`contact-id` = `contact`.`id` AND `mail`.`uid`=%d AND $sql_extra AND `mail`.`id` > %d ORDER BY `mail`.`created` DESC LIMIT %d,%d", intval(api_user()), intval($since_id), @@ -2025,7 +2071,7 @@ function api_share_as_retweet($a, $uid, &$item) { function api_get_nick($profile) { /* To-Do: - remove trailing jung from profile url - - pump.io check has to check the websitr + - pump.io check has to check the website */ $nick = ""; @@ -2117,6 +2163,46 @@ function api_cleanup_share($shared) { return(trim($text)); } +function api_best_nickname(&$contacts) { + $best_contact = array(); + + foreach ($contacts AS $contact) + if ($contact["network"] == "") { + $contact["network"] = "dfrn"; + $best_contact = array($contact); + } + + if (sizeof($best_contact) == 0) + foreach ($contacts AS $contact) + if ($contact["network"] == "dfrn") + $best_contact = array($contact); + + if (sizeof($best_contact) == 0) + foreach ($contacts AS $contact) + if ($contact["network"] == "dspr") + $best_contact = array($contact); + + if (sizeof($best_contact) == 0) + foreach ($contacts AS $contact) + if ($contact["network"] == "stat") + $best_contact = array($contact); + + if (sizeof($best_contact) == 0) + foreach ($contacts AS $contact) + if ($contact["network"] == "pump") + $best_contact = array($contact); + + if (sizeof($best_contact) == 0) + foreach ($contacts AS $contact) + if ($contact["network"] == "twit") + $best_contact = array($contact); + + if (sizeof($best_contact) == 1) + $contacts = $best_contact; + else + $contacts = array($contacts[0]); +} + /* Not implemented by now: favorites From 8eedebfee34d52badaa80ea4641e8aa4a7bfe1d6 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 5 Jan 2014 16:28:42 +0100 Subject: [PATCH 3/4] Cleaning up some changes from the merge --- mod/crepair.php | 2 -- view/templates/crepair.tpl | 2 -- 2 files changed, 4 deletions(-) diff --git a/mod/crepair.php b/mod/crepair.php index 0fdab7eebe..223c7c60e2 100644 --- a/mod/crepair.php +++ b/mod/crepair.php @@ -168,8 +168,6 @@ function crepair_content(&$a) { '$notify' => $contact['notify'], '$poll' => $contact['poll'], '$contact_attag' => $contact['attag'], - '$contact_self' => array('remote_self', t('Mirror all posts to the wall?'), $contact['remote_self'], - t('Shall all posts from this contact posted like your own posts?')), '$lbl_submit' => t('Submit') )); diff --git a/view/templates/crepair.tpl b/view/templates/crepair.tpl index 5cc4462b39..d53af5dad7 100644 --- a/view/templates/crepair.tpl +++ b/view/templates/crepair.tpl @@ -42,8 +42,6 @@ {{include file="field_checkbox.tpl" field=$remote_self}} {{/if}} -{{include file="field_checkbox.tpl" field=$contact_self}} - From 3b32505d141ac35164c84249be5aea6e4467a1bd Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 5 Jan 2014 16:57:05 +0100 Subject: [PATCH 4/4] API: Bugfix that wrong contact data was sent --- include/api.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/api.php b/include/api.php index 9c3bb15244..f234bd20dc 100644 --- a/include/api.php +++ b/include/api.php @@ -2166,6 +2166,9 @@ function api_cleanup_share($shared) { function api_best_nickname(&$contacts) { $best_contact = array(); + if (count($contact) == 0) + return; + foreach ($contacts AS $contact) if ($contact["network"] == "") { $contact["network"] = "dfrn";