Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
a7b2d23e9b
@ -62,9 +62,17 @@ function deliver_run($argv, $argc) {
|
|||||||
$result = z_post_url($r[0]['outq_posturl'],$r[0]['outq_msg']);
|
$result = z_post_url($r[0]['outq_posturl'],$r[0]['outq_msg']);
|
||||||
if($result['success'] && $result['return_code'] < 300) {
|
if($result['success'] && $result['return_code'] < 300) {
|
||||||
logger('deliver: queue post success to ' . $r[0]['outq_posturl'], LOGGER_DEBUG);
|
logger('deliver: queue post success to ' . $r[0]['outq_posturl'], LOGGER_DEBUG);
|
||||||
|
|
||||||
|
q("update dreport set status = '%s', dreport_time = '%s' where dreport_queue = '%s' limit 1",
|
||||||
|
dbesc('accepted for delivery'),
|
||||||
|
dbesc(datetime_convert()),
|
||||||
|
dbesc($argv[$x])
|
||||||
|
);
|
||||||
|
|
||||||
$y = q("delete from outq where outq_hash = '%s'",
|
$y = q("delete from outq where outq_hash = '%s'",
|
||||||
dbesc($argv[$x])
|
dbesc($argv[$x])
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
logger('deliver: queue post returned ' . $result['return_code'] . ' from ' . $r[0]['outq_posturl'],LOGGER_DEBUG);
|
logger('deliver: queue post returned ' . $result['return_code'] . ' from ' . $r[0]['outq_posturl'],LOGGER_DEBUG);
|
||||||
|
29
include/deliver_hooks.php
Normal file
29
include/deliver_hooks.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
require_once('include/cli_startup.php');
|
||||||
|
require_once('include/zot.php');
|
||||||
|
|
||||||
|
|
||||||
|
function deliver_hooks_run($argv, $argc) {
|
||||||
|
|
||||||
|
cli_startup();
|
||||||
|
|
||||||
|
$a = get_app();
|
||||||
|
|
||||||
|
if($argc < 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
$r = q("select * from item where id = '%d'",
|
||||||
|
intval($argv[1])
|
||||||
|
);
|
||||||
|
if($r)
|
||||||
|
call_hooks('notifier_normal',$r[0]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_search(__file__,get_included_files())===0){
|
||||||
|
deliver_hooks_run($argv,$argc);
|
||||||
|
killme();
|
||||||
|
}
|
@ -755,11 +755,14 @@ function event_store_item($arr, $event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$item_arr = array();
|
$item_arr = array();
|
||||||
$prefix = '';
|
$prefix = '';
|
||||||
// $birthday = false;
|
// $birthday = false;
|
||||||
|
|
||||||
if($event['type'] === 'birthday') {
|
if($event['type'] === 'birthday') {
|
||||||
|
if(! is_sys_channel($arr['uid']))
|
||||||
$prefix = t('This event has been added to your calendar.');
|
$prefix = t('This event has been added to your calendar.');
|
||||||
// $birthday = true;
|
// $birthday = true;
|
||||||
|
|
||||||
|
@ -262,18 +262,30 @@ function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) {
|
|||||||
);
|
);
|
||||||
if(! $x)
|
if(! $x)
|
||||||
return array();
|
return array();
|
||||||
if($mailbox === 'inbox')
|
|
||||||
$where = " and sender_xchan != '" . dbesc($x[0]['channel_hash']) . "' ";
|
$channel_hash = dbesc($x[0]['channel_hash']);
|
||||||
elseif($mailbox === 'outbox')
|
$local_channel = intval(local_channel());
|
||||||
$where = " and sender_xchan = '" . dbesc($x[0]['channel_hash']) . "' ";
|
|
||||||
|
switch($mailbox) {
|
||||||
|
|
||||||
|
case 'inbox':
|
||||||
|
$sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan != '$channel_hash' ORDER BY created DESC $limit";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'outbox':
|
||||||
|
$sql = "SELECT * FROM mail WHERE channel_id = $local_channel AND from_xchan = '$channel_hash' ORDER BY created DESC $limit";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'combined':
|
||||||
|
$sql = "SELECT * FROM ( SELECT * FROM mail WHERE channel_id = $local_channel ORDER BY created DESC $limit ) AS temp_table GROUP BY parent_mid ORDER BY created DESC";
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// For different orderings, consider applying usort on the results. We thought of doing that
|
}
|
||||||
// inside this function or having some preset sorts, but don't wish to limit app developers.
|
|
||||||
|
$r = q($sql);
|
||||||
|
|
||||||
$r = q("SELECT * from mail WHERE channel_id = %d $where order by created desc $limit",
|
|
||||||
intval(local_channel())
|
|
||||||
);
|
|
||||||
if(! $r) {
|
if(! $r) {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
@ -185,11 +185,11 @@ EOT;
|
|||||||
$nav['notifications']['all']=array('notifications/system', t('See all notifications'), "", "");
|
$nav['notifications']['all']=array('notifications/system', t('See all notifications'), "", "");
|
||||||
$nav['notifications']['mark'] = array('', t('Mark all system notifications seen'), '','');
|
$nav['notifications']['mark'] = array('', t('Mark all system notifications seen'), '','');
|
||||||
|
|
||||||
$nav['messages'] = array('message', t('Mail'), "", t('Private mail'),'mail_nav_btn');
|
$nav['messages'] = array('mail/combined', t('Mail'), "", t('Private mail'),'mail_nav_btn');
|
||||||
$nav['messages']['all']=array('message', t('See all private messages'), "", "");
|
$nav['messages']['all']=array('mail/combined', t('See all private messages'), "", "");
|
||||||
$nav['messages']['mark'] = array('', t('Mark all private messages seen'), '','');
|
$nav['messages']['mark'] = array('', t('Mark all private messages seen'), '','');
|
||||||
$nav['messages']['inbox'] = array('message', t('Inbox'), "", t('Inbox'));
|
$nav['messages']['inbox'] = array('mail/inbox', t('Inbox'), "", t('Inbox'));
|
||||||
$nav['messages']['outbox']= array('message/sent', t('Outbox'), "", t('Outbox'));
|
$nav['messages']['outbox']= array('mail/outbox', t('Outbox'), "", t('Outbox'));
|
||||||
$nav['messages']['new'] = array('mail/new', t('New Message'), "", t('New Message'));
|
$nav['messages']['new'] = array('mail/new', t('New Message'), "", t('New Message'));
|
||||||
|
|
||||||
|
|
||||||
|
@ -579,7 +579,7 @@ function notifier_run($argv, $argc){
|
|||||||
if($deliveries_per_process <= 0)
|
if($deliveries_per_process <= 0)
|
||||||
$deliveries_per_process = 1;
|
$deliveries_per_process = 1;
|
||||||
|
|
||||||
$deliver = array();
|
$deliveries = array();
|
||||||
|
|
||||||
foreach($dhubs as $hub) {
|
foreach($dhubs as $hub) {
|
||||||
|
|
||||||
@ -675,7 +675,22 @@ function notifier_run($argv, $argc){
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$deliver[] = $hash;
|
|
||||||
|
$deliveries[] = $hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($normal_mode) {
|
||||||
|
$x = q("select * from hook where hook = 'notifier_normal'");
|
||||||
|
if($x)
|
||||||
|
proc_run('php','deliver_hooks.php', $target_item['id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($deliveries) {
|
||||||
|
$deliver = array();
|
||||||
|
|
||||||
|
foreach($deliveries as $d) {
|
||||||
|
|
||||||
|
$deliver[] = $d;
|
||||||
|
|
||||||
if(count($deliver) >= $deliveries_per_process) {
|
if(count($deliver) >= $deliveries_per_process) {
|
||||||
proc_run('php','include/deliver.php',$deliver);
|
proc_run('php','include/deliver.php',$deliver);
|
||||||
@ -684,19 +699,15 @@ function notifier_run($argv, $argc){
|
|||||||
@time_sleep_until(microtime(true) + (float) $interval);
|
@time_sleep_until(microtime(true) + (float) $interval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// catch any stragglers
|
// catch any stragglers
|
||||||
|
|
||||||
if(count($deliver)) {
|
if($deliver)
|
||||||
proc_run('php','include/deliver.php',$deliver);
|
proc_run('php','include/deliver.php',$deliver);
|
||||||
}
|
|
||||||
|
|
||||||
logger('notifier: basic loop complete.', LOGGER_DEBUG);
|
logger('notifier: basic loop complete.', LOGGER_DEBUG);
|
||||||
|
|
||||||
if($normal_mode)
|
|
||||||
call_hooks('notifier_normal',$target_item);
|
|
||||||
|
|
||||||
|
|
||||||
call_hooks('notifier_end',$target_item);
|
call_hooks('notifier_end',$target_item);
|
||||||
|
|
||||||
logger('notifer: complete.');
|
logger('notifer: complete.');
|
||||||
|
@ -562,14 +562,30 @@ function widget_mailmenu($arr) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
return replace_macros(get_markup_template('message_side.tpl'), array(
|
return replace_macros(get_markup_template('message_side.tpl'), array(
|
||||||
'$title' => t('Messages'),
|
'$title' => t('Private Mail Menu'),
|
||||||
'$tabs'=> array(),
|
|
||||||
'$check'=>array(
|
'$check'=>array(
|
||||||
'label' => t('Check Mail'),
|
'label' => t('Check Mail'),
|
||||||
'url' => $a->get_baseurl(true) . '/message',
|
'url' => $a->get_baseurl(true) . '/mail/combined',
|
||||||
'sel' => (argv(1) == ''),
|
'sel' => (argv(1) == ''),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
'$combined'=>array(
|
||||||
|
'label' => t('Combined View'),
|
||||||
|
'url' => $a->get_baseurl(true) . '/mail/combined',
|
||||||
|
'sel' => (argv(1) == 'combined'),
|
||||||
|
),
|
||||||
|
'$inbox'=>array(
|
||||||
|
'label' => t('Inbox'),
|
||||||
|
'url' => $a->get_baseurl(true) . '/mail/inbox',
|
||||||
|
'sel' => (argv(1) == 'inbox'),
|
||||||
|
),
|
||||||
|
'$outbox'=>array(
|
||||||
|
'label' => t('Outbox'),
|
||||||
|
'url' => $a->get_baseurl(true) . '/mail/outbox',
|
||||||
|
'sel' => (argv(1) == 'outbox'),
|
||||||
|
),
|
||||||
'$new'=>array(
|
'$new'=>array(
|
||||||
'label' => t('New Message'),
|
'label' => t('New Message'),
|
||||||
'url' => $a->get_baseurl(true) . '/mail/new',
|
'url' => $a->get_baseurl(true) . '/mail/new',
|
||||||
@ -578,6 +594,78 @@ function widget_mailmenu($arr) {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function widget_conversations($arr) {
|
||||||
|
if (! local_channel())
|
||||||
|
return;
|
||||||
|
|
||||||
|
$a = get_app();
|
||||||
|
|
||||||
|
if(argc() > 1) {
|
||||||
|
|
||||||
|
switch(argv(1)) {
|
||||||
|
case 'combined':
|
||||||
|
$mailbox = 'combined';
|
||||||
|
$header = t('Conversations');
|
||||||
|
break;
|
||||||
|
case 'inbox':
|
||||||
|
$mailbox = 'inbox';
|
||||||
|
$header = t('Received Messages');
|
||||||
|
break;
|
||||||
|
case 'outbox':
|
||||||
|
$mailbox = 'outbox';
|
||||||
|
$header = t('Sent Messages');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$mailbox = 'combined';
|
||||||
|
$header = t('Conversations');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once('include/message.php');
|
||||||
|
|
||||||
|
// private_messages_list() can do other more complicated stuff, for now keep it simple
|
||||||
|
$r = private_messages_list(local_channel(), $mailbox, $a->pager['start'], $a->pager['itemspage']);
|
||||||
|
|
||||||
|
if(! $r) {
|
||||||
|
info( t('No messages.') . EOL);
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
|
||||||
|
$messages = array();
|
||||||
|
|
||||||
|
foreach($r as $rr) {
|
||||||
|
|
||||||
|
$messages[] = array(
|
||||||
|
'id' => $rr['id'],
|
||||||
|
'from_name' => $rr['from']['xchan_name'],
|
||||||
|
'from_url' => chanlink_hash($rr['from_xchan']),
|
||||||
|
'from_photo' => $rr['from']['xchan_photo_s'],
|
||||||
|
'to_name' => $rr['to']['xchan_name'],
|
||||||
|
'to_url' => chanlink_hash($rr['to_xchan']),
|
||||||
|
'to_photo' => $rr['to']['xchan_photo_s'],
|
||||||
|
'subject' => (($rr['seen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>'),
|
||||||
|
'delete' => t('Delete conversation'),
|
||||||
|
'body' => $rr['body'],
|
||||||
|
'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], t('D, d M Y - g:i A')),
|
||||||
|
'seen' => $rr['seen']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tpl = get_markup_template('mail_head.tpl');
|
||||||
|
$o .= replace_macros($tpl, array(
|
||||||
|
'$header' => $header,
|
||||||
|
'$messages' => $messages
|
||||||
|
));
|
||||||
|
|
||||||
|
$o .= alt_pager($a,count($r));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function widget_design_tools($arr) {
|
function widget_design_tools($arr) {
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
@ -594,6 +682,7 @@ function widget_design_tools($arr) {
|
|||||||
return design_tools();
|
return design_tools();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function widget_findpeople($arr) {
|
function widget_findpeople($arr) {
|
||||||
return findpeople_widget();
|
return findpeople_widget();
|
||||||
}
|
}
|
||||||
|
@ -254,6 +254,7 @@ function admin_page_site_post(&$a){
|
|||||||
$proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['proxy'])) : '');
|
$proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['proxy'])) : '');
|
||||||
$timeout = ((x($_POST,'timeout')) ? intval(trim($_POST['timeout'])) : 60);
|
$timeout = ((x($_POST,'timeout')) ? intval(trim($_POST['timeout'])) : 60);
|
||||||
$delivery_interval = ((x($_POST,'delivery_interval'))? intval(trim($_POST['delivery_interval'])) : 0);
|
$delivery_interval = ((x($_POST,'delivery_interval'))? intval(trim($_POST['delivery_interval'])) : 0);
|
||||||
|
$delivery_batch_count = ((x($_POST,'delivery_batch_count') && $_POST['delivery_batch_count'] > 0)? intval(trim($_POST['delivery_batch_count'])) : 1);
|
||||||
$poll_interval = ((x($_POST,'poll_interval')) ? intval(trim($_POST['poll_interval'])) : 0);
|
$poll_interval = ((x($_POST,'poll_interval')) ? intval(trim($_POST['poll_interval'])) : 0);
|
||||||
$maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50);
|
$maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50);
|
||||||
$feed_contacts = ((x($_POST,'feed_contacts')) ? intval($_POST['feed_contacts']) : 0);
|
$feed_contacts = ((x($_POST,'feed_contacts')) ? intval($_POST['feed_contacts']) : 0);
|
||||||
@ -261,6 +262,7 @@ function admin_page_site_post(&$a){
|
|||||||
|
|
||||||
set_config('system', 'feed_contacts', $feed_contacts);
|
set_config('system', 'feed_contacts', $feed_contacts);
|
||||||
set_config('system', 'delivery_interval', $delivery_interval);
|
set_config('system', 'delivery_interval', $delivery_interval);
|
||||||
|
set_config('system', 'delivery_batch_count', $delivery_batch_count);
|
||||||
set_config('system', 'poll_interval', $poll_interval);
|
set_config('system', 'poll_interval', $poll_interval);
|
||||||
set_config('system', 'maxloadavg', $maxloadavg);
|
set_config('system', 'maxloadavg', $maxloadavg);
|
||||||
set_config('system', 'frontpage', $frontpage);
|
set_config('system', 'frontpage', $frontpage);
|
||||||
@ -442,6 +444,7 @@ function admin_page_site(&$a) {
|
|||||||
'$proxy' => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
|
'$proxy' => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
|
||||||
'$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
|
'$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
|
||||||
'$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
|
'$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
|
||||||
|
'$delivery_batch_count' => array('delivery_batch_count', t('Deliveries per process'),(x(get_config('system','delivery_batch_count'))?get_config('system','delivery_batch_count'):1), t("Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5.")),
|
||||||
'$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
|
'$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
|
||||||
'$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
|
'$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
|
||||||
'$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (matrix/network) content'), intval(get_config('system','default_expire_days')), t('0 for no expiration of imported content')),
|
'$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (matrix/network) content'), intval(get_config('system','default_expire_days')), t('0 for no expiration of imported content')),
|
||||||
|
@ -30,9 +30,48 @@ function dreport_content(&$a) {
|
|||||||
$o .= '<h2>' . sprintf( t('Delivery report for %1$s'),substr($mid,0,32)) . '...' . '</h2>';
|
$o .= '<h2>' . sprintf( t('Delivery report for %1$s'),substr($mid,0,32)) . '...' . '</h2>';
|
||||||
$o .= '<table>';
|
$o .= '<table>';
|
||||||
|
|
||||||
|
for($x = 0; $x < count($r); $x++ ) {
|
||||||
|
$r[$x]['name'] = escape_tags(substr($r[$x]['dreport_recip'],strpos($r[$x]['dreport_recip'],' ')));
|
||||||
|
|
||||||
|
switch($r[$x]['dreport_result']) {
|
||||||
|
case 'channel sync processed':
|
||||||
|
$r[$x]['gravity'] = 0;
|
||||||
|
$r[$x]['dreport_result'] = t('channel sync processed');
|
||||||
|
break;
|
||||||
|
case 'queued':
|
||||||
|
$r[$x]['gravity'] = 2;
|
||||||
|
$r[$x]['dreport_result'] = t('queued');
|
||||||
|
break;
|
||||||
|
case 'posted':
|
||||||
|
$r[$x]['gravity'] = 3;
|
||||||
|
$r[$x]['dreport_result'] = t('posted');
|
||||||
|
break;
|
||||||
|
case 'accepted for delivery':
|
||||||
|
$r[$x]['gravity'] = 4;
|
||||||
|
$r[$x]['dreport_result'] = t('accepted for delivery');
|
||||||
|
break;
|
||||||
|
case 'updated':
|
||||||
|
$r[$x]['gravity'] = 5;
|
||||||
|
$r[$x]['dreport_result'] = t('updated');
|
||||||
|
case 'update ignored':
|
||||||
|
$r[$x]['gravity'] = 6;
|
||||||
|
$r[$x]['dreport_result'] = t('update ignored');
|
||||||
|
break;
|
||||||
|
case 'permission denied':
|
||||||
|
$r[$x]['dreport_result'] = t('permission denied');
|
||||||
|
$r[$x]['gravity'] = 6;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$r[$x]['gravity'] = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
usort($r,'dreport_gravity_sort');
|
||||||
|
|
||||||
|
|
||||||
foreach($r as $rr) {
|
foreach($r as $rr) {
|
||||||
$name = escape_tags(substr($rr['dreport_recip'],strpos($rr['dreport_recip'],' ')));
|
$o .= '<tr><td width="40%">' . $rr['name'] . '</td><td width="20%">' . escape_tags($rr['dreport_result']) . '</td><td width="20%">' . escape_tags($rr['dreport_time']) . '</td></tr>';
|
||||||
$o .= '<tr><td>' . $name . '</td><td>' . escape_tags($rr['dreport_result']) . '</td><td>' . escape_tags($rr['dreport_time']) . '</td></tr>';
|
|
||||||
}
|
}
|
||||||
$o .= '</table>';
|
$o .= '</table>';
|
||||||
|
|
||||||
@ -41,3 +80,12 @@ function dreport_content(&$a) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function dreport_gravity_sort($a,$b) {
|
||||||
|
if($a['gravity'] == $b['gravity']) {
|
||||||
|
if($a['name'] === $b['name'])
|
||||||
|
return strcmp($a['dreport_time'],$b['dreport_time']);
|
||||||
|
return strcmp($a['name'],$b['name']);
|
||||||
|
}
|
||||||
|
return (($a['gravity'] > $b['gravity']) ? 1 : (-1));
|
||||||
|
}
|
41
mod/mail.php
41
mod/mail.php
@ -101,7 +101,7 @@ function mail_post(&$a) {
|
|||||||
notice($ret['message']);
|
notice($ret['message']);
|
||||||
}
|
}
|
||||||
|
|
||||||
goaway(z_root() . '/message');
|
goaway(z_root() . '/mail/combined');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ function mail_content(&$a) {
|
|||||||
if($r) {
|
if($r) {
|
||||||
info( t('Message deleted.') . EOL );
|
info( t('Message deleted.') . EOL );
|
||||||
}
|
}
|
||||||
goaway($a->get_baseurl(true) . '/message' );
|
goaway($a->get_baseurl(true) . '/mail/combined' );
|
||||||
}
|
}
|
||||||
|
|
||||||
if((argc() == 3) && (argv(1) === 'recall')) {
|
if((argc() == 3) && (argv(1) === 'recall')) {
|
||||||
@ -153,7 +153,7 @@ function mail_content(&$a) {
|
|||||||
if($r) {
|
if($r) {
|
||||||
info( t('Message recalled.') . EOL );
|
info( t('Message recalled.') . EOL );
|
||||||
}
|
}
|
||||||
goaway($a->get_baseurl(true) . '/message' );
|
goaway($a->get_baseurl(true) . '/mail/combined' );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,21 +249,35 @@ function mail_content(&$a) {
|
|||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(argv(1)) {
|
||||||
|
case 'combined':
|
||||||
|
$mailbox = 'combined';
|
||||||
|
break;
|
||||||
|
case 'inbox':
|
||||||
|
$mailbox = 'inbox';
|
||||||
|
break;
|
||||||
|
case 'outbox':
|
||||||
|
$mailbox = 'outbox';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$mailbox = 'combined';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if((argc() > 1) && (intval(argv(1)))) {
|
$last_message = private_messages_list(local_channel(), $mailbox, 0, 1);
|
||||||
|
|
||||||
$o .= $header;
|
$mid = ((argc() > 1) && (intval(argv(1)))) ? argv(1) : $last_message[0]['id'];
|
||||||
|
|
||||||
$plaintext = true;
|
$plaintext = true;
|
||||||
|
|
||||||
// if( local_channel() && feature_enabled(local_channel(),'richtext') )
|
// if( local_channel() && feature_enabled(local_channel(),'richtext') )
|
||||||
// $plaintext = false;
|
// $plaintext = false;
|
||||||
|
|
||||||
$messages = private_messages_fetch_conversation(local_channel(), argv(1), true);
|
$messages = private_messages_fetch_conversation(local_channel(), $mid, true);
|
||||||
|
|
||||||
if(! $messages) {
|
if(! $messages) {
|
||||||
info( t('Message not found.') . EOL);
|
//info( t('Message not found.') . EOL);
|
||||||
return $o;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($messages[0]['to_xchan'] === $channel['channel_hash'])
|
if($messages[0]['to_xchan'] === $channel['channel_hash'])
|
||||||
@ -286,8 +300,8 @@ function mail_content(&$a) {
|
|||||||
'$expireswhen' => t('Expires YYYY-MM-DD HH:MM')
|
'$expireswhen' => t('Expires YYYY-MM-DD HH:MM')
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
$mails = array();
|
$mails = array();
|
||||||
|
|
||||||
$seen = 0;
|
$seen = 0;
|
||||||
$unknown = false;
|
$unknown = false;
|
||||||
|
|
||||||
@ -322,14 +336,13 @@ function mail_content(&$a) {
|
|||||||
|
|
||||||
$select = $message[$recp]['xchan_name'] . '<input type="hidden" name="messageto" value="' . $message[$recp]['xchan_hash'] . '" />';
|
$select = $message[$recp]['xchan_name'] . '<input type="hidden" name="messageto" value="' . $message[$recp]['xchan_hash'] . '" />';
|
||||||
$parent = '<input type="hidden" name="replyto" value="' . $message['parent_mid'] . '" />';
|
$parent = '<input type="hidden" name="replyto" value="' . $message['parent_mid'] . '" />';
|
||||||
|
|
||||||
$tpl = get_markup_template('mail_display.tpl');
|
$tpl = get_markup_template('mail_display.tpl');
|
||||||
$o = replace_macros($tpl, array(
|
$o = replace_macros($tpl, array(
|
||||||
'$prvmsg_header' => t('Private Conversation'),
|
'$prvmsg_header' => t('Subject:') . ' ' . $message['title'],
|
||||||
'$thread_id' => $a->argv[1],
|
'$thread_id' => $mid,
|
||||||
'$thread_subject' => $message['title'],
|
'$thread_subject' => $message['title'],
|
||||||
'$thread_seen' => $seen,
|
'$thread_seen' => $seen,
|
||||||
'$delete' => t('Delete conversation'),
|
'$delete' => t('Delete Conversation'),
|
||||||
'$canreply' => (($unknown) ? false : '1'),
|
'$canreply' => (($unknown) ? false : '1'),
|
||||||
'$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."),
|
'$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."),
|
||||||
'$mails' => $mails,
|
'$mails' => $mails,
|
||||||
@ -356,10 +369,8 @@ function mail_content(&$a) {
|
|||||||
'$feature_encrypt' => ((feature_enabled(local_channel(),'content_encrypt')) ? true : false),
|
'$feature_encrypt' => ((feature_enabled(local_channel(),'content_encrypt')) ? true : false),
|
||||||
'$encrypt' => t('Encrypt text'),
|
'$encrypt' => t('Encrypt text'),
|
||||||
'$cipher' => $cipher,
|
'$cipher' => $cipher,
|
||||||
|
|
||||||
));
|
));
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,6 @@ function message_content(&$a) {
|
|||||||
$cipher = 'aes256';
|
$cipher = 'aes256';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if((argc() == 3) && (argv(1) === 'dropconv')) {
|
if((argc() == 3) && (argv(1) === 'dropconv')) {
|
||||||
if(! intval(argv(2)))
|
if(! intval(argv(2)))
|
||||||
return;
|
return;
|
||||||
@ -34,14 +32,31 @@ function message_content(&$a) {
|
|||||||
$r = private_messages_drop(local_channel(), argv(2), true);
|
$r = private_messages_drop(local_channel(), argv(2), true);
|
||||||
if($r)
|
if($r)
|
||||||
info( t('Conversation removed.') . EOL );
|
info( t('Conversation removed.') . EOL );
|
||||||
goaway($a->get_baseurl(true) . '/message' );
|
goaway($a->get_baseurl(true) . '/mail/combined' );
|
||||||
}
|
}
|
||||||
if(argc() == 1) {
|
/*
|
||||||
|
if(argc() == 2) {
|
||||||
|
|
||||||
|
switch(argv(1)) {
|
||||||
|
case 'combined':
|
||||||
|
$mailbox = 'combined';
|
||||||
|
$header = t('Conversations');
|
||||||
|
break;
|
||||||
|
case 'inbox':
|
||||||
|
$mailbox = 'inbox';
|
||||||
|
$header = t('Received Messages');
|
||||||
|
break;
|
||||||
|
case 'outbox':
|
||||||
|
$mailbox = 'outbox';
|
||||||
|
$header = t('Sent Messages');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// private_messages_list() can do other more complicated stuff, for now keep it simple
|
// private_messages_list() can do other more complicated stuff, for now keep it simple
|
||||||
|
|
||||||
$r = private_messages_list(local_channel(), '', $a->pager['start'], $a->pager['itemspage']);
|
$r = private_messages_list(local_channel(), $mailbox, $a->pager['start'], $a->pager['itemspage']);
|
||||||
|
|
||||||
if(! $r) {
|
if(! $r) {
|
||||||
info( t('No messages.') . EOL);
|
info( t('No messages.') . EOL);
|
||||||
@ -51,6 +66,7 @@ function message_content(&$a) {
|
|||||||
$messages = array();
|
$messages = array();
|
||||||
|
|
||||||
foreach($r as $rr) {
|
foreach($r as $rr) {
|
||||||
|
|
||||||
$messages[] = array(
|
$messages[] = array(
|
||||||
'id' => $rr['id'],
|
'id' => $rr['id'],
|
||||||
'from_name' => $rr['from']['xchan_name'],
|
'from_name' => $rr['from']['xchan_name'],
|
||||||
@ -70,14 +86,19 @@ function message_content(&$a) {
|
|||||||
|
|
||||||
$tpl = get_markup_template('mail_head.tpl');
|
$tpl = get_markup_template('mail_head.tpl');
|
||||||
$o = replace_macros($tpl, array(
|
$o = replace_macros($tpl, array(
|
||||||
'$header' => t('Messages'),
|
'$header' => $header,
|
||||||
'$messages' => $messages
|
'$messages' => $messages
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
$o .= alt_pager($a,count($r));
|
$o .= alt_pager($a,count($r));
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
}
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@ -73,7 +73,7 @@ function tasks_post(&$a) {
|
|||||||
if(! $text)
|
if(! $text)
|
||||||
return array('success' => false);
|
return array('success' => false);
|
||||||
$event = array();
|
$event = array();
|
||||||
$event['aid'] = $channel['channel_account_id'];
|
$event['account'] = $channel['channel_account_id'];
|
||||||
$event['uid'] = $channel['channel_id'];
|
$event['uid'] = $channel['channel_id'];
|
||||||
$event['event_xchan'] = $channel['channel_hash'];
|
$event['event_xchan'] = $channel['channel_hash'];
|
||||||
$event['type'] = 'task';
|
$event['type'] = 'task';
|
||||||
|
@ -41,14 +41,25 @@ function uexport_init(&$a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function uexport_content(&$a) {
|
function uexport_content(&$a) {
|
||||||
|
|
||||||
|
$y = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
|
||||||
|
|
||||||
|
$yearurl = z_root() . '/uexport/' . $y;
|
||||||
|
$janurl = z_root() . '/uexport/' . $y . '/1';
|
||||||
|
$impurl = '/import_items';
|
||||||
$o = replace_macros(get_markup_template('uexport.tpl'), array(
|
$o = replace_macros(get_markup_template('uexport.tpl'), array(
|
||||||
'$title' => t('Export Channel'),
|
'$title' => t('Export Channel'),
|
||||||
'$basictitle' => t('Export Channel'),
|
'$basictitle' => t('Export Channel'),
|
||||||
'$basic' => t('Export your basic channel information to a small file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new hub, but does not contain your content.'),
|
'$basic' => t('Export your basic channel information to a file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new server hub, but does not contain your content.'),
|
||||||
'$fulltitle' => t('Export Content'),
|
'$fulltitle' => t('Export Content'),
|
||||||
'$full' => t('Export your channel information and all the content to a JSON backup. This backs up all of your connections, permissions, profile data and the last year of posts. This file may be VERY large. Please be patient - it may take several minutes for this download to begin.'),
|
'$full' => t('Export your channel information and recent content to a JSON backup that can be restored or imported to another server hub. This backs up all of your connections, permissions, profile data and several months of posts. This file may be VERY large. Please be patient - it may take several minutes for this download to begin.'),
|
||||||
'$by_year' => t('Export your posts from a given year.'),
|
'$by_year' => t('Export your posts from a given year.'),
|
||||||
|
|
||||||
|
'$extra' => t('You may also export your posts and conversations for a particular year or month. Adjust the date in your browser location bar to select other dates. If the export fails (possibly due to memory exhaustion on your server hub), please try again selecting a more limited date range.'),
|
||||||
|
'$extra2' => sprintf( t('To select all posts for a given year, such as this year, visit <a href="%1$s">%2$s</a>'),$yearurl,$yearurl),
|
||||||
|
'$extra3' => sprintf( t('To select all posts for a given month, such as January of this year, visit <a href="%1$s">%2$s</a>'),$janurl,$janurl),
|
||||||
|
'$extra4' => sprintf( t('These content files may be imported or restored by visiting <a href="%1$s">%2$s</a> on any site containing your channel. For best results please import or restore these in date order (oldest first).'),$impurl,$impurl)
|
||||||
|
|
||||||
));
|
));
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
@ -122,3 +122,4 @@ li:hover .group-edit-icon {
|
|||||||
#tasklist-new-summary {
|
#tasklist-new-summary {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,5 +2,4 @@ $(document).ready(function() {
|
|||||||
$("#recip").contact_autocomplete(baseurl + '/acl', '', false, function(data) {
|
$("#recip").contact_autocomplete(baseurl + '/acl', '', false, function(data) {
|
||||||
$("#recip-complete").val(data.xid);
|
$("#recip-complete").val(data.xid);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
[region=aside]
|
[region=aside]
|
||||||
[widget=vcard][/widget]
|
[widget=mailmenu][/widget]
|
||||||
|
[widget=conversations][/widget]
|
||||||
[/region]
|
[/region]
|
||||||
|
@ -1305,6 +1305,10 @@ a.rconnect:hover, a.rateme:hover, div.rateme:hover {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.widget .conv-participants {
|
||||||
|
color: $font_colour;
|
||||||
|
}
|
||||||
|
|
||||||
.notif-item a {
|
.notif-item a {
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,7 @@
|
|||||||
{{include file="field_input.tpl" field=$proxyuser}}
|
{{include file="field_input.tpl" field=$proxyuser}}
|
||||||
{{include file="field_input.tpl" field=$timeout}}
|
{{include file="field_input.tpl" field=$timeout}}
|
||||||
{{include file="field_input.tpl" field=$delivery_interval}}
|
{{include file="field_input.tpl" field=$delivery_interval}}
|
||||||
|
{{include file="field_input.tpl" field=$delivery_batch_count}}
|
||||||
{{include file="field_input.tpl" field=$poll_interval}}
|
{{include file="field_input.tpl" field=$poll_interval}}
|
||||||
{{include file="field_input.tpl" field=$maxloadavg}}
|
{{include file="field_input.tpl" field=$maxloadavg}}
|
||||||
{{include file="field_input.tpl" field=$abandon_days}}
|
{{include file="field_input.tpl" field=$abandon_days}}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<div class="generic-content-wrapper">
|
<div class="generic-content-wrapper">
|
||||||
<div class="section-title-wrapper">
|
<div class="section-title-wrapper">
|
||||||
|
<a class="btn btn-xs btn-danger pull-right" href="message/dropconv/{{$thread_id}}" onclick="return confirmDelete();"><i class="icon-trash"></i> {{$delete}}</a>
|
||||||
<h2>{{$prvmsg_header}}</h2>
|
<h2>{{$prvmsg_header}}</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="section-content-wrapper">
|
<div class="section-content-wrapper">
|
||||||
{{foreach $mails as $mail}}
|
{{foreach $mails as $mail}}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
<div class="generic-content-wrapper">
|
<div class="widget">
|
||||||
<div class="section-title-wrapper">
|
<h3>{{$header}}</h3>
|
||||||
<h2>{{$header}}</h2>
|
<ul class="nav nav-pills nav-stacked">
|
||||||
</div>
|
|
||||||
<div class="section-content-wrapper">
|
|
||||||
{{foreach $messages as $message}}
|
{{foreach $messages as $message}}
|
||||||
{{include file="mail_list.tpl"}}
|
{{include file="mail_list.tpl"}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<a href="{{$message.from_url}}" class ="mail-list" ><img class="mail-list-sender-photo" src="{{$message.from_photo}}" alt="{{$message.from_name}}" /></a>
|
<li>
|
||||||
<span class="mail-list">{{$message.from_name}}</span>
|
<a href="mail/{{$message.id}}" class="mail-link">
|
||||||
<span class="mail-list {{if $message.seen}}seen{{else}}unseen{{/if}}"><a href="mail/{{$message.id}}" class="mail-link">{{$message.subject}}</a></span>
|
<span class="{{if $message.seen}}seen{{else}}unseen{{/if}}">{{$message.subject}}</span><br>
|
||||||
<span class="mail-list" title="{{$message.date}}">{{$message.date}}</span>
|
<span class="conv-participants">{{$message.from_name}} > {{$message.to_name}}</span><br>
|
||||||
<span class="mail-list mail-list-remove" class="btn btn-default btn-sm"><a href="message/dropconv/{{$message.id}}" onclick="return confirmDelete();" title="{{$message.delete}}" class="btn btn-default btn-sm" ><i class="icon-trash mail-icons drop-icons"></i></a></span>
|
<span class="wall-item-ago autotime" title="{{$message.date}}">{{$message.date}}</span>
|
||||||
<div class="clear"></div>
|
</a>
|
||||||
|
</li>
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
<div class="widget">
|
<div class="widget">
|
||||||
<h3>{{$title}}</h3>
|
<h3>{{$title}}</h3>
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
<li><a href="{{$check.url}}"{{if $check.sel}} class="checkmessage-selected"{{/if}}>{{$check.label}}</a></li>
|
<li><a href="{{$check.url}}"{{if $check.sel}} class="active"{{/if}}>{{$check.label}}</a></li>
|
||||||
<li><a href="{{$new.url}}"{{if $new.sel}} class="newmessage-selected"{{/if}}>{{$new.label}}</a></li>
|
{{*
|
||||||
|
<li><a href="{{$combined.url}}"{{if $combined.sel}} class="active"{{/if}}>{{$combined.label}}</a></li>
|
||||||
|
<li><a href="{{$inbox.url}}"{{if $inbox.sel}} class="active"{{/if}}>{{$inbox.label}}</a></li>
|
||||||
|
<li><a href="{{$outbox.url}}"{{if $outbox.sel}} class="active"{{/if}}>{{$outbox.label}}</a></li>
|
||||||
|
*}}
|
||||||
|
<li><a href="{{$new.url}}"{{if $new.sel}} class="active"{{/if}}>{{$new.label}}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{if $tabs}}
|
{{if $tabs}}
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
{{foreach $tabs as $t}}
|
{{foreach $tabs as $t}}
|
||||||
<li><a href="{{$t.url}}"{{if $t.sel}} class="message-selected"{{/if}}>{{$t.label}}</a></li>
|
<li><a href="{{$t.url}}"{{if $t.sel}} class="active"{{/if}}>{{$t.label}}</a></li>
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</ul>
|
</ul>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -8,5 +8,12 @@
|
|||||||
|
|
||||||
<p><b><a href="uexport/complete">{{$fulltitle}}</a></b></p>
|
<p><b><a href="uexport/complete">{{$fulltitle}}</a></b></p>
|
||||||
<p>{{$full}}</p>
|
<p>{{$full}}</p>
|
||||||
|
|
||||||
|
<p>{{$extra}}</p>
|
||||||
|
<p>{{$extra2}}</p>
|
||||||
|
<p>{{$extra3}}</p>
|
||||||
|
|
||||||
|
<p>{{$extra4}}</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user