root/main/trunk/greenstone2/perllib/cgiactions/indexaction.pm @ 24192

Revision 24192, 9.8 KB (checked in by ak19, 8 years ago)

Sam discovered that using dollar-Config{perlpath} in place of dollar-hat-X is the better way to obtain the path to the perl that is being used. We hope this will not be a relative path on the Mac as dollar-hat-x was on Professor Witten's Mac when we tried it there today.

Line 
1###########################################################################
2#
3# indexaction.pm --
4# A component of the Greenstone digital library software
5# from the New Zealand Digital Library Project at the
6# University of Waikato, New Zealand.
7#
8# Copyright (C) 2009 New Zealand Digital Library Project
9#
10# This program is free software; you can redistr   te 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
27package indexaction;
28
29
30use strict;
31
32use cgiactions::baseaction;
33use Config; # for getting the perlpath in the recommended way
34
35
36@indexaction::ISA = ('baseaction');
37
38
39
40
41
42
43
44# 'a' for action, and 'c' for collection are also compulsorary, and
45# added in automatically by baseaction
46
47my $action_table =
48{
49    "full-import"          => { 'compulsory-args' => [],
50                'optional-args'   => [] },
51   
52    "full-buildcol"        => { 'compulsory-args' => [],
53                'optional-args'   => [] },
54   
55    "full-rebuild"         => { 'compulsory-args' => [],
56                'optional-args'   => [] },
57   
58   
59    "incremental-import"   => { 'compulsory-args' => [],
60                'optional-args'   => [] },
61
62    "incremental-buildcol" => { 'compulsory-args' => [],
63                'optional-args'   => [] },
64   
65    "incremental-rebuild" => { 'compulsory-args' => [],
66                   'optional-args'   => [] }
67};
68
69
70sub new
71{
72    my $class = shift (@_);
73    my ($gsdl_cgi,$iis6_mode) = @_;
74
75    my $self = new baseaction($action_table,$gsdl_cgi,$iis6_mode);
76
77    return bless $self, $class;
78}
79
80
81
82
83
84sub run_build_cmd
85{
86    my $self = shift @_;
87    my ($cmd) = @_;
88
89    my $collect   = $self->{'collect'};
90    my $gsdl_cgi  = $self->{'gsdl_cgi'};
91    my $gsdl_home  = $self->{'gsdlhome'};
92
93    my $output = `$cmd 2>&1`;
94    my $status = $?;
95    my $report = undef;
96
97    if ($status == 0) {
98    $report = "Perl build successful: $cmd\n--\n";
99    $report .= "$output\n";
100    }
101    else {
102    $report = "Perl rebuild failed: $cmd\n--\n";
103    $report .= "$output\n";
104    $report .= "Exit status: " . ($status / 256) . "\n";
105##  $report .= $gsdl_cgi->check_perl_home();
106
107#   $report .= "PATH = ". $ENV{'PATH'}. "\n";
108    }
109
110    return($status,$report);
111}
112
113sub full_import
114{
115    my $self = shift @_;
116
117    my $username  = $self->{'username'};
118    my $collect   = $self->{'collect'};
119    my $gsdl_cgi  = $self->{'gsdl_cgi'};
120    my $gsdl_home  = $self->{'gsdlhome'};
121
122    # Authenticate user if it is enabled
123    if ($baseaction::authentication_enabled) {
124    # Ensure the user is allowed to edit this collection
125    &authenticate_user($gsdl_cgi, $username, $collect);
126    }
127   
128    # Obtain the collect dir
129    my $collect_dir = &util::filename_cat($gsdl_home, "collect");
130
131    # Make sure the collection isn't locked by someone else
132    $self->lock_collection($username, $collect);
133
134    my $bin_script = &util::filename_cat($gsdl_home,"bin","script");
135    my $cmd = "\"$Config{perlpath}\" -S full-import.pl \"$collect\"";
136
137    my ($status,$report) = $self->run_build_cmd($cmd);
138   
139    # Release the lock once it is done
140    $self->unlock_collection($username, $collect);
141
142    if ($status==0) {
143    $gsdl_cgi->generate_ok_message($report);
144    }
145    else {
146    $gsdl_cgi->generate_error($report);
147    }
148
149}
150
151
152sub full_buildcol
153{
154    my $self = shift @_;
155
156    my $username  = $self->{'username'};
157    my $collect   = $self->{'collect'};
158    my $gsdl_cgi  = $self->{'gsdl_cgi'};
159    my $gsdl_home  = $self->{'gsdlhome'};
160
161    # Authenticate user if it is enabled
162    if ($baseaction::authentication_enabled) {
163    # Ensure the user is allowed to edit this collection
164    &authenticate_user($gsdl_cgi, $username, $collect);
165    }
166   
167    # Obtain the collect dir
168    my $collect_dir = &util::filename_cat($gsdl_home, "collect");
169
170    # Make sure the collection isn't locked by someone else
171    $self->lock_collection($username, $collect);
172
173    my $bin_script = &util::filename_cat($gsdl_home,"bin","script");
174    my $cmd = "\"$Config{perlpath}\" -S full-buildcol.pl \"$collect\"";
175
176    my ($status,$report) = $self->run_build_cmd($cmd);
177   
178    # Release the lock once it is done
179    $self->unlock_collection($username, $collect);
180
181    if ($status==0) {
182    $gsdl_cgi->generate_ok_message($report);
183    }
184    else {
185    $gsdl_cgi->generate_error($report);
186    }
187}
188
189
190sub full_rebuild
191{
192    my $self = shift @_;
193
194    my $username  = $self->{'username'};
195    my $collect   = $self->{'collect'};
196    my $gsdl_cgi  = $self->{'gsdl_cgi'};
197    my $gsdl_home  = $self->{'gsdlhome'};
198
199    # Authenticate user if it is enabled
200    if ($baseaction::authentication_enabled) {
201    # Ensure the user is allowed to edit this collection
202    &authenticate_user($gsdl_cgi, $username, $collect);
203    }
204   
205    # Obtain the collect dir
206    my $collect_dir = &util::filename_cat($gsdl_home, "collect");
207
208    # Make sure the collection isn't locked by someone else
209    $self->lock_collection($username, $collect);
210
211
212    my $bin_script = &util::filename_cat($gsdl_home,"bin","script");
213    my $cmd = "\"$Config{perlpath}\" -S full-rebuild.pl \"$collect\"";
214
215    my ($status,$report) = $self->run_build_cmd($cmd);
216   
217    # Release the lock once it is done
218    $self->unlock_collection($username, $collect);
219
220    if ($status==0) {
221    $gsdl_cgi->generate_ok_message($report);
222    }
223    else {
224    $gsdl_cgi->generate_error($report);
225    }
226}
227
228
229
230sub incremental_import
231{
232    my $self = shift @_;
233
234    my $username  = $self->{'username'};
235    my $collect   = $self->{'collect'};
236    my $gsdl_cgi  = $self->{'gsdl_cgi'};
237    my $gsdl_home  = $self->{'gsdlhome'};
238
239    # Authenticate user if it is enabled
240    if ($baseaction::authentication_enabled) {
241    # Ensure the user is allowed to edit this collection
242    &authenticate_user($gsdl_cgi, $username, $collect);
243    }
244   
245    # Obtain the collect dir
246    my $collect_dir = &util::filename_cat($gsdl_home, "collect");
247
248    # Make sure the collection isn't locked by someone else
249    $self->lock_collection($username, $collect);
250
251
252    my $bin_script = &util::filename_cat($gsdl_home,"bin","script");
253    my $cmd = "\"$Config{perlpath}\" -S incremental-import.pl \"$collect\"";
254
255    my ($status,$report) = $self->run_build_cmd($cmd);
256   
257    # Release the lock once it is done
258    $self->unlock_collection($username, $collect);
259
260    if ($status==0) {
261    $gsdl_cgi->generate_ok_message($report);
262    }
263    else {
264    $gsdl_cgi->generate_error($report);
265    }
266}
267
268
269sub incremental_buildcol
270{
271    my $self = shift @_;
272
273    my $username  = $self->{'username'};
274    my $collect   = $self->{'collect'};
275    my $gsdl_cgi  = $self->{'gsdl_cgi'};
276    my $gsdl_home  = $self->{'gsdlhome'};
277
278    # timestamp could turn out to be useful, but not used just now
279
280    # Authenticate user if it is enabled
281    if ($baseaction::authentication_enabled) {
282    # Ensure the user is allowed to edit this collection
283    &authenticate_user($gsdl_cgi, $username, $collect);
284    }
285   
286    # Obtain the collect dir
287    my $collect_dir = &util::filename_cat($gsdl_home, "collect");
288
289    # Make sure the collection isn't locked by someone else
290    $self->lock_collection($username, $collect);
291
292
293    my $bin_script = &util::filename_cat($gsdl_home,"bin","script");
294    my $cmd = "\"$Config{perlpath}\" -S incremental-buildcol.pl \"$collect\"";
295
296    my ($status,$report) = $self->run_build_cmd($cmd);
297   
298    # Release the lock once it is done
299    $self->unlock_collection($username, $collect);
300
301    if ($status==0) {
302    $gsdl_cgi->generate_ok_message($report);
303    }
304    else {
305    $gsdl_cgi->generate_error($report);
306    }
307}
308
309
310sub incremental_rebuild
311{
312    my $self = shift @_;
313
314    my $username  = $self->{'username'};
315    my $collect   = $self->{'collect'};
316    my $timestamp = $self->{'timestamp'};
317    my $site      = $self->{'site'};
318
319    my $gsdl_cgi  = $self->{'gsdl_cgi'};
320    my $gsdl_home  = $self->{'gsdlhome'};
321
322    # Authenticate user if it is enabled
323    if ($baseaction::authentication_enabled) {
324    # Ensure the user is allowed to edit this collection
325    &authenticate_user($gsdl_cgi, $username, $collect);
326    }
327   
328    # Make sure the collection isn't locked by someone else
329    $self->lock_collection($username, $collect);
330
331    my $cmd = "\"$Config{perlpath}\" -S incremental-rebuild.pl \"$collect\"";
332
333    my ($status,$report) = $self->run_build_cmd($cmd);
334   
335    # Release the lock once it is done
336    $self->unlock_collection($username, $collect);
337
338    if ($baseaction::mail_enabled) {
339    $self->send_mail("Remote Greenstone building event", "Incremental building of collection '$collect' complete.");
340    }
341
342    if ($status==0) {
343    $gsdl_cgi->generate_ok_message($report);
344    }
345    else {
346    $gsdl_cgi->generate_error($report);
347    }
348}
349
350
351
352
353sub incremental_rebuild_orig
354{
355    my $self = shift @_;
356
357    my $username  = $self->{'username'};
358    my $collect   = $self->{'collect'};
359    my $timestamp = $self->{'timestamp'};
360    my $site      = $self->{'site'};
361
362    my $gsdl_cgi  = $self->{'gsdl_cgi'};
363
364    # timestamp could turn out to be useful, but not used just now
365
366    # don't user authenticate for now
367    if ($baseaction::authentication_enabled) {
368    # Ensure the user is allowed to edit this collection
369    $self->authenticate_user($username, $collect);
370    }
371
372    # Make sure the collection isn't locked by someone else
373    $self->lock_collection($username, $collect, $site);
374
375    $self->run_script($collect,$site,"incremental-rebuild.pl");
376
377    if ($baseaction::mail_enabled) {
378    $self->send_mail("Remote Greenstone building event", "Build of collection '$collect' complete.");
379    }
380
381}
382
383
384
385
386
3871;
Note: See TracBrowser for help on using the browser.