%3 ::xo::Package ::xo::Package exists_form_parameter exists_query_parameter form_parameter get_parameter handle_http_caching init initialize insert instantiate_forms process_init_parameter query_parameter reply_to_user require_root_folder return_page returnredirect set_url update ::xo::db::Object ::xo::db::Object delete initialize_loaded_object insert save save_new update ::xo::Package->::xo::db::Object ::xo::db::chat_transcript ::xo::db::chat_transcript insert save_new update ::xo::db::chat_transcript->::xo::db::Object ::xo::db::chat_room ::xo::db::chat_room ban_user count_messages create_transcript delete delete_messages flush grant_creator grant_moderator grant_user insert post_message revoke_moderator revoke_user save_new transcript_messages unban_user update ::xo::db::chat_room->::xo::db::Object ::xo::db::CrItem ::xo::db::CrItem changed_redirect_url current_user_id delete fix_content initialize_loaded_object is_cached_object is_package_root_folder privilege=creator rename save save_new set_live_revision update update_attribute_from_slot update_content update_item_index update_revision www-revisions ::xo::db::CrItem->::xo::db::Object ::xo::db::CrCache::Item ::xo::db::CrCache::Item ::xo::db::CrItem->::xo::db::CrCache::Item ::xo::db::apm_parameter ::xo::db::apm_parameter insert update ::xo::db::apm_parameter->::xo::db::Object ::xo::parameter ::xo::parameter ::xo::db::apm_parameter->::xo::parameter ::xotcl::Object ::xotcl::Object → getExitHandler → setExitHandler → unsetExitHandler __object_configureparameter __timediff abstract ad_doc ad_forward ad_proc asHTML check class db_0or1row db_1row debug destroy_on_cleanup ds extractConfigureArg filter filtersearch forward hasclass init invar isclass ismetaclass ismixin isobject istype log method mixin mset msg parametercmd proc procsearch qn self serialize set_instance_vars_defaults unknown vwait www-show-object ::xo::db::Object->::xotcl::Object

Class ::xo::db::chat_room

::xo::db::chat_room[i] create ...

Class Relations

  • class: ::xo::db::Class[i]
  • superclass: ::xo::db::Object[i]
::xo::db::Class create ::xo::db::chat_room \
     -superclass ::xo::db::Object

Methods (to be applied on instances)

  • active_p (setter)

  • archive_p (setter)

  • auto_flush_p (setter)

  • auto_transcript_p (setter)

  • avatar_p (setter)

  • ban_user (scripted, public)

     <instance of xo::db::chat_room[i]> ban_user -party_id party_id 

    Bans specified user from the chat room

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::grant permission::grant (public) xo::db::chat_room instproc ban_user xo::db::chat_room instproc ban_user xo::db::chat_room instproc ban_user->permission::grant

    Testcases:
    No testcase defined.
    permission::grant  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_ban
  • count_messages (scripted, public)

     <instance of xo::db::chat_room[i]> count_messages

    Count messages currently persisted for this chat room.

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    set room_id ${:room_id}
    ::xo::dc get_value count_messages {
        select count(*) from chat_msgs
        where room_id = :room_id
    }
  • create_transcript (scripted, public)

     <instance of xo::db::chat_room[i]> create_transcript \
        [ -pretty_name pretty_name ] [ -description description ] \
        [ -creation_user creation_user ] [ -creation_ip creation_ip ]

    Creates a new transcript of all current chat room messages.

    Switches:
    -pretty_name
    (optional)
    -description
    (optional)
    -creation_user
    (optional)
    -creation_ip
    (optional)
    Returns:
    transcript_id of the new transcript or 0 when no messages were in the chat room.

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    if {![info exists pretty_name]} {
        set today [clock format [clock seconds] -format "%d.%m.%Y"]
        set pretty_name "#chat.transcript_of_date# $today"
    }
    if {![info exists description]} {
        set description "#chat.automatically_created_transcript#"
    }
    if {![info exists creation_user]} {
        set creation_user ${:creation_user}
    }
    
    set contents [:transcript_messages]
    if {[llength $contents] > 0} {
        set t [::xo::db::chat_transcript new  -creation_user $creation_user  -creation_ip $creation_ip  -pretty_name $pretty_name  -description $description  -package_id ${:package_id}  -room_id ${:room_id}  -contents [join $contents \n]]
        $t save_new
        return [$t set transcript_id]
    } else {
        return 0
    }
  • delete (scripted, public)

     <instance of xo::db::chat_room[i]> delete args [ args... ]

    Delete the chat room and all of its transcripts

    Parameters:
    args

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    set room_id ${:room_id}
    foreach transcript_id [::xo::dc list get_transcripts {
        select transcript_id from chat_transcripts
        where room_id = :room_id
    }] {
        ::acs::dc call acs_object delete  -object_id $transcript_id
    }
    next
  • delete_messages (scripted, public)

     <instance of xo::db::chat_room[i]> delete_messages

    Delete all persisted messages from the chat room.

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    set room_id ${:room_id}
    ::xo::dc dml delete_messages {
        delete from chat_msgs where room_id = :room_id
    }
  • description (setter)

  • flush (scripted, public)

     <instance of xo::db::chat_room[i]> flush

    Save all currently persisted messages for this chat room as a new transcript and then delete them.

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    if {${:auto_transcript_p}} {
        :create_transcript
    }
    :delete_messages
  • grant_creator (scripted, public)

     <instance of xo::db::chat_room[i]> grant_creator

    Grants operative privileges to the chat creator (when available on the chat room object). In detail the permissions to edit, view and delete the chat room and also to create transcripts of it.

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::grant permission::grant (public) xo::db::chat_room instproc grant_creator xo::db::chat_room instproc grant_creator xo::db::chat_room instproc grant_creator->permission::grant

    Testcases:
    No testcase defined.
    if {${:creation_user} ne ""} {
        foreach privilege {edit view delete} {
            permission::grant  -party_id  ${:creation_user}  -object_id ${:room_id}  -privilege chat_room_${privilege}
        }
        permission::grant  -party_id  ${:creation_user}  -object_id ${:room_id}  -privilege chat_transcript_create
    }
  • grant_moderator (scripted, public)

     <instance of xo::db::chat_room[i]> grant_moderator \
        -party_id party_id 

    Make specified party the chat room moderator

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::grant permission::grant (public) xo::db::chat_room instproc grant_moderator xo::db::chat_room instproc grant_moderator xo::db::chat_room instproc grant_moderator->permission::grant

    Testcases:
    No testcase defined.
    permission::grant  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_room_moderate
  • grant_user (scripted, public)

     <instance of xo::db::chat_room[i]> grant_user -party_id party_id 

    Grants operative privileges to the specified party. In detail, the permission to read and write for the chat room.

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::grant permission::grant (public) xo::db::chat_room instproc grant_user xo::db::chat_room instproc grant_user xo::db::chat_room instproc grant_user->permission::grant

    Testcases:
    No testcase defined.
    ::xo::dc transaction {
        foreach privilege {read write} {
            permission::grant  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_${privilege}
        }
    }
  • insert (scripted)

    set __table_name [[self class] table_name]
    set __id [[self class] id_column]
    set :$__id ${:object_id}
    :log "ID insert in $__table_name, id = $__id = [set :$__id]"
    next
    foreach {__slot_name __slot} [[self class] array get db_slot] {
      if {[info exists :$__slot_name]} {
        set $__slot_name [set :$__slot_name]
        lappend __vars $__slot_name
        lappend __atts [$__slot column_name]
      }
    }
    ::xo::dc dml insert_$__table_name "insert into $__table_name
      ([join $__atts ,]) values (:[join $__vars ,:])"
  • login_messages_p (setter)

  • logout_messages_p (setter)

  • messages_time_window (setter)

  • post_message (scripted, public)

     <instance of xo::db::chat_room[i]> post_message [ -msg msg ] \
        [ -creation_user creation_user ] [ -creation_ip creation_ip ]

    Post a message in the chat room. This actually means persisting the message in the database, but only if the chat room is configured to be archived.

    Switches:
    -msg
    (optional)
    the message
    -creation_user
    (optional)
    the alleged creation user of the persisted message. Won't be set automatically from the connection
    -creation_ip
    (optional)
    the alleged creation IP of the persisted message. Won't be set automatically from the connection

    Partial Call Graph (max 5 caller/called nodes):
    %3 db_nextval db_nextval (public) xo::db::chat_room instproc post_message xo::db::chat_room instproc post_message xo::db::chat_room instproc post_message->db_nextval

    Testcases:
    No testcase defined.
    if {!${:archive_p}} {
        return
    }
    set room_id ${:room_id}
    set message_id [db_nextval acs_object_id_seq]
    ::xo::dc dml save_message {
        insert into chat_msgs (
                               msg_id,
                               room_id,
                               msg,
                               creation_user,
                               creation_ip,
                               creation_date)
        values (
                :message_id,
                :room_id,
                :msg,
                :creation_user,
                :creation_ip,
                current_timestamp
                )
    }
  • pretty_name (setter)

  • revoke_moderator (scripted, public)

     <instance of xo::db::chat_room[i]> revoke_moderator \
        -party_id party_id 

    Revoke moderation rights on the chat room for specified party

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::revoke permission::revoke (public) xo::db::chat_room instproc revoke_moderator xo::db::chat_room instproc revoke_moderator xo::db::chat_room instproc revoke_moderator->permission::revoke

    Testcases:
    No testcase defined.
    set parties $party_id
    foreach party_id $parties {
        permission::revoke  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_room_moderate
    }
  • revoke_user (scripted, public)

     <instance of xo::db::chat_room[i]> revoke_user -party_id party_id 

    Revokes operative privileges to the specified party. In detail, the permission to read and write for the chat room.

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::revoke permission::revoke (public) xo::db::chat_room instproc revoke_user xo::db::chat_room instproc revoke_user xo::db::chat_room instproc revoke_user->permission::revoke

    Testcases:
    No testcase defined.
    ::xo::dc transaction {
        foreach privilege {read write} {
            permission::revoke  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_${privilege}
        }
    }
  • room_id (setter)

  • save_new (scripted, public)

     <instance of xo::db::chat_room[i]> save_new \
        [ -creation_user creation_user ] args [ args... ]

    Create a new chat room and make sure its creator is granted the necessary privileges

    Switches:
    -creation_user
    (optional)
    Parameters:
    args
    Returns:
    new chat room id

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    if {![info exists :context_id]} {
        set :context_id ${:package_id}
    }
    
    #
    # save_new wants certain object metadata to be supplied
    # explicitly to the call. Here we pass them as arguments when
    # we detect them as instance variables.
    #
    set args [list]
    foreach var {package_id context_id creation_ip creation_user} {
        if {[info exists :${var}] && "-${var}" ni $args} {
            lappend args -${var} [set :${var}]
        }
    }
    
    ::xo::dc transaction {
        set room_id [next {*}$args]
        :grant_creator
    }
    
    return $room_id
  • transcript_messages (scripted, public)

     <instance of xo::db::chat_room[i]> transcript_messages

    Formats the current content of a chat room as a list of messages formatted so they can be displayed or stored in the transcript.

    Returns:
    list of formatted messages

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    set room_id ${:room_id}
    set contents [list]
    ::xo::dc foreach get_archives_messages {
        select msg,
        creation_user,
        to_char(creation_date, 'DD.MM.YYYY hh24:mi:ss') as creation_date
        from chat_msgs
        where room_id = :room_id
        and msg is not null
        order by creation_date
    } {
        if {$creation_user > 0} {
            set user_name [::chat::Package get_user_name -user_id $creation_user]
            if {$user_name eq ""} {
                set user_name Unknown
            }
        } else {
            set user_name "system"
        }
        lappend contents "\[$creation_date\] ${user_name}$msg"
    }
    return $contents
  • unban_user (scripted, public)

     <instance of xo::db::chat_room[i]> unban_user -party_id party_id 

    Lift ban on specified user from the chat room

    Switches:
    -party_id
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 permission::revoke permission::revoke (public) xo::db::chat_room instproc unban_user xo::db::chat_room instproc unban_user xo::db::chat_room instproc unban_user->permission::revoke

    Testcases:
    No testcase defined.
    permission::revoke  -party_id  $party_id  -object_id ${:room_id}  -privilege chat_ban
  • update (scripted)

    ::xo::dc transaction {
      next
      :instvar object_id pretty_name description logout_messages_p archive_p auto_flush_p auto_transcript_p messages_time_window avatar_p active_p login_messages_p
      ::xo::dc dml update_chat_rooms {update chat_rooms
        set pretty_name = :pretty_name,description = :description,logout_messages_p = :logout_messages_p,archive_p = :archive_p,auto_flush_p = :auto_flush_p,auto_transcript_p = :auto_transcript_p,messages_time_window = :messages_time_window,avatar_p = :avatar_p,active_p = :active_p,login_messages_p = :login_messages_p where room_id = :object_id
      }
    }