version 0.3.0
[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         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
62         st.Bind(0,boardid);\r
63         st.Step();\r
64 \r
65         if(st.RowReturned())\r
66         {\r
67                 int tempint;\r
68                 std::string tempstr;\r
69                 std::vector<std::string> dateparts;\r
70 \r
71                 m_boardid=boardid;\r
72                 st.ResultText(0,m_boardname);\r
73                 st.ResultText(1,m_boarddescription);\r
74                 st.ResultText(2,tempstr);\r
75 \r
76                 SetDateFromString(tempstr);\r
77 \r
78                 tempint=0;\r
79                 st.ResultInt(3,tempint);\r
80                 m_highmessageid=tempint;\r
81                 tempint=0;\r
82                 st.ResultInt(4,tempint);\r
83                 m_lowmessageid=tempint;\r
84                 tempint=0;\r
85                 st.ResultInt(5,tempint);\r
86                 m_messagecount=tempint;\r
87                 st.ResultText(6,tempstr);\r
88                 if(tempstr=="true")\r
89                 {\r
90                         m_savereceivedmessages=true;\r
91                 }\r
92                 else\r
93                 {\r
94                         m_savereceivedmessages=false;\r
95                 }\r
96                 st.ResultText(7,m_addedmethod);\r
97 \r
98                 return true;\r
99         }\r
100         else\r
101         {\r
102                 return false;\r
103         }\r
104 }\r
105 \r
106 const bool Board::Load(const std::string &boardname)            // same as loading form boardid - but using name\r
107 {\r
108         /*\r
109         SQLite3DB::Statement st=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE BoardName=?;");\r
110         st.Bind(0,boardname);\r
111         st.Step();\r
112         if(st.RowReturned())\r
113         {\r
114                 int tempint;\r
115                 st.ResultInt(0,tempint);\r
116                 return Load(tempint);\r
117         }\r
118         else\r
119         {\r
120                 return false;\r
121         }\r
122         */\r
123 \r
124         // clear current values\r
125         m_boardid=-1;\r
126         m_boardname="";\r
127         m_boarddescription="";\r
128         m_datecreated.assign(1970,1,1);\r
129         m_lowmessageid=0;\r
130         m_highmessageid=0;\r
131         m_messagecount=0;\r
132         int tempint=-1;\r
133         m_addedmethod="";\r
134 \r
135         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
136         st.Bind(0,boardname);\r
137         st.Step();\r
138 \r
139         if(st.RowReturned())\r
140         {\r
141                 int tempint;\r
142                 std::string tempstr;\r
143                 std::vector<std::string> dateparts;\r
144 \r
145                 st.ResultText(0,m_boardname);\r
146                 st.ResultText(1,m_boarddescription);\r
147                 st.ResultText(2,tempstr);\r
148                 st.ResultInt(7,tempint);        // boardid\r
149                 m_boardid=tempint;\r
150 \r
151                 SetDateFromString(tempstr);\r
152 \r
153                 tempint=0;\r
154                 st.ResultInt(3,tempint);\r
155                 m_highmessageid=tempint;\r
156                 tempint=0;\r
157                 st.ResultInt(4,tempint);\r
158                 m_lowmessageid=tempint;\r
159                 tempint=0;\r
160                 st.ResultInt(5,tempint);\r
161                 m_messagecount=tempint;\r
162                 st.ResultText(6,tempstr);\r
163                 if(tempstr=="true")\r
164                 {\r
165                         m_savereceivedmessages=true;\r
166                 }\r
167                 else\r
168                 {\r
169                         m_savereceivedmessages=false;\r
170                 }\r
171                 st.ResultText(8,m_addedmethod);\r
172 \r
173                 return true;\r
174         }\r
175         else\r
176         {\r
177                 return false;\r
178         }\r
179 \r
180 }\r
181 \r
182 void Board::SetDateFromString(const std::string &datestring)\r
183 {\r
184         // break out date created  - date should be in format yyyy-mm-dd HH:MM:SS, so we split on "-", " " (space), and ":"\r
185         int tzdiff=0;\r
186         if(Poco::DateTimeParser::tryParse(datestring,m_datecreated,tzdiff)==false)\r
187         {\r
188                 m_log->error("Board::SetDateFromString could not parse date "+datestring);\r
189         }\r
190 }\r