Monday, November 08, 2010 at 12:02 AM.
system.verbs.apps.xmlStorageSystem.nodeTypes.users.commands.getUsersOutline
on getUsersOutline (usersXmlUrl, adroutline = @xmlStorageSystem.data.usersOutline, flSignedOnOnly = true, flMessages = true) {
<<Changes
<<Friday, August 04, 2000 at 1:01:06 PM by DW
<<New script. Builds an outline containing the names of each of the currently signed-on users.
<<Monday, August 07, 2000 at 1:49:03 PM by DW
<<Use op.attributes.addgroup to add the attributes to each headline.
<<Sunday, August 13, 2000 at 12:39:56 AM by DW
<<Accomodate format changes on OurFavoriteSongs.Com.
<<Tuesday, August 15, 2000 at 1:00:12 PM by DW
<<Grab each users' email address from the users.xml file link it into the headline.
<<Thursday, August 17, 2000 at 10:54:53 AM by DW
<<If you want a list of all users, call it with flSignedOnOnly false.
<<Thursday, August 17, 2000 at 8:57:21 PM by DW
<<Give the top-level headline attributes, of type "users" so you can expand/collapse to refresh it.
<<Sunday, August 20, 2000 at 6:24:55 PM by DW
<<If the window already exists, re-use it, so it retains its size and shape. If it's new, zoom it after opening.
<<Monday, August 21, 2000 at 10:59:48 AM by DW
<<Sort the user list by name, not by email address.
<<Saturday, September 02, 2000 at 12:22:22 PM by PBS
<<Over-ride tcp.httpClient messages.
<<Wednesday, September 20, 2000 at 2:22:43 PM by PBS
<<Call playlist.httpClient so the script can accept OPML documents.
<<Fri, Sep 22, 2000 at 4:52:21 PM by PBS
<<Check the offline status before getting the users outline.
if defined (tcp.isOffline) {
if tcp.isOffline () { //PBS 09/22/00: check offline status
return (false)}};
local (flnewoutline = false);
if not defined (adroutline^) {
new (outlinetype, adroutline);
flnewoutline = true};
local (oldtarget = target.set (adroutline));
if not flnewoutline {
op.firstsummit ();
op.deletesubs ()};
op.setlinetext (clock.now ());
bundle { //add atts to the top-level headline
local (atts);
new (tabletype, @atts);
atts.type = "users";
atts.flSignedOnOnly = flSignedOnOnly;
atts.xmlUrl = usersXmlUrl;
op.attributes.addgroup (@atts)};
if flMessages { //PBS 09/02/00: over-ride tcp.httpClient messages
if flSignedOnOnly {
msg ("Getting signed-on users outline...")}
else {
msg ("Getting all users outline...")}};
local (urlParts = string.urlSplit (usersXmlUrl));
local (port = 80);
if urlParts[2] contains ":" {
port = string.nthField (urlParts[2], ':', 2);
urlParts[2] = string.nthField (urlParts[2], ':', 1)};
local (xmltext = string.httpResultSplit (tcp.httpClient (server:urlParts[2], port:port, path:urlParts[3], flMessages:false, flAcceptOpml:true)));
local (xstruct);
xml.compile (xmltext, @xstruct);
local (adrusers = xml.getaddress (@xstruct, "users"));
local (userslist = xml.getaddresslist (adrusers, "user"), adruser, insertdir = right);
for adruser in userslist {
op.insert (xml.getattribute (adruser, "name")^, insertdir); insertdir = down;
local (atts);
new (tabletype, @atts);
atts.type = "user";
atts.url = xml.getattribute (adruser, "url")^;
atts.email = xml.getattribute (adruser, "email")^;
atts.userAgent = xml.getattribute (adruser, "userAgent")^;
atts.whenLoggedOn = xml.getattribute (adruser, "whenLoggedOn")^;
op.attributes.addgroup (@atts)};
op.sort ();
op.firstsummit ();
if not window.isOpen (adroutline) {
edit (adroutline, "Users")};
if flnewoutline {
window.zoom (adroutline)};
try {target.set (oldtarget)};
msg (""); //PBS 09/02/00: clear messages
return (true)};
bundle { //testing
getUsersOutline ("http://www.ourfavoritesongs.com/users.xml")}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.