From 0e7eb94a6f6a88801312b960837cbdd28a0299f6 Mon Sep 17 00:00:00 2001 From: mattf Date: Thu, 17 Jan 2008 09:38:18 +0000 Subject: [PATCH] added ability for agents to change in-groups in CLOSER-type campaigns without logging out updated docs started work on adding a QC feature to the admin.php script git-svn-id: svn://192.168.202.10@770 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi | 7 +- .../trunk/bin/AST_DB_lead_status_change.pl | 111 +++++++++++ agc_2-X/trunk/docs/BASE_INSTALL.txt | 11 +- agc_2-X/trunk/docs/INBOUND-CLOSER_PROCESS.txt | 2 +- agc_2-X/trunk/docs/LOAD_BALANCING.txt | 1 + agc_2-X/trunk/docs/QC_PROCESS.txt | 178 ++++++++++++++++++ agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt | 4 +- agc_2-X/trunk/docs/SCRATCH_INSTALL.txt | 13 +- .../trunk/docs/conf_examples/iax.conf.sample | 26 +++ .../trunk/extras/MySQL_AST_CREATE_tables.sql | 43 ++++- agc_2-X/trunk/extras/upgrade_2.0.5.sql | 43 +++++ .../TO_BE_TRANSLATED_2.0.5.txt | 40 ++++ agc_2-X/trunk/www/agc/vdc_db_query.php | 19 +- agc_2-X/trunk/www/agc/vicidial.php | 30 ++- agc_2-X/trunk/www/vicidial/admin.php | 163 ++++++++++++++-- agc_2-X/trunk/www/vicidial/dbconnect.php | 1 + agc_2-X/trunk/www/vicidial/user_stats.php | 36 +++- 17 files changed, 686 insertions(+), 42 deletions(-) create mode 100644 agc_2-X/trunk/bin/AST_DB_lead_status_change.pl create mode 100644 agc_2-X/trunk/docs/QC_PROCESS.txt create mode 100644 agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt diff --git a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi index a4acff86..2b0bc436 100644 --- a/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi +++ b/agc_2-X/trunk/agi/agi-VDAD_ALL_inbound.agi @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# agi-VDAD_ALL_inbound.agi version 2.0.4 *DBI-version* +# agi-VDAD_ALL_inbound.agi version 2.0.5 *DBI-version* # # runs when a call comes in from an inbound call. This script will # send the calls out to the closers that are logged in. @@ -40,7 +40,7 @@ #exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----INB-----7274515134-----Closer-----park----------999-----1-----OUTB) #exten => 1234,3,Hangup # -# Copyright (C) 2007 Matt Florell LICENSE: GPLv2 +# Copyright (C) 2008 Matt Florell LICENSE: GPLv2 # # changes: # 70828-0924 - First Build @@ -1408,7 +1408,7 @@ sub trigger_transfer_process # $BEGIN='BEGIN'; # # $CLI = "/usr/bin/date >> $PRSTESTfile &"; -# $CLI = "/root/phone.pl $insert_lead_id$DS$insert_close_id$DS$CLInow_date$DS$VDADextension$DS$phone_number$DS$DS$BEGIN$DS >> $PRSTESTfile &"; +# $CLI = "/root/phone.pl $insert_lead_id$DS$insert_close_id$DS$CLInow_date$DS$VDADuser$DS$phone_number$DS$DS$BEGIN$DS >> $PRSTESTfile &"; # # `$CLI`; # @@ -1420,5 +1420,4 @@ sub trigger_transfer_process # print Pout "$now_date|$VDADconf_exten|$VDADuser|$VDADextension|$insert_lead_id|$phone_number|$insert_close_id|$channel_group|$drop_timer|$CLI|\n"; # close(Pout); # } -# } diff --git a/agc_2-X/trunk/bin/AST_DB_lead_status_change.pl b/agc_2-X/trunk/bin/AST_DB_lead_status_change.pl new file mode 100644 index 00000000..7b49e23d --- /dev/null +++ b/agc_2-X/trunk/bin/AST_DB_lead_status_change.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl +# +# AST_DB_lead_status_change.pl version 2.0.5 *DBI-version* +# +# DESCRIPTION: +# OPTIONAL!!! CUSTOMIZE THIS SCRIPT FIRST!!! +# - changes status of leads as crontab script +# +# Copyright (C) 2008 Matt Florell LICENSE: GPLv2 +# +# CHANGES +# 80114-1150 - first build +# + +### 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 "allowed run time options:\n [-t] = test\n [-debug] = verbose debug messages\n\n"; + } + else + { + if ($args =~ /-debug/i) + { + $DB=1; # Debug flag, set to 0 for no debug messages, On an active system this will generate hundreds of lines of output per minute + } + if ($args =~ /-t/i) + { + $TEST=1; + $T=1; + } + } +} +else +{ +print "no command line options set\n"; + $loop_delay = '2500'; + $DB=1; +} +### end parsing run-time options ### + + +# default path to astguiclient configuration file: +$PATHconf = '/etc/astguiclient.conf'; + +open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n"; +@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++; + } + +# Customized Variables +$server_ip = $VARserver_ip; # Asterisk server IP + +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; + +##### change Pacific Mountain + +$stmtA = "UPDATE vicidial_list set status='NEW' where status='NA' and called_count IN('1','2');"; + if($DB){print STDERR "\n|$stmtA|\n";} + if (!$T) { + $affected_rows = $dbhA->do($stmtA); + if($DB){print STDERR "\n|$affected_rows records changed|\n";} + } + +$dbhA->disconnect(); + +exit; + diff --git a/agc_2-X/trunk/docs/BASE_INSTALL.txt b/agc_2-X/trunk/docs/BASE_INSTALL.txt index 03f00071..4b7b2ae8 100644 --- a/agc_2-X/trunk/docs/BASE_INSTALL.txt +++ b/agc_2-X/trunk/docs/BASE_INSTALL.txt @@ -91,7 +91,7 @@ cd ../asterisk-1.2.24 *OPTIONAL*(1.2.14 thru 1.2.24) rewrite of waitforsilence wget http://www.eflo.net/files/app_waitforsilence.c - mv app_waitforsilence.c apps/app_waitforsilence.c + mv -f app_waitforsilence.c apps/app_waitforsilence.c *OPTIONAL* shorter enter and leave sounds for meetme wget http://www.eflo.net/files/enter.h @@ -550,8 +550,13 @@ PHASE 5: ADDING STARTUP ENTRIES FOR ASTGUICLIENT/VICIDIAL SCRIPTS - vi /etc/rc.d/rc.local - add the following entries(here's what we used): -### Path to local asterisk-perl_0.08 module if needed -PERL5LIB="/usr/share/astguiclient/libs"; export PERL5LIB +# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring) +# /usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2 + +# Disable console blanking and powersaving +/usr/bin/setterm -blank +/usr/bin/setterm -powersave off +/usr/bin/setterm -powerdown ### start time server /usr/local/bin/ntpdate -u 18.145.0.30 diff --git a/agc_2-X/trunk/docs/INBOUND-CLOSER_PROCESS.txt b/agc_2-X/trunk/docs/INBOUND-CLOSER_PROCESS.txt index bbc9ac92..1090ff4d 100644 --- a/agc_2-X/trunk/docs/INBOUND-CLOSER_PROCESS.txt +++ b/agc_2-X/trunk/docs/INBOUND-CLOSER_PROCESS.txt @@ -1,4 +1,4 @@ -INOUND/CLOSER proces flow 2007-05-02 +INBOUND/CLOSER process flow 2007-05-02 ** THIS FULLY REDONE INBOUND-CLOSER PROSESS IS PLANNED FOR THE 2.0.4 RELEASE ** diff --git a/agc_2-X/trunk/docs/LOAD_BALANCING.txt b/agc_2-X/trunk/docs/LOAD_BALANCING.txt index e1ea0567..af7fc897 100644 --- a/agc_2-X/trunk/docs/LOAD_BALANCING.txt +++ b/agc_2-X/trunk/docs/LOAD_BALANCING.txt @@ -38,6 +38,7 @@ NOTE: at the bottom of this document are conf examples for a 3 server load balan # 6 - FastAGI_log # 7 - AST_VDauto_dial_FILL (only for multi-server, this must only be on one server) +(NOTE: the install.pl script now has an option to generate the following settings and print them out to the screen so that you do not have to manually build them. ./install.pl --build_multiserver_conf) 3. The two servers need to be registered to each other as IAX2 friends: SERVER ONE(ASTtest1-10.10.10.15) iax.conf: diff --git a/agc_2-X/trunk/docs/QC_PROCESS.txt b/agc_2-X/trunk/docs/QC_PROCESS.txt new file mode 100644 index 00000000..31f8f7b9 --- /dev/null +++ b/agc_2-X/trunk/docs/QC_PROCESS.txt @@ -0,0 +1,178 @@ +QC(Quality Control) process flow 2008-01-03 + +** THIS QC FUNCTIONALITY PROSESS IS PLANNED FOR THE 2.0.5 RELEASE ** + +This will outline the process I have thought through for adding a Quality Assurance(QA) or Quality Control(QC) process to the VICIDIAL system. The objective is to add the following features to make VICIDIAL a more well-rounded product: +- ability to define which statuses/lists are to be able to be QCd per campaign +- ability to give agents permission to QC records for their allowable campaigns +- ability to log all access and changes to QCd records +- creation of some basic reports on QC activity + + + + +The QC agent will login to a new qc.php screen within the agc web directory. They will then have a screen very similar to the vicidial.php login screen(but in a different color) that will have a user/pass to fill in. Then when they login they will see a green screen similar to the vicidial.php inbound(CLOSER-type) screen that will show them their allowable qc in-groups and campaigns. The agent will then choose which in-groups and campaigns that they want to QC the records for and then they will submit and they will be logged-in to the QC system. + +Upon login, they will be able to see the count of QC-able records and they can click on a link to bring up the next record to be QCd. + +Each qc_user_level will have different permissions for the qc system: +1- modify nothing +2- modify nothing but status +3- modify everything +4- can check records of other QC agents +5- can view stats on qc system +6- can view finished and non-committed records and alter them +7- Manager level + +The qc_stage is a status within QC that tells what is going on with the record: +NONE - record has never been QCd +LOCK_1 - a QC agent is reviewing the record +PASS - QC agent has passed the record +LOCK_2 - a QC agent is reviewing the record for possible finishing +FINISH - record is ready to be processed +COMMIT - QC record is committed to the system and cannot be modified by anyone + + +The Database Changes: + +# This table contains the updated QC record + CREATE TABLE qc_vicidial_list ( +qc_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, +lead_id INT(9) UNSIGNED NOT NULL, +vicidial_log_id INT(9) UNSIGNED NOT NULL, +closecallid INT(9) UNSIGNED NOT NULL, +modify_date TIMESTAMP, +status VARCHAR(6), +qc_status VARCHAR(6), +qc_date DATETIME, +qc_length_in_sec SMALLINT(5) UNSIGNED default '0', +qc_verify_date DATETIME, +qc_verify_length_in_sec SMALLINT(5) UNSIGNED default '0', +qc_comments TEXT, +qc_stage VARCHAR(6), +qc_user VARCHAR(20), +qc_verify_user VARCHAR(20), +qc_code VARCHAR(8), +qc_changed ENUM('0','1') default '0', +user VARCHAR(20), +closer VARCHAR(20), +vendor_lead_code VARCHAR(20), +source_id VARCHAR(6), +list_id BIGINT(14) UNSIGNED, +phone_code VARCHAR(10), +phone_number VARCHAR(12), +title VARCHAR(4), +first_name VARCHAR(30), +middle_initial VARCHAR(1), +last_name VARCHAR(30), +address1 VARCHAR(100), +address2 VARCHAR(100), +address3 VARCHAR(100), +city VARCHAR(50), +state VARCHAR(2), +province VARCHAR(50), +postal_code VARCHAR(10), +country_code VARCHAR(3), +gender ENUM('M','F'), +date_of_birth DATE, +alt_phone VARCHAR(12), +email VARCHAR(70), +security_phrase VARCHAR(100), +comments VARCHAR(255), +index (phone_number), +index (lead_id), +index (status), +index (qc_stage) +); + +# This table contains the original lead information before changes + CREATE TABLE qc_vicidial_list_original ( +qc_id INT(9) UNSIGNED PRIMARY KEY NOT NULL, +modify_date TIMESTAMP, +status VARCHAR(6), +qc_date DATETIME, +qc_user VARCHAR(20), +qc_stage VARCHAR(6), +user VARCHAR(20), +closer VARCHAR(20), +vendor_lead_code VARCHAR(20), +source_id VARCHAR(6), +list_id BIGINT(14) UNSIGNED, +phone_code VARCHAR(10), +phone_number VARCHAR(12), +title VARCHAR(4), +first_name VARCHAR(30), +middle_initial VARCHAR(1), +last_name VARCHAR(30), +address1 VARCHAR(100), +address2 VARCHAR(100), +address3 VARCHAR(100), +city VARCHAR(50), +state VARCHAR(2), +province VARCHAR(50), +postal_code VARCHAR(10), +country_code VARCHAR(3), +gender ENUM('M','F'), +date_of_birth DATE, +alt_phone VARCHAR(12), +email VARCHAR(70), +security_phrase VARCHAR(100), +comments VARCHAR(255), +); + +# This table contains the session information for qc_agents + CREATE TABLE qc_agent_sessions ( +qc_session_id INT(9) UNSIGNED PRIMARY KEY NOT NULL, +user VARCHAR(20), +qc_user_level INT(2) default '0', +status ENUM('READY','QUEUE','INCALL','PAUSED','CLOSER') default 'PAUSED', +qc_id INT(9) UNSIGNED NOT NULL, +lead_id INT(9) UNSIGNED NOT NULL, +selected_inbound_groups TEXT, +selected_campaigns TEXT, +qc_records_today SMALLINT(5) UNSIGNED default '0', +login_time DATETIME, +last_action_time DATETIME, +index(user), +index (last_action_time) +); + +# For ability to restrict statuses by user_level per campaign + CREATE TABLE qc_allowed_statuses ( +status VARCHAR(6) PRIMARY KEY NOT NULL, +qc_user_level INT(2) default '0', +campaign_group_id VARCHAR(20) +); + +# qc codes to be used for statistics + CREATE TABLE qc_codes ( +code VARCHAR(8) PRIMARY KEY NOT NULL, +code_name VARCHAR(30) +); + +# For the log table, some fields will need to be added to the vicidial_log table: +ALTER TABLE vicidial_log ADD qc_stage ENUM('NONE','LOCK_1','PASS','LOCK_2','FINISH',COMMIT') default 'NONE'; + +# For the closer log table, some fields will need to be added to the vicidial_closer_log table: +ALTER TABLE vicidial_closer_log ADD qc_stage ENUM('NONE','LOCK_1','PASS','LOCK_2','FINISH',COMMIT') default 'NONE'; + +# For the campaigns log table, some fields will need to be added to the vicidial_campaigns table: +ALTER TABLE vicidial_campaigns ADD qc_statuses TEXT; +ALTER TABLE vicidial_campaigns ADD qc_lists TEXT; +ALTER TABLE vicidial_campaigns ADD campaign_shift_start_time VARCHAR(4) default '0900'; +ALTER TABLE vicidial_campaigns ADD campaign_shift_length VARCHAR(5) default '16:00'; +ALTER TABLE vicidial_campaigns ADD campaign_day_start_time VARCHAR(4) default '0100'; + + + + +# For the in-groups/campaigns QC permissions, some fields will need to be added to the vicidial_user_groups table: +ALTER TABLE vicidial_user_groups ADD qc_allowed_campaigns TEXT; +ALTER TABLE vicidial_user_groups ADD qc_allowed_inbound_groups TEXT; + +# For the user QC permissions, some fields will need to be added to the vicidial_users table: +ALTER TABLE vicidial_users ADD qc_enabled ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_user_level INT(2) default '1'; +ALTER TABLE vicidial_users ADD qc_pass ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_finish ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_commit ENUM('1','0') default '0'; diff --git a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt index 5ec95dda..df257830 100644 --- a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt +++ b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt @@ -27,7 +27,7 @@ chown -R root /usr/local/mysql chown -R mysql /usr/local/mysql/var chgrp -R mysql /usr/local/mysql cp support-files/my-medium.cnf /etc/my.cnf -/usr/local/mysql/bin/mysqld_safe --user=mysql & +/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & ln -s /tmp/mysql.sock /var/run/mysql/mysql.sock @@ -354,7 +354,7 @@ patch -p1 < ./cli_chan_concise_delimiter.patch wget http://www.eflo.net/files/app_waitforsilence.c -mv app_waitforsilence.c apps/app_waitforsilence.c +mv -f app_waitforsilence.c apps/app_waitforsilence.c wget http://www.eflo.net/files/enter.h wget http://www.eflo.net/files/leave.h mv -f enter.h apps/enter.h diff --git a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt index 5eb2ee3a..c887e78b 100644 --- a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt +++ b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt @@ -381,7 +381,7 @@ NOTE: a minimum of MySQL server 4.0.X is required - chown -R mysql /usr/local/mysql/var - chgrp -R mysql /usr/local/mysql - cp support-files/my-medium.cnf /etc/my.cnf - - /usr/local/mysql/bin/mysqld_safe --user=mysql & + - /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache & - ln -s /tmp/mysql.sock /var/run/mysql/mysql.sock **** For some systems you may need to add the mysql/bin directory to your PATH: - PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ @@ -925,7 +925,7 @@ with the following patch: *OPTIONAL*(1.2.14 thru 1.2.24) rewrite of waitforsilence - wget http://www.eflo.net/files/app_waitforsilence.c - - mv app_waitforsilence.c apps/app_waitforsilence.c + - mv -f app_waitforsilence.c apps/app_waitforsilence.c *OPTIONAL* shorter enter and leave sounds for meetme - wget http://www.eflo.net/files/enter.h @@ -2796,8 +2796,13 @@ SUBPHASE 6.4: setting up asterisk and helper applications for startup # mke2fs -m 0 /dev/ram0 # mount /dev/ram0 /var/spool/asterisk/monitor -### Path to local asterisk-perl_0.08 module if needed -PERL5LIB="/usr/share/astguiclient/libs"; export PERL5LIB +# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring) +# /usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2 + +# Disable console blanking and powersaving +/usr/bin/setterm -blank +/usr/bin/setterm -powersave off +/usr/bin/setterm -powerdown ### start time server /usr/local/bin/ntpdate -u 18.145.0.30 diff --git a/agc_2-X/trunk/docs/conf_examples/iax.conf.sample b/agc_2-X/trunk/docs/conf_examples/iax.conf.sample index de00baf9..8c4e36ff 100644 --- a/agc_2-X/trunk/docs/conf_examples/iax.conf.sample +++ b/agc_2-X/trunk/docs/conf_examples/iax.conf.sample @@ -8,6 +8,32 @@ jitterbuffer=no tos=lowdelay ;register => 1112223333:PASSWORD@iax.binfone.com +register => ASTloop:test@1270.0.1:40569 +register => ASTblind:test@1270.0.1:41569 + +[ASTloop] +type=friend +accountcode=ASTloop +context=default +auth=plaintext +host=dynamic +permit=0.0.0.0/0.0.0.0 +secret=test +disallow=all +allow=ulaw +qualify=yes + +[ASTblind] +type=friend +accountcode=ASTblind +context=default +auth=plaintext +host=dynamic +permit=0.0.0.0/0.0.0.0 +secret=test +disallow=all +allow=ulaw +qualify=yes [1112223333] auth=md5 diff --git a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql index 031cc44d..b7d1b6f6 100644 --- a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql +++ b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql @@ -399,10 +399,10 @@ index (call_date) CREATE TABLE vicidial_users ( user_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, -user VARCHAR(20), -pass VARCHAR(20), +user VARCHAR(20) NOT NULL, +pass VARCHAR(20) NOT NULL, full_name VARCHAR(50), -user_level INT(2), +user_level TINYINT(2) default '1', user_group VARCHAR(20), phone_login VARCHAR(20), phone_pass VARCHAR(20), @@ -444,9 +444,15 @@ modify_servers ENUM('0','1') default '0', view_reports ENUM('0','1') default '0', vicidial_recording_override ENUM('DISABLED','NEVER','ONDEMAND','ALLCALLS','ALLFORCE') default 'DISABLED', alter_custdata_override ENUM('NOT_ACTIVE','ALLOW_ALTER') default 'NOT_ACTIVE', -index (user) +qc_enabled ENUM('1','0') default '0', +qc_user_level INT(2) default '1', +qc_pass ENUM('1','0') default '0', +qc_finish ENUM('1','0') default '0', +qc_commit ENUM('1','0') default '0' ); +CREATE UNIQUE INDEX user ON vicidial_users (user); + CREATE TABLE vicidial_user_log ( user_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, user VARCHAR(20), @@ -461,7 +467,9 @@ index (user) CREATE TABLE vicidial_user_groups ( user_group VARCHAR(20) NOT NULL, group_name VARCHAR(40) NOT NULL, -allowed_campaigns TEXT +allowed_campaigns TEXT, +qc_allowed_campaigns TEXT, +qc_allowed_inbound_groups TEXT ); CREATE TABLE vicidial_campaigns ( @@ -473,7 +481,7 @@ dial_status_b VARCHAR(6), dial_status_c VARCHAR(6), dial_status_d VARCHAR(6), dial_status_e VARCHAR(6), -lead_order VARCHAR(20), +lead_order VARCHAR(30), park_ext VARCHAR(10), park_file_name VARCHAR(10), web_form_address VARCHAR(255), @@ -1006,6 +1014,29 @@ index (campaign_id), index (user) ); + CREATE TABLE vicidial_user_closer_log ( +user VARCHAR(20), +campaign_id VARCHAR(20), +event_date DATETIME, +blended ENUM('1','0') default '0', +closer_campaigns TEXT, +index (user), +index (event_date) +); + + +ALTER TABLE vicidial_campaign_server_stats ENGINE=HEAP; + +ALTER TABLE live_channels ENGINE=HEAP; + +ALTER TABLE live_sip_channels ENGINE=HEAP; + +ALTER TABLE parked_channels ENGINE=HEAP; + +ALTER TABLE server_updater ENGINE=HEAP; + +ALTER TABLE web_client_sessions ENGINE=HEAP; + INSERT INTO vicidial_lists SET list_id='999',list_name='Default inbound list',campaign_id='TESTCAMP',active='N'; diff --git a/agc_2-X/trunk/extras/upgrade_2.0.5.sql b/agc_2-X/trunk/extras/upgrade_2.0.5.sql index 83a65112..d7da4118 100644 --- a/agc_2-X/trunk/extras/upgrade_2.0.5.sql +++ b/agc_2-X/trunk/extras/upgrade_2.0.5.sql @@ -1 +1,44 @@ ALTER TABLE vicidial_closer_log ADD xfercallid INT(9) UNSIGNED; + +ALTER TABLE vicidial_campaign_server_stats ENGINE=HEAP; + +ALTER TABLE live_channels ENGINE=HEAP; + +ALTER TABLE live_sip_channels ENGINE=HEAP; + +ALTER TABLE parked_channels ENGINE=HEAP; + +ALTER TABLE server_updater ENGINE=HEAP; + +ALTER TABLE web_client_sessions ENGINE=HEAP; + + +ALTER TABLE vicidial_campaigns MODIFY lead_order VARCHAR(30); + +DROP index user on vicidial_users; +ALTER TABLE vicidial_users MODIFY user VARCHAR(20) NOT NULL; +CREATE UNIQUE INDEX user ON vicidial_users (user); +ALTER TABLE vicidial_users MODIFY pass VARCHAR(20) NOT NULL; +ALTER TABLE vicidial_users MODIFY user_level TINYINT(2) NOT NULL default '1'; + + CREATE TABLE vicidial_user_closer_log ( +user VARCHAR(20), +campaign_id VARCHAR(20), +event_date DATETIME, +blended ENUM('1','0') default '0', +closer_campaigns TEXT, +index (user), +index (event_date) +); + + + + +ALTER TABLE vicidial_users ADD qc_enabled ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_user_level INT(2) default '1'; +ALTER TABLE vicidial_users ADD qc_pass ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_finish ENUM('1','0') default '0'; +ALTER TABLE vicidial_users ADD qc_commit ENUM('1','0') default '0'; + +ALTER TABLE vicidial_user_groups ADD qc_allowed_campaigns TEXT; +ALTER TABLE vicidial_user_groups ADD qc_allowed_inbound_groups TEXT; diff --git a/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt new file mode 100644 index 00000000..be082b89 --- /dev/null +++ b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.0.5.txt @@ -0,0 +1,40 @@ +############################################################ ADMIN + +QC Enabled -<\/B> This option allows the user to log in to the Quality Control agent screen|| +QC User Level -<\/B> This setting defines what the agent Quality Control user level is. This will dictate the level of functionality for the agent in the QC section|| +QC Record Pass -<\/B> This option allows the agent to specify that a record has passed the first round of QC after reviewing the record|| +QC Record Finish -<\/B> This option allows the agent to specify that a record has finished the second round of QC after reviewing the passed record|| +QC Record Commit -<\/B> This option allows the agent to specify that a record has been committed in QC. It can no longer be modified by anyone|| +QC Allowed Campaigns -<\/B> This is a selectable list of Campaigns which members of this user group will be able to QC. The ALL-CAMPAIGNS option allows the users in this group to QC any campaign on the system|| +QC Allowed Inbound Groups -<\/B> This is a selectable list of Inbound Groups which members of this user group will be able to QC. The ALL-GROUPS option allows the users in this user group to QC any inbound group on the system|| +QC Enabled: || +QC User Level: || +QC Pass: || +QC Finish: || +QC Commit: || +Modify Nothing|| +Modify Nothing Except Status|| +Modify All Fields|| +Verify First Round of QC|| +View QC Statistics|| +Ability to Modify FINISHed records|| +Manager Level|| +USERS CAN VIEW ANY CAMPAIGN|| +USERS CAN QC ANY CAMPAIGN|| +USERS CAN QC ANY INBOUND GROUP|| +QC Allowed Campaigns: || +QC Allowed Inbound Groups: || + + +############################################################ CLIENT + +Gender: || +Date of Birth: || +YOU MUST BE PAUSED TO CHANGE GROUPS|| + + +############################################################ MANAGER Manual + + +############################################################ AGENT Manual + diff --git a/agc_2-X/trunk/www/agc/vdc_db_query.php b/agc_2-X/trunk/www/agc/vdc_db_query.php index 36b664d3..15f14c89 100644 --- a/agc_2-X/trunk/www/agc/vdc_db_query.php +++ b/agc_2-X/trunk/www/agc/vdc_db_query.php @@ -1,7 +1,7 @@ LICENSE: GPLv2 +# Copyright (C) 2008 Matt Florell LICENSE: GPLv2 # # This script is designed purely to send whether the meetme conference has live channels connected and which they are # This script depends on the server_ip being sent and also needs to have a valid user/pass from the vicidial_users table @@ -70,6 +70,7 @@ # - $omit_phone_code - ('Y','N') # - $no_delete_sessions - ('0','1') # - $LogouTKicKAlL - ('0','1'); +# - $closer_blended = ('0','1'); # CHANGELOG: # 50629-1044 - First build of script @@ -141,10 +142,11 @@ # 71129-2025 - restricted callbacks count and list to campaign only # 71223-0318 - changed logging of closer calls # 71226-1117 - added option to kick all calls from conference upon logout +# 80116-1032 - added user_closer_log logging in regCLOSER # -$version = '2.0.5-67'; -$build = '71226-1117'; +$version = '2.0.5-68'; +$build = '80116-1032'; require("dbconnect.php"); @@ -279,7 +281,8 @@ if (isset($_GET["status"])) {$status=$_GET["status"];} elseif (isset($_POST["status"])) {$status=$_POST["status"];} if (isset($_GET["LogouTKicKAlL"])) {$LogouTKicKAlL=$_GET["LogouTKicKAlL"];} elseif (isset($_POST["LogouTKicKAlL"])) {$LogouTKicKAlL=$_POST["LogouTKicKAlL"];} - +if (isset($_GET["closer_blended"])) {$closer_blended=$_GET["closer_blended"];} + elseif (isset($_POST["closer_blended"])) {$closer_blended=$_POST["closer_blended"];} $user=ereg_replace("[^0-9a-zA-Z]","",$user); $pass=ereg_replace("[^0-9a-zA-Z]","",$pass); @@ -454,6 +457,14 @@ if ($ACTION == 'regCLOSER') $rslt=mysql_query($stmt, $link); } + $stmt="INSERT INTO vicidial_user_closer_log set user='$user',campaign_id='$campaign',event_date='$NOW_TIME',blended='$closer_blended',closer_campaigns='$closer_choice';"; + if ($format=='debug') {echo "\n";} + $rslt=mysql_query($stmt, $link); + + $stmt="DELETE FROM vicidial_live_inbound_agents where user='$user';"; + if ($format=='debug') {echo "\n";} + $rslt=mysql_query($stmt, $link); + $in_groups_pre = preg_replace('/-$/','',$closer_choice); $in_groups = explode(" ",$in_groups_pre); $in_groups_ct = count($in_groups); diff --git a/agc_2-X/trunk/www/agc/vicidial.php b/agc_2-X/trunk/www/agc/vicidial.php index 6fee4c09..ae271bff 100644 --- a/agc_2-X/trunk/www/agc/vicidial.php +++ b/agc_2-X/trunk/www/agc/vicidial.php @@ -1,7 +1,7 @@ LICENSE: GPLv2 +# Copyright (C) 2008 Matt Florell LICENSE: GPLv2 # # make sure you have added a user to the vicidial_users MySQL table with at least # user_level 1 or greater to access this page. Also, you need to have the login @@ -174,10 +174,11 @@ # 71223-0318 - changed logging of closer calls # 71226-1117 - added option to kick all calls from conference upon logout # 80109-1510 - added gender select list +# 80116-1032 - added option on CLOSER-type campaigns to change in-groups when paused # -$version = '2.0.5-145'; -$build = '80109-1510'; +$version = '2.0.5-146'; +$build = '80116-1032'; require("dbconnect.php"); @@ -5191,6 +5192,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} { if (document.vicidial_form.CloserSelectBlended.checked==true) {VICIDiaL_closer_blended = 1;} + else + {VICIDiaL_closer_blended = 0;} var CloserSelectChoices = document.vicidial_form.CloserSelectList.value; @@ -5218,7 +5221,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} } if (xmlhttp) { - CSCupdate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=regCLOSER&format=text&user=" + user + "&pass=" + pass + "&comments=" + VU_agent_choose_ingroups_DV + "&closer_choice=" + CloserSelectChoices + "-"; + CSCupdate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=regCLOSER&format=text&user=" + user + "&pass=" + pass + "&comments=" + VU_agent_choose_ingroups_DV + "&closer_blended=" + VICIDiaL_closer_blended + "&campaign=" + campaign + "&closer_choice=" + CloserSelectChoices + "-"; xmlhttp.open('POST', 'vdc_db_query.php'); xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); xmlhttp.send(CSCupdate_query); @@ -5659,6 +5662,21 @@ else } +// ################################################################################ +// Show the groups selection span + function OpeNGrouPSelectioN() + { + if ( (AutoDialWaiting == 1) || (VD_live_customer_call==1) || (alt_dial_active==1) ) + { + alert("YOU MUST BE PAUSED TO CHANGE GROUPS"); + } + else + { + showDiv('CloserSelectBox') + } + } + + // ################################################################################ // Hide the CBcommentsBox span upon click function CBcommentsBoxhide() @@ -6377,7 +6395,9 @@ echo "\n"; -LOGOUT\n"; ?> + + 0) {echo "GROUPS     \n";} ?> +LOGOUT\n"; ?> diff --git a/agc_2-X/trunk/www/vicidial/admin.php b/agc_2-X/trunk/www/vicidial/admin.php index 2b4b948b..b6a169a6 100644 --- a/agc_2-X/trunk/www/vicidial/admin.php +++ b/agc_2-X/trunk/www/vicidial/admin.php @@ -2,7 +2,7 @@ # admin.php - VICIDIAL administration page # # -# Copyright (C) 2007 Matt Florell LICENSE: GPLv2 +# Copyright (C) 2008 Matt Florell LICENSE: GPLv2 # @@ -669,6 +669,20 @@ if (isset($_GET["source_group_id"])) {$source_group_id=$_GET["source_group_id" elseif (isset($_POST["source_group_id"])) {$source_group_id=$_POST["source_group_id"];} if (isset($_GET["default_xfer_group"])) {$default_xfer_group=$_GET["default_xfer_group"];} elseif (isset($_POST["default_xfer_group"])) {$default_xfer_group=$_POST["default_xfer_group"];} +if (isset($_GET["qc_enabled"])) {$qc_enabled=$_GET["qc_enabled"];} + elseif (isset($_POST["qc_enabled"])) {$qc_enabled=$_POST["qc_enabled"];} +if (isset($_GET["qc_user_level"])) {$qc_user_level=$_GET["qc_user_level"];} + elseif (isset($_POST["qc_user_level"])) {$qc_user_level=$_POST["qc_user_level"];} +if (isset($_GET["qc_pass"])) {$qc_pass=$_GET["qc_pass"];} + elseif (isset($_POST["qc_pass"])) {$qc_pass=$_POST["qc_pass"];} +if (isset($_GET["qc_finish"])) {$qc_finish=$_GET["qc_finish"];} + elseif (isset($_POST["qc_finish"])) {$qc_finish=$_POST["qc_finish"];} +if (isset($_GET["qc_commit"])) {$qc_commit=$_GET["qc_commit"];} + elseif (isset($_POST["qc_commit"])) {$qc_commit=$_POST["qc_commit"];} +if (isset($_GET["qc_campaigns"])) {$qc_campaigns=$_GET["qc_campaigns"];} + elseif (isset($_POST["qc_campaigns"])) {$qc_campaigns=$_POST["qc_campaigns"];} +if (isset($_GET["qc_groups"])) {$qc_groups=$_GET["qc_groups"];} + elseif (isset($_POST["qc_groups"])) {$qc_groups=$_POST["qc_groups"];} if (isset($script_id)) {$script_id= strtoupper($script_id);} @@ -807,6 +821,11 @@ $mix_container_item = ereg_replace("[^0-9]","",$mix_container_item); $prompt_interval = ereg_replace("[^0-9]","",$prompt_interval); $agent_alert_delay = ereg_replace("[^0-9]","",$agent_alert_delay); $manual_dial_list_id = ereg_replace("[^0-9]","",$manual_dial_list_id); +$qc_enabled = ereg_replace("[^0-9]","",$qc_enabled); +$qc_user_level = ereg_replace("[^0-9]","",$qc_user_level); +$qc_pass = ereg_replace("[^0-9]","",$qc_pass); +$qc_finish = ereg_replace("[^0-9]","",$qc_finish); +$qc_commit = ereg_replace("[^0-9]","",$qc_commit); ### DIGITS and DASHES $group_rank = ereg_replace("[^-0-9]","",$group_rank); @@ -1141,12 +1160,14 @@ $list_mix_container = ereg_replace(";","",$list_mix_container); # 71116-0942 - Added campaign_rank and fewest_calls as methods for agent call routing # 71122-1135 - Added default transfer group for campaigns and inbound groups # 71125-1751 - Added allowable transfer groups to campaign detail screen +# 80107-1204 - Started framework for new QC section +# 80112-0242 - Added more options for lead order # # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 8 to access this page the first time -$admin_version = '2.0.4-119'; -$build = '71125-1751'; +$admin_version = '2.0.5-121'; +$build = '80112-0242'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -1769,16 +1790,26 @@ if ( ( (strlen($ADD)>4) && ($ADD < 99998) ) or ($ADD==3) or (($ADD>20) and ($ADD { if ( ($ADD==211111) or ($ADD==311111) or ($ADD==511111) or ($ADD==611111) ) { - $stmt="SELECT allowed_campaigns from vicidial_user_groups where user_group='$user_group';"; + $stmt="SELECT allowed_campaigns,qc_allowed_campaigns,qc_allowed_inbound_groups from vicidial_user_groups where user_group='$user_group';"; $rslt=mysql_query($stmt, $link); $row=mysql_fetch_row($rslt); - $allowed_campaigns = $row[0]; + $allowed_campaigns = $row[0]; + $qc_allowed_campaigns = $row[1]; + $qc_allowed_inbound_groups = $row[2]; $allowed_campaigns = preg_replace("/ -$/","",$allowed_campaigns); $campaigns = explode(" ", $allowed_campaigns); + $qc_allowed_campaigns = preg_replace("/ -$/","",$qc_allowed_campaigns); + $qc_campaigns = explode(" ", $qc_allowed_campaigns); + $qc_allowed_inbound_groups = preg_replace("/ -$/","",$qc_allowed_inbound_groups); + $qc_groups = explode(" ", $qc_allowed_inbound_groups); } $campaigns_value=''; $campaigns_list='4) && ($ADD < 99998) ) or ($ADD==3) or (($ADD>20) and ($ADD $campaigns_list.=" CHECKED"; $campaigns_value .= " -ALL-CAMPAIGNS- -"; } + if (eregi('ALL-CAMPAIGNS',$qc_campaigns[$p])) + { + $qc_campaigns_list.=" CHECKED"; + $qc_campaigns_value .= " -ALL-CAMPAIGNS- -"; + } + if (eregi('ALL-GROUPS',$qc_groups[$p])) + { + $qc_groups_list.=" CHECKED"; + $qc_groups_value .= " -ALL-GROUPS- -"; + } $p++; } $campaigns_list.="> ALL-CAMPAIGNS - USERS CAN VIEW ANY CAMPAIGN
\n"; + $qc_campaigns_list.="> ALL-CAMPAIGNS - USERS CAN QC ANY CAMPAIGN
\n"; + $qc_groups_list.="> ALL-GROUPS - USERS CAN QC ANY INBOUND GROUP
\n"; $stmt="SELECT campaign_id,campaign_name from vicidial_campaigns order by campaign_id"; $rslt=mysql_query($stmt, $link); @@ -1802,6 +1845,7 @@ if ( ( (strlen($ADD)>4) && ($ADD < 99998) ) or ($ADD==3) or (($ADD>20) and ($ADD $campaign_id_value = $rowx[0]; $campaign_name_value = $rowx[1]; $campaigns_list .= "4) && ($ADD < 99998) ) or ($ADD==3) or (($ADD>20) and ($ADD $campaigns_list .= " CHECKED"; $campaigns_value .= " $campaign_id_value"; } + if ($campaign_id_value == $qc_campaigns[$p]) + { + $qc_campaigns_list .= " CHECKED"; + $qc_campaigns_value .= " $campaign_id_value"; + } # echo ""; $p++; } $campaigns_list .= "> $campaign_id_value - $campaign_name_value
\n"; + $qc_campaigns_list .= "> $campaign_id_value - $campaign_name_value
\n"; $o++; } + + $stmt="SELECT group_id,group_name from vicidial_inbound_groups order by group_id"; + $rslt=mysql_query($stmt, $link); + $groups_to_print = mysql_num_rows($rslt); + + $o=0; + while ($groups_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + $group_id_value = $rowx[0]; + $group_name_value = $rowx[1]; + $qc_groups_list .= "2) {$campaigns_value .= " -";} + if (strlen($qc_campaigns_value)>2) {$qc_campaigns_value .= " -";} + if (strlen($qc_groups_value)>2) {$qc_groups_value .= " -";} } ##### END get campaigns listing for checkboxes ##### @@ -2055,6 +2133,39 @@ echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; } if ($LOGuser_level > 8) { @@ -9065,7 +9196,7 @@ if ($ADD==31) echo "   \n"; echo "     $NWB#vicidial_campaigns-dial_status$NWE\n"; - echo "\n"; + echo "\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; + + echo "\n"; + echo "\n"; + echo "\n"; echo "
View Reports - This option allows the user to view the VICIDIAL reports. +
+ +
+QC Enabled - This option allows the user to log in to the Quality Control agent screen. + +
+
+
+QC User Level - This setting defines what the agent Quality Control user level is. This will dictate the level of functionality for the agent in the QC section:
+1 - Modify Nothing
+2 - Modify Nothing Except Status
+3 - Modify All Fields
+4 - Verify First Round of QC
+5 - View QC Statistics
+6 - Ability to Modify FINISHed records
+7 - Manager Level
+ +
+
+
+QC Record Pass - This option allows the agent to specify that a record has passed the first round of QC after reviewing the record. + +
+
+
+QC Record Finish - This option allows the agent to specify that a record has finished the second round of QC after reviewing the passed record. + +
+
+
+QC Record Commit - This option allows the agent to specify that a record has been committed in QC. It can no longer be modified by anyone. + + @@ -2706,6 +2817,16 @@ echo "
Allowed Campaigns - This is a selectable list of Campaigns to which members of this user group can log in to. The ALL-CAMPAIGNS option allows the users in this group to see and log in to any campaign on the system. +
+ +
+QC Allowed Campaigns - This is a selectable list of Campaigns which members of this user group will be able to QC. The ALL-CAMPAIGNS option allows the users in this group to QC any campaign on the system. + +
+
+
+QC Allowed Inbound Groups - This is a selectable list of Inbound Groups which members of this user group will be able to QC. The ALL-GROUPS option allows the users in this user group to QC any inbound group on the system. + @@ -4809,7 +4930,7 @@ if ($ADD=="2A") } else { - $stmt="INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override) SELECT \"$user\",\"$pass\",\"$full_name\",user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override from vicidial_users where user=\"$source_user_id\";"; + $stmt="INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit) SELECT \"$user\",\"$pass\",\"$full_name\",user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit from vicidial_users where user=\"$source_user_id\";"; $rslt=mysql_query($stmt, $link); $stmtA="INSERT INTO vicidial_inbound_group_agents (user,group_id,group_rank,group_weight,calls_today) SELECT \"$user\",group_id,group_rank,group_weight,\"0\" from vicidial_inbound_group_agents where user=\"$source_user_id\";"; @@ -5881,11 +6002,10 @@ if ($ADD=="4A") { echo "
USER MODIFIED - ADMIN: $user\n"; - $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',delete_users='$delete_users',delete_user_groups='$delete_user_groups',delete_lists='$delete_lists',delete_campaigns='$delete_campaigns',delete_ingroups='$delete_ingroups',delete_remote_agents='$delete_remote_agents',load_leads='$load_leads',campaign_detail='$campaign_detail',ast_admin_access='$ast_admin_access',ast_delete_phones='$ast_delete_phones',delete_scripts='$delete_scripts',modify_leads='$modify_leads',hotkeys_active='$hotkeys_active',change_agent_campaign='$change_agent_campaign',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',delete_filters='$delete_filters',alter_agent_interface_options='$alter_agent_interface_options',closer_default_blended='$closer_default_blended',delete_call_times='$delete_call_times',modify_call_times='$modify_call_times',modify_users='$modify_users',modify_campaigns='$modify_campaigns',modify_lists='$modify_lists',modify_scripts='$modify_scripts',modify_filters='$modify_filters',modify_ingroups='$modify_ingroups',modify_usergroups='$modify_usergroups',modify_remoteagents='$modify_remoteagents',modify_servers='$modify_servers',view_reports='$view_reports',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override' where user='$user';"; + $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',delete_users='$delete_users',delete_user_groups='$delete_user_groups',delete_lists='$delete_lists',delete_campaigns='$delete_campaigns',delete_ingroups='$delete_ingroups',delete_remote_agents='$delete_remote_agents',load_leads='$load_leads',campaign_detail='$campaign_detail',ast_admin_access='$ast_admin_access',ast_delete_phones='$ast_delete_phones',delete_scripts='$delete_scripts',modify_leads='$modify_leads',hotkeys_active='$hotkeys_active',change_agent_campaign='$change_agent_campaign',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',delete_filters='$delete_filters',alter_agent_interface_options='$alter_agent_interface_options',closer_default_blended='$closer_default_blended',delete_call_times='$delete_call_times',modify_call_times='$modify_call_times',modify_users='$modify_users',modify_campaigns='$modify_campaigns',modify_lists='$modify_lists',modify_scripts='$modify_scripts',modify_filters='$modify_filters',modify_ingroups='$modify_ingroups',modify_usergroups='$modify_usergroups',modify_remoteagents='$modify_remoteagents',modify_servers='$modify_servers',view_reports='$view_reports',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override',qc_enabled='$qc_enabled',qc_user_level='$qc_user_level',qc_pass='$qc_pass',qc_finish='$qc_finish',qc_commit='$qc_commit' where user='$user';"; $rslt=mysql_query($stmt, $link); - ### LOG CHANGES TO LOG FILE ### if ($WeBRooTWritablE > 0) { @@ -5923,7 +6043,7 @@ if ($ADD=="4B") { echo "
USER MODIFIED - ADMIN: $user\n"; - $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',hotkeys_active='$hotkeys_active',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',closer_default_blended='$closer_default_blended',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override' where user='$user';"; + $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',hotkeys_active='$hotkeys_active',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',closer_default_blended='$closer_default_blended',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override',qc_enabled='$qc_enabled',qc_user_level='$qc_user_level',qc_pass='$qc_pass',qc_finish='$qc_finish',qc_commit='$qc_commit' where user='$user';"; $rslt=mysql_query($stmt, $link); ### LOG CHANGES TO LOG FILE ### @@ -6765,7 +6885,7 @@ if ($ADD==411111) } else { - $stmt="UPDATE vicidial_user_groups set user_group='$user_group', group_name='$group_name',allowed_campaigns='$campaigns_value' where user_group='$OLDuser_group';"; + $stmt="UPDATE vicidial_user_groups set user_group='$user_group', group_name='$group_name',allowed_campaigns='$campaigns_value',qc_allowed_campaigns='$qc_campaigns_value',qc_allowed_inbound_groups='$qc_groups_value' where user_group='$OLDuser_group';"; $rslt=mysql_query($stmt, $link); echo "
USER GROUP MODIFIED\n"; @@ -8666,6 +8786,12 @@ if ($ADD==3) $view_reports = $row[43]; $vicidial_recording_override = $row[44]; $alter_custdata_override = $row[45]; + $qc_enabled = $row[46]; + $qc_user_level = $row[47]; + $qc_pass = $row[48]; + $qc_finish = $row[49]; + $qc_commit = $row[50]; + if ( ($user_level >= $LOGuser_level) and ($LOGuser_level < 9) ) { @@ -8738,6 +8864,11 @@ if ($ADD==3) echo "$RANKgroups_list"; echo "
\n"; echo "
QC Enabled: $NWB#vicidial_users-qc_enabled$NWE
QC User Level: $NWB#vicidial_users-qc_user_level$NWE
QC Pass: $NWB#vicidial_users-qc_pass$NWE
QC Finish: $NWB#vicidial_users-qc_finish$NWE
QC Commit: $NWB#vicidial_users-qc_commit$NWE
List Order: $NWB#vicidial_campaigns-lead_order$NWE
List Order: $NWB#vicidial_campaigns-lead_order$NWE
List Mix:   \n"; echo "     $NWB#vicidial_campaigns-dial_status$NWE
List Order: $NWB#vicidial_campaigns-lead_order$NWE
List Order: $NWB#vicidial_campaigns-lead_order$NWE
List Mix:
Allowed Campaigns: \n"; echo "$campaigns_list"; echo "$NWB#vicidial_user_groups-allowed_campaigns$NWE
QC Allowed Campaigns: \n"; + echo "$qc_campaigns_list"; + echo "$NWB#vicidial_user_groups-qc_allowed_campaigns$NWE
QC Allowed Inbound Groups: \n"; + echo "$qc_groups_list"; + echo "$NWB#vicidial_user_groups-qc_allowed_inbound_groups$NWE
\n"; diff --git a/agc_2-X/trunk/www/vicidial/dbconnect.php b/agc_2-X/trunk/www/vicidial/dbconnect.php index d31a326f..ac550fb3 100644 --- a/agc_2-X/trunk/www/vicidial/dbconnect.php +++ b/agc_2-X/trunk/www/vicidial/dbconnect.php @@ -49,4 +49,5 @@ $AM_shift_BEGIN = '03:45:00'; $AM_shift_END = '17:45:00'; $PM_shift_BEGIN = '17:45:01'; $PM_shift_END = '23:59:59'; +$admin_qc_enabled = '0'; ?> diff --git a/agc_2-X/trunk/www/vicidial/user_stats.php b/agc_2-X/trunk/www/vicidial/user_stats.php index ecd457f8..484c48b2 100644 --- a/agc_2-X/trunk/www/vicidial/user_stats.php +++ b/agc_2-X/trunk/www/vicidial/user_stats.php @@ -1,7 +1,7 @@ LICENSE: GPLv2 +### Copyright (C) 2008 Matt Florell LICENSE: GPLv2 ### # CHANGES # @@ -9,6 +9,7 @@ # 61201-1136 - Added recordings display and changed calls to time range with 10000 limit # 70118-1605 - Added user group column to login/out and calls lists # 70702-1231 - Added recording location link and truncation +# 80117-0316 - Added vicidial_user_closer_log entries to display # header ("Content-type: text/html; charset=utf-8"); @@ -264,6 +265,39 @@ echo "

\n"; echo "
\n"; +echo "CLOSER IN-GROUP SELECTION LOGS:\n"; +echo "\n"; +echo "\n"; + + $stmt="select * from vicidial_user_closer_log where user='" . mysql_real_escape_string($user) . "' and event_date >= '" . mysql_real_escape_string($begin_date) . " 0:00:01' and event_date <= '" . mysql_real_escape_string($end_date) . " 23:59:59' order by event_date desc limit 1000;"; + $rslt=mysql_query($stmt, $link); + $logs_to_print = mysql_num_rows($rslt); + + $u=0; + while ($logs_to_print > $u) { + $row=mysql_fetch_row($rslt); + if (eregi("1$|3$|5$|7$|9$", $u)) + {$bgcolor='bgcolor="#B9CBFD"';} + else + {$bgcolor='bgcolor="#9BB9FB"';} + + $u++; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + } + + +echo "
# DATE/TIME CAMPAIGNBLEND GROUPS
$u$row[2] $row[1] $row[3] $row[4]


\n"; + + + + echo "OUTBOUND CALLS FOR THIS TIME PERIOD: (10000 record limit)\n"; echo "\n"; echo "\n";
# DATE/TIME LENGTH STATUS PHONE CAMPAIGN GROUP LIST LEAD