diff --git a/boot.php b/boot.php
index 93b8c0106..61383f0af 100644
--- a/boot.php
+++ b/boot.php
@@ -9,9 +9,9 @@ require_once('include/nav.php');
require_once('include/cache.php');
define ( 'FRIENDIKA_PLATFORM', 'Friendica');
-define ( 'FRIENDIKA_VERSION', '2.3.1166' );
+define ( 'FRIENDIKA_VERSION', '2.3.1169' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
-define ( 'DB_UPDATE_VERSION', 1103 );
+define ( 'DB_UPDATE_VERSION', 1105 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
diff --git a/database.sql b/database.sql
index 58b81b0ac..98067d8d6 100644
--- a/database.sql
+++ b/database.sql
@@ -113,7 +113,8 @@ CREATE TABLE IF NOT EXISTS `contact` (
KEY `issued-id` (`issued-id`),
KEY `dfrn-id` (`dfrn-id`),
KEY `blocked` (`blocked`),
- KEY `readonly` (`readonly`)
+ KEY `readonly` (`readonly`),
+ KEY `pending` (`pending`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
@@ -225,6 +226,7 @@ CREATE TABLE IF NOT EXISTS `item` (
`unseen` tinyint(1) NOT NULL DEFAULT '1',
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`origin` tinyint(1) NOT NULL DEFAULT '0',
+ `forum_mode` tinyint(1) NOT NULL DEFAULT '0',
`last-child` tinyint(1) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `guid` (`guid`),
@@ -243,10 +245,13 @@ CREATE TABLE IF NOT EXISTS `item` (
KEY `starred` (`starred`),
KEY `deleted` (`deleted`),
KEY `origin` (`origin`),
+ KEY `forum_mode` (`forum_mode`),
KEY `last-child` (`last-child`),
KEY `unseen` (`unseen`),
+ KEY `wall` (`wall`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `body` (`body`),
+ FULLTEXT KEY `tag` (`tag`),
FULLTEXT KEY `allow_cid` (`allow_cid`),
FULLTEXT KEY `allow_gid` (`allow_gid`),
FULLTEXT KEY `deny_cid` (`deny_cid`),
@@ -441,6 +446,10 @@ CREATE TABLE IF NOT EXISTS `user` (
PRIMARY KEY (`uid`),
KEY `nickname` (`nickname`),
KEY `account_expired` (`account_expired`),
+ KEY `hidewall` (`hidewall`),
+ KEY `blockwall` (`blockwall`),
+ KEY `blocked` (`blocked`),
+ KEY `verified` (`verified`),
KEY `login_date` (`login_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/include/conversation.php b/include/conversation.php
index 7f9627a7d..9ac251e46 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -112,10 +112,9 @@ function localize_item(&$item){
$parsedobj = parse_xml_string($xmlhead.$item['object']);
- $tag = sprintf('#[url=%s]%s[/url]', $parsedobj->link, $parsedobj->content);
+ $tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content);
$item['body'] = sprintf( t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag );
-
}
}
diff --git a/include/diaspora.php b/include/diaspora.php
index ff0c0c0d7..36457655e 100644
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -455,7 +455,9 @@ function diaspora_request($importer,$xml) {
intval($importer['uid'])
);
- if(count($self)) {
+ // they are not CONTACT_IS_FOLLOWER anymore but that's what we have in the array
+
+ if(count($self) && $contact['rel'] == CONTACT_IS_FOLLOWER) {
$arr = array();
$arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $importer['uid']);
diff --git a/include/items.php b/include/items.php
index 7ab7eeaa4..72c1a8b32 100644
--- a/include/items.php
+++ b/include/items.php
@@ -1529,10 +1529,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
continue;
// extract tag, if not duplicate, add to parent item
- if($xo->content) {
- if(! (stristr($r[0]['tag'],trim($xo->content)))) {
+ if($xo->id && $xo->content) {
+ $newtag = '#[url=' . $xo->id . ']'. $xo->content . '[/url]';
+ if(! (stristr($r[0]['tag'],$newtag))) {
q("UPDATE item SET tag = '%s' WHERE id = %d LIMIT 1",
- dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'),
+ dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . $newtag),
intval($r[0]['id'])
);
}
@@ -2084,15 +2085,17 @@ dbg(0);
if(($xt->type == ACTIVITY_OBJ_NOTE) && ($xt->id == $r[0]['uri'])) {
// extract tag, if not duplicate, and this user allows tags, add to parent item
- if($xo->content) {
- if(! (stristr($r[0]['tag'],trim($xo->content)))) {
+ if($xo->id && $xo->content) {
+ $newtag = '#[url=' . $xo->id . ']'. $xo->content . '[/url]';
+
+ if(! (stristr($r[0]['tag'],$newtag))) {
$i = q("SELECT `blocktags` FROM `user` where `uid` = %d LIMIT 1",
intval($importer['importer_uid'])
);
if(count($i) && ! ($i[0]['blocktags'])) {
q("UPDATE item SET tag = '%s' WHERE id = %d LIMIT 1",
- dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'),
+ dbesc($r[0]['tag'] . (strlen($r[0]['tag']) ? ',' : '') . $newtag),
intval($r[0]['id'])
);
}
diff --git a/include/network.php b/include/network.php
index a9ee3f0a5..78ed24074 100644
--- a/include/network.php
+++ b/include/network.php
@@ -5,7 +5,7 @@
// results.
if(! function_exists('fetch_url')) {
-function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) {
+function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_content=Null) {
$a = get_app();
@@ -14,8 +14,16 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0) {
return false;
@curl_setopt($ch, CURLOPT_HEADER, true);
+
+ if (!is_null($accept_content)){
+ curl_setopt($ch,CURLOPT_HTTPHEADER, array (
+ "Accept: "+$accept_content
+ ));
+ }
+
@curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
- @curl_setopt($ch, CURLOPT_USERAGENT, "Friendika");
+ @curl_setopt($ch, CURLOPT_USERAGENT, "Friendica");
+
if(intval($timeout)) {
@curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
@@ -97,7 +105,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0)
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
- curl_setopt($ch, CURLOPT_USERAGENT, "Friendika");
+ curl_setopt($ch, CURLOPT_USERAGENT, "Friendica");
if(intval($timeout)) {
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
diff --git a/include/oembed.php b/include/oembed.php
index 7c0da4594..118f7fa4a 100644
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -13,24 +13,30 @@ function oembed_replacecb($matches){
function oembed_fetch_url($embedurl){
$txt = Cache::get($embedurl);
+
+ $noexts = array("mp3","mp4","ogg","ogv","oga","ogm","webm");
+ $ext = pathinfo(strtolower($embedurl),PATHINFO_EXTENSION);
+
if(is_null($txt)){
$txt = "";
- // try oembed autodiscovery
- $redirects = 0;
- $html_text = fetch_url($embedurl, false, $redirects, 15);
- if($html_text){
- $dom = @DOMDocument::loadHTML($html_text);
- if ($dom){
- $xpath = new DOMXPath($dom);
- $attr = "oembed";
-
- $xattr = oe_build_xpath("class","oembed");
- $entries = $xpath->query("//link[@type='application/json+oembed']");
- foreach($entries as $e){
- $href = $e->getAttributeNode("href")->nodeValue;
- $txt = fetch_url($href);
+ if (!in_array($ext, $noexts)){
+ // try oembed autodiscovery
+ $redirects = 0;
+ $html_text = fetch_url($embedurl, false, $redirects, 15, "text/*");
+ if($html_text){
+ $dom = @DOMDocument::loadHTML($html_text);
+ if ($dom){
+ $xpath = new DOMXPath($dom);
+ $attr = "oembed";
+
+ $xattr = oe_build_xpath("class","oembed");
+ $entries = $xpath->query("//link[@type='application/json+oembed']");
+ foreach($entries as $e){
+ $href = $e->getAttributeNode("href")->nodeValue;
+ $txt = fetch_url($href);
+ }
}
}
}
diff --git a/index.php b/index.php
index 78ceb6d77..e43d7332d 100644
--- a/index.php
+++ b/index.php
@@ -75,8 +75,6 @@ $a->timezone = (($default_timezone) ? $default_timezone : 'UTC');
date_default_timezone_set($a->timezone);
-$a->init_pagehead();
-
session_start();
/**
@@ -95,6 +93,12 @@ if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
load_translation_table($lang);
}
+/*
+ * Create the page head after setting the language
+ *
+ */
+
+$a->init_pagehead();
/**
*
diff --git a/library/HTML5/TreeBuilder.php b/library/HTML5/TreeBuilder.php
index 10d446d1e..578e73682 100644
--- a/library/HTML5/TreeBuilder.php
+++ b/library/HTML5/TreeBuilder.php
@@ -3041,9 +3041,13 @@ class HTML5_TreeBuilder {
if (!empty($token['attr'])) {
foreach($token['attr'] as $attr) {
- // mike@macgirvin.com 2011-10-21, stray double quotes and/or numeric tags cause everything to abort
- $attr['name'] = str_replace('"','',$attr['name']);
- if($attr['name'] && (!$el->hasAttribute($attr['name'])) && (! is_numeric($attr['name']))) {
+
+ // mike@macgirvin.com 2011-11-17, check attribute name for
+ // validity (ignoring extenders and combiners) as illegal chars in names
+ // causes everything to abort
+
+ $valid = preg_match('/^[a-zA-Z\_\:]([\-a-zA-Z0-9\_\:\.]+$)/',$attr['name'],$matches);
+ if($attr['name'] && (!$el->hasAttribute($attr['name'])) && ($valid)) {
$el->setAttribute($attr['name'], $attr['value']);
}
}
diff --git a/mod/item.php b/mod/item.php
index ee3bdca99..145c42cec 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -865,12 +865,12 @@ function item_post(&$a) {
$addr = trim($recip);
if(! strlen($addr))
continue;
- $disclaimer = '