diff options
author | friendica <info@friendica.com> | 2013-08-19 21:19:39 -0700 |
---|---|---|
committer | friendica <info@friendica.com> | 2013-08-19 21:19:39 -0700 |
commit | cd5fdbcb48a2e05198bb9daaf0753e8218ea4285 (patch) | |
tree | 8a2f57e1b6e99e9fe6b1f961b4d53b077603d046 | |
parent | b9314935e6f85bb0098c651d021ce9bdc2753ecb (diff) | |
download | volse-hubzilla-cd5fdbcb48a2e05198bb9daaf0753e8218ea4285.tar.gz volse-hubzilla-cd5fdbcb48a2e05198bb9daaf0753e8218ea4285.tar.bz2 volse-hubzilla-cd5fdbcb48a2e05198bb9daaf0753e8218ea4285.zip |
email attachments (and fix email photos)
-rwxr-xr-x | boot.php | 2 | ||||
-rwxr-xr-x | include/items.php | 10 | ||||
-rw-r--r-- | include/message.php | 49 | ||||
-rw-r--r-- | install/database.sql | 1 | ||||
-rw-r--r-- | install/update.php | 9 | ||||
-rw-r--r-- | mod/message.php | 43 | ||||
-rw-r--r-- | view/theme/redbasic/css/style.css | 1 | ||||
-rwxr-xr-x | view/tpl/msg-header.tpl | 29 | ||||
-rwxr-xr-x | view/tpl/prv_message.tpl | 6 |
9 files changed, 137 insertions, 13 deletions
@@ -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' ); diff --git a/include/items.php b/include/items.php index ba0867562..10bdcb38f 100755 --- a/include/items.php +++ b/include/items.php @@ -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 ); diff --git a/include/message.php b/include/message.php index fc0d5f2b3..e54a6cd83 100644 --- a/include/message.php +++ b/include/message.php @@ -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; diff --git a/install/database.sql b/install/database.sql index 0a86b8321..4a519adbb 100644 --- a/install/database.sql +++ b/install/database.sql @@ -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', diff --git a/install/update.php b/install/update.php index c97b5619f..682ee2aea 100644 --- a/install/update.php +++ b/install/update.php @@ -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; +} diff --git a/mod/message.php b/mod/message.php index 9c6cf75a6..f5a60b73b 100644 --- a/mod/message.php +++ b/mod/message.php @@ -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') diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index abfeb44bc..f4c399735 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -1882,6 +1882,7 @@ tr.mceLast { margin-right: 30px; } #prvmail-upload-wrapper, +#prvmail-attach-wrapper, #prvmail-link-wrapper, #prvmail-rotator-wrapper { float: left; diff --git a/view/tpl/msg-header.tpl b/view/tpl/msg-header.tpl index 0be288709..5e2597605 100755 --- a/view/tpl/msg-header.tpl +++ b/view/tpl/msg-header.tpl @@ -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> diff --git a/view/tpl/prv_message.tpl b/view/tpl/prv_message.tpl index 2ddf75544..164ba0c6d 100755 --- a/view/tpl/prv_message.tpl +++ b/view/tpl/prv_message.tpl @@ -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> |