$salmon = feed_salmonlinks($owner_nick);
+ $alternatelink = $owner['url'];
+
+ if(isset($category))
+ $alternatelink .= "/category/".$category;
+
$atom .= replace_macros($feed_template, array(
'$version' => xmlify(FRIENDICA_VERSION),
'$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner_nick),
'$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', 'now' , ATOM_TIME)) ,
'$hub' => $hubxml,
'$salmon' => $salmon,
+ '$alternatelink' => xmlify($alternatelink),
'$name' => xmlify($owner['name']),
'$profile_page' => xmlify($owner['url']),
'$photo' => xmlify($owner['photo']),
if($rawgeo)
$res['coord'] = unxmlify($rawgeo[0]['data']);
+ if ($contact["network"] == NETWORK_FEED) {
+ $res['verb'] = ACTIVITY_POST;
+ $res['object-type'] = ACTIVITY_OBJ_NOTE;
+ }
$rawverb = $item->get_item_tags(NAMESPACE_ACTIVITY, 'verb');
}
if (isset($contact["network"]) AND ($contact["network"] == NETWORK_FEED) AND $contact['fetch_further_information']) {
- $res["body"] = $res["title"].add_page_info($res['plink']);
+ $preview = "";
+
+ // Handle enclosures and treat them as preview picture
+ if (isset($attach))
+ foreach ($attach AS $attachment)
+ if ($attachment->type == "image/jpeg")
+ $preview = $attachment->link;
+
+ $res["body"] = $res["title"].add_page_info($res['plink'], false, $preview, ($contact['fetch_further_information'] == 2), $contact['ffi_keyword_blacklist']);
$res["title"] = "";
+ $res["object-type"] = ACTIVITY_OBJ_BOOKMARK;
+ unset($res["attach"]);
} elseif (isset($contact["network"]) AND ($contact["network"] == NETWORK_OSTATUS))
$res["body"] = add_page_info_to_body($res["body"]);
elseif (isset($contact["network"]) AND ($contact["network"] == NETWORK_FEED) AND strstr($res['plink'], ".app.net/")) {
call_hooks('parse_atom', $arr);
- //if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) {
- //if (strpos($res["body"], "RT @") !== false) {
- /*if (strpos($res["body"], "@") !== false) {
- $debugfile = tempnam("/var/www/virtual/pirati.ca/phptmp/", "item-res2-");
- file_put_contents($debugfile, serialize($arr));
- }*/
-
return $res;
}
-function add_page_info($url, $no_photos = false, $photo = "") {
- require_once("mod/parse_url.php");
- $data = parseurl_getsiteinfo($url, true);
-
- logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG);
+function add_page_info_data($data) {
+ call_hooks('page_info_data', $data);
// It maybe is a rich content, but if it does have everything that a link has,
// then treat it that way
is_string($data["text"]) AND (sizeof($data["images"]) > 0))
$data["type"] = "link";
- if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url))
- return("");
+ if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url))
+ return("");
if ($no_photos AND ($data["type"] == "photo"))
return("");
- if (($data["type"] != "photo") AND is_string($data["title"]))
- $text .= "[bookmark=".$url."]".trim($data["title"])."[/bookmark]";
+ // If the link contains BBCode stuff, make a short link out of this to avoid parsing problems
+ if (strpos($data["url"], '[') OR strpos($data["url"], ']')) {
+ require_once("include/network.php");
+ $data["url"] = short_link($data["url"]);
+ }
+
+ if (($data["type"] != "photo") AND is_string($data["title"]))
+ $text .= "[bookmark=".$data["url"]."]".trim($data["title"])."[/bookmark]";
- if (($data["type"] != "video") AND ($photo != ""))
- $text .= '[img]'.$photo.'[/img]';
- elseif (($data["type"] != "video") AND (sizeof($data["images"]) > 0)) {
- $imagedata = $data["images"][0];
- $text .= '[img]'.$imagedata["src"].'[/img]';
- }
+ if (($data["type"] != "video") AND ($photo != ""))
+ $text .= '[img]'.$photo.'[/img]';
+ elseif (($data["type"] != "video") AND (sizeof($data["images"]) > 0)) {
+ $imagedata = $data["images"][0];
+ $text .= '[img]'.$imagedata["src"].'[/img]';
+ }
+
+ if (($data["type"] != "photo") AND is_string($data["text"]))
+ $text .= "[quote]".$data["text"]."[/quote]";
+
+ $hashtags = "";
+ if (isset($data["keywords"]) AND count($data["keywords"])) {
+ $a = get_app();
+ $hashtags = "\n";
+ foreach ($data["keywords"] AS $keyword) {
+ $hashtag = str_replace(array(" ", "+", "/", ".", "#", "'"),
+ array("","", "", "", "", ""), $keyword);
+ $hashtags .= "#[url=".$a->get_baseurl()."/search?tag=".rawurlencode($hashtag)."]".$hashtag."[/url] ";
+ }
+ }
+
+ return("\n[class=type-".$data["type"]."]".$text."[/class]".$hashtags);
+}
+
+function add_page_info($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
+ require_once("mod/parse_url.php");
+
+ $data = Cache::get("parse_url:".$url);
+ if (is_null($data)){
+ $data = parseurl_getsiteinfo($url, true);
+ Cache::set("parse_url:".$url,serialize($data));
+ } else
+ $data = unserialize($data);
+
+ if ($photo != "")
+ $data["images"][0]["src"] = $photo;
+
+ logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG);
+
+ if (!$keywords AND isset($data["keywords"]))
+ unset($data["keywords"]);
+
+ if (($keyword_blacklist != "") AND isset($data["keywords"])) {
+ $list = explode(",", $keyword_blacklist);
+ foreach ($list AS $keyword) {
+ $keyword = trim($keyword);
+ $index = array_search($keyword, $data["keywords"]);
+ if ($index !== false)
+ unset($data["keywords"][$index]);
+ }
+ }
- if (($data["type"] != "photo") AND is_string($data["text"]))
- $text .= "[quote]".$data["text"]."[/quote]";
+ $text = add_page_info_data($data);
- return("\n[class=type-".$data["type"]."]".$text."[/class]");
+ return($text);
}
function add_page_info_to_body($body, $texturl = false, $no_photos = false) {
- logger('add_page_info_to_body: fetch page info for body '.$body, LOGGER_DEBUG);
+ logger('add_page_info_to_body: fetch page info for body '.$body, LOGGER_DEBUG);
- $URLSearchString = "^\[\]";
+ $URLSearchString = "^\[\]";
- // Adding these spaces is a quick hack due to my problems with regular expressions :)
- preg_match("/[^!#@]\[url\]([$URLSearchString]*)\[\/url\]/ism", " ".$body, $matches);
+ // Adding these spaces is a quick hack due to my problems with regular expressions :)
+ preg_match("/[^!#@]\[url\]([$URLSearchString]*)\[\/url\]/ism", " ".$body, $matches);
- if (!$matches)
- preg_match("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", " ".$body, $matches);
+ if (!$matches)
+ preg_match("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", " ".$body, $matches);
// Convert urls without bbcode elements
if (!$matches AND $texturl) {
preg_match("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", " ".$body, $matches);
// Yeah, a hack. I really hate regular expressions :)
- if ($matches)
- $matches[1] = $matches[2];
+ if ($matches)
+ $matches[1] = $matches[2];
}
- if ($matches)
- $body .= add_page_info($matches[1], $no_photos);
+ if ($matches)
+ $footer = add_page_info($matches[1], $no_photos);
- return $body;
+ // Remove the link from the body if the link is attached at the end of the post
+ if (isset($footer) AND (trim($footer) != "") AND (strpos($footer, $matches[1]))) {
+ $removedlink = trim(str_replace($matches[1], "", $body));
+ if (($removedlink == "") OR strstr($body, $removedlink))
+ $body = $removedlink;
+
+ $url = str_replace(array('/', '.'), array('\/', '\.'), $matches[1]);
+ $removedlink = preg_replace("/\[url\=".$url."\](.*?)\[\/url\]/ism", '', $body);
+ if (($removedlink == "") OR strstr($body, $removedlink))
+ $body = $removedlink;
+ }
+
+ // Add the page information to the bottom
+ if (isset($footer) AND (trim($footer) != ""))
+ $body .= $footer;
+
+ return $body;
}
function encode_rel_links($links) {
-function item_store($arr,$force_parent = false) {
+function item_store($arr,$force_parent = false, $notify = false) {
+
+ // If it is a posting where users should get notifications, then define it as wall posting
+ if ($notify) {
+ $arr['wall'] = 1;
+ $arr['type'] = 'wall';
+ $arr['origin'] = 1;
+ $arr['last-child'] = 1;
+ $arr['network'] = NETWORK_DFRN;
+ }
// If a Diaspora signature structure was passed in, pull it out of the
// item array and set it aside for later storage.
if (isset($arr["ostatus_conversation"])) {
$ostatus_conversation = $arr["ostatus_conversation"];
- unset($arr["ostatus_conversation"]);
+ unset($arr["ostatus_conversation"]);
}
if(x($arr, 'gravity'))
}
}
+ // If there is no guid then take the same guid that was taken before for the same uri
+ if ((trim($arr['guid']) == "") AND (trim($arr['uri']) != "")) {
+ logger('item_store: checking for an existing guid for uri '.$arr['uri'], LOGGER_DEBUG);
+ $r = q("SELECT `guid` FROM `item` WHERE `uri` = '%s' AND `guid` != '' LIMIT 1",
+ dbesc(trim($arr['uri']))
+ );
+
+ if(count($r)) {
+ $arr['guid'] = $r[0]["guid"];
+ logger('item_store: found guid '.$arr['guid'].' for uri '.$arr['uri'], LOGGER_DEBUG);
+ }
+ }
+
// Shouldn't happen but we want to make absolutely sure it doesn't leak from a plugin.
// Deactivated, since the bbcode parser can handle with it - and it destroys posts with some smileys that contain "<"
//if((strpos($arr['body'],'<') !== false) || (strpos($arr['body'],'>') !== false))
$arr['attach'] = ((x($arr,'attach')) ? notags(trim($arr['attach'])) : '');
$arr['app'] = ((x($arr,'app')) ? notags(trim($arr['app'])) : '');
$arr['origin'] = ((x($arr,'origin')) ? intval($arr['origin']) : 0 );
- $arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid());
+ $arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(30));
$arr['network'] = ((x($arr,'network')) ? trim($arr['network']) : '');
+ $arr['postopts'] = ((x($arr,'postopts')) ? trim($arr['postopts']) : '');
+ $arr['resource-id'] = ((x($arr,'resource-id')) ? trim($arr['resource-id']) : '');
+ $arr['event-id'] = ((x($arr,'event-id')) ? intval($arr['event-id']) : 0 );
+ $arr['inform'] = ((x($arr,'inform')) ? trim($arr['inform']) : '');
+ $arr['file'] = ((x($arr,'file')) ? trim($arr['file']) : '');
+
+ if ($arr['plink'] == "") {
+ $a = get_app();
+ $arr['plink'] = $a->get_baseurl().'/display/'.urlencode($arr['guid']);
+ }
if ($arr['network'] == "") {
$r = q("SELECT `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
$allow_gid = $arr['allow_gid'];
$deny_cid = $arr['deny_cid'];
$deny_gid = $arr['deny_gid'];
+ $notify_type = 'wall-new';
}
else {
$deny_cid = $r[0]['deny_cid'];
$deny_gid = $r[0]['deny_gid'];
$arr['wall'] = $r[0]['wall'];
+ $notify_type = 'comment-new';
// if the parent is private, force privacy for the entire conversation
// This differs from the above settings as it subtly allows comments from
if(count($r)) {
logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
$u = q("SELECT * FROM user WHERE uid = %d LIMIT 1",
- intval($arr['uid']));
+ intval($arr['uid']));
$item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d",
intval($current_post),
'to_email' => $u[0]['email'],
'uid' => $u[0]['uid'],
'item' => $item[0],
- 'link' => $a->get_baseurl().'/display/'.$u[0]['nickname'].'/'.$current_post,
+ 'link' => $a->get_baseurl().'/display/'.urlencode($arr['guid']),
'source_name' => $item[0]['author-name'],
'source_link' => $item[0]['author-link'],
'source_photo' => $item[0]['author-avatar'],
if((! $parent_id) || ($arr['parent-uri'] === $arr['uri']))
$parent_id = $current_post;
- if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid))
+ if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid))
$private = 1;
else
$private = $arr['private'];
if ($ostatus_conversation)
complete_conversation($current_post, $ostatus_conversation);
- $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;
+ $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;
// update the commented timestamp on the parent
if (!$deleted) {
// Store the fresh generated item into the cache
- $cachefile = get_cachefile($arr["guid"]."-".hash("md5", $arr['body']));
+ $cachefile = get_cachefile(urlencode($arr["guid"])."-".hash("md5", $arr['body']));
if (($cachefile != '') AND !file_exists($cachefile)) {
$s = prepare_text($arr['body']);
create_tags_from_item($current_post);
create_files_from_item($current_post);
+ if ($notify)
+ proc_run('php', "include/notifier.php", $notify_type, $current_post);
+
return $current_post;
}
+
+function get_item_guid($id) {
+ $r = q("SELECT `guid` FROM `item` WHERE `id` = %d LIMIT 1", intval($id));
+ if (count($r))
+ return($r[0]["guid"]);
+ else
+ return("");
+}
+
+function get_item_id($guid, $uid = 0) {
+
+ $nick = "";
+ $id = 0;
+
+ if ($uid == 0)
+ $uid == local_user();
+
+ // Does the given user have this item?
+ if ($uid) {
+ $r = q("SELECT `item`.`id`, `user`.`nickname` FROM `item` INNER JOIN `user` ON `user`.`uid` = `item`.`uid`
+ WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
+ AND `item`.`guid` = '%s' AND `item`.`uid` = %d", dbesc($guid), intval($uid));
+ if (count($r)) {
+ $id = $r[0]["id"];
+ $nick = $r[0]["nickname"];
+ }
+ }
+
+ // Or is it anywhere on the server?
+ if ($nick == "") {
+ $r = q("SELECT `item`.`id`, `user`.`nickname` FROM `item` INNER JOIN `user` ON `user`.`uid` = `item`.`uid`
+ WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
+ AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = ''
+ AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
+ AND `item`.`private` = 0 AND `item`.`wall` = 1
+ AND `item`.`guid` = '%s'", dbesc($guid));
+ if (count($r)) {
+ $id = $r[0]["id"];
+ $nick = $r[0]["nickname"];
+ }
+ }
+ return(array("nick" => $nick, "id" => $id));
+}
+
// return - test
function get_item_contact($item,$contacts) {
if(! count($contacts) || (! is_array($item)))
'to_email' => $u[0]['email'],
'uid' => $u[0]['uid'],
'item' => $item,
- 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'],
+ 'link' => $a->get_baseurl() . '/display/'.urlencode(get_item_guid($item['id'])),
'source_name' => $item['author-name'],
'source_link' => $item['author-link'],
'source_photo' => $photo,
'verb' => ACTIVITY_TAG,
- 'otype' => 'item'
+ 'otype' => 'item',
+ 'parent' => $item['parent']
));
*/
function edited_timestamp_is_newer($existing, $update) {
if (!x($existing,'edited') || !$existing['edited']) {
- return true;
+ return true;
}
if (!x($update,'edited') || !$update['edited']) {
- return false;
+ return false;
}
$existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']);
$update_edited = datetime_convert('UTC', 'UTC', $update['edited']);
function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) {
require_once('library/simplepie/simplepie.inc');
+ require_once('include/contact_selectors.php');
if(! strlen($xml)) {
logger('consume_feed: empty input');
}
if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) {
- logger('consume_feed: Updating photo for ' . $contact['name']);
+ logger('consume_feed: Updating photo for '.$contact['name'].' from '.$photo_url.' uid: '.$contact['uid']);
require_once("include/Photo.php");
$photo_failure = false;
$have_photo = false;
$r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`)
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
intval($contact['uid']),
- intval($contact['id']),
+ intval($contact['id']),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert('UTC','UTC', $birthday)),
logger('consume_feed: feed item count = ' . $feed->get_item_quantity());
- // in inverse date order
+ // in inverse date order
if ($datedir)
$items = array_reverse($feed->get_items());
else
if($contact['network'] === NETWORK_FEED)
$datarray['private'] = 2;
- // This is my contact on another system, but it's really me.
- // Turn this into a wall post.
-
- if($contact['remote_self']) {
- $datarray['wall'] = 1;
- if($contact['network'] === NETWORK_FEED) {
- $datarray['private'] = 0;
- }
- }
-
$datarray['parent-uri'] = $item_id;
$datarray['uid'] = $importer['uid'];
$datarray['contact-id'] = $contact['id'];
if(($contact['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['uid'],$datarray)))
continue;
+ // This is my contact on another system, but it's really me.
+ // Turn this into a wall post.
+ $notify = item_is_remote_self($contact, $datarray);
- $r = item_store($datarray);
+ $r = item_store($datarray, false, $notify);
+ logger('Stored - Contact '.$contact['url'].' Notify '.$notify.' return '.$r.' Item '.print_r($datarray, true), LOGGER_DEBUG);
continue;
}
}
}
+function item_is_remote_self($contact, &$datarray) {
+ $a = get_app();
+
+ if (!$contact['remote_self'])
+ return false;
+
+ // Prevent the forwarding of posts that are forwarded
+ if ($datarray["extid"] == NETWORK_DFRN)
+ return false;
+
+ // Prevent to forward already forwarded posts
+ if ($datarray["app"] == $a->get_hostname())
+ return false;
+
+ if (($contact['network'] != NETWORK_FEED) AND $datarray['private'])
+ return false;
+
+ $datarray2 = $datarray;
+ logger('remote-self start - Contact '.$contact['url'].' - '.$contact['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
+ if ($contact['remote_self'] == 2) {
+ $r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`",
+ intval($contact['uid']));
+ if (count($r)) {
+ $datarray['contact-id'] = $r[0]["id"];
+
+ $datarray['owner-name'] = $r[0]["name"];
+ $datarray['owner-link'] = $r[0]["url"];
+ $datarray['owner-avatar'] = $r[0]["avatar"];
+
+ $datarray['author-name'] = $datarray['owner-name'];
+ $datarray['author-link'] = $datarray['owner-link'];
+ $datarray['author-avatar'] = $datarray['owner-avatar'];
+ }
+
+ if ($contact['network'] != NETWORK_FEED) {
+ $datarray["guid"] = get_guid(32);
+ unset($datarray["plink"]);
+ $datarray["uri"] = item_new_uri($a->get_hostname(),$contact['uid']);
+ $datarray["parent-uri"] = $datarray["uri"];
+ $datarray["extid"] = $contact['network'];
+ $urlpart = parse_url($datarray2['author-link']);
+ $datarray["app"] = $urlpart["host"];
+ } else
+ $datarray['private'] = 0;
+ }
+
+ //if (!isset($datarray["app"]) OR ($datarray["app"] == ""))
+ // $datarray["app"] = network_to_name($contact['network']);
+
+ if ($contact['network'] != NETWORK_FEED) {
+ // Store the original post
+ $r = item_store($datarray2, false, false);
+ logger('remote-self post original item - Contact '.$contact['url'].' return '.$r.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
+ } else
+ $datarray["app"] = "Feed";
+
+ return true;
+}
+
function local_delivery($importer,$data) {
$a = get_app();
- logger(__function__, LOGGER_TRACE);
+ logger(__function__, LOGGER_TRACE);
if($importer['readonly']) {
// We aren't receiving stuff from this person. But we will quietly ignore them
'to_email' => $importer['email'],
'uid' => $importer['importer_uid'],
'item' => $datarray,
- 'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
+ 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($posted_id)),
'source_name' => stripslashes($datarray['author-name']),
'source_link' => $datarray['author-link'],
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
'to_email' => $importer['email'],
'uid' => $importer['importer_uid'],
'item' => $datarray,
- 'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
+ 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($posted_id)),
'source_name' => stripslashes($datarray['author-name']),
'source_link' => $datarray['author-link'],
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
continue;
}
- // This is my contact on another system, but it's really me.
- // Turn this into a wall post.
-
- if($importer['remote_self'])
- $datarray['wall'] = 1;
-
$datarray['parent-uri'] = $item_id;
$datarray['uid'] = $importer['importer_uid'];
$datarray['contact-id'] = $importer['id'];
if(($importer['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['importer_uid'],$datarray)))
continue;
- $posted_id = item_store($datarray);
+ // This is my contact on another system, but it's really me.
+ // Turn this into a wall post.
+ $notify = item_is_remote_self($importer, $datarray);
+
+ $posted_id = item_store($datarray, false, $notify);
if(stristr($datarray['verb'],ACTIVITY_POKE)) {
$verb = urldecode(substr($datarray['verb'],strpos($datarray['verb'],'#')+1));
$links = parse_xml_string("<links>".unxmlify($xo->link)."</links>",false);
- foreach($links->link as $l) {
- $atts = $l->attributes();
- switch($atts['rel']) {
- case "alternate":
+ foreach($links->link as $l) {
+ $atts = $l->attributes();
+ switch($atts['rel']) {
+ case "alternate":
$Blink = $atts['href'];
break;
default:
break;
- }
- }
+ }
+ }
if($Blink && link_compare($Blink,$a->get_baseurl() . '/profile/' . $importer['nickname'])) {
// send a notification
'to_email' => $importer['email'],
'uid' => $importer['importer_uid'],
'item' => $datarray,
- 'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
+ 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($posted_id)),
'source_name' => stripslashes($datarray['author-name']),
'source_link' => $datarray['author-link'],
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
dbesc(datetime_convert())
);
}
+
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
intval($importer['uid'])
);
group_add_member($r[0]['uid'],'',$contact_record['id'],$r[0]['def_gid']);
}
- if(($r[0]['notify-flags'] & NOTIFY_INTRO) && ($r[0]['page-flags'] == PAGE_NORMAL)) {
- $email_tpl = get_intltext_template('follow_notify_eml.tpl');
- $email = replace_macros($email_tpl, array(
- '$requestor' => ((strlen($name)) ? $name : t('[Name Withheld]')),
- '$url' => $url,
- '$myname' => $r[0]['username'],
- '$siteurl' => $a->get_baseurl(),
- '$sitename' => $a->config['sitename']
+ if(($r[0]['notify-flags'] & NOTIFY_INTRO) &&
+ (($r[0]['page-flags'] == PAGE_NORMAL) OR ($r[0]['page-flags'] == PAGE_SOAPBOX))) {
+
+
+
+ notification(array(
+ 'type' => NOTIFY_INTRO,
+ 'notify_flags' => $r[0]['notify-flags'],
+ 'language' => $r[0]['language'],
+ 'to_name' => $r[0]['username'],
+ 'to_email' => $r[0]['email'],
+ 'uid' => $r[0]['uid'],
+ 'link' => $a->get_baseurl() . '/notifications/intro',
+ 'source_name' => ((strlen(stripslashes($contact_record['name']))) ? stripslashes($contact_record['name']) : t('[Name Withheld]')),
+ 'source_link' => $contact_record['url'],
+ 'source_photo' => $contact_record['photo'],
+ 'verb' => ($sharing ? ACTIVITY_FRIEND : ACTIVITY_FOLLOW),
+ 'otype' => 'intro'
));
- $res = mail($r[0]['email'],
- 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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
- . 'Content-type: text/plain; charset=UTF-8' . "\n"
- . 'Content-transfer-encoding: 8bit' );
+
}
}
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';
+ // Set the start and end date to the beginning of the month
+ $dnow = substr($dnow,0,8).'01';
+ $dthen = substr($dthen,0,8).'01';
$ret = array();
// Starting with the current month, get the first and last days of every
$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);
+ $ret[] = array($str,$end_month,$start_month);
$dnow = datetime_convert('','',$dnow . ' -1 month', 'Y-m-d');
}
return $ret;