diff --git a/boot.php b/boot.php
index 73525b4b5..7be74e64a 100755
--- a/boot.php
+++ b/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', '
' . "\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
diff --git a/doc/To-Do-Code.md b/doc/To-Do-Code.md
index 3baf08d40..5804801b4 100644
--- a/doc/To-Do-Code.md
+++ b/doc/To-Do-Code.md
@@ -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
diff --git a/include/bbcode.php b/include/bbcode.php
index 084c02125..fec8750e9 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -442,14 +442,6 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
// Check for list text
$Text = str_replace("[*]", "
(.*?)<\/pre>/ism','smile_encode',$s);
$s = preg_replace_callback('/(.*?)<\/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>/ism','smile_decode',$s);
$s = preg_replace_callback('/(.*?)<\/code>/ism','smile_decode',$s);
+// $s = preg_replace_callback('/<(.*?)>/s','smile_decode',$s);
return $s;
diff --git a/include/widgets.php b/include/widgets.php
index efa350785..8b22515b1 100644
--- a/include/widgets.php
+++ b/include/widgets.php
@@ -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,
+ ));
+}
\ No newline at end of file
diff --git a/install/database.sql b/install/database.sql
index 1c87b725b..dba03da65 100644
--- a/install/database.sql
+++ b/install/database.sql
@@ -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`),
diff --git a/install/htconfig.sample.php b/install/htconfig.sample.php
index 33258cf41..b23dfe3b6 100755
--- a/install/htconfig.sample.php
+++ b/install/htconfig.sample.php
@@ -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
diff --git a/install/update.php b/install/update.php
index 9ab5db8c6..180b8d5a0 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,6 +1,6 @@
$rr['photo_l'],
'$alttext' => $rr['name'] . ' ' . $rr['address'],
'$name' => $rr['name'],
+ '$online' => (($online) ? t('Online Now') : ''),
'$details' => $pdesc . $details,
'$profile' => $profile,
'$address' => $rr['address'],
diff --git a/mod/online.php b/mod/online.php
new file mode 100644
index 000000000..c6500347a
--- /dev/null
+++ b/mod/online.php
@@ -0,0 +1,11 @@
+ false);
+ if(argc() != 2)
+ json_return_and_die($ret);
+
+ $ret = get_online_status(argv(1));
+ json_return_and_die($ret);
+}
diff --git a/mod/ping.php b/mod/ping.php
index dda87dec2..2d5deb9ad 100644
--- a/mod/ping.php
+++ b/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();
diff --git a/mod/settings.php b/mod/settings.php
index ee6ef45de..7ff76cd3e 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -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'),
diff --git a/version.inc b/version.inc
index d1638dd7d..36c8c7342 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-2014-01-27.570
+2014-01-29.572
diff --git a/view/js/icon_translate.js b/view/js/icon_translate.js
index 9e69e0b7d..838ff899f 100644
--- a/view/js/icon_translate.js
+++ b/view/js/icon_translate.js
@@ -50,4 +50,5 @@ $(document).ready(function() {
$('.icon-check').addClass('');
$('.icon-globe').addClass('');
$('.icon-circle-blank').addClass('');
+ $('.icon-circle').addClass('');
});
\ No newline at end of file
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index b2f90cbc1..02832b5f0 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -2445,4 +2445,8 @@ img.mail-list-sender-photo {
.abook-self {
background-color: #ffdddd;
+}
+.online-now {
+ color: red;
+ cursor: pointer;
}
\ No newline at end of file
diff --git a/view/tpl/chatroomlist.tpl b/view/tpl/chatroomlist.tpl
new file mode 100644
index 000000000..d2cf4d7b0
--- /dev/null
+++ b/view/tpl/chatroomlist.tpl
@@ -0,0 +1,11 @@
+
+
diff --git a/view/tpl/direntry_large.tpl b/view/tpl/direntry_large.tpl
index a3fa7e4c3..f00448175 100755
--- a/view/tpl/direntry_large.tpl
+++ b/view/tpl/direntry_large.tpl
@@ -13,7 +13,7 @@
-{{$name}}
+{{$name}}{{if $online}} {{/if}}
{{if $connect}}
{{/if}}
diff --git a/view/tpl/profile_vcard.tpl b/view/tpl/profile_vcard.tpl
index aaee02ab5..7a857fd67 100755
--- a/view/tpl/profile_vcard.tpl
+++ b/view/tpl/profile_vcard.tpl
@@ -16,7 +16,7 @@
{{/if}}
- {{$profile.name}}
+ {{$profile.name}}{{if $profile.online}} {{/if}}
{{if $pdesc}}{{$profile.pdesc}}{{/if}}
diff --git a/view/tpl/settings.tpl b/view/tpl/settings.tpl
index 7b6add231..b1a4f956d 100755
--- a/view/tpl/settings.tpl
+++ b/view/tpl/settings.tpl
@@ -22,6 +22,9 @@
{{$h_prv}}
+{{include file="field_checkbox.tpl" field=$hide_presence}}
+
+
{{$lbl_pmacro}}