diff --git a/Makefile.in b/Makefile.in index 95ab77828..58a8e7b2e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -39,7 +39,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(top_srcdir)/configure \ $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in \ $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in \ - $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm.in \ + $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in \ $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in \ AUTHORS COPYING ChangeLog INSTALL NEWS TODO depcomp install-sh \ missing mkinstalldirs @@ -56,7 +56,7 @@ CONFIG_CLEAN_FILES = zm.conf zmconfgen.pl \ scripts/ZoneMinder/lib/ZoneMinder/Base.pm \ scripts/ZoneMinder/lib/ZoneMinder/Config.pm \ scripts/ZoneMinder/lib/ZoneMinder/Memory.pm \ - scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm + scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = @@ -350,7 +350,7 @@ scripts/ZoneMinder/lib/ZoneMinder/Config.pm: $(top_builddir)/config.status $(top cd $(top_builddir) && $(SHELL) ./config.status $@ scripts/ZoneMinder/lib/ZoneMinder/Memory.pm: $(top_builddir)/config.status $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in cd $(top_builddir) && $(SHELL) ./config.status $@ -scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm: $(top_builddir)/config.status $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm.in +scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm: $(top_builddir)/config.status $(top_srcdir)/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-sysconfDATA: $(sysconf_DATA) @$(NORMAL_INSTALL) diff --git a/configure b/configure index fa65bb11a..f2d354b24 100755 --- a/configure +++ b/configure @@ -9313,7 +9313,7 @@ fi -ac_config_files="$ac_config_files Makefile zm.conf zmconfgen.pl db/Makefile db/zm_create.sql scripts/Makefile scripts/zm scripts/zmaudit.pl scripts/zmcontrol.pl scripts/zmdc.pl scripts/zmfilter.pl scripts/zmpkg.pl scripts/zmtrack.pl scripts/zmtrigger.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmwatch.pl scripts/zmx10.pl scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/Memory.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm src/Makefile src/zm_config.h web/Makefile web/ajax/Makefile web/css/Makefile web/graphics/Makefile web/includes/Makefile web/includes/config.php web/js/Makefile web/lang/Makefile web/skins/Makefile web/skins/classic/Makefile web/skins/classic/ajax/Makefile web/skins/classic/css/Makefile web/skins/classic/graphics/Makefile web/skins/classic/includes/Makefile web/skins/classic/js/Makefile web/skins/classic/lang/Makefile web/skins/classic/views/Makefile web/skins/classic/views/css/Makefile web/skins/classic/views/js/Makefile web/skins/mobile/Makefile web/skins/mobile/ajax/Makefile web/skins/mobile/css/Makefile web/skins/mobile/graphics/Makefile web/skins/mobile/includes/Makefile web/skins/mobile/lang/Makefile web/skins/mobile/views/Makefile web/skins/mobile/views/css/Makefile web/tools/Makefile web/tools/mootools/Makefile web/views/Makefile web/skins/xml/Makefile web/skins/xml/views/Makefile web/skins/xml/includes/Makefile web/zmApache.conf" +ac_config_files="$ac_config_files Makefile zm.conf zmconfgen.pl db/Makefile db/zm_create.sql scripts/Makefile scripts/zm scripts/zmaudit.pl scripts/zmcontrol.pl scripts/zmdc.pl scripts/zmfilter.pl scripts/zmpkg.pl scripts/zmtrack.pl scripts/zmtrigger.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmwatch.pl scripts/zmx10.pl scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/Memory.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm src/Makefile src/zm_config.h web/Makefile web/ajax/Makefile web/css/Makefile web/graphics/Makefile web/includes/Makefile web/includes/config.php web/js/Makefile web/lang/Makefile web/skins/Makefile web/skins/classic/Makefile web/skins/classic/ajax/Makefile web/skins/classic/css/Makefile web/skins/classic/graphics/Makefile web/skins/classic/includes/Makefile web/skins/classic/js/Makefile web/skins/classic/lang/Makefile web/skins/classic/views/Makefile web/skins/classic/views/css/Makefile web/skins/classic/views/js/Makefile web/skins/mobile/Makefile web/skins/mobile/ajax/Makefile web/skins/mobile/css/Makefile web/skins/mobile/graphics/Makefile web/skins/mobile/includes/Makefile web/skins/mobile/lang/Makefile web/skins/mobile/views/Makefile web/skins/mobile/views/css/Makefile web/tools/Makefile web/tools/mootools/Makefile web/views/Makefile web/skins/xml/Makefile web/skins/xml/views/Makefile web/skins/xml/includes/Makefile web/zmApache.conf" # Create the definitions for compilation and defaults for the database @@ -10066,7 +10066,7 @@ do "scripts/ZoneMinder/lib/ZoneMinder/Base.pm") CONFIG_FILES="$CONFIG_FILES scripts/ZoneMinder/lib/ZoneMinder/Base.pm" ;; "scripts/ZoneMinder/lib/ZoneMinder/Config.pm") CONFIG_FILES="$CONFIG_FILES scripts/ZoneMinder/lib/ZoneMinder/Config.pm" ;; "scripts/ZoneMinder/lib/ZoneMinder/Memory.pm") CONFIG_FILES="$CONFIG_FILES scripts/ZoneMinder/lib/ZoneMinder/Memory.pm" ;; - "scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm") CONFIG_FILES="$CONFIG_FILES scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm" ;; + "scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm") CONFIG_FILES="$CONFIG_FILES scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/zm_config.h") CONFIG_FILES="$CONFIG_FILES src/zm_config.h" ;; "web/Makefile") CONFIG_FILES="$CONFIG_FILES web/Makefile" ;; diff --git a/configure.ac b/configure.ac index 00a8d2888..8089cb29a 100644 --- a/configure.ac +++ b/configure.ac @@ -365,7 +365,7 @@ fi AC_SUBST(PERL_MM_PARMS) AC_SUBST(EXTRA_PERL_LIB) -AC_CONFIG_FILES([Makefile zm.conf zmconfgen.pl db/Makefile db/zm_create.sql scripts/Makefile scripts/zm scripts/zmaudit.pl scripts/zmcontrol.pl scripts/zmdc.pl scripts/zmfilter.pl scripts/zmpkg.pl scripts/zmtrack.pl scripts/zmtrigger.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmwatch.pl scripts/zmx10.pl scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/Memory.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm src/Makefile src/zm_config.h web/Makefile web/ajax/Makefile web/css/Makefile web/graphics/Makefile web/includes/Makefile web/includes/config.php web/js/Makefile web/lang/Makefile web/skins/Makefile web/skins/classic/Makefile web/skins/classic/ajax/Makefile web/skins/classic/css/Makefile web/skins/classic/graphics/Makefile web/skins/classic/includes/Makefile web/skins/classic/js/Makefile web/skins/classic/lang/Makefile web/skins/classic/views/Makefile web/skins/classic/views/css/Makefile web/skins/classic/views/js/Makefile web/skins/mobile/Makefile web/skins/mobile/ajax/Makefile web/skins/mobile/css/Makefile web/skins/mobile/graphics/Makefile web/skins/mobile/includes/Makefile web/skins/mobile/lang/Makefile web/skins/mobile/views/Makefile web/skins/mobile/views/css/Makefile web/tools/Makefile web/tools/mootools/Makefile web/views/Makefile web/skins/xml/Makefile web/skins/xml/views/Makefile web/skins/xml/includes/Makefile web/zmApache.conf]) +AC_CONFIG_FILES([Makefile zm.conf zmconfgen.pl db/Makefile db/zm_create.sql scripts/Makefile scripts/zm scripts/zmaudit.pl scripts/zmcontrol.pl scripts/zmdc.pl scripts/zmfilter.pl scripts/zmpkg.pl scripts/zmtrack.pl scripts/zmtrigger.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmwatch.pl scripts/zmx10.pl scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/Memory.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm src/Makefile src/zm_config.h web/Makefile web/ajax/Makefile web/css/Makefile web/graphics/Makefile web/includes/Makefile web/includes/config.php web/js/Makefile web/lang/Makefile web/skins/Makefile web/skins/classic/Makefile web/skins/classic/ajax/Makefile web/skins/classic/css/Makefile web/skins/classic/graphics/Makefile web/skins/classic/includes/Makefile web/skins/classic/js/Makefile web/skins/classic/lang/Makefile web/skins/classic/views/Makefile web/skins/classic/views/css/Makefile web/skins/classic/views/js/Makefile web/skins/mobile/Makefile web/skins/mobile/ajax/Makefile web/skins/mobile/css/Makefile web/skins/mobile/graphics/Makefile web/skins/mobile/includes/Makefile web/skins/mobile/lang/Makefile web/skins/mobile/views/Makefile web/skins/mobile/views/css/Makefile web/tools/Makefile web/tools/mootools/Makefile web/views/Makefile web/skins/xml/Makefile web/skins/xml/views/Makefile web/skins/xml/includes/Makefile web/zmApache.conf]) # Create the definitions for compilation and defaults for the database AC_CONFIG_COMMANDS([src/zm_config_defines.h],[perl ./zmconfgen.pl]) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 964659e7a..e8c3a2f83 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -51,6 +51,7 @@ EXTRA_DIST = \ ZoneMinder/lib/ZoneMinder/Memory/Shared.pm \ ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm \ ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm \ + ZoneMinder/lib/ZoneMinder/ConfigData.pm.in \ ZoneMinder/lib/ZoneMinder/Control.pm \ ZoneMinder/lib/ZoneMinder/Control/PelcoD.pm \ ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm \ diff --git a/scripts/Makefile.in b/scripts/Makefile.in index 30009a91b..656a72c4e 100644 --- a/scripts/Makefile.in +++ b/scripts/Makefile.in @@ -299,6 +299,7 @@ EXTRA_DIST = \ ZoneMinder/lib/ZoneMinder/Memory/Shared.pm \ ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm \ ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm \ + ZoneMinder/lib/ZoneMinder/ConfigData.pm.in \ ZoneMinder/lib/ZoneMinder/Control.pm \ ZoneMinder/lib/ZoneMinder/Control/PelcoD.pm \ ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm \ diff --git a/scripts/ZoneMinder/Makefile.PL b/scripts/ZoneMinder/Makefile.PL index afa00ccc2..8dff6af2d 100644 --- a/scripts/ZoneMinder/Makefile.PL +++ b/scripts/ZoneMinder/Makefile.PL @@ -17,6 +17,7 @@ WriteMakefile( 'lib/ZoneMinder/Memory/Shared.pm' => '$(INST_LIBDIR)/ZoneMinder/Memory/Shared.pm', 'lib/ZoneMinder/Memory/Mapped.pm' => '$(INST_LIBDIR)/ZoneMinder/Memory/Mapped.pm', 'lib/ZoneMinder/ConfigAdmin.pm' => '$(INST_LIBDIR)/ZoneMinder/ConfigAdmin.pm', + 'lib/ZoneMinder/ConfigData.pm' => '$(INST_LIBDIR)/ZoneMinder/ConfigData.pm', 'lib/ZoneMinder/Control.pm' => '$(INST_LIBDIR)/ZoneMinder/Control.pm', 'lib/ZoneMinder/Control/PelcoD.pm' => '$(INST_LIBDIR)/ZoneMinder/Control/PelcoD.pm', 'lib/ZoneMinder/Control/AxisV2.pm' => '$(INST_LIBDIR)/ZoneMinder/Control/AxisV2.pm', diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm new file mode 100644 index 000000000..b13747013 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm @@ -0,0 +1,212 @@ +# ========================================================================== +# +# ZoneMinder Config Admin Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::ConfigAdmin; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + loadConfigFromDB + saveConfigToDB + ) ] +); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'functions'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Configuration Administration +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::ConfigData qw(:all); + +use Carp; + +sub loadConfigFromDB +{ + print( "Loading config from DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + + if ( !$dbh ) + { + print( "Error: unable to load options from database: $DBI::errstr\n" ); + return( 0 ); + } + my $sql = "select * from Config"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); + my $option_count = 0; + while( my $config = $sth->fetchrow_hashref() ) + { + my ( $name, $value ) = ( $config->{Name}, $config->{Value} ); + #print( "Name = '$name'\n" ); + my $option = $options_hash{$name}; + if ( !$option ) + { + warn( "No option '$name' found, removing" ); + next; + } + #next if ( $option->{category} eq 'hidden' ); + if ( defined($value) ) + { + if ( $option->{type} == $types{boolean} ) + { + $option->{value} = $value?"yes":"no"; + } + else + { + $option->{value} = $value; + } + } + $option_count++;; + } + $sth->finish(); + $dbh->disconnect(); + return( $option_count ); +} + +sub saveConfigToDB +{ + print( "Saving config to DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + + if ( !$dbh ) + { + print( "Error: unable to save options to database: $DBI::errstr\n" ); + return( 0 ); + } + my $sql = "delete from Config"; + my $res = $dbh->do( $sql ) or croak( "Can't do '$sql': ".$dbh->errstr() ); + + $sql = "replace into Config set Id = ?, Name = ?, Value = ?, Type = ?, DefaultValue = ?, Hint = ?, Pattern = ?, Format = ?, Prompt = ?, Help = ?, Category = ?, Readonly = ?, Requires = ?"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + foreach my $option ( @options ) + { + #next if ( $option->{category} eq 'hidden' ); + #print( $option->{name}."\n" ) if ( !$option->{category} ); + $option->{db_type} = $option->{type}->{db_type}; + $option->{db_hint} = $option->{type}->{hint}; + $option->{db_pattern} = $option->{type}->{pattern}; + $option->{db_format} = $option->{type}->{format}; + if ( $option->{db_type} eq "boolean" ) + { + $option->{db_value} = ($option->{value} eq "yes")?"1":"0"; + } + else + { + $option->{db_value} = $option->{value}; + } + if ( my $requires = $option->{requires} ) + { + $option->{db_requires} = join( ";", map { my $value = $_->{value}; $value = ($value eq "yes")?1:0 if ( $options_hash{$_->{name}}->{db_type} eq "boolean" ); ( "$_->{name}=$value" ) } @$requires ); + } + else + { + } + my $res = $sth->execute( $option->{id}, $option->{name}, $option->{db_value}, $option->{db_type}, $option->{default}, $option->{db_hint}, $option->{db_pattern}, $option->{db_format}, $option->{description}, $option->{help}, $option->{category}, $option->{readonly}?1:0, $option->{db_requires} ) or croak( "Can't execute: ".$sth->errstr() ); + } + $sth->finish(); + $dbh->disconnect(); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::ConfigAdmin - ZoneMinder Configuration Administration module + +=head1 SYNOPSIS + + use ZoneMinder::ConfigAdmin; + use ZoneMinder::ConfigAdmin qw(:all); + + loadConfigFromDB(); + saveConfigToDB(); + +=head1 DESCRIPTION + +The ZoneMinder:ConfigAdmin module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. + +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. + +=head1 METHODS + +=over 4 + +=item loadConfigFromDB (); + +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. + +=item saveConfigToDB (); + +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. + +=head2 EXPORT + +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in similarity index 97% rename from scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm.in rename to scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 484ea66f4..2f11526fa 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -1,6 +1,6 @@ # ========================================================================== # -# ZoneMinder Config Admin Module, $Date$, $Revision$ +# ZoneMinder Config Data Module, $Date: 2011-01-20 18:49:42 +0000 (Thu, 20 Jan 2011) $, $Revision: 3230 $ # Copyright (C) 2001-2008 Philip Coombes # # This program is free software; you can redistribute it and/or @@ -22,7 +22,7 @@ # This module contains the debug definitions and functions used by the rest # of the ZoneMinder scripts # -package ZoneMinder::ConfigAdmin; +package ZoneMinder::ConfigData; use 5.006; use strict; @@ -45,14 +45,10 @@ our %EXPORT_TAGS = ( %types @options %options_hash - ) ], - 'functions' => [ qw( - loadConfigFromDB - saveConfigToDB ) ] ); -our @EXPORT_OK = ( @{ $EXPORT_TAGS{'data'} }, @{ $EXPORT_TAGS{'functions'} } ); +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'data'} } ); our @EXPORT = qw(); @@ -60,16 +56,18 @@ our $VERSION = $ZoneMinder::Base::VERSION; # ========================================================================== # -# Configuration Administration +# Configuration Data # # ========================================================================== -use ZoneMinder::Config qw(:all); - use Carp; -our $config_header = "src/zm_config_defines.h"; -our $config_sql = "db/zm_config.sql"; +our $configInitialised = 0; + +sub INIT +{ + initialiseConfig(); +} # Types our %types = @@ -1791,13 +1789,6 @@ body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% s our %options_hash = map { ( $_->{name}, $_ ) } @options; -our $configInitialised = 0; - -sub INIT -{ - initialiseConfig(); -} - # This function should never need to be called explicitly, except if # this module is 'require'd rather than 'use'd. See zmconfgen.pl. sub initialiseConfig @@ -1823,111 +1814,24 @@ sub initialiseConfig $configInitialised = 1; } -sub loadConfigFromDB -{ - print( "Loading config from DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); - - if ( !$dbh ) - { - print( "Error: unable to load options from database: $DBI::errstr\n" ); - return( 0 ); - } - my $sql = "select * from Config"; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); - my $option_count = 0; - while( my $config = $sth->fetchrow_hashref() ) - { - my ( $name, $value ) = ( $config->{Name}, $config->{Value} ); - #print( "Name = '$name'\n" ); - my $option = $options_hash{$name}; - if ( !$option ) - { - warn( "No option '$name' found, removing" ); - next; - } - #next if ( $option->{category} eq 'hidden' ); - if ( defined($value) ) - { - if ( $option->{type} == $types{boolean} ) - { - $option->{value} = $value?"yes":"no"; - } - else - { - $option->{value} = $value; - } - } - $option_count++;; - } - $sth->finish(); - $dbh->disconnect(); - return( $option_count ); -} - -sub saveConfigToDB -{ - print( "Saving config to DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); - - if ( !$dbh ) - { - print( "Error: unable to save options to database: $DBI::errstr\n" ); - return( 0 ); - } - my $sql = "delete from Config"; - my $res = $dbh->do( $sql ) or croak( "Can't do '$sql': ".$dbh->errstr() ); - - $sql = "replace into Config set Id = ?, Name = ?, Value = ?, Type = ?, DefaultValue = ?, Hint = ?, Pattern = ?, Format = ?, Prompt = ?, Help = ?, Category = ?, Readonly = ?, Requires = ?"; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - foreach my $option ( @options ) - { - #next if ( $option->{category} eq 'hidden' ); - #print( $option->{name}."\n" ) if ( !$option->{category} ); - $option->{db_type} = $option->{type}->{db_type}; - $option->{db_hint} = $option->{type}->{hint}; - $option->{db_pattern} = $option->{type}->{pattern}; - $option->{db_format} = $option->{type}->{format}; - if ( $option->{db_type} eq "boolean" ) - { - $option->{db_value} = ($option->{value} eq "yes")?"1":"0"; - } - else - { - $option->{db_value} = $option->{value}; - } - if ( my $requires = $option->{requires} ) - { - $option->{db_requires} = join( ";", map { my $value = $_->{value}; $value = ($value eq "yes")?1:0 if ( $options_hash{$_->{name}}->{db_type} eq "boolean" ); ( "$_->{name}=$value" ) } @$requires ); - } - else - { - } - my $res = $sth->execute( $option->{id}, $option->{name}, $option->{db_value}, $option->{db_type}, $option->{default}, $option->{db_hint}, $option->{db_pattern}, $option->{db_format}, $option->{description}, $option->{help}, $option->{category}, $option->{readonly}?1:0, $option->{db_requires} ) or croak( "Can't execute: ".$sth->errstr() ); - } - $sth->finish(); - $dbh->disconnect(); -} - 1; __END__ =head1 NAME -ZoneMinder::ConfigAdmin - ZoneMinder Configuration Administration module +ZoneMinder::ConfigData - ZoneMinder Configuration Data module =head1 SYNOPSIS - use ZoneMinder::ConfigAdmin; - use ZoneMinder::ConfigAdmin qw(:all); + use ZoneMinder::ConfigData; + use ZoneMinder::ConfigData qw(:all); loadConfigFromDB(); saveConfigToDB(); =head1 DESCRIPTION -The ZoneMinder:ConfigAdmin module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. +The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. diff --git a/src/Makefile.in b/src/Makefile.in index 5b63b55f3..799bab426 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -245,7 +245,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = gnu AM_CPPFLAGS = @MYSQL_CFLAGS@ @FFMPEG_CFLAGS@ -Wall -Wno-sign-compare -fno-inline -AM_CXXFLAGS = -frepo +#AM_CXXFLAGS = -frepo CLEANFILES = *.rpo # This should be set to your CGI directory diff --git a/zmconfgen.pl.in b/zmconfgen.pl.in index b35025ded..889753c95 100644 --- a/zmconfgen.pl.in +++ b/zmconfgen.pl.in @@ -26,7 +26,7 @@ use strict; use lib './scripts/ZoneMinder/lib'; -use ZoneMinder::ConfigAdmin qw/:data/; +use ZoneMinder::ConfigData qw/:data/; $| = 1;