ed8e8692f7b24f256f54b4ea6b9cccbc9ddab2dc
[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         // clear current values\r
112         m_boardid=-1;\r
113         m_boardname="";\r
114         m_boarddescription="";\r
115         m_datecreated.assign(1970,1,1);\r
116         m_lowmessageid=0;\r
117         m_highmessageid=0;\r
118         m_messagecount=0;\r
119         int tempint=-1;\r
120         m_addedmethod="";\r
121 \r
122         // Optimize query by not using vwBoardStats\r
123         //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
124         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
125         st.Bind(0,boardname);\r
126         st.Step();\r
127 \r
128         if(st.RowReturned())\r
129         {\r
130                 int tempint;\r
131                 std::string tempstr;\r
132                 std::vector<std::string> dateparts;\r
133 \r
134                 st.ResultText(0,m_boardname);\r
135                 st.ResultText(1,m_boarddescription);\r
136                 st.ResultText(2,tempstr);\r
137                 st.ResultInt(7,tempint);        // boardid\r
138                 m_boardid=tempint;\r
139 \r
140                 SetDateFromString(tempstr);\r
141 \r
142                 tempint=0;\r
143                 st.ResultInt(3,tempint);\r
144                 m_highmessageid=tempint;\r
145                 tempint=0;\r
146                 st.ResultInt(4,tempint);\r
147                 m_lowmessageid=tempint;\r
148                 tempint=0;\r
149                 st.ResultInt(5,tempint);\r
150                 m_messagecount=tempint;\r
151                 st.ResultText(6,tempstr);\r
152                 if(tempstr=="true")\r
153                 {\r
154                         m_savereceivedmessages=true;\r
155                 }\r
156                 else\r
157                 {\r
158                         m_savereceivedmessages=false;\r
159                 }\r
160                 st.ResultText(8,m_addedmethod);\r
161 \r
162                 return true;\r
163         }\r
164         else\r
165         {\r
166                 return false;\r
167         }\r
168 \r
169 }\r
170 \r
171 void Board::SetDateFromString(const std::string &datestring)\r
172 {\r
173         int tzdiff=0;\r
174         if(Poco::DateTimeParser::tryParse(datestring,m_datecreated,tzdiff)==false)\r
175         {\r
176                 m_log->error("Board::SetDateFromString could not parse date "+datestring);\r
177         }\r
178 }\r