]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Merge pull request #351 from annando/master
[friendica.git] / include / items.php
index 638a8212c849ce0c40f067b3f6bd1c1b11d0b43f..a0dd1c8159fc0a61130d7079541cba5c27960ca0 100755 (executable)
@@ -446,6 +446,8 @@ function get_atom_elements($feed,$item) {
                $res['body'] = $purifier->purify($res['body']);
 
                $res['body'] = @html2bbcode($res['body']);
+
+
        }
        elseif(! $have_real_body) {
 
@@ -814,6 +816,12 @@ function item_store($arr,$force_parent = false) {
                        if($r[0]['private'])
                                $arr['private'] = 1;
 
+                       // Edge case. We host a public forum that was originally posted to privately.
+                       // The original author commented, but as this is a comment, the permissions
+                       // weren't fixed up so it will still show the comment as private unless we fix it here. 
+
+                       if((intval($r[0]['forum_mode']) == 1) && (! $r[0]['private']))
+                               $arr['private'] = 0;
                }
                else {
 
@@ -908,6 +916,16 @@ function item_store($arr,$force_parent = false) {
                intval($current_post)
        );
 
+        $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;
+       call_hooks('post_remote_end',$arr);
+
        // update the commented timestamp on the parent
 
        q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",
@@ -1248,6 +1266,12 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
                return 3;
        }
 
+       if($contact['term-date'] != '0000-00-00 00:00:00') {
+               logger("dfrn_deliver: $url back from the dead - removing mark for death");
+               require_once('include/Contact.php');
+               unmark_for_death($contact);
+       }
+
        $res = parse_xml_string($xml);
 
        return $res->status; 
@@ -1645,7 +1669,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                                        if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {  
 
                                                // do not accept (ignore) an earlier edit than one we currently have.
-                                               if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+                                               if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
                                                        continue;
 
                                                $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
@@ -1796,7 +1820,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                                        if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {  
 
                                                // do not accept (ignore) an earlier edit than one we currently have.
-                                               if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+                                               if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
                                                        continue;
 
                                                $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
@@ -1853,13 +1877,12 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                                        $datarray['last-child'] = 1;
                                }
 
-                               if($contact['network'] === NETWORK_FEED) {
-                                       if(! strlen($contact['notify'])) {
+                               if(($contact['network'] === NETWORK_FEED) || (! strlen($contact['notify']))) {
                                                // one way feed - no remote comment ability
                                                $datarray['last-child'] = 0;
-                                       }
-                                       $datarray['private'] = 1;
                                }
+                               if($contact['network'] === NETWORK_FEED)
+                                       $datarray['private'] = 1;
 
                                // This is my contact on another system, but it's really me.
                                // Turn this into a wall post.
@@ -2288,7 +2311,7 @@ function local_delivery($importer,$data) {
                                        if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
                                        
                                                // do not accept (ignore) an earlier edit than one we currently have.
-                                               if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+                                               if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
                                                        continue;
   
                                                logger('received updated comment' , LOGGER_DEBUG);
@@ -2471,7 +2494,7 @@ function local_delivery($importer,$data) {
                                        if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {  
 
                                                // do not accept (ignore) an earlier edit than one we currently have.
-                                               if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+                                               if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
                                                        continue;
 
                                                $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
@@ -2642,7 +2665,7 @@ function local_delivery($importer,$data) {
                                if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {  
 
                                        // do not accept (ignore) an earlier edit than one we currently have.
-                                       if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+                                       if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
                                                continue;
 
                                        $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
@@ -3381,3 +3404,69 @@ function drop_item($id,$interactive = true) {
        }
        
 }
+
+
+function first_post_date($uid,$wall = false) {
+       $r = q("select id, created from item 
+               where uid = %d and wall = %d and deleted = 0 and visible = 1 AND moderated = 0 
+               and id = parent
+               order by created asc limit 1",
+               intval($uid),
+               intval($wall ? 1 : 0)
+       );
+       if(count($r)) {
+//             logger('first_post_date: ' . $r[0]['id'] . ' ' . $r[0]['created'], LOGGER_DATA);
+               return substr(datetime_convert('',date_default_timezone_get(),$r[0]['created']),0,10);
+       }
+       return false;
+}
+
+function posted_dates($uid,$wall) {
+       $dnow = datetime_convert('',date_default_timezone_get(),'now','Y-m-d');
+
+       $dthen = first_post_date($uid,$wall);
+       if(! $dthen)
+               return array();
+
+       // If it's near the end of a long month, backup to the 28th so that in 
+       // consecutive loops we'll always get a whole month difference.
+
+       if(intval(substr($dnow,8)) > 28)
+               $dnow = substr($dnow,0,8) . '28';
+       if(intval(substr($dthen,8)) > 28)
+               $dnow = substr($dthen,0,8) . '28';
+
+       $ret = array();
+       while($dnow >= $dthen) {
+               $dstart = substr($dnow,0,8) . '01';
+               $dend = substr($dnow,0,8) . get_dim(intval($dnow),intval(substr($dnow,5)));
+               $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);
+               $dnow = datetime_convert('','',$dnow . ' -1 month', 'Y-m-d');
+       }
+       return $ret;
+}
+
+
+function posted_date_widget($url,$uid,$wall) {
+       $o = '';
+
+       // For former Facebook folks that left because of "timeline"
+
+       if($wall && intval(get_pconfig($uid,'system','no_wall_archive_widget')))
+               return $o;
+
+       $ret = posted_dates($uid,$wall);
+       if(! count($ret))
+               return $o;
+
+       $o = replace_macros(get_markup_template('posted_date_widget.tpl'),array(
+               '$title' => t('Archives'),
+               '$size' => ((count($ret) > 6) ? 6 : count($ret)),
+               '$url' => $url,
+               '$dates' => $ret
+       ));
+       return $o;
+}
\ No newline at end of file