<?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.
+
function item_post(&$a) {
if((! local_user()) && (! remote_user()))
require_once('include/security.php');
- $uid = $_SESSION['uid'];
-
+ $uid = local_user();
$parent = ((x($_POST,'parent')) ? intval($_POST['parent']) : 0);
$title = notags(trim($_POST['title']));
$body = escape_tags(trim($_POST['body']));
$location = notags(trim($_POST['location']));
+ $coord = notags(trim($_POST['coord']));
+ $verb = notags(trim($_POST['verb']));
if(! strlen($body)) {
notice( t('Empty post discarded.') . EOL );
$post_type = notags(trim($_POST['type']));
- if($post_type == 'net-comment') {
+ if($post_type === 'net-comment') {
if($parent_item !== null) {
- if($parent_item['type'] == 'remote')
+ if($parent_item['type'] === 'remote') {
$post_type = 'remote-comment';
- else
+ }
+ else {
$post_type = 'wall-comment';
+ }
}
}
+ $str_tags = '';
+ $inform = '';
+
+ $tags = get_tags($body);
+
+
+ if(count($tags)) {
+ foreach($tags as $tag) {
+ if(strpos($tag,'#') === 0) {
+ $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]';
+ continue;
+ }
+ if(strpos($tag,'@') === 0) {
+ $name = substr($tag,1);
+ if((strpos($name,'@')) || (strpos($name,'http://'))) {
+ $newname = $name;
+ $links = @lrdd($name);
+ if(count($links)) {
+ foreach($links as $link) {
+ if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
+ $profile = $link['@attributes']['href'];
+ if($link['@attributes']['rel'] === 'salmon') {
+ if(strlen($inform))
+ $inform .= ',';
+ $inform .= 'url:' . str_replace(',','%2c',$link['@attributes']['href']);
+ }
+ }
+ }
+ }
+ else {
+ $newname = $name;
+ if(strstr($name,'_')) {
+ $newname = str_replace('_',' ',$name);
+ $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($newname),
+ intval($profile_uid)
+ );
+ }
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($name),
+ intval($profile_uid)
+ );
+ }
+ if(count($r)) {
+ $profile = $r[0]['url'];
+ $newname = $r[0]['name'];
+ if(strlen($inform))
+ $inform .= ',';
+ $inform .= 'cid:' . $r[0]['id'];
+ }
+ }
+ 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]';
+ }
+ }
+ }
+ }
+
+ $wall = 0;
+ if($post_type === 'wall' || $post_type === 'wall-comment')
+ $wall = 1;
+
+ if(! strlen($verb))
+ $verb = ACTIVITY_POST ;
+
+ $gravity = (($parent) ? 6 : 0 );
+
$notify_type = (($parent) ? 'comment-new' : 'wall-new' );
$uri = item_new_uri($a->get_hostname(),$profile_uid);
- $r = q("INSERT INTO `item` (`uid`,`type`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
- `author-name`, `author-link`, `author-avatar`, `created`,
- `edited`, `changed`, `uri`, `title`, `body`, `location`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`)
- VALUES( %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
+ $r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
+ `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `location`, `coord`,
+ `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`)
+ VALUES( %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' )",
intval($profile_uid),
dbesc($post_type),
+ intval($wall),
+ intval($gravity),
intval($contact_id),
dbesc($contact_record['name']),
dbesc($contact_record['url']),
dbesc($title),
dbesc($body),
dbesc($location),
+ dbesc($coord),
+ dbesc($str_tags),
+ dbesc($inform),
+ dbesc($verb),
dbesc($str_contact_allow),
dbesc($str_group_allow),
dbesc($str_contact_deny),
dbesc($uri));
if(count($r)) {
$post_id = $r[0]['id'];
+ logger('mod_item: saved item ' . $post_id);
if($parent) {
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)) {
require_once('bbcode.php');
$from = $author['name'];
- $tpl = file_get_contents('view/cmnt_received_eml.tpl');
+ $tpl = load_view_file('view/cmnt_received_eml.tpl');
$email_tpl = replace_macros($tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
'$username' => $user['username'],
'$email' => $user['email'],
'$from' => $from,
+ '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
'$body' => strip_tags(bbcode($body))
));
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)) {
require_once('bbcode.php');
$from = $author['name'];
- $tpl = file_get_contents('view/wall_received_eml.tpl');
+ $tpl = load_view_file('view/wall_received_eml.tpl');
$email_tpl = replace_macros($tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
'$username' => $user['username'],
'$email' => $user['email'],
'$from' => $from,
+ '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
'$body' => strip_tags(bbcode($body))
));
dbesc(datetime_convert()),
intval($post_id)
);
+
// photo comments turn the corresponding item visible to the profile wall
+ // This way we don't see every picture in your new photo album posted to your wall at once.
+ // They will show up as people comment on them.
+
if(! $parent_item['visible']) {
$r = q("UPDATE `item` SET `visible` = 1 WHERE `id` = %d LIMIT 1",
intval($parent_item['id'])
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" > notify.out &",
+ logger('mod_item: notifier invoked: ' . "\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &");
+
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &",
array(),$foo));
goaway($a->get_baseurl() . "/" . $_POST['return'] );
$uid = $_SESSION['uid'];
- if(($a->argc == 3) && ($a->argv[1] == 'drop') && intval($a->argv[2])) {
+ if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
// locate item to be deleted
// send the notification upstream/downstream as the case may be
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" > drop.out &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" &",
array(), $foo));
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
else {
notice( t('Permission denied.') . EOL);
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
- return; //NOTREACHED
+ //NOTREACHED
}
}
}
\ No newline at end of file