source: main/tags/2.53/gsdl/src/recpt/pagedbrowserclass.cpp@ 33212

Last change on this file since 33212 was 7618, checked in by davidb, 20 years ago

previousarrow variable renamed prevarrow to be more consistent with
other variable names in function.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1/**********************************************************************
2 *
3 * pagedbrowserclass.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_PAGED_BROWSER
28
29#include "pagedbrowserclass.h"
30#include <assert.h>
31#include "OIDtools.h"
32#include "gsdltools.h"
33
34pagedbrowserclass::pagedbrowserclass () {
35}
36
37pagedbrowserclass::~pagedbrowserclass () {
38}
39
40// returns the name that specifies the browserclass type
41text_t pagedbrowserclass::get_browser_name () {
42 return "Paged";
43}
44
45browserclass* pagedbrowserclass::clone()
46{
47 return new pagedbrowserclass();
48}
49
50void pagedbrowserclass::load_metadata_defaults (text_tset &metadata) {
51 metadata.insert ("Title");
52}
53
54// if the "gp" (go to page) argument is set we need to set
55// the "d" argument to the corresponding page
56// also want to set "d" argument to first child if we're at
57// an 'Invisible' top level
58void pagedbrowserclass::processOID (cgiargsclass &args, recptproto *collectproto,
59 ostream &logout) {
60
61 text_t &arg_d = args["d"];
62 text_t &arg_gp = args["gp"];
63 text_tset metadata;
64 bool getParents = false;
65 FilterResponse_t response;
66
67 if ((!arg_d.empty()) && (!arg_gp.empty()) && (is_number (arg_gp))) {
68 text_t top;
69 get_top (arg_d, top);
70 metadata.insert ("Title");
71 get_children (top, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
72 ResultDocInfo_tarray::iterator dochere = response.docInfo.begin();
73 ResultDocInfo_tarray::iterator docend = response.docInfo.end();
74 while (dochere != docend) {
75 if ((*dochere).metadata["Title"].values[0] == arg_gp) {
76 arg_d = (*dochere).OID;
77 break;
78 }
79 dochere ++;
80 }
81
82 } else if (!arg_d.empty() && is_top(arg_d)) { // if top level doc, check if not invisible
83 metadata.insert("thistype");
84 if (get_info(arg_d, args["c"], args["l"], metadata, getParents, collectproto, response, logout)) {
85 text_t type = response.docInfo[0].metadata["thistype"].values[0];
86 if (type=="Invisible") { // display first child
87 arg_d = arg_d + ".fc";
88 }
89 }
90 }
91}
92
93int pagedbrowserclass::output_section_group (ResultDocInfo_t &section, cgiargsclass &args,
94 const text_t &/*collection*/, int /*colnumber*/,
95 format_t * /*formatlistptr*/, bool /*use_table*/,
96 text_tset &/*metadata*/, bool &/*getParents*/,
97 recptproto * /*collectproto*/, displayclass &disp,
98 outconvertclass &outconvert, ostream &textout,
99 ostream &/*logout*/) {
100
101 // this browser class only handles document levels
102 if (args["d"].empty()) return 0;
103
104 if (section.OID != args["d"]) {
105 text_t httpprevarrow = "_httpdocument_&cl=" + args["cl"] + "&d=" + dm_safe(section.OID);
106 text_t parentarrow = "<a href=\"" + httpprevarrow + "\">_iconprev_</a>\n";
107 disp.setmacro ("httpprevarrow", "document", httpprevarrow);
108 disp.setmacro ("parentarrow", "document", parentarrow);
109 return 0;
110 }
111
112 // must be at top level to get to here!
113 textout << outconvert << disp << "<b>" << section.metadata["Title"].values[0]
114 << "_document:textintro_</b>\n";
115
116 return 0;
117}
118
119int pagedbrowserclass::output_section_group (FilterResponse_t &sections, cgiargsclass &args,
120 const text_t &/*collection*/, int /*colnumber*/,
121 format_t * /*formatlistptr*/, bool /*use_table*/,
122 text_tset &/*metadata*/, bool &/*getParents*/,
123 recptproto * /*collectproto*/, displayclass &disp,
124 outconvertclass &outconvert, ostream &textout,
125 ostream &/*logout*/) {
126
127 text_t &arg_d = args["d"];
128
129 // this browser class only handles document levels
130 if (arg_d.empty()) return 0;
131
132 text_t previousOID, previoustitle, nextOID, nexttitle;
133 text_t prevarrow, nextarrow, httpprevarrow, httpnextarrow;
134 bool found = false;
135
136 // this should be our list of pages
137
138 ResultDocInfo_tarray::iterator thissection = sections.docInfo.begin();
139 ResultDocInfo_tarray::iterator endsection = sections.docInfo.end();
140
141 while (thissection != endsection) {
142 if (arg_d == (*thissection).OID) {
143 found = true;
144 textout << outconvert << disp
145 << "<table><tr valign=top><td colspan=3><center><b>_page_"
146 << (*thissection).metadata["Title"].values[0] << "</b>\n";
147 if (thissection != sections.docInfo.begin()) {
148 previousOID = (*(thissection-1)).OID;
149 previoustitle = (*(thissection-1)).metadata["Title"].values[0];
150 } else {
151 prevarrow = "_document:parentarrow_";
152 }
153
154 if ((thissection+1) != endsection) {
155 nextOID = (*(thissection+1)).OID;
156 nexttitle = (*(thissection+1)).metadata["Title"].values[0];
157 }
158 break;
159 }
160 thissection ++;
161 }
162
163 if (!found) {
164 textout << outconvert << disp
165 << "<table><tr valign=top> <td colspan=3><center>\n";
166 }
167 int numpages = sections.docInfo.size();
168 textout << outconvert << disp
169 << ("_document:textnumpages_(" + text_t(numpages) + ")</center></td></tr>\n");
170
171 disp.setmacro ("numpages", "document", numpages);
172
173 if (!found) {
174 httpnextarrow = "_httpdocument_&cl=" + args["cl"] + "&d=" + sections.docInfo[0].OID;
175 nextarrow = "<a href=\"" + httpnextarrow + "\">" +
176 sections.docInfo[0].metadata["Title"].values[0] + "_iconnext_</a>\n";
177
178 } else {
179 if (!previousOID.empty()) {
180 httpprevarrow = "_httpdocument_&cl=" + args["cl"] + "&d=" + dm_safe(previousOID);
181 prevarrow = "<a href=\"" + httpprevarrow + "\">_iconprev_" + previoustitle + "</a>\n";
182 }
183 if (!nextOID.empty()) {
184 httpnextarrow = "_httpdocument_&cl=" + args["cl"] + "&d=" + dm_safe(nextOID);
185 nextarrow = "<a href=\"" + httpnextarrow + "\">" + nexttitle + "_iconnext_</a>\n";
186 }
187 }
188
189 if (!httpprevarrow.empty()) disp.setmacro ("httpprevarrow", "document", httpprevarrow);
190 if (!httpnextarrow.empty()) disp.setmacro ("httpnextarrow", "document", httpnextarrow);
191
192 if (!prevarrow.empty()) disp.setmacro ("prevarrow", "document", prevarrow);
193 if (!nextarrow.empty()) disp.setmacro ("nextarrow", "document", nextarrow);
194
195
196 textout << outconvert << disp << "<tr valign=middle>\n"
197 << "<td align=right>" << prevarrow << "</td>\n"
198 << "<td align=center valign=top>_document:gotoform_</td>"
199 << "<td align=left>" << nextarrow << "</td>\n"
200 << "</tr></table>\n";
201
202 return 0;
203}
204
205#endif //GSDL_USE_PAGED_BROWSER
Note: See TracBrowser for help on using the repository browser.