621 lines
18 KiB
PHP
621 lines
18 KiB
PHP
<?php
|
|
|
|
require_once('include/acl_selectors.php');
|
|
require_once('include/message.php');
|
|
require_once('include/Smilies.php');
|
|
|
|
function message_init(&$a) {
|
|
|
|
$tabs = '';
|
|
|
|
if ($a->argc >1 && is_numeric($a->argv[1])) {
|
|
$tabs = render_messages(get_messages(local_user(),0,5), 'mail_list.tpl');
|
|
}
|
|
|
|
$new = array(
|
|
'label' => t('New Message'),
|
|
'url' => 'message/new',
|
|
'sel'=> ($a->argv[1] == 'new'),
|
|
'accesskey' => 'm',
|
|
);
|
|
|
|
$tpl = get_markup_template('message_side.tpl');
|
|
$a->page['aside'] = replace_macros($tpl, array(
|
|
'$tabs'=>$tabs,
|
|
'$new'=>$new,
|
|
));
|
|
$base = $a->get_baseurl();
|
|
|
|
$head_tpl = get_markup_template('message-head.tpl');
|
|
$a->page['htmlhead'] .= replace_macros($head_tpl,array(
|
|
'$baseurl' => $a->get_baseurl(true),
|
|
'$base' => $base
|
|
));
|
|
|
|
$end_tpl = get_markup_template('message-end.tpl');
|
|
$a->page['end'] .= replace_macros($end_tpl,array(
|
|
'$baseurl' => $a->get_baseurl(true),
|
|
'$base' => $base
|
|
));
|
|
|
|
}
|
|
|
|
function message_post(&$a) {
|
|
|
|
if(! local_user()) {
|
|
notice( t('Permission denied.') . EOL);
|
|
return;
|
|
}
|
|
|
|
$replyto = ((x($_REQUEST,'replyto')) ? notags(trim($_REQUEST['replyto'])) : '');
|
|
$subject = ((x($_REQUEST,'subject')) ? notags(trim($_REQUEST['subject'])) : '');
|
|
$body = ((x($_REQUEST,'body')) ? escape_tags(trim($_REQUEST['body'])) : '');
|
|
$recipient = ((x($_REQUEST,'messageto')) ? intval($_REQUEST['messageto']) : 0 );
|
|
|
|
// Work around doubled linefeeds in Tinymce 3.5b2
|
|
|
|
/* $plaintext = intval(get_pconfig(local_user(),'system','plaintext') && !feature_enabled(local_user(),'richtext'));
|
|
if(! $plaintext) {
|
|
$body = fix_mce_lf($body);
|
|
}*/
|
|
$plaintext = intval(!feature_enabled(local_user(),'richtext'));
|
|
if(! $plaintext) {
|
|
$body = fix_mce_lf($body);
|
|
}
|
|
|
|
$ret = send_message($recipient, $body, $subject, $replyto);
|
|
$norecip = false;
|
|
|
|
switch($ret){
|
|
case -1:
|
|
notice( t('No recipient selected.') . EOL );
|
|
$norecip = true;
|
|
break;
|
|
case -2:
|
|
notice( t('Unable to locate contact information.') . EOL );
|
|
break;
|
|
case -3:
|
|
notice( t('Message could not be sent.') . EOL );
|
|
break;
|
|
case -4:
|
|
notice( t('Message collection failure.') . EOL );
|
|
break;
|
|
default:
|
|
info( t('Message sent.') . EOL );
|
|
}
|
|
|
|
// fake it to go back to the input form if no recipient listed
|
|
|
|
if($norecip) {
|
|
$a->argc = 2;
|
|
$a->argv[1] = 'new';
|
|
}
|
|
else
|
|
goaway($_SESSION['return_url']);
|
|
|
|
}
|
|
|
|
// Note: the code in 'item_extract_images' and 'item_redir_and_replace_images'
|
|
// is identical to the code in include/conversation.php
|
|
if(! function_exists('item_extract_images')) {
|
|
function item_extract_images($body) {
|
|
|
|
$saved_image = array();
|
|
$orig_body = $body;
|
|
$new_body = '';
|
|
|
|
$cnt = 0;
|
|
$img_start = strpos($orig_body, '[img');
|
|
$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
|
|
$img_end = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false);
|
|
while(($img_st_close !== false) && ($img_end !== false)) {
|
|
|
|
$img_st_close++; // make it point to AFTER the closing bracket
|
|
$img_end += $img_start;
|
|
|
|
if(! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) {
|
|
// This is an embedded image
|
|
|
|
$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close));
|
|
$new_body = $new_body . substr($orig_body, 0, $img_start) . '[!#saved_image' . $cnt . '#!]';
|
|
|
|
$cnt++;
|
|
}
|
|
else
|
|
$new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]'));
|
|
|
|
$orig_body = substr($orig_body, $img_end + strlen('[/img]'));
|
|
|
|
if($orig_body === false) // in case the body ends on a closing image tag
|
|
$orig_body = '';
|
|
|
|
$img_start = strpos($orig_body, '[img');
|
|
$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
|
|
$img_end = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false);
|
|
}
|
|
|
|
$new_body = $new_body . $orig_body;
|
|
|
|
return array('body' => $new_body, 'images' => $saved_image);
|
|
}}
|
|
|
|
if(! function_exists('item_redir_and_replace_images')) {
|
|
function item_redir_and_replace_images($body, $images, $cid) {
|
|
|
|
$origbody = $body;
|
|
$newbody = '';
|
|
|
|
for($i = 0; $i < count($images); $i++) {
|
|
$search = '/\[url\=(.*?)\]\[!#saved_image' . $i . '#!\]\[\/url\]' . '/is';
|
|
$replace = '[url=' . z_path() . '/redir/' . $cid
|
|
. '?f=1&url=' . '$1' . '][!#saved_image' . $i . '#!][/url]' ;
|
|
|
|
$img_end = strpos($origbody, '[!#saved_image' . $i . '#!][/url]') + strlen('[!#saved_image' . $i . '#!][/url]');
|
|
$process_part = substr($origbody, 0, $img_end);
|
|
$origbody = substr($origbody, $img_end);
|
|
|
|
$process_part = preg_replace($search, $replace, $process_part);
|
|
$newbody = $newbody . $process_part;
|
|
}
|
|
$newbody = $newbody . $origbody;
|
|
|
|
$cnt = 0;
|
|
foreach($images as $image) {
|
|
// We're depending on the property of 'foreach' (specified on the PHP website) that
|
|
// it loops over the array starting from the first element and going sequentially
|
|
// to the last element
|
|
$newbody = str_replace('[!#saved_image' . $cnt . '#!]', '[img]' . $image . '[/img]', $newbody);
|
|
$cnt++;
|
|
}
|
|
|
|
return $newbody;
|
|
}}
|
|
|
|
|
|
|
|
function message_content(&$a) {
|
|
|
|
$o = '';
|
|
nav_set_selected('messages');
|
|
|
|
if(! local_user()) {
|
|
notice( t('Permission denied.') . EOL);
|
|
return;
|
|
}
|
|
|
|
$myprofile = $a->get_baseurl().'/profile/' . $a->user['nickname'];
|
|
|
|
$tpl = get_markup_template('mail_head.tpl');
|
|
$header = replace_macros($tpl, array(
|
|
'$messages' => t('Messages'),
|
|
'$tab_content' => $tab_content
|
|
));
|
|
|
|
|
|
if(($a->argc == 3) && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) {
|
|
if(! intval($a->argv[2]))
|
|
return;
|
|
|
|
// Check if we should do HTML-based delete confirmation
|
|
if($_REQUEST['confirm']) {
|
|
// <form> can't take arguments in its "action" parameter
|
|
// so add any arguments as hidden inputs
|
|
$query = explode_querystring($a->query_string);
|
|
$inputs = array();
|
|
foreach($query['args'] as $arg) {
|
|
if(strpos($arg, 'confirm=') === false) {
|
|
$arg_parts = explode('=', $arg);
|
|
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
|
|
}
|
|
}
|
|
|
|
//$a->page['aside'] = '';
|
|
return replace_macros(get_markup_template('confirm.tpl'), array(
|
|
'$method' => 'get',
|
|
'$message' => t('Do you really want to delete this message?'),
|
|
'$extra_inputs' => $inputs,
|
|
'$confirm' => t('Yes'),
|
|
'$confirm_url' => $query['base'],
|
|
'$confirm_name' => 'confirmed',
|
|
'$cancel' => t('Cancel'),
|
|
));
|
|
|