source: main/trunk/greenstone2/runtime-src/src/recpt/datelistbrowserclass.cpp@ 27108

Last change on this file since 27108 was 27108, checked in by mdewsnip, 8 years ago

Memory bug fix to prevent crashing on Windows, particularly with Local Library.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
Line 
1/**********************************************************************
2 *
3 * datelistbrowserclass.cpp --
4 * Copyright (C) 1999 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
26#include "gsdl_modules_cfg.h"
27#ifdef GSDL_USE_DATELIST_BROWSER
28
29#include "browsetoolsclass.h"
30#include "datelistbrowserclass.h"
31#include <assert.h>
32
33
34datelistbrowserclass::datelistbrowserclass () {
35}
36
37datelistbrowserclass::~datelistbrowserclass () {
38}
39
40text_t datelistbrowserclass::get_browser_name () {
41 return "DateList";
42}
43
44browserclass* datelistbrowserclass::clone()
45{
46 return new datelistbrowserclass();
47}
48
49void datelistbrowserclass::load_metadata_defaults (text_tset &metadata) {
50 metadata.insert ("Date");
51 metadata.insert ("doctype");
52}
53
54text_t datelistbrowserclass::get_default_formatstring () {
55 return "<td>[link][icon][/link]</td><td>[highlight]{Or}{[dc.Title],[exp.Title],[ex.Title],Untitled}[/highlight]</td><td>{Or}{[format:dc.Date],[format:exp.Date],[format:ex.Date]}</td>";
56}
57
58int datelistbrowserclass::output_section_group (ResultDocInfo_t &/*section*/, cgiargsclass &/*args*/,
59 const text_t &/*collection*/, int /*colnumber*/,
60 format_t * /*formatlistptr*/, bool /*use_table*/,
61 text_tset &/*metadata*/, bool &/*getParents*/,
62 recptproto * /*collectproto*/, displayclass &/*disp*/,
63 outconvertclass &/*outconvert*/, ostream &/*textout*/,
64 ostream &/*logout*/) {
65 return 0;
66}
67
68int datelistbrowserclass::output_section_group (FilterResponse_t &sections, cgiargsclass &args,
69 const text_t &collection, int colnumber, format_t *formatlistptr,
70 bool use_table, text_tset &/*metadata*/, bool &/*getParents*/,
71 recptproto * collectproto, displayclass &disp,
72 outconvertclass &outconvert, ostream &textout, ostream &logout) {
73
74 browsetoolsclass btools;
75 text_t lastyear = "0000";
76 text_t lastmonth = "00";
77 text_t tabbing, endtabbing;
78
79 if (use_table || colnumber > 0) {
80 textout << outconvert << "<table><tr><td>";
81 // get tab size
82 text_t tab; int itab;
83 disp.expandstring (displayclass::defaultpackage, "_tabwidth_", tab);
84 itab = tab.getint();
85 if (colnumber > 0)
86 textout << outconvert << "<img alt=\"\" src=\"_httpiconspace_\" width=\"" << (itab*colnumber) << "\"/>";
87 textout << outconvert << "</td><td>";
88 }
89
90 textout << outconvert << "<table class=\"date_list\">\n";
91
92 ResultDocInfo_tarray::iterator thissection = sections.docInfo.begin();
93 ResultDocInfo_tarray::iterator endsection = sections.docInfo.end();
94
95 // use the dm arg as date metadata or else Date
96 text_t date_meta = args["dm"];
97 if (date_meta == "") {
98 date_meta = "Date";
99 }
100 text_tarray dates;
101 splitchar(date_meta.begin(), date_meta.end(), ',', dates);
102
103 while (thissection != endsection) {
104
105 text_t &doctype = (*thissection).metadata["doctype"].values[0];
106
107 text_tarray::iterator begin = dates.begin();
108 text_tarray::iterator end = dates.end();
109 text_t date;
110 while (begin!= end && date.empty()) {
111 date = (*thissection).metadata[*begin].values[0];
112 begin++;
113 }
114 text_t thisyear = "";
115 text_t thismonth = "";
116 if (!date.empty()) {
117 text_t::const_iterator datebegin = date.begin();
118 int datesize = date.size();
119
120 if (datesize >=4) {
121 thisyear = substr (datebegin, datebegin+4);
122 thismonth = "00";
123 int pos = 4;
124 // allow for yyyy-mm-dd
125 if (datesize > pos && date[pos]=='-') {
126 ++pos;
127 }
128 if (datesize >= pos+2)
129 thismonth = substr (datebegin+pos, datebegin+pos+2);
130 }
131 }
132
133 text_t link = "<a href=\"_httpdocument_&cl=";
134 text_t icon = "_document:iconclosedbook_";
135
136 if (doctype == "classify") {
137 icon = "_document:iconclosedbookshelf_";
138 link += (*thissection).OID + "\">";
139 } else {
140 link += args["cl"] + "&d=" + (*thissection).OID; // + "\">";
141 // [modification to allow default document detach settings -- kjdon]
142 if (args["xx"]=="1") {
143 // documents should be detached
144 link += "&x=1\" target=\\_blank>";
145 } else {
146 link += "\">";
147 }
148 }
149
150 textout << outconvert << "<tr valign=top>";
151
152 if (thisyear != "" && thisyear != lastyear) {
153 textout << outconvert << "<td><span class=\"date_list_year\">" << thisyear << "</span></td>";
154 lastyear = thisyear;
155 } else {
156 textout << outconvert << "<td></td>";
157 }
158 if (thismonth != "" && thismonth != lastmonth) {
159 textout << outconvert << disp << ("<td><span class=\"date_list_month\">_textmonth" + thismonth + "_</span></td>");
160 lastmonth = thismonth;
161 } else {
162 textout << outconvert << "<td></td>";
163 }
164 if (!use_table) textout << outconvert << "<td>\n";
165
166 text_tmap options;
167 options["link"] = link;
168 options["icon"] = icon;
169 options["highlight"] = "0";
170 options["DocImage"] = btools.get_cover_image();
171 options["assocfilepath"] = btools.get_assocfile_path();
172
173 textout << outconvert << disp
174 << get_formatted_string (collection, collectproto,
175 *thissection, disp, formatlistptr,
176 options, logout) << "\n";
177
178 if (!use_table) textout << outconvert << "</td>";
179
180 textout << outconvert << "</tr>\n";
181
182 ++thissection;
183 }
184
185 textout << outconvert << "</table>\n";
186
187 if (use_table || colnumber > 0) textout << outconvert << "</td></tr></table>\n";
188 return 1;
189}
190
191#endif //GSDL_USE_DATELIST_BROWSER
Note: See TracBrowser for help on using the repository browser.