Index: openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/Attic/xowiki-portlet-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 17 Nov 2006 21:26:23 -0000 1.2 +++ openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 2 Dec 2006 14:09:35 -0000 1.3 @@ -359,6 +359,62 @@ return $content } -} + ############################################################################# + # presence + # + Class create presence \ + -superclass ::xowiki::Portlet \ + -parameter {{__decoration plain}} + + presence instproc render {} { + my initialize -parameter { + {-interval "10 minutes"} + {-max_users:integer 40} + {-page} + } + my get_parameters + + set sql "select user_id,time from xowiki_last_visited \ + where package_id = $package_id " + + if {[info exists page] && $page eq "this"} { + my instvar __including_page + append sql "and page_id = [$__including_page item_id] " + set limit_clause "limit $max_users" + set what "last on page [$__including_page title]" + } else { + append sql "and time > now() - '$interval'::interval " + set limit_clause "" + set what "currently in community [$package_id instance_name]" + + } + + append sql "order by time desc $limit_clause" + + set count 0 + set output "" + db_foreach get_visitors $sql { + if {[info exists seen($user_id)]} continue + set seen($user_id) $time + if {[incr count]>$max_users} { + set count $max_users + break + } + + if {[::xo::cc user_id]>0} { + regexp {^([^.]+)[.]} $time _ time + set pretty_time [util::age_pretty -timestamp_ansi $time \ + -sysdate_ansi [clock_to_ansi [clock seconds]] \ + -mode_3_fmt "%d %b %Y, at %X"] + + set name [::xo::get_user_name $user_id] + append output "\n" + } + } + if {$output ne ""} {set output "
$name$pretty_time
$output
\n"} + + return "

[array size seen] Users $what


$output
" + } +}