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