]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Preloading of items in the cache when receiving them.
[friendica.git] / mod / item.php
index 7d36d7f70aca152a91646dcd4dda5065d51e63a5..452ec8a36de917d90b8f18b194895793239782b6 100644 (file)
@@ -18,7 +18,8 @@
 require_once('include/crypto.php');
 require_once('include/enotify.php');
 require_once('include/email.php');
-require_once('Text/LanguageDetect.php');
+require_once('library/langdet/Text/LanguageDetect.php');
+require_once('include/tags.php');
 
 function item_post(&$a) {
 
@@ -46,6 +47,19 @@ function item_post(&$a) {
        $return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : '');
        $preview = ((x($_REQUEST,'preview')) ? intval($_REQUEST['preview']) : 0);
 
+
+       // Check for doubly-submitted posts, and reject duplicates
+       // Note that we have to ignore previews, otherwise nothing will post
+       // after it's been previewed
+       if(!$preview && x($_REQUEST['post_id_random'])) {
+               if(x($_SESSION['post-random']) && $_SESSION['post-random'] == $_REQUEST['post_id_random']) {
+                       logger("item post: duplicate post", LOGGER_DEBUG);
+                       item_post_return($a->get_baseurl(), $api_source, $return_path);
+               }
+               else
+                       $_SESSION['post-random'] = $_REQUEST['post_id_random'];
+       }
+
        /**
         * Is this a reply to something?
         */
@@ -98,7 +112,7 @@ function item_post(&$a) {
 
                // multi-level threading - preserve the info but re-parent to our single level threading
                //if(($parid) && ($parid != $parent))
-                       $thr_parent = $parent_uri;
+               $thr_parent = $parent_uri;
 
                if($parent_item['contact-id'] && $uid) {
                        $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@@ -223,9 +237,23 @@ function item_post(&$a) {
 
                if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
                        $l = new Text_LanguageDetect;
-                       $lng = $l->detectConfidence($naked_body);
+                       //$lng = $l->detectConfidence($naked_body);
+                       //$postopts = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : '');
 
-                       $postopts = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : '');
+                       $lng = $l->detect($naked_body, 3);
+
+                       if (sizeof($lng) > 0) {
+                               $postopts = "";
+
+                               foreach ($lng as $language => $score) {
+                                       if ($postopts == "")
+                                               $postopts = "lang=";
+                                       else
+                                               $postopts .= ":";
+
+                                       $postopts .= $language.";".$score;
+                               }
+                       }
 
                        logger('mod_item: detect language' . print_r($lng,true) . $naked_body, LOGGER_DATA);
                }
@@ -296,7 +324,11 @@ function item_post(&$a) {
        // First figure out if it's a status post that would've been
        // created using tinymce. Otherwise leave it alone. 
 
-       $plaintext = (local_user() ? intval(get_pconfig(local_user(),'system','plaintext')) : 0);
+/*     $plaintext = (local_user() ? intval(get_pconfig(local_user(),'system','plaintext')) || !feature_enabled($profile_uid,'richtext') : 0);
+       if((! $parent) && (! $api_source) && (! $plaintext)) {
+               $body = fix_mce_lf($body);
+       }*/
+       $plaintext = (local_user() ? !feature_enabled($profile_uid,'richtext') : 0);
        if((! $parent) && (! $api_source) && (! $plaintext)) {
                $body = fix_mce_lf($body);
        }
@@ -654,6 +686,7 @@ function item_post(&$a) {
                        intval($post_id),
                        intval($profile_uid)
                );
+               create_tags_from_itemuri($post_id, $profile_uid);
 
                // update filetags in pconfig
                 file_tag_update_pconfig($uid,$categories_old,$categories_new,'category');
@@ -719,10 +752,20 @@ function item_post(&$a) {
        if(count($r)) {
                $post_id = $r[0]['id'];
                logger('mod_item: saved item ' . $post_id);
+               create_tags_from_item($post_id);
 
                // update filetags in pconfig
                 file_tag_update_pconfig($uid,$categories_old,$categories_new,'category');
 
+               // Store the fresh generated item into the cache
+               $cachefile = get_cachefile($datarray["guid"]."-".hash("md5", $datarray['body']));
+
+               if (($cachefile != '') AND !file_exists($cachefile)) {
+                       $s = prepare_text($datarray['body']);
+                       file_put_contents($cachefile, $s);
+                       logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile);
+               }
+
                if($parent) {
 
                        // This item is the last leaf and gets the comment box, clear any ancestors
@@ -873,30 +916,32 @@ function item_post(&$a) {
 
        logger('post_complete');
 
+       item_post_return($a->get_baseurl(), $api_source, $return_path);
+       // NOTREACHED
+}
+
+function item_post_return($baseurl, $api_source, $return_path) {
        // figure out how to return, depending on from whence we came
 
        if($api_source)
                return;
 
        if($return_path) {
-               goaway($a->get_baseurl() . "/" . $return_path);
+               goaway($baseurl . "/" . $return_path);
        }
 
        $json = array('success' => 1);
        if(x($_REQUEST,'jsreload') && strlen($_REQUEST['jsreload']))
-               $json['reload'] = $a->get_baseurl() . '/' . $_REQUEST['jsreload'];
+               $json['reload'] = $baseurl . '/' . $_REQUEST['jsreload'];
 
        logger('post_json: ' . print_r($json,true), LOGGER_DEBUG);
 
        echo json_encode($json);
        killme();
-       // NOTREACHED
 }
 
 
 
-
-
 function item_content(&$a) {
 
        if((! local_user()) && (! remote_user()))
@@ -994,7 +1039,26 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag) {
                                                intval($tagcid),
                                                intval($profile_uid)
                                );
-                       } elseif(strstr($name,'_') || strstr($name,' ')) { //no id
+                       }
+                       else {
+                               $newname = str_replace('_',' ',$name);
+
+                               //select someone from this user's contacts by name
+                               $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
+                                               dbesc($newname),
+                                               intval($profile_uid)
+                               );
+
+                               if(! $r) {
+                                       //select someone by attag or nick and the name passed in
+                                       $r = q("SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+                                                       dbesc($name),
+                                                       dbesc($name),
+                                                       intval($profile_uid)
+                                       );
+                               }
+                       }
+/*                     } elseif(strstr($name,'_') || strstr($name,' ')) { //no id
                                //get the real name
                                $newname = str_replace('_',' ',$name);
                                //select someone from this user's contacts by name
@@ -1009,7 +1073,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag) {
                                                dbesc($name),
                                                intval($profile_uid)
                                );
-                       }
+                       }*/
                        //$r is set, if someone could be selected
                        if(count($r)) {
                                $profile = $r[0]['url'];