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