*/
require_once('include/crypto.php');
+require_once('include/enotify.php');
function item_post(&$a) {
$parid = 0;
$r = false;
+ $preview = ((x($_POST,'preview')) ? intval($_POST['preview']) : 0);
+
if($parent || $parent_uri) {
if(! x($_POST,'type'))
);
if(count($r))
$user = $r[0];
-
+
if($orig_post) {
$str_group_allow = $orig_post['allow_gid'];
$str_contact_allow = $orig_post['allow_cid'];
}
}
+ if(($api_source)
+ && (! array_key_exists('allow_cid',$_REQUEST))
+ && (! array_key_exists('allow_gid',$_REQUEST))
+ && (! array_key_exists('deny_cid',$_REQUEST))
+ && (! array_key_exists('deny_gid',$_REQUEST))) {
+ $str_group_allow = $user['allow_gid'];
+ $str_contact_allow = $user['allow_cid'];
+ $str_group_deny = $user['deny_gid'];
+ $str_contact_deny = $user['deny_cid'];
+ }
+
+
// get contact info for poster
$author = null;
$match = null;
- if(preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match)) {
+ if((! $preview) && preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match)) {
$images = $match[1];
if(count($images)) {
foreach($images as $image) {
$match = false;
- if(preg_match_all("/\[attachment\](.*?)\[\/attachment\]/",$body,$match)) {
+ if((! $preview) && preg_match_all("/\[attachment\](.*?)\[\/attachment\]/",$body,$match)) {
$attaches = $match[1];
if(count($attaches)) {
foreach($attaches as $attach) {
}
}
- // embedded bookmark in post? convert to regular url and set bookmark flag
+ // embedded bookmark in post? set bookmark flag
$bookmark = 0;
- if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match)) {
+ if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match,PREG_SET_ORDER)) {
$bookmark = 1;
- $body = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$body);
}
+ $body = bb_translate_video($body);
/**
* Fold multi-line [code] sequences
if(count($tags)) {
foreach($tags as $tag) {
+
if(isset($profile))
unset($profile);
if(strpos($tag,'#') === 0) {
continue;
$basetag = str_replace('_',' ',substr($tag,1));
$body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?search=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body);
- if(strlen($str_tags))
- $str_tags .= ',';
- $str_tags .= '#[url=' . $a->get_baseurl() . '/search?search=' . rawurlencode($basetag) . ']' . $basetag . '[/url]';
+
+ $newtag = '#[url=' . $a->get_baseurl() . '/search?search=' . rawurlencode($basetag) . ']' . $basetag . '[/url]';
+ if(! stristr($str_tags,$newtag)) {
+ if(strlen($str_tags))
+ $str_tags .= ',';
+ $str_tags .= $newtag;
+ }
continue;
}
if(strpos($tag,'@') === 0) {
else {
$newname = $name;
$alias = '';
- if(strstr($name,'_') || strstr($name,' ')) {
+ $tagcid = 0;
+ if(strrpos($newname,'+')) {
+ $tagcid = intval(substr($newname,strrpos($newname,'+') + 1));
+ if(strpos($name,' '))
+ $name = substr($name,0,strpos($name,' '));
+ }
+ if($tagcid) {
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($tagcid),
+ intval($profile_uid)
+ );
+ }
+ elseif(strstr($name,'_') || strstr($name,' ')) {
$newname = str_replace('_',' ',$name);
$r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
dbesc($newname),
if($profile) {
$body = str_replace('@' . $name, '@' . '[url=' . $profile . ']' . $newname . '[/url]', $body);
$profile = str_replace(',','%2c',$profile);
- if(strlen($str_tags))
- $str_tags .= ',';
- $str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]';
+ $newtag = '@[url=' . $profile . ']' . $newname . '[/url]';
+ if(! stristr($str_tags,$newtag)) {
+ if(strlen($str_tags))
+ $str_tags .= ',';
+ $str_tags .= $newtag;
+ }
// Status.Net seems to require the numeric ID URL in a mention if the person isn't
// subscribed to you. But the nickname URL is OK if they are. Grrr. We'll tag both.
if(strlen($alias)) {
- if(strlen($str_tags))
- $str_tags .= ',';
- $str_tags .= '@[url=' . $alias . ']' . $newname . '[/url]';
+ $newtag = '@[url=' . $alias . ']' . $newname . '[/url]';
+ if(! stristr($str_tags,$newtag)) {
+ if(strlen($str_tags))
+ $str_tags .= ',';
+ $str_tags .= $newtag;
+ }
}
}
}
$verb = ACTIVITY_POST ;
$gravity = (($parent) ? 6 : 0 );
-
+
+ // even if the post arrived via API we are considering that it
+ // originated on this site by default for determining relayability.
+
+ $origin = ((x($_REQUEST,'origin')) ? intval($_REQUEST['origin']) : 1);
+
$notify_type = (($parent) ? 'comment-new' : 'wall-new' );
$uri = item_new_uri($a->get_hostname(),$profile_uid);
$datarray['attach'] = $attachments;
$datarray['bookmark'] = intval($bookmark);
$datarray['thr-parent'] = $thr_parent;
+ $datarray['postopts'] = '';
+ $datarray['origin'] = $origin;
/**
* These fields are for the convenience of plugins...
$datarray['parent'] = $parent;
$datarray['self'] = $self;
- $datarray['prvnets'] = $user['prvnets'];
+// $datarray['prvnets'] = $user['prvnets'];
if($orig_post)
$datarray['edit'] = true;
else
$datarray['guid'] = get_guid();
+ // preview mode - prepare the body for display and send it via json
+
+ if($preview) {
+ require_once('include/conversation.php');
+ $o = conversation(&$a,array(array_merge($contact_record,$datarray)),'search',false,true);
+ echo json_encode(array('preview' => $o));
+ killme();
+ }
+
call_hooks('post_local',$datarray);
$r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`,`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`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark` )
- VALUES( '%s', %d, '%s', %d, %d, %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', %d, %d, '%s', %d )",
+ `tag`, `inform`, `verb`, `postopts`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark`,`origin` )
+ VALUES( '%s', %d, '%s', %d, %d, %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', %d, %d, '%s', %d, %d )",
dbesc($datarray['guid']),
intval($datarray['uid']),
dbesc($datarray['type']),
dbesc($datarray['tag']),
dbesc($datarray['inform']),
dbesc($datarray['verb']),
+ dbesc($datarray['postopts']),
dbesc($datarray['allow_cid']),
dbesc($datarray['allow_gid']),
dbesc($datarray['deny_cid']),
intval($datarray['private']),
intval($datarray['pubmail']),
dbesc($datarray['attach']),
- intval($datarray['bookmark'])
+ intval($datarray['bookmark']),
+ intval($datarray['origin'])
);
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1",
intval($post_id)
);
- // Send a notification email to the conversation owner, unless the owner is me and I wrote this item
- if(($user['notify-flags'] & NOTIFY_COMMENT) && ($contact_record != $author)) {
- push_lang($user['language']);
- require_once('bbcode.php');
- $from = $author['name'];
-
- // name of the automated email sender
- $msg['notificationfromname'] = stripslashes($datarray['author-name']);;
- // noreply address to send from
- $msg['notificationfromemail'] = t('noreply') . '@' . $a->get_hostname();
-
- // text version
- // process the message body to display properly in text mode
- $msg['textversion']
- = html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8');
-
- // html version
- // process the message body to display properly in text mode
- $msg['htmlversion']
- = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
-
- // load the template for private message notifications
- $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
- $email_html_body_tpl = replace_macros($tpl,array(
- '$username' => $user['username'],
- '$sitename' => $a->config['sitename'], // name of this site
- '$siteurl' => $a->get_baseurl(), // descriptive url of this site
- '$thumb' => $author['thumb'], // thumbnail url for sender icon
- '$email' => $importer['email'], // email address to send to
- '$url' => $author['url'], // full url for the site
- '$from' => $from, // name of the person sending the message
- '$body' => $msg['htmlversion'], // html version of the message
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
+ if($contact_record != $author) {
+ notification(array(
+ 'type' => NOTIFY_COMMENT,
+ 'notify_flags' => $user['notify-flags'],
+ 'language' => $user['language'],
+ 'to_name' => $user['username'],
+ 'to_email' => $user['email'],
+ 'item' => $datarray,
+ 'link' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
+ 'source_name' => $datarray['author-name'],
+ 'source_link' => $datarray['author-link'],
+ 'source_photo' => $datarray['author-avatar'],
+ 'verb' => ACTIVITY_POST,
+ 'otype' => 'item'
));
- // load the template for private message notifications
- $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
- $email_text_body_tpl = replace_macros($tpl,array(
- '$username' => $user['username'],
- '$sitename' => $a->config['sitename'], // name of this site
- '$siteurl' => $a->get_baseurl(), // descriptive url of this site
- '$thumb' => $author['thumb'], // thumbnail url for sender icon
- '$email' => $importer['email'], // email address to send to
- '$url' => $author['url'], // profile url for the author
- '$from' => $from, // name of the person sending the message
- '$body' => $msg['textversion'], // text version of the message
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
- ));
-
- // use the EmailNotification library to send the message
- require_once("include/EmailNotification.php");
- EmailNotification::sendTextHtmlEmail(
- $msg['notificationfromname'],
- t("Administrator@") . $a->get_hostname(),
- t("noreply") . '@' . $a->get_hostname(),
- $user['email'],
- sprintf( t('%s commented on an item at %s'), $from , $a->config['sitename']),
- $email_html_body_tpl,
- $email_text_body_tpl
- );
-
- pop_lang();
}
// We won't be able to sign Diaspora comments for authenticated visitors - we don't have their private key
else
$signed_text = $datarray['guid'] . ';' . $parent_item['guid'] . ';' . $signed_body . ';' . $myaddr;
- $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha'));
+ $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha256'));
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($post_id),
else {
$parent = $post_id;
- // let me know if somebody did a wall-to-wall post on my profile
-
- if(($user['notify-flags'] & NOTIFY_WALL) && ($contact_record != $author)) {
- push_lang($user['language']);
- require_once('bbcode.php');
- $from = $author['name'];
-
- // name of the automated email sender
- $msg['notificationfromname'] = $from;
- // noreply address to send from
- $msg['notificationfromemail'] = t('noreply') . '@' . $a->get_hostname();
-
- // text version
- // process the message body to display properly in text mode
- $msg['textversion']
- = html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8');
-
- // html version
- // process the message body to display properly in text mode
- $msg['htmlversion']
- = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
-
- // load the template for private message notifications
- $tpl = load_view_file('view/wall_received_html_body_eml.tpl');
- $email_html_body_tpl = replace_macros($tpl,array(
- '$username' => $user['username'],
- '$sitename' => $a->config['sitename'], // name of this site
- '$siteurl' => $a->get_baseurl(), // descriptive url of this site
- '$thumb' => $author['thumb'], // thumbnail url for sender icon
- '$url' => $author['url'], // full url for the site
- '$from' => $from, // name of the person sending the message
- '$body' => $msg['htmlversion'], // html version of the message
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
+ if($contact_record != $author) {
+ notification(array(
+ 'type' => NOTIFY_WALL,
+ 'notify_flags' => $user['notify-flags'],
+ 'language' => $user['language'],
+ 'to_name' => $user['username'],
+ 'to_email' => $user['email'],
+ 'item' => $datarray,
+ 'link' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
+ 'source_name' => $datarray['author-name'],
+ 'source_link' => $datarray['author-link'],
+ 'source_photo' => $datarray['author-avatar'],
+ 'verb' => ACTIVITY_POST,
+ 'otype' => 'item'
));
-
- // load the template for private message notifications
- $tpl = load_view_file('view/wall_received_text_body_eml.tpl');
- $email_text_body_tpl = replace_macros($tpl,array(
- '$username' => $user['username'],
- '$sitename' => $a->config['sitename'], // name of this site
- '$siteurl' => $a->get_baseurl(), // descriptive url of this site
- '$thumb' => $author['thumb'], // thumbnail url for sender icon
- '$url' => $author['url'], // full url for the site
- '$from' => $from, // name of the person sending the message
- '$body' => $msg['textversion'], // text version of the message
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
- ));
-
- // use the EmailNotification library to send the message
- require_once("include/EmailNotification.php");
- EmailNotification::sendTextHtmlEmail(
- $msg['notificationfromname'],
- t("Administrator@") . $a->get_hostname(),
- t("noreply") . '@' . $a->get_hostname(),
- $user['email'],
- sprintf( t('%s posted to your profile wall at %s') , $from , $a->config['sitename']),
- $email_html_body_tpl,
- $email_text_body_tpl
- );
- pop_lang();
}
}
$addr = trim($recip);
if(! strlen($addr))
continue;
- $disclaimer = '<hr />' . sprintf( t('This message was sent to you by %s, a member of the Friendika social network.'),$a->user['username'])
+ $disclaimer = '<hr />' . sprintf( t('This message was sent to you by %s, a member of the Friendica social network.'),$a->user['username'])
. '<br />';
$disclaimer .= sprintf( t('You may visit them online at %s'), $a->get_baseurl() . '/profile/' . $a->user['nickname']) . EOL;
$disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL;
- $subject = '[Friendika]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']);
+ $subject = '[Friendica]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']);
$headers = 'From: ' . $a->user['username'] . ' <' . $a->user['email'] . '>' . "\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";