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

Revision 27108, 6.1 KB (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
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 browser.