diff --git a/include/api.php b/include/api.php index 74586850f..e94c689fb 100644 --- a/include/api.php +++ b/include/api.php @@ -15,16 +15,16 @@ $API = Array(); $called_api = Null; - function api_user() { - // It is not sufficient to use local_user() to check whether someone is allowed to use the API, - // because this will open CSRF holes (just embed an image with src=friendicasite.com/api/statuses/update?status=CSRF - // into a page, and visitors will post something without noticing it). - // Instead, use this function. - if ($_SESSION["allow_api"]) - return local_user(); + function api_user() { + // It is not sufficient to use local_user() to check whether someone is allowed to use the API, + // because this will open CSRF holes (just embed an image with src=friendicasite.com/api/statuses/update?status=CSRF + // into a page, and visitors will post something without noticing it). + // Instead, use this function. + if ($_SESSION["allow_api"]) + return local_user(); - return false; - } + return false; + } function api_date($str){ //Wed May 23 06:01:13 +0000 2007 @@ -65,9 +65,9 @@ // workaround for HTTP-auth in CGI mode if(x($_SERVER,'REDIRECT_REMOTE_USER')) { - $userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"],6)) ; + $userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"],6)) ; if(strlen($userpass)) { - list($name, $password) = explode(':', $userpass); + list($name, $password) = explode(':', $userpass); $_SERVER['PHP_AUTH_USER'] = $name; $_SERVER['PHP_AUTH_PW'] = $password; } @@ -101,10 +101,10 @@ if(count($r)){ $record = $r[0]; } else { - logger('API_login failure: ' . print_r($_SERVER,true), LOGGER_DEBUG); - header('WWW-Authenticate: Basic realm="Friendica"'); - header('HTTP/1.0 401 Unauthorized'); - die('This api requires login'); + logger('API_login failure: ' . print_r($_SERVER,true), LOGGER_DEBUG); + header('WWW-Authenticate: Basic realm="Friendica"'); + header('HTTP/1.0 401 Unauthorized'); + die('This api requires login'); } require_once('include/security.php'); @@ -154,7 +154,7 @@ case "json": header ("Content-Type: application/json"); foreach($r as $rr) - return json_encode($rr); + return json_encode($rr); break; case "rss": header ("Content-Type: application/rss+xml"); @@ -167,7 +167,7 @@ case "as": //header ("Content-Type: application/json"); //foreach($r as $rr) - // return json_encode($rr); + // return json_encode($rr); return json_encode($r); break; @@ -436,9 +436,6 @@ // Add a nick if it isn't present there if (($uinfo[0]['nick'] == "") OR ($uinfo[0]['name'] == $uinfo[0]['nick'])) { $uinfo[0]['nick'] = api_get_nick($uinfo[0]["url"]); - //if ($uinfo[0]['nick'] != "") - // q("UPDATE contact SET nick = '%s' WHERE id = %d", - // dbesc($uinfo[0]['nick']), intval($uinfo[0]["id"])); } // Fetching unique id @@ -621,46 +618,46 @@ } /*Waitman Gobble Mod*/ - function api_statuses_mediap(&$a, $type) { - if (api_user()===false) { - logger('api_statuses_update: no user'); - return false; - } - $user_info = api_get_user($a); + function api_statuses_mediap(&$a, $type) { + if (api_user()===false) { + logger('api_statuses_update: no user'); + return false; + } + $user_info = api_get_user($a); - $_REQUEST['type'] = 'wall'; - $_REQUEST['profile_uid'] = api_user(); - $_REQUEST['api_source'] = true; - $txt = requestdata('status'); - //$txt = urldecode(requestdata('status')); + $_REQUEST['type'] = 'wall'; + $_REQUEST['profile_uid'] = api_user(); + $_REQUEST['api_source'] = true; + $txt = requestdata('status'); + //$txt = urldecode(requestdata('status')); - require_once('library/HTMLPurifier.auto.php'); - require_once('include/html2bbcode.php'); + require_once('library/HTMLPurifier.auto.php'); + require_once('include/html2bbcode.php'); - if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) { + if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) { $txt = html2bb_video($txt); $config = HTMLPurifier_Config::createDefault(); - $config->set('Cache.DefinitionImpl', null); + $config->set('Cache.DefinitionImpl', null); $purifier = new HTMLPurifier($config); - $txt = $purifier->purify($txt); + $txt = $purifier->purify($txt); } $txt = html2bbcode($txt); - $a->argv[1]=$user_info['screen_name']; //should be set to username? + $a->argv[1]=$user_info['screen_name']; //should be set to username? $_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo - require_once('mod/wall_upload.php'); + require_once('mod/wall_upload.php'); $bebop = wall_upload_post($a); //now that we have the img url in bbcode we can add it to the status and insert the wall item. - $_REQUEST['body']=$txt."\n\n".$bebop; - require_once('mod/item.php'); - item_post($a); + $_REQUEST['body']=$txt."\n\n".$bebop; + require_once('mod/item.php'); + item_post($a); - // this should output the last post (the one we just posted). - return api_status_show($a,$type); - } - api_register_func('api/statuses/mediap','api_statuses_mediap', true); + // this should output the last post (the one we just posted). + return api_status_show($a,$type); + } + api_register_func('api/statuses/mediap','api_statuses_mediap', true); /*Waitman Gobble Mod*/ @@ -746,22 +743,6 @@ logger('api_status_show: user_info: '.print_r($user_info, true), LOGGER_DEBUG); // get last public wall message - //$lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `c`.`nick` as `reply_author`, `i`.`author-link` AS `item-author` - // FROM `item`, `contact`, `item` as `i`, `contact` as `c` - // WHERE `item`.`contact-id` = %d - // AND ((`item`.`author-link` IN ('%s', '%s')) OR (`item`.`owner-link` IN ('%s', '%s'))) - // AND `i`.`id` = `item`.`parent` - // AND `contact`.`id`=`item`.`contact-id` AND `c`.`id`=`i`.`contact-id` AND `contact`.`self`=1 - // AND `item`.`type`!='activity' - // AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`='' - // ORDER BY `item`.`created` DESC - // LIMIT 1", - // intval($user_info['cid']), - // dbesc($user_info['url']), - // dbesc(normalise_link($user_info['url'])), - // dbesc($user_info['url']), - // dbesc(normalise_link($user_info['url'])) - //); $lastwall = q("SELECT `item`.*, `i`.`contact-id` as `reply_uid`, `i`.`author-link` AS `item-author` FROM `item`, `item` as `i` WHERE `item`.`contact-id` = %d @@ -859,7 +840,7 @@ $lastwall = q("SELECT `item`.* FROM `item`, `contact` - WHERE `item`.`uid` = %d AND `item`.`contact-id` = %d + WHERE `item`.`uid` = %d AND `verb` = '%s' AND `item`.`contact-id` = %d AND ((`item`.`author-link` IN ('%s', '%s')) OR (`item`.`owner-link` IN ('%s', '%s'))) AND `contact`.`id`=`item`.`contact-id` AND `type`!='activity' @@ -867,13 +848,13 @@ ORDER BY `created` DESC LIMIT 1", intval(api_user()), + dbesc(ACTIVITY_POST), intval($user_info['cid']), dbesc($user_info['url']), dbesc(normalise_link($user_info['url'])), dbesc($user_info['url']), dbesc(normalise_link($user_info['url'])) ); -//print_r($user_info); if (count($lastwall)>0){ $lastwall = $lastwall[0]; @@ -884,7 +865,7 @@ $in_reply_to_screen_name = NULL; if ($lastwall['parent']!=$lastwall['id']) { $reply = q("SELECT `item`.`id`, `item`.`contact-id` as `reply_uid`, `contact`.`nick` as `reply_author`, `item`.`author-link` AS `item-author` - FROM `item`,`contact` WHERE `contact`.`id`=`item`.`contact-id` AND `item`.`id` = %d", intval($lastwall['parent'])); + FROM `item`,`contact` WHERE `contact`.`id`=`item`.`contact-id` AND `item`.`id` = %d", intval($lastwall['parent'])); if (count($reply)>0) { $in_reply_to_status_id = intval($lastwall['parent']); $in_reply_to_status_id_str = (string) intval($lastwall['parent']); @@ -986,15 +967,15 @@ `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` FROM `item`, `contact` - WHERE `item`.`uid` = %d + WHERE `item`.`uid` = %d AND `verb` = '%s' AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra AND `item`.`id`>%d ORDER BY `item`.`id` DESC LIMIT %d ,%d ", - //intval($user_info['uid']), intval(api_user()), + dbesc(ACTIVITY_POST), intval($since_id), intval($start), intval($count) ); @@ -1057,24 +1038,25 @@ if ($conversation_id > 0) $sql_extra .= ' AND `item`.`parent` = '.intval($conversation_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`.`self`, `contact`.`writable`, - `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, - `user`.`nickname`, `user`.`hidewall` - FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` - INNER JOIN `user` ON `user`.`uid` = `item`.`uid` - WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 - AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' - AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' - AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0 - AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 + $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`.`self`, `contact`.`writable`, + `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, + `user`.`nickname`, `user`.`hidewall` + FROM `item` STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + STRAIGHT_JOIN `user` ON `user`.`uid` = `item`.`uid` + WHERE `verb` = '%s' AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 + AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' + AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' + AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0 + AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra AND `item`.`id`>%d - ORDER BY `item`.`id` DESC LIMIT %d, %d ", + ORDER BY `item`.`id` DESC LIMIT %d, %d ", + dbesc(ACTIVITY_POST), intval($since_id), - intval($start), - intval($count)); + intval($start), + intval($count)); $ret = api_format_items($r,$user_info); @@ -1197,13 +1179,14 @@ FROM `item` INNER JOIN (SELECT `uri`,`parent` FROM `item` WHERE `id` = %d) AS `temp1` ON (`item`.`thr-parent` = `temp1`.`uri` AND `item`.`parent` = `temp1`.`parent`), `contact` WHERE `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 - AND `item`.`uid` = %d AND `contact`.`id` = `item`.`contact-id` + AND `item`.`uid` = %d AND `item`.`verb` = '%s' AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`id`>%d $sql_extra ORDER BY `item`.`id` DESC LIMIT %d ,%d", intval($id), intval(api_user()), - intval($since_id), - intval($start), intval($count) + dbesc(ACTIVITY_POST), + intval($since_id), + intval($start), intval($count) ); if (!$r) @@ -1347,27 +1330,27 @@ $myurl = str_replace('www.','',$myurl); $diasp_url = str_replace('/profile/','/u/',$myurl); - $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)", - dbesc(protect_sprintf($myurl)), - dbesc(protect_sprintf($myurl)) - ); - if ($max_id > 0) - $sql_extra .= ' AND `item`.`id` <= '.intval($max_id); + $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`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` FROM `item`, `contact` - WHERE `item`.`uid` = %d + WHERE `item`.`uid` = %d AND `verb` = '%s' + AND NOT (`item`.`author-link` IN ('https://%s', 'http://%s')) AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 + AND `item`.`parent` IN (SELECT `iid` from thread where uid = %d AND `mention`) $sql_extra AND `item`.`id`>%d ORDER BY `item`.`id` DESC LIMIT %d ,%d ", - //intval($user_info['uid']), + intval(api_user()), + dbesc(ACTIVITY_POST), + dbesc(protect_sprintf($myurl)), + dbesc(protect_sprintf($myurl)), intval(api_user()), intval($since_id), intval($start), intval($count) @@ -1432,7 +1415,7 @@ `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` FROM `item`, `contact` - WHERE `item`.`uid` = %d + WHERE `item`.`uid` = %d AND `verb` = '%s' AND `item`.`contact-id` = %d AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 AND `contact`.`id` = `item`.`contact-id` @@ -1441,6 +1424,7 @@ AND `item`.`id`>%d ORDER BY `item`.`id` DESC LIMIT %d ,%d ", intval(api_user()), + dbesc(ACTIVITY_POST), intval($user_info['cid']), intval($since_id), intval($start), intval($count) @@ -1496,7 +1480,7 @@ `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` FROM `item`, `contact` - WHERE `item`.`uid` = %d + WHERE `item`.`uid` = %d AND `verb` = '%s' AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 AND `item`.`starred` = 1 AND `contact`.`id` = `item`.`contact-id` @@ -1504,8 +1488,8 @@ $sql_extra AND `item`.`id`>%d ORDER BY `item`.`id` DESC LIMIT %d ,%d ", - //intval($user_info['uid']), intval(api_user()), + dbesc(ACTIVITY_POST), intval($since_id), intval($start), intval($count) ); @@ -1578,11 +1562,11 @@ $singleitem["title"] = $item["text"]; $singleitem["verb"] = "post"; $singleitem["statusnet:notice_info"]["local_id"] = $item["id"]; - $singleitem["statusnet:notice_info"]["source"] = $item["source"]; - $singleitem["statusnet:notice_info"]["favorite"] = "false"; - $singleitem["statusnet:notice_info"]["repeated"] = "false"; - //$singleitem["original"] = $item; - $items[] = $singleitem; + $singleitem["statusnet:notice_info"]["source"] = $item["source"]; + $singleitem["statusnet:notice_info"]["favorite"] = "false"; + $singleitem["statusnet:notice_info"]["repeated"] = "false"; + //$singleitem["original"] = $item; + $items[] = $singleitem; } $as['items'] = $items; $as['link']['url'] = $a->get_baseurl()."/".$user_info["screen_name"]."/all"; @@ -1669,7 +1653,7 @@ '[url=https://www.youtube.com/watch?v=$1]https://www.youtube.com/watch?v=$1[/url]', $bbcode); $bbcode = preg_replace("/\[youtube\](.*?)\[\/youtube\]/ism",'[url=$1]$1[/url]',$bbcode); - $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", + $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '[url=https://vimeo.com/$1]https://vimeo.com/$1[/url]', $bbcode); $bbcode = preg_replace("/\[vimeo\](.*?)\[\/vimeo\]/ism",'[url=$1]$1[/url]',$bbcode); @@ -1879,30 +1863,8 @@ unset($status["user"]["self"]); // 'geo' => array('type' => 'Point', - // 'coordinates' => array((float) $notice->lat, - // (float) $notice->lon)); - - // Seesmic doesn't like the following content - // completely disabled to make friendica totally compatible to the statusnet API - /*if ($_SERVER['HTTP_USER_AGENT'] != 'Seesmic') { - $status2 = array( - 'updated' => api_date($item['edited']), - 'published' => api_date($item['created']), - 'message_id' => $item['uri'], - 'url' => ($item['plink']!=''?$item['plink']:$item['author-link']), - 'coordinates' => $item['coord'], - 'place' => $item['location'], - 'contributors' => '', - 'annotations' => '', - 'entities' => '', - 'objecttype' => (($item['object-type']) ? $item['object-type'] : ACTIVITY_OBJ_NOTE), - 'verb' => (($item['verb']) ? $item['verb'] : ACTIVITY_POST), - 'self' => $a->get_baseurl()."/api/statuses/show/".$item['id'].".".$type, - 'edit' => $a->get_baseurl()."/api/statuses/show/".$item['id'].".".$type, - ); - - $status = array_merge($status, $status2); - }*/ + // 'coordinates' => array((float) $notice->lat, + // (float) $notice->lon)); $ret[] = $status; }; @@ -2400,7 +2362,7 @@ function api_get_nick($profile) { // To-Do: look at the page if its really a pumpio site //if (!$nick == "") { // $pumpio = preg_replace("=https?://(.*)/(.*)/=ism", "$2", $profile."/"); - // if ($pumpio != $profile) + // if ($pumpio != $profile) // $nick = $pumpio; //
@@ -2412,7 +2374,7 @@ function api_get_nick($profile) { return($nick); } - return(false); + return(false); } function api_clean_plain_items($Text) { diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 5b990bf0d..0ffbf0a14 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -15,37 +15,24 @@ require_once("include/markdownify/markdownify.php"); function diaspora2bb($s) { - // for testing purposes: Collect raw markdown articles - // $file = tempnam("/tmp/friendica/", "markdown"); - // file_put_contents($file, $s); - $s = html_entity_decode($s,ENT_COMPAT,'UTF-8'); - // Too many new lines. So deactivated the following line - // $s = str_replace("\r","\n",$s); // Simply remove cr. $s = str_replace("\r","",$s); //
is invalid. Replace it with the valid expression - logger("diaspora2bb: 1: ".$s); $s = str_replace(array("
", "

", "

"),array("
", "
", "
"),$s); - logger("diaspora2bb: 2: ".$s); $s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s); - // Escaping the hash tags - doesn't always seem to work - // $s = preg_replace('/\#([^\s\#])/','\\#$1',$s); - // This seems to work + // Escaping the hash tags $s = preg_replace('/\#([^\s\#])/','#$1',$s); $s = Markdown($s); $s = str_replace('#','#',$s); -// we seem to have double linebreaks -// $s = str_replace("\n",'
',$s); $s = html2bbcode($s); -// $s = str_replace('*','*',$s); // protect the recycle symbol from turning into a tag, but without unescaping angles and naked ampersands $s = str_replace('♲',html_entity_decode('♲',ENT_QUOTES,'UTF-8'),$s); @@ -67,82 +54,12 @@ function diaspora2bb($s) { return $s; } - -function stripdcode_br_cb($s) { - return '[code]' . str_replace('
', "\n\t", $s[1]) . '[/code]'; -} - - -////////////////////// -// The following "diaspora_ul" and "diaspora_ol" are only appropriate for the -// pre-Markdownify conversion. If Markdownify isn't used, use the non-Markdownify -// versions below -////////////////////// -/* -function diaspora_ul($s) { - // Replace "[*]" followed by any number (including zero) of - // spaces by "* " to match Diaspora's list format - if( strpos($s[0], "[list]") === 0 ) - return '

'; - elseif( strpos($s[0], "[ul]") === 0 ) - return ''; - else - return $s[0]; -} - - -function diaspora_ol($s) { - // A hack: Diaspora will create a properly-numbered ordered list even - // if you use '1.' for each element of the list, like: - // 1. First element - // 1. Second element - // 1. Third element - if( strpos($s[0], "[list=1]") === 0 ) - return ''; - elseif( strpos($s[0], "[list=i]") === 0 ) - return ''; - elseif( strpos($s[0], "[list=I]") === 0 ) - return ''; - elseif( strpos($s[0], "[list=a]") === 0 ) - return ''; - elseif( strpos($s[0], "[list=A]") === 0 ) - return ''; - elseif( strpos($s[0], "[ol]") === 0 ) - return ''; - else - return $s[0]; -} -*/ - -////////////////////// -// Non-Markdownify versions of "diaspora_ol" and "diaspora_ul" -////////////////////// -function diaspora_ul($s) { - // Replace "[\\*]" followed by any number (including zero) of - // spaces by "* " to match Diaspora's list format - return preg_replace("/\[\\\\\*\]( *)/", "* ", $s[1]); -} - -function diaspora_ol($s) { - // A hack: Diaspora will create a properly-numbered ordered list even - // if you use '1.' for each element of the list, like: - // 1. First element - // 1. Second element - // 1. Third element - return preg_replace("/\[\\\\\*\]( *)/", "1. ", $s[1]); -} - - function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // Since Diaspora is creating a summary for links, this function removes them before posting if ($fordiaspora) $Text = bb_remove_share_information($Text); - // Re-enabling the converter again. - // The bbcode parser now handles youtube-links (and the other stuff) correctly. - // Additionally the html code is now fixed so that lists are now working. - /** * Transform #tags, strip off the [url] and replace spaces with underscore */ @@ -154,21 +71,14 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // Converting images with size parameters to simple images. Markdown doesn't know it. $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); - // the following was added on 10-January-2012 due to an inability of Diaspora's - // new javascript markdown processor to handle links with images as the link "text" - // It is not optimal and may be removed if this ability is restored in the future - //if ($fordiaspora) - // $Text = preg_replace("/\[url\=([^\[\]]*)\]\s*\[img\](.*?)\[\/img\]\s*\[\/url\]/ism", - // "[url]$1[/url]\n[img]$2[/img]", $Text); - - // Remove the avatar picture since that isn't looking good on the other side - //$Text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","\n[share$1$2]$3[/share]",$Text); - // Convert it to HTML - don't try oembed if ($fordiaspora) $Text = bbcode($Text, $preserve_nl, false, 3); - else + else { $Text = bbcode($Text, $preserve_nl, false, 4); + // Libertree doesn't convert a harizontal rule if there isn't a linefeed + $Text = str_replace("
", "\n
", $Text); + } // Now convert HTML to Markdown $md = new Markdownify(false, false, false); @@ -199,185 +109,6 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // Remove all unconverted tags $Text = strip_tags($Text); - -/* Old routine - - $ev = bbtoevent($Text); - - // Replace any html brackets with HTML Entities to prevent executing HTML or script - // Don't use strip_tags here because it breaks [url] search by replacing & with amp - - $Text = str_replace("<", "<", $Text); - $Text = str_replace(">", ">", $Text); - - // If we find any event code, turn it into an event. - // After we're finished processing the bbcode we'll - // replace all of the event code with a reformatted version. - - if($preserve_nl) - $Text = str_replace(array("\n","\r"), array('',''),$Text); - else - // Remove the "return" character, as Diaspora uses only the "newline" - // character, so having the "return" character can cause signature - // failures - $Text = str_replace("\r", "", $Text); - - - // Set up the parameters for a URL search string - $URLSearchString = "^\[\]"; - // Set up the parameters for a MAIL search string - $MAILSearchString = $URLSearchString; - - // Perform URL Search - - // [img]pathtoimage[/img] - - // the following was added on 10-January-2012 due to an inability of Diaspora's - // new javascript markdown processor to handle links with images as the link "text" - // It is not optimal and may be removed if this ability is restored in the future - - $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism", - '![' . t('image/photo') . '](' . '$2' . ')' . "\n" . '[' . t('link') . '](' . '$1' . ')', $Text); - - $Text = preg_replace("/\[bookmark\]([$URLSearchString]*)\[\/bookmark\]/ism", '[$1]($1)', $Text); - $Text = preg_replace("/\[bookmark\=([$URLSearchString]*)\](.*?)\[\/bookmark\]/ism", '[$2]($1)', $Text); - - $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '[$1]($1)', $Text); - $Text = preg_replace("/\#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[#$2]($1)', $Text); - $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[$2]($1)', $Text); - - - $Text = preg_replace("/\[img\](.*?)\[\/img\]/", '![' . t('image/photo') . '](' . '$1' . ')', $Text); - $Text = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/", '![' . t('image/photo') . '](' . '$2' . ')', $Text); - - // Perform MAIL Search - $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '[$1](mailto:$1)', $Text); - $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '[$2](mailto:$1)', $Text); - - $Text = str_replace('*', '\\*', $Text); - $Text = str_replace('_', '\\_', $Text); - - $Text = str_replace('`','\\`', $Text); - - // Check for bold text - $Text = preg_replace("(\[b\](.*?)\[\/b\])is",'**$1**',$Text); - - // Check for italics text - $Text = preg_replace("(\[i\](.*?)\[\/i\])is",'_$1_',$Text); - - // Check for underline text - // Replace with italics since Diaspora doesn't have underline - $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'_$1_',$Text); - - // Check for strike-through text - $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'**[strike]**$1**[/strike]**',$Text); - - // Check for over-line text -// $Text = preg_replace("(\[o\](.*?)\[\/o\])is",'$1',$Text); - - // Check for colored text - // Remove color since Diaspora doesn't support it - $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text); - - // Check for sized text - // Remove it since Diaspora doesn't support sizes very well - $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text); - - // Check for list text - $endlessloop = 0; - while ((((strpos($Text, "[/list]") !== false) && (strpos($Text, "[list") !== false)) || - ((strpos($Text, "[/ol]") !== false) && (strpos($Text, "[ol]") !== false)) || - ((strpos($Text, "[/ul]") !== false) && (strpos($Text, "[ul]") !== false)) || - ((strpos($Text, "[/li]") !== false) && (strpos($Text, "[li]") !== false))) && (++$endlessloop < 20)) { - $Text = preg_replace_callback("/\[list\](.*?)\[\/list\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[list=1\](.*?)\[\/list\]/is", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=i\](.*?)\[\/list\]/s",'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=I\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=a\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=A\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[ul\](.*?)\[\/ul\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[ol\](.*?)\[\/ol\]/is", 'diaspora_ol', $Text); - $Text = preg_replace("/\[li\]( *)(.*?)\[\/li\]/s", '* $2' ,$Text); - } - - // Just get rid of table tags since Diaspora doesn't support tables - $Text = preg_replace("/\[th\](.*?)\[\/th\]/s", '$1' ,$Text); - $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '$1' ,$Text); - $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '$1' ,$Text); - $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '$1' ,$Text); - - $Text = preg_replace("/\[table border=(.*?)\](.*?)\[\/table\]/s", '$2' ,$Text); -// $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '$1
' ,$Text); - - -// $Text = str_replace("[*]", "
  • ", $Text); - - // Check for font change text -// $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","$2",$Text); - - - $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripdcode_br_cb',$Text); - - // Check for [code] text - $Text = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/is","\t$2\n", $Text); - - - - - // Declare the format for [quote] layout - // $QuoteLayout = '
    $1
    '; - // Check for [quote] text - $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is",">$1\n\n", $Text); - $Text = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/is",">$2\n\n", $Text); - - // Images - - // html5 video and audio - - $Text = preg_replace("/\[video\](.*?)\[\/video\]/", '$1', $Text); - - $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '$1', $Text); - -// $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '', $Text); - - // [img=widthxheight]image source[/img] -// $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '', $Text); - - $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", 'http://www.youtube.com/watch?v=$1', $Text); - - $Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'http://vimeo.com/$1',$Text); - $Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'http://vimeo.com/$1',$Text); - $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", 'http://vimeo.com/$1',$Text); - - - $Text = str_replace('[nosmile]','',$Text); - - // oembed tag - // $Text = oembed_bbcode2html($Text); - - // If we found an event earlier, strip out all the event code and replace with a reformatted version. - - if(x($ev,'start')) { - - $sub = format_event_diaspora($ev); - - $Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/is",'',$Text); - $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",'',$Text); - $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",$sub,$Text); - $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); - $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text); - $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text); - } - - $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); - - $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text); - -*/ - // Remove any leading or trailing whitespace, as this will mess up // the Diaspora signature verification and cause the item to disappear $Text = trim($Text); diff --git a/include/bbcode.php b/include/bbcode.php index 342cd7be5..308cbf1be 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -520,7 +520,8 @@ function bb_ShareAttributesSimple2($match) { $userid = GetProfileUsername($profile,$author); - $text = "
    ".html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
    ".$match[2]; + //$text = "
    ".html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
    ".$match[2]; + $text = "
    ".html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
    ".$match[2]; return($text); } diff --git a/include/diaspora.php b/include/diaspora.php index feb57a040..4db8ea321 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -262,7 +262,7 @@ function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) { logger('diaspora_pubmsg_build: ' . $msg, LOGGER_DATA); - + $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); // $b64_data = base64_encode($msg); @@ -276,7 +276,7 @@ function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) { $encoding = 'base64url'; $alg = 'RSA-SHA256'; - $signable_data = $data . '.' . base64url_encode($type) . '.' + $signable_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg) ; $signature = rsa_sign($signable_data,$prvkey); @@ -345,7 +345,7 @@ function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey,$public = false) $encoding = 'base64url'; $alg = 'RSA-SHA256'; - $signable_data = $data . '.' . base64url_encode($type) . '.' + $signable_data = $data . '.' . base64url_encode($type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($alg) ; $signature = rsa_sign($signable_data,$prvkey); @@ -713,7 +713,7 @@ function diaspora_request($importer,$xml) { $photos = import_profile_photo($contact_record['photo'],$importer['uid'],$contact_record['id']); - // technically they are sharing with us (CONTACT_IS_SHARING), + // technically they are sharing with us (CONTACT_IS_SHARING), // but if our page-type is PAGE_COMMUNITY or PAGE_SOAPBOX // we are going to change the relationship and make them a follower. @@ -1603,7 +1603,7 @@ function diaspora_conversation($importer,$xml,$msg) { 'verb' => ACTIVITY_POST, 'otype' => 'mail' )); - } + } return; } @@ -2301,7 +2301,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n"; } } - } + } $public = (($item['private']) ? 'false' : 'true'); @@ -2309,13 +2309,17 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { require_once('include/datetime.php'); $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C'); + // To-Do + // Detect a share element and do a reshare + // see: https://github.com/Raven24/diaspora-federation/blob/master/lib/diaspora-federation/entities/reshare.rb $tpl = get_markup_template('diaspora_post.tpl'); $msg = replace_macros($tpl, array( '$body' => $body, '$guid' => $item['guid'], '$handle' => xmlify($myaddr), '$public' => $public, - '$created' => $created + '$created' => $created, + '$provider' => $item["app"] )); logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA); diff --git a/include/profile_update.php b/include/profile_update.php index 611b00819..9da96442c 100644 --- a/include/profile_update.php +++ b/include/profile_update.php @@ -7,7 +7,7 @@ require_once('include/queue_fn.php'); function profile_change() { $a = get_app(); - + if(! local_user()) return; @@ -29,7 +29,7 @@ function profile_change() { WHERE `user`.`uid` = %d AND `profile`.`is-default` = 1 LIMIT 1", intval(local_user()) ); - + if(! count($r)) return; $profile = $r[0]; diff --git a/include/text.php b/include/text.php index 052207842..d515f28ca 100644 --- a/include/text.php +++ b/include/text.php @@ -753,7 +753,7 @@ function get_tags($s) { // Otherwise pull out single word tags. These can be @nickname, @first_last // and #hash tags. - if(preg_match_all('/([@#][^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/',$s,$match)) { + if(preg_match_all('/([!#@][^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/',$s,$match)) { foreach($match[1] as $mtch) { if(strstr($mtch,"]")) { // we might be inside a bbcode color tag - leave it alone @@ -2172,7 +2172,7 @@ function normalise_openid($s) { function undo_post_tagging($s) { $matches = null; - $cnt = preg_match_all('/([@#])\[url=(.*?)\](.*?)\[\/url\]/ism',$s,$matches,PREG_SET_ORDER); + $cnt = preg_match_all('/([!#@])\[url=(.*?)\](.*?)\[\/url\]/ism',$s,$matches,PREG_SET_ORDER); if($cnt) { foreach($matches as $mtch) { $s = str_replace($mtch[0], $mtch[1] . $mtch[3],$s); diff --git a/view/templates/diaspora_like.tpl b/view/templates/diaspora_like.tpl index 1d58d5d3f..b35ec46ad 100644 --- a/view/templates/diaspora_like.tpl +++ b/view/templates/diaspora_like.tpl @@ -6,11 +6,11 @@ - {{$target_type}} + {{$positive}} {{$guid}} + {{$target_type}} {{$parent_guid}} {{$authorsig}} - {{$positive}} {{$handle}} diff --git a/view/templates/diaspora_like_relay.tpl b/view/templates/diaspora_like_relay.tpl index 7a55d8b20..379bf0f45 100644 --- a/view/templates/diaspora_like_relay.tpl +++ b/view/templates/diaspora_like_relay.tpl @@ -6,12 +6,12 @@ + {{$positive}} {{$guid}} {{$target_type}} {{$parent_guid}} {{$parentsig}} {{$authorsig}} - {{$positive}} {{$handle}} diff --git a/view/templates/diaspora_photo.tpl b/view/templates/diaspora_photo.tpl index b6220346c..258a9c2f4 100644 --- a/view/templates/diaspora_photo.tpl +++ b/view/templates/diaspora_photo.tpl @@ -6,13 +6,13 @@ - {{$path}} - {{$filename}} - {{$msg_guid}} {{$guid}} {{$handle}} {{$public}} {{$created_at}} + {{$path}} + {{$filename}} + {{$msg_guid}} - \ No newline at end of file + diff --git a/view/templates/diaspora_post.tpl b/view/templates/diaspora_post.tpl index 2817f7d4a..b5a79c194 100644 --- a/view/templates/diaspora_post.tpl +++ b/view/templates/diaspora_post.tpl @@ -11,6 +11,7 @@ {{$handle}} {{$public}} {{$created}} + {{$provider}} - \ No newline at end of file + diff --git a/view/templates/diaspora_profile.tpl b/view/templates/diaspora_profile.tpl index 11aaf1055..e57b82820 100644 --- a/view/templates/diaspora_profile.tpl +++ b/view/templates/diaspora_profile.tpl @@ -9,13 +9,13 @@ {{$first}} {{$last}} {{$large}} - {{$small}} {{$medium}} + {{$small}} {{$dob}} {{$gender}} {{$about}} {{$location}} {{$searchable}} {{$tags}} - - + + diff --git a/view/templates/diaspora_relayable_retraction.tpl b/view/templates/diaspora_relayable_retraction.tpl index 138cbdb31..c25e13db1 100644 --- a/view/templates/diaspora_relayable_retraction.tpl +++ b/view/templates/diaspora_relayable_retraction.tpl @@ -6,11 +6,11 @@ - {{$target_type}} - {{$guid}} {{$parentsig}} - {{$authorsig}} + {{$guid}} + {{$target_type}} {{$handle}} + {{$authorsig}} diff --git a/view/templates/diaspora_retract.tpl b/view/templates/diaspora_retract.tpl index 103bfc9d5..345f4bcb6 100644 --- a/view/templates/diaspora_retract.tpl +++ b/view/templates/diaspora_retract.tpl @@ -7,8 +7,8 @@ {{$guid}} - {{$type}} {{$handle}} + {{$type}} - \ No newline at end of file + diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 2ff3bbd15..ce1467844 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -1244,9 +1244,13 @@ position: relative; overflow: hidden; border-left: 0px; padding-left: 0px; + font-size: 13px; + line-height: normal; } .type-link .oembed, .type-video .oembed { - font-size: inherit; + font-size: 18px; + font-weight: 300; + line-height: normal; } .type-link img, .type-video img { /* position: absolute; @@ -1259,6 +1263,10 @@ top: 0; */ display: none; } +h2 { + line-height: normal; +} + .wall-item-container .wall-item-content { /* font-size: 14px; */ max-width: 660px; @@ -1339,7 +1347,7 @@ top: 0; */ transition: all 0.2s ease-in-out; } -/* .wall-item-container .wall-item-content a, */ +.wall-item-container .wall-item-content a, .toplevel_item .fakelink, .wall-item-container .fakelink { color: black; @@ -2024,7 +2032,7 @@ ul.tabs a:hover, #event-notice:hover, #birthday-notice:hover, ul.tabs li .active width: 200px; } .field input, .field textarea { - width: 400px; + max-width: 400px; } .field textarea { height: 100px; @@ -2069,6 +2077,12 @@ ul.tabs a:hover, #event-notice:hover, #birthday-notice:hover, ul.tabs li .active .field.radio .field_help { margin-left: 0px; } +aside form { + overflow-x: hidden; +} +aside form .field label { + float: inherit; +} #profile-edit-links-end { clear: both; diff --git a/view/theme/vier/templates/profile_vcard.tpl b/view/theme/vier/templates/profile_vcard.tpl index 0a5464252..49d031e07 100644 --- a/view/theme/vier/templates/profile_vcard.tpl +++ b/view/theme/vier/templates/profile_vcard.tpl @@ -39,9 +39,9 @@ {{$profile.locality}}{{if $profile.locality}}, {{/if}} {{$profile.region}} - {{$profile.postal-code}} + {{$profile.postal_code}} - {{if $profile.country-name}}{{$profile.country-name}}{{/if}} + {{if $profile.country_name}}{{$profile.country_name}}{{/if}} {{/if}}