00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __CLIDB_H__
00012 #define __CLIDB_H__
00013
00014 #include "fastdb.h"
00015 #include "wwwapi.h"
00016
00017 class History;
00018 class Manager;
00019 class Segment;
00020
00021 class Client {
00022 public:
00023 char const* organization;
00024 char const* phone;
00025 char const* phone2;
00026 char const* fax;
00027 char const* email;
00028 char const* www;
00029 char const* person;
00030 char const* person2;
00031 char const* lpr;
00032 char const* addr;
00033 char const* info;
00034 char const* status;
00035 int clientId;
00036 dbReference<Segment> segment;
00037 dbArray<dbReference<History> > history;
00038
00039 void print(WWWconnection& con) const;
00040
00041 TYPE_DESCRIPTOR((KEY(clientId, INDEXED),
00042 FIELD(organization),
00043 FIELD(phone),
00044 FIELD(phone2),
00045 FIELD(fax),
00046 FIELD(email),
00047 FIELD(www),
00048 FIELD(person),
00049 FIELD(person2),
00050 FIELD(lpr),
00051 FIELD(addr),
00052 FIELD(info),
00053 FIELD(status),
00054 RELATION(segment, clients),
00055 OWNER(history, client)));
00056 };
00057
00058 class History {
00059 public:
00060 int messageId;
00061 char const* message;
00062 dbDateTime date;
00063 dbReference<Manager> manager;
00064 dbReference<Client> client;
00065
00066 void print(WWWconnection& con) const;
00067
00068 TYPE_DESCRIPTOR((KEY(messageId, INDEXED),
00069 FIELD(message),
00070 FIELD(date),
00071 RELATION(client, history),
00072 RELATION(manager, messages)));
00073 };
00074
00075 class Manager {
00076 public:
00077 char const* name;
00078 char const* IPaddr;
00079 int flags;
00080 dbReference<Segment> segment;
00081 dbArray<dbReference<History> > messages;
00082
00083 static bool loginFromAnyHost;
00084
00085 enum {
00086 isMinAdmin = 1,
00087 isAdministrator = 2
00088 };
00089
00090 void print(WWWconnection& con) const;
00091
00092 TYPE_DESCRIPTOR((KEY(name, INDEXED),
00093 FIELD(IPaddr),
00094 FIELD(flags),
00095 RELATION(segment, managers),
00096 RELATION(messages, manager)));
00097 };
00098
00099 class Segment {
00100 public:
00101 char const* name;
00102 dbArray<dbReference<Client> > clients;
00103 dbArray<dbReference<Manager> > managers;
00104
00105 void print(WWWconnection& con) const;
00106
00107 TYPE_DESCRIPTOR((KEY(name, INDEXED),
00108 OWNER(clients, segment),
00109 OWNER(managers, segment)));
00110 };
00111
00112 class Sequencer {
00113 public:
00114 int lastClientId;
00115 int lastMessageId;
00116
00117 TYPE_DESCRIPTOR((FIELD(lastClientId),
00118 FIELD(lastMessageId)));
00119 };
00120
00121 class ThreadContext {
00122 public:
00123 dbCursor<Client> clients;
00124 dbCursor<Manager> managers;
00125 dbCursor<Segment> segments;
00126 dbCursor<History> messages;
00127 dbCursor<Sequencer> sequencer;
00128
00129 dbQuery qClient;
00130 dbQuery qManager;
00131 dbQuery qClients;
00132 dbQuery qManagers;
00133 dbQuery qSegment;
00134 dbQuery qMessage;
00135 dbQuery qMessages;
00136
00137 bool managerForm;
00138
00139 int clientId;
00140 int messageId;
00141 char* name;
00142 dbArray<dbReference<Client> >* clientsArray;
00143 dbArray<dbReference<Manager> >* managersArray;
00144 dbArray<dbReference<History> >* messagesArray;
00145
00146 ThreadContext();
00147 static ThreadContext& of(WWWconnection& con);
00148 };
00149
00150 #endif