Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Forked Xestia Scanner Server!
[xestiascansrv/.git] / cgi-files / Modules / System / Settings.pm
1 #################################################################################
2 # Xestia Scanner Server - Settings System Module                                #
3 # Version 0.1.0                                                                 #
4 #                                                                               #
5 # Copyright (C) 2010-2011 Steve Brokenshire <sbrokenshire@xestia.co.uk>         #
6 #                                                                               #
7 # This module is licensed under the same license as Xestia Scanner Server which #
8 # is licensed under the GPL version 3.                                          #
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, version 3 of the License.                       #
13 #                                                                               #
14 # This program is distributed in the hope that it will be useful,               #
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of                #
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 #
17 # GNU General Public License for more details.                                  #
18 #                                                                               #
19 # You should have received a copy of the GNU General Public License             #
20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.         #
21 #################################################################################
23 package Modules::System::Settings;
25 use Modules::System::Common;
26 use Modules::System::Scan;
27 use strict;
28 use warnings;
29 use Exporter;
31 our @ISA = qw(Exporter);
32 our @EXPORT = qw(xestiascan_settings_view xestiascan_settings_edit xestiascan_output_config); 
34 sub xestiascan_settings_getauthmodules{
35 #################################################################################
36 # xestiascan_settings_getauthmodules: Gets the list of available authentication #
37 #                                     modules.                                  #
38 #                                                                               #
39 # Usage:                                                                        #
40 #                                                                               #
41 # @authmodules = xestiascan_settings_getauthmodules;                            #
42 #################################################################################
43         
44         my (@authmoduleslist, @authmoduleslist_final);
45         my $authmodulefile;
46         
47         opendir(AUTHMODULEDIR, "Modules/Auth");
48         @authmoduleslist = grep /m*\.pm$/, sort(readdir(AUTHMODULEDIR));
49         closedir(AUTHMODULEDIR);
50         
51         foreach $authmodulefile (@authmoduleslist){
52                 next if $authmodulefile =~ m/^\./;
53                 next if $authmodulefile !~ m/.pm$/;
54                 $authmodulefile =~ s/.pm$//;
55                 push(@authmoduleslist_final, $authmodulefile);
56         }
57         
58         return @authmoduleslist_final;
59         
60 }
62 sub xestiascan_settings_getpresmodules{
63 #################################################################################
64 # xestiascan_settings_getpresmodules: Gets the list of available presentation   #
65 #                                     modules.                                  #
66 #                                                                               #
67 # Usage:                                                                        #
68 #                                                                               #
69 # @presmodules = xestiascan_settings_getpresmodules;                            #
70 #################################################################################
71         
72         my (@presmoduleslist, @presmoduleslist_final);
73         my $presmodulefile;
74         
75         opendir(PRESMODULEDIR, "Modules/Presentation");
76         @presmoduleslist = grep /m*\.pm$/, sort(readdir(PRESMODULEDIR));
77         closedir(PRESMODULEDIR);
78         
79         foreach $presmodulefile (@presmoduleslist){
80                 next if $presmodulefile =~ m/^\./;
81                 next if $presmodulefile !~ m/.pm$/;
82                 $presmodulefile =~ s/.pm$//;
83                 push(@presmoduleslist_final, $presmodulefile);
84         }
85         
86         return @presmoduleslist_final;
87         
88 }
90 sub xestiascan_settings_getlanguages{
91 #################################################################################
92 # xestiascan_settings_getlanguages: Gets the list of available languages.       #
93 #                                                                               #
94 # Usage:                                                                        #
95 #                                                                               #
96 # @languages = xestiascan_settings_getlanguages;                                #
97 #################################################################################
98         
99         my (@langmoduleslist, @langmoduleslist_final);
100         my $langmodulefile;
101         
102         opendir(LANGUAGESDIR, "lang");
103         @langmoduleslist = grep /m*\.lang$/, sort(readdir(LANGUAGESDIR));
104         closedir(LANGUAGESDIR);
105         
106         foreach $langmodulefile (@langmoduleslist){
107                 next if $langmodulefile =~ m/^\./;
108                 next if $langmodulefile !~ m/.lang$/;
109                 $langmodulefile =~ s/.lang$//;
110                 push(@langmoduleslist_final, $langmodulefile);
111         }
112         
113         return @langmoduleslist_final;
114         
117 sub xestiascan_settings_view{
118 #################################################################################
119 # xestiascan_options_view: Writes out the list of options and variables.                #
120 #                                                                               #
121 # Usage:                                                                        #
122 #                                                                               #
123 # xestiascan_settings_view();                                                   #
124 #################################################################################
125         
126         # Connect to the database server.
127         
128         $main::xestiascan_authmodule->connect();
129         
130         # Check if any errors occured while connecting to the database server.
131         
132         if ($main::xestiascan_authmodule->geterror eq "AuthConnectionError"){
133                 
134                 # A database connection error has occured so return
135                 # an error.
136                 
137                 xestiascan_error("authconnectionerror", $main::xestiascan_authmodule->geterror(1));
138                 
139         }
140         
141         my $access_viewsettings = $main::xestiascan_authmodule->getpermissions({ Username => $main::loggedin_user, PermissionType => "Admin" });
142         
143         if ($main::xestiascan_authmodule->geterror eq "DatabaseError"){
144                 
145                 # A database error has occured so return an error with
146                 # the extended error information.
147                 
148                 xestiascan_error("autherror", $main::xestiascan_authmodule->geterror(1));
149                 
150         }
151         
152         if ($access_viewsettings ne 1){
153                 
154                 # User not allowed to perform this action so return an error.
155                 xestiascan_error("notpermitted");
156                 
157         }
158         
159         # Disconnect from the database server.
160         
161         $main::xestiascan_authmodule->disconnect();
162         
163         # Get the settings.
165         my $settings_noncgi_images              = $main::xestiascan_config{"directory_noncgi_images"};
166         my $settings_noncgi_scans               = $main::xestiascan_config{"directory_noncgi_scans"};
167         my $settings_fs_scans                   = $main::xestiascan_config{"directory_fs_scans"};
168         my $settings_system_datetime            = $main::xestiascan_config{"system_datetime"};
169         my $settings_system_language            = $main::xestiascan_config{"system_language"};
170         my $settings_system_presentation        = $main::xestiascan_config{"system_presmodule"};
171         my $settings_system_auth                = $main::xestiascan_config{"system_authmodule"};
172         my $settings_system_output              = $main::xestiascan_config{"system_outputmodule"};
174         $main::xestiascan_presmodule->startbox("sectionboxnofloat");
175         $main::xestiascan_presmodule->startbox("sectiontitle");
176         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{viewsettings});
177         $main::xestiascan_presmodule->endbox();
178         $main::xestiascan_presmodule->startbox("secondbox");    
180         $main::xestiascan_presmodule->startform($main::xestiascan_env{"script_filename"}, "POST");
181         $main::xestiascan_presmodule->addhiddendata("mode", "settings");
182         $main::xestiascan_presmodule->addbutton("action", { Value => "edit", Description => $main::xestiascan_lang{setting}{editsettings} });
183         $main::xestiascan_presmodule->endform();
184         $main::xestiascan_presmodule->addlinebreak();
185         
186         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{currentsettings});
187         $main::xestiascan_presmodule->addlinebreak();
188         $main::xestiascan_presmodule->addlinebreak();
189         $main::xestiascan_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
191         $main::xestiascan_presmodule->startheader();
192         $main::xestiascan_presmodule->addheader($main::xestiascan_lang{common}{setting}, { Style => "tablecellheader" });
193         $main::xestiascan_presmodule->addheader($main::xestiascan_lang{common}{value}, { Style => "tablecellheader" });
194         $main::xestiascan_presmodule->endheader();
196         $main::xestiascan_presmodule->startrow();
197         $main::xestiascan_presmodule->addcell("tablecellheader");
198         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{directories});
199         $main::xestiascan_presmodule->endcell();
200         $main::xestiascan_presmodule->addcell("tablecellheader");
201         $main::xestiascan_presmodule->endcell();
202         $main::xestiascan_presmodule->endrow();
204         $main::xestiascan_presmodule->startrow();
205         $main::xestiascan_presmodule->addcell("tablecell1");
206         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{imagesuripath});
207         $main::xestiascan_presmodule->endcell();
208         $main::xestiascan_presmodule->addcell("tablecell2");
209         $main::xestiascan_presmodule->addtext($settings_noncgi_images);
210         $main::xestiascan_presmodule->endcell();
211         $main::main::xestiascan_presmodule->endrow();
213         $main::xestiascan_presmodule->startrow();
214         $main::xestiascan_presmodule->addcell("tablecell1");
215         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{scansuripath});
216         $main::xestiascan_presmodule->endcell();
217         $main::xestiascan_presmodule->addcell("tablecell2");
218         $main::xestiascan_presmodule->addtext($settings_noncgi_scans);
219         $main::xestiascan_presmodule->endcell();
220         $main::main::xestiascan_presmodule->endrow();
221         
222         $main::xestiascan_presmodule->startrow();
223         $main::xestiascan_presmodule->addcell("tablecell1");
224         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{scansfspath});
225         $main::xestiascan_presmodule->endcell();
226         $main::xestiascan_presmodule->addcell("tablecell2");
227         $main::xestiascan_presmodule->addtext($settings_fs_scans);
228         $main::xestiascan_presmodule->endcell();
229         $main::main::xestiascan_presmodule->endrow();
230         
231         $main::xestiascan_presmodule->startrow();
232         $main::xestiascan_presmodule->addcell("tablecellheader");
233         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{date});
234         $main::xestiascan_presmodule->endcell();
235         $main::xestiascan_presmodule->addcell("tablecellheader");
236         $main::xestiascan_presmodule->endcell();
237         $main::xestiascan_presmodule->endrow();
239         $main::xestiascan_presmodule->startrow();
240         $main::xestiascan_presmodule->addcell("tablecell1");
241         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{dateformat});
242         $main::xestiascan_presmodule->endcell();
243         $main::xestiascan_presmodule->addcell("tablecell2");
244         $main::xestiascan_presmodule->addtext($settings_system_datetime);
245         $main::xestiascan_presmodule->endcell();
246         $main::xestiascan_presmodule->endrow();
248         $main::xestiascan_presmodule->startrow();
249         $main::xestiascan_presmodule->addcell("tablecellheader");
250         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{language});
251         $main::xestiascan_presmodule->endcell();
252         $main::xestiascan_presmodule->addcell("tablecellheader");
253         $main::xestiascan_presmodule->endcell();
254         $main::xestiascan_presmodule->endrow();
256         $main::xestiascan_presmodule->startrow();
257         $main::xestiascan_presmodule->addcell("tablecell1");
258         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{systemlanguage});
259         $main::xestiascan_presmodule->endcell();
260         $main::xestiascan_presmodule->addcell("tablecell2");
261         $main::xestiascan_presmodule->addtext($settings_system_language);
262         $main::xestiascan_presmodule->endcell();
263         $main::xestiascan_presmodule->endrow();
265         $main::xestiascan_presmodule->startrow();
266         $main::xestiascan_presmodule->addcell("tablecellheader");
267         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{modules});
268         $main::xestiascan_presmodule->endcell();
269         $main::xestiascan_presmodule->addcell("tablecellheader");
270         $main::xestiascan_presmodule->endcell();
271         $main::xestiascan_presmodule->endrow();
273         $main::xestiascan_presmodule->startrow();
274         $main::xestiascan_presmodule->addcell("tablecell1");
275         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{presentationmodule});
276         $main::xestiascan_presmodule->endcell();
277         $main::xestiascan_presmodule->addcell("tablecell2");
278         $main::xestiascan_presmodule->addtext($settings_system_presentation);
279         $main::xestiascan_presmodule->endcell();
280         $main::xestiascan_presmodule->endrow();
282         $main::xestiascan_presmodule->startrow();
283         $main::xestiascan_presmodule->addcell("tablecell1");
284         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{outputmodule});
285         $main::xestiascan_presmodule->endcell();
286         $main::xestiascan_presmodule->addcell("tablecell2");
287         $main::xestiascan_presmodule->addtext($settings_system_output);
288         $main::xestiascan_presmodule->endcell();
289         $main::xestiascan_presmodule->endrow();
291         $main::xestiascan_presmodule->startrow();
292         $main::xestiascan_presmodule->addcell("tablecell1");
293         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{authmodule});
294         $main::xestiascan_presmodule->endcell();
295         $main::xestiascan_presmodule->addcell("tablecell2");
296         $main::xestiascan_presmodule->addtext($settings_system_auth);
297         $main::xestiascan_presmodule->endcell();
298         $main::xestiascan_presmodule->endrow();
300         $main::xestiascan_presmodule->endtable();
302         $main::xestiascan_presmodule->addlinebreak();
303         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{altersettings});
305         $main::xestiascan_presmodule->endbox();
306         $main::xestiascan_presmodule->endbox();
307         $main::xestiascan_presmodule->endbox();
308         
309         return $main::xestiascan_presmodule->grab();
313 sub xestiascan_settings_edit{
314 #################################################################################
315 # xestiascan_settings_edit: Edits the options.                                  #
316 #                                                                               #
317 # Usage:                                                                        #
318 #                                                                               #
319 # xestiascan_settings_edit(options);                                            #
320 #                                                                               #
321 # options               Specifies the following options in any order.           #
322 #                                                                               #
323 # ScansURIPath          Specifies the new URI path for scanned images.          #
324 # ScansFSPath           Specifies the new filesystem path for scanned images.   #
325 # DateTimeFormat        Specifies the new date and time format to use.          #
326 # ImagesURIPath         Specifies the new URI path for images.                  #
327 # DateTimeFormat        Specifies the new date and time format.                 #
328 # SystemLanguage        Specifies the new language to use for Xestia Scanner    #
329 #                       Server.                                                 #
330 # PrsentationModule     Specifies the new presentation module to use for        #
331 #                       Xestia Scanner Server.                                  #
332 # AuthModule            Specifies the new authentication module to use for      #
333 #                       Xestia Scanner Server.                                  #
334 # OutputModule          Specifies the new output module to use for Xestia       #
335 #                       Scanner Server.                                         #
336 #                                                                               #
337 # Options for server-based authentication modules.                              #
338 #                                                                               #
339 # DatabaseServer        Specifies the database server to use.                   #
340 # DaravasePort          Specifies the port the database server is running on.   #
341 # DatabaseProtocol      Specifies the protocol the database server is using.    #
342 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
343 # DatabaseUsername      Specifies the database server username.                 #
344 # DatabasePasswordKeep  Keeps the current password in the configuration file.   #
345 # DatabasePassword      Specifies the password for the database server username.#
346 # DatabaseTablePrefix   Specifies the prefix used for tables.                   #
347 #################################################################################
349         # Get the values that have been passed to the subroutine.
351         my ($passedoptions) = @_;
353         # Get the values from the hash.
355         my $settings_imagesuri                  = $passedoptions->{"ImagesURIPath"};
356         my $settings_scansuri                   = $passedoptions->{"ScansURIPath"};
357         my $settings_scansfs                    = $passedoptions->{"ScansFSPath"};
358         my $settings_datetimeformat             = $passedoptions->{"DateTimeFormat"};
359         my $settings_languagesystem             = $passedoptions->{"SystemLanguage"};
360         my $settings_presmodule                 = $passedoptions->{"PresentationModule"};
361         my $settings_outputmodule               = $passedoptions->{"OutputModule"};
362         my $settings_authmodule                 = $passedoptions->{"AuthModule"};
364         my $settings_database_server            = $passedoptions->{"DatabaseServer"};
365         my $settings_database_port              = $passedoptions->{"DatabasePort"};
366         my $settings_database_protocol          = $passedoptions->{"DatabaseProtocol"};
367         my $settings_database_sqldatabase       = $passedoptions->{"DatabaseSQLDatabase"};
368         my $settings_database_username          = $passedoptions->{"DatabaseUsername"};
369         my $settings_database_passwordkeep      = $passedoptions->{"DatabasePasswordKeep"};
370         my $settings_database_password          = $passedoptions->{"DatabasePassword"};
371         my $settings_database_tableprefix       = $passedoptions->{"DatabaseTablePrefix"};
373         my $confirm                             = $passedoptions->{"Confirm"};
375         # Connect to the database server.
376         
377         $main::xestiascan_authmodule->connect();
378         
379         # Check if any errors occured while connecting to the database server.
380         
381         if ($main::xestiascan_authmodule->geterror eq "AuthConnectionError"){
382                 
383                 # A database connection error has occured so return
384                 # an error.
385                 
386                 xestiascan_error("authconnectionerror", $main::xestiascan_authmodule->geterror(1));
387                 
388         }
389         
390         my $access_editsettings = $main::xestiascan_authmodule->getpermissions({ Username => $main::loggedin_user, PermissionType => "Admin" });
391         
392         if ($main::xestiascan_authmodule->geterror eq "DatabaseError"){
393                 
394                 # A database error has occured so return an error with
395                 # the extended error information.
396                 
397                 xestiascan_error("autherror", $main::xestiascan_authmodule->geterror(1));
398                 
399         }
400         
401         if ($access_editsettings ne 1){
402                 
403                 # User not allowed to perform this action so return an error.
404                 xestiascan_error("notpermitted");
405                 
406         }
407         
408         # Disconnect from the database server.
409         
410         $main::xestiascan_authmodule->disconnect();
411         
412         if (!$confirm){
414                 # If the confirm value is blank, then set the confirm
415                 # value to 0.
417                 $confirm = 0;
419         }
421         if ($confirm eq "1"){
423                 # The action to edit the settings has been confirmed.
424                 # Start by checking each variable about to be placed
425                 # in the settings file is valid.
427                 # Deinfe some variables for later.
429                 my @xestiascan_new_settings;
431                 # Check the length of the directory names.
433                 xestiascan_variablecheck($settings_imagesuri, "maxlength", 512, 0);
434                 xestiascan_variablecheck($settings_scansuri, "maxlength", 512, 0);
435                 xestiascan_variablecheck($settings_scansfs, "maxlength", 4096, 0);
436                 xestiascan_variablecheck($settings_datetimeformat, "maxlength", 32, 0);
438                 xestiascan_variablecheck($settings_languagesystem, "language_filename", "", 0);
440                 # Check the module names to see if they're valid.
442                 my $xestiascan_presmodule_modulename_check      = xestiascan_variablecheck($settings_presmodule, "module", 0, 1);
443                 my $xestiascan_authmodule_modulename_check              = xestiascan_variablecheck($settings_authmodule, "module", 0, 1);
444                 my $xestiascan_outputmodule_modulename_check    = xestiascan_variablecheck($settings_outputmodule, "module", 0, 1);
446                 if ($xestiascan_presmodule_modulename_check eq 1){
448                         # The presentation module name is blank, so return
449                         # an error.
451                         xestiascan_error("presmoduleblank");
453                 }
455                 if ($xestiascan_presmodule_modulename_check eq 2){
457                         # The presentation module name is invalid, so return
458                         # an error.
460                         xestiascan_error("presmoduleinvalid");
462                 }
464                 if ($xestiascan_authmodule_modulename_check eq 1){
466                         # The database module name is blank, so return
467                         # an error.
469                         xestiascan_error("authmoduleblank");
471                 }
473                 if ($xestiascan_authmodule_modulename_check eq 2){
475                         # The database module name is invalid, so return
476                         # an error.
478                         xestiascan_error("authmoduleinvalid");
480                 }
482                 if ($xestiascan_outputmodule_modulename_check eq 1){
484                         # The output module name is blank, so return
485                         # an error.
487                         xestiascan_error("outputmoduleblank");
489                 }
491                 if ($xestiascan_outputmodule_modulename_check eq 2){
493                         # The output module name is invalid, so return
494                         # an error.
496                         xestiascan_error("outputmoduleinvalid");
498                 }
500                 # Check if the directory names only contain letters and numbers and
501                 # return a specific error if they don't.
503                 xestiascan_variablecheck($settings_datetimeformat, "datetime", 0, 0);
505                 # Check if the presentation module with the filename given exists.
507                 my $presmodule_exists = xestiascan_fileexists("Modules/Presentation/" . $settings_presmodule . ".pm");
509                 if ($presmodule_exists eq 1){
511                         # The presentation module does not exist so return an error.
513                         xestiascan_error("presmodulemissing");
515                 }
517                 # Check if the database module with the filename given exists.
519                 my $authmodule_exists = xestiascan_fileexists("Modules/Auth/" . $settings_authmodule . ".pm");
521                 if ($authmodule_exists eq 1){
523                         # The database module does not exist so return an error.
525                         xestiascan_error("dbmodulemissing");
527                 }
529                 # Check if the language filename given exists.
531                 my $languagefile_exists = xestiascan_fileexists("lang/" . $settings_languagesystem . ".lang");
533                 if ($languagefile_exists eq 1){
535                         # The language filename given does not exist so return an error.
537                         xestiascan_error("languagefilenamemissing");            
539                 }
541                 # Check the database server options to see if they are valid.
543                 my $xestiascan_databaseserver_length_check              = xestiascan_variablecheck($settings_database_server, "maxlength", 128, 1);
544                 my $xestiascan_databaseserver_lettersnumbers_check      = xestiascan_variablecheck($settings_database_server, "lettersnumbers", 0, 1);
545                 my $xestiascan_databaseport_length_check                        = xestiascan_variablecheck($settings_database_port, "maxlength", 5, 1);
546                 my $xestiascan_databaseport_numbers_check               = xestiascan_variablecheck($settings_database_port, "numbers", 0, 1);
547                 my $xestiascan_databaseport_port_check                  = xestiascan_variablecheck($settings_database_port, "port", 0, 1);
548                 my $xestiascan_databaseprotocol_length_check            = xestiascan_variablecheck($settings_database_protocol, "maxlength", 5, 1);
549                 my $xestiascan_databaseprotocol_protocol_check          = xestiascan_variablecheck($settings_database_protocol, "serverprotocol", 0, 1);
550                 my $xestiascan_databasename_length_check                        = xestiascan_variablecheck($settings_database_sqldatabase, "maxlength", 32, 1);
551                 my $xestiascan_databasename_lettersnumbers_check                = xestiascan_variablecheck($settings_database_sqldatabase, "lettersnumbers", 0, 1);
552                 my $xestiascan_databaseusername_length_check            = xestiascan_variablecheck($settings_database_username, "maxlength", 16, 1);
553                 my $xestiascan_databaseusername_lettersnumbers_check    = xestiascan_variablecheck($settings_database_username, "lettersnumbers", 0, 1);
554                 my $xestiascan_databasepassword_length_check            = xestiascan_variablecheck($settings_database_password, "maxlength", 64, 1);
555                 my $xestiascan_databasetableprefix_length_check         = xestiascan_variablecheck($settings_database_tableprefix, "maxlength", 16, 1);
556                 my $xestiascan_databasetableprefix_lettersnumbers_check = xestiascan_variablecheck($settings_database_tableprefix, "lettersnumbers", 0, 1);
558                 if ($xestiascan_databaseserver_length_check eq 1){
560                         # The length of the database server name is too long so
561                         # return an error.
563                         xestiascan_error("servernametoolong");
565                 }
567                 if ($xestiascan_databaseserver_lettersnumbers_check eq 1){
569                         # The database server name contains characters other
570                         # than letters and numbers, so return an error.
572                         xestiascan_error("servernameinvalid");
574                 }
576                 if ($xestiascan_databaseport_length_check eq 1){
578                         # The database port number length is too long so return
579                         # an error.
581                         xestiascan_error("serverportnumbertoolong");
583                 }
585                 if ($xestiascan_databaseport_numbers_check eq 1){
587                         # The database port number contains characters other
588                         # than numbers so return an error.
590                         xestiascan_error("serverportnumberinvalidcharacters");
592                 }
594                 if ($xestiascan_databaseport_port_check eq 1){
596                         # The database port number given is invalid so return
597                         # an error.
599                         xestiascan_error("serverportnumberinvalid");
601                 }
603                 if ($xestiascan_databaseprotocol_length_check eq 1){
605                         # The database protocol name given is too long so
606                         # return an error.
608                         xestiascan_error("serverprotocolnametoolong");
610                 }
612                 if ($xestiascan_databaseprotocol_protocol_check eq 1){
614                         # The server protcol given is invalid so return
615                         # an error.
617                         xestiascan_error("serverprotocolinvalid");
619                 }
621                 if ($xestiascan_databasename_length_check eq 1){
623                         # The SQL database name is too long so return
624                         # an error.
626                         xestiascan_error("serverdatabasenametoolong");
628                 }
630                 if ($xestiascan_databasename_lettersnumbers_check eq 1){
632                         # The database name contains invalid characters
633                         # so return an error.
635                         xestiascan_error("serverdatabasenameinvalid");
637                 }
639                 if ($xestiascan_databaseusername_length_check eq 1){
641                         # The database username given is too long so
642                         # return an error.
644                         xestiascan_error("serverdatabaseusernametoolong");
646                 }
648                 if ($xestiascan_databaseusername_lettersnumbers_check eq 1){
650                         # The database username contains invalid characters
651                         # so return an error.
653                         xestiascan_error("serverdatabaseusernameinvalid");
655                 }
657                 if ($xestiascan_databasepassword_length_check eq 1){
659                         # The database password given is too long so return
660                         # an error.
662                         xestiascan_error("serverdatabasepasswordtoolong");
664                 }
666                 if ($xestiascan_databasetableprefix_length_check eq 1){
668                         # The database table prefix given is too long so
669                         # return an error.
671                         xestiascan_error("serverdatabasetableprefixtoolong");
673                 }
675                 if ($xestiascan_databasetableprefix_lettersnumbers_check eq 1){
677                         # The database table prefix given contains invalid
678                         # characters so return an error.
680                         xestiascan_error("serverdatabasetableprefixinvalid");
682                 }
684                 # Check if the current password should be kept.
686                 if ($settings_database_passwordkeep eq "on"){
688                         # The current password in the configuration file should be used.
690                         $settings_database_password     = $main::xestiascan_config{"database_password"};
692                 }
694                 # Write the new settings to the configuration file.
696                 xestiascan_output_config({ ImagesURIPath => $settings_imagesuri,
697                         ScansURIPath => $settings_scansuri,
698                         ScansFSPath => $settings_scansfs,
699                         DateTimeFormat => $settings_datetimeformat, 
700                         SystemLanguage => $settings_languagesystem, 
701                         PresentationModule => $settings_presmodule, 
702                         OutputModule => $settings_outputmodule, 
703                         AuthModule => $settings_authmodule, 
704                         DatabaseServer => $settings_database_server, 
705                         DatabasePort => $settings_database_port, 
706                         DatabaseProtocol => $settings_database_protocol, 
707                         DatabaseSQLDatabase => $settings_database_sqldatabase, 
708                         DatabaseUsername => $settings_database_username, 
709                         DatabasePassword => $settings_database_password, 
710                         DatabaseTablePrefix => $settings_database_tableprefix 
711                 });
713                 # Write a confirmation message.
715                 $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{settingsedited}, { Style => "pageheader" });
716                 $main::xestiascan_presmodule->addlinebreak();
717                 $main::xestiascan_presmodule->addlinebreak();
718                 $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{settingseditedmessage});
719                 $main::xestiascan_presmodule->addlinebreak();
720                 $main::xestiascan_presmodule->addlinebreak();
721                 $main::xestiascan_presmodule->addlink($main::xestiascan_env{"script_filename"} . "?mode=settings", { Text => $main::xestiascan_lang{setting}{returnsettingslist} });
723                 return $main::xestiascan_presmodule->grab();
725         }
727         # Get the list of languages available.
729         my %language_list;
730         my @language_directory          = "";
731         my $language;
732         my ($language_file, %language_file);
733         my $language_filename           = "";
734         my $language_file_localname     = "";
735         my $language_file_count         = 0;
736         my $language_config             = $main::xestiascan_config{"system_language"};
737         my @lang_data;
738         my $xestiascan_languagefilehandle;
740         tie(%language_list, 'Tie::IxHash');
742         @language_directory = xestiascan_settings_getlanguages;
743         
744         # Process each language by loading the language file
745         # used for each language and then get the System name and 
746         # the local name of the language.
747         
748         foreach $language_filename (@language_directory){
749                 
750                 # Load the language file currently selected.
751                 
752                 open($xestiascan_languagefilehandle, "lang/" . $language_filename . ".lang");
753                 @lang_data = <$xestiascan_languagefilehandle>;
754                 %language_file = xestiascan_processconfig(@lang_data);
755                 close($xestiascan_languagefilehandle);
757                 # Get the system name and the local name of the language.
759                 $language_file_localname = $language_file{about}{name};
761                 # Check if either the system name or the local name of the language
762                 # is blank and if it is, then don't add the language to the list.
764                 if (!$language_file_localname){
766                         # The system name or the local name is blank so don't add
767                         # the language to the list.
768                 
769                 } else {
771                         # Append the language to the available languages list.
773                         $language_list{$language_file_count}{Filename} = $language_filename;
774                         $language_list{$language_file_count}{Name} = $language_file_localname;
775                         $language_file_count++;
777                 }
779                 undef $language_file;
781         }
783         # Get the list of presentation modules available.
785         my %presmodule_list;
786         my @presmodule_directory;
787         my $presmodule;
788         my $presmodule_file             = "";
789         my $presmodule_count            = 0;
790         my $presmodule_config           = $main::xestiascan_config{"system_presmodule"};
792         # Open and get the list of presentation modules (perl modules) by getting
793         # only files which end in .pm.
795         @presmodule_directory = xestiascan_settings_getpresmodules;
797         foreach $presmodule_file (@presmodule_directory){
798                 
799                 $presmodule_list{$presmodule_count}{Filename} = $presmodule_file;
800                 $presmodule_count++;
802         }
804         # Get the list of database modules available.
806         my %authmodule_list;
807         my @authmodule_directory;
808         my $authmodule;
809         my $authmodule_file             = "";
810         my $authmodule_count            = 0;
811         my $authmodule_config           = $main::xestiascan_config{"system_authmodule"};
813         # Open and get the list of database modules (perl modules) by getting
814         # only files which end in .pm.
816         @authmodule_directory = xestiascan_settings_getauthmodules;
818         foreach $authmodule_file (@authmodule_directory){
820                 $authmodule_list{$authmodule_count}{Filename} = $authmodule_file;
821                 $authmodule_count++;
823         }
825         my %outputmodule_list;
826         my @outputmodule_directory;
827         my $outputmodule;
828         my $outputmodule_file           = "";
829         my $outputmodule_count          = 0;
830         my $outputmodule_config         = $main::xestiascan_config{"system_outputmodule"};
832         # Open and get the list of output modules (perl modules) by getting
833         # only files which end in .pm.
835         @outputmodule_directory = xestiascan_scan_getoutputmodules;
837         foreach $outputmodule_file (@outputmodule_directory){
839                 $outputmodule_list{$outputmodule_count}{Filename} = $outputmodule_file;
840                 $outputmodule_count++;
842         }
844         # Get the directory settings.
846         my $directory_settings_imagesuri        = $main::xestiascan_config{"directory_noncgi_images"};
847         my $directory_settings_scansuri         = $main::xestiascan_config{"directory_noncgi_scans"};
848         my $directory_settings_scansfs          = $main::xestiascan_config{"directory_fs_scans"};
849         my $datetime_setting                    = $main::xestiascan_config{"system_datetime"};
851         my $database_server                     = $main::xestiascan_config{"database_server"};
852         my $database_port                       = $main::xestiascan_config{"database_port"};
853         my $database_protocol                   = $main::xestiascan_config{"database_protocol"};
854         my $database_sqldatabase                = $main::xestiascan_config{"database_sqldatabase"};
855         my $database_username                   = $main::xestiascan_config{"database_username"};
856         my $database_passwordhash               = $main::xestiascan_config{"database_passwordhash"};
857         my $database_password                   = $main::xestiascan_config{"database_password"};
858         my $database_prefix                     = $main::xestiascan_config{"database_tableprefix"};
860         # Print out a form for editing the settings.
862         $main::xestiascan_presmodule->startbox("sectionboxnofloat");
863         $main::xestiascan_presmodule->startbox("sectiontitle");
864         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{editsettings});
865         $main::xestiascan_presmodule->endbox();
866         $main::xestiascan_presmodule->startbox("secondbox");
867         
868         $main::xestiascan_presmodule->addboldtext($main::xestiascan_lang{setting}{warning});
869         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{warningmessage});
870         $main::xestiascan_presmodule->addlinebreak();
871         $main::xestiascan_presmodule->addlinebreak();
873         $main::xestiascan_presmodule->startform($main::xestiascan_env{"script_filename"}, "POST");
874         $main::xestiascan_presmodule->startbox();
875         $main::xestiascan_presmodule->addhiddendata("mode", "settings");
876         $main::xestiascan_presmodule->addhiddendata("action", "edit");
877         $main::xestiascan_presmodule->addhiddendata("confirm", 1);
879         $main::xestiascan_presmodule->starttable("", { CellPadding => 5, CellSpacing => 0 });
881         $main::xestiascan_presmodule->startheader();
882         $main::xestiascan_presmodule->addheader($main::xestiascan_lang{common}{setting}, { Style => "tablecellheader" });
883         $main::xestiascan_presmodule->addheader($main::xestiascan_lang{common}{value}, { Style => "tablecellheader" });
884         $main::xestiascan_presmodule->endheader();
886         $main::xestiascan_presmodule->startrow();
887         $main::xestiascan_presmodule->addcell("tablecellheader");
888         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{directories});
889         $main::xestiascan_presmodule->endcell();
890         $main::xestiascan_presmodule->addcell("tablecellheader");
891         $main::xestiascan_presmodule->endcell();
892         $main::xestiascan_presmodule->endrow();
894         $main::xestiascan_presmodule->startrow();
895         $main::xestiascan_presmodule->addcell("tablecell1");
896         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{imagesuripath});
897         $main::xestiascan_presmodule->endcell();
898         $main::xestiascan_presmodule->addcell("tablecell2");
899         $main::xestiascan_presmodule->addinputbox("imagesuripath", { Size => 32, MaxLength => 512, Value => $directory_settings_imagesuri });
900         $main::xestiascan_presmodule->endcell();
901         $main::xestiascan_presmodule->endrow();
903         $main::xestiascan_presmodule->startrow();
904         $main::xestiascan_presmodule->addcell("tablecell1");
905         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{scansuripath});
906         $main::xestiascan_presmodule->endcell();
907         $main::xestiascan_presmodule->addcell("tablecell2");
908         $main::xestiascan_presmodule->addinputbox("scansuripath", { Size => 32, MaxLength => 512, Value => $directory_settings_scansuri });
909         $main::xestiascan_presmodule->endcell();
910         $main::xestiascan_presmodule->endrow();
912         $main::xestiascan_presmodule->startrow();
913         $main::xestiascan_presmodule->addcell("tablecell1");
914         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{scansfspath});
915         $main::xestiascan_presmodule->endcell();
916         $main::xestiascan_presmodule->addcell("tablecell2");
917         $main::xestiascan_presmodule->addinputbox("scansfspath", { Size => 64, MaxLength => 4096, Value => $directory_settings_scansfs });
918         $main::xestiascan_presmodule->endcell();
919         $main::xestiascan_presmodule->endrow();
920         
921         $main::xestiascan_presmodule->startrow();
922         $main::xestiascan_presmodule->addcell("tablecellheader");
923         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{date});
924         $main::xestiascan_presmodule->endcell();
925         $main::xestiascan_presmodule->addcell("tablecellheader");
926         $main::xestiascan_presmodule->endcell();
927         $main::xestiascan_presmodule->endrow();
929         $main::xestiascan_presmodule->startrow();
930         $main::xestiascan_presmodule->addcell("tablecell1");
931         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{dateformat});
932         $main::xestiascan_presmodule->endcell();
933         $main::xestiascan_presmodule->addcell("tablecell2");
934         $main::xestiascan_presmodule->addinputbox("datetime", { Size => 32, MaxLength => 64, Value => $datetime_setting });
935         $main::xestiascan_presmodule->addlinebreak();
936         $main::xestiascan_presmodule->addlinebreak();
937         $main::xestiascan_presmodule->startbox("datalist");
939         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singleday});
940         $main::xestiascan_presmodule->addlinebreak();
941         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doubleday});
942         $main::xestiascan_presmodule->addlinebreak();
943         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singlemonth});
944         $main::xestiascan_presmodule->addlinebreak();
945         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doublemonth});
946         $main::xestiascan_presmodule->addlinebreak();
947         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singleyear});
948         $main::xestiascan_presmodule->addlinebreak();
949         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doubleyear});
950         $main::xestiascan_presmodule->addlinebreak();
951         $main::xestiascan_presmodule->addlinebreak();
952         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singlehour});
953         $main::xestiascan_presmodule->addlinebreak();
954         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doublehour});
955         $main::xestiascan_presmodule->addlinebreak();
956         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singleminute});
957         $main::xestiascan_presmodule->addlinebreak();
958         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doubleminute});
959         $main::xestiascan_presmodule->addlinebreak();
960         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{singlesecond});
961         $main::xestiascan_presmodule->addlinebreak();
962         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{doublesecond});
963         $main::xestiascan_presmodule->addlinebreak();
964         $main::xestiascan_presmodule->addlinebreak();
965         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{othercharacters});
966         $main::xestiascan_presmodule->endbox();
967         $main::xestiascan_presmodule->endcell();
968         $main::xestiascan_presmodule->endrow();
970         $main::xestiascan_presmodule->startrow();
971         $main::xestiascan_presmodule->addcell("tablecellheader");
972         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{language});
973         $main::xestiascan_presmodule->endcell();
974         $main::xestiascan_presmodule->addcell("tablecellheader");
975         $main::xestiascan_presmodule->endcell();
976         $main::xestiascan_presmodule->endrow();
978         $main::xestiascan_presmodule->startrow();
979         $main::xestiascan_presmodule->addcell("tablecell1");
980         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{systemlanguage});
981         $main::xestiascan_presmodule->endcell();
982         $main::xestiascan_presmodule->addcell("tablecell2");
984         $main::xestiascan_presmodule->addselectbox("language");
986         # Process the list of available languages.
988         foreach $language (keys %language_list){
990                 # Check if the language filename matches the filename in the configuration
991                 # file.
993                 if ($language_list{$language}{Filename} eq $language_config){
995                         $main::xestiascan_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} , Selected => 1 });
997                 } else {
999                         $main::xestiascan_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
1001                 }
1003         }
1005         $main::xestiascan_presmodule->endselectbox();
1007         $main::xestiascan_presmodule->startrow();
1008         $main::xestiascan_presmodule->addcell("tablecellheader");
1009         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{modules});
1010         $main::xestiascan_presmodule->endcell();
1011         $main::xestiascan_presmodule->addcell("tablecellheader");
1012         $main::xestiascan_presmodule->endcell();
1013         $main::xestiascan_presmodule->endrow();
1015         $main::xestiascan_presmodule->startrow();
1016         $main::xestiascan_presmodule->addcell("tablecell1");
1017         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{presentationmodule});
1018         $main::xestiascan_presmodule->endcell();
1019         $main::xestiascan_presmodule->addcell("tablecell2");
1021         $main::xestiascan_presmodule->addselectbox("presmodule");
1023         # Process the list of available presentation modules.
1025         foreach $presmodule (keys %presmodule_list){
1027                 # Check if the presentation module fileanme matches the filename in the 
1028                 # configuration file.
1030                 if ($presmodule_list{$presmodule}{Filename} eq $presmodule_config){
1032                         $main::xestiascan_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} , Selected => 1 });
1034                 } else {
1036                         $main::xestiascan_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
1038                 }
1040         }
1042         $main::xestiascan_presmodule->endselectbox();
1044         $main::xestiascan_presmodule->endcell();
1045         $main::xestiascan_presmodule->endrow();
1047         $main::xestiascan_presmodule->startrow();
1048         $main::xestiascan_presmodule->addcell("tablecell1");
1049         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{outputmodule});
1050         $main::xestiascan_presmodule->endcell();
1051         $main::xestiascan_presmodule->addcell("tablecell2");
1053         # Process the list of available output modules.
1055         $main::xestiascan_presmodule->addselectbox("outputmodule");
1057         foreach $outputmodule (keys %outputmodule_list){
1059                 # Check if the output module fileanme matches the filename in the 
1060                 # configuration file.
1062                 if ($outputmodule_list{$outputmodule}{Filename} eq $outputmodule_config){
1064                         $main::xestiascan_presmodule->addoption($outputmodule_list{$outputmodule}{Filename}, { Value => $outputmodule_list{$outputmodule}{Filename} , Selected => 1 });
1066                 } else {
1068                         $main::xestiascan_presmodule->addoption($outputmodule_list{$outputmodule}{Filename}, { Value => $outputmodule_list{$outputmodule}{Filename} });
1070                 }
1073         }
1075         $main::xestiascan_presmodule->endselectbox();
1077         $main::xestiascan_presmodule->endcell();
1078         $main::xestiascan_presmodule->endrow();
1080         $main::xestiascan_presmodule->startrow();
1081         $main::xestiascan_presmodule->addcell("tablecell1");
1082         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{authmodule});
1083         $main::xestiascan_presmodule->endcell();
1084         $main::xestiascan_presmodule->addcell("tablecell2");
1086         # Process the list of available database modules.
1088         $main::xestiascan_presmodule->addselectbox("authmodule");
1090         foreach $authmodule (keys %authmodule_list){
1092                 # Check if the database module fileanme matches the filename in the 
1093                 # configuration file.
1095                 if ($authmodule_list{$authmodule}{Filename} eq $authmodule_config){
1097                         $main::xestiascan_presmodule->addoption($authmodule_list{$authmodule}{Filename}, { Value => $authmodule_list{$authmodule}{Filename} , Selected => 1 });
1099                 } else {
1101                         $main::xestiascan_presmodule->addoption($authmodule_list{$authmodule}{Filename}, { Value => $authmodule_list{$authmodule}{Filename} });
1103                 }
1106         }
1108         $main::xestiascan_presmodule->endselectbox();
1110         $main::xestiascan_presmodule->endcell();
1111         $main::xestiascan_presmodule->endrow();
1113         $main::xestiascan_presmodule->startrow();
1114         $main::xestiascan_presmodule->addcell("tablecell1");
1115         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databaseserver});
1116         $main::xestiascan_presmodule->endcell();
1117         $main::xestiascan_presmodule->addcell("tablecell2");
1118         $main::xestiascan_presmodule->addinputbox("database_server", { Size => 32, MaxLength => 128, Value => $database_server });
1119         $main::xestiascan_presmodule->endcell();
1120         $main::xestiascan_presmodule->endrow();
1122         $main::xestiascan_presmodule->startrow();
1123         $main::xestiascan_presmodule->addcell("tablecell1");
1124         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databaseport});
1125         $main::xestiascan_presmodule->endcell();
1126         $main::xestiascan_presmodule->addcell("tablecell2");
1127         $main::xestiascan_presmodule->addinputbox("database_port", { Size => 5, MaxLength => 5, Value => $database_port });
1128         $main::xestiascan_presmodule->endcell();
1129         $main::xestiascan_presmodule->endrow();
1131         $main::xestiascan_presmodule->startrow();
1132         $main::xestiascan_presmodule->addcell("tablecell1");
1133         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databaseprotocol});
1134         $main::xestiascan_presmodule->endcell();
1135         $main::xestiascan_presmodule->addcell("tablecell2");
1137         # Check if TCP is being used.
1139         $main::xestiascan_presmodule->addselectbox("database_protocol");
1141         if ($database_protocol eq "tcp"){
1143                 # The TCP protocol is selected so have the TCP option selected.
1145                 $main::xestiascan_presmodule->addoption("TCP", { Value => "tcp", Selected => 1});
1147         } else {
1149                 # The TCP protocol is not selected.
1151                 $main::xestiascan_presmodule->addoption("TCP", { Value => "tcp"});
1153         } 
1155         # Check if UDP is being used.
1157         if ($database_protocol eq "udp"){
1159                 # The UDP protocol is selected so have the UDP option selected.
1161                 $main::xestiascan_presmodule->addoption("UDP", { Value => "udp", Selected => 1});
1163         } else {
1165                 # The UDP protocol is not selected.
1167                 $main::xestiascan_presmodule->addoption("UDP", { Value => "udp"});
1169         }
1171         $main::xestiascan_presmodule->endselectbox();
1173         $main::xestiascan_presmodule->endcell();
1174         $main::xestiascan_presmodule->endrow();
1176         $main::xestiascan_presmodule->startrow();
1177         $main::xestiascan_presmodule->addcell("tablecell1");
1178         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databasename});
1179         $main::xestiascan_presmodule->endcell();
1180         $main::xestiascan_presmodule->addcell("tablecell2");
1181         $main::xestiascan_presmodule->addinputbox("database_sqldatabase", { Size => 32, MaxLength => 32, Value => $database_sqldatabase });
1182         $main::xestiascan_presmodule->endcell();
1183         $main::xestiascan_presmodule->endrow();
1185         $main::xestiascan_presmodule->startrow();
1186         $main::xestiascan_presmodule->addcell("tablecell1");
1187         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databaseusername});
1188         $main::xestiascan_presmodule->endcell();
1189         $main::xestiascan_presmodule->addcell("tablecell2");
1190         $main::xestiascan_presmodule->addinputbox("database_username", { Size => 16, MaxLength => 16, Value => $database_username });
1191         $main::xestiascan_presmodule->endcell();
1192         $main::xestiascan_presmodule->endrow();
1194         $main::xestiascan_presmodule->startrow();
1195         $main::xestiascan_presmodule->addcell("tablecell1");
1196         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{databasepassword});
1197         $main::xestiascan_presmodule->endcell();
1198         $main::xestiascan_presmodule->addcell("tablecell2");
1199         $main::xestiascan_presmodule->addinputbox("database_password", { Size => 16, MaxLength => 64, Password => 1 });
1200         $main::xestiascan_presmodule->addtext(" ");
1201         $main::xestiascan_presmodule->addcheckbox("database_password_keep", { OptionDescription => $main::xestiascan_lang{setting}{keepcurrentpassword}, Checked => 1 });
1202         $main::xestiascan_presmodule->endcell();
1203         $main::xestiascan_presmodule->endrow();
1205         $main::xestiascan_presmodule->startrow();
1206         $main::xestiascan_presmodule->addcell("tablecell1");
1207         $main::xestiascan_presmodule->addtext($main::xestiascan_lang{setting}{tableprefix});
1208         $main::xestiascan_presmodule->endcell();
1209         $main::xestiascan_presmodule->addcell("tablecell2");
1210         $main::xestiascan_presmodule->addinputbox("database_tableprefix", { Size => 16, MaxLength => 16, Value => $database_prefix });
1211         $main::xestiascan_presmodule->endcell();
1212         $main::xestiascan_presmodule->endrow();
1214         $main::xestiascan_presmodule->endtable();
1216         $main::xestiascan_presmodule->addlinebreak();
1217         $main::xestiascan_presmodule->addsubmit($main::xestiascan_lang{setting}{changesettingsbutton});
1218         $main::xestiascan_presmodule->addtext(" | ");
1219         $main::xestiascan_presmodule->addreset($main::xestiascan_lang{common}{restorecurrent});
1220         $main::xestiascan_presmodule->addtext(" | ");
1221         $main::xestiascan_presmodule->addlink($main::xestiascan_env{"script_filename"} . "?mode=settings", { Text => $main::xestiascan_lang{setting}->{returnsettingslist} });
1222         $main::xestiascan_presmodule->endbox();
1223         $main::xestiascan_presmodule->endform();
1225         $main::xestiascan_presmodule->endbox();
1226         $main::xestiascan_presmodule->endbox();
1227         
1228         return $main::xestiascan_presmodule->grab();
1230
1232 sub xestiascan_output_config{
1233 #################################################################################
1234 # xestiascan_output_config: Outputs the configuration file.                     #
1235 #                                                                               #
1236 # Usage:                                                                        #
1237 #                                                                               #
1238 # xestiascan_output_config(settings);                                           #
1239 #                                                                               #
1240 # settings      Specifies the following settings in any order.                  #
1241 #                                                                               #
1242 # Settings for Xesita Scanner Server configuration files:                       #
1243 #                                                                               #
1244 # ImagesURIPath         Specifies the new URI path for images.                  #
1245 # ScansURIPath          Specifies the new URI path for scans.                   #
1246 # ScansFSPath           Specifies the new filesystem path for scans.            #
1247 # DateTimeFormat        Specifies the new date and time format.                 #
1248 # SystemLanguage        Specifies the new language to use for Xestia Scanner    #
1249 #                       Server.                                                 #
1250 # PrsentationModule     Specifies the new presentation module to use for        #
1251 #                       Xestia Scanner Server.                                  #
1252 # OutputModule          Specifies the new output module to use for Xestia       #
1253 #                       Scanner Server.                                         #
1254 # AuthModule            Specifies the new authentication module to use for      #
1255 #                       Xestia Scanner Server.                                  #
1256 # DatabaseServer        Specifies the database server to use.                   #
1257 # DaravasePort          Specifies the port the database server is running on.   #
1258 # DatabaseProtocol      Specifies the protocol the database server is using.    #
1259 # DatabaseSQLDatabase   Specifies the SQL database name to use.                 #
1260 # DatabaseUsername      Specifies the database server username.                 #
1261 # DatabasePassword      Specifies the password for the database server username.#
1262 # DatabaseTablePrefix   Specifies the table prefix to use.                      #
1263 #################################################################################
1265         # Get the variables passed from the subroutine.
1267         my ($passedsettings)    = @_;
1269         # Get the data from the hash.
1271         my $settings_imagesuri                  = $passedsettings->{"ImagesURIPath"};
1272         my $settings_scansuri                   = $passedsettings->{"ScansURIPath"};
1273         my $settings_scansfs                    = $passedsettings->{"ScansFSPath"};
1274         my $settings_datetime                   = $passedsettings->{"DateTimeFormat"};
1275         my $settings_systemlanguage             = $passedsettings->{"SystemLanguage"};
1276         my $settings_presmodule                 = $passedsettings->{"PresentationModule"};
1277         my $settings_outputmodule               = $passedsettings->{"OutputModule"};
1278         my $settings_authmodule                 = $passedsettings->{"AuthModule"};
1280         my $settings_database_server            = $passedsettings->{"DatabaseServer"};
1281         my $settings_database_port              = $passedsettings->{"DatabasePort"};
1282         my $settings_database_protocol          = $passedsettings->{"DatabaseProtocol"};
1283         my $settings_database_sqldatabase       = $passedsettings->{"DatabaseSQLDatabase"};
1284         my $settings_database_username          = $passedsettings->{"DatabaseUsername"};
1285         my $settings_database_password          = $passedsettings->{"DatabasePassword"};
1286         my $settings_database_tableprefix       = $passedsettings->{"DatabaseTablePrefix"};
1288         # Convert the password to make sure it can be read properly.
1290         if ($settings_database_password){
1292                 $settings_database_password =~ s/\0//g;
1293                 $settings_database_password =~ s/</&lt;/g;
1294                 $settings_database_password =~ s/>/&gt;/g;
1296         }
1298         # Convert the less than and greater than characters are there and
1299         # convert them.
1301         if ($settings_imagesuri){
1303                 $settings_imagesuri =~ s/</&lt;/g;
1304                 $settings_imagesuri =~ s/>/&gt;/g;
1305                 $settings_imagesuri =~ s/\r//g;
1306                 $settings_imagesuri =~ s/\n//g;
1308         }
1310         if ($settings_scansuri){
1311                 
1312                 $settings_scansuri =~ s/</&lt;/g;
1313                 $settings_scansuri =~ s/>/&gt;/g;
1314                 $settings_scansuri =~ s/\r//g;
1315                 $settings_scansuri =~ s/\n//g;
1316                 
1317         }
1318         
1319         if ($settings_scansfs){
1320                 
1321                 $settings_scansfs =~ s/</&lt;/g;
1322                 $settings_scansfs =~ s/>/&gt;/g;
1323                 $settings_scansfs =~ s/\r//g;
1324                 $settings_scansfs =~ s/\n//g;
1325                 
1326         }
1328         # Check if the database password value is undefined and if it is then
1329         # set it blank.
1331         if (!$settings_database_password){
1333                 $settings_database_password = "";
1335         }
1337         # Create the Xestia Scanner Server configuration file layout.
1339         my $configdata = "[config]\r\n";
1341         $configdata = $configdata . "directory_noncgi_images = "  . $settings_imagesuri . "\r\n";
1342         $configdata = $configdata . "directory_noncgi_scans = "  . $settings_scansuri . "\r\n";
1343         $configdata = $configdata . "directory_fs_scans = "  . $settings_scansfs . "\r\n\r\n";
1345         $configdata = $configdata . "system_language = "  . $settings_systemlanguage . "\r\n";
1346         $configdata = $configdata . "system_presmodule = "  . $settings_presmodule . "\r\n";
1347         $configdata = $configdata . "system_authmodule = "  . $settings_authmodule . "\r\n";
1348         $configdata = $configdata . "system_outputmodule = "  . $settings_outputmodule . "\r\n";
1349         $configdata = $configdata . "system_datetime = "  . $settings_datetime . "\r\n\r\n";
1351         $configdata = $configdata . "database_server = "  . $settings_database_server . "\r\n";
1352         $configdata = $configdata . "database_port = "  . $settings_database_port . "\r\n";
1353         $configdata = $configdata . "database_protocol = "  . $settings_database_protocol . "\r\n";
1354         $configdata = $configdata . "database_sqldatabase = "  . $settings_database_sqldatabase . "\r\n";
1355         $configdata = $configdata . "database_username = "  . $settings_database_username . "\r\n";
1356         $configdata = $configdata . "database_password = "  . $settings_database_password . "\r\n";
1357         $configdata = $configdata . "database_tableprefix = "  . $settings_database_tableprefix . "\r\n\r\n";
1359         # Open the Xestia Scanner Server configuration file, write the new 
1360         # settings to the configuration file and make sure the file
1361         # permissions are set to the correct value.
1363         open(my $filehandle_config, "> ", "xsdss.cfg");
1364         print $filehandle_config $configdata;
1365         close($filehandle_config);
1366         chmod(0660, "xsdss.cfg");
1367         
1368         return;
1370 };
1372 1;
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy