2d05fed8578407f6554a57255477d2faa63f02ab
[fms.git] / src / board.cpp
1 #include "../include/board.h"\r
2 #include "../include/stringfunctions.h"\r
3 \r
4 #include <Poco/DateTimeParser.h>\r
5 \r
6 #ifdef XMEM\r
7         #include <xmem.h>\r
8 #endif\r
9 \r
10 Board::Board()\r
11 {\r
12         m_boardid=-1;\r
13         m_boardname="";\r
14         m_boarddescription="";\r
15         m_datecreated.assign(1970,1,1);\r
16         m_lowmessageid=0;\r
17         m_highmessageid=0;\r
18         m_messagecount=0;\r
19         m_savereceivedmessages=true;\r
20         m_addedmethod="";\r
21 }\r
22 \r
23 Board::Board(const long boardid)\r
24 {\r
25         Load(boardid);  \r
26 }\r
27 \r
28 Board::Board(const std::string &boardname)\r
29 {\r
30         Load(boardname);\r
31 }\r
32 \r
33 Board::Board(const long boardid, const std::string &boardname, const std::string &boarddescription, const std::string datecreated, const long lowmessageid, const long highmessageid, const long messagecount, const bool savereceivedmessages, const std::string &addedmethod)\r
34 {\r
35         m_boardid=boardid;\r
36         m_boardname=boardname;\r
37         m_boarddescription=boarddescription;\r
38         m_lowmessageid=lowmessageid;\r
39         m_highmessageid=highmessageid;\r
40         m_messagecount=messagecount;\r
41         m_savereceivedmessages=savereceivedmessages;\r
42         m_addedmethod=addedmethod;\r
43 \r
44         SetDateFromString(datecreated);\r
45 \r
46 }\r
47 \r
48 \r
49 const bool Board::Load(const long boardid)\r
50 {\r
51         // clear current values\r
52         m_boardid=-1;\r
53         m_boardname="";\r
54         m_boarddescription="";\r
55         m_datecreated.assign(1970,1,1);\r
56         m_lowmessageid=0;\r
57         m_highmessageid=0;\r
58         m_messagecount=0;\r
59         m_addedmethod="";\r
60 \r
61         // Optimize query by not using vwBoardStats\r
62         //SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, HighMessageID, LowMessageID, MessageCount, SaveReceivedMessages, AddedMethod FROM tblBoard LEFT JOIN vwBoardStats ON tblBoard.BoardID=vwBoardStats.BoardID WHERE tblBoard.BoardID=?;");\r
63         SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, IFNULL(MAX(MessageID),'0') AS HighMessageID, IFNULL(MIN(MessageID),'0') AS LowMessageID, COUNT(MessageID) AS MessageCount, SaveReceivedMessages, AddedMethod FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblBoard.BoardID=? AND (MessageID IS NULL OR MessageID>=0);");\r
64         st.Bind(0,boardid);\r
65         st.Step();\r
66 \r
67         if(st.RowReturned())\r
68         {\r
69                 int tempint;\r
70                 std::string tempstr;\r
71                 std::vector<std::string> dateparts;\r
72 \r
73                 m_boardid=boardid;\r
74                 st.ResultText(0,m_boardname);\r
75                 st.ResultText(1,m_boarddescription);\r
76                 st.ResultText(2,tempstr);\r
77 \r
78                 SetDateFromString(tempstr);\r
79 \r
80                 tempint=0;\r
81                 st.ResultInt(3,tempint);\r
82                 m_highmessageid=tempint;\r
83                 tempint=0;\r
84                 st.ResultInt(4,tempint);\r
85                 m_lowmessageid=tempint;\r
86                 tempint=0;\r
87                 st.ResultInt(5,tempint);\r
88                 m_messagecount=tempint;\r
89                 st.ResultText(6,tempstr);\r
90                 if(tempstr=="true")\r
91                 {\r
92                         m_savereceivedmessages=true;\r
93                 }\r
94                 else\r
95                 {\r
96                         m_savereceivedmessages=false;\r
97                 }\r
98                 st.ResultText(7,m_addedmethod);\r
99 \r
100                 return true;\r
101         }\r
102         else\r
103         {\r
104                 return false;\r
105         }\r
106 }\r
107 \r
108 const bool Board::Load(const std::string &boardname)            // same as loading form boardid - but using name\r
109 {\r
110         /*\r
111         SQLite3DB::Statement st=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE BoardName=?;");\r
112         st.Bind(0,boardname);\r
113         st.Step();\r
114         if(st.RowReturned())\r
115         {\r
116                 int tempint;\r
117                 st.ResultInt(0,tempint);\r
118                 return Load(tempint);\r
119         }\r
120         else\r
121         {\r
122                 return false;\r
123         }\r
124         */\r
125 \r
126         // clear current values\r
127         m_boardid=-1;\r
128         m_boardname="";\r
129         m_boarddescription="";\r
130         m_datecreated.assign(1970,1,1);\r
131         m_lowmessageid=0;\r
132         m_highmessageid=0;\r
133         m_messagecount=0;\r
134         int tempint=-1;\r
135         m_addedmethod="";\r
136 \r
137         // Optimize query by not using vwBoardStats\r
138         //SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, HighMessageID, LowMessageID, MessageCount, SaveReceivedMessages, tblBoard.BoardID, AddedMethod FROM tblBoard LEFT JOIN vwBoardStats ON tblBoard.BoardID=vwBoardStats.BoardID WHERE tblBoard.BoardName=?;");\r
139         SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, IFNULL(MAX(MessageID),'0') AS HighMessageID, IFNULL(MIN(MessageID),'0') AS LowMessageID, COUNT(MessageID) AS MessageCount, SaveReceivedMessages, tblBoard.BoardID, AddedMethod FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblBoard.BoardName=? AND (MessageID IS NULL OR MessageID>=0);");\r
140         st.Bind(0,boardname);\r
141         st.Step();\r
142 \r
143         if(st.RowReturned())\r
144         {\r
145                 int tempint;\r
146                 std::string tempstr;\r
147                 std::vector<std::string> dateparts;\r
148 \r
149                 st.ResultText(0,m_boardname);\r
150                 st.ResultText(1,m_boarddescription);\r
151                 st.ResultText(2,tempstr);\r
152                 st.ResultInt(7,tempint);        // boardid\r
153                 m_boardid=tempint;\r
154 \r
155                 SetDateFromString(tempstr);\r
156 \r
157                 tempint=0;\r
158                 st.ResultInt(3,tempint);\r
159                 m_highmessageid=tempint;\r
160                 tempint=0;\r
161                 st.ResultInt(4,tempint);\r
162                 m_lowmessageid=tempint;\r
163                 tempint=0;\r
164                 st.ResultInt(5,tempint);\r
165                 m_messagecount=tempint;\r
166                 st.ResultText(6,tempstr);\r
167                 if(tempstr=="true")\r
168                 {\r
169                         m_savereceivedmessages=true;\r
170                 }\r
171                 else\r
172                 {\r
173                         m_savereceivedmessages=false;\r
174                 }\r
175                 st.ResultText(8,m_addedmethod);\r
176 \r
177                 return true;\r
178         }\r
179         else\r
180         {\r
181                 return false;\r
182         }\r
183 \r
184 }\r
185 \r
186 void Board::SetDateFromString(const std::string &datestring)\r
187 {\r
188         // break out date created  - date should be in format yyyy-mm-dd HH:MM:SS, so we split on "-", " " (space), and ":"\r
189         int tzdiff=0;\r
190         if(Poco::DateTimeParser::tryParse(datestring,m_datecreated,tzdiff)==false)\r
191         {\r
192                 m_log->error("Board::SetDateFromString could not parse date "+datestring);\r
193         }\r
194 }\r