Code cleanup in PHP files for QXZ functions
Added ADMIN_www_languages.pl script to parse all web files for QXZ phrases and populate DB table www_phrases git-svn-id: svn://192.168.202.10@2213 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
@@ -0,0 +1,431 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# ADMIN_www_languages.pl version 2.10
|
||||
#
|
||||
# This script is designed to traverse the vicidial and agc web directories and
|
||||
# generate a list of phrases that are output from the QXZ PHP functions so that
|
||||
# they can be inserted/updated in the database.
|
||||
#
|
||||
# NOTES: we used the following database query to set to UTF8:
|
||||
# ALTER DATABASE asterisk CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
# you should check your table character sets:
|
||||
# select TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_COLLATION,CREATE_OPTIONS from information_schema.`TABLES`;
|
||||
# and alter them if necessary:
|
||||
# ALTER TABLE audio_store_details CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
#
|
||||
# Copyright (C) 2014 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
|
||||
#
|
||||
# CHANGES
|
||||
# 141128-0024 - First build
|
||||
#
|
||||
|
||||
$secX = time();
|
||||
|
||||
# constants
|
||||
$SYSLOG=1; # log to a logfile
|
||||
$DB=0; # Debug flag, set to 0 for no debug messages, lots of output
|
||||
$US='_';
|
||||
$MT[0]='';
|
||||
$QXZlines=0;
|
||||
$QXZvalues=0;
|
||||
$QXZvaronly=0;
|
||||
$QXZlengthonly=0;
|
||||
$QXZplaceonly=0;
|
||||
|
||||
$secT = time();
|
||||
$now_date_epoch = $secT;
|
||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||
$year = ($year + 1900);
|
||||
$mon++;
|
||||
if ($mon < 10) {$mon = "0$mon";}
|
||||
if ($mday < 10) {$mday = "0$mday";}
|
||||
if ($hour < 10) {$hour = "0$hour";}
|
||||
if ($min < 10) {$min = "0$min";}
|
||||
if ($sec < 10) {$sec = "0$sec";}
|
||||
$file_date = "$year-$mon-$mday";
|
||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||
|
||||
# default path to astguiclient configuration file:
|
||||
$PATHconf = '/etc/astguiclient.conf';
|
||||
|
||||
|
||||
### begin parsing run-time options ###
|
||||
if (length($ARGV[0])>1)
|
||||
{
|
||||
$i=0;
|
||||
while ($#ARGV >= $i)
|
||||
{
|
||||
$args = "$args $ARGV[$i]";
|
||||
$i++;
|
||||
}
|
||||
|
||||
if ($args =~ /--help/i)
|
||||
{
|
||||
print "QXZanalyzer.pl - analyze php scripts for QXZ functions and contents\n";
|
||||
print "\n";
|
||||
print "options:\n";
|
||||
print " [--help] = this help screen\n";
|
||||
print " [--debug] = verbose debug messages\n";
|
||||
print " [--debugX] = extra verbose debug messages\n";
|
||||
print " [--agc-only] = only parse the agc directory\n";
|
||||
print " [--vicidial-only] = only parse the vicidial directory\n";
|
||||
print " [--QXZlines] = print full lines that include QXZ functions\n";
|
||||
print " [--QXZvalues] = print only QXZ function values\n";
|
||||
print " [--QXZvaronly] = print only QXZ function values with PHP variables in them\n";
|
||||
print " [--QXZlengthonly] = print only QXZ function values that include a length spec\n";
|
||||
print " [--QXZplaceonly] = print only QXZ function values with placeholder variables in them\n";
|
||||
print " [--conffile=/path/from/root] = define astguiclient.conf config file to use\n";
|
||||
print "\n";
|
||||
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($args =~ /--debug/i) # Debug flag
|
||||
{$DB=1;}
|
||||
if ($args =~ /--debugX/i) # Extra Debug flag
|
||||
{$DBX=1;}
|
||||
if ($args =~ /--agc-only/i) # agc flag
|
||||
{$agc_only=1;}
|
||||
if ($args =~ /--vicidial-only/i) # vicidial flag
|
||||
{$vicidial_only=1;}
|
||||
if ($args =~ /--QXZlines/i) # QXZlines flag
|
||||
{$QXZlines=1;}
|
||||
if ($args =~ /--QXZvalues/i) # QXZvalues flag
|
||||
{$QXZvalues=1;}
|
||||
if ($args =~ /--QXZvaronly/i) # QXZvaronly flag
|
||||
{$QXZvaronly=1;}
|
||||
if ($args =~ /--QXZlengthonly/i) # QXZlengthonly flag
|
||||
{$QXZlengthonly=1;}
|
||||
if ($args =~ /--QXZplaceonly/i) # QXZplaceonly flag
|
||||
{$QXZplaceonly=1;}
|
||||
if ($args =~ /--conffile=/i) # CLI defined file path
|
||||
{
|
||||
@CLIconffileARY = split(/--conffile=/,$args);
|
||||
@CLIconffileARX = split(/ /,$CLIconffileARY[1]);
|
||||
if (length($CLIconffileARX[0])>2)
|
||||
{
|
||||
$PATHconf = $CLIconffileARX[0];
|
||||
$PATHconf =~ s/\/$| |\r|\n|\t//gi;
|
||||
print " CLI defined conffile path: $PATHconf\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print "no command line options set, exiting\n";
|
||||
exit;
|
||||
}
|
||||
### end parsing run-time options ###
|
||||
|
||||
|
||||
open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n";
|
||||
@conf = <conf>;
|
||||
close(conf);
|
||||
$i=0;
|
||||
foreach(@conf)
|
||||
{
|
||||
$line = $conf[$i];
|
||||
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
|
||||
if ( ($line =~ /^PATHhome/) && ($CLIhome < 1) )
|
||||
{$PATHhome = $line; $PATHhome =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHlogs/) && ($CLIlogs < 1) )
|
||||
{$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHagi/) && ($CLIagi < 1) )
|
||||
{$PATHagi = $line; $PATHagi =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHweb/) && ($CLIweb < 1) )
|
||||
{$PATHweb = $line; $PATHweb =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHsounds/) && ($CLIsounds < 1) )
|
||||
{$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHmonitor/) && ($CLImonitor < 1) )
|
||||
{$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARserver_ip/) && ($CLIserver_ip < 1) )
|
||||
{$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) )
|
||||
{$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) )
|
||||
{$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) )
|
||||
{$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) )
|
||||
{$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) )
|
||||
{$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;}
|
||||
$i++;
|
||||
}
|
||||
|
||||
if (!$VASLOGfile) {$VASLOGfile = "$PATHlogs/wwwlang.$year-$mon-$mday";}
|
||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||
|
||||
use DBI;
|
||||
|
||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||
or die "Couldn't connect to database: " . DBI->errstr;
|
||||
|
||||
|
||||
### Grab Server values from the database
|
||||
$stmtA = "SELECT count(*) FROM www_phrases;";
|
||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArows=$sthA->rows;
|
||||
if ($sthArows > 0)
|
||||
{
|
||||
@aryA = $sthA->fetchrow_array;
|
||||
$phrase_count = $aryA[0];
|
||||
}
|
||||
$sthA->finish();
|
||||
|
||||
$event_string = "Existing phrases: $phrase_count";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
|
||||
|
||||
$i=0;
|
||||
$f=0;
|
||||
if ($vicidial_only < 1)
|
||||
{
|
||||
opendir(FILE, "$PATHweb/agc/");
|
||||
@agcFILES = readdir(FILE);
|
||||
### Loop through files first to gather list
|
||||
foreach(@agcFILES)
|
||||
{
|
||||
$FILEparseDIR[$f] = "$PATHweb/agc/";
|
||||
$FILEparseNAME[$f] = '';
|
||||
$FILEparse[$f] = '';
|
||||
if ( (length($agcFILES[$i]) > 2) && (!-d "$PATHweb/agc/$agcFILES[$i]") )
|
||||
{
|
||||
$FILEparse[$f] = "$PATHweb/agc/$agcFILES[$i]";
|
||||
$FILEparseNAME[$f] = $agcFILES[$i];
|
||||
$event_string = "$PATHweb/agc/$agcFILES[$i] $FILEparseNAME[$f]";
|
||||
if ($DBX > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
$f++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$i=0;
|
||||
if ($agc_only < 1)
|
||||
{
|
||||
opendir(FILE, "$PATHweb/vicidial/");
|
||||
@vicidialFILES = readdir(FILE);
|
||||
|
||||
### Loop through files first to gather list
|
||||
foreach(@vicidialFILES)
|
||||
{
|
||||
$FILEparseDIR[$f] = "$PATHweb/vicidial/";
|
||||
$FILEparseNAME[$f] = '';
|
||||
$FILEparse[$f] = '';
|
||||
if ( (length($vicidialFILES[$i]) > 2) && (!-d "$PATHweb/vicidial/$vicidialFILES[$i]") )
|
||||
{
|
||||
$FILEparse[$f] = "$PATHweb/vicidial/$vicidialFILES[$i]";
|
||||
$FILEparseNAME[$f] = $vicidialFILES[$i];
|
||||
$event_string = "$PATHweb/vicidial/$vicidialFILES[$i] $FILEparseNAME[$f]";
|
||||
if ($DBX > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
$f++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$event_string = "Files: $i $f";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$QXZlinecount=0;
|
||||
$QXZcount=0;
|
||||
$QXZcount_length=0;
|
||||
$QXZcount_var=0;
|
||||
$QXZcount_place=0;
|
||||
$QXZcount_var_ct=0;
|
||||
$QXZcount_place_ct=0;
|
||||
$QXZinserts=0;
|
||||
$QXZdups=0;
|
||||
|
||||
$f=0;
|
||||
foreach(@FILEparse)
|
||||
{
|
||||
if (-e "$FILEparse[$f]")
|
||||
{
|
||||
$event_string = "file found at: $FILEparse[$f] $FILEparseNAME[$f]\n";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
|
||||
open(conf, "$FILEparse[$f]") || die "can't open $FILEparse[$f]: $!\n";
|
||||
@conf = <conf>;
|
||||
close(conf);
|
||||
$i=0;
|
||||
foreach(@conf)
|
||||
{
|
||||
$line = $conf[$i];
|
||||
$line =~ s/\n|\r|\t//gi;
|
||||
|
||||
if ( ($line =~ /\_QXZ\(/) && ($line !~ /function \_QXZ/) )
|
||||
{
|
||||
$QXZlinecount++;
|
||||
$QXZ_in_line = () = $line =~ /\_QXZ\(/g;
|
||||
$QXZcount = ($QXZcount + $QXZ_in_line);
|
||||
@eachQXZ = split(/\_QXZ\(/,$line);
|
||||
$each_ct=0;
|
||||
while ($each_ct <= $#eachQXZ)
|
||||
{
|
||||
if ($each_ct > 0)
|
||||
{
|
||||
@eachQXZvalue = split(/\)/,$eachQXZ[$each_ct]);
|
||||
if ( ($eachQXZvalue[0] =~ /\(/) && (length($eachQXZvalue[1])>0) )
|
||||
{
|
||||
$temp_QXZval_str = $eachQXZvalue[0].")".$eachQXZvalue[1];
|
||||
if ( ($eachQXZvalue[1] =~ /\(/) && (length($eachQXZvalue[2])>0) )
|
||||
{
|
||||
$temp_QXZval_str .= ")".$eachQXZvalue[2];
|
||||
if ( ($eachQXZvalue[2] =~ /\(/) && (length($eachQXZvalue[3])>0) )
|
||||
{
|
||||
$temp_QXZval_str .= ")".$eachQXZvalue[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$temp_QXZval_str = $eachQXZvalue[0];
|
||||
}
|
||||
if ( ($QXZvalues > 0) && ($QXZvaronly < 1) && ($QXZlengthonly < 1) && ($QXZplaceonly < 1) )
|
||||
{
|
||||
$event_string = "$temp_QXZval_str";
|
||||
print "$event_string\n";
|
||||
&event_logger;
|
||||
}
|
||||
if ($temp_QXZval_str =~ /,\d|, \d/)
|
||||
{
|
||||
$QXZcount_length++;
|
||||
if ($QXZlengthonly > 0)
|
||||
{
|
||||
$event_string = "$temp_QXZval_str";
|
||||
print "$event_string\n";
|
||||
&event_logger;
|
||||
}
|
||||
}
|
||||
if ($temp_QXZval_str =~ /\$/)
|
||||
{
|
||||
$QXZcount_var++;
|
||||
$var_ct_in_line = () = $temp_QXZval_str =~ /\$/g;
|
||||
$QXZcount_var_ct = ($QXZcount_var_ct + $var_ct_in_line);
|
||||
if ($QXZvaronly > 0)
|
||||
{
|
||||
$event_string = "$temp_QXZval_str";
|
||||
print "$event_string\n";
|
||||
&event_logger;
|
||||
}
|
||||
}
|
||||
if ($temp_QXZval_str =~ /%\ds/)
|
||||
{
|
||||
$QXZcount_place++;
|
||||
$place_ct_in_line = () = $temp_QXZval_str =~ /\$/g;
|
||||
$QXZcount_place_ct = ($QXZcount_place_ct + $place_ct_in_line);
|
||||
if ($QXZplaceonly > 0)
|
||||
{
|
||||
$event_string = "$temp_QXZval_str";
|
||||
print "$event_string\n";
|
||||
&event_logger;
|
||||
}
|
||||
}
|
||||
$temp_QXZval_strSQL = $temp_QXZval_str;
|
||||
$temp_QXZval_strSQL =~ s/\"$|^\"|^\'|\'$//gi;
|
||||
$temp_QXZval_strSQL =~ s/\",.*|\',.*//gi;
|
||||
|
||||
$phrase_match=0;
|
||||
$stmtA = "SELECT count(*) FROM www_phrases where phrase_text='$temp_QXZval_strSQL';";
|
||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArows=$sthA->rows;
|
||||
if ($sthArows > 0)
|
||||
{
|
||||
@aryA = $sthA->fetchrow_array;
|
||||
$phrase_match = $aryA[0];
|
||||
}
|
||||
$sthA->finish();
|
||||
|
||||
if ($phrase_match < 1)
|
||||
{
|
||||
$stmtA="INSERT INTO www_phrases SET phrase_text='$temp_QXZval_strSQL',php_filename='$FILEparseNAME[$f]',php_directory='$FILEparseDIR[$f]',source='www_languages_script';";
|
||||
$affected_rows = $dbhA->do($stmtA);
|
||||
$QXZinserts++;
|
||||
|
||||
$event_string = " $affected_rows|$stmtA|";
|
||||
if ($DBX > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
}
|
||||
else
|
||||
{$QXZdups++;}
|
||||
}
|
||||
$each_ct++;
|
||||
}
|
||||
|
||||
if ($QXZlines > 0)
|
||||
{
|
||||
$event_string = "$i|$QXZlinecount|$QXZ_in_line|$line";
|
||||
print "$event_string\n";
|
||||
&event_logger;
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$event_string = "File does not exist: $FILEparse[$f] $FILEparseNAME[$f]";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
}
|
||||
$f++;
|
||||
}
|
||||
|
||||
|
||||
$event_string = "\n";
|
||||
$event_string .= "FILE PARSING FINISHED!\n";
|
||||
$event_string .= "Files parsed: $f\n";
|
||||
$event_string .= "ConfFile: $PATHconf\n";
|
||||
$event_string .= "QXZ line count: $QXZlinecount\n";
|
||||
$event_string .= "QXZ count: $QXZcount\n";
|
||||
$event_string .= "QXZ with length set: $QXZcount_length\n";
|
||||
$event_string .= "QXZ with PHP vars: $QXZcount_var\n";
|
||||
$event_string .= "QXZ with var place set: $QXZcount_place\n";
|
||||
$event_string .= "QXZ with PHP vars inst: $QXZcount_var_ct\n";
|
||||
$event_string .= "QXZ with var place inst: $QXZcount_place_ct\n";
|
||||
$event_string .= "\n";
|
||||
$event_string .= "QXZ DB inserts: $QXZinserts\n";
|
||||
$event_string .= "QXZ DB dups: $QXZdups\n";
|
||||
$event_string .= "\n";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
|
||||
$secy = time(); $secz = ($secy - $secX); $minz = ($secz/60); # calculate script runtime so far
|
||||
$event_string = "\n - process runtime ($secz sec) ($minz minutes)";
|
||||
if ($DB > 0) {print "$event_string\n";}
|
||||
&event_logger;
|
||||
|
||||
|
||||
exit;
|
||||
|
||||
|
||||
|
||||
|
||||
sub event_logger
|
||||
{
|
||||
if ($SYSLOG)
|
||||
{
|
||||
### open the log file for writing ###
|
||||
open(Lout, ">>$VASLOGfile")
|
||||
|| die "Can't open $VASLOGfile: $!\n";
|
||||
print Lout "$now_date|$event_string|\n";
|
||||
close(Lout);
|
||||
}
|
||||
$event_string='';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user