]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
* Add MIME types for file attachments
[friendica.git] / include / items.php
index 0ca385c44a528fb92671c640c4266d047cc75001..08127c6eb68a127fc5d72cdfbe386191fad853db 100755 (executable)
@@ -5,7 +5,7 @@ require_once('include/oembed.php');
 require_once('include/salmon.php');
 require_once('include/crypto.php');
 require_once('include/Photo.php');
-
+require_once('include/email.php');
 
 function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) {
 
@@ -379,10 +379,12 @@ function title_is_body($title, $body) {
 
        $title = strip_tags($title);
        $title = trim($title);
+       $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
        $title = str_replace(array("\n", "\r", "\t", " "), array("","","",""), $title);
 
        $body = strip_tags($body);
        $body = trim($body);
+       $body = html_entity_decode($body, ENT_QUOTES, 'UTF-8');
        $body = str_replace(array("\n", "\r", "\t", " "), array("","","",""), $body);
 
        if (strlen($title) < strlen($body))
@@ -793,7 +795,10 @@ function get_atom_elements($feed,$item) {
        // There is some better way to parse this array - but it didn't worked for me.
        $child = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["entry"][0]["child"]["http://activitystrea.ms/spec/1.0/"][object][0]["child"];
        if (is_array($child)) {
+               logger('get_atom_elements: Looking for status.net repeated message');
+
                $message = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["content"][0]["data"];
+               $orig_uri = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["id"][0]["data"];
                $author = $child[SIMPLEPIE_NAMESPACE_ATOM_10]["author"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10];
                $uri = $author["uri"][0]["data"];
                $name = $author["name"][0]["data"];
@@ -801,15 +806,26 @@ function get_atom_elements($feed,$item) {
                $avatar = $avatar["href"];
 
                if (($name != "") and ($uri != "") and ($avatar != "") and ($message != "")) {
-                       $res["owner-name"] = $res["author-name"];
-                       $res["owner-link"] = $res["author-link"];
-                       $res["owner-avatar"] = $res["author-avatar"];
+                       logger('get_atom_elements: fixing sender of repeated message.');
+
+                       if (intval(get_config('system','new_share'))) {
+                               $prefix = "[share author='".str_replace("'", "&#039;",$name).
+                                               "' profile='".$uri.
+                                               "' avatar='".$avatar.
+                                               "' link='".$orig_uri."']";
 
-                       $res["author-name"] = $name;
-                       $res["author-link"] = $uri;
-                       $res["author-avatar"] = $avatar;
+                               $res["body"] = $prefix.html2bbcode($message)."[/share]";
+                       } else {
+                               $res["owner-name"] = $res["author-name"];
+                               $res["owner-link"] = $res["author-link"];
+                               $res["owner-avatar"] = $res["author-avatar"];
 
-                       $res["body"] = html2bbcode($message);
+                               $res["author-name"] = $name;
+                               $res["author-link"] = $uri;
+                               $res["author-avatar"] = $avatar;
+
+                               $res["body"] = html2bbcode($message);
+                       }
                }
        }
 
@@ -879,7 +895,7 @@ function item_store($arr,$force_parent = false) {
 
 
        if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
-               require_once('Text/LanguageDetect.php');
+               require_once('library/langdet/Text/LanguageDetect.php');
                $naked_body = preg_replace('/\[(.+?)\]/','',$arr['body']);
                $l = new Text_LanguageDetect;
                $lng = $l->detectConfidence($naked_body);
@@ -1591,7 +1607,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
 
        if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) {
                logger('consume_feed: Updating photo for ' . $contact['name']);
-               require_once("Photo.php");
+               require_once("include/Photo.php");
                $photo_failure = false;
                $have_photo = false;
 
@@ -2168,9 +2184,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
 }
 
 function local_delivery($importer,$data) {
-
        $a = get_app();
 
+    logger(__function__, LOGGER_TRACE);
+
        if($importer['readonly']) {
                // We aren't receiving stuff from this person. But we will quietly ignore them
                // rather than a blatant "go away" message.
@@ -2223,7 +2240,7 @@ function local_delivery($importer,$data) {
 
        if(($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
                logger('local_delivery: Updating photo for ' . $importer['name']);
-               require_once("Photo.php");
+               require_once("include/Photo.php");
                $photo_failure = false;
                $have_photo = false;
 
@@ -2322,16 +2339,19 @@ function local_delivery($importer,$data) {
                $newloc['confirm'] = notags(unxmlify($base['confirm'][0]['data']));
                $newloc['notify'] = notags(unxmlify($base['notify'][0]['data']));
                $newloc['poll'] = notags(unxmlify($base['poll'][0]['data']));
-               $newloc['site-pubkey'] = notags(unxmlify($base['site-pubkey'][0]['data']));
+               $newloc['sitepubkey'] = notags(unxmlify($base['sitepubkey'][0]['data']));
+               /** relocated user must have original key pair */
                /*$newloc['pubkey'] = notags(unxmlify($base['pubkey'][0]['data']));
                $newloc['prvkey'] = notags(unxmlify($base['prvkey'][0]['data']));*/
                
-        log("items:relocate contact ".print_r($newloc, true), LOGGER_DEBUG);
+        logger("items:relocate contact ".print_r($newloc, true).print_r($importer, true), LOGGER_DEBUG);
         
         // update contact
-        $r = q("SELECT photo, url FROM contact WHERE WHERE id=%d AND uid=%d;",
-                    intval($importer['importer_uid']),
-                    intval($importer['id']));
+        $r = q("SELECT photo, url FROM contact WHERE id=%d AND uid=%d;",
+                    intval($importer['id']),
+                                       intval($importer['importer_uid']));
+               if ($r === false) 
+                       return 1;
         $old = $r[0];
         
         $x = q("UPDATE contact SET
@@ -2344,7 +2364,7 @@ function local_delivery($importer,$data) {
                         confirm = '%s',
                         notify = '%s',
                         poll = '%s',
-                        site-pubkey = '%s'
+                        `site-pubkey` = '%s'
                 WHERE id=%d AND uid=%d;",
                     dbesc($newloc['name']),
                     dbesc($newloc['photo']),
@@ -2355,10 +2375,12 @@ function local_delivery($importer,$data) {
                     dbesc($newloc['confirm']),
                     dbesc($newloc['notify']),
                     dbesc($newloc['poll']),
-                    dbesc($newloc['site-pubkey']),
-                    intval($importer['importer_uid']),
-                    intval($importer['id']));
-        
+                    dbesc($newloc['sitepubkey']),
+                    intval($importer['id']),
+                                       intval($importer['importer_uid']));
+
+        if ($x === false)
+                       return 1;
         // update items
         $fields = array(
             'owner-link' => array($old['url'], $newloc['url']),
@@ -2366,12 +2388,15 @@ function local_delivery($importer,$data) {
             'owner-avatar' => array($old['photo'], $newloc['photo']),
             'author-avatar' => array($old['photo'], $newloc['photo']),
         );
-        foreach ($fields as $n=>$f)
+        foreach ($fields as $n=>$f){
             $x = q("UPDATE item SET `%s`='%s' WHERE `%s`='%s' AND uid=%d",
                         $n, dbesc($f[1]),
                         $n, dbesc($f[0]),
                         intval($importer['importer_uid']));
-        
+                       if ($x === false)
+                               return 1;
+               }
+               
                // TODO
                // merge with current record, current contents have priority
                // update record, set url-updated
@@ -3280,7 +3305,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
        if(is_array($contact)) {
                if(($contact['network'] == NETWORK_OSTATUS && $contact['rel'] == CONTACT_IS_SHARING)
                        || ($sharing && $contact['rel'] == CONTACT_IS_FOLLOWER)) {
-                       $r = q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                       $r = q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
                                intval(CONTACT_IS_FRIEND),
                                intval($contact['id']),
                                intval($importer['uid'])
@@ -3345,9 +3370,9 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                                        '$sitename' => $a->config['sitename']
                                ));
                                $res = mail($r[0]['email'], 
-                                       (($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'],
+                                       email_header_encode((($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'],'UTF-8'),
                                        $email,
-                                       'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+                                       'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
                                        . 'Content-type: text/plain; charset=UTF-8' . "\n"
                                        . 'Content-transfer-encoding: 8bit' );
                        
@@ -3707,11 +3732,11 @@ function item_getfeedtags($item) {
 
 function item_getfeedattach($item) {
        $ret = '';
-       $arr = explode(',',$item['attach']);
+       $arr = explode('[/attach],',$item['attach']);
        if(count($arr)) {
                foreach($arr as $r) {
                        $matches = false;
-                       $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
+                       $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches);
                        if($cnt) {
                                $ret .= '<link rel="enclosure" href="' . xmlify($matches[1]) . '" type="' . xmlify($matches[3]) . '" ';
                                if(intval($matches[2]))
@@ -3949,10 +3974,10 @@ function drop_item($id,$interactive = true) {
 
                // send the notification upstream/downstream as the case may be
 
+               proc_run('php',"include/notifier.php","drop","$drop_id");
+
                if(! $interactive)
                        return $owner;
-
-               proc_run('php',"include/notifier.php","drop","$drop_id");
                goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
                //NOTREACHED
        }
@@ -4016,10 +4041,13 @@ function posted_dates($uid,$wall) {
 function posted_date_widget($url,$uid,$wall) {
        $o = '';
 
+       if(! feature_enabled($uid,'archives'))
+               return $o;
+
        // For former Facebook folks that left because of "timeline"
 
-       if($wall && intval(get_pconfig($uid,'system','no_wall_archive_widget')))
-               return $o;
+/*     if($wall && intval(get_pconfig($uid,'system','no_wall_archive_widget')))
+               return $o;*/
 
        $ret = posted_dates($uid,$wall);
        if(! count($ret))