added: SessionContainer special container used by SessionManager

sessions are indexed by id and time (last used time)
changed: old sessions are deleted
       parameter: session_max_iddle in the config file
added: function 'who'


git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@483 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2009-01-31 06:53:36 +00:00
parent a48766871d
commit 7d73d048c8
29 changed files with 540 additions and 61 deletions

View File

@@ -1,4 +1,4 @@
o = templates.o sys.o item.o doc.o user.o dir.o done.o priv.o patterncacher.o
o = templates.o sys.o item.o doc.o user.o dir.o done.o priv.o patterncacher.o who.o
all: templates.a

View File

@@ -91,3 +91,18 @@ user.o: ../core/postparser.h ../core/cookieparser.h ../core/item.h
user.o: ../core/db.h ../core/error.h ../core/user.h ../core/group.h
user.o: ../core/users.h ../core/groups.h ../core/log.h patterncacher.h
user.o: ../app/templates.h
who.o: templates.h ../../ezc/src/ezc.h ../core/data.h ../core/misc.h
who.o: ../core/log.h ../core/item.h ../core/error.h ../core/dirs.h
who.o: ../core/db.h ../core/dircontainer.h ../core/user.h ../core/group.h
who.o: ../core/ugcontainer.h ../core/users.h ../core/groups.h
who.o: ../core/functions.h ../core/function.h ../core/functioncodeparser.h
who.o: ../core/request.h ../core/requesttypes.h ../core/session.h
who.o: ../core/done.h ../core/getparser.h ../core/httpsimpleparser.h
who.o: ../core/postparser.h ../core/cookieparser.h ../core/item.h
who.o: ../core/db.h ../core/error.h ../core/user.h ../core/group.h
who.o: ../core/users.h ../core/groups.h ../core/log.h patterncacher.h
who.o: ../app/templates.h ../core/sessioncontainer.h
who.o: ../core/requestcontroller.h ../core/data.h ../core/request.h
who.o: ../content/content.h ../templates/templates.h ../core/misc.h
who.o: ../core/function.h ../core/functionparser.h ../app/content.h
who.o: ../core/sessionmanager.h ../core/sessioncontainer.h

View File

@@ -22,6 +22,7 @@ Ezc::Pattern pat_fun_mkdir;
Ezc::Pattern pat_fun_default;
Ezc::Pattern pat_fun_priv;
Ezc::Pattern pat_fun_rm;
Ezc::Pattern pat_fun_who;
Ezc::Pattern pat_err_item_required;
Ezc::Pattern pat_err_404;
Ezc::Pattern pat_err_per_denied;
@@ -96,6 +97,10 @@ Ezc::Pattern * p = 0;
p = pattern_cacher.GetPattern(request.item);
break;
case FUN_WHO:
p = &pat_fun_who;
break;
default:
break;
}
@@ -278,6 +283,16 @@ void Templates::CreateFunctions()
functions.Insert("content", content);
/*
who
*/
functions.Insert("who_tab", who_tab);
functions.Insert("who_tab_lp", who_tab_lp);
functions.Insert("who_tab_user", who_tab_user);
functions.Insert("who_tab_time", who_tab_time);
functions.Insert("who_tab_last_time", who_tab_last_time);
// !! tymczasowa
functions.Insert("is_group_tv", is_group_tv);
@@ -331,6 +346,9 @@ void Templates::Read()
pat_err_others.Directory(data.templates);
pat_err_others.ParseFile("err_others.html");
pat_fun_who.Directory(data.templates);
pat_fun_who.ParseFile("who.html");
CreateFunctions();
#ifdef APPTEMPLATES

View File

@@ -11,6 +11,8 @@
#define headerfiletemplates
#include <iomanip>
#include <set>
#include "../../ezc/src/ezc.h"
#include "../core/data.h"
@@ -152,6 +154,16 @@ namespace TemplatesFunctions
void done_loggedout(Info & i);
/*
who
*/
void who_tab(Info & i);
void who_tab_lp(Info & i);
void who_tab_user(Info & i);
void who_tab_time(Info & i);
void who_tab_last_time(Info & i);
} // namespace TemplatesFunctions

102
templates/who.cpp Executable file
View File

@@ -0,0 +1,102 @@
/*
* This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed
*
* Copyright (c) 2008, Tomasz Sowa
* All rights reserved.
*
*/
#include "templates.h"
#include "../core/sessioncontainer.h"
#include "../core/requestcontroller.h"
#include "../core/misc.h"
namespace TemplatesFunctions
{
static size_t who_reqid = 0;
SessionContainer::Iterator who_iterator;
size_t who_lp;
bool who_init()
{
if( who_reqid != request.id )
{
who_reqid = request.id;
who_iterator = req_controller.SessionBegin();
who_lp = 1;
}
return who_iterator != req_controller.SessionEnd();
}
void who_tab(Info & i)
{
who_init();
if( i.iter != 0 && who_iterator != req_controller.SessionEnd() )
{
++who_iterator;
++who_lp;
}
i.result = who_iterator != req_controller.SessionEnd();
}
void who_tab_lp(Info & i)
{
if( !who_init() )
return;
i.out << who_lp;
}
void who_tab_user(Info & i)
{
if( !who_init() )
return;
if( who_iterator->puser )
i.out << who_iterator->puser->name;
}
void who_tab_time(Info & i)
{
if( !who_init() )
return;
i.out << DateToStr( who_iterator->tm_time.tm_mon + 1,
who_iterator->tm_time.tm_mday,
who_iterator->tm_time.tm_hour,
who_iterator->tm_time.tm_min,
who_iterator->tm_time.tm_sec );
}
void who_tab_last_time(Info & i)
{
if( !who_init() )
return;
i.out << DateToStr( who_iterator->tm_last_time.tm_mon + 1,
who_iterator->tm_last_time.tm_mday,
who_iterator->tm_last_time.tm_hour,
who_iterator->tm_last_time.tm_min,
who_iterator->tm_last_time.tm_sec );
}
} // namespace TemplatesFunctions