diff --git a/include/Photo.php b/include/Photo.php index 45164333dd..282cf4458e 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -755,3 +755,23 @@ function import_profile_photo($photo,$uid,$cid) { return(array($photo,$thumb,$micro)); } + +function get_photo_info($url) { + $data = array(); + + $data = Cache::get($url); + + if (is_null($data)) { + $img_str = fetch_url($url, true, $redirects, 4); + + $tempfile = tempnam(get_config("system","temppath"), "cache"); + file_put_contents($tempfile, $img_str); + $data = getimagesize($tempfile); + unlink($tempfile); + + Cache::set($url, serialize($data)); + } else + $data = unserialize($data); + + return $data; +} diff --git a/include/api.php b/include/api.php index a5bf161ccf..35f25ddbdd 100644 --- a/include/api.php +++ b/include/api.php @@ -1653,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", + $bbcode = 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); diff --git a/include/bbcode.php b/include/bbcode.php index 23949d24be..4c2d6e547c 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -6,73 +6,84 @@ function bb_attachment($Text, $plaintext = false, $tryoembed = true) { $Text = preg_replace_callback("/\[attachment(.*?)\](.*?)\[\/attachment\]/ism", function ($match) use ($plaintext){ - $attributes = $match[1]; + $attributes = $match[1]; - $type = ""; - preg_match("/type='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $type = $matches[1]; + $type = ""; + preg_match("/type='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $type = $matches[1]; - preg_match('/type="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $type = $matches[1]; + preg_match('/type="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $type = $matches[1]; - if ($type == "") - return($match[0]); + if ($type == "") + return($match[0]); - if (!in_array($type, array("link", "audio", "video"))) - return($match[0]); + if (!in_array($type, array("link", "audio", "video"))) + return($match[0]); - $url = ""; - preg_match("/url='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $url = $matches[1]; + $url = ""; + preg_match("/url='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $url = $matches[1]; - preg_match('/url="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $url = $matches[1]; + preg_match('/url="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $url = $matches[1]; - $title = ""; - preg_match("/title='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $title = $matches[1]; + $title = ""; + preg_match("/title='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $title = $matches[1]; - preg_match('/title="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $title = $matches[1]; + preg_match('/title="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $title = $matches[1]; - $image = ""; - preg_match("/image='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $image = $matches[1]; + $image = ""; + preg_match("/image='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $image = $matches[1]; - preg_match('/image="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $image = $matches[1]; + preg_match('/image="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $image = $matches[1]; + + $preview = ""; + preg_match("/preview='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $preview = $matches[1]; + + preg_match('/preview="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $preview = $matches[1]; if ($plaintext) $text = sprintf('%s', $url, $title); else { - $text = sprintf('', $type); + $text = sprintf('', $type); - $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $url, $title), $title, $url); + $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $url, $title), $title, $url); if ($tryoembed) - $oembed = tryoembed($bookmark); + $oembed = tryoembed($bookmark); else $oembed = $bookmark[0]; - if (($image != "") AND !strstr(strtolower($oembed), "%s', $image, $title); // To-Do: Anführungszeichen in "alt" + if (($image != "") AND !strstr(strtolower($oembed), "%s', $image, $title); // To-Do: Anführungszeichen in "alt" + elseif (($preview != "") AND !strstr(strtolower($oembed), "%s', $preview, $title); // To-Do: Anführungszeichen in "alt" - $text .= $oembed; + $text .= $oembed; - $text .= sprintf('
%s
', trim($match[2])); + $text .= sprintf('
%s
', trim($match[2])); } - return($text); + return($text); },$Text); - return($Text); + return($Text); } function bb_rearrange_link($shared) { @@ -104,37 +115,43 @@ function bb_rearrange_link($shared) { return($newshare); } -function bb_remove_share_information($Text, $plaintext = false) { - if ($plaintext) - $Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $Text); - - $Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism","bb_cleanup_share",$Text); - return($Text); +function bb_remove_share_information($Text, $plaintext = false, $nolink = false) { + $Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism", + function ($match) use ($plaintext, $nolink){ + return(bb_cleanup_share($match, $plaintext, $nolink)); + },$Text); + return($Text); } -function bb_cleanup_share($shared) { +function bb_cleanup_share($shared, $plaintext, $nolink) { if (!in_array($shared[2], array("type-link", "type-video"))) - return($shared[0]); + return($shared[0]); - if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark)) - return($shared[0]); + if ($plaintext) + $shared[3] = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $shared[3]); - $title = ""; - $link = ""; + if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark)) + return($shared[0]); - if (isset($bookmark[2][0])) - $title = $bookmark[2][0]; + if ($nolink) + return(trim($shared[1])); - if (isset($bookmark[1][0])) - $link = $bookmark[1][0]; + $title = ""; + $link = ""; - if (strpos($shared[1],$title) !== false) - $title = ""; + if (isset($bookmark[2][0])) + $title = $bookmark[2][0]; + + if (isset($bookmark[1][0])) + $link = $bookmark[1][0]; + + if (strpos($shared[1],$title) !== false) + $title = ""; // if (strpos($shared[1],$link) !== false) // $link = ""; - $text = trim($shared[1]); + $text = trim($shared[1]); if (($text == "") AND ($title != "") AND ($link == "")) $text .= "\n\n".trim($title); @@ -144,7 +161,7 @@ function bb_cleanup_share($shared) { elseif (($link != "")) $text .= "\n".trim($link); - return(trim($text)); + return(trim($text)); } @@ -274,7 +291,7 @@ function get_bb_tag_pos($s, $name, $occurance = 1) { return false; $res = array( 'start' => array('open' => $start_open, 'close' => $start_close), - 'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) ); + 'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) ); if( $start_equal !== false) $res['start']['equal'] = $start_equal + 1; @@ -364,45 +381,46 @@ function bb_replace_images($body, $images) { return $newbody; }} +/* function bb_ShareAttributes($match) { - $attributes = $match[1]; + $attributes = $match[1]; - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - $link = ""; - preg_match("/link='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + $link = ""; + preg_match("/link='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; - preg_match('/link="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + preg_match('/link="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; - $avatar = ""; - preg_match("/avatar='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $avatar = $matches[1]; + $avatar = ""; + preg_match("/avatar='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; - preg_match('/avatar="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $avatar = $matches[1]; + preg_match('/avatar="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; $posted = ""; @@ -422,57 +440,57 @@ function bb_ShareAttributes($match) { } $headline = '
'; - //$headline = '
'; + //$headline = '
'; if ($avatar != "") $headline .= ''; $headline .= sprintf(t('%s wrote the following post'.$reldate.':'), $profile, $author, $link); - $headline .= "
"; + $headline .= "
"; - $text = $headline.'
'.trim($match[2])."
"; + $text = $headline.'
'.trim($match[2])."
"; - return($text); + return($text); } // Escpecially for Diaspora (there mustn't be links in the share information) function bb_ShareAttributesDiaspora($match) { - $attributes = $match[2]; + $attributes = $match[2]; - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - $link = ""; - preg_match("/link='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + $link = ""; + preg_match("/link='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; - preg_match('/link="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + preg_match('/link="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; $userid = GetProfileUsername($profile,$author); $headline = '
'; $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').$userid.':'; - $headline .= "
"; + $headline .= "
"; $text = trim($match[1]); @@ -486,40 +504,40 @@ function bb_ShareAttributesDiaspora($match) { // $text .= '
'.t("Link").' [l]'; - return($text); + return($text); } // Optimized for Libertree, Wordpress, Tumblr, ... function bb_ShareAttributesForExport($match) { - $attributes = $match[2]; + $attributes = $match[2]; - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - $link = ""; - preg_match("/link='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + $link = ""; + preg_match("/link='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; - preg_match('/link="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + preg_match('/link="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; if ($link == "") $link = $profile; @@ -529,7 +547,7 @@ function bb_ShareAttributesForExport($match) { $headline = '
'; $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); $headline .= sprintf(t('%2$s %3$s'), $link, $userid, $posted); - $headline .= ":
"; + $headline .= ":"; $text = trim($match[1]); @@ -538,68 +556,186 @@ function bb_ShareAttributesForExport($match) { $text .= $headline.'
'.trim($match[3])."

"; - return($text); + return($text); } // Still in use? function bb_ShareAttributesSimple($match) { - $attributes = $match[1]; + $attributes = $match[1]; - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; $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]."«"; - return($text); + return($text); } // Used for text exports (Twitter, Facebook, Google+) function bb_ShareAttributesSimple2($match) { - $attributes = $match[1]; + $attributes = $match[1]; - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; $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]; + $text = "
".html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
".$match[2]; - return($text); + return($text); +} +*/ +function bb_ShareAttributes($share, $simplehtml) { + $attributes = $share[2]; + + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; + + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; + + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; + + $avatar = ""; + preg_match("/avatar='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; + + preg_match('/avatar="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; + + $link = ""; + preg_match("/link='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; + + preg_match('/link="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; + + $posted = ""; + + $itemcache = get_config("system","itemcache"); + + // relative dates only make sense when they aren't cached + if ($itemcache == "") { + preg_match("/posted='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $posted = $matches[1]; + + preg_match('/posted="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $posted = $matches[1]; + + $reldate = (($posted) ? " " . relative_date($posted) : ''); + } + + $userid = GetProfileUsername($profile,$author); + + $preshare = trim($share[1]); + + if ($preshare != "") + $preshare .= "

"; + + switch ($simplehtml) { + case 1: + $text = $preshare.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
»".$share[3]."«"; + break; + case 2: + $text = $preshare.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
".$share[3]; + break; + case 3: + $headline = '
'; + $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').$userid.':'; + $headline .= "
"; + + $text = trim($share[1]); + + if ($text != "") + $text .= "
"; + + $text .= $headline.'
'.trim($share[3])."

"; + + if ($link != "") + $text .= '
[l]'; + break; + case 4: + $headline = '
'; + $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); + $headline .= sprintf(t('%2$s %3$s'), $link, $userid, $posted); + $headline .= ":
"; + + $text = trim($share[1]); + + if ($text != "") + $text .= "
"; + + $text .= $headline.'
'.trim($share[3])."

"; + + break; + case 5: + $text = $preshare.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid.":
".$share[3]; + break; + case 6: + $text = $preshare.">> ".$userid.":
".$share[3]; + break; + default: + $headline = trim($share[1]).'
'; + if ($avatar != "") + $headline .= ''; + + $headline .= sprintf(t('%s wrote the following post'.$reldate.':'), $profile, $author, $link); + $headline .= "
"; + $text = $headline.'
'.trim($share[3])."
"; + break; + } + return($text); } function GetProfileUsername($profile, $username) { @@ -687,6 +823,13 @@ function bb_RemovePictureLinks($match) { return($text); } +function bb_expand_links($match) { + if (stristr($match[2], $match[3]) OR ($match[2] == $match[3])) + return ($match[1]."[url]".$match[2]."[/url]"); + else + return ($match[1].$match[3]." [url]".$match[2]."[/url]"); +} + function bb_CleanPictureLinksSub($match) { $text = Cache::get($match[1]); @@ -836,8 +979,9 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $Text = preg_replace("/#\[url\=[$URLSearchString]*\]\^\[\/url\]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/i", "[bookmark=$1]$2[/bookmark]", $Text); - if ($simplehtml == 2) { - $Text = preg_replace("/[^#@]\[url\=([^\]]*)\](.*?)\[\/url\]/ism",' $2 [url]$1[/url]',$Text); + if (in_array($simplehtml, array(2, 6))) { + $Text = preg_replace_callback("/([^#@])\[url\=([^\]]*)\](.*?)\[\/url\]/ism","bb_expand_links",$Text); + //$Text = preg_replace("/[^#@]\[url\=([^\]]*)\](.*?)\[\/url\]/ism",' $2 [url]$1[/url]',$Text); $Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",' $2 [url]$1[/url]',$Text); } @@ -901,7 +1045,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])ism","$2",$Text); // Check for sized text - // [size=50] --> font-size: 50px (with the unit). + // [size=50] --> font-size: 50px (with the unit). $Text = preg_replace("(\[size=(\d*?)\](.*?)\[\/size\])ism","$2",$Text); $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])ism","$2",$Text); @@ -917,7 +1061,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal // Check for CSS classes $Text = preg_replace_callback("(\[class=(.*?)\](.*?)\[\/class\])ism","bb_cleanclass",$Text); - // handle nested lists + // handle nested lists $endlessloop = 0; while ((((strpos($Text, "[/list]") !== false) && (strpos($Text, "[list") !== false)) || @@ -978,8 +1122,8 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $endlessloop = 0; while ((strpos($Text, "[/spoiler]")!== false) and (strpos($Text, "[spoiler=") !== false) and (++$endlessloop < 20)) $Text = preg_replace("/\[spoiler=[\"\']*(.*?)[\"\']*\](.*?)\[\/spoiler\]/ism", - "
" . $t_wrote . "
$2
", - $Text); + "
" . $t_wrote . "
$2
", + $Text); // Declare the format for [quote] layout $QuoteLayout = '
$1
'; @@ -998,8 +1142,8 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $endlessloop = 0; while ((strpos($Text, "[/quote]")!== false) and (strpos($Text, "[quote=") !== false) and (++$endlessloop < 20)) $Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism", - "
" . $t_wrote . "
$2
", - $Text); + "
" . $t_wrote . "
$2
", + $Text); // [img=widthxheight]image source[/img] //$Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '', $Text); @@ -1012,6 +1156,11 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '' . t('Image/photo') . '', $Text); // Shared content + $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism", + function ($match) use ($simplehtml){ + return(bb_ShareAttributes($match, $simplehtml)); + },$Text); +/* if (!$simplehtml) $Text = preg_replace_callback("/\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributes",$Text); elseif ($simplehtml == 1) @@ -1022,6 +1171,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributesDiaspora",$Text); elseif ($simplehtml == 4) $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism","bb_ShareAttributesForExport",$Text); +*/ $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'
' . t('Encrypted content') . '
', $Text); $Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism",'
' . t('Encrypted content') . '
', $Text); diff --git a/include/contact_widgets.php b/include/contact_widgets.php index 9401adccad..6d9b097d69 100644 --- a/include/contact_widgets.php +++ b/include/contact_widgets.php @@ -49,8 +49,8 @@ function networks_widget($baseurl,$selected = '') { if(! feature_enabled(local_user(),'networks')) return ''; - - $r = q("select distinct(network) from contact where uid = %d and self = 0", + + $r = q("SELECT DISTINCT(`network`) FROM `contact` WHERE `uid` = %d AND `self` = 0 ORDER BY `network`", intval(local_user()) ); diff --git a/include/dbstructure.php b/include/dbstructure.php index 83a75e4d1b..40762a9e94 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -15,9 +15,6 @@ function dbstructure_run(&$argv, &$argc) { unset($db_host, $db_user, $db_pass, $db_data); } - load_config('config'); - load_config('system'); - update_structure(true, true); } @@ -115,11 +112,11 @@ function update_structure($verbose, $action) { // Compare it foreach ($definition AS $name => $structure) { $sql3=""; - if (!isset($database[$name])) + if (!isset($database[$name])) { $r = db_create_table($name, $structure["fields"], $verbose, $action); if(false === $r) $errors .= t('Errors encountered creating database tables.').$name.EOL; - else { + } else { // Compare the field structure field by field foreach ($structure["fields"] AS $fieldname => $parameters) { if (!isset($database[$name]["fields"][$fieldname])) { @@ -155,14 +152,17 @@ function update_structure($verbose, $action) { } // Create the index - foreach ($structure["indexes"] AS $indexname => $fieldnames) + foreach ($structure["indexes"] AS $indexname => $fieldnames) { if (!isset($database[$name]["indexes"][$indexname])) { $sql2=db_create_index($indexname, $fieldnames); - if ($sql3 == "") - $sql3 = "ALTER TABLE `".$name."` ".$sql2; - else - $sql3 .= ", ".$sql2; + if ($sql2 != "") { + if ($sql3 == "") + $sql3 = "ALTER TABLE `".$name."` ".$sql2; + else + $sql3 .= ", ".$sql2; + } } + } if ($sql3 != "") { $sql3 .= ";"; @@ -212,7 +212,7 @@ function db_create_table($name, $fields, $verbose, $action) { $sql .= "`".dbesc($fieldname)."` ".db_field_command($field); } - $sql = sprintf("ADD TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; + $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; if ($verbose) echo $sql.";\n"; diff --git a/include/delivery.php b/include/delivery.php index a3d4838b0e..421e205e34 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -469,10 +469,6 @@ function delivery_run(&$argv, &$argc){ //if($reply_to) // $headers .= 'Reply-to: ' . $reply_to . "\n"; - // for testing purposes: Collect exported mails - // $file = tempnam("/tmp/friendica/", "mail-out-"); - // file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n"; //logger("Mail: uri: ".$it['uri']." parent-uri ".$it['parent-uri'], LOGGER_DEBUG); diff --git a/include/email.php b/include/email.php index 46feb4582b..dec8c93db7 100644 --- a/include/email.php +++ b/include/email.php @@ -82,10 +82,6 @@ function email_get_msg($mbox,$uid, $reply) { if(! $struc) return $ret; - // for testing purposes: Collect imported mails - // $file = tempnam("/tmp/friendica2/", "mail-in-"); - // file_put_contents($file, json_encode($struc)); - if(! $struc->parts) { $ret['body'] = email_get_part($mbox,$uid,$struc,0, 'html'); $html = $ret['body']; @@ -138,10 +134,6 @@ function email_get_part($mbox,$uid,$p,$partno, $subtype) { ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK) : @imap_body($mbox,$uid,FT_UID|FT_PEEK); - // for testing purposes: Collect imported mails - // $file = tempnam("/tmp/friendica2/", "mail-body-"); - // file_put_contents($file, $data); - // Any part may be encoded, even plain text messages, so check everything. if ($p->encoding==4) $data = quoted_printable_decode($data); diff --git a/include/items.php b/include/items.php old mode 100755 new mode 100644 index 7aac15b585..6bec078bc3 --- a/include/items.php +++ b/include/items.php @@ -874,21 +874,15 @@ function get_atom_elements($feed, $item, $contact = array()) { call_hooks('parse_atom', $arr); - //if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) { - //if (strpos($res["body"], "RT @") !== false) { - /*if (strpos($res["body"], "@") !== false) { - $debugfile = tempnam("/var/www/virtual/pirati.ca/phptmp/", "item-res2-"); - file_put_contents($debugfile, serialize($arr)); - }*/ - return $res; } -function add_page_info($url, $no_photos = false) { - require_once("mod/parse_url.php"); - $data = parseurl_getsiteinfo($url, true); +function add_page_info($url, $no_photos = false, $photo = "") { + require_once("mod/parse_url.php"); - logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG); + $data = parseurl_getsiteinfo($url, true); + + logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG); // It maybe is a rich content, but if it does have everything that a link has, // then treat it that way @@ -896,51 +890,53 @@ function add_page_info($url, $no_photos = false) { is_string($data["text"]) AND (sizeof($data["images"]) > 0)) $data["type"] = "link"; - if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url)) - return(""); + if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url)) + return(""); if ($no_photos AND ($data["type"] == "photo")) return(""); - if (($data["type"] != "photo") AND is_string($data["title"])) - $text .= "[bookmark=".$url."]".trim($data["title"])."[/bookmark]"; + if (($data["type"] != "photo") AND is_string($data["title"])) + $text .= "[bookmark=".$url."]".trim($data["title"])."[/bookmark]"; - if (($data["type"] != "video") AND (sizeof($data["images"]) > 0)) { - $imagedata = $data["images"][0]; - $text .= '[img]'.$imagedata["src"].'[/img]'; - } + if (($data["type"] != "video") AND ($photo != "")) + $text .= '[img]'.$photo.'[/img]'; + elseif (($data["type"] != "video") AND (sizeof($data["images"]) > 0)) { + $imagedata = $data["images"][0]; + $text .= '[img]'.$imagedata["src"].'[/img]'; + } - if (($data["type"] != "photo") AND is_string($data["text"])) - $text .= "[quote]".$data["text"]."[/quote]"; + if (($data["type"] != "photo") AND is_string($data["text"])) + $text .= "[quote]".$data["text"]."[/quote]"; - return("\n[class=type-".$data["type"]."]".$text."[/class]"); + return("\n[class=type-".$data["type"]."]".$text."[/class]"); } function add_page_info_to_body($body, $texturl = false, $no_photos = false) { - logger('add_page_info_to_body: fetch page info for body '.$body, LOGGER_DEBUG); + logger('add_page_info_to_body: fetch page info for body '.$body, LOGGER_DEBUG); - $URLSearchString = "^\[\]"; + $URLSearchString = "^\[\]"; - // Adding these spaces is a quick hack due to my problems with regular expressions :) - preg_match("/[^!#@]\[url\]([$URLSearchString]*)\[\/url\]/ism", " ".$body, $matches); + // Adding these spaces is a quick hack due to my problems with regular expressions :) + preg_match("/[^!#@]\[url\]([$URLSearchString]*)\[\/url\]/ism", " ".$body, $matches); - if (!$matches) - preg_match("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", " ".$body, $matches); + if (!$matches) + preg_match("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", " ".$body, $matches); // Convert urls without bbcode elements if (!$matches AND $texturl) { preg_match("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", " ".$body, $matches); // Yeah, a hack. I really hate regular expressions :) - if ($matches) - $matches[1] = $matches[2]; + if ($matches) + $matches[1] = $matches[2]; } - if ($matches) - $body .= add_page_info($matches[1], $no_photos); + if ($matches) + $body .= add_page_info($matches[1], $no_photos); - return $body; + return $body; } function encode_rel_links($links) { @@ -983,7 +979,7 @@ function item_store($arr,$force_parent = false) { if (isset($arr["ostatus_conversation"])) { $ostatus_conversation = $arr["ostatus_conversation"]; - unset($arr["ostatus_conversation"]); + unset($arr["ostatus_conversation"]); } if(x($arr, 'gravity')) @@ -1245,7 +1241,7 @@ function item_store($arr,$force_parent = false) { 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'])); + intval($arr['uid'])); $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d", intval($current_post), @@ -1290,7 +1286,7 @@ function item_store($arr,$force_parent = false) { if((! $parent_id) || ($arr['parent-uri'] === $arr['uri'])) $parent_id = $current_post; - if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid)) + if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid)) $private = 1; else $private = $arr['private']; @@ -1313,14 +1309,14 @@ function item_store($arr,$force_parent = false) { if ($ostatus_conversation) complete_conversation($current_post, $ostatus_conversation); - $arr['id'] = $current_post; - $arr['parent'] = $parent_id; - $arr['allow_cid'] = $allow_cid; - $arr['allow_gid'] = $allow_gid; - $arr['deny_cid'] = $deny_cid; - $arr['deny_gid'] = $deny_gid; - $arr['private'] = $private; - $arr['deleted'] = $parent_deleted; + $arr['id'] = $current_post; + $arr['parent'] = $parent_id; + $arr['allow_cid'] = $allow_cid; + $arr['allow_gid'] = $allow_gid; + $arr['deny_cid'] = $deny_cid; + $arr['deny_gid'] = $deny_gid; + $arr['private'] = $private; + $arr['deleted'] = $parent_deleted; // update the commented timestamp on the parent @@ -1798,10 +1794,10 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { */ function edited_timestamp_is_newer($existing, $update) { if (!x($existing,'edited') || !$existing['edited']) { - return true; + return true; } if (!x($update,'edited') || !$update['edited']) { - return false; + return false; } $existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']); $update_edited = datetime_convert('UTC', 'UTC', $update['edited']); @@ -1994,7 +1990,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($contact['uid']), - intval($contact['id']), + intval($contact['id']), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc(datetime_convert('UTC','UTC', $birthday)), @@ -2156,7 +2152,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) logger('consume_feed: feed item count = ' . $feed->get_item_quantity()); - // in inverse date order + // in inverse date order if ($datedir) $items = array_reverse($feed->get_items()); else @@ -3592,16 +3588,16 @@ function local_delivery($importer,$data) { $links = parse_xml_string("".unxmlify($xo->link)."",false); - foreach($links->link as $l) { - $atts = $l->attributes(); - switch($atts['rel']) { - case "alternate": + foreach($links->link as $l) { + $atts = $l->attributes(); + switch($atts['rel']) { + case "alternate": $Blink = $atts['href']; break; default: break; - } - } + } + } if($Blink && link_compare($Blink,$a->get_baseurl() . '/profile/' . $importer['nickname'])) { // send a notification @@ -4455,7 +4451,7 @@ function posted_dates($uid,$wall) { $start_month = datetime_convert('','',$dstart,'Y-m-d'); $end_month = datetime_convert('','',$dend,'Y-m-d'); $str = day_translate(datetime_convert('','',$dnow,'F Y')); - $ret[] = array($str,$end_month,$start_month); + $ret[] = array($str,$end_month,$start_month); $dnow = datetime_convert('','',$dnow . ' -1 month', 'Y-m-d'); } return $ret; diff --git a/include/notifier.php b/include/notifier.php index 203b740538..d222fd9426 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -786,10 +786,6 @@ function notifier_run(&$argv, &$argc){ //if($reply_to) // $headers .= 'Reply-to: ' . $reply_to . "\n"; - // for testing purposes: Collect exported mails - //$file = tempnam("/tmp/friendica/", "mail-out2-"); - //file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . iri2msgid($it['uri']) . '>' . "\n"; if($it['uri'] !== $it['parent-uri']) { diff --git a/include/plaintext.php b/include/plaintext.php index d824f87595..3d30a3299c 100644 --- a/include/plaintext.php +++ b/include/plaintext.php @@ -46,6 +46,7 @@ function get_attached_data($body) { // if nothing is found, it maybe having an image. if (!isset($post["type"])) { require_once("mod/parse_url.php"); + require_once("include/Photo.php"); $URLSearchString = "^\[\]"; if (preg_match_all("(\[url=([$URLSearchString]*)\]\s*\[img\]([$URLSearchString]*)\[\/img\]\s*\[\/url\])ism", $body, $pictures, PREG_SET_ORDER)) { @@ -64,12 +65,8 @@ function get_attached_data($body) { $post["text"] = str_replace($pictures[0][0], "", $body); } else { $img_str = fetch_url($pictures[0][1]); - - $tempfile = tempnam(get_config("system","temppath"), "cache"); - file_put_contents($tempfile, $img_str); - $mime = image_type_to_mime_type(exif_imagetype($tempfile)); - unlink($tempfile); - if (substr($mime, 0, 6) == "image/") { + $imgdata = get_photo_info($img_str); + if (substr($imgdata["mime"], 0, 6) == "image/") { $post["type"] = "photo"; $post["image"] = $pictures[0][1]; $post["preview"] = $pictures[0][2]; @@ -111,7 +108,7 @@ function shortenmsg($msg, $limit, $twitter = false) { $msg = ""; $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); foreach ($lines AS $row=>$line) { - if (strlen(trim($msg."\n".$line)) <= $limit) + if (iconv_strlen(trim($msg."\n".$line), "UTF-8") <= $limit) $msg = trim($msg."\n".$line); // Is the new message empty by now or is it a reshared message? elseif (($msg == "") OR (($row == 1) AND (substr($msg, 0, 4) == $recycle))) @@ -122,7 +119,7 @@ function shortenmsg($msg, $limit, $twitter = false) { return($msg); } -function plaintext($a, $b, $limit = 0, $includedlinks = false) { +function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2) { require_once("include/bbcode.php"); require_once("include/html2plain.php"); require_once("include/network.php"); @@ -136,7 +133,7 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) { elseif ($b["title"] != "") $post["text"] = trim($b["title"]); - $html = bbcode($post["text"], false, false, 2); + $html = bbcode($post["text"], false, false, $htmlmode); $msg = html2plain($html, 0, true); $msg = trim(html_entity_decode($msg,ENT_QUOTES,'UTF-8')); diff --git a/view/global.css b/view/global.css index c643281354..f7b40ee8f9 100644 --- a/view/global.css +++ b/view/global.css @@ -33,13 +33,23 @@ span.connector { clear: both; visibility: hidden; } + .wall-item-container .wall-item-content .type-link img, -.type-link img, .type-video img { +.type-link img, .type-video img, img.attachment-preview { max-width: 160px; max-height: 160px; float: left; margin-right: 10px; } + +.wall-item-container .wall-item-content .type-link img.attachment-image, +.type-link img.attachment-image, .type-video img.attachment-image { + max-width: 640px; + max-height: initial; + float: initial; + margin-right: 0px; +} + .type-link blockquote, .type-video blockquote { margin-left: 0px; max-height: 160px; diff --git a/view/theme/vier/config.php b/view/theme/vier/config.php index 054b5a2b1f..8736dfe840 100644 --- a/view/theme/vier/config.php +++ b/view/theme/vier/config.php @@ -11,6 +11,9 @@ function theme_content(&$a){ $style = get_pconfig(local_user(), 'vier', 'style'); + if ($style == "") + $style = get_config('vier', 'style'); + return vier_form($a,$style); } diff --git a/view/theme/vier/flat.css b/view/theme/vier/flat.css index 4faa8a3940..d71ab2177b 100644 --- a/view/theme/vier/flat.css +++ b/view/theme/vier/flat.css @@ -2,3 +2,13 @@ body, section { background-color: #ffffff !important;} #profile-jot-form { background-color: #ffffff !important;} .dspr, .twit, .pump, .dfrn { background-color: #ffffff !important;} + +div.pager, ul.tabs { + box-shadow: unset; + background-color: unset; + border-bottom: unset; +} + +aside { + border-right: 1px solid #D2D2D2; +} diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php index 8d9a0c5c22..1d2972b623 100644 --- a/view/theme/vier/theme.php +++ b/view/theme/vier/theme.php @@ -16,6 +16,10 @@ $baseurl = $a->get_baseurl(); $a->theme_info = array(); $style = get_pconfig(local_user(), 'vier', 'style'); + +if ($style == "") + $style = get_config('vier', 'style'); + if ($style == "flat") $a->page['htmlhead'] .= ''."\n"; else if ($style == "netcolour")