1 #################################################################################
2 # Xestia Scanner Server - Settings System Module #
5 # Copyright (C) 2010-2011 Steve Brokenshire <sbrokenshire@xestia.co.uk> #
7 # This module is licensed under the same license as Xestia Scanner Server which #
8 # is licensed under the GPL version 3. #
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. #
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. #
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;
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 #
41 # @authmodules = xestiascan_settings_getauthmodules; #
42 #################################################################################
44 my (@authmoduleslist, @authmoduleslist_final);
47 opendir(AUTHMODULEDIR, "Modules/Auth");
48 @authmoduleslist = grep /m*\.pm$/, sort(readdir(AUTHMODULEDIR));
49 closedir(AUTHMODULEDIR);
51 foreach $authmodulefile (@authmoduleslist){
52 next if $authmodulefile =~ m/^\./;
53 next if $authmodulefile !~ m/.pm$/;
54 $authmodulefile =~ s/.pm$//;
55 push(@authmoduleslist_final, $authmodulefile);
58 return @authmoduleslist_final;
62 sub xestiascan_settings_getpresmodules{
63 #################################################################################
64 # xestiascan_settings_getpresmodules: Gets the list of available presentation #
69 # @presmodules = xestiascan_settings_getpresmodules; #
70 #################################################################################
72 my (@presmoduleslist, @presmoduleslist_final);
75 opendir(PRESMODULEDIR, "Modules/Presentation");
76 @presmoduleslist = grep /m*\.pm$/, sort(readdir(PRESMODULEDIR));
77 closedir(PRESMODULEDIR);
79 foreach $presmodulefile (@presmoduleslist){
80 next if $presmodulefile =~ m/^\./;
81 next if $presmodulefile !~ m/.pm$/;
82 $presmodulefile =~ s/.pm$//;
83 push(@presmoduleslist_final, $presmodulefile);
86 return @presmoduleslist_final;
90 sub xestiascan_settings_getlanguages{
91 #################################################################################
92 # xestiascan_settings_getlanguages: Gets the list of available languages. #
96 # @languages = xestiascan_settings_getlanguages; #
97 #################################################################################
99 my (@langmoduleslist, @langmoduleslist_final);
102 opendir(LANGUAGESDIR, "lang");
103 @langmoduleslist = grep /m*\.lang$/, sort(readdir(LANGUAGESDIR));
104 closedir(LANGUAGESDIR);
106 foreach $langmodulefile (@langmoduleslist){
107 next if $langmodulefile =~ m/^\./;
108 next if $langmodulefile !~ m/.lang$/;
109 $langmodulefile =~ s/.lang$//;
110 push(@langmoduleslist_final, $langmodulefile);
113 return @langmoduleslist_final;
117 sub xestiascan_settings_view{
118 #################################################################################
119 # xestiascan_options_view: Writes out the list of options and variables. #
123 # xestiascan_settings_view(); #
124 #################################################################################
126 # Connect to the database server.
128 $main::xestiascan_authmodule->connect();
130 # Check if any errors occured while connecting to the database server.
132 if ($main::xestiascan_authmodule->geterror eq "AuthConnectionError"){
134 # A database connection error has occured so return
137 xestiascan_error("authconnectionerror", $main::xestiascan_authmodule->geterror(1));
141 my $access_viewsettings = $main::xestiascan_authmodule->getpermissions({ Username => $main::loggedin_user, PermissionType => "Admin" });
143 if ($main::xestiascan_authmodule->geterror eq "DatabaseError"){
145 # A database error has occured so return an error with
146 # the extended error information.
148 xestiascan_error("autherror", $main::xestiascan_authmodule->geterror(1));
152 if ($access_viewsettings ne 1){
154 # User not allowed to perform this action so return an error.
155 xestiascan_error("notpermitted");
159 # Disconnect from the database server.
161 $main::xestiascan_authmodule->disconnect();
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();
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();
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();
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();
309 return $main::xestiascan_presmodule->grab();
313 sub xestiascan_settings_edit{
314 #################################################################################
315 # xestiascan_settings_edit: Edits the options. #
319 # xestiascan_settings_edit(options); #
321 # options Specifies the following options in any order. #
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 #
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 #
337 # Options for server-based authentication modules. #
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.
377 $main::xestiascan_authmodule->connect();
379 # Check if any errors occured while connecting to the database server.
381 if ($main::xestiascan_authmodule->geterror eq "AuthConnectionError"){
383 # A database connection error has occured so return
386 xestiascan_error("authconnectionerror", $main::xestiascan_authmodule->geterror(1));
390 my $access_editsettings = $main::xestiascan_authmodule->getpermissions({ Username => $main::loggedin_user, PermissionType => "Admin" });
392 if ($main::xestiascan_authmodule->geterror eq "DatabaseError"){
394 # A database error has occured so return an error with
395 # the extended error information.
397 xestiascan_error("autherror", $main::xestiascan_authmodule->geterror(1));
401 if ($access_editsettings ne 1){
403 # User not allowed to perform this action so return an error.
404 xestiascan_error("notpermitted");
408 # Disconnect from the database server.
410 $main::xestiascan_authmodule->disconnect();
414 # If the confirm value is blank, then set the confirm
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
451 xestiascan_error("presmoduleblank");
455 if ($xestiascan_presmodule_modulename_check eq 2){
457 # The presentation module name is invalid, so return
460 xestiascan_error("presmoduleinvalid");
464 if ($xestiascan_authmodule_modulename_check eq 1){
466 # The database module name is blank, so return
469 xestiascan_error("authmoduleblank");
473 if ($xestiascan_authmodule_modulename_check eq 2){
475 # The database module name is invalid, so return
478 xestiascan_error("authmoduleinvalid");
482 if ($xestiascan_outputmodule_modulename_check eq 1){
484 # The output module name is blank, so return
487 xestiascan_error("outputmoduleblank");
491 if ($xestiascan_outputmodule_modulename_check eq 2){
493 # The output module name is invalid, so return
496 xestiascan_error("outputmoduleinvalid");
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");
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");
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");
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
563 xestiascan_error("servernametoolong");
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");
576 if ($xestiascan_databaseport_length_check eq 1){
578 # The database port number length is too long so return
581 xestiascan_error("serverportnumbertoolong");
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");
594 if ($xestiascan_databaseport_port_check eq 1){
596 # The database port number given is invalid so return
599 xestiascan_error("serverportnumberinvalid");
603 if ($xestiascan_databaseprotocol_length_check eq 1){
605 # The database protocol name given is too long so
608 xestiascan_error("serverprotocolnametoolong");
612 if ($xestiascan_databaseprotocol_protocol_check eq 1){
614 # The server protcol given is invalid so return
617 xestiascan_error("serverprotocolinvalid");
621 if ($xestiascan_databasename_length_check eq 1){
623 # The SQL database name is too long so return
626 xestiascan_error("serverdatabasenametoolong");
630 if ($xestiascan_databasename_lettersnumbers_check eq 1){
632 # The database name contains invalid characters
633 # so return an error.
635 xestiascan_error("serverdatabasenameinvalid");
639 if ($xestiascan_databaseusername_length_check eq 1){
641 # The database username given is too long so
644 xestiascan_error("serverdatabaseusernametoolong");
648 if ($xestiascan_databaseusername_lettersnumbers_check eq 1){
650 # The database username contains invalid characters
651 # so return an error.
653 xestiascan_error("serverdatabaseusernameinvalid");
657 if ($xestiascan_databasepassword_length_check eq 1){
659 # The database password given is too long so return
662 xestiascan_error("serverdatabasepasswordtoolong");
666 if ($xestiascan_databasetableprefix_length_check eq 1){
668 # The database table prefix given is too long so
671 xestiascan_error("serverdatabasetableprefixtoolong");
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");
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"};
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
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();
727 # Get the list of languages available.
730 my @language_directory = "";
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"};
738 my $xestiascan_languagefilehandle;
740 tie(%language_list, 'Tie::IxHash');
742 @language_directory = xestiascan_settings_getlanguages;
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.
748 foreach $language_filename (@language_directory){
750 # Load the language file currently selected.
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.
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++;
779 undef $language_file;
783 # Get the list of presentation modules available.
786 my @presmodule_directory;
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){
799 $presmodule_list{$presmodule_count}{Filename} = $presmodule_file;
804 # Get the list of database modules available.
807 my @authmodule_directory;
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;
825 my %outputmodule_list;
826 my @outputmodule_directory;
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++;
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");
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();
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
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 });
999 $main::xestiascan_presmodule->addoption($language_list{$language}{Name}, { Value => $language_list{$language}{Filename} });
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 });
1036 $main::xestiascan_presmodule->addoption($presmodule_list{$presmodule}{Filename}, { Value => $presmodule_list{$presmodule}{Filename} });
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 });
1068 $main::xestiascan_presmodule->addoption($outputmodule_list{$outputmodule}{Filename}, { Value => $outputmodule_list{$outputmodule}{Filename} });
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 });
1101 $main::xestiascan_presmodule->addoption($authmodule_list{$authmodule}{Filename}, { Value => $authmodule_list{$authmodule}{Filename} });
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});
1149 # The TCP protocol is not selected.
1151 $main::xestiascan_presmodule->addoption("TCP", { Value => "tcp"});
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});
1165 # The UDP protocol is not selected.
1167 $main::xestiascan_presmodule->addoption("UDP", { Value => "udp"});
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();
1228 return $main::xestiascan_presmodule->grab();
1232 sub xestiascan_output_config{
1233 #################################################################################
1234 # xestiascan_output_config: Outputs the configuration file. #
1238 # xestiascan_output_config(settings); #
1240 # settings Specifies the following settings in any order. #
1242 # Settings for Xesita Scanner Server configuration files: #
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 #
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 #
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/</</g;
1294 $settings_database_password =~ s/>/>/g;
1298 # Convert the less than and greater than characters are there and
1301 if ($settings_imagesuri){
1303 $settings_imagesuri =~ s/</</g;
1304 $settings_imagesuri =~ s/>/>/g;
1305 $settings_imagesuri =~ s/\r//g;
1306 $settings_imagesuri =~ s/\n//g;
1310 if ($settings_scansuri){
1312 $settings_scansuri =~ s/</</g;
1313 $settings_scansuri =~ s/>/>/g;
1314 $settings_scansuri =~ s/\r//g;
1315 $settings_scansuri =~ s/\n//g;
1319 if ($settings_scansfs){
1321 $settings_scansfs =~ s/</</g;
1322 $settings_scansfs =~ s/>/>/g;
1323 $settings_scansfs =~ s/\r//g;
1324 $settings_scansfs =~ s/\n//g;
1328 # Check if the database password value is undefined and if it is then
1331 if (!$settings_database_password){
1333 $settings_database_password = "";
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");