Index: openacs-4/contrib/packages/irc-logger/tcl/irc-logger-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/irc-logger/tcl/irc-logger-procs.tcl,v diff -u -N -r1.1 -r1.2 --- openacs-4/contrib/packages/irc-logger/tcl/irc-logger-procs.tcl 30 Jan 2003 02:48:48 -0000 1.1 +++ openacs-4/contrib/packages/irc-logger/tcl/irc-logger-procs.tcl 31 Jan 2003 06:27:32 -0000 1.2 @@ -218,3 +218,111 @@ -date $gmt_today \ -package_id $package_id } + +namespace eval dom::xpathFunc::irc::logger { + + # The namespace of the tDOM XSLT extension functions for the + # irc-logger module. + +} + +ad_proc -public dom::xpathFunc::irc::logger::user_link { + ctxNode + pos + nodeListType + nodeList + args +} { + +

Create a link to the user account on this site where the IRC + nick matches the user's screen name.

+ +

Rolf (rolf@pointsman.de) from the tDOM team on tDOM extension + functions:

+ +
+

If an XPath expr (both for the selectNodes method and in XSLT + stylesheets) uses a not standard XPath function name (you cannot + 'overwrite' the C coded standard built-in functions), the engine + looks, if there is a tcl proc with the given function name in + the ::dom::xpathFunc:: namespace. In other words: all extension + functions procs must reside in the namespace ::dom::xpathFunc or + in a child namespace of that namespace. If the XPath extension + function has a prefix, the prefix is expanded to the namespace + URI and that namespace URI must be the name of the child + namespace of the ::dom::xpathFunc namespace.

+ +

If there is such a proc, this proc is called with the following + arguments: ctxNode pos nodeListType nodeList args. The 'args' + are, as type/value pairs, the arguments, that are given to the + extension functions. (E.g. if you have + myExtensionFunction('foo'), you will get two args, the first + "string" the second "foo").

+ +

The tcl proc, which implements the extension function must + return a list of two elements: { }. The possible + types at the moment are: "bool", "number", "string", "nodes".

+ +

But don't get confused by my probably (too) vague + explanations. Just look at the examples in the xpath.test and + tdom.tcl files. For almost all 'real life' needs, you should get + it very fast, what to do from that usage examples.

+
+ + @author Bart Teeuwisse (bart.teeuwisse@thecodemill.biz) + @creation-date 2003-01-31 + + @param ctxNode See tDOM documentation. + @param pos See tDOM documentation. + @param nodeListType See tDOM documentation. + @param nodeList See tDOM documentation. + + @param args A single (type, value) pair of type 'attrnodes' with + the nick of the IRC user. + + @return A single (type, value) pair with a link to the user + account on the site. Or just the nick if no user account was found. + + @error The empty string. + +} { + + # Default return value + + set link "" + + # Limited parameter checking. The tDOM related parameters don't + # matter. + + if {[llength $args] == 2} { + + # Get argument type and value. + + foreach {type value} $args { + break + } + + # Check that the parameter an attribute node is and extract + # the value of the attribute. + + if {[string equal $type "attrnodes"]} { + set nick [lindex [lindex $value end] end] + + # Locate the first user with a screen name of 'nick' on this + # site. DB caching reduces the number of hits on the DB + # itself. + + if {[db_0or1row get_user {}]} { + set link "$nick" + } else { + set link $nick + } + } else { + ns_log warning "dom::xpathFunc::irc::logger::user_link wrong parameter type '$type($value)'; type should have been attrnodes" + } + } else { + ns_log warning "dom::xpathFunc::irc::logger::user_link accepts only 1 parameter, received [llength $args] parameters" + } + + return [list string $link] +}