email attachments (and fix email photos)
This commit is contained in:
parent
b9314935e6
commit
cd5fdbcb48
2
boot.php
2
boot.php
@ -43,7 +43,7 @@ require_once('include/taxonomy.php');
|
||||
define ( 'RED_PLATFORM', 'Red Matrix' );
|
||||
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R');
|
||||
define ( 'ZOT_REVISION', 1 );
|
||||
define ( 'DB_UPDATE_VERSION', 1059 );
|
||||
define ( 'DB_UPDATE_VERSION', 1060 );
|
||||
|
||||
define ( 'EOL', '<br />' . "\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
|
@ -840,6 +840,9 @@ function encode_mail($item) {
|
||||
$x['from'] = encode_item_xchan($item['from']);
|
||||
$x['to'] = encode_item_xchan($item['to']);
|
||||
|
||||
if($item['attach'])
|
||||
$x['attach'] = json_decode_plus($item['attach']);
|
||||
|
||||
$x['flags'] = array();
|
||||
|
||||
if($item['mail_flags'] & MAIL_RECALLED) {
|
||||
@ -885,6 +888,9 @@ function get_mail_elements($x) {
|
||||
$arr['mid'] = (($x['message_id']) ? htmlentities($x['message_id'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
$arr['parent_mid'] = (($x['message_parent']) ? htmlentities($x['message_parent'], ENT_COMPAT,'UTF-8',false) : '');
|
||||
|
||||
if($x['attach'])
|
||||
$arr['attach'] = activity_sanitise($x['attach']);
|
||||
|
||||
|
||||
if(import_author_xchan($x['from']))
|
||||
$arr['from_xchan'] = base64url_encode(hash('whirlpool',$x['from']['guid'] . $x['from']['guid_sig'], true));
|
||||
@ -2202,6 +2208,9 @@ function mail_store($arr) {
|
||||
if((strpos($arr['body'],'<') !== false) || (strpos($arr['body'],'>') !== false))
|
||||
$arr['body'] = escape_tags($arr['body']);
|
||||
|
||||
if(array_key_exists('attach',$arr) && is_array($arr['attach']))
|
||||
$arr['attach'] = json_encode($arr['attach']);
|
||||
|
||||
$arr['account_id'] = ((x($arr,'account_id')) ? intval($arr['account_id']) : 0);
|
||||
$arr['mid'] = ((x($arr,'mid')) ? notags(trim($arr['mid'])) : random_string());
|
||||
$arr['from_xchan'] = ((x($arr,'from_xchan')) ? notags(trim($arr['from_xchan'])) : '');
|
||||
@ -2210,6 +2219,7 @@ function mail_store($arr) {
|
||||
$arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : '');
|
||||
$arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : '');
|
||||
$arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : '');
|
||||
|
||||
$arr['mail_flags'] = ((x($arr,'mail_flags')) ? intval($arr['mail_flags']) : 0 );
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
/* Private Message backend API */
|
||||
|
||||
require_once('include/crypto.php');
|
||||
require_once('include/attach.php');
|
||||
|
||||
// send a private message
|
||||
|
||||
@ -74,14 +75,44 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
|
||||
if(preg_match_all("/\[img\](.*?)\[\/img\]/",$body,$match))
|
||||
$images = $match[1];
|
||||
|
||||
$match = false;
|
||||
|
||||
if(preg_match_all("/\[attachment\](.*?)\[\/attachment\]/",$body,$match))
|
||||
$attaches = $match[1];
|
||||
|
||||
$attachments = '';
|
||||
|
||||
if(preg_match_all('/(\[attachment\](.*?)\[\/attachment\])/',$body,$match)) {
|
||||
$attachments = array();
|
||||
foreach($match[2] as $mtch) {
|
||||
$hash = substr($mtch,0,strpos($mtch,','));
|
||||
$rev = intval(substr($mtch,strpos($mtch,',')));
|
||||
$r = attach_by_hash_nodata($hash,$rev);
|
||||
if($r['success']) {
|
||||
$attachments[] = array(
|
||||
'href' => $a->get_baseurl() . '/attach/' . $r['data']['hash'],
|
||||
'length' => $r['data']['filesize'],
|
||||
'type' => $r['data']['filetype'],
|
||||
'title' => urlencode($r['data']['filename']),
|
||||
'revision' => $r['data']['revision']
|
||||
);
|
||||
}
|
||||
$body = str_replace($match[1],'',$body);
|
||||
}
|
||||
}
|
||||
|
||||
$jattach = (($attachments) ? json_encode($attachments) : '');
|
||||
|
||||
$key = get_config('system','pubkey');
|
||||
if($subject)
|
||||
$subject = json_encode(aes_encapsulate($subject,$key));
|
||||
if($body)
|
||||
$body = json_encode(aes_encapsulate($body,$key));
|
||||
|
||||
$r = q("INSERT INTO mail ( account_id, mail_flags, channel_id, from_xchan, to_xchan, title, body, mid, parent_mid, created )
|
||||
VALUES ( %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
|
||||
|
||||
|
||||
$r = q("INSERT INTO mail ( account_id, mail_flags, channel_id, from_xchan, to_xchan, title, body, attach, mid, parent_mid, created )
|
||||
VALUES ( %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
|
||||
intval($channel['channel_account_id']),
|
||||
intval(MAIL_OBSCURED),
|
||||
intval($channel['channel_id']),
|
||||
@ -89,6 +120,7 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
|
||||
dbesc($recipient),
|
||||
dbesc($subject),
|
||||
dbesc($body),
|
||||
dbesc($jattach),
|
||||
dbesc($mid),
|
||||
dbesc($replyto),
|
||||
dbesc(datetime_convert())
|
||||
@ -122,6 +154,19 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
|
||||
}
|
||||
}
|
||||
|
||||
if($attaches) {
|
||||
foreach($attaches as $attach) {
|
||||
$hash = substr($attach,0,strpos($attach,','));
|
||||
$rev = intval(substr($attach,strpos($attach,',')));
|
||||
attach_store($channel,$observer_hash,$options = 'update', array(
|
||||
'hash' => $hash,
|
||||
'revision' => $rev,
|
||||
'allow_cid' => '<' . $recipient . '>',
|
||||
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
proc_run('php','include/notifier.php','mail',$post_id);
|
||||
|
||||
$ret['success'] = true;
|
||||
|
@ -504,6 +504,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
|
||||
`channel_id` int(10) unsigned NOT NULL,
|
||||
`title` text NOT NULL,
|
||||
`body` mediumtext NOT NULL,
|
||||
`attach` mediumtext NOT NULL DEFAULT '',
|
||||
`mid` char(255) NOT NULL,
|
||||
`parent_mid` char(255) NOT NULL,
|
||||
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
define( 'UPDATE_VERSION' , 1059 );
|
||||
define( 'UPDATE_VERSION' , 1060 );
|
||||
|
||||
/**
|
||||
*
|
||||
@ -682,3 +682,10 @@ ADD INDEX ( `mitem_flags` ) ");
|
||||
return UPDATE_SUCCESS;
|
||||
return UPDATE_FAILED;
|
||||
}
|
||||
|
||||
function update_r1059() {
|
||||
$r = q("ALTER TABLE `mail` ADD `attach` MEDIUMTEXT NOT NULL DEFAULT '' AFTER `body` ");
|
||||
if($r)
|
||||
return UPDATE_SUCCESS;
|
||||
return UPDATE_FAILED;
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ function message_content(&$a) {
|
||||
$a->page['htmlhead'] .= replace_macros($tpl, array(
|
||||
'$baseurl' => $a->get_baseurl(true),
|
||||
'$editselect' => (($plaintext) ? 'none' : '/(profile-jot-text|prvmail-text)/'),
|
||||
'$nickname' => $channel['channel_addr'],
|
||||
'$nickname' => $channel['channel_address'],
|
||||
'$linkurl' => t('Please enter a link URL:')
|
||||
));
|
||||
|
||||
@ -293,6 +293,7 @@ function message_content(&$a) {
|
||||
'$select' => $select,
|
||||
'$parent' => '',
|
||||
'$upload' => t('Upload photo'),
|
||||
'$attach' => t('Attach file'),
|
||||
'$insert' => t('Insert web link'),
|
||||
'$wait' => t('Please wait'),
|
||||
'$submit' => t('Submit')
|
||||
@ -371,10 +372,39 @@ function message_content(&$a) {
|
||||
|
||||
foreach($messages as $message) {
|
||||
|
||||
// FIXME
|
||||
// $extracted = item_extract_images($message['body']);
|
||||
// if($extracted['images'])
|
||||
// $message['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $message['contact-id']);
|
||||
$s = $arr = '';
|
||||
|
||||
if($message['attach'])
|
||||
$arr = json_decode_plus($message['attach']);
|
||||
if($arr) {
|
||||
$s .= '<div class="body-attach">';
|
||||
foreach($arr as $r) {
|
||||
$matches = false;
|
||||
$icon = '';
|
||||
$icontype = substr($r['type'],0,strpos($r['type'],'/'));
|
||||
|
||||
switch($icontype) {
|
||||
case 'video':
|
||||
case 'audio':
|
||||
case 'image':
|
||||
case 'text':
|
||||
$icon = '<div class="attachtype icon s22 type-' . $icontype . '"></div>';
|
||||
break;
|
||||
default:
|
||||
$icon = '<div class="attachtype icon s22 type-unkn"></div>';
|
||||
break;
|
||||
}
|
||||
|
||||
$title = htmlentities($r['title'], ENT_COMPAT,'UTF-8');
|
||||
if(! $title)
|
||||
$title = t('unknown.???');
|
||||
$title .= ' ' . $r['length'] . ' ' . t('bytes');
|
||||
|
||||
$url = $a->get_baseurl() . '/magic?f=&hash=' . $message['from_xchan'] . '&dest=' . $r['href'] . '/' . $r['revision'];
|
||||
$s .= '<a href="' . $url . '" title="' . $title . '" class="attachlink" >' . $icon . '</a>';
|
||||
}
|
||||
$s .= '<div class="clear"></div></div>';
|
||||
}
|
||||
|
||||
$mails[] = array(
|
||||
'id' => $message['id'],
|
||||
@ -385,7 +415,7 @@ function message_content(&$a) {
|
||||
'to_url' => chanlink_hash($message['to_xchan']),
|
||||
'to_photo' => $message['to']['xchan_photo_m'],
|
||||
'subject' => $message['title'],
|
||||
'body' => smilies(bbcode($message['body'])),
|
||||
'body' => smilies(bbcode($message['body']) . $s),
|
||||
'delete' => t('Delete message'),
|
||||
'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A'),
|
||||
);
|
||||
@ -425,6 +455,7 @@ function message_content(&$a) {
|
||||
'$select' => $select,
|
||||
'$parent' => $parent,
|
||||
'$upload' => t('Upload photo'),
|
||||
'$attach' => t('Attach file'),
|
||||
'$insert' => t('Insert web link'),
|
||||
'$submit' => t('Submit'),
|
||||
'$wait' => t('Please wait')
|
||||
|
@ -1882,6 +1882,7 @@ tr.mceLast {
|
||||
margin-right: 30px;
|
||||
}
|
||||
#prvmail-upload-wrapper,
|
||||
#prvmail-attach-wrapper,
|
||||
#prvmail-link-wrapper,
|
||||
#prvmail-rotator-wrapper {
|
||||
float: left;
|
||||
|
@ -54,7 +54,19 @@ else
|
||||
name: 'userfile',
|
||||
onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
|
||||
onComplete: function(file,response) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,response);
|
||||
addeditortext(response);
|
||||
$('#profile-rotator').spin(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
var file_uploader = new window.AjaxUpload(
|
||||
'prvmail-attach',
|
||||
{ action: 'wall_attach/{{$nickname}}',
|
||||
name: 'userfile',
|
||||
onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
|
||||
onComplete: function(file,response) {
|
||||
addeditortext(response);
|
||||
$('#profile-rotator').spin(false);
|
||||
}
|
||||
}
|
||||
@ -67,7 +79,7 @@ else
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').spin('tiny');
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
addeditortext(response);
|
||||
$('#profile-rotator').spin(false);
|
||||
});
|
||||
}
|
||||
@ -86,11 +98,22 @@ else
|
||||
if(reply && reply.length) {
|
||||
$('#profile-rotator').spin('tiny');
|
||||
$.get('parse_url?url=' + reply, function(data) {
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
addeditortext(response);
|
||||
$('#profile-rotator').spin(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function addeditortext(data) {
|
||||
if(plaintext == 'none') {
|
||||
var currentText = $("#prvmail-text").val();
|
||||
$("#prvmail-text").val(currentText + data);
|
||||
}
|
||||
else
|
||||
tinyMCE.execCommand('mceInsertRawHTML',false,data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
@ -26,6 +26,12 @@
|
||||
<div id="prvmail-upload-wrapper" >
|
||||
<div id="prvmail-upload" class="icon border camera" title="{{$upload}}" ></div>
|
||||
</div>
|
||||
|
||||
<div id="prvmail-attach-wrapper" >
|
||||
<div id="prvmail-attach" class="icon attach" title="{{$attach}}" ></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="prvmail-link-wrapper" >
|
||||
<div id="prvmail-link" class="icon border link" title="{{$insert}}" onclick="jotGetLink();" ></div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user