]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Merge commit 'mike/master'
[friendica.git] / mod / item.php
index 7125ae1f49c8c61e7cbb762d2068be22a4c1dc1c..8c6b181c0d557dfdbd4631e45fb09359d0375877 100644 (file)
@@ -1,11 +1,17 @@
 <?php
 
-// This is the POST destination for most all locally posted
-// text stuff. This function handles status, wall-to-wall status, 
-// local comments, and remote coments - that are posted on this site 
-// (as opposed to being delivered in a feed).
-// All of these become an "item" which is our basic unit of 
-// information. 
+/**
+ *
+ * This is the POST destination for most all locally posted
+ * text stuff. This function handles status, wall-to-wall status, 
+ * local comments, and remote coments - that are posted on this site 
+ * (as opposed to being delivered in a feed).
+ * All of these become an "item" which is our basic unit of 
+ * information.
+ * Posts that originate externally or do not fall into the above 
+ * posting categories go through item_store() instead of this function. 
+ *
+ */  
 
 function item_post(&$a) {
 
@@ -16,9 +22,12 @@ function item_post(&$a) {
 
        $uid = local_user();
 
+       call_hooks('post_local_start', $_POST);
+
        $parent = ((x($_POST,'parent')) ? intval($_POST['parent']) : 0);
 
        $parent_item = null;
+       $parent_contact = null;
 
        if($parent) {
                $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
@@ -26,9 +35,19 @@ function item_post(&$a) {
                );
                if(! count($r)) {
                        notice( t('Unable to locate original post.') . EOL);
-                       goaway($a->get_baseurl() . "/" . $_POST['return'] );
+                       if(x($_POST,'return')) 
+                               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+                       killme();
                }
                $parent_item = $r[0];
+               if($parent_item['contact-id'] && $uid) {
+                       $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                               intval($parent_item['contact-id']),
+                               intval($uid)
+                       );
+                       if(count($r))
+                               $parent_contact = $r[0];
+               }
        }
 
        $profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0);
@@ -36,7 +55,9 @@ function item_post(&$a) {
 
        if(! can_write_wall($a,$profile_uid)) {
                notice( t('Permission denied.') . EOL) ;
-               return;
+               if(x($_POST,'return')) 
+                       goaway($a->get_baseurl() . "/" . $_POST['return'] );
+               killme();
        }
 
        $user = null;
@@ -75,8 +96,9 @@ function item_post(&$a) {
 
        if(! strlen($body)) {
                notice( t('Empty post discarded.') . EOL );
-               goaway($a->get_baseurl() . "/" . $_POST['return'] );
-
+               if(x($_POST,'return')) 
+                       goaway($a->get_baseurl() . "/" . $_POST['return'] );
+               killme();
        }
 
        // get contact info for poster
@@ -179,8 +201,13 @@ function item_post(&$a) {
        $str_tags = '';
        $inform   = '';
 
+
        $tags = get_tags($body);
 
+       if(($parent_contact) && ($parent_contact['network'] === 'stat') && ($parent_contact['nick']) && (! in_array('@' . $parent_contact['nick'],$tags))) {
+               $body = '@' . $parent_contact['nick'] . ' ' . $body;
+               $tags[] = '@' . $parent_contact['nick'];
+       }               
 
        if(count($tags)) {
                foreach($tags as $tag) {
@@ -193,6 +220,7 @@ function item_post(&$a) {
                                continue;
                        }
                        if(strpos($tag,'@') === 0) {
+                               $stat = false;
                                $name = substr($tag,1);
                                if((strpos($name,'@')) || (strpos($name,'http://'))) {
                                        $newname = $name;
@@ -226,7 +254,12 @@ function item_post(&$a) {
                                        }
                                        if(count($r)) {
                                                $profile = $r[0]['url'];
-                                               $newname = $r[0]['name'];
+                                               if($r[0]['network'] === 'stat') {
+                                                       $newname = $r[0]['nick'];
+                                                       $stat = true;
+                                               }
+                                               else
+                                                       $newname = $r[0]['name'];
                                                if(strlen($inform))
                                                        $inform .= ',';
                                                $inform .= 'cid:' . $r[0]['id'];
@@ -243,6 +276,8 @@ function item_post(&$a) {
                }
        }
 
+
+
        $wall = 0;
        if($post_type === 'wall' || $post_type === 'wall-comment')
                $wall = 1;
@@ -399,10 +434,11 @@ function item_post(&$a) {
                        }
                }
 
-               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1
+               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `plink` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1
                        WHERE `id` = %d LIMIT 1",
                        intval($parent),
                        dbesc(($parent == $post_id) ? $uri : $parent_item['uri']),
+                       dbesc($a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id),
                        dbesc(datetime_convert()),
                        intval($post_id)
                );
@@ -417,6 +453,12 @@ function item_post(&$a) {
                        );
                }
        }
+       else {
+               logger('mod_item: unable to retrieve post that was just stored.');
+               notify( t('System error. Post not saved.'));
+               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+               // NOTREACHED
+       }
 
        $php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
 
@@ -454,10 +496,20 @@ function item_post(&$a) {
                }
        }
 
+       logger('post_complete');
+       if((x($_POST,'return')) && strlen($_POST['return'])) {
+               logger('return: ' . $_POST['return']);
+               goaway($a->get_baseurl() . "/" . $_POST['return'] );
+       }
+       $json = array('success' => 1);
+       if(x($_POST,'jsreload') && strlen($_POST['jsreload']))
+               $json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload'];
 
+       logger('post_json: ' . print_r($json,true), LOGGER_DEBUG);
 
-       goaway($a->get_baseurl() . "/" . $_POST['return'] );
-       return; // NOTREACHED
+       echo json_encode($json);
+       killme();
+       // NOTREACHED
 }
 
 
@@ -505,7 +557,7 @@ function item_content(&$a) {
                        // generate a resource-id and therefore aren't intimately linked to the item. 
 
                        if(strlen($item['resource-id'])) {
-                               $q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ",
+                               q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ",
                                        dbesc($item['resource-id']),
                                        intval($item['uid'])
                                );
@@ -551,7 +603,7 @@ function item_content(&$a) {
                        proc_run($php_path,"include/notifier.php","drop","$drop_id");
 
                        goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
-                       return; //NOTREACHED
+                       //NOTREACHED
                }
                else {
                        notice( t('Permission denied.') . EOL);