source: main/tags/2.32/gsdl/src/recpt/hlistbrowserclass.cpp@ 25600

Last change on this file since 25600 was 1610, checked in by paynter, 24 years ago

Changed the formatstring parser in formattools so that an {If} macro (which
has the form {If}{decision,then,else}) can branch on any text, not just on
metadata. This means you can use extra cgi arguments and macros like
_cgiargmode_ to display documents in different modes and switch between
them. To accomplish all this, the formattools class needed to be able to
evaluate macros (through displayclass), so the other files have been
changed to pass in a displayclass object.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/**********************************************************************
2 *
3 * hlistbrowserclass.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 "hlistbrowserclass.h"
27#include <assert.h>
28#include "OIDtools.h"
29
30hlistbrowserclass::hlistbrowserclass () {
31}
32
33hlistbrowserclass::~hlistbrowserclass () {
34}
35
36// returns the name that specifies the browserclass type
37text_t hlistbrowserclass::get_browser_name () {
38 return "HList";
39}
40
41void hlistbrowserclass::load_metadata_defaults (text_tset &metadata) {
42 metadata.insert ("doctype");
43}
44
45text_t hlistbrowserclass::get_default_formatstring () {
46 return "[link][highlight][Title][/highlight][/link]";
47}
48
49// need to change OID to it's child
50void hlistbrowserclass::processOID (cgiargsclass &args, recptproto *collectproto,
51 ostream &logout) {
52
53 text_t OID = args["d"];
54 bool is_classify = false;
55 if (OID.empty()) {
56 is_classify = true;
57 OID = args["cl"];
58 }
59
60 FilterResponse_t response;
61 text_tset metadata;
62 metadata.insert ("childtype");
63 text_t classifytype = "Invisible";
64 text_t child_doctype;
65
66 text_tarray OIDs;
67
68 while (classifytype == "Invisible") {
69 OIDs.erase (OIDs.begin(), OIDs.end());
70
71 OIDs.push_back (OID);
72 OIDs.push_back (OID + ".fc");
73
74 get_info (OIDs, args["c"], metadata, false, collectproto, response, logout);
75
76 OID = response.docInfo[1].OID;
77 classifytype = response.docInfo[0].metadata["childtype"].values[0];
78 }
79 if (is_classify) args["cl"] = OID;
80 else args["d"] = OID;
81}
82
83int hlistbrowserclass::output_section_group (ResultDocInfo_t &section, cgiargsclass &args,
84 const text_t& collection, int colnumber,
85 format_t *formatlistptr, bool use_table,
86 text_tset &metadata, bool &getParents,
87 recptproto *collectproto, displayclass &disp,
88 outconvertclass &outconvert, ostream &textout,
89 ostream &logout) {
90
91 // expanded contents are going to cause some nasty recursions
92 // so we'll only continue if being passed the current section
93 if ((args["gc"] == 1) && (section.OID != args["d"])) return 0;
94
95 // get all siblings
96 FilterResponse_t response;
97 text_t &arg_cl = args["cl"];
98 get_children (section.OID + ".pr", args["c"], metadata, getParents,
99 collectproto, response, logout);
100
101
102 if (use_table || colnumber > 0) {
103 textout << "<table><tr><td>";
104 // get tab size
105 text_t tab; int itab;
106 disp.expandstring ("Global", "_tabwidth_", tab);
107 itab = tab.getint();
108 if (colnumber > 0) textout << outconvert << disp
109 << "<img src=\"_httpimg_/space.gif\" width="
110 << (itab*colnumber) << ">";
111 textout << "</td>\n";
112 }
113
114 textout << "<table><tr>\n";
115
116 ResultDocInfo_tarray::iterator tsibling = response.docInfo.begin();
117 ResultDocInfo_tarray::iterator esibling = response.docInfo.end();
118
119 text_t icon, link;
120 while (tsibling != esibling) {
121
122 bool highlight = false;
123 textout << "<td>";
124 text_t &doctype = (*tsibling).metadata["doctype"].values[0];
125
126 if ((*tsibling).OID == section.OID) {
127 link.clear();
128 highlight = true;
129 } else {
130 link = "<a href=\"_httpdocument_";
131 if (doctype == "classify")
132 link += "&cl=" + (*tsibling).OID + "\">";
133 else
134 link += "&cl=" + arg_cl + "&d=" + (*tsibling).OID + "\">";
135 }
136
137 textout << outconvert << disp
138 << get_formatted_string (collection, collectproto,
139 *tsibling, disp, formatlistptr, link, icon, highlight,
140 logout);
141
142 textout << "</td>\n";
143 tsibling ++;
144 }
145
146 textout << "</tr></table>\n";
147 if (use_table || colnumber > 0) textout << "</tr></table>\n";
148 return 0;
149}
150
151int hlistbrowserclass::output_section_group (FilterResponse_t &/*sections*/, cgiargsclass &/*args*/,
152 const text_t &/*collection*/, int /*colnumber*/,
153 format_t * /*formatlistptr*/, bool /*use_table*/,
154 text_tset &/*metadata*/, bool &/*getParents*/,
155 recptproto * /*collectproto*/, displayclass &/*disp*/,
156 outconvertclass &/*outconvert*/, ostream &/*textout*/,
157 ostream &/*logout*/) {
158 return 0;
159}
Note: See TracBrowser for help on using the repository browser.