Merge branch 'master' of https://github.com/friendica/red
to be in sync with main repro
This commit is contained in:
commit
ac8d481a32
2
boot.php
2
boot.php
@ -46,7 +46,7 @@ define ( 'RED_PLATFORM', 'Red Matrix' );
|
||||
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R');
|
||||
define ( 'ZOT_REVISION', 1 );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1093 );
|
||||
define ( 'DB_UPDATE_VERSION', 1094 );
|
||||
|
||||
define ( 'EOL', '<br />' . "\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
|
@ -17,7 +17,7 @@ We need much more than this, but here are areas where developers can help. Pleas
|
||||
|
||||
* (Advanced) create a UI for building Comanche pages
|
||||
|
||||
* Help with WebDAV and file storage implementation, especially replacing the fugly Sabre web UI.
|
||||
* templatise and translate the Web interface to webDAV
|
||||
|
||||
* Extend WebDAV to provide desktop access to photo albums
|
||||
|
||||
@ -25,7 +25,7 @@ We need much more than this, but here are areas where developers can help. Pleas
|
||||
|
||||
* service classes - account overview page showing resources consumed by channel. With special consideration this page can also be accessed at a meta level by the site admin to drill down on problematic accounts/channels.
|
||||
|
||||
* Events module - bring back birthday reminders for friends, fix permissions on events, and provide JS translation support for the calendar overview
|
||||
* Events module - bring back birthday reminders for friends, fix permissions on events, and provide JS translation support for the calendar overview; integrate with calDAV
|
||||
|
||||
* Events module - event followups and RSVP
|
||||
|
||||
|
@ -442,14 +442,6 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
|
||||
// Check for list text
|
||||
$Text = str_replace("[*]", "<li>", $Text);
|
||||
|
||||
// Check for style sheet commands
|
||||
if (strpos($Text,'[/style]') !== false) {
|
||||
$Text = preg_replace("(\[style=(.*?)\](.*?)\[\/style\])ism","<span style=\"$1;\">$2</span>",$Text);
|
||||
}
|
||||
// Check for CSS classes
|
||||
if (strpos($Text,'[/class]') !== false) {
|
||||
$Text = preg_replace("(\[class=(.*?)\](.*?)\[\/class\])ism","<span class=\"$1\">$2</span>",$Text);
|
||||
}
|
||||
// handle nested lists
|
||||
$endlessloop = 0;
|
||||
|
||||
|
148
include/chat.php
Normal file
148
include/chat.php
Normal file
@ -0,0 +1,148 @@
|
||||
<?php /** @file */
|
||||
|
||||
|
||||
function chatroom_create($channel,$arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
|
||||
$name = trim($arr['name']);
|
||||
if(! $name) {
|
||||
$ret['message'] = t('Missing room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select cr_id from chatroom where cr_uid = %d and cr_name = '%s' limit 1",
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name)
|
||||
);
|
||||
if($r) {
|
||||
$ret['message'] = t('Duplicate room name');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
$x = q("insert into chatroom ( cr_aid, cr_uid, cr_name, cr_created, cr_edited, allow_cid, allow_gid, deny_cid, deny_gid )
|
||||
values ( %d, %d , '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
|
||||
intval($channel['channel_account_id']),
|
||||
intval($channel['channel_id']),
|
||||
dbesc($name),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
dbesc($arr['allow_cid']),
|
||||
dbesc($arr['allow_gid']),
|
||||
dbesc($arr['deny_cid']),
|
||||
dbesc($arr['deny_gid'])
|
||||
);
|
||||
|
||||
if($x)
|
||||
$ret['success'] = true;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_destroy($channel,$arr) {
|
||||
|
||||
$ret = array('success' => false);
|
||||
if(intval($arr['cr_id']))
|
||||
$sql_extra = " and cr_id = " . intval($arr['cr_id']) . " ";
|
||||
elseif(trim($arr['cr_name']))
|
||||
$sql_extra = " and cr_name = '" . protect_sprintf(dbesc(trim($arr['cr_name']))) . "' ";
|
||||
else {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$r = q("select * from chatroom where cr_uid = %d $sql_extra limit 1",
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if(! $r) {
|
||||
$ret['message'] = t('Invalid room specifier.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
q("delete from chatroom where cr_id = %d limit 1",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
if($r[0]['cr_id']) {
|
||||
q("delete from chatpresence where cp_room = %d",
|
||||
intval($r[0]['cr_id'])
|
||||
);
|
||||
}
|
||||
$ret['success'] = true;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_enter($observer_xchan,$room_id,$status,$client) {
|
||||
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
|
||||
$r = q("select * from chatroom where cr_id = %d limit 1",
|
||||
intval($room_id)
|
||||
);
|
||||
if(! $r)
|
||||
return;
|
||||
require_once('include/security.php');
|
||||
$sql_extra = permissions_sql($r[0]['cr_uid']);
|
||||
|
||||
$x = q("select * from chatroom where cr_id = %d and uid = %d $sql_extra limit 1",
|
||||
intval($room_id)
|
||||
intval($r[0]['cr_uid'])
|
||||
);
|
||||
if(! $x) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id)
|
||||
);
|
||||
if($r) {
|
||||
q("update chatpresence set cp_status = %d and cp_last = '%s' where cp_id = %d limit 1",
|
||||
dbesc($status),
|
||||
dbesc(datetime_convert()),
|
||||
intval($r[0]['cp_id'])
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
$r = q("insert into chatpresence ( cp_room, cp_xchan, cp_last, cp_status, cp_client )
|
||||
values ( %d, '%s', '%s', '%s', '%s' )",
|
||||
intval($room_id),
|
||||
dbesc($observer_xchan),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($status),
|
||||
dbesc($client)
|
||||
);
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_leave($observer_xchan,$room_id,$status) {
|
||||
if(! $room_id || ! $observer_xchan)
|
||||
return;
|
||||
$r = q("select * from chatpresence where cp_xchan = '%s' and cp_room = %d limit 1",
|
||||
dbesc($observer_xchan),
|
||||
intval($room_id)
|
||||
);
|
||||
if($r) {
|
||||
q("delete from chatpresence where cp_id = %d limit 1",
|
||||
intval($r[0]['cp_id'])
|
||||
);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function chatroom_list($uid) {
|
||||
|
||||
$r = q("select cr_name, cr_id, count(cp_id) as cr_inroom from chatroom left join chatpresence on cr_id = cp_room where cr_uid = %d group by cp_id order by cr_name",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
@ -544,6 +544,9 @@ function profile_load(&$a, $nickname, $profile = '') {
|
||||
}
|
||||
|
||||
$a->profile = $r[0];
|
||||
$online = get_online_status($nickname);
|
||||
$a->profile['online_status'] = $online['result'];
|
||||
|
||||
$a->profile_uid = $r[0]['profile_uid'];
|
||||
|
||||
$a->page['title'] = $a->profile['channel_name'] . " - " . $a->profile['channel_address'] . "@" . $a->get_hostname();
|
||||
@ -678,13 +681,15 @@ function profile_sidebar($profile, $block = 0, $show_connect = true) {
|
||||
$gender = ((x($profile,'gender') == 1) ? t('Gender:') : False);
|
||||
$marital = ((x($profile,'marital') == 1) ? t('Status:') : False);
|
||||
$homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False);
|
||||
$profile['online'] = (($profile['online_status'] === 'online') ? t('Online Now') : False);
|
||||
logger('online: ' . $profile['online']);
|
||||
|
||||
if(! perm_is_allowed($profile['uid'],((is_array($observer)) ? $observer['xchan_hash'] : ''),'view_profile')) {
|
||||
$block = true;
|
||||
}
|
||||
|
||||
if(($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
|
||||
$location = $pdesc = $gender = $marital = $homepage = False;
|
||||
$location = $pdesc = $gender = $marital = $homepage = $online = False;
|
||||
}
|
||||
|
||||
$firstname = ((strpos($profile['name'],' '))
|
||||
@ -1144,3 +1149,46 @@ function is_foreigner($s) {
|
||||
function is_member($s) {
|
||||
return((is_foreigner($s)) ? false : true);
|
||||
}
|
||||
|
||||
function get_online_status($nick) {
|
||||
|
||||
$ret = array('result' => false);
|
||||
|
||||
$r = q("select channel_id, channel_hash from channel where channel_address = '%s' limit 1",
|
||||
dbesc(argv(1))
|
||||
);
|
||||
if($r) {
|
||||
$hide = get_pconfig($r[0]['channel_id'],'system','hide_online_status');
|
||||
if($hide)
|
||||
return $ret;
|
||||
$x = q("select cp_status from chatpresence where cp_xchan = '%s' and cp_room = 0 limit 1",
|
||||
dbesc($r[0]['channel_hash'])
|
||||
);
|
||||
if($x)
|
||||
$ret['result'] = $x[0]['cp_status'];
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function remote_online_status($webbie) {
|
||||
|
||||
$result = false;
|
||||
$r = q("select * from hubloc where hubloc_addr = '%s' limit 1",
|
||||
dbesc($webbie)
|
||||
);
|
||||
if(! $r)
|
||||
return $result;
|
||||
|
||||
$url = $r[0]['hubloc_url'] . '/online/' . substr($webbie,0,strpos($webbie,'@'));
|
||||
|
||||
$x = z_fetch_url($url);
|
||||
if($x['success']) {
|
||||
$j = json_decode($x['body'],true);
|
||||
if($j)
|
||||
$result = (($j['result']) ? $j['result'] : false);
|
||||
}
|
||||
return $result;
|
||||
|
||||
}
|
||||
|
@ -891,6 +891,7 @@ function smilies($s, $sample = false) {
|
||||
|
||||
$s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_encode',$s);
|
||||
$s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_encode',$s);
|
||||
// $s = preg_replace_callback('/<(.*?)>/ism','smile_encode',$s);
|
||||
|
||||
$texts = array(
|
||||
'<3',
|
||||
@ -983,6 +984,7 @@ function smilies($s, $sample = false) {
|
||||
|
||||
$s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_decode',$s);
|
||||
$s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_decode',$s);
|
||||
// $s = preg_replace_callback('/<(.*?)>/s','smile_decode',$s);
|
||||
|
||||
return $s;
|
||||
|
||||
|
@ -576,3 +576,12 @@ function widget_menu_preview($arr) {
|
||||
require_once('include/menu.php');
|
||||
return menu_render(get_app()->data['menu_item']);
|
||||
}
|
||||
|
||||
function widget_chatroom_list($arr) {
|
||||
require_once("include/chat.php");
|
||||
$r = chatroom_list(local_user());
|
||||
return replace_macros(get_markup_template('chatroomlist.tpl'),array(
|
||||
'$header' => t('Chat Rooms'),
|
||||
'$items' => $r,
|
||||
));
|
||||
}
|
@ -232,6 +232,7 @@ CREATE TABLE IF NOT EXISTS `chatpresence` (
|
||||
`cp_xchan` char(255) NOT NULL DEFAULT '',
|
||||
`cp_last` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`cp_status` char(255) NOT NULL,
|
||||
`cp_client` char(128) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`cp_id`),
|
||||
KEY `cp_room` (`cp_room`),
|
||||
KEY `cp_xchan` (`cp_xchan`),
|
||||
|
@ -3,7 +3,7 @@
|
||||
// If automatic system installation fails:
|
||||
|
||||
// Copy or rename this file to .htconfig.php in the top level
|
||||
// Friendica directory
|
||||
// Red Matrix directory
|
||||
|
||||
// Why .htconfig.php? Because it contains sensitive information which could
|
||||
// give somebody complete control of your database. Apache's default
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
define( 'UPDATE_VERSION' , 1093 );
|
||||
define( 'UPDATE_VERSION' , 1094 );
|
||||
|
||||
/**
|
||||
*
|
||||
@ -1054,3 +1054,9 @@ function update_r1092() {
|
||||
|
||||
|
||||
|
||||
function update_r1093() {
|
||||
$r = q("ALTER TABLE `chatpresence` ADD `cp_client` CHAR( 128 ) NOT NULL DEFAULT ''");
|
||||
if($r)
|
||||
return UPDATE_SUCCESS;
|
||||
return UPDATE_FAILED;
|
||||
}
|
||||
|
@ -74,6 +74,9 @@ function dirprofile_init(&$a) {
|
||||
$qrlink = zid($rr['url']);
|
||||
$connect_link = ((local_user()) ? z_root() . '/follow?f=&url=' . urlencode($rr['address']) : '');
|
||||
|
||||
$online = remote_online_status($rr['address']);
|
||||
|
||||
|
||||
if(in_array($rr['hash'],$contacts))
|
||||
$connect_link = '';
|
||||
|
||||
@ -151,6 +154,7 @@ function dirprofile_init(&$a) {
|
||||
'$photo' => $rr['photo_l'],
|
||||
'$alttext' => $rr['name'] . ' ' . $rr['address'],
|
||||
'$name' => $rr['name'],
|
||||
'$online' => (($online) ? t('Online Now') : ''),
|
||||
'$details' => $pdesc . $details,
|
||||
'$profile' => $profile,
|
||||
'$address' => $rr['address'],
|
||||
|
11
mod/online.php
Normal file
11
mod/online.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php /** @file */
|
||||
|
||||
function online_init(&$a) {
|
||||
|
||||
$ret = array('result' => false);
|
||||
if(argc() != 2)
|
||||
json_return_and_die($ret);
|
||||
|
||||
$ret = get_online_status(argv(1));
|
||||
json_return_and_die($ret);
|
||||
}
|
29
mod/ping.php
29
mod/ping.php
@ -43,6 +43,35 @@ function ping_init(&$a) {
|
||||
unset($_SESSION['sysmsg_info']);
|
||||
}
|
||||
|
||||
if(get_observer_hash() && (! $result['invalid'])) {
|
||||
$r = q("select cp_id, cp_room from chatpresence where cp_xchan = '%s' and cp_client = '%s'",
|
||||
dbesc(get_observer_hash()),
|
||||
dbesc($_SERVER['REMOTE_ADDR'])
|
||||
);
|
||||
$basic_presence = false;
|
||||
if($r) {
|
||||
foreach($r as $rr) {
|
||||
if($rr['cp_room'] == 0)
|
||||
$basic_presence = true;
|
||||
q("update chatpresence set cp_last = '%s' where cp_id = %d limit 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($rr['cp_id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
if(! $basic_presence) {
|
||||
q("insert into chatpresence ( cp_xchan, cp_last, cp_status, cp_client)
|
||||
values( '%s', '%s', '%s', '%s' ) ",
|
||||
dbesc(get_observer_hash()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc('online'),
|
||||
dbesc($_SERVER['REMOTE_ADDR'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
q("delete from chatpresence where cp_last < UTC_TIMESTAMP() - INTERVAL 3 MINUTE");
|
||||
|
||||
if((! local_user()) || ($result['invalid'])) {
|
||||
echo json_encode($result);
|
||||
killme();
|
||||
|
@ -266,6 +266,7 @@ function settings_post(&$a) {
|
||||
$expire_network_only = ((x($_POST,'expire_network_only'))? intval($_POST['expire_network_only']) : 0);
|
||||
|
||||
$allow_location = (((x($_POST,'allow_location')) && (intval($_POST['allow_location']) == 1)) ? 1: 0);
|
||||
$hide_presence = (((x($_POST,'hide_presence')) && (intval($_POST['hide_presence']) == 1)) ? 1: 0);
|
||||
|
||||
$publish = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0);
|
||||
$page_flags = (((x($_POST,'page-flags')) && (intval($_POST['page-flags']))) ? intval($_POST['page-flags']) : 0);
|
||||
@ -395,6 +396,7 @@ function settings_post(&$a) {
|
||||
set_pconfig(local_user(),'system','post_joingroup', $post_joingroup);
|
||||
set_pconfig(local_user(),'system','post_profilechange', $post_profilechange);
|
||||
set_pconfig(local_user(),'system','blocktags',$blocktags);
|
||||
set_pconfig(local_user(),'system','hide_online_status',$hide_presence);
|
||||
|
||||
|
||||
$r = q("update channel set channel_name = '%s', channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_max_anon_mail = %d, channel_max_friend_req = %d, channel_expire_days = %d, channel_default_group = '%s', channel_r_stream = %d, channel_r_profile = %d, channel_r_photos = %d, channel_r_abook = %d, channel_w_stream = %d, channel_w_wall = %d, channel_w_tagwall = %d, channel_w_comment = %d, channel_w_mail = %d, channel_w_photos = %d, channel_w_chat = %d, channel_a_delegate = %d, channel_r_storage = %d, channel_w_storage = %d, channel_r_pages = %d, channel_w_pages = %d, channel_a_republish = %d, channel_allow_cid = '%s', channel_allow_gid = '%s', channel_deny_cid = '%s', channel_deny_gid = '%s' where channel_id = %d limit 1",
|
||||
@ -821,6 +823,9 @@ function settings_content(&$a) {
|
||||
$unkmail = $a->user['unkmail'];
|
||||
$cntunkmail = $a->user['cntunkmail'];
|
||||
|
||||
$hide_presence = intval(get_pconfig(local_user(), 'system','hide_online_status'));
|
||||
|
||||
|
||||
$expire_items = get_pconfig(local_user(), 'expire','items');
|
||||
$expire_items = (($expire_items===false)? '1' : $expire_items); // default if not set: 1
|
||||
|
||||
@ -918,6 +923,8 @@ function settings_content(&$a) {
|
||||
|
||||
'$h_prv' => t('Security and Privacy Settings'),
|
||||
|
||||
'$hide_presence' => array('hide_presence', t('Hide my online presence'),$hide_presence, t('Prevents showing if you are available for chat')),
|
||||
|
||||
'$lbl_pmacro' => t('Quick Privacy Settings:'),
|
||||
'$pmacro3' => t('Very Public - extremely permissive'),
|
||||
'$pmacro2' => t('Typical - default public, privacy when desired'),
|
||||
|
@ -1 +1 @@
|
||||
2014-01-27.570
|
||||
2014-01-29.572
|
||||
|
@ -50,4 +50,5 @@ $(document).ready(function() {
|
||||
$('.icon-check').addClass('');
|
||||
$('.icon-globe').addClass('');
|
||||
$('.icon-circle-blank').addClass('');
|
||||
$('.icon-circle').addClass('');
|
||||
});
|
@ -2445,4 +2445,8 @@ img.mail-list-sender-photo {
|
||||
|
||||
.abook-self {
|
||||
background-color: #ffdddd;
|
||||
}
|
||||
.online-now {
|
||||
color: red;
|
||||
cursor: pointer;
|
||||
}
|
11
view/tpl/chatroomlist.tpl
Normal file
11
view/tpl/chatroomlist.tpl
Normal file
@ -0,0 +1,11 @@
|
||||
<div class="widget">
|
||||
<h3>{{$header}}</h3>
|
||||
{{if $items}}
|
||||
<table>
|
||||
{{foreach $items as $item}}
|
||||
<tr><td>{{$item.cr_name}}</td><td>{{$item.cr_inroom}}</td></tr>
|
||||
{{/foreach}}
|
||||
</table>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
@ -13,7 +13,7 @@
|
||||
<div class="clear"></div>
|
||||
|
||||
|
||||
<div class="contact-name" id="directory-name-{{$id}}" >{{$name}}</div>
|
||||
<div class="contact-name" id="directory-name-{{$id}}" >{{$name}}{{if $online}} <i class="icon-asterisk online-now" title="{{$online}}"></i>{{/if}}</div>
|
||||
{{if $connect}}
|
||||
<div class="directory-connect"><a href="{{$connect}}">{{$conn_label}}</a></div>
|
||||
{{/if}}
|
||||
|
@ -16,7 +16,7 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="fn label">{{$profile.name}}</div>
|
||||
<div class="fn label">{{$profile.name}}{{if $profile.online}} <i class="icon-asterisk online-now" title="{{$profile.online}}"></i>{{/if}}</div>
|
||||
|
||||
{{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
|
||||
<div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}"></div>
|
||||
|
@ -22,6 +22,9 @@
|
||||
|
||||
<h3 class="settings-heading">{{$h_prv}}</h3>
|
||||
|
||||
{{include file="field_checkbox.tpl" field=$hide_presence}}
|
||||
|
||||
|
||||
<div id="settings-privacy-macros">{{$lbl_pmacro}}</div>
|
||||
<ul>
|
||||
<li><a href="#" onclick="channel_privacy_macro(3); return false" id="settings_pmacro3">{{$pmacro3}}</a></li>
|
||||
|
Reference in New Issue
Block a user