From: Michael Vogel Date: Sun, 5 Jan 2014 15:22:42 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=aed28a24f158535cff11a60bad45b0b4fd4ef2ce;hp=e97a579856ba4d733d61005d9f241b3b81d703cd;p=friendica.git Merge remote-tracking branch 'upstream/master' Conflicts: mod/crepair.php --- diff --git a/boot.php b/boot.php index 0355504636..9264d34fc0 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.1747' ); 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/api.php b/include/api.php index c6d29c47a5..9c3bb15244 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 diff --git a/include/conversation.php b/include/conversation.php index 31f40aa6f8..5b9a11bde1 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -504,6 +504,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tpl = 'search_item.tpl'; foreach($items as $item) { + if($arr_blocked) { $blocked = false; foreach($arr_blocked as $b) { @@ -648,6 +649,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tmp_item = array( 'template' => $tpl, 'id' => (($preview) ? 'P0' : $item['item_id']), + 'network' => $item['item_network'], 'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), @@ -693,6 +695,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { call_hooks('display_item', $arr); $threads[$threadsid]['id'] = $item['item_id']; + $threads[$threadsid]['network'] = $item['item_network']; $threads[$threadsid]['items'] = array($arr['output']); } 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/include/ostatus_conversation.php b/include/ostatus_conversation.php index 65c0d67871..ad90e3d311 100644 --- a/include/ostatus_conversation.php +++ b/include/ostatus_conversation.php @@ -44,6 +44,11 @@ function check_conversations() { function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) { global $a; + if ($a->last_ostatus_conversation_url == $conversation_url) + return; + + $a->last_ostatus_conversation_url = $conversation_url; + //logger('complete_conversation: completing conversation url '.$conversation_url.' for id '.$itemid); $messages = q("SELECT `uid`, `parent`, `created` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); diff --git a/library/slinky.php b/library/slinky.php index cae1f755ff..fc3714c201 100644 --- a/library/slinky.php +++ b/library/slinky.php @@ -341,7 +341,7 @@ abstract class Slinky_Service { curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 ); // Don't stress about SSL validity curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // Return the response, don't output it curl_setopt( $ch, CURLOPT_TIMEOUT, SLINKY_TIMEOUT ); // Limit how long we'll wait for a response - curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Allow following of redirections + //curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Allow following of redirections $r = curl_exec( $ch ); if ( curl_errno( $ch ) ) { return false; @@ -372,7 +372,7 @@ abstract class Slinky_Service { curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 ); // Don't stress about SSL validity curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // Return the response, don't output it curl_setopt( $ch, CURLOPT_TIMEOUT, SLINKY_TIMEOUT ); // Limit how long we'll wait for a response - curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Allow following of redirections + //curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Allow following of redirections $r = curl_exec( $ch ); if ( curl_errno( $ch ) ) { return false; diff --git a/mod/contacts.php b/mod/contacts.php index d19c75ab96..ad50376b70 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -113,7 +113,7 @@ function contacts_batch_actions(&$a){ function contacts_post(&$a) { - + if(! local_user()) return; @@ -153,6 +153,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; @@ -160,11 +164,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()) ); @@ -489,6 +495,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 f8336ef0ba..0fdab7eebe 100644 --- a/mod/crepair.php +++ b/mod/crepair.php @@ -28,7 +28,7 @@ function crepair_init(&$a) { $o .= ''; $a->page['aside'] .= $o; - } + } } @@ -59,9 +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')) ? intval($_POST['remote_self']) : 0); + $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', `remote_self` = '%d' + $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), @@ -71,7 +71,7 @@ function crepair_post(&$a) { dbesc($notify), dbesc($poll), dbesc($attag), - $remote_self, + intval($remote_self), intval($contact['id']), local_user() ); @@ -168,6 +168,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/mod/parse_url.php b/mod/parse_url.php index cb7268c1df..cf52011f15 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -311,9 +311,9 @@ function parse_url_content(&$a) { logger('parse_url: ' . $url); if($textmode) - $template = $br . '[bookmark=%s]%s[/bookmark]%s' . $br; + $template = '[bookmark=%s]%s[/bookmark]%s' . $br; else - $template = "
%s%s
"; + $template = "%s%s
"; $arr = array('url' => $url, 'text' => ''); @@ -328,9 +328,9 @@ function parse_url_content(&$a) { if($url && $title && $text) { if($textmode) - $text = $br . '[quote]' . trim($text) . '[/quote]' . $br; + $text = '[quote]' . trim($text) . '[/quote]' . $br; else - $text = '
' . trim($text) . '

'; + $text = '
' . trim($text) . '

'; $title = str_replace(array("\r","\n"),array('',''),$title); @@ -344,8 +344,10 @@ function parse_url_content(&$a) { $siteinfo = parseurl_getsiteinfo($url); + $sitedata = ""; + if($siteinfo["title"] == "") { - echo sprintf($template,$url,$url,'') . $str_tags; + $sitedata .= sprintf($template,$url,$url,'') . $str_tags; killme(); } else { $text = $siteinfo["text"]; @@ -377,20 +379,24 @@ function parse_url_content(&$a) { if(strlen($text)) { if($textmode) - $text = $br.'[quote]'.trim($text).'[/quote]'.$br ; + $text = '[quote]'.trim($text).'[/quote]'; else - $text = '
'.trim($text).'

'; + $text = '
'.trim($text).'
'; } if($image) { $text = $br.$br.$image.$text; } + $title = str_replace(array("\r","\n"),array('',''),$title); $result = sprintf($template,$url,($title) ? $title : $url,$text) . $str_tags; logger('parse_url: returns: ' . $result); - echo trim($result); + $sitedata .= trim($result); + + echo "[class=type-link]".$sitedata."[/class]"; + killme(); } diff --git a/mods/readme.txt b/mods/readme.txt index d74b846d00..9f47f85d5a 100644 --- a/mods/readme.txt +++ b/mods/readme.txt @@ -1,6 +1,18 @@ -Site speed can be improved when the following indexes are set. They cannot be set through the update script because on large sites they will block the site for several minutes. +Site speed can be improved when the following indexes are set. They +cannot be set through the update script because on large sites they will +block the site for several minutes. CREATE INDEX `uid_commented` ON `item` (`uid`, `commented`); CREATE INDEX `uid_created` ON `item` (`uid`, `created`); CREATE INDEX `uid_unseen` ON `item` (`uid`, `unseen`); CREATE INDEX `resource-id` ON `item` (`resource-id`); +CREATE INDEX `uri_received` ON item(`uri`, `received`); +CREATE INDEX `received_uri` ON item(`received`, `uri`); +CREATE INDEX `contact-id_created` ON item(`contact-id`, created); +CREATE INDEX `uid_network_received` ON item(`uid`, `network`, `received`); +CREATE INDEX `uid_parent` ON item(`uid`, `parent`); +CREATE INDEX `uid_received` ON item(`uid`, `received`); +CREATE INDEX `uid_network_commented` ON item(`uid`, `network`, `commented`); +CREATE INDEX `uid_commented` ON item(`uid`, `commented`); +CREATE INDEX `uid_title` ON item(uid, `title`); +CREATE INDEX `created_contact-id` ON item(`created`, `contact-id`); 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 d53af5dad7..5cc4462b39 100644 --- a/view/templates/crepair.tpl +++ b/view/templates/crepair.tpl @@ -42,6 +42,8 @@ {{include file="field_checkbox.tpl" field=$remote_self}} {{/if}} +{{include file="field_checkbox.tpl" field=$contact_self}} + diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 03aaf89400..5561cb65ee 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -291,7 +291,9 @@ blockquote.shared_content { body { font-family: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; - background-color: #ffffff; + /* background-color: #ffffff; */ + background-color: #FAFAFA; + /* background-color: rgb(252, 252, 252); */ color: #2d2d2d; margin: 0px 0px 0px 0px; display: table; @@ -1087,7 +1089,9 @@ section { width: 766px; max-width: 766px; padding: 10px 10px 10px 10px; - background-color: white; + /* background-color: white; */ + /* background-color: rgb(252, 252, 252); */ + background-color: #FAFAFA; border-bottom: 1px solid lightgray; border-right: 1px solid lightgray; border-left: 1px solid lightgray; @@ -1410,6 +1414,31 @@ border-bottom: 1px solid #D2D2D2; padding-right: 12px; */ } +.twit { + background-color: #FFFAFA; +} +.pump { + background-color: #FAFFFA; +} +.face { + background-color: #FAFAFF; +} +.feed { + background-color: #FFFFFA; +} +.dspr { + background-color: #FFFAFF; +} +.dfrn { + background-color: #FAFFFF; +} +.stat { + background-color: #FAFAFA; +} +.mail { + background-color: #FFFFF9; +} + #profile-jot-form #profile-jot-text { height: 2.0em; /* width: 99%; */ diff --git a/view/theme/vier/templates/threaded_conversation.tpl b/view/theme/vier/templates/threaded_conversation.tpl index dc3e918f61..397046a4e3 100644 --- a/view/theme/vier/templates/threaded_conversation.tpl +++ b/view/theme/vier/templates/threaded_conversation.tpl @@ -7,7 +7,7 @@ {{foreach $threads as $thread}} -
+
{{if $thread.type == tag}} diff --git a/view/theme/vier/templates/wall_thread.tpl b/view/theme/vier/templates/wall_thread.tpl index d51014a969..0ec3c526b4 100644 --- a/view/theme/vier/templates/wall_thread.tpl +++ b/view/theme/vier/templates/wall_thread.tpl @@ -32,7 +32,7 @@
-
+