Class ::xowiki::includelet::presence (public)

 ::xowiki::IncludeletClass ::xowiki::includelet::presence[i]

Defined in /var/www/openacs.org/packages/xowiki/tcl/includelet-procs.tcl

Show users actively in the wiki.

Testcases:
No testcase defined.
Source code:
namespace eval ::xowiki::includelet {}
::nsf::object::alloc ::xowiki::IncludeletClass ::xowiki::includelet::presence {set :__default_metaclass ::xotcl::Class
   set :__default_superclass ::xotcl::Object
   set :aggregating false
   set :cacheable false
   set :localized true
   set :personalized true}
::xowiki::includelet::presence instproc render {} {
    :get_parameters

    set summary 0
    if {[::xo::cc user_id] == 0} {
      switch -- $show_anonymous {
        nothing {return ""}
        all     {set summary 0}
        default {set summary 1}
      }
    }

    if {[info exists page] && $page eq "this"} {
      set extra_where_clause "and page_id = [${:__including_page} item_id] "
      set what " on page [${:__including_page} title]"
    } else {
      set extra_where_clause ""
      set what " in community [::$package_id instance_name]"
    }

    if {!$summary} {
      set select_users "user_id, to_char(max(time),'YYYY-MM-DD HH24:MI:SS') as max_time from xowiki_last_visited "
    }

    # allow for caching prepared value.
    set since [::xo::dc interval $interval]
    set since_condition "time > TO_TIMESTAMP(:since,'YYYY-MM-DD HH24:MI:SS')"

    set where_clause "package_id=:package_id and $since_condition $extra_where_clause"
    set when "<br>in last [ns_quotehtml $interval]"

    set output ""

    if {$summary} {
      set count [::xo::dc get_value presence_count_users  "select count(distinct user_id) from xowiki_last_visited WHERE $where_clause"]
    } else {
      set values [::xo::dc list_of_lists get_users  [::xo::dc select  -vars "user_id, to_char(max(time),'YYYY-MM-DD HH24:MI:SS') as max_time"  -from xowiki_last_visited  -where $where_clause  -groupby user_id  -orderby "max_time desc"  -limit $max_users ]]
      set count [llength $values]
      if {$count == $max_users} {
        # we have to check, whether there were more users...
        set count [::xo::dc get_value presence_count_users  "select count(distinct user_id) from xowiki_last_visited WHERE $where_clause"]
      }
      foreach value  $values {
        lassign $value user_id time
        set seen($user_id$time

        regexp {^([^.]+)[.]} $time _ time
        set pretty_time [util::age_pretty -timestamp_ansi $time  -sysdate_ansi [lc_clock_to_ansi [clock seconds]]  -mode_3_fmt "%d %b %Y, at %X"]
        set name [::xo::get_user_name $user_id]

        append output [subst {<tr><td class='user'>[ns_quotehtml $name]</td>
          <td class='timestamp'>&nbsp;-&nbsp;[ns_quotehtml $pretty_time]</td></tr>
        }]
      }
      if {$output ne ""} {set output "<table>$output</table>\n"}
    }
    set users [expr {$count == 0 ? "No registered users" :
                     $count == 1 ? "1 registered user" :
                     "$count registered users"}]
    return "<div class='title'>[ns_quotehtml $users$what]$when</div>$output"
  }
::xowiki::includelet::presence instparametercmd __decoration
::xowiki::includelet::presence instparametercmd parameter_declaration
::nsf::relation::set ::xowiki::includelet::presence superclass ::xowiki::Includelet

::nx::slotObj -container slot ::xowiki::includelet::presence
::xowiki::includelet::presence::slot eval {set :__parameter {
        {__decoration rightbox}
        {parameter_declaration {
          {-interval "10 minutes"}
          {-max_users:integer 40}
          {-show_anonymous "summary"}
          {-page}
        }}
      }}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::includelet::presence::slot::parameter_declaration {set :accessor public
   set :configurable true
   set :convert false
   set :default {
          {-interval "10 minutes"}
          {-max_users:integer 40}
          {-show_anonymous "summary"}
          {-page}
        }
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::includelet::presence
   set :incremental 0
   set :manager ::xowiki::includelet::presence::slot::parameter_declaration
   set :methodname parameter_declaration
   set :multiplicity 1..1
   set :name parameter_declaration
   set :parameterSpec {-parameter_declaration:substdefault {
          {-interval "10 minutes"}
          {-max_users:integer 40}
          {-show_anonymous "summary"}
          {-page}
        }}
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}

::nsf::object::alloc ::xotcl::Attribute ::xowiki::includelet::presence::slot::__decoration {set :accessor public
   set :configurable true
   set :convert false
   set :default rightbox
   set :defaultmethods {}
   set :disposition alias
   set :domain ::xowiki::includelet::presence
   set :incremental 0
   set :manager ::xowiki::includelet::presence::slot::__decoration
   set :methodname __decoration
   set :multiplicity 1..1
   set :name __decoration
   set :parameterSpec {-__decoration:substdefault rightbox}
   set :per-object false
   set :position 0
   set :required false
   set :substdefault 0b111
   set :trace none
   : init}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: