1) ? argv(1) : null); if (local_channel() && (! $which)) { $channel = App::get_channel(); if ($channel && $channel['channel_address']) { $which = $channel['channel_address']; } } if (! $which) { notice( t('You must be logged in to see this page.') . EOL ); return; } $profile = 0; // Run Libprofile::load() here to make sure the theme is set before // we start loading content Libprofile::load($which,$profile); } function post() { if ($_POST['room_name']) { $room = strip_tags(trim($_POST['room_name'])); } if ((! $room) || (! local_channel())) { return; } $channel = App::get_channel(); if ($_POST['action'] === 'drop') { logger('delete chatroom'); Chatroom::destroy($channel, [ 'cr_name' => $room ] ); goaway(z_root() . '/chat/' . $channel['channel_address']); } $acl = new AccessControl($channel); $acl->set_from_array($_REQUEST); $arr = $acl->get(); $arr['name'] = $room; $arr['expire'] = intval($_POST['chat_expire']); if (intval($arr['expire']) < 0) { $arr['expire'] = 0; } Chatroom::create($channel,$arr); $x = q("select * from chatroom where cr_name = '%s' and cr_uid = %d limit 1", dbesc($room), intval(local_channel()) ); Libsync::build_sync_packet(0, array('chatroom' => $x)); if ($x) { goaway(z_root() . '/chat/' . $channel['channel_address'] . '/' . $x[0]['cr_id']); } // that failed. Try again perhaps? goaway(z_root() . '/chat/' . $channel['channel_address'] . '/new'); } function get() { // if(! Apps::system_app_installed(App::$profile_uid, 'Chatrooms')) { // // Do not display any associated widgets at this point // App::$pdl = ''; // // $o = 'Chatrooms App (Not Installed):
'; // $o .= t('Access Controlled Chatrooms'); // return $o; // } if (local_channel()) { $channel = App::get_channel(); nav_set_selected('Chatrooms'); } $ob = App::get_observer(); $observer = get_observer_hash(); if (! $observer) { notice( t('Permission denied.') . EOL); return; } if (! perm_is_allowed(App::$profile['profile_uid'],$observer,'chat')) { notice( t('Permission denied.') . EOL); return; } if ((argc() > 3) && intval(argv(2)) && (argv(3) === 'leave')) { Chatroom::leave($observer,argv(2),$_SERVER['REMOTE_ADDR']); goaway(z_root() . '/channel/' . argv(1)); } if ((argc() > 3) && intval(argv(2)) && (argv(3) === 'status')) { $ret = [ 'success' => false ]; $room_id = intval(argv(2)); if (! $room_id || ! $observer) { return; } $r = q("select * from chatroom where cr_id = %d limit 1", intval($room_id) ); if (! $r) { json_return_and_die($ret); } require_once('include/security.php'); $sql_extra = permissions_sql($r[0]['cr_uid']); $x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1", intval($room_id), intval($r[0]['cr_uid']) ); if (! $x) { json_return_and_die($ret); } $y = q("select count(*) as total from chatpresence where cp_room = %d", intval($room_id) ); if ($y) { $ret['success'] = true; $ret['chatroom'] = $r[0]['cr_name']; $ret['inroom'] = $y[0]['total']; } // figure out how to present a timestamp of the last activity, since we don't know the observer's timezone. $z = q("select created from chat where chat_room = %d order by created desc limit 1", intval($room_id) ); if ($z) { $ret['last'] = $z[0]['created']; } json_return_and_die($ret); } if (argc() > 2 && intval(argv(2))) { $room_id = intval(argv(2)); $x = Chatroom::enter($observer,$room_id,'online',$_SERVER['REMOTE_ADDR']); if (! $x) { return; } $x = q("select * from chatroom where cr_id = %d and cr_uid = %d $sql_extra limit 1", intval($room_id), intval(App::$profile['profile_uid']) ); if ($x) { $acl = new AccessControl(false); $acl->set($x[0]); $private = $acl->is_private(); $room_name = $x[0]['cr_name']; } else { notice( t('Room not found') . EOL); return; } $cipher = get_pconfig(local_channel(),'system','default_cipher'); if (! $cipher) { $cipher = 'AES-128-CCM'; } $o = replace_macros(get_markup_template('chat.tpl'), [ '$is_owner' => ((local_channel() && local_channel() == $x[0]['cr_uid']) ? true : false), '$room_name' => $room_name, '$room_id' => $room_id, '$baseurl' => z_root(), '$nickname' => argv(1), '$submit' => t('Submit'), '$leave' => t('Leave Room'), '$drop' => t('Delete Room'), '$away' => t('I am away right now'), '$online' => t('I am online'), '$feature_encrypt' => ((feature_enabled(local_channel(),'content_encrypt')) ? true : false), '$cipher' => $cipher, '$linkurl' => t('Please enter a link URL:'), '$encrypt' => t('Encrypt text'), '$insert' => t('Insert web link') ]); return $o; } require_once('include/conversation.php'); $o = ''; $acl = new AccessControl($channel); $channel_acl = $acl->get(); $lockstate = (($channel_acl['allow_cid'] || $channel_acl['allow_gid'] || $channel_acl['deny_cid'] || $channel_acl['deny_gid']) ? 'lock' : 'unlock'); require_once('include/acl_selectors.php'); $chatroom_new = ''; if (local_channel()) { $chatroom_new = replace_macros(get_markup_template('chatroom_new.tpl'),array( '$header' => t('New Chatroom'), '$name' => array('room_name',t('Chatroom name'),'', ''), '$chat_expire' => array('chat_expire',t('Expiration of chats (minutes)'),120,''), '$permissions' => t('Permissions'), '$acl' => populate_acl($channel_acl,false), '$allow_cid' => acl2json($channel_acl['allow_cid']), '$allow_gid' => acl2json($channel_acl['allow_gid']), '$deny_cid' => acl2json($channel_acl['deny_cid']), '$deny_gid' => acl2json($channel_acl['deny_gid']), '$lockstate' => $lockstate, '$submit' => t('Submit') )); } $rooms = Chatroom::roomlist(App::$profile['profile_uid']); $o .= replace_macros(get_markup_template('chatrooms.tpl'), [ '$header' => sprintf( t('%1$s\'s Chatrooms'), App::$profile['fullname']), '$name' => t('Name'), '$baseurl' => z_root(), '$nickname' => App::$profile['channel_address'], '$rooms' => $rooms, '$norooms' => t('No chatrooms available'), '$newroom' => t('Create New'), '$is_owner' => ((local_channel() && local_channel() == App::$profile['profile_uid']) ? 1 : 0), '$chatroom_new' => $chatroom_new, '$expire' => t('Expiration'), '$expire_unit' => t('min') //minutes ]); return $o; } }