require_once('include/tags.php');
require_once('include/files.php');
require_once('include/threads.php');
+require_once('include/text.php');
+require_once('include/items.php');
function item_post(&$a) {
$uid = local_user();
if(x($_REQUEST,'dropitems')) {
- require_once('include/items.php');
$arr_drop = explode(',',$_REQUEST['dropitems']);
drop_items($arr_drop);
$json = array('success' => 1);
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
intval($parent)
);
- }
- elseif($parent_uri && local_user()) {
+ } elseif($parent_uri && local_user()) {
// This is coming from an API source, and we are logged in
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent_uri),
intval(local_user())
);
}
+
// if this isn't the real parent of the conversation, find it
if($r !== false && count($r)) {
$parid = $r[0]['parent'];
intval($parent_item['contact-id']),
intval($uid)
);
- if(count($r))
+ if(count($r)) {
$parent_contact = $r[0];
+
+ // If the contact id doesn't fit with the contact, then set the contact to null
+ $thrparent = q("SELECT `author-link`, `network` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($thr_parent));
+ if (count($thrparent) AND ($thrparent[0]["network"] === NETWORK_OSTATUS)
+ AND (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) {
+ $parent_contact = null;
+
+ require_once("include/Scrape.php");
+ $probed_contact = probe_url($thrparent[0]["author-link"]);
+ if ($probed_contact["network"] != NETWORK_FEED) {
+ $parent_contact = $probed_contact;
+ $parent_contact["nurl"] = normalise_link($probed_contact["url"]);
+ $parent_contact["thumb"] = $probed_contact["photo"];
+ $parent_contact["micro"] = $probed_contact["photo"];
+ }
+ logger('parent contact: '.print_r($parent_contact, true), LOGGER_DEBUG);
+ } else
+ logger('no contact found: '.print_r($thrparent, true), LOGGER_DEBUG);
+ }
}
}
$profile_uid = ((x($_REQUEST,'profile_uid')) ? intval($_REQUEST['profile_uid']) : 0);
$post_id = ((x($_REQUEST,'post_id')) ? intval($_REQUEST['post_id']) : 0);
$app = ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : '');
+ $extid = ((x($_REQUEST,'extid')) ? strip_tags($_REQUEST['extid']) : '');
$allow_moderated = false;
$verb = $orig_post['verb'];
$objecttype = $orig_post['object-type'];
$emailcc = $orig_post['emailcc'];
- $app = $orig_post['app'];
+ $app = $orig_post['app'];
$categories = $orig_post['file'];
$title = notags(trim($_REQUEST['title']));
$body = escape_tags(trim($_REQUEST['body']));
$pubmail_enable = $orig_post['pubmail'];
$network = $orig_post['network'];
$guid = $orig_post['guid'];
+ $extid = $orig_post['extid'];
} else {
* and we are replying, and there isn't one already
*/
- if(($parent_contact) && ($parent_contact['network'] === NETWORK_OSTATUS)
+ if(($parent_contact) && ($parent_contact['network'] === NETWORK_OSTATUS)
&& ($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) {
+ if(strpos($tag,'#') === 0)
+ continue;
+
// If we already tagged 'Robert Johnson', don't try and tag 'Robert'.
// Robert Johnson should be first in the $tags array
$datarray['commented'] = datetime_convert();
$datarray['received'] = datetime_convert();
$datarray['changed'] = datetime_convert();
+ $datarray['extid'] = $extid;
$datarray['guid'] = $guid;
$datarray['uri'] = $uri;
$datarray['title'] = $title;
if($orig_post)
$datarray['edit'] = true;
+ // Search for hashtags
+ item_body_set_hashtags($datarray);
+
// preview mode - prepare the body for display and send it via json
if($preview) {
$post_id = 0;
- $r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
+ $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
`author-name`, `author-link`, `author-avatar`, `created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`,
`tag`, `inform`, `verb`, `object-type`, `postopts`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark`,`origin`, `moderated`, `file` )
- VALUES( '%s', %d, '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, '%s' )",
+ VALUES( '%s', '%s', %d, '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, '%s' )",
dbesc($datarray['guid']),
+ dbesc($datarray['extid']),
intval($datarray['uid']),
dbesc($datarray['type']),
intval($datarray['wall']),
if(count($r)) {
$post_id = $r[0]['id'];
logger('mod_item: saved item ' . $post_id);
- add_thread($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']);
- $stamp1 = microtime(true);
- file_put_contents($cachefile, $s);
- $a->save_timestamp($stamp1, "file");
- logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile);
- }
+ put_item_in_cache($datarray);
if($parent) {
dbesc(datetime_convert()),
intval($parent)
);
- update_thread($parent);
+ if ($post_id != $parent)
+ update_thread($parent);
$datarray['id'] = $post_id;
$datarray['plink'] = $a->get_baseurl().'/display/'.urlencode($datarray['guid']);
create_tags_from_item($post_id);
create_files_from_item($post_id);
- update_thread($post_id);
+
+ if ($post_id == $parent)
+ add_thread($post_id);
// This is a real juggling act on shared hosting services which kill your processes
// e.g. dreamhost. We used to start delivery to our native delivery agents in the background
$o = '';
if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
- require_once('include/items.php');
$o = drop_item($a->argv[2], !is_ajax());
if (is_ajax()){
- // ajax return: [<item id>, 0 (no perm) | <owner id>]
+ // ajax return: [<item id>, 0 (no perm) | <owner id>]
echo json_encode(array(intval($a->argv[2]), intval($o)));
killme();
}
}
/**
- * This function removes the tag $tag from the text $body and replaces it with
- * the appropiate link.
- *
+ * This function removes the tag $tag from the text $body and replaces it with
+ * the appropiate link.
+ *
* @param unknown_type $body the text to replace the tag in
* @param unknown_type $inform a comma-seperated string containing everybody to inform
* @param unknown_type $str_tags string to add the tag to
$replaced = false;
$r = null;
- //is it a hash tag?
- if(strpos($tag,'#') === 0) {
- //if the tag is replaced...
- if(strpos($tag,'[url='))
- //...do nothing
- return $replaced;
- //base tag has the tags name only
- $basetag = str_replace('_',' ',substr($tag,1));
- //create text for link
- $newtag = '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]';
- //replace tag by the link
- $body = str_replace($tag, $newtag, $body);
- $replaced = true;
-
- //is the link already in str_tags?
- if(! stristr($str_tags,$newtag)) {
- //append or set str_tags
- if(strlen($str_tags))
- $str_tags .= ',';
- $str_tags .= $newtag;
- }
- return $replaced;
- }
//is it a person tag?
if(strpos($tag,'@') === 0) {
//is it already replaced?