xo::ChatClass instproc login (public)

 <instance of xo::ChatClass[i]> login -chat_id chat_id  \
    [ -skin skin ] [ -package_id package_id ] [ -mode mode ] \
    [ -path path ] [ -avatar_p on|off ] [ -force_login_p on|off ] \
    [ -login_messages_p on|off ] [ -logout_messages_p on|off ] \
    [ -timewindow timewindow ]

Defined in packages/xowiki/tcl/chat-procs.tcl

Logs into a chat

Switches:
-chat_id
(required)
-skin
(defaults to "classic") (optional)
-package_id
(optional)
-mode
(optional)
-path
(optional)
-avatar_p
(boolean) (defaults to "true") (optional)
-force_login_p
(boolean) (defaults to "false") (optional)
-login_messages_p
(boolean) (optional)
-logout_messages_p
(boolean) (optional)
-timewindow
(optional)

Partial Call Graph (max 5 caller/called nodes):
%3 _ _ (public) ad_conn ad_conn (public) apm_package_installed_p apm_package_installed_p (public) auth::require_login auth::require_login (public) export_vars export_vars (public) xo::ChatClass instproc login xo::ChatClass instproc login xo::ChatClass instproc login->_ xo::ChatClass instproc login->ad_conn xo::ChatClass instproc login->apm_package_installed_p xo::ChatClass instproc login->auth::require_login xo::ChatClass instproc login->export_vars

Testcases:
No testcase defined.
Source code:
#:log "--chat"
if {![ns_conn isconnected]} {
  return
}
if {$force_login_p} {
  auth::require_login
}

set session_id [ad_conn session_id].[clock seconds]
set base_url [export_vars -base /shared/ajax/chat -no_empty {
  {id $chat_id} {s $session_id} {class "[self]"}
}]

# This might come in handy to get resources from the chat package
# if we want to have e.g. a separate css.
# set package_key [apm_package_key_from_id $package_id]
# set resources_path /resources/${package_key}
template::head::add_css -href /resources/xowiki/chat-skins/chat-$skin.css

if {$mode eq ""} {
  #
  # The parameter "mode" was not specified, we try to guess the
  # "best" mode known to work for the currently used browser.
  #
  set mode [:get_mode]
  :log "--chat mode $mode"
}

switch -- $mode {
  polling {
    set jspath /resources/xowiki/chat.js
    set subscribe_url ${base_url}&m=get_new&mode=polling
  }
  streaming {
    set jspath /resources/xowiki/streaming-chat.js
    set subscribe_url ${base_url}&m=subscribe&mode=streaming
  }
  scripted-streaming {
    set jspath /resources/xowiki/scripted-streaming-chat.js
    set subscribe_url ${base_url}&m=subscribe&mode=scripted
  }
  default {
    error "mode $mode unknown, valid are: polling, streaming and scripted-streaming"
  }
}

# get LinkRegex parameter from the chat package
set link_regex [::parameter::get_global_value  -package_key "chat"  -parameter "LinkRegex"]

# Should we add a full screen link to the chat?
set fs_link_p true

# Should we display avatars? (JavaScript can only take 'true' or 'false' as boolean values)
if {$avatar_p} {
    set show_avatar true
} else {
    set show_avatar false
}

# small JavaScript library to obtain a portable ajax request object
template::head::add_javascript -src urn:ad:js:get-http-object -order 10
template::head::add_javascript -script "const linkRegex = \"${link_regex}\";" -order 19
template::head::add_javascript -script "const show_avatar = $show_avatar;" -order 20
template::head::add_javascript -src /resources/xowiki/chat-common.js -order 21
template::head::add_javascript -src /resources/xowiki/chat-skins/chat-$skin.js -order 22
template::head::add_javascript -src $jspath -order 30

set send_url ${base_url}&m=add_msg&msg=

#:log "--CHAT mode=$mode"

template::add_body_script -script {
  document.getElementById('xowiki-chat-send').focus();
}

set html ""

if {[apm_package_installed_p chat]} {
  set message_label [_ chat.message]
  set send_label [_ chat.Send_Refresh]
} else {
  set message_label "Message"
  set send_label "Send"
}

# TODO: it is currently not possible to embed multiple chats in
# the same page.
append html [subst {
  <div id='xowiki-chat'>
     <div id='xowiki-chat-messages-and-form'>
       <div id='xowiki-chat-messages'></div>
       <div id='xowiki-chat-messages-form-block'>
         <form id='xowiki-chat-messages-form' action='#'>
           <input type='text' placeholder="$message_label" name='msg' id='xowiki-chat-send' autocomplete="off" />
           <button id='xowiki-chat-send-button' type='submit'>$send_label</button>
         </form>
       </div>
     </div>
     <div id='xowiki-chat-users'></div>
  </div>
}]

set conf [dict create]
foreach var {force_login_p login_messages_p logout_messages_p timewindow} {
  if {[info exists $var]} {
    dict set conf $var [set $var]
  }
}

:create c1  -destroy_on_cleanup  -chat_id    $chat_id  -session_id $session_id  -mode       $mode  -conf       $conf
#:log "--CHAT created c1 with mode=$mode"

append html [subst {
  <span id="xowiki-my-user-id" hidden>[c1 set user_id]</span>
}]

set js ""
set data [c1 login]
if {$data ne ""} {
  append js [subst -nocommands {
    let data = $data;
    for (var i = 0; i < data.length; i++) {
      renderData(data[i]);
    }
  }]
}

if {$fs_link_p} {
  append js {addFullScreenLink();}
}

append js {addSendPic();}

#:log "--CHAT create HTML for mode=$mode"

switch -- $mode {
  "polling" {
    append js [subst {
      chatSubscribe('$subscribe_url');
    }]
    set send_msg_handler pollingSendMsgHandler
  }

  "streaming" {
    append js [subst {
      chatSubscribe('$subscribe_url');
    }]
    set send_msg_handler streamingSendMsgHandler
  }

  "scripted-streaming" {
    append html [subst {
      <iframe name='ichat' id='ichat' src='[ns_quotehtml $subscribe_url]'
         style='width:0px; height:0px; border: 0px'>
      </iframe>
    }]
    set send_msg_handler scriptedStreamingSendMsgHandler
  }
}
append html [subst {
  <script nonce='[security::csp::nonce]'>
  $js
  </script>
}]

template::add_refresh_on_history_handler

template::add_event_listener  -id "xowiki-chat-messages-form" -event "submit"  -script [subst {chatSendMsg('${send_url}', ${send_msg_handler});}]

return $html
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: