From: drowe67 Date: Tue, 1 Jul 2014 22:02:02 +0000 (+0000) Subject: mv to attic X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=89c03b8f54d9741eb4f139caa73967c39c08af64;p=freetel-svn-tracking.git mv to attic git-svn-id: https://svn.code.sf.net/p/freetel/code@1728 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/attic/freepbx-sandbox/Makefile b/attic/freepbx-sandbox/Makefile new file mode 100644 index 00000000..0d545968 --- /dev/null +++ b/attic/freepbx-sandbox/Makefile @@ -0,0 +1,442 @@ +# Makefile +# David Rowe 12 Feb 2008 + +# Builds (almost) everything you need for FreePBX with sqlite3 from +# scratch and configures FreePBX to run in a "sandbox" environment. + +TOPDIR = $(shell pwd) +BUILD_DIR = $(TOPDIR) +DL_DIR = $(TOPDIR)/dl +ROOT = $(TOPDIR)/root +export PATH:= $(ROOT)/bin:$(PATH) + +all: php sqlite pear-db php-sqlite3 xdebug lighttpd freepbx + +############################################################## +# PHP -------------------------------------------------------- +############################################################## + +PHP_VERSION=5.2.5 +PHP_DIRNAME=php-$(PHP_VERSION) +PHP_DIR=$(BUILD_DIR)/$(PHP_DIRNAME) +PHP_SITE=http://www.php.net/distributions +PHP_SOURCE=php-$(PHP_VERSION).tar.bz2 +PHP_CONFIGURE_OPTS=--disable-all --with-pcre-regex --enable-force-cgi-redirect \ + --with-config-file-path=$(ROOT)/etc --prefix=$(ROOT) \ + --with-pear --enable-xml --enable-libxml --enable-session \ + --with-gettext --enable-debug + +$(DL_DIR)/$(PHP_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(PHP_SITE)/$(PHP_SOURCE) + +$(PHP_DIR)/.unpacked: $(DL_DIR)/$(PHP_SOURCE) + bzcat $(DL_DIR)/$(PHP_SOURCE) | tar -C $(BUILD_DIR) -xf - + touch $(PHP_DIR)/.unpacked + +$(PHP_DIR)/.configured: $(PHP_DIR)/.unpacked + cd $(PHP_DIR); ./configure $(PHP_CONFIGURE_OPTS) + touch $(PHP_DIR)/.configured + +$(PHP_DIR)/.built: $(PHP_DIR)/.configured + cd $(PHP_DIR); make + cd $(PHP_DIR); make install + cp $(PHP_DIR)/php.ini-recommended $(ROOT)/etc/php.ini + echo include_path=\".:$(ROOT)/lib/php\" >> $(ROOT)/etc/php.ini + touch $(PHP_DIR)/.built + +php: $(PHP_DIR)/.built + +############################################################## +# sqlite3 ---------------------------------------------------- +############################################################## + +SQLITE_VERSION=3.5.6 +SQLITE_DIRNAME=sqlite-$(SQLITE_VERSION) +SQLITE_DIR=$(BUILD_DIR)/$(SQLITE_DIRNAME) +SQLITE_SITE=http://www.sqlite.org/ +SQLITE_SOURCE=sqlite-amalgamation-$(SQLITE_VERSION).tar.gz +SQLITE_CONFIGURE_OPTS = --prefix=$(ROOT) + +$(DL_DIR)/$(SQLITE_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(SQLITE_SITE)/$(SQLITE_SOURCE) + +$(SQLITE_DIR)/.unpacked: $(DL_DIR)/$(SQLITE_SOURCE) + zcat $(DL_DIR)/$(SQLITE_SOURCE) | tar -C $(BUILD_DIR) -xf - + touch $(SQLITE_DIR)/.unpacked + +$(SQLITE_DIR)/.configured: $(SQLITE_DIR)/.unpacked + cd $(SQLITE_DIR); ./configure $(SQLITE_CONFIGURE_OPTS) + touch $(SQLITE_DIR)/.configured + +$(SQLITE_DIR)/.built: $(SQLITE_DIR)/.configured + cd $(SQLITE_DIR); make + cd $(SQLITE_DIR); make install + touch $(SQLITE_DIR)/.built + +sqlite: $(SQLITE_DIR)/.built + +############################################################## +# PEAR:DB --------------------------------------------------- +############################################################## + +$(ROOT)/lib/php/.db-installed: + pear install DB + cd $(ROOT)/lib/php/DB; patch -p1 < $(TOPDIR)/patch/common.patch + touch $(ROOT)/lib/php/.db-installed + +pear-db: $(ROOT)/lib/php/.db-installed + +############################################################## +# php-sqlite3 ------------------------------------------------ +############################################################## + +PHP-SQLITE3_VERSION=0.5 +PHP-SQLITE3_DIRNAME=sqlite3-$(PHP-SQLITE3_VERSION) +PHP-SQLITE3_DIR=$(BUILD_DIR)/$(PHP-SQLITE3_DIRNAME) +PHP-SQLITE3_SITE=http://optusnet.dl.sourceforge.net/sourceforge/php-sqlite3/ +PHP-SQLITE3_SOURCE=sqlite3-$(PHP-SQLITE3_VERSION).tgz +PHP-SQLITE3_CONFIGURE_OPTS=--prefix=$(ROOT) \ + --with-sqlite3=$(ROOT) \ + --with-php-config=$(ROOT)/bin/php-config + +$(DL_DIR)/$(PHP-SQLITE3_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(PHP-SQLITE3_SITE)/$(PHP-SQLITE3_SOURCE) + +$(PHP-SQLITE3_DIR)/.unpacked: $(DL_DIR)/$(PHP-SQLITE3_SOURCE) + zcat $(DL_DIR)/$(PHP-SQLITE3_SOURCE) | tar -C $(BUILD_DIR) -xf - + touch $(PHP-SQLITE3_DIR)/.unpacked + +$(PHP-SQLITE3_DIR)/.configured: $(PHP-SQLITE3_DIR)/.unpacked + cd $(PHP-SQLITE3_DIR); phpize; ./configure $(PHP-SQLITE3_CONFIGURE_OPTS) + touch $(PHP-SQLITE3_DIR)/.configured + +$(PHP-SQLITE3_DIR)/.built: $(PHP-SQLITE3_DIR)/.configured + cd $(PHP-SQLITE3_DIR); make + cd $(PHP-SQLITE3_DIR); make install + + # use modified sqlite3.php for PHP 5. We use a sym link so that + # we can edit it in place and capture changes to source control + + ln -sf $(TOPDIR)/files/sqlite3.php $(ROOT)/lib/php/DB/sqlite3.php + + # update php.ini extensions line for sqlite3.so + + cat $(ROOT)/etc/php.ini | sed '/extension_dir/ d' > $(ROOT)/etc/php.ini.tmp + mv $(ROOT)/etc/php.ini.tmp $(ROOT)/etc/php.ini + echo extension_dir=\"`find $(ROOT) -name sqlite3.so | xargs dirname`\" >> $(ROOT)/etc/php.ini + + touch $(PHP-SQLITE3_DIR)/.built + +php-sqlite3: $(PHP-SQLITE3_DIR)/.built + +############################################################## +# xdebug ----------------------------------------------------- +############################################################## + +XDEBUG_VERSION=2.0.2 +XDEBUG_DIRNAME=xdebug-$(XDEBUG_VERSION) +XDEBUG_DIR=$(BUILD_DIR)/$(XDEBUG_DIRNAME) +XDEBUG_SITE=http://www.xdebug.org/files/ +XDEBUG_SOURCE=xdebug-$(XDEBUG_VERSION).tgz +XDEBUG_CONFIGURE_OPTS=--prefix=$(ROOT) --enable-xdebug + +$(DL_DIR)/$(XDEBUG_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(XDEBUG_SITE)/$(XDEBUG_SOURCE) + +$(XDEBUG_DIR)/.unpacked: $(DL_DIR)/$(XDEBUG_SOURCE) + zcat $(DL_DIR)/$(XDEBUG_SOURCE) | tar -C $(BUILD_DIR) -xf - + touch $(XDEBUG_DIR)/.unpacked + +$(XDEBUG_DIR)/.configured: $(XDEBUG_DIR)/.unpacked + cd $(XDEBUG_DIR); phpize; ./configure $(XDEBUG_CONFIGURE_OPTS) + touch $(XDEBUG_DIR)/.configured + +$(XDEBUG_DIR)/.built: $(XDEBUG_DIR)/.configured + cd $(XDEBUG_DIR); make + cp $(XDEBUG_DIR)/modules/xdebug.so $(ROOT)/lib + + # update php.ini extensions line for xdebug.so + + echo zend_extension=\"$(ROOT)/lib/xdebug.so\" >> $(ROOT)/etc/php.ini + echo "xdebug.auto_trace=On" >> $(ROOT)/etc/php.ini + echo "xdebug.show_exception_trace=On" >> $(ROOT)/etc/php.ini + + touch $(XDEBUG_DIR)/.built + +xdebug: $(XDEBUG_DIR)/.built + +######################################################################### +# lighttpd -------------------------------------------------------------- +######################################################################### + +LIGHTTPD_VERSION=1.4.18 +LIGHTTPD_DIRNAME=lighttpd-$(LIGHTTPD_VERSION) +LIGHTTPD_DIR=$(BUILD_DIR)/$(LIGHTTPD_DIRNAME) +LIGHTTPD_SITE=http://www.lighttpd.net/download +LIGHTTPD_SOURCE=lighttpd-$(LIGHTTPD_VERSION).tar.gz +LIGHTTPD_CONFIGURE_OPTS=--prefix=$(ROOT) --disable-ipv6 + +$(DL_DIR)/$(LIGHTTPD_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(LIGHTTPD_SITE)/$(LIGHTTPD_SOURCE) + +$(LIGHTTPD_DIR)/.unpacked: $(DL_DIR)/$(LIGHTTPD_SOURCE) + zcat $(DL_DIR)/$(LIGHTTPD_SOURCE) | tar -C $(BUILD_DIR) -xf - + touch $(LIGHTTPD_DIR)/.unpacked + +$(LIGHTTPD_DIR)/.configured: $(LIGHTTPD_DIR)/.unpacked + cd $(LIGHTTPD_DIR); ./configure $(LIGHTTPD_CONFIGURE_OPTS) + touch $(LIGHTTPD_DIR)/.configured + +$(LIGHTTPD_DIR)/.built: $(LIGHTTPD_DIR)/.configured + cd $(LIGHTTPD_DIR); make + cd $(LIGHTTPD_DIR); make install + + cp files/lighttpd.conf $(ROOT)/etc + mkdir -p $(ROOT)/www + cp files/test.php $(ROOT)/www + + # change server root and set up cgi-assign for PHP + + cat $(ROOT)/etc/lighttpd.conf | sed '/server.document-root/ d' > $(ROOT)/etc/lighttpd.conf.tmp + mv $(ROOT)/etc/lighttpd.conf.tmp $(ROOT)/etc/lighttpd.conf + echo "server.document-root = \"$(ROOT)/www/\"" >> $(ROOT)/etc/lighttpd.conf + echo "cgi.assign = (\".php\" => \"$(ROOT)/bin/php-cgi\")" >> $(ROOT)/etc/lighttpd.conf + + touch $(LIGHTTPD_DIR)/.built + +lighttpd: $(LIGHTTPD_DIR)/.built + +######################################################################### +# freepbx --------------------------------------------------------------- +######################################################################### + +FREEPBX_VERSION=2.4.0 +FREEPBX_DIRNAME=freepbx-$(FREEPBX_VERSION) +FREEPBX_DIR=$(BUILD_DIR)/$(FREEPBX_DIRNAME) +FREEPBX_SITE= http://mirror.freepbx.org +FREEPBX_SOURCE=freepbx-$(FREEPBX_VERSION).tar.gz +FREEPBX_CONFIGURE_OPTS= + +# sed command to change hard coded PHP /etc/amportal.conf path + +FREEPBX_AMP_CONF='s|"/etc/amportal.conf"|"$(ROOT)/etc/amportal.conf"|' + +$(DL_DIR)/$(FREEPBX_SOURCE): + mkdir -p dl + wget -P $(DL_DIR) $(FREEPBX_SITE)/$(FREEPBX_SOURCE) + +$(FREEPBX_DIR)/.unpacked: $(DL_DIR)/$(FREEPBX_SOURCE) + zcat $(DL_DIR)/$(FREEPBX_SOURCE) | tar -C $(BUILD_DIR) -xf - + patch -d $(FREEPBX_DIR) -p1 < patch/freepbx.patch + + # additional files to implement retrieve_conf as include + + cp files/retrieve_conf.inc.php files/do_reload.php \ + $(FREEPBX_DIR)/amp_conf/htdocs/admin + + touch $(FREEPBX_DIR)/.unpacked + +$(FREEPBX_DIR)/.installed: $(FREEPBX_DIR)/.unpacked + + # initialise databases (freepbx and CDR) + + mkdir -p $(ROOT)/var + cat $(FREEPBX_DIR)/SQL/newinstall.sqlite3.sql | sqlite3 $(ROOT)/var/freepbx.db + touch $(ROOT)/var/asteriskcdr.db + + # edit amportal.conf + + # out with the old...... + + cat $(FREEPBX_DIR)/amportal.conf | \ + sed -e '/AMPDBENGINE=/ d' -e '/AMPDBFILE=/ d' \ + -e '/AMPWEBROOT=/ d' -e '/FOPWEBROOT=/ d' \ + -e '/AMPDBHOST=/ d' -e '/AMPDBUSER=/ d' -e '/AMPDBPASS=/ d' \ + > $(FREEPBX_DIR)/amportal.conf.tmp + + mv $(FREEPBX_DIR)/amportal.conf.tmp $(FREEPBX_DIR)/amportal.conf + + # in with the new........ + + echo "AMPDBENGINE=sqlite3" >> $(FREEPBX_DIR)/amportal.conf + echo "AMPDBFILE=$(ROOT)/var/freepbx.db" >> $(FREEPBX_DIR)/amportal.conf + echo "AMPWEBROOT=$(ROOT)/www" >> $(FREEPBX_DIR)/amportal.conf + echo "FOPWEBROOT=$(ROOT)/www/panel" >> $(FREEPBX_DIR)/amportal.conf + + sed -i "s|/var/www/html|$(ROOT)/www|" $(FREEPBX_DIR)/amportal.conf + + # Wholesale hacking of FreePBX source to move AMP_CONF to our local conf dir: + # FYI to find where AMP_CONF is used: + # grep -r "define(\"AMP_CONF\", \"/etc/amportal.conf\")" * + + cd $(FREEPBX_DIR); \ + FILES=`grep -r "\"/etc/amportal.conf\"" * | sed 's/:.*//'`; \ + for f in $$FILES; do \ + sed -i $(FREEPBX_AMP_CONF) $$f; \ + done + + # change recordings/includes/main.conf.php DBENGINE and DBFILE settings which + # are hard coded for mysql + + sed -i "s|ASTERISKCDR_DBENGINE.*|ASTERISKCDR_DBENGINE=\"sqlite3\";|" \ + $(FREEPBX_DIR)/amp_conf/htdocs/recordings/includes/main.conf.php + sed -i "s|ASTERISKCDR_DBFILE.*|ASTERISKCDR_DBFILE=\"$(ROOT)/var/asteriskcdr.db\";|" \ + $(FREEPBX_DIR)/amp_conf/htdocs/recordings/includes/main.conf.php + + # change admin/cdr/lib/defines DB_TYPE and DBNAME settings + + sed -i "s|\"DBNAME\".*|\"DBNAME\",\"$(ROOT)/var/asteriskcdr.db\");|" \ + $(FREEPBX_DIR)/amp_conf/htdocs/admin/cdr/lib/defines.php + sed -i "s|\"DB_TYPE\".*|\"DB_TYPE\",\"sqlite3\");|" \ + $(FREEPBX_DIR)/amp_conf/htdocs/admin/cdr/lib/defines.php + + # switch off mp3 support as I dont have asterisk-addons and Asterisk keeps + # crashing when I start it + + sed -i "s|load => format_mp3.so|;load => format_mp3.so|" \ + $(FREEPBX_DIR)/amp_conf/astetc/modules.conf + + # cp amportal.conf ourselves to bypass a lot of questions in install script + + cp $(FREEPBX_DIR)/amportal.conf $(ROOT)/etc + + # run installer + + sudo mkdir -p $(ROOT)/var/run/asterisk; sudo chmod 777 $(ROOT)/var/run/asterisk; + sudo mkdir -p $(ROOT)/var/lib/asterisk/bin; sudo chmod 777 $(ROOT)/var/lib/asterisk/bin; + cd $(FREEPBX_DIR); sudo ./install_amp; sudo chmod 777 $(ROOT)/www -R + + #touch $(FREEPBX_DIR).installed + + +freepbx: $(FREEPBX_DIR)/.installed + +######################################################################### +# clean ---------------------------------------------------------------- +######################################################################### + +clean: + rm -Rf $(PHP_DIR) $(SQLITE_DIR) $(PHP-SQLITE3_DIR) \ + $(XDEBUG_DIR) $(LIGHTTPD_DIR) $(FREEPBX_DIR) root \ + $(FREEPBX_DIR)-orig + + find . -name '*~' | xargs rm -f + rm -f *.xml # where do these come from? + +######################################################################### +# freepbx-make-patch --------------------------------------------------- +######################################################################### + +# Generate patches between original tar ball $(AO) and either the +# installed files $(AROOT), or modified tar ball $A. +# Run this Makefile target to capture any changes to patches + +AO = $(FREEPBX_DIRNAME)-orig/ +AROOT = root/www +A = $(FREEPBX_DIRNAME)/ + +freepbx-make-patch: + + # untar original, to save time we check if the orig is already there + + if [ ! -d $(FREEPBX_DIR)-orig ] ; then \ + cd $(DL_DIR); tar xvf $(FREEPBX_SOURCE); \ + mv $(FREEPBX_DIRNAME) $(FREEPBX_DIR)-orig; \ + fi + + # make big-ass SQL statement work with sqlite3 + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/modules/core/functions.inc.php \ + $(AROOT)/admin/modules/core/functions.inc.php \ + > patch/freepbx.patch + + # add $options array to help numRows() support in sqlite3 + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/common/db_connect.php \ + $(AROOT)/admin/common/db_connect.php \ + >> patch/freepbx.patch + + # sqlite3 support for cdr in recordings + + -diff -uN \ + $(AO)/amp_conf/htdocs/recordings/includes/database.php \ + $(AROOT)/recordings/includes/database.php \ + >> patch/freepbx.patch + + # sqlite3 support for cdr + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/cdr/lib/defines.php \ + $(AROOT)/admin/cdr/lib/defines.php \ + >> patch/freepbx.patch + + # trap missing cdr table error in Reports menu + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/cdr/lib/Class.Table.php \ + $(AROOT)/admin/cdr/lib/Class.Table.php \ + >> patch/freepbx.patch + + # typo in newinstall.sqlite3.sql + + -diff -uN \ + $(AO)/SQL/newinstall.sqlite3.sql \ + $(A)/SQL/newinstall.sqlite3.sql \ + >> patch/freepbx.patch + + # stop installer warning/errors when sqlite3 and blackfin used + + -diff -uN \ + $(AO)/install_amp \ + $(A)/install_amp \ + >> patch/freepbx.patch + + # use sqlite3 SQL syntax for recording installer + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/modules/recordings/install.php \ + $(A)/amp_conf/htdocs/admin/modules/recordings/install.php \ + >> patch/freepbx.patch + + # 1/ stop perl script for flash panel being called, as + # this won't work on Blackfin (might work on x86 with + # appropriate Perl lib but not tested) + # + # 2/ Remove code to set up queues, as it seems to be killing retrive_conf + # Is this needed or a legacy thing? + + -diff -uN \ + $(AO)/amp_conf/bin/retrieve_conf \ + $(A)/amp_conf/bin/retrieve_conf \ + >> patch/freepbx.patch + + # set up default AMP user and password + + -diff -uN \ + $(AO)/amp_conf/astetc/manager.conf \ + $(A)/amp_conf/astetc/manager.conf \ + >> patch/freepbx.patch + + # make retrieve_conf an include from config.php rather + # than exec to save about 15M + + -diff -uN \ + $(AO)/amp_conf/htdocs/admin/config.php \ + $(AROOT)/admin/config.php \ + >> patch/freepbx.patch + + # NOTE: common.patch was generated manually from command line + + # undo sandbox path (messy! Must be a better way....) + + sed -i 's|$(ROOT)||' patch/freepbx.patch + + + diff --git a/attic/freepbx-sandbox/README.txt b/attic/freepbx-sandbox/README.txt new file mode 100644 index 00000000..b8a32e9b --- /dev/null +++ b/attic/freepbx-sandbox/README.txt @@ -0,0 +1,217 @@ +README for freepbx-sandbox +David Rowe Feb 2008 + +Introduction +------------ + +This directory contains a "sandbox" type development environment for +FreePBX using sqlite3. It was used to develop patches against FreePBX +2.4.0 to progress sqlite3 support. + +The Makefile builds (almost) everything you need for FreePBX (web +server, php etc) from scratch and runs it in a "sandbox" environment. +The notable exception is that it doesn't build Asterisk (yet). + +FreePBX is configured to use lighttpd (easier than building Apache) +and and sqlite3. + +Most of the files for are confined to this directory, i.e. you mostly +(except for Asterisk) don't need to mess with your PC's configuration. +Used to model and test configuration for Blackfin port, but may be +useful for general FreePBX development. + +FreePBX Sqlite3 Status +---------------------- + +Most of the screens (Admin/Reports/Recording) present OK but have not +been extensively tested. The Flash Panel isn't working/hasn't been +tested. Reports/Recording is awaiting sqlite3 CDR support (e.g. in +Asterisk 1.6) for further testing. The amp_conf installer works OK. + +I have run some basic tests such as adding an extension/route/trunk +and made a few calls OK. + +This FreePBX/Sqlite3 development has been performed on a laptop +running Ubuntu (no zaptel hardware) with Asterisk 1.4 and FreePBX +2.4.0. + +Motivation +---------- + +1/ When I first tried to manually install FreePBX I had a lot of +problems installing all the apps I needed, especially as I was new to +PHP/SQL/FreePBX. So I thought about automating the installation (from +source). + +2/ It may allow multiple installations of FreePBX, or for example lets +you use a different PHP version to currently installed on your system. +Asterisk would also need to be sandboxed for this to work. + +3/ It doesn't mess with your root filesystem. + +4/ Let me collect all the code I needed in one dir tree, making source +control easier. + +5/ Stepping stone for a Blackfin port. + +Building and Running FreePBX-sqlite3 Sandbox +-------------------------------------------- + +Building: + +1/ Install Asterisk 1.4.x and start Asterisk. + +2/ Build freepbx-sandbox: + +[your home]$ svn co \ + https://freetel.svn.sourceforge.net/svnroot/freetel/freepbx-sandbox \ + freepbx-sandbox +[your home]$ cd freepbx +[freepbx-sandbox]$ make + +3/ You will eventually get prompted for your root passwd - this is + required for several stages of the installation. + +Running: + +1/ Start the web server: + [freepbx-sandbox]$ sudo ./root/sbin/lighttpd -D -f root/etc/lighttpd.conf +2/ If not already running start Asterisk: + [freepbx-sandbox]$ sudo asterisk +3/ Point your browser at locahost + +Manual Installation of FreePBX with sqlite3 +------------------------------------------- + +Here is a rough guide for a regular (non-sandbox) installation of +FreePBX with sqlite3. + +The Makefile automates FreePBX/sqlite3 installation in a sandbox +environment, use it as a reference for manual installation as I may +have missed a step in the steps below. See also sqlite.readme in the +FreePBX tar ball. + +1/ Install and test a web server with PHP 5. + +2/ Install PHP PEAR. Patch DB/common.php with files/common.patch to + enable numRows() to work. + +3/ Install sqlite3 (shared libs and application). + +4/ Install sqlite3-0.5 (PEAR/DB support for sqlite3) + + cp files/sqlite3.php /your/php/path/DB/sqlite3.php. This is an updated + version of the sqlite3.php file that comes with sqlite3-0.5 + + make sure you install sqlite.so and update php.ini so it can find it. + + optional: see Test 2 in the next section + +5/ tar xvzf freepbx-2.4.0.tar.gz + +6/ Edit amportal.conf for sqlite (see sqlite.readme), manually cp to + /etc (that way installer ask less questions). + +7/ Create sqlite database (see sqlite.readme). Create a dummy cdr + database file using 'touch /var/asteriskcdr.db' (this last step + prevents reports/recording screens choking in the absence of + Asterisk sqlite3 CDR records). + +8/ Apply patch/freepbx.patch to freepbx-2.4.0 directory. + +9/ Manually edit recordings/includes/main.conf.php: + ASTERISKCDR_DBENGINE="sqlite3" + ASTERISKCDR_DBFILE="/var/asteriskcdr.db" + + Manually edit: admin/cdr/lib/defines.php: + DB_TYPE="sqlite3" + DB_NAME="/var/asteriskcdr.db" + +10/ Run freepbx installer + +Tests +----- + +1/ basic PHP support: run file/test.php on your webserver + +2/ PEAR/DB with sqlite3: run files/testdb.php on your webserver + (after freepbx.db has been created by step 9) + +Notes +----- + +1/ The Recordings screen needs a sqlite3 CDR backend for Asterisk. +This is available in Asterisk 1.6. This hasn't been tested yet. + +2/ The Makefile automates FreePBX/sqlite3 installation in a sandbox +environment, use it as a reference for manual installation. See +Makefile for more information. + +3/ Changes to FreePBX are in the patch directory. An updated +sqlite3.php DB/PEAR backend is also required (files dir). + +4/ If port 80 is not available kill your existing web server. + +5/ Xdebug generates trace files in your /tmp directory. Useful to +determine what went wrong. Also keep an eye on the lighttpd log. + +6/ I used a laptop running Ubuntu and Asterisk 1.4.4 for these tests - +Asterisk had no analog hardware installed so I didn't install Zaptel. +Asterisk was compiled in another directory in the usual way: +./configure && make && sudo make install. + +7/ In files/testdb.php is a simple test script for exercising sqlite3 +PEAR/DB support - useful for debugging any sqlite3 problems you might +encounter. + +Suggested FreePBX Changes +------------------------- + +1/ Consider patch/freepbx.patch (for FreePBX) & patch/common.patch + (for PEAR/DB). Patches are explained at the end of Makefile + (freepbx-make-patch target). + + Please note that some of the patches contain some hard-coded + information (e.g. changed paths), for example: + + admin/cdr/lib/defines.php (DBNAME & DBTYPE lines) + install_amp (AMP_CONF) + retrieve_conf (AMP_CONF) + + This is a consequence of the sandbox method I am using, and in some + cases current FreePBX sqlite3 support (e.g. the Asterisk CDR + database is hard coded in several places rather than being set in + amportal.conf). If checking into FreePBX source control this part + of the patch should not be applied. I will try and work out a + better way to generate patches in future. + +2/ It might be better to store the CDR database parameters in + amportal.conf rather than hard coding them in + recordings/includes/main.conf.php ($ASTERISKCDR_DBFILE, + $ASTERISKCDR_DBNAME) & admin/cdr/lib/defines.php (DBNAME, DB_TYPE). + +3/ Include sqlite3.php in FreePBX to support sqlite3 in PEAR/DB for + PHP 5. + +4/ newinstall.sqlite3.sql has a typo on line 327: + + modules_xml -> module_xml + + This correction is included in patch/freepbx.patch + +TODO +---- + +1/ Try to get Asterisk 1.6 CDR working with sqlite3, so we can further + develop the Reports/recordings menus. + +2/ Bunch of warnings from the web server I haven't worked out yet: + + a) when saving a new extension: + + + 2008-03-02 08:14:41: (mod_cgi.c.1231) cgi died ? + + b) lots of this sort of thing: + + + PHP Notice: Undefined offset: 2 in + /home/david/freepbx-sandbox/root/www/admin/modules/core/functions.inc.php + on line 2946 diff --git a/attic/freepbx-sandbox/dl/.gitignore b/attic/freepbx-sandbox/dl/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/attic/freepbx-sandbox/files/do_reload.php b/attic/freepbx-sandbox/files/do_reload.php new file mode 100644 index 00000000..5e2d677c --- /dev/null +++ b/attic/freepbx-sandbox/files/do_reload.php @@ -0,0 +1,121 @@ +0,'test'=>'abc'); + $exit_val = null; + + if (isset($amp_conf["PRE_RELOAD"]) && !empty($amp_conf['PRE_RELOAD'])) { + exec( $amp_conf["PRE_RELOAD"], $output, $exit_val ); + + if ($exit_val != 0) { + $desc = sprintf(_("Exit code was %s and output was: %s"), $exit_val, "\n\n".implode("\n",$output)); + $notify->add_error('freepbx','reload_pre_script', sprintf(_('Could not run %s script.'), $amp_conf['PRE_RELOAD']), $desc); + + $return['num_errors']++; + } else { + $notify->delete('freepbx', 'reload_pre_script'); + } + } + + // use include file in current php-cgi, avoid repeating a lot + // of the code + + require_once('retrieve_conf.inc.php'); + $return['retrieve_conf'] = $rc_output; + + // retrive_conf html output + if ($exit_val != 0) { + $return['status'] = false; + $return['message'] = sprintf(_('Reload failed because retrieve_conf encountered an error: %s'),$exit_val); + $return['num_errors']++; + $notify->add_critical('freepbx','RCONFFAIL', _("retrieve_conf failed, config not applied"), $return['message']); + return $return; + } + + if (!isset($astman) || !$astman) { + $return['status'] = false; + $return['message'] = _('Reload failed because FreePBX could not connect to the asterisk manager interface.'); + $return['num_errors']++; + $notify->add_critical('freepbx','RCONFFAIL', _("retrieve_conf failed, config not applied"), $return['message']); + return $return; + } + $notify->delete('freepbx', 'RCONFFAIL'); + + //reload MOH to get around 'reload' not actually doing that. + $astman->send_request('Command', array('Command'=>'moh reload')); + + //reload asterisk + $astman->send_request('Command', array('Command'=>'reload')); + + $return['status'] = true; + $return['message'] = _('Successfully reloaded'); + + if ($amp_conf['FOPRUN']) { + //bounce op_server.pl + $wOpBounce = $amp_conf['AMPBIN'].'/bounce_op.sh'; + exec($wOpBounce.' &>'.$asterisk_conf['astlogdir'].'/freepbx-bounce_op.log', $output, $exit_val); + + if ($exit_val != 0) { + $desc = _('Could not reload the FOP operator panel server using the bounce_op.sh script. Configuration changes may not be reflected in the panel display.'); + $notify->add_error('freepbx','reload_fop', _('Could not reload FOP server'), $desc); + + $return['num_errors']++; + } else { + $notify->delete('freepbx','reload_fop'); + } + } + + //store asterisk reloaded status + $sql = "UPDATE admin SET value = 'false' WHERE variable = 'need_reload'"; + $result = $db->query($sql); + if(DB::IsError($result)) { + $return['message'] = _('Successful reload, but could not clear reload flag due to a database error: ').$db->getMessage(); + $return['num_errors']++; + } + + if (isset($amp_conf["POST_RELOAD"]) && !empty($amp_conf['POST_RELOAD'])) { + exec( $amp_conf["POST_RELOAD"], $output, $exit_val ); + + if ($exit_val != 0) { + $desc = sprintf(_("Exit code was %s and output was: %s"), $exit_val, "\n\n".implode("\n",$output)); + $notify->add_error('freepbx','reload_post_script', sprintf(_('Could not run %s script.'), 'POST_RELOAD'), $desc); + + $return['num_errors']++; + } else { + $notify->delete('freepbx', 'reload_post_script'); + } + } + $response = $return; + +?> diff --git a/attic/freepbx-sandbox/files/lighttpd.conf b/attic/freepbx-sandbox/files/lighttpd.conf new file mode 100644 index 00000000..5c7b035f --- /dev/null +++ b/attic/freepbx-sandbox/files/lighttpd.conf @@ -0,0 +1,231 @@ +# lighttpd configuration file +# +# use a it as base for lighttpd 1.0.0 and above +# +# $Id: lighttpd.conf,v 1.6 2004/08/29 09:44:53 weigon Exp $ + +############ Options you really have to take care of #################### + +## modules to load +# at least mod_access and mod_accesslog should be loaded +# all other module should only be loaded if really neccesary +# - saves some time +# - saves memory +server.modules = ( +# "mod_rewrite", +# "mod_redirect", + "mod_access", +# "mod_auth", +# "mod_status", +# "mod_fastcgi", +# "mod_simple_vhost", +# "mod_evhost", + "mod_cgi", +# "mod_compress", +# "mod_ssi", +# "mod_usertrack", +# "mod_rrdtool", +# "mod_accesslog" +) + +## a static document-root, for virtual-hosting take look at the +## server.virtual-* options +server.document-root = "/var/www/html" + +## where to send error-messages to +# server.errorlog = "" + +# files to check for if .../ is requested +server.indexfiles = ( "index.php", "index.html", + "index.htm", "default.htm" ) + +# mimetype mapping +mimetype.assign = ( + ".pdf" => "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "audio/x-wav", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv" + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +# mimetypes.use-xattr = "enable" + +#### accesslog module +# accesslog.filename = "/www/logs/access.log" + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + + + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) +#server.port = 81 + +## bind to localhost (default: all interfaces) +#server.bind = "grisu.home.kneschke.de" + +## error-handler for status 404 +#server.error-handler-404 = "/error-handler.html" +#server.error-handler-404 = "/error-handler.php" + + +###### virtual hosts +## +## If you want name-based virtual hosting add the next three settings and load +## mod_simple_vhost +## +## document-root = +## virtual-server-root + virtual-server-default-host + virtual-server-docroot or +## virtual-server-root + http-host + virtual-server-docroot +## +#simple-vhost.server-root = "/home/weigon/wwwroot/servers/" +#simple-vhost.default-host = "grisu.home.kneschke.de" +#simple-vhost.document-root = "/pages/" + + +## +## Format: .html +## -> ..../status-404.html for 'File not found' +#server.errorfile-prefix = "/home/weigon/projects/lighttpd/doc/status-" + +## virtual directory listings +#server.dir-listing = "enable" + +## send unhandled HTTP-header headers to error-log +#debug.dump-unknown-headers = "enable" + +### only root can use these options +# +# chroot() to directory (default: no chroot() ) +#server.chroot = "/" + +## change uid to (default: don't care) +#server.username = "wwwrun" + +## change uid to (default: don't care) +#server.groupname = "wwwrun" + +#### compress module +#compress.cache-dir = "/tmp/lighttpd/cache/compress/" +#compress.filetype = ("text/plain", "text/html") + +#### fastcgi module +## read fastcgi.txt for more info +#fastcgi.server = ( ".php" => +# ( "grisu" => +# ( +# "host" => "192.168.2.10", +# "port" => 1026 +# ) +# ) +# ) + +#### CGI module +#cgi.assign = ( ".pl" => "/usr/bin/perl", +# ".cgi" => "/usr/bin/perl" ) +# + +#### SSL engine +#ssl.engine = "enable" +#ssl.pemfile = "server.pem" + +#### status module +# status.status-url = "/server-status" +# status.config-url = "/server-config" + +#### auth module +## read authentification.txt for more info +# auth.backend = "plain" +# auth.backend.plain.userfile = "lighttpd.user" +# auth.backend.plain.groupfile = "lighttpd.group" + +# auth.backend.ldap.hostname = "localhost" +# auth.backend.ldap.base-dn = "dc=my-domain,dc=com" +# auth.backend.ldap.filter = "(uid=$)" + +# auth.require = ( "/server-status" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "group=www|user=jan|host=192.168.2.10" +# ), +# "/server-info" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "group=www|user=jan|host=192.168.2.10" +# ) +# ) + +#### url handling modules (rewrite, redirect, access) +# url.rewrite = ( "^/$" => "/server-status" ) +# url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" ) + +# +# define a pattern for the host url finding +# %% => % sign +# %0 => domain name + tld +# %1 => tld +# %2 => domain name without tld +# %3 => subdomain 1 name +# %4 => subdomain 2 name +# +# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/" + +#### expire module +# expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes") + +#### ssi +# ssi.extension = ( ".shtml" ) + +#### rrdtool +# rrdtool.binary = "/usr/bin/rrdtool" +# rrdtool.db-name = "/var/www/lighttpd.rrd" diff --git a/attic/freepbx-sandbox/files/retrieve_conf.inc.php b/attic/freepbx-sandbox/files/retrieve_conf.inc.php new file mode 100644 index 00000000..d47bde2b --- /dev/null +++ b/attic/freepbx-sandbox/files/retrieve_conf.inc.php @@ -0,0 +1,766 @@ +add_critical('retrieve_conf', $type, $text, $extended_text); + } + + exit(1); +} + +function debug($text) { + global $debug; + + if ($debug) echo "[DEBUG-preDB] ".$text."\n"; +} + +function showHelp() { + out(_("Optional parameters:")); + out(_(" --help, -h, -? Show this help")); + out(_(" --debug Enable debug output")); + out(_(" --dry-run Don't actually do anything")); +} + + +// bootstrap retrieve_conf by getting the AMPWEBROOT since that is currently where the necessary +// functions.inc.php resides, and then use that parser to properly parse the file and get all +// the defaults as needed. +// +function parse_amportal_conf_bootstrap($filename) { + $file = file($filename); + foreach ($file as $line) { + if (preg_match("/^\s*([\w]+)\s*=\s*\"?([\w\/\:\.\*\%-]*)\"?\s*([;#].*)?/",$line,$matches)) { + $conf[ $matches[1] ] = $matches[2]; + } + } + if ( !isset($conf["AMPWEBROOT"]) || ($conf["AMPWEBROOT"] == "")) { + $conf["AMPWEBROOT"] = "/var/www/html"; + } else { + $conf["AMPWEBROOT"] = rtrim($conf["AMPWEBROOT"],'/'); + } + + return $conf; +} + +/** Adds a trailing slash to a directory, if it doesn't already have one + */ +function addslash($dir) { + return (($dir[ strlen($dir)-1 ] == '/') ? $dir : $dir.'/'); +} + + +/********************************************************************************************************************/ +/* DR +// **** Make sure we have STDIN etc + +// from ben-php dot net at efros dot com at php.net/install.unix.commandline +if (version_compare(phpversion(),'4.3.0','<') || !defined("STDIN")) { + define('STDIN',fopen("php://stdin","r")); + define('STDOUT',fopen("php://stdout","r")); + define('STDERR',fopen("php://stderr","r")); + register_shutdown_function( create_function( '' , 'fclose(STDIN); fclose(STDOUT); fclose(STDERR); return true;' ) ); +} + +// **** Make sure we have PEAR's DB.php, and include it + +outn(_("Checking for PEAR DB..")); +if (! @ include('DB.php')) { + out(_("FAILED")); + fatal(_("PEAR Missing"),sprintf(_("PEAR must be installed (requires DB.php). Include path: %s "), ini_get("include_path"))); +} +out(_("OK")); + + +// **** Make sure we have PEAR's GetOpts.php, and include it + +outn(_("Checking for PEAR Console::Getopt..")); +if (! @ include("Console/Getopt.php")) { + out(_("FAILED")); + fatal(_("PEAR Getopt.php Missing"),sprintf(_("PEAR must be installed (requires Console/Getopt.php). Include path: %s"), ini_get("include_path"))); +} +out(_("OK")); + + +// **** Parse out command-line options + +$shortopts = "h?u:p:"; +$longopts = array("help","debug","dry-run","run-install","amportalconf="); + +$args = Console_Getopt::getopt(Console_Getopt::readPHPArgv(), $shortopts, $longopts); +if (is_object($args)) { + // assume it's PEAR_ERROR + out($args->message); + exit(255); +} +*/ +$debug = false; +$dryrun = false; +$run_install = false; + +/* +foreach ($args[0] as $arg) { + switch ($arg[0]) { + case "--help": case "h": case "?": + showHelp(); + exit(10); + break; + case "--dry-run": + out(_("Dry-run only, no files will be written")); + $dryrun = true; + break; + case "--debug": + $debug = true; + debug(_("Debug mode enabled")); + break; + case "--run-install": + $run_install = true; + out(_("Running module install.php and install.sql scripts")); + break; + case "--amportalconf": + $amportalconf = $arg[1]; + out(sprintf(_("Using %s configuration file"), $amportalconf)); + break; + } +} + +// **** Check for amportal.conf + +outn(sprintf(_("Checking for %s "), $amportalconf)._("..")); +if (!file_exists($amportalconf)) { + fatal(_("amportal.conf access problem: "),sprintf(_("The %s file does not exist, or is inaccessible"), $amportalconf)); +} +out(_("OK")); + +// **** read amportal.conf + +outn(sprintf(_("Bootstrapping %s .."), $amportalconf)); +$amp_conf = parse_amportal_conf_bootstrap($amportalconf); +if (count($amp_conf) == 0) { + fatal(_("amportal.conf parsing failure"),sprintf(_("no entries found in %s"), $amportalconf)); +} +out(_("OK")); + +outn(sprintf(_("Parsing %s .."), $amportalconf)); +require_once($amp_conf['AMPWEBROOT']."/admin/functions.inc.php"); +$amp_conf = parse_amportal_conf($amportalconf); +if (count($amp_conf) == 0) { + fatal(_("amportal.conf parsing failure"),sprintf(_("no entries found in %s"), $amportalconf)); +} +out(_("OK")); + +$asterisk_conf_file = $amp_conf["ASTETCDIR"]."/asterisk.conf"; +outn(sprintf(_("Parsing %s .."), $asterisk_conf_file)); +$asterisk_conf = parse_asterisk_conf($asterisk_conf_file); +if (count($asterisk_conf) == 0) { + fatal(_("asterisk.conf parsing failure"),sprintf(_("no entries found in %s"), $asterisk_conf_file)); +} +out(_("OK")); + +// **** Connect to database + +outn(_("Connecting to database..")); + +# the engine to be used for the SQL queries, +# if none supplied, backfall to mysql +$db_engine = "mysql"; +if (isset($amp_conf["AMPDBENGINE"])){ + $db_engine = $amp_conf["AMPDBENGINE"]; +} +*/ + +// Define the notification class for logging to the dashboard +// +$nt = notifications::create($db); + +// **** Create symlinks array +$symlink_dirs = array(); +$symlink_dirs['sounds'] = $amp_conf['ASTVARLIBDIR'].'/sounds'; +$symlink_dirs['bin'] = $amp_conf['AMPBIN']; +$symlink_dirs['etc'] = $amp_conf['ASTETCDIR']; +$symlink_dirs['images'] = $amp_conf['AMPWEBROOT']."/admin/images"; + +/* +switch ($db_engine) +{ + case "pgsql": + case "mysql": + // datasource in in this style: + // dbengine://username:password@host/database + + $db_user = $amp_conf["AMPDBUSER"]; + $db_pass = $amp_conf["AMPDBPASS"]; + $db_host = $amp_conf["AMPDBHOST"]; + $db_name = $amp_conf["AMPDBNAME"]; + + $datasource = $db_engine.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name; + $db = DB::connect($datasource); // attempt connection + break; + + case "sqlite": + die_freepbx("SQLite2 support is deprecated. Please use sqlite3 only."); + break; + + case "sqlite3": + if (!isset($amp_conf["AMPDBFILE"])) + fatal("You must setup properly AMPDBFILE in $amportalconf"); + + if (isset($amp_conf["AMPDBFILE"]) == "") + fatal("AMPDBFILE in $amportalconf cannot be blank"); + + // on centos this extension is not loaded by default + if (! extension_loaded('sqlite3.so') ) + dl('sqlite3.so'); + + if (! @require_once('DB/sqlite3.php') ) + { + die_freepbx("Your PHP installation has no PEAR/SQLite3 support. Please install php-sqlite3 and php-pear."); + } + + require_once('DB/sqlite3.php'); + $datasource = "sqlite3:///" . $amp_conf["AMPDBFILE"] . "?mode=0666"; + $db = DB::connect($datasource); + break; + + default: + fatal( "Unknown SQL engine: [$db_engine]"); +} + +if(DB::isError($db)) { + out(_("FAILED")); + debug($db->userinfo); + fatal(_("database connection failure"),("failed trying to connect to the configured database")); + +} + +//TODO : make this engine-neutral +outn(_("Connecting to Asterisk manager interface..")); +// connect to asterisk manager +require_once($amp_conf['AMPWEBROOT'].'/admin/common/php-asmanager.php'); +$astman = new AGI_AsteriskManager(); +if (! $res = $astman->connect("127.0.0.1:".$amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"])) { + out(_("FAILED")); + fatal(_("Asterisk Manager Connection Failure"),sprintf(_("Failed to connect to the Asterisk manager through port: %s"), $amp_conf['ASTMANAGERPORT'])); +} +*/ + +//include common functions +require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); +freepbx_log("retrieve_conf", "devel-debug", "Started retrieve_conf, DB Connection OK"); + +// query for our modules +// var_dump( $db ); +$modules = module_getinfo(); + +//Putting the core module last, to move outbound-allroutes +// last in from-internals-additional +if (array_key_exists('core', $modules)) { + $core_tmp = $modules['core']; + unset($modules['core']); + $modules['core'] = $core_tmp; +} + +// include any module global functions +if(is_array($modules)){ + foreach($modules as $key => $module) { + $return['retrieve_conf'] = $return['retrieve_conf'] . $key . "\n"; + //only use this module if it's enabled (status=2) + if (isset($module['status']) && $module['status'] == MODULE_STATUS_ENABLED) { + // Make sure the module is installed and up to date + if ($run_install) module_install($key); + // active_modules array used in genConf function + $active_modules[] = $key; + //include module functions + if (is_file($amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php")) { + freepbx_log('retrieve_conf', 'devel-debug', 'Including '.$amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php"); + include_once($amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php"); + freepbx_log('retrieve_conf', 'devel-debug', $amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php processed OK"); + } + + // create symlinks for files in appropriate sub directories + symlink_subdirs( $amp_conf['AMPWEBROOT'].'/admin/modules/'.$key ); + cp_subdirs( $amp_conf['AMPWEBROOT'].'/admin/modules/'.$key ); + } + } +} +$return['retrieve_conf'] = $return['retrieve_conf'] . $amp_conf['AMPWEBROOT']; + +// create an object of the extensions class +require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); +$ext = new extensions; + +// create objects for any module classes +// currently only 1 class can be declared per module, not sure if that will be an issue +if(isset($active_modules) && is_array($active_modules)){ + foreach($active_modules as $active_module) { + freepbx_log('retrieve_conf', 'devel-debug', "Creating ".$active_module."_conf class"); + $classname = $active_module."_conf"; + if(class_exists($classname)) { + ${$classname} = new $classname; + } + } +} + +$engineinfo = engine_getinfo(); +if($engineinfo['version'] == 0){ + freepbx_log('retrieve_conf', 'fatal', "Failed to get engine information (engine_getinfo: {$engineinfo['engine']})"); + fatal(_("Failed to get engine_info"),_("retreive_conf failed to get engine information and cannot configure up a softwitch with out it. Error: {$engineinfo['engine']}")); +} +// was setting these variables before, assume we still need them +$engine = $engineinfo['engine']; +$version = $engineinfo['version']; + +// Check for and report any extension conflicts +// + +$extens_ok = true; +$dests_ok = true; + +$nt = notifications::create($db); + +$my_hash = array_flip($active_modules); +$my_prob_extens = framework_list_extension_conflicts($my_hash); + +if (empty($my_prob_extens)) { + $nt->delete('retrieve_conf', 'XTNCONFLICT'); +} else { + $previous = null; + $str = null; + $count = 0; + foreach ($my_prob_extens as $extens) { + foreach ($extens as $exten => $details) { + if ($exten != $previous) { + $str .= "Extension: $exten:
"; + $count++; + } + $str .= sprintf("%8s: %s
",$details['status'], $details['description']); + $previous = $exten; + } + } + $nt->add_error('retrieve_conf', 'XTNCONFLICT', sprintf(_("There are %s conflicting extensions"),$count), $str); + $extens_ok = false; +} + +// Check for and report any bogus destinations +// +$my_probs = framework_list_problem_destinations($my_hash, !$amp_conf['CUSTOMASERROR']); + +if (empty($my_probs)) { + $nt->delete('retrieve_conf', 'BADDEST'); +} else { + $results = array(); + $count = 0; + $str = null; + foreach ($my_probs as $problem) { + //print_r($problem); + $results[$problem['status']][] = $problem['description']; + $count++; + } + foreach ($results as $status => $subjects) { + $str .= sprintf(_("DEST STATUS: %s%s"),$status,"\n"); + foreach ($subjects as $subject) { + //$str .= $subject."
"; + $str .= " ".$subject."\n"; + } + } + $nt->add_error('retrieve_conf', 'BADDEST', sprintf(_("There are %s bad destinations"),$count), $str); + $dests_ok = false; +} + +if ((!$exten_ok && $amp_conf['XTNCONFLICTABORT']) || (!$dest_ok && $amp_conf['BADDESTABORT'])) { + out(_("Aborting reload because extension conflicts or bad destinations")); + exit(20); +} +//$return['retrieve_conf'] = $return['retrieve_conf'] . "\n"; + +// run all of the *_get_config and _hookGet_config functions, which will populate the appropriate objects +if(isset($active_modules) && is_array($active_modules)){ + foreach($active_modules as $module) { + $funcname = $module."_get_config"; + if (function_exists($funcname)) { + freepbx_log('retrieve_conf', 'devel-debug', 'Calling '.$funcname.'()'); + $return['retrieve_conf'] = $return['retrieve_conf'] . $funcname . "\n"; + $funcname($engine); + } + } + foreach($active_modules as $module) { + $funcname = $module."_hookGet_config"; + if (function_exists($funcname)) { + freepbx_log('retrieve_conf', 'devel-debug', 'Calling '.$funcname.'()'); + $return['retrieve_conf'] = $return['retrieve_conf'] . $funcname . "\n"; + $funcname($engine); + } + } +} + +// extensions_additional.conf +// create the from-internal-additional context so other can add to it +$ext->add('from-internal-additional', 'h', '', new ext_hangup('')); +//echo $ext->get_filename(); +//echo $ext->generateConf(); +write_file($ext->get_filename(),$ext->generateConf()); + +// now we write out our conf files for modules +// check for any objects for each of the active modules +// ** conferences is an example of a module that write a conf +if(isset($active_modules) && is_array($active_modules)){ + foreach($active_modules as $active_module) { + $classname = $active_module."_conf"; + if(class_exists($classname) && get_class(${$classname}) !== false) { + //echo ${$classname}->get_filename(); + //echo ${$classname}->generateConf(); + + // if the module returns an array, it wants to write multiple files + // ** pinsets is an example of a module that does this + if (is_array(${$classname}->get_filename())) { + foreach(${$classname}->get_filename() as $modconf) { + freepbx_log('retrieve_conf', 'devel-debug', 'generateConf from '.$classname.'->'.$modconf.''); + write_file($modconf,${$classname}->generateConf($modconf)); + } + } else { + freepbx_log('retrieve_conf', 'devel-debug', 'generateConf from '.$classname); + write_file(${$classname}->get_filename(),${$classname}->generateConf()); + } + } + } +} + + +function write_file($filename,$contents) { + global $asterisk_conf; + freepbx_log('retrieve_conf', 'devel-debug', 'Writing '.$filename); + if (isset($filename) && !empty($filename)) { + if ($fd = fopen(addslash($asterisk_conf['astetcdir']).$filename, "w")) { + fwrite($fd, WARNING_BANNER ); + fwrite($fd, $contents); + fclose($fd); + } + } +} + +/* file_exists_wrapper() + * wrapper for file_exists() with the following additonal functionality. + * if the file is a symlink, it will check if the link exists and if not + * it will try to remove this file. It returns a false (file does not exists) + * if the file is successfully removed, true if not. If not a symlink, just + * returns file_exists() + */ +function file_exists_wrapper($string) { + if (is_link($string)) { + $linkinfo = readlink($string); + if ($linkinfo === false) { + //TODO: throw error? + return !unlink($string); + } else { + if (file_exists($linkinfo)) { + return true; + } else { + return !unlink($string); + } + } + } else { + return file_exists($string); + } +} + +function symlink_subdirs($moduledir) { +global $amp_conf; +$symlink_dirs = array(); +$symlink_dirs['sounds'] = $amp_conf['ASTVARLIBDIR'].'/sounds'; +$symlink_dirs['bin'] = $amp_conf['AMPBIN']; +$symlink_dirs['etc'] = $amp_conf['ASTETCDIR']; +$symlink_dirs['images'] = $amp_conf['AMPWEBROOT']."/admin/images"; + +// global $symlink_dirs; + $symlink_errors = false; + + $nt = notifications::create($db); + + foreach ($symlink_dirs as $subdir => $targetdir) { + $dir = addslash($moduledir).$subdir; + if (is_dir($dir)) { + $d = opendir($dir); + while ($file = readdir($d)) { + if ($file[0] != '.') { + $src = addslash($dir).$file; + $dest = addslash($targetdir).$file; + if (file_exists_wrapper($dest)) { + if (!is_link($dest)) { + freepbx_log('retrieve-conf', 'error', $dest.' already exists, and is not a symlink!'); + $nt->add_error('retrieve_conf', 'SYMLINK', _("symlink from modules failed"), sprintf(_("retrieve_conf failed to sym link the %s file from modules"),$dest)); + $symlink_errors = true; + } else if (readlink($dest) != $src) { + // TODO : is this the proper handling? should we just overwrite..? + freepbx_log('retrieve-conf', 'error', $dest.' already exists, and is linked to something else!'); + $nt->add_error('retrieve_conf', 'SYMLINK', _("symlink from modules failed"), sprintf(_("retrieve_conf failed to sym link the %s file from modules"),$dest)); + $symlink_errors = true; + } else { + freepbx_log('retrieve-conf', 'devel-debug', $dest.' already points to '.$src.' - OK'); + } + } else { +// // symlink, unlike copy, doesn't overwrite - have to delete first +// if (is_link($dest) || file_exists($dest)) { +// unlink($dest); +// } + if (symlink($src, $dest)) { + freepbx_log('retrieve-conf', 'devel-debug', 'Symlinked '.$src.' to '.$dest); + } else { + freepbx_log('retreive-conf', 'devel-debug', 'Cannot symlink '.$src.' to '.$dest.'. Check Permissions?'); + } + } + } + } + closedir($d); + } + } + if (!$symlink_errors) { + $nt->delete('retrieve_conf', 'SYMLINK'); + } +} + +// wrap copy with error handler +// +function err_copy($source, $dest) { + $ret = false; + set_error_handler("report_errors"); + if (copy($source, $dest)) { + $ret = chmod($dest,'0754'); + } + restore_error_handler(); + return $ret; +} + +// wrap unlink with error handler +// +function err_unlink($dest) { + set_error_handler("report_errors"); + $ret = unlink($dest); + restore_error_handler(); + return $ret; +} + +function cp_subdirs($moduledir) { + global $cp_errors; +global $amp_conf; +$cp_dirs = array(); +$cp_dirs['agi-bin'] = $amp_conf['ASTAGIDIR']; +// global $cp_dirs; + + $cp_errors = ""; + foreach ($cp_dirs as $subdir => $targetdir) { + $dir = addslash($moduledir).$subdir; + if (is_dir($dir)) { + $d = opendir($dir); + while ($file = readdir($d)) { + if ($file[0] != '.') { + $sourcefile = addslash($dir).$file; + $targetfile = addslash($targetdir).$file; + + if (file_exists_wrapper($targetfile)) { + if (is_link($targetfile)) { + if (err_unlink($targetfile)) { + freepbx_log('retrieve-conf', 'devel-debug', "$targetfile was symbolic link, unlink successful"); + } else { + freepbx_log('retrieve-conf', 'error', "$targetfile is a symblolic link, failed to unlink!"); + break; + } + } + } + // OK, now either the file is a regular file or isn't there, so proceed + // + if (err_copy($sourcefile,$targetfile)) { + freepbx_log('retrieve-conf', 'devel-debug', "$targetfile successfully copied"); + // copy was successful, make sure it has execute permissions + chmod($targetfile,0754); + } else { + freepbx_log('retrieve-conf', 'error', "$targetfile failed to copy from module directory"); + } + } + } + closedir($d); + } + } + $nt = notifications::create($db); + if ($cp_errors) { + $nt->add_error('retrieve_conf', 'CPAGIBIN', _("Failed to copy from module agi-bin"), sprintf(_("Retrieve conf failed to copy file(s) from a module's agi-bin dir: %s"),$cp_errors)); + } else { + $nt->delete('retrieve_conf', 'CPAGIBIN'); + } +} + +function report_errors($errno, $errstr, $errfile, $errline) { + global $cp_errors; + freepbx_log('retrieve-conf', 'error', "php reported: '".mysql_real_escape_string($errstr)."' after copy or unlink attempt!"); + $cp_errors .= $errstr."\n"; +} + +/** Check if there is a job running, if one is found then all is good, if one is not found, it will be added and a + * notification will be sent. + */ +function install_cron_scheduler() { + global $amp_conf; + global $nt; + + // crontab appears to return an error when no entries, os only fail if error returned AND a list of entries. + // Don't know if this will ever happen, but a failure and a list could indicate something wrong. + // + exec("/usr/bin/crontab -l", $outlines, $ret); + if ($ret && count($outlines)) { + $nt->add_error('retrieve_conf', 'CRONMGR', _("Failed to check crontab for cron manager"), sprintf(_("crontab returned %s error code when checking for crontab entries to start freepbx-cron-scheduler.php crontab manager"),$ret)); + } else { + $nt->delete('retrieve_conf', 'CRONMGR'); + $outlines2 = preg_grep("/freepbx-cron-scheduler.php/",$outlines); + $cnt = count($outlines2); + switch ($cnt) { + case 0: + /** grab any other cronjobs that are running as asterisk and NOT associated with backups + * this code was taken from the backup module for the most part. But seems to work... + */ + $outlines = array(); + exec("/usr/bin/crontab -l | grep -v ^#\ DO\ NOT | grep -v ^#\ \( | grep -v freepbx-cron-scheduler.php", $outlines, $ret); + $crontab_entry = ""; + foreach ($outlines as $line) { + $crontab_entry .= $line."\n"; + } + // schedule to run hourly, at a random time. The random time is explicit to accomodate things like module_admin online update checking + // since we will want a random access to the server. In the case of module_admin, that will also be scheduled randomly within the hour + // that it is to run + // + $crontab_entry .= rand(0,59)." * * * * ".$amp_conf['AMPBIN']."/freepbx-cron-scheduler.php"; + system("/bin/echo '$crontab_entry' | /usr/bin/crontab -"); + break; + case 1: + // already running, nothing to do + break; + default: + // error, there should never be more than one running + echo "TODO: deal with error here\n"; + $nt->add_error('retrieve_conf', 'CRONMGR', _("Multiple freepbx-cron-scheduler.php running"), sprintf(_("There were %s freepbx-cron-scheduler.php instances running. There should be only 1."),$cnt)); + } + } +} +include($amp_conf['AMPBIN']."/libfreepbx.confgen.php"); +// script to write op_server.cfg file from mysql +// +if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { + // sqlite3 not supported just yet + $script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); + exec($script); +} + +// generate configuration files +// +// Leave the legacy scripts in for a little while to help with odd-ball upgrade scenarios if they haven't gotten +// a module upgraded yet. In particular Queues +// +if (!isset($core_conf) || !is_a($core_conf, "core_conf")) { + generate_configurations_sip($version); + generate_configurations_iax($version); + generate_configurations_zap($version); +} + +// Check and install the freepbx-cron-scheduler.php manager +// +install_cron_scheduler(); +// run retrieve_conf_post_custom +// If the following file exists, it will be run. This allows customization to be run automatically after the normal +// processing. Caution should be taken using this as it is only deisgned for expert usage. Errors in the code will +// have bad consequences and can cripple the system. +// +if (isset($amp_conf['AMPLOCALBIN'])) { +$post_custom = $amp_conf['AMPLOCALBIN'].'/retrieve_conf_post_custom'; + if (file_exists($post_custom)) { + outn(sprintf(_("Found script %s, executing.."), $post_custom)); + include($post_custom); + out(_("OK")); + } +} + +out("after post"); +/* As of Asterisk 1.4.16 or there abouts, a missing #include file will make the reload fail. So + we need to make sure that we have such for everything that is in our configs. We will simply + look for the #include statements and touch the files vs. trying to inventory everything we may + need and then forgetting something. +*/ + +exec("grep '#include' ".$amp_conf['ASTETCDIR']."/*.conf | sed 's/;.*//; s/#include//'",$output,$retcode); +if ($retcode != 0) { + error("Error code $retcode: trying to search for missing #include files"); +} +foreach($output as $file) { + if (trim($file) == '') { + continue; + } + $parse1 = explode(':',$file); + $parse2 = explode(';',$parse1[1]); + $rawfile = trim($parse2[0]); + if ($rawfile == '') { + continue; + } + + $target = ($rawfile[0] == '/') ? $rawfile : $amp_conf['ASTETCDIR']."/$rawfile"; + + if (!file_exists($target)) { + exec("touch $target", $output, $retcode); + error("Error code $retcode: trying to create empty file $target"); + } +} + +// **** Set reload flag for AMP admin +needreload(); +if (isset($amp_conf["AMPWEBADDRESS"]) && $amp_conf["AMPWEBADDRESS"]) +{ + out(sprintf(_("Please update your modules and reload Asterisk by visiting %s"), "http://".$amp_conf["AMPWEBADDRESS"]."/admin")); +} +else +{ + out(_("Please update your modules and reload Asterisk by browsing to your server.")); +} + $nt->delete('retrieve_conf', 'FATAL'); +out("end\n"); +$exit_val = 0; +?> diff --git a/attic/freepbx-sandbox/files/sqlite3.php b/attic/freepbx-sandbox/files/sqlite3.php new file mode 100644 index 00000000..bb4c369e --- /dev/null +++ b/attic/freepbx-sandbox/files/sqlite3.php @@ -0,0 +1,486 @@ + 'alter', + 'new_link' => false, + 'numrows' => 'emulate', + 'pconnect' => true, + 'prepare' => false, + 'ssl' => false, + 'transactions' => false, + ); + + + /** + * A mapping of native error codes to DB error codes + * + * {@internal Error codes according to sqlite_exec. See the online + * manual at http://sqlite.org/c_interface.html for info. + * This error handling based on sqlite_exec is not yet implemented.}} + * + * @var array + */ + var $errorcode_map = array( + ); + + /** + * The raw database connection created by PHP + * @var resource + */ + var $connection; + + /* The DSN information for connecting to a database + * @var array + */ + var $dsn = array(); + + + /** + * SQLite data types + * + * @link http://www.sqlite.org/datatypes.html + * + * @var array + */ + var $keywords = array ( + 'BLOB' => '', + 'BOOLEAN' => '', + 'CHARACTER' => '', + 'CLOB' => '', + 'FLOAT' => '', + 'INTEGER' => '', + 'KEY' => '', + 'NATIONAL' => '', + 'NUMERIC' => '', + 'NVARCHAR' => '', + 'PRIMARY' => '', + 'TEXT' => '', + 'TIMESTAMP' => '', + 'UNIQUE' => '', + 'VARCHAR' => '', + 'VARYING' => '', + ); + + /** + * The most recent error message from $php_errormsg + * @var string + * @access private + */ + var $_lasterror = ''; + + + + // }}} + // {{{ constructor + + /** + * constructor + * + * @return void + */ + + function DB_sqlite3() + { + $this->DB_common(); + } + + + // }}} + // {{{ string errorNative(void) + + /** + * Gets the DBMS' native error code produced by the last query + * + * @return mixed the DBMS' error code. A DB_Error object on failure. + */ + + function errorNative() + { + return sqlite3_error ($this->connection); + } + + // }}} + // {{{ mixed connect(array $dsn, bool $persitent) + + /** + * create or connect to the specified database. + * + * @param array $dsn the data source name + * @param bool $persitent if the connection is persitent + * + * @return DB_OK on success or DB_error object on failure + */ + + + function connect($dsn, $persitent = false) + { + $this->connection = sqlite3_open ($dsn['database']); + if (!$this->connection) + return $this->raiseError(DB_ERROR_NODBSELECTED); + + return DB_OK; + } + + // }}} + // {{{ bool disconnect (void) + + + /** + * release all resources for this connection, and close database + * + * @return bool TRUE on sucess, FALSE otherwise. + */ + + function disconnect() + { + return sqlite3_close ($this->connection); + } + + // }}} + // {{{ mixed simpleQuery(string $sql) + + /** + * execute a SQL query. + * + * @param string $query the SQL query + * + * @return mixed + object DB_error object on failure + * + object Result resource for SELECT requests + * + bool TRUE for other sucessful requests + */ + + function simpleQuery($query) + { + + $isSelect = preg_match ("/^\s*SELECT/i", $query); + + #$handle = fopen("/tmp/sql.txt",'a'); + #fwrite($handle, "sqlite3 simpleQuery: $query
\n"); + #fclose($handle); + + if (! $isSelect) + $this->result = sqlite3_exec($this->connection, $query); + else + $this->result = sqlite3_query($this->connection, $query); + + if (!$this->result) + return $this->RaiseError($this->errorNative()); + + return $this->result; + } + + // }}} + // {{{ mixed fetchInto(resource $res, array $arr, int $fetchmode [, int $rownum]) + + /** + * Fetch a row of data into an array which is passed by reference + * + * The type of array returned can be controlled either by setting this + * method's $fetchmode parameter or by changing the default + * fetch mode setFetchMode() before calling this method. + * + * There are two options for standardizing the information returned + * from databases, ensuring their values are consistent when changing + * DBMS's. These portability options can be turned on when creating a + * new DB object or by using setOption(). + * + * + DB_PORTABILITY_LOWERCASE + * convert names of fields to lower case + * + * + DB_PORTABILITY_RTRIM + * right trim the data + * + * @param resource $result the result resource + * @param array &$arr the variable where the data should be placed + * @param int $fetchmode the constant indicating how to format the data + * @param int $rownum the row number to fetch (index starts at 0) + * + * @return mixed DB_OK if a row is processed, NULL when the end of the + * result set is reached or a DB_Error object on failure + * + * @see DB_common::setOption(), DB_common::setFetchMode() + */ + + function fetchInto($result, &$arr, $fetchmode, $rownum = null) + { + if ($rownum !==NULL) + return $this->RaiseError (DB_ERROR_NOTIMPLEMENTED); + + switch ($fetchmode) + { + + case DB_FETCHMODE_ORDERED: + $fetchfunc="sqlite3_fetch"; + break; + + case DB_FETCHMODE_OBJECT: + return $this->RaiseError(DB_ERROR_NODBSELECTED); + break; + + case DB_FETCHMODE_ASSOC: + default: + $fetchfunc="sqlite3_fetch_array"; + break; + } + + $arr = $fetchfunc($result); + + if ($arr) + return DB_OK; + + return NULL; + } + + // }}} + // {{{ string modifyLimitQuery(string $query, int $from, int $count [,mixed $params]) + + + /** + * Adds LIMIT clauses to a query string according to current DBMS standards + * + * It is defined here to assure that all implementations + * have this method defined. + * + * @param string $query the query to modify + * @param int $from the row to start to fetching (0 = the first row) + * @param int $count the numbers of rows to fetch + * @param mixed $params array, string or numeric data to be used in + * execution of the statement. Quantity of items + * passed must match quantity of placeholders in + * query: meaning 1 placeholder for non-array + * parameters or 1 placeholder per array element. + * + * @return string the query string with LIMIT clauses added + * + * @access protected + */ + + function modifyLimitQuery($query, $from, $count, $params = array()) + { + return "$query LIMIT $count OFFSET $from"; + } + + + // }}} + // {{{ bool freeResult(void) + + /** + * free the specified result. + * + * @param resource $result the query resource result + * + * @return bool DB_OK + * + */ + + function freeResult($result) + { + sqlite3_query_close($result); + return DB_OK; /* always sucessful ! */ + } + + // }}} + // {{{ int affectedRow(void) + + /** + * Determines the number of rows affected by a data maniuplation query + * + * 0 is returned for queries that don't manipulate data. + * + * @return int the number of rows. A DB_Error object on failure. + */ + + function affectedRows() + { + return sqlite3_changes ($this->connection); + } + + // }}} + // {{{ mixed numCols(resource $result) + + /** + * Get the the number of columns in a result set + * + * @return int the number of columns. A DB_Error object on failure. + */ + + function numCols($result) + { + return sqlite3_column_count($result); + } + + // {{{ mixed createSequence(string $seq_name) + + /** + * Creates a new sequence + * + * The name of a given sequence is determined by passing the string + * provided in the $seq_name argument through PHP's sprintf() + * function using the value from the seqname_format option as + * the sprintf()'s format argument. + * + * seqname_format is set via setOption(). + * + * @param string $seq_name name of the new sequence + * + * @return int DB_OK on success. A DB_Error object on failure. + * + * @see DB_common::dropSequence(), DB_common::getSequenceName(), + * DB_common::nextID() + */ + + function createSequence($seq_name) + { + return $this->query ("CREATE TABLE " . $this->getSequenceName($seq_name) . " (id INTEGER PRIMARY KEY AUTOINCREMENT)"); + } + + // }}} + // {{{ mixed nextId(string $sequence [, bool $ondemand]) + + /** + * Returns the next free id in a sequence + * + * @param string $seq_name name of the sequence + * @param boolean $ondemand when true, the seqence is automatically + * created if it does not exist + * + * @return int the next id number in the sequence. + * A DB_Error object on failure. + * + * @see DB_common::createSequence(), DB_common::dropSequence(), + * DB_common::getSequenceName() + */ + function nextId($seq_name, $ondemand = true) + { + + $sqn = $this->getSequenceName($seq_name); + + if ($ondemand) + { + $tables = $this->getTables(); + if (DB::isError($tables)) return $tables; + + if (! in_array ($sqn, $tables)) + { + $res = $this->createSequence($seq_name); + if ( DB::isError($res)) + return $res; + } + } + + $res = $this->query ("INSERT INTO " . $sqn . " VALUES (NULL)"); + if (DB::isError($res)) return $res; + + return sqlite3_last_insert_rowid ($this->connection); + } + + // }}} + // {{{ mixed dropSequence (string $seq_name) + + /** + * Deletes a sequence + * + * @param string $seq_name name of the sequence to be deleted + * + * @return int DB_OK on success. A DB_Error object on failure. + * + * @see DB_common::createSequence(), DB_common::getSequenceName(), + * DB_common::nextID() + */ + function dropSequence($seq_name) + { + return $this->query("DROP TABLE ". $this->getSequenceName($seq_name)); + } + + // }}} + // {{{ string getSpecialQuery(string $type) + + /** + * Obtains the query string needed for listing a given type of objects + * + * @param string $type the kind of objects you want to retrieve + * + * @return string the SQL query string or null if the driver doesn't + * support the object type requested + * + * @access protected + * @see DB_common::getListOf() + */ + + function getSpecialQuery($type) + { + switch ($type) { + case 'tables': + return "SELECT name FROM SQLITE_MASTER ORDER BY name"; + default: + return $this->raiseError(DB_ERROR_UNSUPPORTED); + } + } + + // }}} + + +} +?> diff --git a/attic/freepbx-sandbox/files/test.php b/attic/freepbx-sandbox/files/test.php new file mode 100644 index 00000000..1d3efd3e --- /dev/null +++ b/attic/freepbx-sandbox/files/test.php @@ -0,0 +1,2 @@ + + diff --git a/attic/freepbx-sandbox/files/testdb.php b/attic/freepbx-sandbox/files/testdb.php new file mode 100755 index 00000000..c1d4f03b --- /dev/null +++ b/attic/freepbx-sandbox/files/testdb.php @@ -0,0 +1,91 @@ +"); +if (DB::isError ($db)) + die ("Cannot connect: " . $db->getMessage () . "\n"); +print("Disconnecting...
"); +$db->disconnect (); + +*/ + +# Basic sqlite connection ---------------------------------------- + +$options = array( + 'debug' => 4, + 'portability' => DB_PORTABILITY_NUMROWS +); + +$file = "/var/lib/asterisk/freepbx.db"; +$datasource = "sqlite3:///" . $file . "?mode=0666"; + +print("Connecting to $datasource.....
"); + +if (! extension_loaded('sqlite3') ) { + print("Loading sqlite3.so....
"); + dl('sqlite3.so'); +} + +$db = DB::connect($datasource, $options); +if (DB::isError ($db)) + die ("Cannot connect: " . $db->getMessage () . "\n"); + +$result = $db->query ("SELECT * FROM admin"); +if (DB::isError ($result)) + die ("SELECT failed: " . $result->getMessage () . "\n"); + +print("admin table rows:
"); +while ($row =& $result->fetchRow ()) + printf("  %s, %s
", $row[0], $row[1]); + +# numRows Test -------------------------------------------------- + +$numRows = $result->numRows(); + +if (DB::isError ($numRows)) + die ("numRows failed: " . $numRows->getMessage () . "
"); +print ("result contains: $numRows rows
"); + +# Try inserting a few values ----------------------------------- + +$result =& $db->query ("INSERT INTO tbl1 VALUES ('AA',30)"); + +if (DB::isError ($result)) + die ("INSERT failed: " . $result->getMessage () . "\n"); + +$result = $db->query ("SELECT * FROM tbl1"); + +if (DB::isError ($result)) + die ("SELECT failed: " . $result->getMessage () . "\n"); + +while ($row =& $result->fetchRow ()) + printf("  %s
", $row[0]); + +$result->free(); +print("Disconnecting..."); +$db->disconnect (); + +?> diff --git a/attic/freepbx-sandbox/patch/common.patch b/attic/freepbx-sandbox/patch/common.patch new file mode 100644 index 00000000..0f1a9010 --- /dev/null +++ b/attic/freepbx-sandbox/patch/common.patch @@ -0,0 +1,10 @@ +--- orig/common.php 2008-03-01 09:40:36.000000000 +1030 ++++ mod/common.php 2008-03-01 09:14:34.000000000 +1030 +@@ -1213,6 +1213,7 @@ + return $ret; + } else { + $this->last_parameters = array(); ++ $this->last_query = $query; + $result = $this->simpleQuery($query); + if ($result === DB_OK || DB::isError($result)) { + return $result; diff --git a/attic/freepbx-sandbox/patch/freepbx.patch b/attic/freepbx-sandbox/patch/freepbx.patch new file mode 100644 index 00000000..35b61d3e --- /dev/null +++ b/attic/freepbx-sandbox/patch/freepbx.patch @@ -0,0 +1,364 @@ +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/modules/core/functions.inc.php 2008-02-10 05:16:02.000000000 +1030 ++++ root/www/admin/modules/core/functions.inc.php 2008-03-11 11:31:52.000000000 +1030 +@@ -2886,6 +2886,7 @@ + // TODO: sqlite work arround - diego + // TODO: WILL NOT WORK, need to remove the usage of SUBSTRING + // need to reorder the trunks in PHP code ++/* + $sqlstr = "SELECT t.variable, t.value, d.value state FROM `globals` t "; + $sqlstr .= "JOIN (SELECT x.variable, x.value FROM globals x WHERE x.variable LIKE 'OUTDISABLE\_%') d "; + $sqlstr .= "ON substring(t.variable,5) = substring(d.variable,12) WHERE t.variable LIKE 'OUT\_%' "; +@@ -2894,9 +2895,9 @@ + $sqlstr .= "WHERE v.variable LIKE 'OUT\_%' AND concat('OUTDISABLE_',substring(v.variable,5)) NOT IN "; + $sqlstr .= " ( SELECT variable from globals WHERE variable LIKE 'OUTDISABLE\_%' ) "; + $sqlstr .= "ORDER BY variable"; +- +- //$unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll"); +- $unique_trunks = sql($sqlstr,"getAll"); ++*/ ++ $unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll"); ++ //$unique_trunks = sql($sqlstr,"getAll"); + } + else + { +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/common/db_connect.php 2007-09-09 20:41:11.000000000 +0930 ++++ root/www/admin/common/db_connect.php 2008-03-11 11:31:52.000000000 +1030 +@@ -52,7 +52,11 @@ + } + + $datasource = "sqlite3:///" . $amp_conf["AMPDBFILE"] . "?mode=0666"; +- $db = DB::connect($datasource); ++ $options = array( ++ 'debug' => 4, ++ 'portability' => DB_PORTABILITY_NUMROWS ++ ); ++ $db = DB::connect($datasource, $options); + break; + + default: +@@ -70,6 +74,7 @@ + $nt = notifications::create($db); + + if ($amp_conf['AMPDBPASS'] == $amp_conf_defaults['AMPDBPASS'][1]) { ++ print + $nt->add_warning('core', 'AMPDBPASS', _("Default SQL Password Used"), _("You are using the default SQL password that is widely known, you should set a secure password")); + } else { + $nt->delete('core', 'AMPDBPASS'); +--- freepbx-2.4.0-orig//amp_conf/htdocs/recordings/includes/database.php 2006-05-01 01:05:45.000000000 +0930 ++++ root/www/recordings/includes/database.php 2008-03-11 11:31:52.000000000 +1030 +@@ -43,18 +43,25 @@ + // connect string + if ($dbfile) { + // datasource mostly to support sqlite: dbengine://dbfile?mode=xxxx +- $dsn = $engine . '://' . $dbfile . '?mode=0666'; ++ $datasource = $engine . ':///' . $dbfile . '?mode=0666'; ++ $options = array( ++ 'debug' => 4 ++ ); ++ if (! extension_loaded('sqlite3') ) { ++ dl('sqlite3.so'); ++ } ++ + } + else { + // datasource in in this style: dbengine://username:password@host/database + $datasource = $engine . '://' . $username . ':' . $password . '@' . $host . '/' . $name; +- } + +- // options +- $options = array( +- 'debug' => 2, +- 'portability' => DB_PORTABILITY_LOWERCASE|DB_PORTABILITY_RTRIM|DB_PORTABILITY_DELETE_COUNT|DB_PORTABILITY_NUMROWS|DB_PORTABILITY_ERRORS|DB_PORTABILITY_NULL_TO_EMPTY, +- ); ++ // options ++ $options = array( ++ 'debug' => 2, ++ 'portability' => DB_PORTABILITY_LOWERCASE|DB_PORTABILITY_RTRIM|DB_PORTABILITY_DELETE_COUNT|DB_PORTABILITY_NUMROWS|DB_PORTABILITY_ERRORS|DB_PORTABILITY_NULL_TO_EMPTY, ++ ); ++ } + + // attempt connection + $dbh = DB::connect($datasource,$options); +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/cdr/lib/defines.php 2006-09-26 20:48:51.000000000 +0930 ++++ root/www/admin/cdr/lib/defines.php 2008-03-11 11:31:52.000000000 +1030 +@@ -12,7 +12,7 @@ + return $conf; + } + +-$amp_conf = parse_amportal_conf("/etc/amportal.conf"); ++$amp_conf = parse_amportal_conf("/etc/amportal.conf"); + + + define ("WEBROOT", "http://".$amp_conf["AMPWEBADDRESS"]."/admin/cdr/"); +@@ -27,8 +27,8 @@ + define ("PORT", "5432"); + define ("USER", $amp_conf["AMPDBUSER"]); + define ("PASS", $amp_conf["AMPDBPASS"]); +-define ("DBNAME", "asteriskcdrdb"); +-define ("DB_TYPE", "mysql"); // mysql or postgres ++define ("DBNAME","/var/asteriskcdr.db"); ++define ("DB_TYPE","sqlite3"); + + + define ("DB_TABLENAME", "cdr"); +@@ -47,16 +47,36 @@ + + function DbConnect() + { +- if (DB_TYPE == "postgres") +- { ++ switch (DB_TYPE) ++ { ++ ++ case "pgsql": + $datasource = 'pgsql://'.USER.':'.PASS.'@'.HOST.'/'.DBNAME; +- } +- else +- { ++ $options = array(); ++ break; ++ ++ case "mysql": + $datasource = DB_TYPE.'://'.USER.':'.PASS.'@'.HOST.'/'.DBNAME; +- } ++ $options = array(); ++ break; ++ ++ case "sqlite3": ++ $datasource = DB_TYPE . ':///' . DBNAME . '?mode=0666'; ++ if (! extension_loaded('sqlite3') ) { ++ dl('sqlite3.so'); ++ } ++ if (! require_once('DB/sqlite3.php') ) ++ { ++ die_freepbx("Your PHP installation has no PEAR/SQLite3 support. Please install php-sqlite3 and php-pear."); ++ } ++ $options = array( ++ 'debug' => 4, ++ 'portability' => DB_PORTABILITY_NUMROWS ++ ); ++ break; ++ } + +- $db = DB::connect($datasource); // attempt connection ++ $db = DB::connect($datasource, $options); // attempt connection + + if(DB::isError($db)) + { +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/cdr/lib/Class.Table.php 2006-09-26 20:48:51.000000000 +0930 ++++ root/www/admin/cdr/lib/Class.Table.php 2008-03-11 11:31:52.000000000 +1030 +@@ -80,8 +80,11 @@ + + //$res=DbExec($link, $QUERY); + $res = $DBHandle -> query($QUERY); ++ if(DB::IsError($res)) { ++ print($res->getMessage()); ++ print("
Is Asterisk CDR database initialised?"); ++ } + +- + $num = $res -> numRows(); + + +--- freepbx-2.4.0-orig//SQL/newinstall.sqlite3.sql 2008-02-11 14:27:53.000000000 +1030 ++++ freepbx-2.4.0//SQL/newinstall.sqlite3.sql 2008-03-08 10:05:24.000000000 +1030 +@@ -323,7 +323,7 @@ + -- Dumping data for table `modules` + -- + +-DROP TABLE IF EXISTS `modules_xml`; ++DROP TABLE IF EXISTS `module_xml`; + CREATE TABLE `module_xml` ( + `id` varchar(20) NOT NULL default 'xml', + `time` int(11) NOT NULL default '0', +--- freepbx-2.4.0-orig//install_amp 2008-01-28 04:22:58.000000000 +1030 ++++ freepbx-2.4.0//install_amp 2008-03-08 10:05:29.000000000 +1030 +@@ -4,7 +4,7 @@ + require_once ("libfreepbx.install.php"); + + # constants +-define("AMP_CONF", "/etc/amportal.conf"); ++define("AMP_CONF", "/etc/amportal.conf"); + define("ASTERISK_CONF", "/etc/asterisk/asterisk.conf"); + define("UPGRADE_DIR", dirname(__FILE__)."/upgrades"); + define("MODULE_DIR", dirname(__FILE__)."/amp_conf/htdocs/admin/modules/"); +@@ -691,13 +691,16 @@ + // **** Look for user = root + + outn("Checking user.."); +-//$current_user=(isset($_ENV["USER"]) ? $_ENV["USER"] : exec('whoami',$output)); +-$euid = (posix_getpwuid(posix_geteuid())); +-$current_user = $euid['name']; +-if ($current_user != "root"){ +- out("FAILED"); +- fatal($argv[0]." must be run as root"); ++if (function_exists('posix_getpwuid') && function_exists('posix_geteuid')) { ++ //$current_user=(isset($_ENV["USER"]) ? $_ENV["USER"] : exec('whoami',$output)); ++ $euid = (posix_getpwuid(posix_geteuid())); ++ $current_user = $euid['name']; ++ if ($current_user != "root"){ ++ out("FAILED"); ++ fatal($argv[0]." must be run as root"); ++ } + } ++ + out("OK"); + + +@@ -892,10 +895,12 @@ + + outn("Connecting to database.."); + +-$db_user = $amp_conf["AMPDBUSER"]; +-$db_pass = $amp_conf["AMPDBPASS"]; +-$db_host = $amp_conf["AMPDBHOST"]; + $db_engine = $amp_conf["AMPDBENGINE"]; ++if ($db_engine != "sqlite3") { ++ $db_user = $amp_conf["AMPDBUSER"]; ++ $db_pass = $amp_conf["AMPDBPASS"]; ++ $db_host = $amp_conf["AMPDBHOST"]; ++} + $db_name = $amp_conf["AMPDBNAME"]; + + // we still support older configurations, and fall back +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/modules/recordings/install.php 2007-08-08 14:34:58.000000000 +0930 ++++ freepbx-2.4.0//amp_conf/htdocs/admin/modules/recordings/install.php 2008-03-08 10:05:24.000000000 +1030 +@@ -22,7 +22,14 @@ + unset($fcc); + + // Make sure table exists +-$sql = "CREATE TABLE IF NOT EXISTS recordings ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; ++ ++if ($amp_conf["AMPDBENGINE"] == 'sqlite3') { ++ $sql = "CREATE TABLE IF NOT EXISTS recordings ( `id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; ++} ++else { ++ $sql = "CREATE TABLE IF NOT EXISTS recordings ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; ++} ++ + $result = $db->query($sql); + if(DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); +@@ -42,7 +49,13 @@ + $sql = "SELECT * FROM recordings where displayname = '__invalid'"; + $results = $db->getRow($sql, DB_FETCHMODE_ASSOC); + if (!isset($results['filename'])) { +- sql("INSERT INTO recordings values ('', '__invalid', 'install done', '')"); ++ if ($amp_conf["AMPDBENGINE"] == 'sqlite3') { ++ sql("INSERT INTO recordings values (NULL, '__invalid', 'install done', '')"); ++ } ++ else ++ sql("INSERT INTO recordings values ('', '__invalid', 'install done', '')"); ++ print("AFTE2\n"); ++ + $dh = opendir($recordings_directory); + while (false !== ($file = readdir($dh))) { // http://au3.php.net/readdir + if ($file[0] != "." && $file != "CVS" && $file != "svn" && !is_dir("$recordings_directory/$file")) { +@@ -59,10 +72,14 @@ + + // Upgrade to recordings 3.0 + // Change filename from VARCHAR(80) to BLOB +-$sql = 'ALTER TABLE recordings CHANGE filename filename BLOB'; +-$result = $db->query($sql); +-if(DB::IsError($result)) { +- die_freepbx($result->getDebugInfo()); ++// Note sqlite3 doesn't support ALTER ++ ++if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { ++ $sql = 'ALTER TABLE recordings CHANGE filename filename BLOB'; ++ $result = $db->query($sql); ++ if(DB::IsError($result)) { ++ die_freepbx($result->getDebugInfo()); ++ } + } + + ?> +--- freepbx-2.4.0-orig//amp_conf/bin/retrieve_conf 2007-12-15 08:18:39.000000000 +1030 ++++ freepbx-2.4.0//amp_conf/bin/retrieve_conf 2008-03-08 10:05:28.000000000 +1030 +@@ -10,7 +10,7 @@ + + ini_set('error_reporting', E_ALL & ~E_NOTICE); + +-define("AMP_CONF", "/etc/amportal.conf"); ++define("AMP_CONF", "/etc/amportal.conf"); + $amportalconf = AMP_CONF; + + //define("ASTERISK_CONF", "/etc/asterisk/asterisk.conf"); +@@ -272,8 +272,6 @@ + fatal(_("database connection failure"),("failed trying to connect to the configured database")); + + } +-out(_("OK")); +- + + //TODO : make this engine-neutral + outn(_("Connecting to Asterisk manager interface..")); +@@ -284,7 +282,6 @@ + out(_("FAILED")); + fatal(_("Asterisk Manager Connection Failure"),sprintf(_("Failed to connect to the Asterisk manager through port: %s"), $amp_conf['ASTMANAGERPORT'])); + } +-out(_("OK")); + + //include common functions + require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); +@@ -293,7 +290,7 @@ + // query for our modules + // var_dump( $db ); + $modules = module_getinfo(); +- ++out(_("DR-BBB")); + //Putting the core module last, to move outbound-allroutes + // last in from-internals-additional + if (array_key_exists('core', $modules)) { +@@ -671,8 +668,11 @@ + + // script to write op_server.cfg file from mysql + // +-$script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); +-exec($script); ++if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { ++ // sqlite3 not supported just yet ++ $script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); ++ exec($script); ++} + + // generate configuration files + // +@@ -684,10 +684,7 @@ + generate_configurations_iax($version); + generate_configurations_zap($version); + } +-if (!isset($queues_conf) || !is_a($queues_conf, "queues_conf")) { +- generate_configurations_queues($version); +-} +- ++ + // Check and install the freepbx-cron-scheduler.php manager + // + install_cron_scheduler(); +--- freepbx-2.4.0-orig//amp_conf/astetc/manager.conf 2006-05-01 11:39:24.000000000 +0930 ++++ freepbx-2.4.0//amp_conf/astetc/manager.conf 2008-03-08 10:05:24.000000000 +1030 +@@ -6,8 +6,8 @@ + port = 5038 + bindaddr = 0.0.0.0 + +-[AMPMGRUSER] +-secret = AMPMGRPASS ++[admin] ++secret = amp111 + deny=0.0.0.0/0.0.0.0 + permit=127.0.0.1/255.255.255.0 + read = system,call,log,verbose,command,agent,user +--- freepbx-2.4.0-orig//amp_conf/htdocs/admin/config.php 2007-12-02 18:06:31.000000000 +1030 ++++ root/www/admin/config.php 2008-03-11 13:22:34.000000000 +1030 +@@ -39,7 +39,9 @@ + /** AJAX handler for reload event + */ + include_once('common/json.inc.php'); +- $response = do_reload(); ++ // DR: include as global code ++ include_once('do_reload.php'); ++ //$response = do_reload(); + $json = new Services_JSON(); + echo $json->encode($response); + break; diff --git a/freepbx-sandbox/Makefile b/freepbx-sandbox/Makefile deleted file mode 100644 index 0d545968..00000000 --- a/freepbx-sandbox/Makefile +++ /dev/null @@ -1,442 +0,0 @@ -# Makefile -# David Rowe 12 Feb 2008 - -# Builds (almost) everything you need for FreePBX with sqlite3 from -# scratch and configures FreePBX to run in a "sandbox" environment. - -TOPDIR = $(shell pwd) -BUILD_DIR = $(TOPDIR) -DL_DIR = $(TOPDIR)/dl -ROOT = $(TOPDIR)/root -export PATH:= $(ROOT)/bin:$(PATH) - -all: php sqlite pear-db php-sqlite3 xdebug lighttpd freepbx - -############################################################## -# PHP -------------------------------------------------------- -############################################################## - -PHP_VERSION=5.2.5 -PHP_DIRNAME=php-$(PHP_VERSION) -PHP_DIR=$(BUILD_DIR)/$(PHP_DIRNAME) -PHP_SITE=http://www.php.net/distributions -PHP_SOURCE=php-$(PHP_VERSION).tar.bz2 -PHP_CONFIGURE_OPTS=--disable-all --with-pcre-regex --enable-force-cgi-redirect \ - --with-config-file-path=$(ROOT)/etc --prefix=$(ROOT) \ - --with-pear --enable-xml --enable-libxml --enable-session \ - --with-gettext --enable-debug - -$(DL_DIR)/$(PHP_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(PHP_SITE)/$(PHP_SOURCE) - -$(PHP_DIR)/.unpacked: $(DL_DIR)/$(PHP_SOURCE) - bzcat $(DL_DIR)/$(PHP_SOURCE) | tar -C $(BUILD_DIR) -xf - - touch $(PHP_DIR)/.unpacked - -$(PHP_DIR)/.configured: $(PHP_DIR)/.unpacked - cd $(PHP_DIR); ./configure $(PHP_CONFIGURE_OPTS) - touch $(PHP_DIR)/.configured - -$(PHP_DIR)/.built: $(PHP_DIR)/.configured - cd $(PHP_DIR); make - cd $(PHP_DIR); make install - cp $(PHP_DIR)/php.ini-recommended $(ROOT)/etc/php.ini - echo include_path=\".:$(ROOT)/lib/php\" >> $(ROOT)/etc/php.ini - touch $(PHP_DIR)/.built - -php: $(PHP_DIR)/.built - -############################################################## -# sqlite3 ---------------------------------------------------- -############################################################## - -SQLITE_VERSION=3.5.6 -SQLITE_DIRNAME=sqlite-$(SQLITE_VERSION) -SQLITE_DIR=$(BUILD_DIR)/$(SQLITE_DIRNAME) -SQLITE_SITE=http://www.sqlite.org/ -SQLITE_SOURCE=sqlite-amalgamation-$(SQLITE_VERSION).tar.gz -SQLITE_CONFIGURE_OPTS = --prefix=$(ROOT) - -$(DL_DIR)/$(SQLITE_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(SQLITE_SITE)/$(SQLITE_SOURCE) - -$(SQLITE_DIR)/.unpacked: $(DL_DIR)/$(SQLITE_SOURCE) - zcat $(DL_DIR)/$(SQLITE_SOURCE) | tar -C $(BUILD_DIR) -xf - - touch $(SQLITE_DIR)/.unpacked - -$(SQLITE_DIR)/.configured: $(SQLITE_DIR)/.unpacked - cd $(SQLITE_DIR); ./configure $(SQLITE_CONFIGURE_OPTS) - touch $(SQLITE_DIR)/.configured - -$(SQLITE_DIR)/.built: $(SQLITE_DIR)/.configured - cd $(SQLITE_DIR); make - cd $(SQLITE_DIR); make install - touch $(SQLITE_DIR)/.built - -sqlite: $(SQLITE_DIR)/.built - -############################################################## -# PEAR:DB --------------------------------------------------- -############################################################## - -$(ROOT)/lib/php/.db-installed: - pear install DB - cd $(ROOT)/lib/php/DB; patch -p1 < $(TOPDIR)/patch/common.patch - touch $(ROOT)/lib/php/.db-installed - -pear-db: $(ROOT)/lib/php/.db-installed - -############################################################## -# php-sqlite3 ------------------------------------------------ -############################################################## - -PHP-SQLITE3_VERSION=0.5 -PHP-SQLITE3_DIRNAME=sqlite3-$(PHP-SQLITE3_VERSION) -PHP-SQLITE3_DIR=$(BUILD_DIR)/$(PHP-SQLITE3_DIRNAME) -PHP-SQLITE3_SITE=http://optusnet.dl.sourceforge.net/sourceforge/php-sqlite3/ -PHP-SQLITE3_SOURCE=sqlite3-$(PHP-SQLITE3_VERSION).tgz -PHP-SQLITE3_CONFIGURE_OPTS=--prefix=$(ROOT) \ - --with-sqlite3=$(ROOT) \ - --with-php-config=$(ROOT)/bin/php-config - -$(DL_DIR)/$(PHP-SQLITE3_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(PHP-SQLITE3_SITE)/$(PHP-SQLITE3_SOURCE) - -$(PHP-SQLITE3_DIR)/.unpacked: $(DL_DIR)/$(PHP-SQLITE3_SOURCE) - zcat $(DL_DIR)/$(PHP-SQLITE3_SOURCE) | tar -C $(BUILD_DIR) -xf - - touch $(PHP-SQLITE3_DIR)/.unpacked - -$(PHP-SQLITE3_DIR)/.configured: $(PHP-SQLITE3_DIR)/.unpacked - cd $(PHP-SQLITE3_DIR); phpize; ./configure $(PHP-SQLITE3_CONFIGURE_OPTS) - touch $(PHP-SQLITE3_DIR)/.configured - -$(PHP-SQLITE3_DIR)/.built: $(PHP-SQLITE3_DIR)/.configured - cd $(PHP-SQLITE3_DIR); make - cd $(PHP-SQLITE3_DIR); make install - - # use modified sqlite3.php for PHP 5. We use a sym link so that - # we can edit it in place and capture changes to source control - - ln -sf $(TOPDIR)/files/sqlite3.php $(ROOT)/lib/php/DB/sqlite3.php - - # update php.ini extensions line for sqlite3.so - - cat $(ROOT)/etc/php.ini | sed '/extension_dir/ d' > $(ROOT)/etc/php.ini.tmp - mv $(ROOT)/etc/php.ini.tmp $(ROOT)/etc/php.ini - echo extension_dir=\"`find $(ROOT) -name sqlite3.so | xargs dirname`\" >> $(ROOT)/etc/php.ini - - touch $(PHP-SQLITE3_DIR)/.built - -php-sqlite3: $(PHP-SQLITE3_DIR)/.built - -############################################################## -# xdebug ----------------------------------------------------- -############################################################## - -XDEBUG_VERSION=2.0.2 -XDEBUG_DIRNAME=xdebug-$(XDEBUG_VERSION) -XDEBUG_DIR=$(BUILD_DIR)/$(XDEBUG_DIRNAME) -XDEBUG_SITE=http://www.xdebug.org/files/ -XDEBUG_SOURCE=xdebug-$(XDEBUG_VERSION).tgz -XDEBUG_CONFIGURE_OPTS=--prefix=$(ROOT) --enable-xdebug - -$(DL_DIR)/$(XDEBUG_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(XDEBUG_SITE)/$(XDEBUG_SOURCE) - -$(XDEBUG_DIR)/.unpacked: $(DL_DIR)/$(XDEBUG_SOURCE) - zcat $(DL_DIR)/$(XDEBUG_SOURCE) | tar -C $(BUILD_DIR) -xf - - touch $(XDEBUG_DIR)/.unpacked - -$(XDEBUG_DIR)/.configured: $(XDEBUG_DIR)/.unpacked - cd $(XDEBUG_DIR); phpize; ./configure $(XDEBUG_CONFIGURE_OPTS) - touch $(XDEBUG_DIR)/.configured - -$(XDEBUG_DIR)/.built: $(XDEBUG_DIR)/.configured - cd $(XDEBUG_DIR); make - cp $(XDEBUG_DIR)/modules/xdebug.so $(ROOT)/lib - - # update php.ini extensions line for xdebug.so - - echo zend_extension=\"$(ROOT)/lib/xdebug.so\" >> $(ROOT)/etc/php.ini - echo "xdebug.auto_trace=On" >> $(ROOT)/etc/php.ini - echo "xdebug.show_exception_trace=On" >> $(ROOT)/etc/php.ini - - touch $(XDEBUG_DIR)/.built - -xdebug: $(XDEBUG_DIR)/.built - -######################################################################### -# lighttpd -------------------------------------------------------------- -######################################################################### - -LIGHTTPD_VERSION=1.4.18 -LIGHTTPD_DIRNAME=lighttpd-$(LIGHTTPD_VERSION) -LIGHTTPD_DIR=$(BUILD_DIR)/$(LIGHTTPD_DIRNAME) -LIGHTTPD_SITE=http://www.lighttpd.net/download -LIGHTTPD_SOURCE=lighttpd-$(LIGHTTPD_VERSION).tar.gz -LIGHTTPD_CONFIGURE_OPTS=--prefix=$(ROOT) --disable-ipv6 - -$(DL_DIR)/$(LIGHTTPD_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(LIGHTTPD_SITE)/$(LIGHTTPD_SOURCE) - -$(LIGHTTPD_DIR)/.unpacked: $(DL_DIR)/$(LIGHTTPD_SOURCE) - zcat $(DL_DIR)/$(LIGHTTPD_SOURCE) | tar -C $(BUILD_DIR) -xf - - touch $(LIGHTTPD_DIR)/.unpacked - -$(LIGHTTPD_DIR)/.configured: $(LIGHTTPD_DIR)/.unpacked - cd $(LIGHTTPD_DIR); ./configure $(LIGHTTPD_CONFIGURE_OPTS) - touch $(LIGHTTPD_DIR)/.configured - -$(LIGHTTPD_DIR)/.built: $(LIGHTTPD_DIR)/.configured - cd $(LIGHTTPD_DIR); make - cd $(LIGHTTPD_DIR); make install - - cp files/lighttpd.conf $(ROOT)/etc - mkdir -p $(ROOT)/www - cp files/test.php $(ROOT)/www - - # change server root and set up cgi-assign for PHP - - cat $(ROOT)/etc/lighttpd.conf | sed '/server.document-root/ d' > $(ROOT)/etc/lighttpd.conf.tmp - mv $(ROOT)/etc/lighttpd.conf.tmp $(ROOT)/etc/lighttpd.conf - echo "server.document-root = \"$(ROOT)/www/\"" >> $(ROOT)/etc/lighttpd.conf - echo "cgi.assign = (\".php\" => \"$(ROOT)/bin/php-cgi\")" >> $(ROOT)/etc/lighttpd.conf - - touch $(LIGHTTPD_DIR)/.built - -lighttpd: $(LIGHTTPD_DIR)/.built - -######################################################################### -# freepbx --------------------------------------------------------------- -######################################################################### - -FREEPBX_VERSION=2.4.0 -FREEPBX_DIRNAME=freepbx-$(FREEPBX_VERSION) -FREEPBX_DIR=$(BUILD_DIR)/$(FREEPBX_DIRNAME) -FREEPBX_SITE= http://mirror.freepbx.org -FREEPBX_SOURCE=freepbx-$(FREEPBX_VERSION).tar.gz -FREEPBX_CONFIGURE_OPTS= - -# sed command to change hard coded PHP /etc/amportal.conf path - -FREEPBX_AMP_CONF='s|"/etc/amportal.conf"|"$(ROOT)/etc/amportal.conf"|' - -$(DL_DIR)/$(FREEPBX_SOURCE): - mkdir -p dl - wget -P $(DL_DIR) $(FREEPBX_SITE)/$(FREEPBX_SOURCE) - -$(FREEPBX_DIR)/.unpacked: $(DL_DIR)/$(FREEPBX_SOURCE) - zcat $(DL_DIR)/$(FREEPBX_SOURCE) | tar -C $(BUILD_DIR) -xf - - patch -d $(FREEPBX_DIR) -p1 < patch/freepbx.patch - - # additional files to implement retrieve_conf as include - - cp files/retrieve_conf.inc.php files/do_reload.php \ - $(FREEPBX_DIR)/amp_conf/htdocs/admin - - touch $(FREEPBX_DIR)/.unpacked - -$(FREEPBX_DIR)/.installed: $(FREEPBX_DIR)/.unpacked - - # initialise databases (freepbx and CDR) - - mkdir -p $(ROOT)/var - cat $(FREEPBX_DIR)/SQL/newinstall.sqlite3.sql | sqlite3 $(ROOT)/var/freepbx.db - touch $(ROOT)/var/asteriskcdr.db - - # edit amportal.conf - - # out with the old...... - - cat $(FREEPBX_DIR)/amportal.conf | \ - sed -e '/AMPDBENGINE=/ d' -e '/AMPDBFILE=/ d' \ - -e '/AMPWEBROOT=/ d' -e '/FOPWEBROOT=/ d' \ - -e '/AMPDBHOST=/ d' -e '/AMPDBUSER=/ d' -e '/AMPDBPASS=/ d' \ - > $(FREEPBX_DIR)/amportal.conf.tmp - - mv $(FREEPBX_DIR)/amportal.conf.tmp $(FREEPBX_DIR)/amportal.conf - - # in with the new........ - - echo "AMPDBENGINE=sqlite3" >> $(FREEPBX_DIR)/amportal.conf - echo "AMPDBFILE=$(ROOT)/var/freepbx.db" >> $(FREEPBX_DIR)/amportal.conf - echo "AMPWEBROOT=$(ROOT)/www" >> $(FREEPBX_DIR)/amportal.conf - echo "FOPWEBROOT=$(ROOT)/www/panel" >> $(FREEPBX_DIR)/amportal.conf - - sed -i "s|/var/www/html|$(ROOT)/www|" $(FREEPBX_DIR)/amportal.conf - - # Wholesale hacking of FreePBX source to move AMP_CONF to our local conf dir: - # FYI to find where AMP_CONF is used: - # grep -r "define(\"AMP_CONF\", \"/etc/amportal.conf\")" * - - cd $(FREEPBX_DIR); \ - FILES=`grep -r "\"/etc/amportal.conf\"" * | sed 's/:.*//'`; \ - for f in $$FILES; do \ - sed -i $(FREEPBX_AMP_CONF) $$f; \ - done - - # change recordings/includes/main.conf.php DBENGINE and DBFILE settings which - # are hard coded for mysql - - sed -i "s|ASTERISKCDR_DBENGINE.*|ASTERISKCDR_DBENGINE=\"sqlite3\";|" \ - $(FREEPBX_DIR)/amp_conf/htdocs/recordings/includes/main.conf.php - sed -i "s|ASTERISKCDR_DBFILE.*|ASTERISKCDR_DBFILE=\"$(ROOT)/var/asteriskcdr.db\";|" \ - $(FREEPBX_DIR)/amp_conf/htdocs/recordings/includes/main.conf.php - - # change admin/cdr/lib/defines DB_TYPE and DBNAME settings - - sed -i "s|\"DBNAME\".*|\"DBNAME\",\"$(ROOT)/var/asteriskcdr.db\");|" \ - $(FREEPBX_DIR)/amp_conf/htdocs/admin/cdr/lib/defines.php - sed -i "s|\"DB_TYPE\".*|\"DB_TYPE\",\"sqlite3\");|" \ - $(FREEPBX_DIR)/amp_conf/htdocs/admin/cdr/lib/defines.php - - # switch off mp3 support as I dont have asterisk-addons and Asterisk keeps - # crashing when I start it - - sed -i "s|load => format_mp3.so|;load => format_mp3.so|" \ - $(FREEPBX_DIR)/amp_conf/astetc/modules.conf - - # cp amportal.conf ourselves to bypass a lot of questions in install script - - cp $(FREEPBX_DIR)/amportal.conf $(ROOT)/etc - - # run installer - - sudo mkdir -p $(ROOT)/var/run/asterisk; sudo chmod 777 $(ROOT)/var/run/asterisk; - sudo mkdir -p $(ROOT)/var/lib/asterisk/bin; sudo chmod 777 $(ROOT)/var/lib/asterisk/bin; - cd $(FREEPBX_DIR); sudo ./install_amp; sudo chmod 777 $(ROOT)/www -R - - #touch $(FREEPBX_DIR).installed - - -freepbx: $(FREEPBX_DIR)/.installed - -######################################################################### -# clean ---------------------------------------------------------------- -######################################################################### - -clean: - rm -Rf $(PHP_DIR) $(SQLITE_DIR) $(PHP-SQLITE3_DIR) \ - $(XDEBUG_DIR) $(LIGHTTPD_DIR) $(FREEPBX_DIR) root \ - $(FREEPBX_DIR)-orig - - find . -name '*~' | xargs rm -f - rm -f *.xml # where do these come from? - -######################################################################### -# freepbx-make-patch --------------------------------------------------- -######################################################################### - -# Generate patches between original tar ball $(AO) and either the -# installed files $(AROOT), or modified tar ball $A. -# Run this Makefile target to capture any changes to patches - -AO = $(FREEPBX_DIRNAME)-orig/ -AROOT = root/www -A = $(FREEPBX_DIRNAME)/ - -freepbx-make-patch: - - # untar original, to save time we check if the orig is already there - - if [ ! -d $(FREEPBX_DIR)-orig ] ; then \ - cd $(DL_DIR); tar xvf $(FREEPBX_SOURCE); \ - mv $(FREEPBX_DIRNAME) $(FREEPBX_DIR)-orig; \ - fi - - # make big-ass SQL statement work with sqlite3 - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/modules/core/functions.inc.php \ - $(AROOT)/admin/modules/core/functions.inc.php \ - > patch/freepbx.patch - - # add $options array to help numRows() support in sqlite3 - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/common/db_connect.php \ - $(AROOT)/admin/common/db_connect.php \ - >> patch/freepbx.patch - - # sqlite3 support for cdr in recordings - - -diff -uN \ - $(AO)/amp_conf/htdocs/recordings/includes/database.php \ - $(AROOT)/recordings/includes/database.php \ - >> patch/freepbx.patch - - # sqlite3 support for cdr - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/cdr/lib/defines.php \ - $(AROOT)/admin/cdr/lib/defines.php \ - >> patch/freepbx.patch - - # trap missing cdr table error in Reports menu - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/cdr/lib/Class.Table.php \ - $(AROOT)/admin/cdr/lib/Class.Table.php \ - >> patch/freepbx.patch - - # typo in newinstall.sqlite3.sql - - -diff -uN \ - $(AO)/SQL/newinstall.sqlite3.sql \ - $(A)/SQL/newinstall.sqlite3.sql \ - >> patch/freepbx.patch - - # stop installer warning/errors when sqlite3 and blackfin used - - -diff -uN \ - $(AO)/install_amp \ - $(A)/install_amp \ - >> patch/freepbx.patch - - # use sqlite3 SQL syntax for recording installer - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/modules/recordings/install.php \ - $(A)/amp_conf/htdocs/admin/modules/recordings/install.php \ - >> patch/freepbx.patch - - # 1/ stop perl script for flash panel being called, as - # this won't work on Blackfin (might work on x86 with - # appropriate Perl lib but not tested) - # - # 2/ Remove code to set up queues, as it seems to be killing retrive_conf - # Is this needed or a legacy thing? - - -diff -uN \ - $(AO)/amp_conf/bin/retrieve_conf \ - $(A)/amp_conf/bin/retrieve_conf \ - >> patch/freepbx.patch - - # set up default AMP user and password - - -diff -uN \ - $(AO)/amp_conf/astetc/manager.conf \ - $(A)/amp_conf/astetc/manager.conf \ - >> patch/freepbx.patch - - # make retrieve_conf an include from config.php rather - # than exec to save about 15M - - -diff -uN \ - $(AO)/amp_conf/htdocs/admin/config.php \ - $(AROOT)/admin/config.php \ - >> patch/freepbx.patch - - # NOTE: common.patch was generated manually from command line - - # undo sandbox path (messy! Must be a better way....) - - sed -i 's|$(ROOT)||' patch/freepbx.patch - - - diff --git a/freepbx-sandbox/README.txt b/freepbx-sandbox/README.txt deleted file mode 100644 index b8a32e9b..00000000 --- a/freepbx-sandbox/README.txt +++ /dev/null @@ -1,217 +0,0 @@ -README for freepbx-sandbox -David Rowe Feb 2008 - -Introduction ------------- - -This directory contains a "sandbox" type development environment for -FreePBX using sqlite3. It was used to develop patches against FreePBX -2.4.0 to progress sqlite3 support. - -The Makefile builds (almost) everything you need for FreePBX (web -server, php etc) from scratch and runs it in a "sandbox" environment. -The notable exception is that it doesn't build Asterisk (yet). - -FreePBX is configured to use lighttpd (easier than building Apache) -and and sqlite3. - -Most of the files for are confined to this directory, i.e. you mostly -(except for Asterisk) don't need to mess with your PC's configuration. -Used to model and test configuration for Blackfin port, but may be -useful for general FreePBX development. - -FreePBX Sqlite3 Status ----------------------- - -Most of the screens (Admin/Reports/Recording) present OK but have not -been extensively tested. The Flash Panel isn't working/hasn't been -tested. Reports/Recording is awaiting sqlite3 CDR support (e.g. in -Asterisk 1.6) for further testing. The amp_conf installer works OK. - -I have run some basic tests such as adding an extension/route/trunk -and made a few calls OK. - -This FreePBX/Sqlite3 development has been performed on a laptop -running Ubuntu (no zaptel hardware) with Asterisk 1.4 and FreePBX -2.4.0. - -Motivation ----------- - -1/ When I first tried to manually install FreePBX I had a lot of -problems installing all the apps I needed, especially as I was new to -PHP/SQL/FreePBX. So I thought about automating the installation (from -source). - -2/ It may allow multiple installations of FreePBX, or for example lets -you use a different PHP version to currently installed on your system. -Asterisk would also need to be sandboxed for this to work. - -3/ It doesn't mess with your root filesystem. - -4/ Let me collect all the code I needed in one dir tree, making source -control easier. - -5/ Stepping stone for a Blackfin port. - -Building and Running FreePBX-sqlite3 Sandbox --------------------------------------------- - -Building: - -1/ Install Asterisk 1.4.x and start Asterisk. - -2/ Build freepbx-sandbox: - -[your home]$ svn co \ - https://freetel.svn.sourceforge.net/svnroot/freetel/freepbx-sandbox \ - freepbx-sandbox -[your home]$ cd freepbx -[freepbx-sandbox]$ make - -3/ You will eventually get prompted for your root passwd - this is - required for several stages of the installation. - -Running: - -1/ Start the web server: - [freepbx-sandbox]$ sudo ./root/sbin/lighttpd -D -f root/etc/lighttpd.conf -2/ If not already running start Asterisk: - [freepbx-sandbox]$ sudo asterisk -3/ Point your browser at locahost - -Manual Installation of FreePBX with sqlite3 -------------------------------------------- - -Here is a rough guide for a regular (non-sandbox) installation of -FreePBX with sqlite3. - -The Makefile automates FreePBX/sqlite3 installation in a sandbox -environment, use it as a reference for manual installation as I may -have missed a step in the steps below. See also sqlite.readme in the -FreePBX tar ball. - -1/ Install and test a web server with PHP 5. - -2/ Install PHP PEAR. Patch DB/common.php with files/common.patch to - enable numRows() to work. - -3/ Install sqlite3 (shared libs and application). - -4/ Install sqlite3-0.5 (PEAR/DB support for sqlite3) - + cp files/sqlite3.php /your/php/path/DB/sqlite3.php. This is an updated - version of the sqlite3.php file that comes with sqlite3-0.5 - + make sure you install sqlite.so and update php.ini so it can find it. - + optional: see Test 2 in the next section - -5/ tar xvzf freepbx-2.4.0.tar.gz - -6/ Edit amportal.conf for sqlite (see sqlite.readme), manually cp to - /etc (that way installer ask less questions). - -7/ Create sqlite database (see sqlite.readme). Create a dummy cdr - database file using 'touch /var/asteriskcdr.db' (this last step - prevents reports/recording screens choking in the absence of - Asterisk sqlite3 CDR records). - -8/ Apply patch/freepbx.patch to freepbx-2.4.0 directory. - -9/ Manually edit recordings/includes/main.conf.php: - ASTERISKCDR_DBENGINE="sqlite3" - ASTERISKCDR_DBFILE="/var/asteriskcdr.db" - - Manually edit: admin/cdr/lib/defines.php: - DB_TYPE="sqlite3" - DB_NAME="/var/asteriskcdr.db" - -10/ Run freepbx installer - -Tests ------ - -1/ basic PHP support: run file/test.php on your webserver - -2/ PEAR/DB with sqlite3: run files/testdb.php on your webserver - (after freepbx.db has been created by step 9) - -Notes ------ - -1/ The Recordings screen needs a sqlite3 CDR backend for Asterisk. -This is available in Asterisk 1.6. This hasn't been tested yet. - -2/ The Makefile automates FreePBX/sqlite3 installation in a sandbox -environment, use it as a reference for manual installation. See -Makefile for more information. - -3/ Changes to FreePBX are in the patch directory. An updated -sqlite3.php DB/PEAR backend is also required (files dir). - -4/ If port 80 is not available kill your existing web server. - -5/ Xdebug generates trace files in your /tmp directory. Useful to -determine what went wrong. Also keep an eye on the lighttpd log. - -6/ I used a laptop running Ubuntu and Asterisk 1.4.4 for these tests - -Asterisk had no analog hardware installed so I didn't install Zaptel. -Asterisk was compiled in another directory in the usual way: -./configure && make && sudo make install. - -7/ In files/testdb.php is a simple test script for exercising sqlite3 -PEAR/DB support - useful for debugging any sqlite3 problems you might -encounter. - -Suggested FreePBX Changes -------------------------- - -1/ Consider patch/freepbx.patch (for FreePBX) & patch/common.patch - (for PEAR/DB). Patches are explained at the end of Makefile - (freepbx-make-patch target). - - Please note that some of the patches contain some hard-coded - information (e.g. changed paths), for example: - - admin/cdr/lib/defines.php (DBNAME & DBTYPE lines) - install_amp (AMP_CONF) - retrieve_conf (AMP_CONF) - - This is a consequence of the sandbox method I am using, and in some - cases current FreePBX sqlite3 support (e.g. the Asterisk CDR - database is hard coded in several places rather than being set in - amportal.conf). If checking into FreePBX source control this part - of the patch should not be applied. I will try and work out a - better way to generate patches in future. - -2/ It might be better to store the CDR database parameters in - amportal.conf rather than hard coding them in - recordings/includes/main.conf.php ($ASTERISKCDR_DBFILE, - $ASTERISKCDR_DBNAME) & admin/cdr/lib/defines.php (DBNAME, DB_TYPE). - -3/ Include sqlite3.php in FreePBX to support sqlite3 in PEAR/DB for - PHP 5. - -4/ newinstall.sqlite3.sql has a typo on line 327: - - modules_xml -> module_xml - - This correction is included in patch/freepbx.patch - -TODO ----- - -1/ Try to get Asterisk 1.6 CDR working with sqlite3, so we can further - develop the Reports/recordings menus. - -2/ Bunch of warnings from the web server I haven't worked out yet: - - a) when saving a new extension: - - - 2008-03-02 08:14:41: (mod_cgi.c.1231) cgi died ? - - b) lots of this sort of thing: - - - PHP Notice: Undefined offset: 2 in - /home/david/freepbx-sandbox/root/www/admin/modules/core/functions.inc.php - on line 2946 diff --git a/freepbx-sandbox/dl/.gitignore b/freepbx-sandbox/dl/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/freepbx-sandbox/files/do_reload.php b/freepbx-sandbox/files/do_reload.php deleted file mode 100644 index 5e2d677c..00000000 --- a/freepbx-sandbox/files/do_reload.php +++ /dev/null @@ -1,121 +0,0 @@ -0,'test'=>'abc'); - $exit_val = null; - - if (isset($amp_conf["PRE_RELOAD"]) && !empty($amp_conf['PRE_RELOAD'])) { - exec( $amp_conf["PRE_RELOAD"], $output, $exit_val ); - - if ($exit_val != 0) { - $desc = sprintf(_("Exit code was %s and output was: %s"), $exit_val, "\n\n".implode("\n",$output)); - $notify->add_error('freepbx','reload_pre_script', sprintf(_('Could not run %s script.'), $amp_conf['PRE_RELOAD']), $desc); - - $return['num_errors']++; - } else { - $notify->delete('freepbx', 'reload_pre_script'); - } - } - - // use include file in current php-cgi, avoid repeating a lot - // of the code - - require_once('retrieve_conf.inc.php'); - $return['retrieve_conf'] = $rc_output; - - // retrive_conf html output - if ($exit_val != 0) { - $return['status'] = false; - $return['message'] = sprintf(_('Reload failed because retrieve_conf encountered an error: %s'),$exit_val); - $return['num_errors']++; - $notify->add_critical('freepbx','RCONFFAIL', _("retrieve_conf failed, config not applied"), $return['message']); - return $return; - } - - if (!isset($astman) || !$astman) { - $return['status'] = false; - $return['message'] = _('Reload failed because FreePBX could not connect to the asterisk manager interface.'); - $return['num_errors']++; - $notify->add_critical('freepbx','RCONFFAIL', _("retrieve_conf failed, config not applied"), $return['message']); - return $return; - } - $notify->delete('freepbx', 'RCONFFAIL'); - - //reload MOH to get around 'reload' not actually doing that. - $astman->send_request('Command', array('Command'=>'moh reload')); - - //reload asterisk - $astman->send_request('Command', array('Command'=>'reload')); - - $return['status'] = true; - $return['message'] = _('Successfully reloaded'); - - if ($amp_conf['FOPRUN']) { - //bounce op_server.pl - $wOpBounce = $amp_conf['AMPBIN'].'/bounce_op.sh'; - exec($wOpBounce.' &>'.$asterisk_conf['astlogdir'].'/freepbx-bounce_op.log', $output, $exit_val); - - if ($exit_val != 0) { - $desc = _('Could not reload the FOP operator panel server using the bounce_op.sh script. Configuration changes may not be reflected in the panel display.'); - $notify->add_error('freepbx','reload_fop', _('Could not reload FOP server'), $desc); - - $return['num_errors']++; - } else { - $notify->delete('freepbx','reload_fop'); - } - } - - //store asterisk reloaded status - $sql = "UPDATE admin SET value = 'false' WHERE variable = 'need_reload'"; - $result = $db->query($sql); - if(DB::IsError($result)) { - $return['message'] = _('Successful reload, but could not clear reload flag due to a database error: ').$db->getMessage(); - $return['num_errors']++; - } - - if (isset($amp_conf["POST_RELOAD"]) && !empty($amp_conf['POST_RELOAD'])) { - exec( $amp_conf["POST_RELOAD"], $output, $exit_val ); - - if ($exit_val != 0) { - $desc = sprintf(_("Exit code was %s and output was: %s"), $exit_val, "\n\n".implode("\n",$output)); - $notify->add_error('freepbx','reload_post_script', sprintf(_('Could not run %s script.'), 'POST_RELOAD'), $desc); - - $return['num_errors']++; - } else { - $notify->delete('freepbx', 'reload_post_script'); - } - } - $response = $return; - -?> diff --git a/freepbx-sandbox/files/lighttpd.conf b/freepbx-sandbox/files/lighttpd.conf deleted file mode 100644 index 5c7b035f..00000000 --- a/freepbx-sandbox/files/lighttpd.conf +++ /dev/null @@ -1,231 +0,0 @@ -# lighttpd configuration file -# -# use a it as base for lighttpd 1.0.0 and above -# -# $Id: lighttpd.conf,v 1.6 2004/08/29 09:44:53 weigon Exp $ - -############ Options you really have to take care of #################### - -## modules to load -# at least mod_access and mod_accesslog should be loaded -# all other module should only be loaded if really neccesary -# - saves some time -# - saves memory -server.modules = ( -# "mod_rewrite", -# "mod_redirect", - "mod_access", -# "mod_auth", -# "mod_status", -# "mod_fastcgi", -# "mod_simple_vhost", -# "mod_evhost", - "mod_cgi", -# "mod_compress", -# "mod_ssi", -# "mod_usertrack", -# "mod_rrdtool", -# "mod_accesslog" -) - -## a static document-root, for virtual-hosting take look at the -## server.virtual-* options -server.document-root = "/var/www/html" - -## where to send error-messages to -# server.errorlog = "" - -# files to check for if .../ is requested -server.indexfiles = ( "index.php", "index.html", - "index.htm", "default.htm" ) - -# mimetype mapping -mimetype.assign = ( - ".pdf" => "application/pdf", - ".sig" => "application/pgp-signature", - ".spl" => "application/futuresplash", - ".class" => "application/octet-stream", - ".ps" => "application/postscript", - ".torrent" => "application/x-bittorrent", - ".dvi" => "application/x-dvi", - ".gz" => "application/x-gzip", - ".pac" => "application/x-ns-proxy-autoconfig", - ".swf" => "application/x-shockwave-flash", - ".tar.gz" => "application/x-tgz", - ".tgz" => "application/x-tgz", - ".tar" => "application/x-tar", - ".zip" => "application/zip", - ".mp3" => "audio/mpeg", - ".m3u" => "audio/x-mpegurl", - ".wma" => "audio/x-ms-wma", - ".wax" => "audio/x-ms-wax", - ".ogg" => "audio/x-wav", - ".wav" => "audio/x-wav", - ".gif" => "image/gif", - ".jpg" => "image/jpeg", - ".jpeg" => "image/jpeg", - ".png" => "image/png", - ".xbm" => "image/x-xbitmap", - ".xpm" => "image/x-xpixmap", - ".xwd" => "image/x-xwindowdump", - ".css" => "text/css", - ".html" => "text/html", - ".htm" => "text/html", - ".js" => "text/javascript", - ".asc" => "text/plain", - ".c" => "text/plain", - ".conf" => "text/plain", - ".text" => "text/plain", - ".txt" => "text/plain", - ".dtd" => "text/xml", - ".xml" => "text/xml", - ".mpeg" => "video/mpeg", - ".mpg" => "video/mpeg", - ".mov" => "video/quicktime", - ".qt" => "video/quicktime", - ".avi" => "video/x-msvideo", - ".asf" => "video/x-ms-asf", - ".asx" => "video/x-ms-asf", - ".wmv" => "video/x-ms-wmv" - ) - -# Use the "Content-Type" extended attribute to obtain mime type if possible -# mimetypes.use-xattr = "enable" - -#### accesslog module -# accesslog.filename = "/www/logs/access.log" - -## deny access the file-extensions -# -# ~ is for backupfiles from vi, emacs, joe, ... -# .inc is often used for code includes which should in general not be part -# of the document-root -url.access-deny = ( "~", ".inc" ) - - - -######### Options that are good to be but not neccesary to be changed ####### - -## bind to port (default: 80) -#server.port = 81 - -## bind to localhost (default: all interfaces) -#server.bind = "grisu.home.kneschke.de" - -## error-handler for status 404 -#server.error-handler-404 = "/error-handler.html" -#server.error-handler-404 = "/error-handler.php" - - -###### virtual hosts -## -## If you want name-based virtual hosting add the next three settings and load -## mod_simple_vhost -## -## document-root = -## virtual-server-root + virtual-server-default-host + virtual-server-docroot or -## virtual-server-root + http-host + virtual-server-docroot -## -#simple-vhost.server-root = "/home/weigon/wwwroot/servers/" -#simple-vhost.default-host = "grisu.home.kneschke.de" -#simple-vhost.document-root = "/pages/" - - -## -## Format: .html -## -> ..../status-404.html for 'File not found' -#server.errorfile-prefix = "/home/weigon/projects/lighttpd/doc/status-" - -## virtual directory listings -#server.dir-listing = "enable" - -## send unhandled HTTP-header headers to error-log -#debug.dump-unknown-headers = "enable" - -### only root can use these options -# -# chroot() to directory (default: no chroot() ) -#server.chroot = "/" - -## change uid to (default: don't care) -#server.username = "wwwrun" - -## change uid to (default: don't care) -#server.groupname = "wwwrun" - -#### compress module -#compress.cache-dir = "/tmp/lighttpd/cache/compress/" -#compress.filetype = ("text/plain", "text/html") - -#### fastcgi module -## read fastcgi.txt for more info -#fastcgi.server = ( ".php" => -# ( "grisu" => -# ( -# "host" => "192.168.2.10", -# "port" => 1026 -# ) -# ) -# ) - -#### CGI module -#cgi.assign = ( ".pl" => "/usr/bin/perl", -# ".cgi" => "/usr/bin/perl" ) -# - -#### SSL engine -#ssl.engine = "enable" -#ssl.pemfile = "server.pem" - -#### status module -# status.status-url = "/server-status" -# status.config-url = "/server-config" - -#### auth module -## read authentification.txt for more info -# auth.backend = "plain" -# auth.backend.plain.userfile = "lighttpd.user" -# auth.backend.plain.groupfile = "lighttpd.group" - -# auth.backend.ldap.hostname = "localhost" -# auth.backend.ldap.base-dn = "dc=my-domain,dc=com" -# auth.backend.ldap.filter = "(uid=$)" - -# auth.require = ( "/server-status" => -# ( -# "method" => "digest", -# "realm" => "download archiv", -# "require" => "group=www|user=jan|host=192.168.2.10" -# ), -# "/server-info" => -# ( -# "method" => "digest", -# "realm" => "download archiv", -# "require" => "group=www|user=jan|host=192.168.2.10" -# ) -# ) - -#### url handling modules (rewrite, redirect, access) -# url.rewrite = ( "^/$" => "/server-status" ) -# url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" ) - -# -# define a pattern for the host url finding -# %% => % sign -# %0 => domain name + tld -# %1 => tld -# %2 => domain name without tld -# %3 => subdomain 1 name -# %4 => subdomain 2 name -# -# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/" - -#### expire module -# expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes") - -#### ssi -# ssi.extension = ( ".shtml" ) - -#### rrdtool -# rrdtool.binary = "/usr/bin/rrdtool" -# rrdtool.db-name = "/var/www/lighttpd.rrd" diff --git a/freepbx-sandbox/files/retrieve_conf.inc.php b/freepbx-sandbox/files/retrieve_conf.inc.php deleted file mode 100644 index d47bde2b..00000000 --- a/freepbx-sandbox/files/retrieve_conf.inc.php +++ /dev/null @@ -1,766 +0,0 @@ -add_critical('retrieve_conf', $type, $text, $extended_text); - } - - exit(1); -} - -function debug($text) { - global $debug; - - if ($debug) echo "[DEBUG-preDB] ".$text."\n"; -} - -function showHelp() { - out(_("Optional parameters:")); - out(_(" --help, -h, -? Show this help")); - out(_(" --debug Enable debug output")); - out(_(" --dry-run Don't actually do anything")); -} - - -// bootstrap retrieve_conf by getting the AMPWEBROOT since that is currently where the necessary -// functions.inc.php resides, and then use that parser to properly parse the file and get all -// the defaults as needed. -// -function parse_amportal_conf_bootstrap($filename) { - $file = file($filename); - foreach ($file as $line) { - if (preg_match("/^\s*([\w]+)\s*=\s*\"?([\w\/\:\.\*\%-]*)\"?\s*([;#].*)?/",$line,$matches)) { - $conf[ $matches[1] ] = $matches[2]; - } - } - if ( !isset($conf["AMPWEBROOT"]) || ($conf["AMPWEBROOT"] == "")) { - $conf["AMPWEBROOT"] = "/var/www/html"; - } else { - $conf["AMPWEBROOT"] = rtrim($conf["AMPWEBROOT"],'/'); - } - - return $conf; -} - -/** Adds a trailing slash to a directory, if it doesn't already have one - */ -function addslash($dir) { - return (($dir[ strlen($dir)-1 ] == '/') ? $dir : $dir.'/'); -} - - -/********************************************************************************************************************/ -/* DR -// **** Make sure we have STDIN etc - -// from ben-php dot net at efros dot com at php.net/install.unix.commandline -if (version_compare(phpversion(),'4.3.0','<') || !defined("STDIN")) { - define('STDIN',fopen("php://stdin","r")); - define('STDOUT',fopen("php://stdout","r")); - define('STDERR',fopen("php://stderr","r")); - register_shutdown_function( create_function( '' , 'fclose(STDIN); fclose(STDOUT); fclose(STDERR); return true;' ) ); -} - -// **** Make sure we have PEAR's DB.php, and include it - -outn(_("Checking for PEAR DB..")); -if (! @ include('DB.php')) { - out(_("FAILED")); - fatal(_("PEAR Missing"),sprintf(_("PEAR must be installed (requires DB.php). Include path: %s "), ini_get("include_path"))); -} -out(_("OK")); - - -// **** Make sure we have PEAR's GetOpts.php, and include it - -outn(_("Checking for PEAR Console::Getopt..")); -if (! @ include("Console/Getopt.php")) { - out(_("FAILED")); - fatal(_("PEAR Getopt.php Missing"),sprintf(_("PEAR must be installed (requires Console/Getopt.php). Include path: %s"), ini_get("include_path"))); -} -out(_("OK")); - - -// **** Parse out command-line options - -$shortopts = "h?u:p:"; -$longopts = array("help","debug","dry-run","run-install","amportalconf="); - -$args = Console_Getopt::getopt(Console_Getopt::readPHPArgv(), $shortopts, $longopts); -if (is_object($args)) { - // assume it's PEAR_ERROR - out($args->message); - exit(255); -} -*/ -$debug = false; -$dryrun = false; -$run_install = false; - -/* -foreach ($args[0] as $arg) { - switch ($arg[0]) { - case "--help": case "h": case "?": - showHelp(); - exit(10); - break; - case "--dry-run": - out(_("Dry-run only, no files will be written")); - $dryrun = true; - break; - case "--debug": - $debug = true; - debug(_("Debug mode enabled")); - break; - case "--run-install": - $run_install = true; - out(_("Running module install.php and install.sql scripts")); - break; - case "--amportalconf": - $amportalconf = $arg[1]; - out(sprintf(_("Using %s configuration file"), $amportalconf)); - break; - } -} - -// **** Check for amportal.conf - -outn(sprintf(_("Checking for %s "), $amportalconf)._("..")); -if (!file_exists($amportalconf)) { - fatal(_("amportal.conf access problem: "),sprintf(_("The %s file does not exist, or is inaccessible"), $amportalconf)); -} -out(_("OK")); - -// **** read amportal.conf - -outn(sprintf(_("Bootstrapping %s .."), $amportalconf)); -$amp_conf = parse_amportal_conf_bootstrap($amportalconf); -if (count($amp_conf) == 0) { - fatal(_("amportal.conf parsing failure"),sprintf(_("no entries found in %s"), $amportalconf)); -} -out(_("OK")); - -outn(sprintf(_("Parsing %s .."), $amportalconf)); -require_once($amp_conf['AMPWEBROOT']."/admin/functions.inc.php"); -$amp_conf = parse_amportal_conf($amportalconf); -if (count($amp_conf) == 0) { - fatal(_("amportal.conf parsing failure"),sprintf(_("no entries found in %s"), $amportalconf)); -} -out(_("OK")); - -$asterisk_conf_file = $amp_conf["ASTETCDIR"]."/asterisk.conf"; -outn(sprintf(_("Parsing %s .."), $asterisk_conf_file)); -$asterisk_conf = parse_asterisk_conf($asterisk_conf_file); -if (count($asterisk_conf) == 0) { - fatal(_("asterisk.conf parsing failure"),sprintf(_("no entries found in %s"), $asterisk_conf_file)); -} -out(_("OK")); - -// **** Connect to database - -outn(_("Connecting to database..")); - -# the engine to be used for the SQL queries, -# if none supplied, backfall to mysql -$db_engine = "mysql"; -if (isset($amp_conf["AMPDBENGINE"])){ - $db_engine = $amp_conf["AMPDBENGINE"]; -} -*/ - -// Define the notification class for logging to the dashboard -// -$nt = notifications::create($db); - -// **** Create symlinks array -$symlink_dirs = array(); -$symlink_dirs['sounds'] = $amp_conf['ASTVARLIBDIR'].'/sounds'; -$symlink_dirs['bin'] = $amp_conf['AMPBIN']; -$symlink_dirs['etc'] = $amp_conf['ASTETCDIR']; -$symlink_dirs['images'] = $amp_conf['AMPWEBROOT']."/admin/images"; - -/* -switch ($db_engine) -{ - case "pgsql": - case "mysql": - // datasource in in this style: - // dbengine://username:password@host/database - - $db_user = $amp_conf["AMPDBUSER"]; - $db_pass = $amp_conf["AMPDBPASS"]; - $db_host = $amp_conf["AMPDBHOST"]; - $db_name = $amp_conf["AMPDBNAME"]; - - $datasource = $db_engine.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name; - $db = DB::connect($datasource); // attempt connection - break; - - case "sqlite": - die_freepbx("SQLite2 support is deprecated. Please use sqlite3 only."); - break; - - case "sqlite3": - if (!isset($amp_conf["AMPDBFILE"])) - fatal("You must setup properly AMPDBFILE in $amportalconf"); - - if (isset($amp_conf["AMPDBFILE"]) == "") - fatal("AMPDBFILE in $amportalconf cannot be blank"); - - // on centos this extension is not loaded by default - if (! extension_loaded('sqlite3.so') ) - dl('sqlite3.so'); - - if (! @require_once('DB/sqlite3.php') ) - { - die_freepbx("Your PHP installation has no PEAR/SQLite3 support. Please install php-sqlite3 and php-pear."); - } - - require_once('DB/sqlite3.php'); - $datasource = "sqlite3:///" . $amp_conf["AMPDBFILE"] . "?mode=0666"; - $db = DB::connect($datasource); - break; - - default: - fatal( "Unknown SQL engine: [$db_engine]"); -} - -if(DB::isError($db)) { - out(_("FAILED")); - debug($db->userinfo); - fatal(_("database connection failure"),("failed trying to connect to the configured database")); - -} - -//TODO : make this engine-neutral -outn(_("Connecting to Asterisk manager interface..")); -// connect to asterisk manager -require_once($amp_conf['AMPWEBROOT'].'/admin/common/php-asmanager.php'); -$astman = new AGI_AsteriskManager(); -if (! $res = $astman->connect("127.0.0.1:".$amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"])) { - out(_("FAILED")); - fatal(_("Asterisk Manager Connection Failure"),sprintf(_("Failed to connect to the Asterisk manager through port: %s"), $amp_conf['ASTMANAGERPORT'])); -} -*/ - -//include common functions -require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); -freepbx_log("retrieve_conf", "devel-debug", "Started retrieve_conf, DB Connection OK"); - -// query for our modules -// var_dump( $db ); -$modules = module_getinfo(); - -//Putting the core module last, to move outbound-allroutes -// last in from-internals-additional -if (array_key_exists('core', $modules)) { - $core_tmp = $modules['core']; - unset($modules['core']); - $modules['core'] = $core_tmp; -} - -// include any module global functions -if(is_array($modules)){ - foreach($modules as $key => $module) { - $return['retrieve_conf'] = $return['retrieve_conf'] . $key . "\n"; - //only use this module if it's enabled (status=2) - if (isset($module['status']) && $module['status'] == MODULE_STATUS_ENABLED) { - // Make sure the module is installed and up to date - if ($run_install) module_install($key); - // active_modules array used in genConf function - $active_modules[] = $key; - //include module functions - if (is_file($amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php")) { - freepbx_log('retrieve_conf', 'devel-debug', 'Including '.$amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php"); - include_once($amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php"); - freepbx_log('retrieve_conf', 'devel-debug', $amp_conf['AMPWEBROOT']."/admin/modules/{$key}/functions.inc.php processed OK"); - } - - // create symlinks for files in appropriate sub directories - symlink_subdirs( $amp_conf['AMPWEBROOT'].'/admin/modules/'.$key ); - cp_subdirs( $amp_conf['AMPWEBROOT'].'/admin/modules/'.$key ); - } - } -} -$return['retrieve_conf'] = $return['retrieve_conf'] . $amp_conf['AMPWEBROOT']; - -// create an object of the extensions class -require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); -$ext = new extensions; - -// create objects for any module classes -// currently only 1 class can be declared per module, not sure if that will be an issue -if(isset($active_modules) && is_array($active_modules)){ - foreach($active_modules as $active_module) { - freepbx_log('retrieve_conf', 'devel-debug', "Creating ".$active_module."_conf class"); - $classname = $active_module."_conf"; - if(class_exists($classname)) { - ${$classname} = new $classname; - } - } -} - -$engineinfo = engine_getinfo(); -if($engineinfo['version'] == 0){ - freepbx_log('retrieve_conf', 'fatal', "Failed to get engine information (engine_getinfo: {$engineinfo['engine']})"); - fatal(_("Failed to get engine_info"),_("retreive_conf failed to get engine information and cannot configure up a softwitch with out it. Error: {$engineinfo['engine']}")); -} -// was setting these variables before, assume we still need them -$engine = $engineinfo['engine']; -$version = $engineinfo['version']; - -// Check for and report any extension conflicts -// - -$extens_ok = true; -$dests_ok = true; - -$nt = notifications::create($db); - -$my_hash = array_flip($active_modules); -$my_prob_extens = framework_list_extension_conflicts($my_hash); - -if (empty($my_prob_extens)) { - $nt->delete('retrieve_conf', 'XTNCONFLICT'); -} else { - $previous = null; - $str = null; - $count = 0; - foreach ($my_prob_extens as $extens) { - foreach ($extens as $exten => $details) { - if ($exten != $previous) { - $str .= "Extension: $exten:
"; - $count++; - } - $str .= sprintf("%8s: %s
",$details['status'], $details['description']); - $previous = $exten; - } - } - $nt->add_error('retrieve_conf', 'XTNCONFLICT', sprintf(_("There are %s conflicting extensions"),$count), $str); - $extens_ok = false; -} - -// Check for and report any bogus destinations -// -$my_probs = framework_list_problem_destinations($my_hash, !$amp_conf['CUSTOMASERROR']); - -if (empty($my_probs)) { - $nt->delete('retrieve_conf', 'BADDEST'); -} else { - $results = array(); - $count = 0; - $str = null; - foreach ($my_probs as $problem) { - //print_r($problem); - $results[$problem['status']][] = $problem['description']; - $count++; - } - foreach ($results as $status => $subjects) { - $str .= sprintf(_("DEST STATUS: %s%s"),$status,"\n"); - foreach ($subjects as $subject) { - //$str .= $subject."
"; - $str .= " ".$subject."\n"; - } - } - $nt->add_error('retrieve_conf', 'BADDEST', sprintf(_("There are %s bad destinations"),$count), $str); - $dests_ok = false; -} - -if ((!$exten_ok && $amp_conf['XTNCONFLICTABORT']) || (!$dest_ok && $amp_conf['BADDESTABORT'])) { - out(_("Aborting reload because extension conflicts or bad destinations")); - exit(20); -} -//$return['retrieve_conf'] = $return['retrieve_conf'] . "\n"; - -// run all of the *_get_config and _hookGet_config functions, which will populate the appropriate objects -if(isset($active_modules) && is_array($active_modules)){ - foreach($active_modules as $module) { - $funcname = $module."_get_config"; - if (function_exists($funcname)) { - freepbx_log('retrieve_conf', 'devel-debug', 'Calling '.$funcname.'()'); - $return['retrieve_conf'] = $return['retrieve_conf'] . $funcname . "\n"; - $funcname($engine); - } - } - foreach($active_modules as $module) { - $funcname = $module."_hookGet_config"; - if (function_exists($funcname)) { - freepbx_log('retrieve_conf', 'devel-debug', 'Calling '.$funcname.'()'); - $return['retrieve_conf'] = $return['retrieve_conf'] . $funcname . "\n"; - $funcname($engine); - } - } -} - -// extensions_additional.conf -// create the from-internal-additional context so other can add to it -$ext->add('from-internal-additional', 'h', '', new ext_hangup('')); -//echo $ext->get_filename(); -//echo $ext->generateConf(); -write_file($ext->get_filename(),$ext->generateConf()); - -// now we write out our conf files for modules -// check for any objects for each of the active modules -// ** conferences is an example of a module that write a conf -if(isset($active_modules) && is_array($active_modules)){ - foreach($active_modules as $active_module) { - $classname = $active_module."_conf"; - if(class_exists($classname) && get_class(${$classname}) !== false) { - //echo ${$classname}->get_filename(); - //echo ${$classname}->generateConf(); - - // if the module returns an array, it wants to write multiple files - // ** pinsets is an example of a module that does this - if (is_array(${$classname}->get_filename())) { - foreach(${$classname}->get_filename() as $modconf) { - freepbx_log('retrieve_conf', 'devel-debug', 'generateConf from '.$classname.'->'.$modconf.''); - write_file($modconf,${$classname}->generateConf($modconf)); - } - } else { - freepbx_log('retrieve_conf', 'devel-debug', 'generateConf from '.$classname); - write_file(${$classname}->get_filename(),${$classname}->generateConf()); - } - } - } -} - - -function write_file($filename,$contents) { - global $asterisk_conf; - freepbx_log('retrieve_conf', 'devel-debug', 'Writing '.$filename); - if (isset($filename) && !empty($filename)) { - if ($fd = fopen(addslash($asterisk_conf['astetcdir']).$filename, "w")) { - fwrite($fd, WARNING_BANNER ); - fwrite($fd, $contents); - fclose($fd); - } - } -} - -/* file_exists_wrapper() - * wrapper for file_exists() with the following additonal functionality. - * if the file is a symlink, it will check if the link exists and if not - * it will try to remove this file. It returns a false (file does not exists) - * if the file is successfully removed, true if not. If not a symlink, just - * returns file_exists() - */ -function file_exists_wrapper($string) { - if (is_link($string)) { - $linkinfo = readlink($string); - if ($linkinfo === false) { - //TODO: throw error? - return !unlink($string); - } else { - if (file_exists($linkinfo)) { - return true; - } else { - return !unlink($string); - } - } - } else { - return file_exists($string); - } -} - -function symlink_subdirs($moduledir) { -global $amp_conf; -$symlink_dirs = array(); -$symlink_dirs['sounds'] = $amp_conf['ASTVARLIBDIR'].'/sounds'; -$symlink_dirs['bin'] = $amp_conf['AMPBIN']; -$symlink_dirs['etc'] = $amp_conf['ASTETCDIR']; -$symlink_dirs['images'] = $amp_conf['AMPWEBROOT']."/admin/images"; - -// global $symlink_dirs; - $symlink_errors = false; - - $nt = notifications::create($db); - - foreach ($symlink_dirs as $subdir => $targetdir) { - $dir = addslash($moduledir).$subdir; - if (is_dir($dir)) { - $d = opendir($dir); - while ($file = readdir($d)) { - if ($file[0] != '.') { - $src = addslash($dir).$file; - $dest = addslash($targetdir).$file; - if (file_exists_wrapper($dest)) { - if (!is_link($dest)) { - freepbx_log('retrieve-conf', 'error', $dest.' already exists, and is not a symlink!'); - $nt->add_error('retrieve_conf', 'SYMLINK', _("symlink from modules failed"), sprintf(_("retrieve_conf failed to sym link the %s file from modules"),$dest)); - $symlink_errors = true; - } else if (readlink($dest) != $src) { - // TODO : is this the proper handling? should we just overwrite..? - freepbx_log('retrieve-conf', 'error', $dest.' already exists, and is linked to something else!'); - $nt->add_error('retrieve_conf', 'SYMLINK', _("symlink from modules failed"), sprintf(_("retrieve_conf failed to sym link the %s file from modules"),$dest)); - $symlink_errors = true; - } else { - freepbx_log('retrieve-conf', 'devel-debug', $dest.' already points to '.$src.' - OK'); - } - } else { -// // symlink, unlike copy, doesn't overwrite - have to delete first -// if (is_link($dest) || file_exists($dest)) { -// unlink($dest); -// } - if (symlink($src, $dest)) { - freepbx_log('retrieve-conf', 'devel-debug', 'Symlinked '.$src.' to '.$dest); - } else { - freepbx_log('retreive-conf', 'devel-debug', 'Cannot symlink '.$src.' to '.$dest.'. Check Permissions?'); - } - } - } - } - closedir($d); - } - } - if (!$symlink_errors) { - $nt->delete('retrieve_conf', 'SYMLINK'); - } -} - -// wrap copy with error handler -// -function err_copy($source, $dest) { - $ret = false; - set_error_handler("report_errors"); - if (copy($source, $dest)) { - $ret = chmod($dest,'0754'); - } - restore_error_handler(); - return $ret; -} - -// wrap unlink with error handler -// -function err_unlink($dest) { - set_error_handler("report_errors"); - $ret = unlink($dest); - restore_error_handler(); - return $ret; -} - -function cp_subdirs($moduledir) { - global $cp_errors; -global $amp_conf; -$cp_dirs = array(); -$cp_dirs['agi-bin'] = $amp_conf['ASTAGIDIR']; -// global $cp_dirs; - - $cp_errors = ""; - foreach ($cp_dirs as $subdir => $targetdir) { - $dir = addslash($moduledir).$subdir; - if (is_dir($dir)) { - $d = opendir($dir); - while ($file = readdir($d)) { - if ($file[0] != '.') { - $sourcefile = addslash($dir).$file; - $targetfile = addslash($targetdir).$file; - - if (file_exists_wrapper($targetfile)) { - if (is_link($targetfile)) { - if (err_unlink($targetfile)) { - freepbx_log('retrieve-conf', 'devel-debug', "$targetfile was symbolic link, unlink successful"); - } else { - freepbx_log('retrieve-conf', 'error', "$targetfile is a symblolic link, failed to unlink!"); - break; - } - } - } - // OK, now either the file is a regular file or isn't there, so proceed - // - if (err_copy($sourcefile,$targetfile)) { - freepbx_log('retrieve-conf', 'devel-debug', "$targetfile successfully copied"); - // copy was successful, make sure it has execute permissions - chmod($targetfile,0754); - } else { - freepbx_log('retrieve-conf', 'error', "$targetfile failed to copy from module directory"); - } - } - } - closedir($d); - } - } - $nt = notifications::create($db); - if ($cp_errors) { - $nt->add_error('retrieve_conf', 'CPAGIBIN', _("Failed to copy from module agi-bin"), sprintf(_("Retrieve conf failed to copy file(s) from a module's agi-bin dir: %s"),$cp_errors)); - } else { - $nt->delete('retrieve_conf', 'CPAGIBIN'); - } -} - -function report_errors($errno, $errstr, $errfile, $errline) { - global $cp_errors; - freepbx_log('retrieve-conf', 'error', "php reported: '".mysql_real_escape_string($errstr)."' after copy or unlink attempt!"); - $cp_errors .= $errstr."\n"; -} - -/** Check if there is a job running, if one is found then all is good, if one is not found, it will be added and a - * notification will be sent. - */ -function install_cron_scheduler() { - global $amp_conf; - global $nt; - - // crontab appears to return an error when no entries, os only fail if error returned AND a list of entries. - // Don't know if this will ever happen, but a failure and a list could indicate something wrong. - // - exec("/usr/bin/crontab -l", $outlines, $ret); - if ($ret && count($outlines)) { - $nt->add_error('retrieve_conf', 'CRONMGR', _("Failed to check crontab for cron manager"), sprintf(_("crontab returned %s error code when checking for crontab entries to start freepbx-cron-scheduler.php crontab manager"),$ret)); - } else { - $nt->delete('retrieve_conf', 'CRONMGR'); - $outlines2 = preg_grep("/freepbx-cron-scheduler.php/",$outlines); - $cnt = count($outlines2); - switch ($cnt) { - case 0: - /** grab any other cronjobs that are running as asterisk and NOT associated with backups - * this code was taken from the backup module for the most part. But seems to work... - */ - $outlines = array(); - exec("/usr/bin/crontab -l | grep -v ^#\ DO\ NOT | grep -v ^#\ \( | grep -v freepbx-cron-scheduler.php", $outlines, $ret); - $crontab_entry = ""; - foreach ($outlines as $line) { - $crontab_entry .= $line."\n"; - } - // schedule to run hourly, at a random time. The random time is explicit to accomodate things like module_admin online update checking - // since we will want a random access to the server. In the case of module_admin, that will also be scheduled randomly within the hour - // that it is to run - // - $crontab_entry .= rand(0,59)." * * * * ".$amp_conf['AMPBIN']."/freepbx-cron-scheduler.php"; - system("/bin/echo '$crontab_entry' | /usr/bin/crontab -"); - break; - case 1: - // already running, nothing to do - break; - default: - // error, there should never be more than one running - echo "TODO: deal with error here\n"; - $nt->add_error('retrieve_conf', 'CRONMGR', _("Multiple freepbx-cron-scheduler.php running"), sprintf(_("There were %s freepbx-cron-scheduler.php instances running. There should be only 1."),$cnt)); - } - } -} -include($amp_conf['AMPBIN']."/libfreepbx.confgen.php"); -// script to write op_server.cfg file from mysql -// -if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { - // sqlite3 not supported just yet - $script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); - exec($script); -} - -// generate configuration files -// -// Leave the legacy scripts in for a little while to help with odd-ball upgrade scenarios if they haven't gotten -// a module upgraded yet. In particular Queues -// -if (!isset($core_conf) || !is_a($core_conf, "core_conf")) { - generate_configurations_sip($version); - generate_configurations_iax($version); - generate_configurations_zap($version); -} - -// Check and install the freepbx-cron-scheduler.php manager -// -install_cron_scheduler(); -// run retrieve_conf_post_custom -// If the following file exists, it will be run. This allows customization to be run automatically after the normal -// processing. Caution should be taken using this as it is only deisgned for expert usage. Errors in the code will -// have bad consequences and can cripple the system. -// -if (isset($amp_conf['AMPLOCALBIN'])) { -$post_custom = $amp_conf['AMPLOCALBIN'].'/retrieve_conf_post_custom'; - if (file_exists($post_custom)) { - outn(sprintf(_("Found script %s, executing.."), $post_custom)); - include($post_custom); - out(_("OK")); - } -} - -out("after post"); -/* As of Asterisk 1.4.16 or there abouts, a missing #include file will make the reload fail. So - we need to make sure that we have such for everything that is in our configs. We will simply - look for the #include statements and touch the files vs. trying to inventory everything we may - need and then forgetting something. -*/ - -exec("grep '#include' ".$amp_conf['ASTETCDIR']."/*.conf | sed 's/;.*//; s/#include//'",$output,$retcode); -if ($retcode != 0) { - error("Error code $retcode: trying to search for missing #include files"); -} -foreach($output as $file) { - if (trim($file) == '') { - continue; - } - $parse1 = explode(':',$file); - $parse2 = explode(';',$parse1[1]); - $rawfile = trim($parse2[0]); - if ($rawfile == '') { - continue; - } - - $target = ($rawfile[0] == '/') ? $rawfile : $amp_conf['ASTETCDIR']."/$rawfile"; - - if (!file_exists($target)) { - exec("touch $target", $output, $retcode); - error("Error code $retcode: trying to create empty file $target"); - } -} - -// **** Set reload flag for AMP admin -needreload(); -if (isset($amp_conf["AMPWEBADDRESS"]) && $amp_conf["AMPWEBADDRESS"]) -{ - out(sprintf(_("Please update your modules and reload Asterisk by visiting %s"), "http://".$amp_conf["AMPWEBADDRESS"]."/admin")); -} -else -{ - out(_("Please update your modules and reload Asterisk by browsing to your server.")); -} - $nt->delete('retrieve_conf', 'FATAL'); -out("end\n"); -$exit_val = 0; -?> diff --git a/freepbx-sandbox/files/sqlite3.php b/freepbx-sandbox/files/sqlite3.php deleted file mode 100644 index bb4c369e..00000000 --- a/freepbx-sandbox/files/sqlite3.php +++ /dev/null @@ -1,486 +0,0 @@ - 'alter', - 'new_link' => false, - 'numrows' => 'emulate', - 'pconnect' => true, - 'prepare' => false, - 'ssl' => false, - 'transactions' => false, - ); - - - /** - * A mapping of native error codes to DB error codes - * - * {@internal Error codes according to sqlite_exec. See the online - * manual at http://sqlite.org/c_interface.html for info. - * This error handling based on sqlite_exec is not yet implemented.}} - * - * @var array - */ - var $errorcode_map = array( - ); - - /** - * The raw database connection created by PHP - * @var resource - */ - var $connection; - - /* The DSN information for connecting to a database - * @var array - */ - var $dsn = array(); - - - /** - * SQLite data types - * - * @link http://www.sqlite.org/datatypes.html - * - * @var array - */ - var $keywords = array ( - 'BLOB' => '', - 'BOOLEAN' => '', - 'CHARACTER' => '', - 'CLOB' => '', - 'FLOAT' => '', - 'INTEGER' => '', - 'KEY' => '', - 'NATIONAL' => '', - 'NUMERIC' => '', - 'NVARCHAR' => '', - 'PRIMARY' => '', - 'TEXT' => '', - 'TIMESTAMP' => '', - 'UNIQUE' => '', - 'VARCHAR' => '', - 'VARYING' => '', - ); - - /** - * The most recent error message from $php_errormsg - * @var string - * @access private - */ - var $_lasterror = ''; - - - - // }}} - // {{{ constructor - - /** - * constructor - * - * @return void - */ - - function DB_sqlite3() - { - $this->DB_common(); - } - - - // }}} - // {{{ string errorNative(void) - - /** - * Gets the DBMS' native error code produced by the last query - * - * @return mixed the DBMS' error code. A DB_Error object on failure. - */ - - function errorNative() - { - return sqlite3_error ($this->connection); - } - - // }}} - // {{{ mixed connect(array $dsn, bool $persitent) - - /** - * create or connect to the specified database. - * - * @param array $dsn the data source name - * @param bool $persitent if the connection is persitent - * - * @return DB_OK on success or DB_error object on failure - */ - - - function connect($dsn, $persitent = false) - { - $this->connection = sqlite3_open ($dsn['database']); - if (!$this->connection) - return $this->raiseError(DB_ERROR_NODBSELECTED); - - return DB_OK; - } - - // }}} - // {{{ bool disconnect (void) - - - /** - * release all resources for this connection, and close database - * - * @return bool TRUE on sucess, FALSE otherwise. - */ - - function disconnect() - { - return sqlite3_close ($this->connection); - } - - // }}} - // {{{ mixed simpleQuery(string $sql) - - /** - * execute a SQL query. - * - * @param string $query the SQL query - * - * @return mixed + object DB_error object on failure - * + object Result resource for SELECT requests - * + bool TRUE for other sucessful requests - */ - - function simpleQuery($query) - { - - $isSelect = preg_match ("/^\s*SELECT/i", $query); - - #$handle = fopen("/tmp/sql.txt",'a'); - #fwrite($handle, "sqlite3 simpleQuery: $query
\n"); - #fclose($handle); - - if (! $isSelect) - $this->result = sqlite3_exec($this->connection, $query); - else - $this->result = sqlite3_query($this->connection, $query); - - if (!$this->result) - return $this->RaiseError($this->errorNative()); - - return $this->result; - } - - // }}} - // {{{ mixed fetchInto(resource $res, array $arr, int $fetchmode [, int $rownum]) - - /** - * Fetch a row of data into an array which is passed by reference - * - * The type of array returned can be controlled either by setting this - * method's $fetchmode parameter or by changing the default - * fetch mode setFetchMode() before calling this method. - * - * There are two options for standardizing the information returned - * from databases, ensuring their values are consistent when changing - * DBMS's. These portability options can be turned on when creating a - * new DB object or by using setOption(). - * - * + DB_PORTABILITY_LOWERCASE - * convert names of fields to lower case - * - * + DB_PORTABILITY_RTRIM - * right trim the data - * - * @param resource $result the result resource - * @param array &$arr the variable where the data should be placed - * @param int $fetchmode the constant indicating how to format the data - * @param int $rownum the row number to fetch (index starts at 0) - * - * @return mixed DB_OK if a row is processed, NULL when the end of the - * result set is reached or a DB_Error object on failure - * - * @see DB_common::setOption(), DB_common::setFetchMode() - */ - - function fetchInto($result, &$arr, $fetchmode, $rownum = null) - { - if ($rownum !==NULL) - return $this->RaiseError (DB_ERROR_NOTIMPLEMENTED); - - switch ($fetchmode) - { - - case DB_FETCHMODE_ORDERED: - $fetchfunc="sqlite3_fetch"; - break; - - case DB_FETCHMODE_OBJECT: - return $this->RaiseError(DB_ERROR_NODBSELECTED); - break; - - case DB_FETCHMODE_ASSOC: - default: - $fetchfunc="sqlite3_fetch_array"; - break; - } - - $arr = $fetchfunc($result); - - if ($arr) - return DB_OK; - - return NULL; - } - - // }}} - // {{{ string modifyLimitQuery(string $query, int $from, int $count [,mixed $params]) - - - /** - * Adds LIMIT clauses to a query string according to current DBMS standards - * - * It is defined here to assure that all implementations - * have this method defined. - * - * @param string $query the query to modify - * @param int $from the row to start to fetching (0 = the first row) - * @param int $count the numbers of rows to fetch - * @param mixed $params array, string or numeric data to be used in - * execution of the statement. Quantity of items - * passed must match quantity of placeholders in - * query: meaning 1 placeholder for non-array - * parameters or 1 placeholder per array element. - * - * @return string the query string with LIMIT clauses added - * - * @access protected - */ - - function modifyLimitQuery($query, $from, $count, $params = array()) - { - return "$query LIMIT $count OFFSET $from"; - } - - - // }}} - // {{{ bool freeResult(void) - - /** - * free the specified result. - * - * @param resource $result the query resource result - * - * @return bool DB_OK - * - */ - - function freeResult($result) - { - sqlite3_query_close($result); - return DB_OK; /* always sucessful ! */ - } - - // }}} - // {{{ int affectedRow(void) - - /** - * Determines the number of rows affected by a data maniuplation query - * - * 0 is returned for queries that don't manipulate data. - * - * @return int the number of rows. A DB_Error object on failure. - */ - - function affectedRows() - { - return sqlite3_changes ($this->connection); - } - - // }}} - // {{{ mixed numCols(resource $result) - - /** - * Get the the number of columns in a result set - * - * @return int the number of columns. A DB_Error object on failure. - */ - - function numCols($result) - { - return sqlite3_column_count($result); - } - - // {{{ mixed createSequence(string $seq_name) - - /** - * Creates a new sequence - * - * The name of a given sequence is determined by passing the string - * provided in the $seq_name argument through PHP's sprintf() - * function using the value from the seqname_format option as - * the sprintf()'s format argument. - * - * seqname_format is set via setOption(). - * - * @param string $seq_name name of the new sequence - * - * @return int DB_OK on success. A DB_Error object on failure. - * - * @see DB_common::dropSequence(), DB_common::getSequenceName(), - * DB_common::nextID() - */ - - function createSequence($seq_name) - { - return $this->query ("CREATE TABLE " . $this->getSequenceName($seq_name) . " (id INTEGER PRIMARY KEY AUTOINCREMENT)"); - } - - // }}} - // {{{ mixed nextId(string $sequence [, bool $ondemand]) - - /** - * Returns the next free id in a sequence - * - * @param string $seq_name name of the sequence - * @param boolean $ondemand when true, the seqence is automatically - * created if it does not exist - * - * @return int the next id number in the sequence. - * A DB_Error object on failure. - * - * @see DB_common::createSequence(), DB_common::dropSequence(), - * DB_common::getSequenceName() - */ - function nextId($seq_name, $ondemand = true) - { - - $sqn = $this->getSequenceName($seq_name); - - if ($ondemand) - { - $tables = $this->getTables(); - if (DB::isError($tables)) return $tables; - - if (! in_array ($sqn, $tables)) - { - $res = $this->createSequence($seq_name); - if ( DB::isError($res)) - return $res; - } - } - - $res = $this->query ("INSERT INTO " . $sqn . " VALUES (NULL)"); - if (DB::isError($res)) return $res; - - return sqlite3_last_insert_rowid ($this->connection); - } - - // }}} - // {{{ mixed dropSequence (string $seq_name) - - /** - * Deletes a sequence - * - * @param string $seq_name name of the sequence to be deleted - * - * @return int DB_OK on success. A DB_Error object on failure. - * - * @see DB_common::createSequence(), DB_common::getSequenceName(), - * DB_common::nextID() - */ - function dropSequence($seq_name) - { - return $this->query("DROP TABLE ". $this->getSequenceName($seq_name)); - } - - // }}} - // {{{ string getSpecialQuery(string $type) - - /** - * Obtains the query string needed for listing a given type of objects - * - * @param string $type the kind of objects you want to retrieve - * - * @return string the SQL query string or null if the driver doesn't - * support the object type requested - * - * @access protected - * @see DB_common::getListOf() - */ - - function getSpecialQuery($type) - { - switch ($type) { - case 'tables': - return "SELECT name FROM SQLITE_MASTER ORDER BY name"; - default: - return $this->raiseError(DB_ERROR_UNSUPPORTED); - } - } - - // }}} - - -} -?> diff --git a/freepbx-sandbox/files/test.php b/freepbx-sandbox/files/test.php deleted file mode 100644 index 1d3efd3e..00000000 --- a/freepbx-sandbox/files/test.php +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/freepbx-sandbox/files/testdb.php b/freepbx-sandbox/files/testdb.php deleted file mode 100755 index c1d4f03b..00000000 --- a/freepbx-sandbox/files/testdb.php +++ /dev/null @@ -1,91 +0,0 @@ -"); -if (DB::isError ($db)) - die ("Cannot connect: " . $db->getMessage () . "\n"); -print("Disconnecting...
"); -$db->disconnect (); - -*/ - -# Basic sqlite connection ---------------------------------------- - -$options = array( - 'debug' => 4, - 'portability' => DB_PORTABILITY_NUMROWS -); - -$file = "/var/lib/asterisk/freepbx.db"; -$datasource = "sqlite3:///" . $file . "?mode=0666"; - -print("Connecting to $datasource.....
"); - -if (! extension_loaded('sqlite3') ) { - print("Loading sqlite3.so....
"); - dl('sqlite3.so'); -} - -$db = DB::connect($datasource, $options); -if (DB::isError ($db)) - die ("Cannot connect: " . $db->getMessage () . "\n"); - -$result = $db->query ("SELECT * FROM admin"); -if (DB::isError ($result)) - die ("SELECT failed: " . $result->getMessage () . "\n"); - -print("admin table rows:
"); -while ($row =& $result->fetchRow ()) - printf("  %s, %s
", $row[0], $row[1]); - -# numRows Test -------------------------------------------------- - -$numRows = $result->numRows(); - -if (DB::isError ($numRows)) - die ("numRows failed: " . $numRows->getMessage () . "
"); -print ("result contains: $numRows rows
"); - -# Try inserting a few values ----------------------------------- - -$result =& $db->query ("INSERT INTO tbl1 VALUES ('AA',30)"); - -if (DB::isError ($result)) - die ("INSERT failed: " . $result->getMessage () . "\n"); - -$result = $db->query ("SELECT * FROM tbl1"); - -if (DB::isError ($result)) - die ("SELECT failed: " . $result->getMessage () . "\n"); - -while ($row =& $result->fetchRow ()) - printf("  %s
", $row[0]); - -$result->free(); -print("Disconnecting..."); -$db->disconnect (); - -?> diff --git a/freepbx-sandbox/patch/common.patch b/freepbx-sandbox/patch/common.patch deleted file mode 100644 index 0f1a9010..00000000 --- a/freepbx-sandbox/patch/common.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- orig/common.php 2008-03-01 09:40:36.000000000 +1030 -+++ mod/common.php 2008-03-01 09:14:34.000000000 +1030 -@@ -1213,6 +1213,7 @@ - return $ret; - } else { - $this->last_parameters = array(); -+ $this->last_query = $query; - $result = $this->simpleQuery($query); - if ($result === DB_OK || DB::isError($result)) { - return $result; diff --git a/freepbx-sandbox/patch/freepbx.patch b/freepbx-sandbox/patch/freepbx.patch deleted file mode 100644 index 35b61d3e..00000000 --- a/freepbx-sandbox/patch/freepbx.patch +++ /dev/null @@ -1,364 +0,0 @@ ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/modules/core/functions.inc.php 2008-02-10 05:16:02.000000000 +1030 -+++ root/www/admin/modules/core/functions.inc.php 2008-03-11 11:31:52.000000000 +1030 -@@ -2886,6 +2886,7 @@ - // TODO: sqlite work arround - diego - // TODO: WILL NOT WORK, need to remove the usage of SUBSTRING - // need to reorder the trunks in PHP code -+/* - $sqlstr = "SELECT t.variable, t.value, d.value state FROM `globals` t "; - $sqlstr .= "JOIN (SELECT x.variable, x.value FROM globals x WHERE x.variable LIKE 'OUTDISABLE\_%') d "; - $sqlstr .= "ON substring(t.variable,5) = substring(d.variable,12) WHERE t.variable LIKE 'OUT\_%' "; -@@ -2894,9 +2895,9 @@ - $sqlstr .= "WHERE v.variable LIKE 'OUT\_%' AND concat('OUTDISABLE_',substring(v.variable,5)) NOT IN "; - $sqlstr .= " ( SELECT variable from globals WHERE variable LIKE 'OUTDISABLE\_%' ) "; - $sqlstr .= "ORDER BY variable"; -- -- //$unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll"); -- $unique_trunks = sql($sqlstr,"getAll"); -+*/ -+ $unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll"); -+ //$unique_trunks = sql($sqlstr,"getAll"); - } - else - { ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/common/db_connect.php 2007-09-09 20:41:11.000000000 +0930 -+++ root/www/admin/common/db_connect.php 2008-03-11 11:31:52.000000000 +1030 -@@ -52,7 +52,11 @@ - } - - $datasource = "sqlite3:///" . $amp_conf["AMPDBFILE"] . "?mode=0666"; -- $db = DB::connect($datasource); -+ $options = array( -+ 'debug' => 4, -+ 'portability' => DB_PORTABILITY_NUMROWS -+ ); -+ $db = DB::connect($datasource, $options); - break; - - default: -@@ -70,6 +74,7 @@ - $nt = notifications::create($db); - - if ($amp_conf['AMPDBPASS'] == $amp_conf_defaults['AMPDBPASS'][1]) { -+ print - $nt->add_warning('core', 'AMPDBPASS', _("Default SQL Password Used"), _("You are using the default SQL password that is widely known, you should set a secure password")); - } else { - $nt->delete('core', 'AMPDBPASS'); ---- freepbx-2.4.0-orig//amp_conf/htdocs/recordings/includes/database.php 2006-05-01 01:05:45.000000000 +0930 -+++ root/www/recordings/includes/database.php 2008-03-11 11:31:52.000000000 +1030 -@@ -43,18 +43,25 @@ - // connect string - if ($dbfile) { - // datasource mostly to support sqlite: dbengine://dbfile?mode=xxxx -- $dsn = $engine . '://' . $dbfile . '?mode=0666'; -+ $datasource = $engine . ':///' . $dbfile . '?mode=0666'; -+ $options = array( -+ 'debug' => 4 -+ ); -+ if (! extension_loaded('sqlite3') ) { -+ dl('sqlite3.so'); -+ } -+ - } - else { - // datasource in in this style: dbengine://username:password@host/database - $datasource = $engine . '://' . $username . ':' . $password . '@' . $host . '/' . $name; -- } - -- // options -- $options = array( -- 'debug' => 2, -- 'portability' => DB_PORTABILITY_LOWERCASE|DB_PORTABILITY_RTRIM|DB_PORTABILITY_DELETE_COUNT|DB_PORTABILITY_NUMROWS|DB_PORTABILITY_ERRORS|DB_PORTABILITY_NULL_TO_EMPTY, -- ); -+ // options -+ $options = array( -+ 'debug' => 2, -+ 'portability' => DB_PORTABILITY_LOWERCASE|DB_PORTABILITY_RTRIM|DB_PORTABILITY_DELETE_COUNT|DB_PORTABILITY_NUMROWS|DB_PORTABILITY_ERRORS|DB_PORTABILITY_NULL_TO_EMPTY, -+ ); -+ } - - // attempt connection - $dbh = DB::connect($datasource,$options); ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/cdr/lib/defines.php 2006-09-26 20:48:51.000000000 +0930 -+++ root/www/admin/cdr/lib/defines.php 2008-03-11 11:31:52.000000000 +1030 -@@ -12,7 +12,7 @@ - return $conf; - } - --$amp_conf = parse_amportal_conf("/etc/amportal.conf"); -+$amp_conf = parse_amportal_conf("/etc/amportal.conf"); - - - define ("WEBROOT", "http://".$amp_conf["AMPWEBADDRESS"]."/admin/cdr/"); -@@ -27,8 +27,8 @@ - define ("PORT", "5432"); - define ("USER", $amp_conf["AMPDBUSER"]); - define ("PASS", $amp_conf["AMPDBPASS"]); --define ("DBNAME", "asteriskcdrdb"); --define ("DB_TYPE", "mysql"); // mysql or postgres -+define ("DBNAME","/var/asteriskcdr.db"); -+define ("DB_TYPE","sqlite3"); - - - define ("DB_TABLENAME", "cdr"); -@@ -47,16 +47,36 @@ - - function DbConnect() - { -- if (DB_TYPE == "postgres") -- { -+ switch (DB_TYPE) -+ { -+ -+ case "pgsql": - $datasource = 'pgsql://'.USER.':'.PASS.'@'.HOST.'/'.DBNAME; -- } -- else -- { -+ $options = array(); -+ break; -+ -+ case "mysql": - $datasource = DB_TYPE.'://'.USER.':'.PASS.'@'.HOST.'/'.DBNAME; -- } -+ $options = array(); -+ break; -+ -+ case "sqlite3": -+ $datasource = DB_TYPE . ':///' . DBNAME . '?mode=0666'; -+ if (! extension_loaded('sqlite3') ) { -+ dl('sqlite3.so'); -+ } -+ if (! require_once('DB/sqlite3.php') ) -+ { -+ die_freepbx("Your PHP installation has no PEAR/SQLite3 support. Please install php-sqlite3 and php-pear."); -+ } -+ $options = array( -+ 'debug' => 4, -+ 'portability' => DB_PORTABILITY_NUMROWS -+ ); -+ break; -+ } - -- $db = DB::connect($datasource); // attempt connection -+ $db = DB::connect($datasource, $options); // attempt connection - - if(DB::isError($db)) - { ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/cdr/lib/Class.Table.php 2006-09-26 20:48:51.000000000 +0930 -+++ root/www/admin/cdr/lib/Class.Table.php 2008-03-11 11:31:52.000000000 +1030 -@@ -80,8 +80,11 @@ - - //$res=DbExec($link, $QUERY); - $res = $DBHandle -> query($QUERY); -+ if(DB::IsError($res)) { -+ print($res->getMessage()); -+ print("
Is Asterisk CDR database initialised?"); -+ } - -- - $num = $res -> numRows(); - - ---- freepbx-2.4.0-orig//SQL/newinstall.sqlite3.sql 2008-02-11 14:27:53.000000000 +1030 -+++ freepbx-2.4.0//SQL/newinstall.sqlite3.sql 2008-03-08 10:05:24.000000000 +1030 -@@ -323,7 +323,7 @@ - -- Dumping data for table `modules` - -- - --DROP TABLE IF EXISTS `modules_xml`; -+DROP TABLE IF EXISTS `module_xml`; - CREATE TABLE `module_xml` ( - `id` varchar(20) NOT NULL default 'xml', - `time` int(11) NOT NULL default '0', ---- freepbx-2.4.0-orig//install_amp 2008-01-28 04:22:58.000000000 +1030 -+++ freepbx-2.4.0//install_amp 2008-03-08 10:05:29.000000000 +1030 -@@ -4,7 +4,7 @@ - require_once ("libfreepbx.install.php"); - - # constants --define("AMP_CONF", "/etc/amportal.conf"); -+define("AMP_CONF", "/etc/amportal.conf"); - define("ASTERISK_CONF", "/etc/asterisk/asterisk.conf"); - define("UPGRADE_DIR", dirname(__FILE__)."/upgrades"); - define("MODULE_DIR", dirname(__FILE__)."/amp_conf/htdocs/admin/modules/"); -@@ -691,13 +691,16 @@ - // **** Look for user = root - - outn("Checking user.."); --//$current_user=(isset($_ENV["USER"]) ? $_ENV["USER"] : exec('whoami',$output)); --$euid = (posix_getpwuid(posix_geteuid())); --$current_user = $euid['name']; --if ($current_user != "root"){ -- out("FAILED"); -- fatal($argv[0]." must be run as root"); -+if (function_exists('posix_getpwuid') && function_exists('posix_geteuid')) { -+ //$current_user=(isset($_ENV["USER"]) ? $_ENV["USER"] : exec('whoami',$output)); -+ $euid = (posix_getpwuid(posix_geteuid())); -+ $current_user = $euid['name']; -+ if ($current_user != "root"){ -+ out("FAILED"); -+ fatal($argv[0]." must be run as root"); -+ } - } -+ - out("OK"); - - -@@ -892,10 +895,12 @@ - - outn("Connecting to database.."); - --$db_user = $amp_conf["AMPDBUSER"]; --$db_pass = $amp_conf["AMPDBPASS"]; --$db_host = $amp_conf["AMPDBHOST"]; - $db_engine = $amp_conf["AMPDBENGINE"]; -+if ($db_engine != "sqlite3") { -+ $db_user = $amp_conf["AMPDBUSER"]; -+ $db_pass = $amp_conf["AMPDBPASS"]; -+ $db_host = $amp_conf["AMPDBHOST"]; -+} - $db_name = $amp_conf["AMPDBNAME"]; - - // we still support older configurations, and fall back ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/modules/recordings/install.php 2007-08-08 14:34:58.000000000 +0930 -+++ freepbx-2.4.0//amp_conf/htdocs/admin/modules/recordings/install.php 2008-03-08 10:05:24.000000000 +1030 -@@ -22,7 +22,14 @@ - unset($fcc); - - // Make sure table exists --$sql = "CREATE TABLE IF NOT EXISTS recordings ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; -+ -+if ($amp_conf["AMPDBENGINE"] == 'sqlite3') { -+ $sql = "CREATE TABLE IF NOT EXISTS recordings ( `id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; -+} -+else { -+ $sql = "CREATE TABLE IF NOT EXISTS recordings ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, displayname VARCHAR(50) , filename BLOB, description VARCHAR(254));"; -+} -+ - $result = $db->query($sql); - if(DB::IsError($result)) { - die_freepbx($result->getDebugInfo()); -@@ -42,7 +49,13 @@ - $sql = "SELECT * FROM recordings where displayname = '__invalid'"; - $results = $db->getRow($sql, DB_FETCHMODE_ASSOC); - if (!isset($results['filename'])) { -- sql("INSERT INTO recordings values ('', '__invalid', 'install done', '')"); -+ if ($amp_conf["AMPDBENGINE"] == 'sqlite3') { -+ sql("INSERT INTO recordings values (NULL, '__invalid', 'install done', '')"); -+ } -+ else -+ sql("INSERT INTO recordings values ('', '__invalid', 'install done', '')"); -+ print("AFTE2\n"); -+ - $dh = opendir($recordings_directory); - while (false !== ($file = readdir($dh))) { // http://au3.php.net/readdir - if ($file[0] != "." && $file != "CVS" && $file != "svn" && !is_dir("$recordings_directory/$file")) { -@@ -59,10 +72,14 @@ - - // Upgrade to recordings 3.0 - // Change filename from VARCHAR(80) to BLOB --$sql = 'ALTER TABLE recordings CHANGE filename filename BLOB'; --$result = $db->query($sql); --if(DB::IsError($result)) { -- die_freepbx($result->getDebugInfo()); -+// Note sqlite3 doesn't support ALTER -+ -+if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { -+ $sql = 'ALTER TABLE recordings CHANGE filename filename BLOB'; -+ $result = $db->query($sql); -+ if(DB::IsError($result)) { -+ die_freepbx($result->getDebugInfo()); -+ } - } - - ?> ---- freepbx-2.4.0-orig//amp_conf/bin/retrieve_conf 2007-12-15 08:18:39.000000000 +1030 -+++ freepbx-2.4.0//amp_conf/bin/retrieve_conf 2008-03-08 10:05:28.000000000 +1030 -@@ -10,7 +10,7 @@ - - ini_set('error_reporting', E_ALL & ~E_NOTICE); - --define("AMP_CONF", "/etc/amportal.conf"); -+define("AMP_CONF", "/etc/amportal.conf"); - $amportalconf = AMP_CONF; - - //define("ASTERISK_CONF", "/etc/asterisk/asterisk.conf"); -@@ -272,8 +272,6 @@ - fatal(_("database connection failure"),("failed trying to connect to the configured database")); - - } --out(_("OK")); -- - - //TODO : make this engine-neutral - outn(_("Connecting to Asterisk manager interface..")); -@@ -284,7 +282,6 @@ - out(_("FAILED")); - fatal(_("Asterisk Manager Connection Failure"),sprintf(_("Failed to connect to the Asterisk manager through port: %s"), $amp_conf['ASTMANAGERPORT'])); - } --out(_("OK")); - - //include common functions - require_once($amp_conf['AMPWEBROOT']."/admin/extensions.class.php"); -@@ -293,7 +290,7 @@ - // query for our modules - // var_dump( $db ); - $modules = module_getinfo(); -- -+out(_("DR-BBB")); - //Putting the core module last, to move outbound-allroutes - // last in from-internals-additional - if (array_key_exists('core', $modules)) { -@@ -671,8 +668,11 @@ - - // script to write op_server.cfg file from mysql - // --$script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); --exec($script); -+if ($amp_conf["AMPDBENGINE"] != 'sqlite3') { -+ // sqlite3 not supported just yet -+ $script = $amp_conf['AMPBIN'].'/retrieve_op_conf_from_mysql.pl '.$amportalconf.' '.rtrim($asterisk_conf['astetcdir'],DIRECTORY_SEPARATOR); -+ exec($script); -+} - - // generate configuration files - // -@@ -684,10 +684,7 @@ - generate_configurations_iax($version); - generate_configurations_zap($version); - } --if (!isset($queues_conf) || !is_a($queues_conf, "queues_conf")) { -- generate_configurations_queues($version); --} -- -+ - // Check and install the freepbx-cron-scheduler.php manager - // - install_cron_scheduler(); ---- freepbx-2.4.0-orig//amp_conf/astetc/manager.conf 2006-05-01 11:39:24.000000000 +0930 -+++ freepbx-2.4.0//amp_conf/astetc/manager.conf 2008-03-08 10:05:24.000000000 +1030 -@@ -6,8 +6,8 @@ - port = 5038 - bindaddr = 0.0.0.0 - --[AMPMGRUSER] --secret = AMPMGRPASS -+[admin] -+secret = amp111 - deny=0.0.0.0/0.0.0.0 - permit=127.0.0.1/255.255.255.0 - read = system,call,log,verbose,command,agent,user ---- freepbx-2.4.0-orig//amp_conf/htdocs/admin/config.php 2007-12-02 18:06:31.000000000 +1030 -+++ root/www/admin/config.php 2008-03-11 13:22:34.000000000 +1030 -@@ -39,7 +39,9 @@ - /** AJAX handler for reload event - */ - include_once('common/json.inc.php'); -- $response = do_reload(); -+ // DR: include as global code -+ include_once('do_reload.php'); -+ //$response = do_reload(); - $json = new Services_JSON(); - echo $json->encode($response); - break;