#include "String.h" #include "Action.h" #include "HttpServ.h" #include "config.h" Action * Action::start = 0; static int counter = 0; static String genurl(const String & u) { if (u.strlen()) { return u; } else { // Si l'url passée en paramètre est vide, on génère une URL // sous la forme TmpXXXX où XXXX est une valeur qui s'incrémente. return String("Tmp") + (counter++); } } Action::Action(const String & u) : next(start), prev(0), URL(genurl(u)), hastoclean(false), accessed(false) { start = this; if (next) next->prev = this; } Action::~Action() { if (start == this) { start = next; } if (next) next->prev = prev; if (prev) prev->next = next; } Action * Action::Look4URL(const String & URL) { Action * p; for (p = start; p; p = p->next) { if (!p->GetURL().strlen()) { // Si l'action que l'on vient de tester n'a pas d'URL, elle ne sert à rien. // On l'efface donc de notre liste. GetURL renvoie une chaine vide si l'action // était déclarée en mode CleanUp, puis a été accédée. delete p; } else { if (URL == p->GetURL()) return p; } } return 0; } /* * Voici la skin principale. Elle nécessite un fichier 'grain.png' dans le répertoire datas * et un fichier 'style.css' (fournis) */ void Action::SendHead(Handle * h) { (*h) << "" << GetTitle() << "" << endnl << "" << endnl << "" << endnl << "" << endnl << "
" << endnl << "

" << GetTitle() << "

" << endnl << "
" << endnl; } void Action::SendFoot(Handle * h) { (*h) << "
" << endnl; } String Action::GetURL(void) { // Comme décrit plus haut, il faut renvoyer la chaîne vide si l'action est en // mode CleanUp et a été lue. return (hastoclean && accessed) ? "" : URL; } void Action::CleanUp(void) { hastoclean = true; } void Action::Accessed(void) { accessed = true; } void Action::ShowButton(Handle * h, const String & l, const String & u) { (*h) << "

" << endnl << "" << endnl << "
" << endnl; }