3648 lines
139 KiB
PHP
3648 lines
139 KiB
PHP
<?php
|
|
/** nov Class ki skrbi za telefonsko anketo
|
|
* November 2012
|
|
*
|
|
*
|
|
* @author Gorazd_Veselic
|
|
*/
|
|
define('GROUP_PAGINATE', 4); # po kolko strani grupira pri paginaciji
|
|
define('REC_ON_PAGE', 50); # kolko zapisov na stran pri urejanju respondentov
|
|
define('REC_ON_SEND_PAGE', 20); # kolko zapisov na stran pri pošiljanju
|
|
set_time_limit(2400); # 30 minut
|
|
|
|
|
|
class SurveyTelephone {
|
|
private $sid; # id ankete
|
|
private $surveySettings; # zakeširamo nastavitve ankete
|
|
|
|
var $status_z = 5; // cakaj 5 minut, ce je Zaseden
|
|
var $status_n = 60; // cakaj 60 minut, ce Ni odgovora
|
|
var $status_d = 60; // cakaj 60 minut, ce se ga prelozi
|
|
var $max_calls = 10; // klici najvec 10-krat
|
|
|
|
var $call_order = 0; // vrstni red klicanja (0->nakljucno, 1->fiksno, 2->po abecedi padajoce, 3->po abecedi narascajoce)
|
|
|
|
var $isAnketar = false;
|
|
var $telephoneSprId = null;
|
|
|
|
private $inv_variables = array('email','password','ime','priimek','naziv','telefon','drugo');
|
|
private $inv_variables_link = array('email'=>'email','geslo'=>'password','ime'=>'firstname','priimek'=>'lastname','naziv'=>'salutation','telefon'=>'phone','drugo'=>'custom','last_status'=>'last_status','sent'=>'sent','responded'=>'responded','unsubscribed'=>'unsubscribed');
|
|
|
|
|
|
function __construct($sid) {
|
|
|
|
$this->sid = $sid;
|
|
|
|
SurveyInfo::SurveyInit($this->sid);
|
|
$this->surveySettings = SurveyInfo::getInstance()->getSurveyRow();
|
|
SurveyDataSettingProfiles :: Init($this->sid);
|
|
|
|
$sql = sisplet_query("SELECT * FROM srv_telephone_setting WHERE survey_id = '$this->sid'");
|
|
$row = mysqli_fetch_array($sql);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
$this->status_z = $row['status_z'];
|
|
$this->status_n = $row['status_n'];
|
|
$this->status_d = $row['status_d'];
|
|
$this->max_calls = $row['max_calls'];
|
|
$this->call_order = $row['call_order'];
|
|
}
|
|
|
|
$this->telephoneSprId = $this->get_spr_telefon_id();
|
|
# če spremenljivka telefon ne obstaja jo dodamo
|
|
if ((int)$this->telephoneSprId == 0) {
|
|
$sys = $this->addSystemVariables(array('inv_field_phone'));
|
|
$this->telephoneSprId = $sys['telefon'];
|
|
}
|
|
|
|
$d = new Dostop();
|
|
$this->isAnketar = $d->isAnketar();
|
|
|
|
# počistimo polja
|
|
if (isset($_POST['recipients_list']) && $_POST['recipients_list'] != null) {
|
|
$_POST['recipients_list'] = mysql_real_unescape_string($_POST['recipients_list']);
|
|
}
|
|
if (isset($_POST['fields']) && $_POST['fields'] != null) {
|
|
$_POST['fields'] = mysql_real_unescape_string($_POST['fields']);
|
|
}
|
|
}
|
|
|
|
function ajax() {
|
|
if (isset($_REQUEST['m']) && trim($_REQUEST['m']) != '') {
|
|
$this->action($_REQUEST['m']);
|
|
} else {
|
|
echo 'Ajax error!';
|
|
return 'Ajax error!';
|
|
}
|
|
}
|
|
|
|
function action($action) {
|
|
|
|
$NoNavi = false;
|
|
if (isset($_POST['noNavi']) && $_POST['noNavi'] == 'true') {
|
|
$NoNavi = true;
|
|
}
|
|
if ($NoNavi == false ) {
|
|
echo '<div id="inv_top_navi">';
|
|
$this->displayNavigation();
|
|
echo '</div>';
|
|
}
|
|
|
|
if ($action == 'recipients_lists') {
|
|
$this->recipientsLists();
|
|
} else if ($action == 'view_recipients') {
|
|
$this->viewRecipients();
|
|
} else if ($action == 'start_call') {
|
|
$this->startCall();
|
|
} else if ($action == 'call') {
|
|
$this->Call();
|
|
} else if ($action == 'settings') {
|
|
$this->settings();
|
|
} else if ($action == 'settings_save') {
|
|
$this->settingsSave();
|
|
$this->settings();
|
|
} else if ($action == 'calling_list') {
|
|
$this->callingList();
|
|
} else if ($action == 'setSortField') {
|
|
$this->setSortField();
|
|
} else if ($action == 'set_recipient_filter') {
|
|
$this->setRecipientFilter();
|
|
} else if ($action == 'addmark') {
|
|
$this->addMark();
|
|
} else if ($action == 'preveriStevilkeTimer') {
|
|
$this->preveriStevilkeTimer();
|
|
} else if ($action == 'setNextAction') {
|
|
$this->setNextAction();
|
|
} else if ($action == 'addRecipients') {
|
|
$result = $this->addRecipients();
|
|
# prikažemo napake
|
|
$invalid_recipiens_array = $this->displayRecipentsErrors($result);
|
|
$this->viewRecipients();
|
|
} else if ($action == 'setUserComment') {
|
|
$this->setUserComment();
|
|
} else if ($action == 'deleteProfile') {
|
|
$this->deleteProfile();
|
|
} else if ($action == 'editProfile') {
|
|
$this->editProfile();
|
|
} else if ($action == 'updateProfile') {
|
|
$this->updateProfile();
|
|
} else if ($action == 'getProfileName') {
|
|
$this->getProfileName();
|
|
} else if ($action == 'saveNewProfile') {
|
|
$this->saveNewProfile();
|
|
} else if ($action == 'saveProfile') {
|
|
$attributes = array();
|
|
if (isset($_POST['pid'])) {
|
|
$attributes['pid'] = $_POST['pid'];
|
|
}
|
|
if (isset($_POST['fields'])) {
|
|
$attributes['fields'] = str_replace('inv_field_','',implode(',',$_POST['fields']));
|
|
}
|
|
if (isset($_POST['recipients_list'])) {
|
|
$attributes['recipients'] = mysql_real_unescape_string($_POST['recipients_list']);
|
|
}
|
|
$this->saveProfile($attributes);
|
|
} else if ($action == 'goToUser') {
|
|
$this->goToUser();
|
|
} else if ($action == 'startSurvey') {
|
|
$this->startSurvey();
|
|
} else if ($action == 'showPopupAddMarker') {
|
|
$this->showPopupAddMarker();
|
|
} else if ($action == 'undoLastStatus') {
|
|
$this->undoLastStatus();
|
|
} else {
|
|
$this->showTelephoneStatus();
|
|
}
|
|
}
|
|
|
|
function showTelephoneStatus() {
|
|
global $lang, $site_url;
|
|
|
|
# polovimo statuse respondentov
|
|
# skreiramo query s katerim polovimo userje in pripadajoče sistemske podatke
|
|
$str_fields[] = " u.id AS usr_id";
|
|
$str_fields[] = " u.phone";
|
|
$str_fields[] = " u.last_status as status";
|
|
|
|
$str_joins[] = " srv_invitations_recipients as u";
|
|
$str_conditions[] = " u.ank_id = '$this->sid'";
|
|
$str_conditions[] = " u.deleted ='0'";
|
|
$str_conditions[] = " TRIM(u.phone) !=''";
|
|
# pripravimo ostale join in condtion stavke
|
|
|
|
# polovimo še iz baze klicev, vse trenutno začete klice
|
|
$str_fields[] = " scc.rec_id AS sccusr";
|
|
$str_joins[] = " LEFT OUTER JOIN (SELECT rec_id FROM srv_telephone_current) AS scc ON scc.rec_id = u.id";
|
|
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
$str_fields[] = " sch.status AS schstatus";
|
|
$str_fields[] = " sch.user_id AS user_id";
|
|
$str_fields[] = " sch.insert_time AS insert_time";
|
|
$str_joins[] = " LEFT OUTER JOIN (SELECT rsch.status, rsch.rec_id, rsch.user_id, rsch.insert_time FROM srv_telephone_history AS rsch INNER JOIN (SELECT MAX(id) as iid, rec_id FROM srv_telephone_history GROUP BY rec_id) as insch ON insch.iid = rsch.id) AS sch ON sch.rec_id = u.id";
|
|
|
|
# join za pregled po anketarjih
|
|
$str_fields[] = " usr.id AS usrid";
|
|
$str_joins[] = " LEFT OUTER JOIN (SELECT id FROM users) AS usr ON usr.id = sch.user_id";
|
|
|
|
# zložimo query
|
|
$str_qry_users = "SELECT ".implode(',', $str_fields)." FROM ".implode(' ',$str_joins)." WHERE ".implode(' AND',$str_conditions);
|
|
|
|
# sortiramo po statusih
|
|
$statusi = array();
|
|
$statusi_anketar = array();
|
|
$contacted = 0;
|
|
|
|
$qry = sisplet_query($str_qry_users);
|
|
if (!$qry) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($qry)) {
|
|
|
|
// Filter na datum
|
|
echo '<div id="phn_dashboard_date_filter">';
|
|
|
|
$date_from = '';
|
|
if(isset($_GET['date_from']))
|
|
$date_from = strtotime($_GET['date_from']);
|
|
|
|
$date_to = '';
|
|
if(isset($_GET['date_to']))
|
|
$date_to = strtotime($_GET['date_to']);
|
|
|
|
echo '<div class="set_horizontal">';
|
|
|
|
echo $lang['s_from'].':';
|
|
echo '<input type="text" class="text small" name="tel_dash_dateFrom" id="tel_dash_dateFrom" value="'.($date_from == '' ? $date_from : date('d.m.Y', $date_from)).'">';
|
|
echo $lang['s_to'].':';
|
|
echo '<input type="text" class="text small" name="tel_dash_dateTo" id="tel_dash_dateTo" value="'.($date_to == '' ? $date_to : date('d.m.Y', $date_to)).'">';
|
|
|
|
echo '<a href="'.$site_url.'/admin/survey/index.php?anketa='.$this->sid.'&a='.A_TELEPHONE.'&m=dashboard">'.$lang['srv_telephone_dashboard_legend_datum'].'</a>';
|
|
|
|
echo '</div>';
|
|
|
|
echo '<script type="text/javascript">';
|
|
echo '$(document).ready(function() {' .
|
|
' $("#tel_dash_dateFrom, #tel_dash_dateTo").datepicker({
|
|
showOtherMonths: true,
|
|
selectOtherMonths: true,
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
dateFormat: "dd.mm.yy",
|
|
showAnim: "slideDown",
|
|
showOn: "button",
|
|
buttonText: "",
|
|
onSelect: function(selected, evnt) {
|
|
tel_date_filter(); return false;
|
|
}
|
|
});' .
|
|
'});';
|
|
echo '</script>';
|
|
|
|
echo '</div>';
|
|
|
|
|
|
while ($row = mysqli_fetch_assoc($qry)) {
|
|
|
|
$date = strtotime($row['insert_time']);
|
|
|
|
// Filtriramo po datumu ce imamo nastavljen filter
|
|
if( ($date == null && $date_from == null && $date_to == null)
|
|
|| ($date != null && ($date_from == null || $date >= $date_from) && ($date_to == null || $date <= $date_to)) ){
|
|
|
|
$statusi[$row['schstatus']] ++;
|
|
$statusi_anketar[$row['usrid']] ++;
|
|
|
|
if($row['schstatus'] != '')
|
|
$contacted++;
|
|
}
|
|
|
|
$statusi_all ++;
|
|
}
|
|
|
|
//$contacted = (int)($statusi_all - $statusi['']);
|
|
|
|
echo '<fieldset class="inv_fieldset"><legend>'.$lang['srv_telephone_dashboard_legend'].'</legend>';
|
|
echo '<div class="inv_filedset_inline_div">';
|
|
echo '<p>';
|
|
echo '<table class="inv_dashboard_table">';
|
|
|
|
echo '<tr>';
|
|
echo '<th>'.$lang['srv_statistic_metric'].'</th>';
|
|
echo '<th>'.$lang['srv_statistic_answer_state_frequency'].'</th>';
|
|
echo '<th>'.$lang['srv_statistic_answer_state_percent'].'</th>';
|
|
echo '</tr>';
|
|
|
|
|
|
echo '<tr class="semi-bold">';
|
|
echo '<td>'.$lang['srv_telephone_dashboard_all_respondents'].'</td>';
|
|
echo '<td>'.(int)$statusi_all.'</td>';
|
|
echo '<td>100%</td>';
|
|
echo '</tr>';
|
|
# poslano enotam
|
|
echo '<tr class="semi-bold">';
|
|
echo '<td>'.$lang['srv_telephone_dashboard_all_contacted'].'</td>';
|
|
echo '<td>'.(int)$contacted .'</td>';
|
|
//echo '<td>'.((int)$contacted > 0 ? '100%' : '0%').'</td>';
|
|
echo '<td>'.Common::formatNumber(( (int)$contacted > 0 ? (int)$contacted*100/(int)$statusi_all : 0),0,'','%').'</td>';
|
|
echo '</tr>';
|
|
foreach (array('R','Z','N','T','P','A','U','D') AS $st) {
|
|
if ((int)$statusi[$st] > 0) {
|
|
if ($st == 'U') {
|
|
$css=' class="red"';
|
|
} else {
|
|
$css='';
|
|
}
|
|
echo '<tr>';
|
|
echo '<td>'.$lang['srv_telephone_status_'.$st].'</td>';
|
|
echo '<td'.$css.'>'.(int)$statusi[$st].'</td>';
|
|
//echo '<td'.$css.'>'.Common::formatNumber(((int)$statusi[$st] > 0 ? (int)$statusi[$st]*100/(int)$contacted : 0),0,'','%').'</td>';
|
|
echo '<td'.$css.'>'.Common::formatNumber(((int)$statusi[$st] > 0 ? (int)$statusi[$st]*100/(int)$statusi_all : 0),0,'','%').'</td>';
|
|
echo '</tr>';
|
|
}
|
|
}
|
|
echo '</table>';
|
|
echo '</p>';
|
|
echo '</div>';
|
|
echo '</fieldset>';
|
|
|
|
$recipients_by_status = array();
|
|
$recipients_by_status['contacted'] = $contacted;
|
|
|
|
$sql_subStr = "SELECT sir.id, sir.last_status, su.lurker, sth.insert_time FROM srv_invitations_recipients AS sir"
|
|
." INNER join srv_user AS su ON sir.id = su.inv_res_id"
|
|
." RIGHT JOIN srv_telephone_history as sth ON sth.rec_id = su.inv_res_id"
|
|
//." WHERE sth.survey_id='$this->sid' AND sth.status IN ('U','A') AND sir.ank_id='$this->sid' AND sir.deleted ='0' AND su.ank_id='$this->sid' GROUP BY sth.rec_id";
|
|
." WHERE sth.survey_id='$this->sid' AND sth.status IN ('U','A') AND sth.id=(SELECT MAX(id) FROM srv_telephone_history WHERE survey_id='$this->sid' AND status IN ('U','A') AND rec_id=sth.rec_id AND rec_id=sth.rec_id) AND sir.ank_id='$this->sid' AND sir.deleted ='0' AND su.ank_id='$this->sid' GROUP BY sth.rec_id";
|
|
$sql_subQry = sisplet_query($sql_subStr);
|
|
|
|
if (mysqli_num_rows($sql_subQry) > 0) {
|
|
while (list($uid,$last_status,$lurker,$insert_time) = mysqli_fetch_row($sql_subQry)) {
|
|
|
|
$date = strtotime($insert_time);
|
|
|
|
// Filtriramo po datumu ce imamo nastavljen filter
|
|
if( ($date == null && $date_from == null && $date_to == null)
|
|
|| ($date != null && ($date_from == null || $date >= $date_from) && ($date_to == null || $date <= $date_to)) ){
|
|
|
|
switch ((int)$last_status) {
|
|
# 2 - E-pošta - napaka
|
|
case -2:
|
|
$recipients_by_status['not_send'] ++;
|
|
$recipients_by_status['error'] ++;
|
|
break;
|
|
# 0 - E-pošta - ni poslana
|
|
case 0:
|
|
$recipients_by_status['not_send'] ++;
|
|
break;
|
|
# 1 - E-pošta - neodgovor
|
|
case 1:
|
|
$recipients_by_status['send'] ++;
|
|
break;
|
|
|
|
# 3 - klik na nagovor
|
|
case 3:
|
|
$recipients_by_status['send'] ++;
|
|
$recipients_by_status['clicked'] ++;
|
|
break;
|
|
# 4 - klik na anketo
|
|
case 4:
|
|
$recipients_by_status['send'] ++;
|
|
$recipients_by_status['clicked'] ++;
|
|
break;
|
|
# 5 - delno prazna
|
|
case 5:
|
|
$recipients_by_status['send'] ++;
|
|
#$recipients_by_status['clicked'] ++;
|
|
if ((int)$lurker == 1) {
|
|
# če je lurker
|
|
$recipients_by_status['clicked'] ++;
|
|
} else {
|
|
$recipients_by_status['finished'] ++;
|
|
}
|
|
break;
|
|
# 6 - končana
|
|
case 6:
|
|
$recipients_by_status['send'] ++;
|
|
if ((int)$lurker == 1) {
|
|
# če je lurker
|
|
$recipients_by_status['clicked'] ++;
|
|
} else {
|
|
$recipients_by_status['finished'] ++;
|
|
}
|
|
break;
|
|
# null - neznan
|
|
default:
|
|
$recipients_by_status['unknown'] ++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
# var_dump($recipients_by_status);
|
|
|
|
echo '<br/>';
|
|
echo '<fieldset class="inv_fieldset"><legend>'.$lang['srv_telephone_dashboard_legend_finished'].'</legend>';
|
|
echo '<div class="inv_filedset_inline_div">';
|
|
echo '<table class="inv_dashboard_table">';
|
|
echo '<tr>';
|
|
echo '<th>'.$lang['srv_telephone_dashboard_all_contacted'].'</th>';
|
|
echo '<th>'.(int)$recipients_by_status['contacted'].'</th>';
|
|
echo '<th>-</th>';
|
|
echo '<th>100%</th>';
|
|
echo '</tr>';
|
|
#popslano enotam
|
|
echo '<tr>';
|
|
echo '<th>'.$lang['srv_telephone_dashboard_all_started'].'</th>';
|
|
echo '<th>'.(int)$recipients_by_status['send'].'</th>';
|
|
echo '<th>'.((int)$recipients_by_status['send'] > 0 ? '100%' : '0%').'</th>';
|
|
echo '<th>'.Common::formatNumberSimple(((int)$recipients_by_status['contacted'] > 0 ? (int)$recipients_by_status['send']*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</th>';
|
|
echo '</tr>';
|
|
|
|
#neodgovori
|
|
echo '<tr>';
|
|
echo '<td>'.$lang['srv_inv_dashboard_tbl_unanswered'].'</td>';
|
|
$unanswered = ((int)$recipients_by_status['send']-(int)$recipients_by_status['clicked']-(int)$recipients_by_status['finished']);
|
|
echo '<td>'.$unanswered.'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['send'] > 0 ? $unanswered*100/(int)$recipients_by_status['send'] : 0),0,'%').'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['contacted'] > 0 ? $unanswered*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</td>';
|
|
echo '</tr>';
|
|
echo '<tr>';
|
|
echo '<td>'.$lang['srv_inv_dashboard_tbl_clicked'].'</td>';
|
|
echo '<td>'.(int)$recipients_by_status['clicked'].'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['send'] > 0 ? (int)$recipients_by_status['clicked']*100/(int)$recipients_by_status['send'] : 0),0,'%').'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['contacted'] > 0 ? (int)$recipients_by_status['clicked']*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</td>';
|
|
echo '</tr>';
|
|
|
|
#če se slučajno pojavijo kaki neznani statusi
|
|
if ((int)$recipients_by_status['unknown'] > 0) {
|
|
echo '<tr>';
|
|
echo '<td>'.$lang['srv_inv_dashboard_tbl_unknown'].'</td>';
|
|
echo '<td>'.(int)$recipients_by_status['unknown'].'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['send'] > 0 ? (int)$recipients_by_status['unknown']*100/(int)$recipients_by_status['send'] : 0),0,'%').'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$recipients_by_status['contacted'] > 0 ? (int)$recipients_by_status['unknown']*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</td>';
|
|
echo '</tr>';
|
|
}
|
|
echo '<tr>';
|
|
echo '<td>'.$lang['srv_inv_dashboard_tbl_finished'].'</td>';
|
|
echo '<td>'.(int)$recipients_by_status['finished'].'</td>';
|
|
echo '<td class="red">'.Common::formatNumberSimple(((int)$recipients_by_status['send'] > 0 ? (int)$recipients_by_status['finished']*100/(int)$recipients_by_status['send'] : 0),0,'%').'</td>';
|
|
echo '<td class="">'.Common::formatNumberSimple(((int)$recipients_by_status['contacted'] > 0 ? (int)$recipients_by_status['finished']*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</td>';
|
|
echo '</tr>';
|
|
echo '</table>';
|
|
echo '</div>';
|
|
echo '</fieldset>';
|
|
}
|
|
|
|
|
|
// Sumarni pregled po anketarjih
|
|
echo '<fieldset class="inv_fieldset"><legend>'.$lang['srv_telephone_dashboard_legend_anketar'].Help::display('srv_telefon_anketarji').':</legend>';
|
|
echo '<div class="inv_filedset_inline_div">';
|
|
echo '<table class="inv_dashboard_table">';
|
|
|
|
echo '<tr>';
|
|
echo '<th>'.$lang['srv_telephone_call_anketar'].'</th>';
|
|
echo '<th>'.$lang['srv_statistic_answer_state_frequency'].'</th>';
|
|
echo '<th>'.$lang['srv_statistic_answer_state_percent'].'</th>';
|
|
echo '</tr>';
|
|
|
|
# Loop cez vse anketarje
|
|
$d = new Dostop();
|
|
$all_users = $d->getUsersDostop();
|
|
foreach($all_users as $user){
|
|
echo '<tr>';
|
|
echo '<td>'.$user['name'].' '.$user['surname'].' <span class="gray">('.$user['email'].')</span></td>';
|
|
echo '<td>'.(int)$statusi_anketar[$user['id']].'</td>';
|
|
echo '<td>'.Common::formatNumberSimple(((int)$statusi_anketar[$user['id']] > 0 ? (int)$statusi_anketar[$user['id']]*100/(int)$recipients_by_status['contacted'] : 0),0,'%').'</td>';
|
|
echo '</tr>';
|
|
}
|
|
|
|
echo '<tr class="semi-bold">';
|
|
echo '<td>'.$lang['srv_telephone_dashboard_all_contacted'].'</td>';
|
|
echo '<td>'.(int)$contacted .'</td>';
|
|
echo '<td>'.((int)$contacted > 0 ? '100%' : '0%').'</td>';
|
|
echo '</tr>';
|
|
|
|
echo '</table>';
|
|
echo '</div>';
|
|
echo '</fieldset>';
|
|
|
|
} else {
|
|
echo '<p class="bottom32">'.$lang['srv_telephone_no_respondents'].'</p>';
|
|
}
|
|
}
|
|
|
|
function recipientsLists() {
|
|
|
|
if (isset($_POST['pid'])) {
|
|
$pid = (int)$_POST['pid'];
|
|
} else {
|
|
$pid = -1;
|
|
}
|
|
|
|
list($recipients_list,$fields) = $this->getRecipientsProfile($pid);
|
|
$this->addRecipientsView($fields,$recipients_list);
|
|
}
|
|
|
|
function getRecipientsProfile($pid) {
|
|
global $lang, $global_user_id;
|
|
|
|
$fields = array();
|
|
$recipients_list=null;
|
|
session_start();
|
|
# če ne obstaja začasen seznam ga naredimo (praznega) pid=-1
|
|
if (!isset($_SESSION['phn_rec_profile'][$this->sid])) {
|
|
$_SESSION['phn_rec_profile'][$this->sid] = array(
|
|
'pid'=>-1,
|
|
'name'=>$lang['srv_invitation_new_templist'],
|
|
'fields'=>'phone',
|
|
'respondents'=>'',
|
|
'comment'=>$lang['srv_invitation_new_templist']);
|
|
}
|
|
|
|
#polovimo emaile in poljaiz seznama
|
|
if ( $pid > 0) {
|
|
# če imamo pid in je večji kot nič polovimo podatke iz tabele
|
|
$sql_string = "SELECT fields,respondents FROM srv_invitations_recipients_profiles WHERE pid = '".$pid."'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
$sql_row = mysqli_fetch_assoc($sql_query);
|
|
if (trim($sql_row['respondents']) != '') {
|
|
$recipients_list = explode("\n",trim($sql_row['respondents']));
|
|
}
|
|
$_fields = explode(",",$sql_row['fields']);
|
|
if (count($_fields) > 0) {
|
|
foreach ($_fields AS $field) {
|
|
$fields[] = 'inv_field_'.$field;
|
|
}
|
|
}
|
|
} else if ($pid == -1) {
|
|
# začasen profil iz seje
|
|
$_fields = explode(",",$_SESSION['phn_rec_profile'][$this->sid]['fields']);
|
|
if (count($_fields) > 0) {
|
|
foreach ($_fields AS $field) {
|
|
$fields[] = 'inv_field_'.$field;
|
|
}
|
|
}
|
|
if (trim($_SESSION['phn_rec_profile'][$this->sid]['respondents']) != '') {
|
|
$recipients_list = explode("\n",trim($_SESSION['phn_rec_profile'][$this->sid]['respondents']));
|
|
}
|
|
|
|
} else {
|
|
$recipients_list[] = '';
|
|
$fields[]= 'inv_field_phone';
|
|
}
|
|
|
|
return array($recipients_list,$fields);
|
|
|
|
}
|
|
|
|
function addRecipientsView( $fields = array(), $recipients_list=null) {
|
|
#prikažemo vmesnik za dodajanje respondentov
|
|
global $lang;
|
|
|
|
echo '<div id="inv_import">';
|
|
$this->displayAddRecipientsView($fields, $recipients_list);
|
|
echo '</div>'; # id="inv_import"
|
|
}
|
|
|
|
function displayAddRecipientsView( $fields = array(), $recipients_list=null) {
|
|
global $lang, $site_path, $site_url;
|
|
$field_list = array();
|
|
# odvisno od tipa sporočil prikažemo različna polja
|
|
# Personalizirano e-poštno vabilo
|
|
|
|
$default_fields = array(
|
|
'inv_field_phone' => count($fields) == 0 ? 1 : 0,
|
|
'inv_field_firstname' => 0,
|
|
'inv_field_lastname' => 0,
|
|
'inv_field_email' => 0,
|
|
'inv_field_password' => 0,
|
|
'inv_field_salutation' => 0,
|
|
'inv_field_custom' => 0,
|
|
);
|
|
|
|
# skreiramo nov vrstni red polj
|
|
if (count($fields) > 0) {
|
|
foreach ($fields as $key=>$field) {
|
|
$field_list[$field] = 1;
|
|
if (isset($default_fields[$field])) {
|
|
unset($default_fields[$field]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($default_fields) > 0) {
|
|
foreach ($default_fields as $key =>$field) {
|
|
$field_list[$key] = $field;
|
|
unset($default_fields[$key]);
|
|
}
|
|
}
|
|
$import_type = isset($_POST['import_type']) ? (int)$_POST['import_type'] : 2;
|
|
session_start();
|
|
# profili respondentov
|
|
echo '<div id="inv_recipients_profiles_holder">';
|
|
|
|
echo '<p>'.$lang['srv_inv_recipient_select_list'].'</p>';
|
|
|
|
$this->listRecipientsProfiles();
|
|
echo '</div>'; # id=inv_recipients_profiles_holder
|
|
|
|
echo '<fieldset id="inv_import_list_container"><legend>'.$lang['srv_inv_recipiens_from'].'</legend>';
|
|
|
|
$sqlSysMapping = sisplet_query("SELECT * FROM srv_invitations_mapping WHERE sid = '$this->sid'");
|
|
if (mysqli_num_rows($sqlSysMapping) > 0) {
|
|
$sysUserToAddQuery = sisplet_query("SELECT count(*) FROM srv_user where ank_id='".$this->sid."' AND inv_res_id IS NULL AND deleted='0'");
|
|
list($sysUserToAdd) = mysqli_fetch_row($sysUserToAddQuery);
|
|
}
|
|
|
|
/*echo '<span><input name="inv_import_type" id="inv_import_type2" type="radio" value="2" checked="checked" autocomplete="off"><label for="inv_import_type2">'.$lang['srv_inv_recipiens_from_list'].'</label></span>';
|
|
echo '<span><input name="inv_import_type" id="inv_import_type2" type="radio" value="2" onclick="inv_change_import_type();"'.($import_type == 2 ? ' checked="checked"' : '').' autocomplete="off"><label for="inv_import_type2">'.$lang['srv_inv_recipiens_from_list'].'</label></span>';
|
|
echo '<span><input name="inv_import_type" id="inv_import_type1" type="radio" value="1" onclick="inv_change_import_type();"'.($import_type == 1 ? ' checked="checked"' : '').' autocomplete="off"><label for="inv_import_type1">'.$lang['srv_inv_recipiens_from_file'].'</label></span>';
|
|
echo '<span><input name="inv_import_type" id="inv_import_type3" type="radio" value="3" onclick="inv_change_import_type();"'.($import_type == 3 ? ' checked="checked"' : '').' autocomplete="off"><label for="inv_import_type3">'.$lang['srv_inv_recipiens_from_system']
|
|
.($sysUserToAdd > 0 ? ' ('.$sysUserToAdd.')' : '').'</label></span>';
|
|
echo Help::display('inv_recipiens_from_system');*/
|
|
|
|
if ($import_type == 3) {
|
|
#$this->displayFromSystemVariables();
|
|
$this->createSystemVariablesMapping();
|
|
} else {
|
|
|
|
# sporočilo za personalizirana e-vabila in respondente iz baze
|
|
echo '<p>'.$lang['srv_inv_recipiens_field_note'].'</p>';
|
|
echo '<div id="inv_field_container">';
|
|
echo '<ul class="connectedSortable">';
|
|
$field_lang = array();
|
|
if (count($field_list ) > 0) {
|
|
foreach ($field_list AS $field => $checked) {
|
|
# ali je polje izbrano ( če imamo personalizirano e-vabilo, moramo nujno imeti polje email
|
|
$is_selected = ($checked == 1 ) ? true : false;
|
|
|
|
# če je polje obkljukano
|
|
$css = $is_selected ? ' class="inv_field_enabled"' : '';
|
|
$label_for = ' for="'.$field.'_chk"';
|
|
|
|
echo '<li id="'.$field.'"'.$css.'>';
|
|
echo '<input id="'.$field.'_chk" type="checkbox" class="inv_checkbox' . $hidden_checkbox . '"'.($is_selected == true ? ' checked="checked"' : '').'>';
|
|
echo '<label'.$label_for.'>'.$lang['srv_'.$field].'</label>';
|
|
echo '</li>';
|
|
|
|
if ($is_selected == 1) {
|
|
$field_lang[] = $lang['srv_'.$field];
|
|
}
|
|
}
|
|
}
|
|
echo '</ul>';
|
|
echo '</div>';
|
|
echo '<script type="text/javascript">initTelephoneConnectedSortable();</script>';
|
|
|
|
# iz seznama
|
|
echo '<div id="inv_import_list"'.($import_type != 1 ? '' : ' class="hidden"').'>' ;
|
|
echo '<p>'.$lang['srv_inv_recipiens_email_note'].'</p>';
|
|
echo '<p class="top16">'.$lang['srv_inv_recipiens_sample2'].'</p>';
|
|
echo '<p class="top16 gray italic">'.$lang['srv_telephone_add_sample'].'</p>';
|
|
|
|
echo '<p class="top16">'.$lang['srv_inv_recipiens_fields'].' <span id="inv_field_list" class="bold inv_type_0">';
|
|
echo implode(',',$field_lang);
|
|
echo '</span>';
|
|
|
|
echo '<textarea id="inv_recipients_list" name="inv_recipients_list">';
|
|
if (is_array($recipients_list) && count($recipients_list) > 0 ) {
|
|
echo implode("\n",$recipients_list);
|
|
}
|
|
echo '</textarea>';
|
|
|
|
#podatki o profilu
|
|
$ppid = isset($_POST['pid']) ? (int)$_POST['pid'] : -1;
|
|
|
|
echo '<span class="floatLeft">';
|
|
if ((int)$ppid > 0) {
|
|
# polovimo podatke profila
|
|
$sql_string = "SELECT rp.*, u.name, u.surname FROM srv_invitations_recipients_profiles AS rp LEFT JOIN users AS u ON rp.uid = u.id WHERE rp.pid = '".(int)$ppid."'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
$sql_row = mysqli_fetch_assoc($sql_query);
|
|
|
|
$avtor = array();
|
|
if (trim($sql_row['name'])) {
|
|
$avtor[] = trim ($sql_row['name']);
|
|
}
|
|
if (trim($sql_row['surname'])) {
|
|
$avtor[] = trim ($sql_row['surname']);
|
|
}
|
|
if ( count($avtor) > 0 ) {
|
|
echo '<div class="gray">'.$lang['srv_inv_recipiens_list_created_by'].implode(' ',$avtor).'</div>';
|
|
}
|
|
if ( count($avtor) > 0 ) {
|
|
echo '<div class="gray" title="'.date("d.m.Y H:i:s",strtotime($sql_row['insert_time'])).'">'.$lang['srv_inv_recipiens_list_created_day'].date("d.m.Y",strtotime($sql_row['insert_time'])).'</div>';
|
|
}
|
|
echo '<div class="gray" title="'.strip_tags($sql_row['comment']).'" style="max-width:202px;">'.$lang['srv_inv_recipiens_list_comment'].trim (strip_tags($sql_row['comment'])).'</div>';
|
|
|
|
} else {
|
|
echo '<div class="gray">'.$lang['srv_inv_recipiens_temporary_list'].'</div>';
|
|
}
|
|
echo '</span>';
|
|
|
|
echo '</div>'; # id=inv_import_list
|
|
|
|
}
|
|
echo '<div class="button_holder">';
|
|
# če je začasen avtor, ne ponudimo shrani
|
|
if ((int)$ppid != 0) {
|
|
echo '<button class="medium white-blue" onclick="phnSaveProfile(); return false;">'.$lang['srv_telephone_save'].'</button>';
|
|
}
|
|
echo '<button class="medium white-blue" onclick="phnGetNewProfileName(); return false;">'.$lang['srv_telephone_save_new'].'</button>';
|
|
# če že imamo prejemnike v bazi ponudimo gumb naprej
|
|
echo '<button class="medium blue" onclick="phn_add_recipients(); return false;">'.$lang['srv_telephone_add'].'</button>';
|
|
echo '</div>';
|
|
|
|
echo '</fieldset>'; # id=inv_import_list_container
|
|
echo '</div>'; # id=inv_import
|
|
}
|
|
|
|
function listRecipientsProfiles() {
|
|
global $lang, $global_user_id;
|
|
$ppid = isset($_POST['pid']) ? (int)$_POST['pid'] : -1;
|
|
# polovimo vse profile
|
|
$array_profiles = array();
|
|
session_start();
|
|
# če obstaja seznam iz seje za to anketo
|
|
if (isset($_SESSION['phn_rec_profile'][$this->sid])) {
|
|
$array_profiles[-1] = array('name' => $_SESSION['phn_rec_profile'][$this->sid]['name']);
|
|
}
|
|
$array_profiles[0] = array('name' => $lang['srv_temp_profile_author']);
|
|
$onlyThisSurvey = (isset($_SESSION['inv_rec_only_this_survey']) && $_SESSION['inv_rec_only_this_survey'] == false) ? 0 : 1;
|
|
if ($onlyThisSurvey == 0) {
|
|
#id-ji profilov do katerih lahko dostopamo
|
|
$sql_string = "SELECT name, pid FROM srv_invitations_recipients_profiles WHERE uid in('".$global_user_id."') OR pid IN (SELECT DISTINCT pid FROM srv_invitations_recipients_profiles_access where uid = '$global_user_id')";
|
|
$sql_query = sisplet_query($sql_string);
|
|
} else {
|
|
# 1
|
|
$sql_string = "SELECT name, pid FROM srv_invitations_recipients_profiles WHERE from_survey = '$this->sid'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
}
|
|
|
|
$sql_query = sisplet_query($sql_string);
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
|
|
$array_profiles[$sql_row['pid']] = array('name' => $sql_row['name']);
|
|
}
|
|
echo '<div id="phn_import_list_profiles">';
|
|
|
|
echo '<ol>';
|
|
foreach ($array_profiles AS $_pid => $profile) {
|
|
echo '<li pid="'.$_pid.'" class="'.($ppid === $_pid ? 'active' : '').'"'
|
|
.' onclick="showPhnList(\''.$_pid.'\');" >';
|
|
echo $profile['name'];
|
|
echo '</li>';
|
|
}
|
|
echo '</ol>';
|
|
echo '</div>';
|
|
if ((int)$ppid > 0) {
|
|
# polovimo še ostale porfile
|
|
$sql_string = "SELECT pid FROM srv_invitations_recipients_profiles WHERE pid='".(int)$ppid."' AND from_survey ='".$this->sid."' ";
|
|
$sql_query = sisplet_query($sql_string);
|
|
|
|
if (mysqli_num_rows($sql_query) > 0) {
|
|
# če je iz iste ankete, potem lahko urejamo
|
|
echo '<a href="#" onclick="phnDeleteProfile();" title="'.$lang['srv_inv_recipients_delete_profile'].'">'.$lang['srv_inv_recipients_delete_profile'].'</a><br/>';
|
|
echo '<a href="#" onclick="phnEditProfile();" title="'.$lang['srv_inv_recipients_edit_profile'].'">'.$lang['srv_inv_recipients_edit_profile'].'</a><br/>';
|
|
}
|
|
}
|
|
}
|
|
|
|
function displayNavigation() {
|
|
global $lang;
|
|
|
|
# če je anketar ne vidi navigacije
|
|
if ($this->isAnketar == true) {
|
|
|
|
}
|
|
else {
|
|
|
|
if (!isset($_POST['noNavi']) || (isset($_POST['noNavi']) && $_POST['noNavi'] != 'true')) {
|
|
$_sub_action = $_GET['m'];
|
|
|
|
$active_step[] = array(1=>'',2=>'',3=>'',4=>'',5=>'',6=>'',7=>'');
|
|
|
|
switch ($_sub_action) {
|
|
case 'phn_status':
|
|
$active_step['1'] = ' active';
|
|
break;
|
|
|
|
case 'recipients_lists':
|
|
$active_step['2'] = ' active';
|
|
break;
|
|
|
|
case 'view_recipients':
|
|
case 'addRecipients':
|
|
$active_step['3'] = ' active';
|
|
break;
|
|
|
|
case 'goToUser':
|
|
case 'start_call':
|
|
case 'call':
|
|
$active_step['4'] = ' active';
|
|
break;
|
|
|
|
case 'settings':
|
|
case 'settings_save':
|
|
$active_step['5'] = ' active';
|
|
break;
|
|
|
|
case 'calling_list':
|
|
$active_step['6'] = ' active';
|
|
break;
|
|
|
|
default:
|
|
$active_step['1'] = ' active';
|
|
break;
|
|
}
|
|
|
|
$spaceChar = ' ';
|
|
|
|
if ($this->telephoneSprId) {
|
|
#space
|
|
echo '<div class="phn_step_nav">';
|
|
|
|
#navigacija
|
|
echo '<div class="phn_step menu'.$active_step[2].'" onClick="window.location.href=\''.$this->addUrl('recipients_lists').'\';return false;">';
|
|
echo '<div class="square">1</div>';
|
|
echo '<div class="label">'.$lang['srv_telephone_navi_add'].'</div>';
|
|
echo '</div>';
|
|
|
|
echo '<div class="inv_space"></div>';
|
|
|
|
|
|
echo '<div class="phn_step menu'.$active_step[3].'" '. ($disabled == false ? 'onClick="window.location.href=\''.$this->addUrl('view_recipients').'\';return false;"' : '' ).'>';
|
|
echo '<div class="square">2</div>';
|
|
echo '<div class="label">'.$lang['srv_telephone_navi_view'].'</div>';
|
|
echo '</div>';
|
|
|
|
echo '<div class="inv_space"></div>';
|
|
|
|
|
|
echo '<div class="phn_step menu'.$css_disabled.$active_step[4].'" onClick="window.location.href=\''.$this->addUrl('start_call').'\';return false;">';
|
|
echo '<div class="square">3</div>';
|
|
echo '<div class="label" >'.$lang['srv_telephone_navi_start_call'].'</div>';
|
|
echo '</div>';
|
|
|
|
echo '</div>';
|
|
|
|
#space
|
|
|
|
echo '<div id="tel_settings_holder">';
|
|
|
|
// Cakalni seznam
|
|
echo '<div class="phn_step_nav'.$active_step[6].'">';
|
|
echo '<div class="phn_step settings">';
|
|
echo '<a href="'.$this->addUrl('calling_list').'">';
|
|
echo '<span class="faicon fa-address-book"></span>';
|
|
echo '<span class="label">'.$lang['srv_telephone_navi_waiting_list'].'</span>';
|
|
echo '</a>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
}
|
|
else {
|
|
echo '<div id="tel_settings_holder">';
|
|
}
|
|
|
|
// Nastavitve
|
|
echo '<div class="phn_step_nav'.$active_step[5].'">';
|
|
echo '<div class="phn_step settings">';
|
|
echo '<a href="'.$this->addUrl('settings').'">';
|
|
echo '<span class="faicon fa-cog"></span>';
|
|
echo '<span class="label">'.$lang['srv_telephone_navi_settings'].'</span>';
|
|
echo '</a>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
|
|
echo '<div class="phn_step_nav'.$active_step[1].'">';
|
|
echo '<div class="phn_step settings">';
|
|
echo '<a href="'.$this->addUrl('dashboard').'">';
|
|
echo '<span class="faicon fa-chart-line"></span>';
|
|
echo '<span class="label">'.$lang['srv_telephone_navi_dashboard'].'</span>';
|
|
echo '</a>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
|
|
echo '</div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Seznam stevilk ki so v vrsti za klicanje
|
|
function callingList() {
|
|
global $lang;
|
|
global $site_url;
|
|
|
|
// Najprej cakalna vrsta (stevilke ki se bodo prikazale kasneje)
|
|
$this->waitingList();
|
|
|
|
// Se vrsta stevilk ki se trenutno klicejo
|
|
echo '<div id="tel_line_wrap">';
|
|
echo '<h2>'.$lang['srv_telephone_navi_calling_list'].'</h2>';
|
|
|
|
// Dobimo seznam vseh ki se niso bili klicani
|
|
$toCall = $this->getAllNumbers();
|
|
|
|
|
|
if (count($toCall) > 0) {
|
|
|
|
# Katera polja prikazujemo v seznamu prejemnikov
|
|
$fields = array();
|
|
$default_fields = array(
|
|
'phone' => 1,
|
|
'email' => 0,
|
|
'password' => 0,
|
|
'firstname' => 0,
|
|
'lastname' => 0,
|
|
'salutation' => 0,
|
|
'custom' => 0,
|
|
);
|
|
|
|
$sql_select_fields = array();
|
|
$fields['ps_icon'] = 1;
|
|
$fields['schstatus'] = 1;
|
|
|
|
$sql_select_fields[] = " i.last_status as ps_icon";
|
|
$sql_select_fields[] = " i.last_status as last_status";
|
|
$sql_select_fields[] = " scc.rec_id AS sccusr";
|
|
$sql_select_fields[] = " scs.call_time AS schedule_call_time";
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
$sql_select_fields[] = " sch.status AS schstatus";
|
|
$sql_select_fields[] = " scm.comment AS comment";
|
|
|
|
foreach($toCall as $usr_id => $phone){
|
|
|
|
#koliko zapisov bi morali prikazovati
|
|
$sql_query_filterd_all = sisplet_query("SELECT i.* FROM srv_invitations_recipients AS i WHERE i.ank_id='".$this->sid."' AND i.id='".$usr_id."'");
|
|
|
|
$sql_row = mysqli_fetch_assoc($sql_query_filterd_all);
|
|
foreach ($default_fields AS $key => $value) {
|
|
# če polje še ni dodano in če ni prazno, ga dodamo
|
|
if ($fields[$key] == 0 && isset($sql_row[$key]) && trim($sql_row[$key]) != '') {
|
|
$fields[$key] = 1;
|
|
$sql_select_fields[] = 'i.'.$key;
|
|
}
|
|
}
|
|
}
|
|
|
|
$fields['schedule_call_time'] = 1;
|
|
$fields['last_status'] = 1;
|
|
$fields['comment'] = 1;
|
|
$fields['date_inserted'] = 1;
|
|
$fields['usr_email'] = 1;
|
|
$fields['list_id'] = 1;
|
|
|
|
# dodamo še ostala polja
|
|
$sql_select_fields[] = 'i.last_status';
|
|
$sql_select_fields[] = 'i.date_inserted';
|
|
$sql_select_fields[] = 'i.list_id';
|
|
$sql_select_fields[] = 'usrs.email AS usr_email';
|
|
|
|
#dodamo paginacijo in poiščemo zapise
|
|
$page = isset($_GET['page']) ? $_GET['page'] : '1';
|
|
$limit_start = ($page * REC_ON_PAGE) - REC_ON_PAGE;
|
|
|
|
|
|
# polovimo sezname
|
|
$lids = array();
|
|
$sql_string_users = "SELECT i.list_id FROM srv_invitations_recipients AS i WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0' AND TRIM(phone) !='' GROUP BY i.list_id ORDER BY i.id LIMIT $limit_start,".REC_ON_PAGE.'';
|
|
$sql_query_users = sisplet_query($sql_string_users);
|
|
while ($row_users = mysqli_fetch_assoc($sql_query_users)) {
|
|
$lids[] = $row_users['list_id'];
|
|
}
|
|
|
|
#seznami
|
|
$lists = array();
|
|
$lists['-1'] = array('name'=>$lang['srv_invitation_new_templist']);
|
|
$lists['0'] = array('name'=>$lang['srv_invitation_new_templist_author']);
|
|
if (count($lids) > 0 ) {
|
|
$sql_string_lists = "SELECT name, pid from srv_invitations_recipients_profiles WHERE pid IN(".implode(',',$lids).") ";
|
|
$sql_query_lists = sisplet_query($sql_string_lists);
|
|
while ($row_lists = mysqli_fetch_assoc($sql_query_lists)) {
|
|
$lists[$row_lists['pid']] = array('name'=>$row_lists['name']);
|
|
}
|
|
}
|
|
|
|
// Stevilo stevilk v vrsti
|
|
echo '<div id="srv_invitation_note">'.$lang['srv_telephone_calling_list_count'].': '.count($toCall).'</div>';
|
|
echo '</div>';
|
|
|
|
// Izrisemo tabelo
|
|
echo '<div class="table-horizontal-scroll-wrapper1">';
|
|
echo '<div class="table-horizontal-scroll-wrapper2">';
|
|
echo '<table id="tbl_recipients_list" class="phone">';
|
|
|
|
// Header tabele
|
|
echo '<tr>';
|
|
echo '<th class="tbl_icon"></th>';
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
if ($fkey == 'sent' || $fkey == 'responded' || $fkey == 'unsubscribed'){
|
|
#echo '<th class="anl_ac tbl_icon_'.$fkey.' inv_'.$fkey.'_1" title="'.$lang['srv_inv_recipients_'.$fkey].'"> </th>';
|
|
echo '<th class="anl_ac tbl_icon_'.$fkey.'" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'ps_icon' ) {
|
|
echo '<th class="anl_ac tbl_icon" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'date_inserted' || $fkey == 'schedule_call_time' ) {
|
|
echo '<th class="anl_ac tbl_date" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'schstatus' ) {
|
|
echo '<th class="anl_ac" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'last_status' ) {
|
|
echo '<th class="anl_ac" title="'.$lang['srv_inv_recipients_last_status'].'">'.$lang['srv_inv_recipients_last_status'].'</th>';
|
|
} else {
|
|
echo '<th title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
|
|
// Podatki tabele
|
|
$cnt = 1;
|
|
foreach($toCall as $usr_id => $phone){
|
|
|
|
$sql_query_filterd = sisplet_query("SELECT i.id, ".implode(',',$sql_select_fields)." FROM srv_invitations_recipients AS i"
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id FROM srv_telephone_current) AS scc ON scc.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id, call_time FROM srv_telephone_schedule) AS scs ON scs.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
." LEFT OUTER JOIN (SELECT rsch.status, rsch.rec_id FROM srv_telephone_history AS rsch INNER JOIN (SELECT MAX(id) as iid, rec_id FROM srv_telephone_history GROUP BY rec_id) as insch ON insch.iid = rsch.id) AS sch ON sch.rec_id = i.id"
|
|
|
|
# polovimo še morebitne komentarje
|
|
." LEFT OUTER JOIN (SELECT rec_id,comment FROM srv_telephone_comment) AS scm ON scm.rec_id = i.id"
|
|
|
|
# polovimo še kdo je dodal
|
|
." LEFT OUTER JOIN (SELECT id, email FROM users) AS usrs ON usrs.id = i.inserted_uid"
|
|
|
|
." WHERE i.ank_id='".$this->sid."' AND i.id='".$usr_id."'");
|
|
if (!$sql_query_filterd) echo mysqli_error($GLOBALS['connect_db']);
|
|
|
|
$sql_row = mysqli_fetch_assoc($sql_query_filterd);
|
|
|
|
|
|
$icon = ' phn_ico_status_go';
|
|
switch ($sql_row['schstatus']) {
|
|
case 'U':
|
|
$icon = ' phn_ico_status';
|
|
break;
|
|
case 'R':
|
|
$icon = ' phn_ico_status_key';
|
|
break;
|
|
case 'N': #ga ni
|
|
case 'Z': #zaseden
|
|
case 'T': #zmenjen
|
|
case 'D': #prelozen
|
|
$icon = ' phn_ico_status_error';
|
|
break;
|
|
|
|
default:
|
|
;
|
|
break;
|
|
}
|
|
# če je odjavljen damo isto ikonco za zaklepanje
|
|
if ((int)$row_users['unsubscribed'] == 1) {
|
|
$icon = ' phn_ico_status_key';
|
|
}
|
|
|
|
echo '<tr>';
|
|
echo '<td>'.$cnt.'</td>';
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
switch ($fkey) {
|
|
|
|
case 'ps_icon':
|
|
echo '<td class="anl_ac'.$icon.'" onclick="phnGoToUser(\''.$sql_row['id'].'\')">';
|
|
echo '<span class="faicon blue phone pointer"></span>';
|
|
echo '</td>';
|
|
break;
|
|
case 'last_status':
|
|
echo '<td class="ovwerflowHidden" title="'.$lang['srv_userstatus_'.$sql_row[$fkey]].'">';
|
|
echo '('.$sql_row[$fkey].') - '.$lang['srv_userstatus_'.$sql_row[$fkey]].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$row_users[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'comment':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" style="max-width:100px;" title="'.str_replace("<br>","\n",strip_tags($sql_row['comment'])).'">';
|
|
echo substr(strip_tags($sql_row['comment']),0,50).'</td>';
|
|
break;
|
|
case 'date_inserted':
|
|
case 'schedule_call_time':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" title="'.$sql_row[$fkey].'">';
|
|
echo $sql_row[$fkey].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$sql_row[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'schstatus':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" title="'.$lang['srv_telephone_status_'.$sql_row[$fkey]].'">';
|
|
echo $lang['srv_telephone_status_'.$sql_row[$fkey]];
|
|
echo '</td>';
|
|
break;
|
|
case 'email':
|
|
echo '<td>';
|
|
echo '<span class="as_link" onclick="showRecipientTracking(\''.$sql_row['id'].'\'); return false;">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
echo '</span>';
|
|
echo '</td>';
|
|
break;
|
|
case 'list_id':
|
|
echo '<td>';
|
|
if ((int)$sql_row[$fkey] > 0) {
|
|
if ($lists[$sql_row[$fkey]]['name'] != '') {
|
|
echo '<a href="#" onclick="$(\'#globalSettingsInner\').load(\'ajax.php?t=invitations&a=use_recipients_list\', {anketa:srv_meta_anketa_id, pid:'.(int)$sql_row[$fkey].' });">'.$lists[$sql_row[$fkey]]['name'].'</a>';
|
|
} else {
|
|
echo $lang['srv_inv_recipient_list_deleted'];
|
|
}
|
|
} else {
|
|
echo $lists[$sql_row[$fkey]]['name'];
|
|
}
|
|
echo '</td>';
|
|
break;
|
|
default:
|
|
echo '<td class="tbl_inv_left">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
|
|
echo '</td>';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
@ob_flush();
|
|
|
|
$cnt++;
|
|
}
|
|
|
|
echo '</table>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
}
|
|
else {
|
|
echo $lang['srv_telephone_calling_list_empty'];
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
// Seznam stevilk ki so v vrsti za klicanje
|
|
function waitingList() {
|
|
global $lang;
|
|
global $site_url;
|
|
|
|
echo '<div id="tel_line_wrap0">';
|
|
echo '<h2>'.$lang['srv_telephone_navi_waiting_list'].'</h2>';
|
|
|
|
|
|
// Dobimo seznam vseh ki so odlozeni (bodo klicani kasneje)
|
|
$toCall = $this->getAllNumbersWaiting();
|
|
|
|
|
|
if (count($toCall) > 0) {
|
|
|
|
# Katera polja prikazujemo v seznamu prejemnikov
|
|
$fields = array();
|
|
$default_fields = array(
|
|
'phone' => 1,
|
|
'email' => 0,
|
|
'password' => 0,
|
|
'firstname' => 0,
|
|
'lastname' => 0,
|
|
'salutation' => 0,
|
|
'custom' => 0,
|
|
);
|
|
|
|
$sql_select_fields = array();
|
|
$fields['ps_icon'] = 1;
|
|
$fields['schstatus'] = 1;
|
|
|
|
$sql_select_fields[] = " i.last_status as ps_icon";
|
|
$sql_select_fields[] = " i.last_status as last_status";
|
|
$sql_select_fields[] = " scc.rec_id AS sccusr";
|
|
$sql_select_fields[] = " scs.call_time AS schedule_call_time";
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
$sql_select_fields[] = " sch.status AS schstatus";
|
|
$sql_select_fields[] = " scm.comment AS comment";
|
|
|
|
foreach($toCall as $usr_id => $phone){
|
|
|
|
#koliko zapisov bi morali prikazovati
|
|
$sql_query_filterd_all = sisplet_query("SELECT i.* FROM srv_invitations_recipients AS i WHERE i.ank_id='".$this->sid."' AND i.id='".$usr_id."'");
|
|
|
|
$sql_row = mysqli_fetch_assoc($sql_query_filterd_all);
|
|
foreach ($default_fields AS $key => $value) {
|
|
# če polje še ni dodano in če ni prazno, ga dodamo
|
|
if ($fields[$key] == 0 && isset($sql_row[$key]) && trim($sql_row[$key]) != '') {
|
|
$fields[$key] = 1;
|
|
$sql_select_fields[] = 'i.'.$key;
|
|
}
|
|
}
|
|
}
|
|
|
|
$fields['schedule_call_time'] = 1;
|
|
$fields['last_status'] = 1;
|
|
$fields['comment'] = 1;
|
|
$fields['date_inserted'] = 1;
|
|
$fields['usr_email'] = 1;
|
|
$fields['list_id'] = 1;
|
|
|
|
# dodamo še ostala polja
|
|
$sql_select_fields[] = 'i.last_status';
|
|
$sql_select_fields[] = 'i.date_inserted';
|
|
$sql_select_fields[] = 'i.list_id';
|
|
$sql_select_fields[] = 'usrs.email AS usr_email';
|
|
|
|
#dodamo paginacijo in poiščemo zapise
|
|
$page = isset($_GET['page']) ? $_GET['page'] : '1';
|
|
$limit_start = ($page * REC_ON_PAGE) - REC_ON_PAGE;
|
|
|
|
|
|
# polovimo sezname
|
|
$lids = array();
|
|
$sql_string_users = "SELECT i.list_id FROM srv_invitations_recipients AS i WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0' AND TRIM(phone) !='' GROUP BY i.list_id ORDER BY i.id LIMIT $limit_start,".REC_ON_PAGE.'';
|
|
$sql_query_users = sisplet_query($sql_string_users);
|
|
while ($row_users = mysqli_fetch_assoc($sql_query_users)) {
|
|
$lids[] = $row_users['list_id'];
|
|
}
|
|
|
|
#seznami
|
|
$lists = array();
|
|
$lists['-1'] = array('name'=>$lang['srv_invitation_new_templist']);
|
|
$lists['0'] = array('name'=>$lang['srv_invitation_new_templist_author']);
|
|
if (count($lids) > 0 ) {
|
|
$sql_string_lists = "SELECT name, pid from srv_invitations_recipients_profiles WHERE pid IN(".implode(',',$lids).") ";
|
|
$sql_query_lists = sisplet_query($sql_string_lists);
|
|
while ($row_lists = mysqli_fetch_assoc($sql_query_lists)) {
|
|
$lists[$row_lists['pid']] = array('name'=>$row_lists['name']);
|
|
}
|
|
}
|
|
|
|
// Stevilo stevilk v vrsti
|
|
echo '<div id="srv_invitation_note">'.$lang['srv_telephone_waiting_list_count'].': '.count($toCall).'</div>';
|
|
echo '</div>';
|
|
|
|
|
|
// Izrisemo tabelo
|
|
echo '<div class="table-horizontal-scroll-wrapper1">';
|
|
echo '<div class="table-horizontal-scroll-wrapper2">';
|
|
echo '<table id="tbl_recipients_list" class="phone">';
|
|
|
|
// Header tabele
|
|
echo '<tr>';
|
|
echo '<th class="tbl_icon"> </th>';
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
if ($fkey == 'sent' || $fkey == 'responded' || $fkey == 'unsubscribed'){
|
|
#echo '<th class="anl_ac tbl_icon_'.$fkey.' inv_'.$fkey.'_1" title="'.$lang['srv_inv_recipients_'.$fkey].'"> </th>';
|
|
echo '<th class="anl_ac tbl_icon_'.$fkey.'" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'ps_icon' ) {
|
|
echo '<th class="anl_ac tbl_icon" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'date_inserted' || $fkey == 'schedule_call_time' ) {
|
|
echo '<th class="anl_ac tbl_date" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'schstatus' ) {
|
|
echo '<th class="anl_ac" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
} else if ($fkey == 'last_status' ) {
|
|
echo '<th class="anl_ac" title="'.$lang['srv_inv_recipients_last_status'].'">'.$lang['srv_inv_recipients_last_status'].'</th>';
|
|
} else {
|
|
echo '<th title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].'</th>';
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
|
|
// Podatki tabele
|
|
$cnt = 1;
|
|
foreach($toCall as $usr_id => $phone){
|
|
|
|
$sql_query_filterd = sisplet_query("SELECT i.id, ".implode(',',$sql_select_fields)." FROM srv_invitations_recipients AS i"
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id FROM srv_telephone_current) AS scc ON scc.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id, call_time FROM srv_telephone_schedule) AS scs ON scs.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
." LEFT OUTER JOIN (SELECT rsch.status, rsch.rec_id FROM srv_telephone_history AS rsch INNER JOIN (SELECT MAX(id) as iid, rec_id FROM srv_telephone_history GROUP BY rec_id) as insch ON insch.iid = rsch.id) AS sch ON sch.rec_id = i.id"
|
|
|
|
# polovimo še morebitne komentarje
|
|
." LEFT OUTER JOIN (SELECT rec_id,comment FROM srv_telephone_comment) AS scm ON scm.rec_id = i.id"
|
|
|
|
# polovimo še kdo je dodal
|
|
." LEFT OUTER JOIN (SELECT id, email FROM users) AS usrs ON usrs.id = i.inserted_uid"
|
|
|
|
." WHERE i.ank_id='".$this->sid."' AND i.id='".$usr_id."'");
|
|
if (!$sql_query_filterd) echo mysqli_error($GLOBALS['connect_db']);
|
|
|
|
$sql_row = mysqli_fetch_assoc($sql_query_filterd);
|
|
|
|
|
|
$icon = ' phn_ico_status_go';
|
|
switch ($sql_row['schstatus']) {
|
|
case 'U':
|
|
$icon = ' phn_ico_status';
|
|
break;
|
|
case 'R':
|
|
$icon = ' phn_ico_status_key';
|
|
break;
|
|
case 'N': #ga ni
|
|
case 'Z': #zaseden
|
|
case 'T': #zmenjen
|
|
case 'D': #prelozen
|
|
$icon = ' phn_ico_status_error';
|
|
break;
|
|
|
|
default:
|
|
;
|
|
break;
|
|
}
|
|
# če je odjavljen damo isto ikonco za zaklepanje
|
|
if ((int)$row_users['unsubscribed'] == 1) {
|
|
$icon = ' phn_ico_status_key';
|
|
}
|
|
|
|
echo '<tr>';
|
|
echo '<td>'.$cnt.'</td>';
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
switch ($fkey) {
|
|
|
|
case 'ps_icon':
|
|
echo '<td class="anl_ac'.$icon.'" onclick="phnGoToUser(\''.$sql_row['id'].'\')">';
|
|
echo '<span class="blue faicon phone pointer"></span>';
|
|
echo '</td>';
|
|
break;
|
|
case 'last_status':
|
|
echo '<td class="ovwerflowHidden" title="'.$lang['srv_userstatus_'.$sql_row[$fkey]].'">';
|
|
echo '('.$sql_row[$fkey].') - '.$lang['srv_userstatus_'.$sql_row[$fkey]].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$row_users[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'comment':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" style="max-width:50px;" title="'.str_replace("<br>","\n",strip_tags($sql_row['comment'])).'">';
|
|
echo substr(strip_tags($sql_row['comment']),0,50).'</td>';
|
|
break;
|
|
case 'date_inserted':
|
|
case 'schedule_call_time':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" title="'.$sql_row[$fkey].'">';
|
|
echo $sql_row[$fkey].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$sql_row[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'schstatus':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" title="'.$lang['srv_telephone_status_'.$sql_row[$fkey]].'">';
|
|
echo $lang['srv_telephone_status_'.$sql_row[$fkey]];
|
|
echo '</td>';
|
|
break;
|
|
case 'email':
|
|
echo '<td>';
|
|
echo '<span class="as_link" onclick="showRecipientTracking(\''.$sql_row['id'].'\'); return false;">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
echo '</span>';
|
|
echo '</td>';
|
|
break;
|
|
case 'list_id':
|
|
echo '<td>';
|
|
if ((int)$sql_row[$fkey] > 0) {
|
|
if ($lists[$sql_row[$fkey]]['name'] != '') {
|
|
echo '<a href="#" onclick="$(\'#globalSettingsInner\').load(\'ajax.php?t=invitations&a=use_recipients_list\', {anketa:srv_meta_anketa_id, pid:'.(int)$sql_row[$fkey].' });">'.$lists[$sql_row[$fkey]]['name'].'</a>';
|
|
} else {
|
|
echo $lang['srv_inv_recipient_list_deleted'];
|
|
}
|
|
} else {
|
|
echo $lists[$sql_row[$fkey]]['name'];
|
|
}
|
|
echo '</td>';
|
|
break;
|
|
default:
|
|
echo '<td class="tbl_inv_left">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
|
|
echo '</td>';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
@ob_flush();
|
|
|
|
$cnt++;
|
|
}
|
|
|
|
echo '</table>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
}
|
|
else {
|
|
echo $lang['srv_telephone_waiting_list_empty'];
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
|
|
|
|
function addUrl($what) {
|
|
global $site_url;
|
|
|
|
if ($what == null || trim($what) == '') {
|
|
$what = 'add_recipients_view';
|
|
}
|
|
if ($what == 'clear_current') {
|
|
$what = 'call&n=clear_current';
|
|
}
|
|
$url = $site_url . 'admin/survey/index.php?anketa='.$this->sid.'&a='.A_TELEPHONE.'&m='.$what;
|
|
|
|
return $url;
|
|
}
|
|
|
|
function viewRecipients() {
|
|
global $lang, $site_url;
|
|
|
|
#preglej prejemnike
|
|
echo '<h2>'.$lang['srv_inv_edit_recipients_heading'].'</h2>';
|
|
|
|
# nastavimo filter
|
|
session_start();
|
|
$filter = $_SESSION['inv_filter']['value'];
|
|
if ($filter != '') {
|
|
$mysql_filter = " AND ("
|
|
. "i.email LIKE '%".$filter."%'"
|
|
. "OR i.firstname LIKE '%".$filter."%'"
|
|
. "OR i.lastname LIKE '%".$filter."%'"
|
|
. "OR i.password LIKE '%".$filter."%'"
|
|
. "OR i.salutation LIKE '%".$filter."%'"
|
|
. "OR i.phone LIKE '%".$filter."%'"
|
|
. "OR i.custom LIKE '%".$filter."%'"
|
|
. ")";
|
|
|
|
$mysql_filter2 = " AND ("
|
|
. "i.email LIKE '%".$filter."%'"
|
|
. "OR i.firstname LIKE '%".$filter."%'"
|
|
. "OR i.lastname LIKE '%".$filter."%'"
|
|
. "OR i.password LIKE '%".$filter."%'"
|
|
. "OR i.salutation LIKE '%".$filter."%'"
|
|
. "OR i.phone LIKE '%".$filter."%'"
|
|
. "OR i.custom LIKE '%".$filter."%'"
|
|
. "OR scm.comment LIKE '%".$filter."%'"
|
|
. ")";
|
|
}
|
|
|
|
# preštejemo koliko imamo vseh respondentov in koliko jih je brez e-maila
|
|
$sql_string_all = "SELECT id FROM srv_invitations_recipients WHERE ank_id = '".$this->sid."' AND deleted = '0' AND TRIM(phone) !=''";
|
|
$sql_query_all = sisplet_query($sql_string_all);
|
|
$count_all = mysqli_num_rows($sql_query_all);
|
|
|
|
$sql_string_withot_email = "SELECT count(*) FROM srv_invitations_recipients WHERE ank_id = '".$this->sid."' AND deleted = '0' AND email IS NULL AND sent='0'";
|
|
$sql_query_without_email = sisplet_query($sql_string_withot_email);
|
|
$sql_row_without_email = mysqli_fetch_row($sql_query_without_email);
|
|
$count_without_email = $sql_row_without_email[0];
|
|
|
|
#koliko zapisov bi morali prikazovati
|
|
$sql_string_filterd_all = "SELECT i.* FROM srv_invitations_recipients AS i WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0' AND TRIM(phone) !='' ".$mysql_filter." ORDER BY i.id";
|
|
$sql_query_filterd_all = sisplet_query($sql_string_filterd_all);
|
|
$filtred_all = mysqli_num_rows($sql_query_filterd_all);
|
|
|
|
$fields = array();
|
|
# Katera polja prikazujemo v seznamu prejemnikov
|
|
$default_fields = array(
|
|
'phone' => 1,
|
|
'email' => 0,
|
|
'password' => 0,
|
|
'firstname' => 0,
|
|
'lastname' => 0,
|
|
'salutation' => 0,
|
|
'custom' => 0,
|
|
);
|
|
|
|
$sql_select_fields = array();
|
|
$fields['ps_icon'] = 1;
|
|
$fields['schstatus'] = 1;
|
|
|
|
$sql_select_fields[] = " i.last_status as ps_icon";
|
|
$sql_select_fields[] = " i.last_status as last_status";
|
|
$sql_select_fields[] = " scc.rec_id AS sccusr";
|
|
$sql_select_fields[] = " scs.call_time AS schedule_call_time";
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
$sql_select_fields[] = " sch.status AS schstatus";
|
|
$sql_select_fields[] = " scm.comment AS comment";
|
|
|
|
# pogledamo katera polja dejansko prikazujemo
|
|
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query_filterd_all)) {
|
|
foreach ($default_fields AS $key => $value) {
|
|
# če polje še ni dodano in če ni prazno, ga dodamo
|
|
if ($fields[$key] == 0 && isset($sql_row[$key]) && trim($sql_row[$key]) != '') {
|
|
$fields[$key] = 1;
|
|
$sql_select_fields[] = 'i.'.$key;
|
|
}
|
|
}
|
|
}
|
|
|
|
$fields['schedule_call_time'] = 1;
|
|
$fields['last_status'] = 1;
|
|
$fields['comment'] = 1;
|
|
$fields['date_inserted'] = 1;
|
|
$fields['usr_email'] = 1;
|
|
$fields['list_id'] = 1;
|
|
|
|
# dodamo še ostala polja
|
|
$sql_select_fields[] = 'i.last_status';
|
|
$sql_select_fields[] = 'i.date_inserted';
|
|
$sql_select_fields[] = 'i.list_id';
|
|
$sql_select_fields[] = 'usrs.email AS usr_email';
|
|
#štetje vabil
|
|
#$fields['count_inv'] = 1;
|
|
#$sql_select_fields[] = 'count(siar.arch_id) AS count_inv';
|
|
|
|
#dodamo paginacijo in poiščemo zapise
|
|
$page = isset($_GET['page']) ? $_GET['page'] : '1';
|
|
$limit_start = ($page*REC_ON_PAGE)-REC_ON_PAGE;
|
|
|
|
#dodamo sortiranje
|
|
$sort_string = $this->getSortString();
|
|
|
|
# $sql_string_filterd = "SELECT i.id, ".implode(',',$sql_select_fields)." FROM srv_invitations_recipients AS i LEFT JOIN srv_invitations_archive_recipients AS siar ON (i.id = siar.rec_id) WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0'".$mysql_filter.' GROUP BY siar.rec_id '.$sort_string." LIMIT $limit_start,".REC_ON_PAGE;
|
|
$sql_string_filterd = "SELECT i.id, ".implode(',',$sql_select_fields)." FROM srv_invitations_recipients AS i"
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id FROM srv_telephone_current) AS scc ON scc.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, vse trenutno zacete klice
|
|
." LEFT OUTER JOIN (SELECT rec_id, call_time FROM srv_telephone_schedule) AS scs ON scs.rec_id = i.id"
|
|
|
|
# polovimo še iz baze klicev, zadnji statuse
|
|
." LEFT OUTER JOIN (SELECT rsch.status, rsch.rec_id FROM srv_telephone_history AS rsch INNER JOIN (SELECT MAX(id) as iid, rec_id FROM srv_telephone_history GROUP BY rec_id) as insch ON insch.iid = rsch.id) AS sch ON sch.rec_id = i.id"
|
|
|
|
# polovimo še morebitne komentarje
|
|
." LEFT OUTER JOIN (SELECT rec_id,comment FROM srv_telephone_comment) AS scm ON scm.rec_id = i.id"
|
|
|
|
# polovimo še kdo je dodal
|
|
." LEFT OUTER JOIN (SELECT id, email FROM users) AS usrs ON usrs.id = i.inserted_uid"
|
|
|
|
." WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0' AND TRIM(phone) !='' ".$mysql_filter2.' '.$sort_string." LIMIT $limit_start,".REC_ON_PAGE;
|
|
$sql_query_filterd = sisplet_query($sql_string_filterd);
|
|
if (!$sql_query_filterd) echo mysqli_error($GLOBALS['connect_db']);
|
|
|
|
# polovimo sezname
|
|
$lids = array();
|
|
$sql_string_users = "SELECT i.list_id FROM srv_invitations_recipients AS i WHERE i.ank_id = '".$this->sid."' AND i.deleted = '0' AND TRIM(phone) !=''".$mysql_filter." GROUP BY i.list_id ORDER BY i.id LIMIT $limit_start,".REC_ON_PAGE.'';
|
|
$sql_query_users = sisplet_query($sql_string_users);
|
|
while ($row_users = mysqli_fetch_assoc($sql_query_users)) {
|
|
$lids[] = $row_users['list_id'];
|
|
}
|
|
|
|
#seznami
|
|
$lists = array();
|
|
$lists['-1'] = array('name'=>$lang['srv_invitation_new_templist']);
|
|
$lists['0'] = array('name'=>$lang['srv_invitation_new_templist_author']);
|
|
if (count($lids) > 0 ) {
|
|
$sql_string_lists = "SELECT name, pid from srv_invitations_recipients_profiles WHERE pid IN(".implode(',',$lids).") ";
|
|
$sql_query_lists = sisplet_query($sql_string_lists);
|
|
while ($row_lists = mysqli_fetch_assoc($sql_query_lists)) {
|
|
$lists[$row_lists['pid']] = array('name'=>$row_lists['name']);
|
|
}
|
|
}
|
|
if (count($msgs) > 0) {
|
|
echo '<span class="inv_msg_note">';
|
|
foreach($msgs as $msg) {
|
|
echo '* '.$msg.'<br />';
|
|
}
|
|
echo '</span>';
|
|
}
|
|
if (count($errors) > 0) {
|
|
echo '<span class="inv_error_note">';
|
|
foreach($errors as $error) {
|
|
echo '* '.$error.'<br />';
|
|
}
|
|
echo '</span>';
|
|
}
|
|
if ($count_all > 0 ) {
|
|
|
|
echo '<div id="filter_wrap">';
|
|
|
|
// dodamo filtriranje
|
|
echo '<div id="inv_rec_filter">';
|
|
echo $lang['srv_invitation_recipients_filter'];
|
|
echo '<input id="tel_rec_filter_value" type="text" class="text large" value="'.$_SESSION['inv_filter']['value'].'" onChange="tel_filter_recipients(); return false;">';
|
|
echo '</div>';
|
|
|
|
echo '<form id="frm_inv_rec_export" name="resp_uploader" method="post" autocomplete="off">';
|
|
echo '<input type="hidden" name="anketa" id="anketa" value="'.$this->sid.'">';
|
|
echo '<input type="hidden" name="noNavi" id="noNavi" value="true">';
|
|
|
|
|
|
echo '<div id="srv_invitation_note" style="padding-top:8px;">';
|
|
if ($filter != '') {
|
|
echo '<span class="red strong">';
|
|
printf($lang['srv_inv_list_no_recipients_filter'],$filter);
|
|
echo '</span>';
|
|
}
|
|
else{
|
|
if ($count_all > 0 && mysqli_num_rows($sql_query_filterd) != $count_all )
|
|
echo $lang['srv_invitation_num_respondents_filtred'].(int)mysqli_num_rows($sql_query_filterd);
|
|
else
|
|
echo $lang['srv_invitation_num_respondents'].(int)$this->count_all;
|
|
}
|
|
echo '</div>';
|
|
echo '</div>';
|
|
|
|
if (mysqli_num_rows($sql_query_filterd) > 0 && $count_all > 0) {
|
|
|
|
$this->displayPagination($filtred_all);
|
|
echo '<div>';
|
|
echo '<div class="table-horizontal-scroll-wrapper1">';
|
|
echo '<div class="table-horizontal-scroll-wrapper2">';
|
|
|
|
echo '<table id="tbl_recipients_list" class="phone">';
|
|
echo '<tr>';
|
|
# checkbox
|
|
echo '<th></th>';
|
|
/*
|
|
* # uredi
|
|
echo '<th class="tbl_liks"> </th>';
|
|
# izbrisi
|
|
echo '<th class="tbl_liks"> </th>';
|
|
|
|
*/
|
|
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
if ($fkey == 'sent' || $fkey == 'responded' || $fkey == 'unsubscribed'){
|
|
#echo '<th class="anl_ac tbl_icon_'.$fkey.' inv_'.$fkey.'_1" title="'.$lang['srv_inv_recipients_'.$fkey].'"> </th>';
|
|
echo '<th'.$this->addSortField($fkey).' class="anl_ac tbl_icon_'.$fkey.'" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].$this->addSortIcon($fkey).'</th>';
|
|
} else if ($fkey == 'ps_icon' ) {
|
|
//echo '<th'.$this->addSortField($fkey).' class="anl_ac tbl_icon" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].$this->addSortIcon($fkey).'</th>';
|
|
} else if ($fkey == 'date_inserted' || $fkey == 'schedule_call_time' ) {
|
|
echo '<th'.$this->addSortField($fkey).' class="anl_ac tbl_date pointer" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].$this->addSortIcon($fkey).'</th>';
|
|
} else if ($fkey == 'schstatus' ) {
|
|
echo '<th'.$this->addSortField($fkey).' class="anl_ac pointer" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].$this->addSortIcon($fkey).'</th>';
|
|
} else if ($fkey == 'last_status' ) {
|
|
echo '<th'.$this->addSortField($fkey).' class="anl_ac pointer" title="'.$lang['srv_inv_recipients_last_status'].'">'.$lang['srv_inv_recipients_last_status'].$this->addSortIcon($fkey).'</th>';
|
|
} else {
|
|
echo '<th'.$this->addSortField($fkey).' class="pointer" title="'.$lang['srv_telephone_respondents_'.$fkey].'">'.$lang['srv_telephone_respondents_'.$fkey].$this->addSortIcon($fkey).'</th>';
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query_filterd)) {
|
|
$icon = ' phn_ico_status_go';
|
|
switch ($sql_row['schstatus']) {
|
|
case 'U':
|
|
$icon = ' phn_ico_status';
|
|
break;
|
|
case 'R':
|
|
$icon = ' phn_ico_status_key';
|
|
break;
|
|
case 'N': #ga ni
|
|
case 'Z': #zaseden
|
|
case 'T': #zmenjen
|
|
case 'D': #prelozen
|
|
$icon = ' phn_ico_status_error';
|
|
break;
|
|
|
|
default:
|
|
;
|
|
break;
|
|
}
|
|
# če je odjavljen damo isto ikonco za zaklepanje
|
|
if ((int)$row_users['unsubscribed'] == 1) {
|
|
$icon = ' phn_ico_status_key';
|
|
}
|
|
|
|
echo '<tr>';
|
|
# checkbox
|
|
|
|
echo '<td><div class="icons"><input type="checkbox" id="'.$sql_row['id'].'" name="inv_rids[]" value="'.$sql_row['id'].'"><label for="'.$sql_row['id'].'" class="empty"></label>';
|
|
#izbriši
|
|
echo '<span class="faicon trash empty blue" onclick="deleteRecipient_confirm(\''.$sql_row['id'].'\'); return false;" title="'.$lang['srv_inv_list_profiles_delete'].'"></span>';
|
|
#uredi
|
|
echo '<span class="faicon edit blue" onclick="editRecipient(\''.$sql_row['id'].'\'); return false;" title="'.$lang['srv_inv_list_profiles_edit'].'"></span>';
|
|
|
|
foreach ($fields AS $fkey =>$field) {
|
|
if ($field == 1) {
|
|
switch ($fkey) {
|
|
|
|
case 'ps_icon':
|
|
echo '<span class="faicon blue phone" onclick="phnGoToUser(\''.$sql_row['id'].'\')"></span>';
|
|
echo '</div></td>';
|
|
break;
|
|
case 'last_status':
|
|
echo '<td title="'.$lang['srv_userstatus_'.$sql_row[$fkey]].'">';
|
|
echo '('.$sql_row[$fkey].') - '.$lang['srv_userstatus_'.$sql_row[$fkey]].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$row_users[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'comment':
|
|
echo '<td class="tbl_inv_left ovwerflowHidden" style="max-width:100px;" title="'.str_replace("<br>","\n",strip_tags($sql_row['comment'])).'">';
|
|
/*echo substr(strip_tags($sql_row['comment']),0,50).'</td>';*/
|
|
if ($filter != '') {
|
|
echo $this->hightlight(substr(strip_tags($sql_row['comment']),0,50),$filter);
|
|
} else {
|
|
echo substr(strip_tags($sql_row['comment']),0,50);
|
|
}
|
|
echo '</td>';
|
|
break;
|
|
case 'date_inserted':
|
|
case 'schedule_call_time':
|
|
echo '<td class="tbl_inv_left" title="'.$sql_row[$fkey].'">';
|
|
echo $sql_row[$fkey].'</td>';
|
|
break;
|
|
case 'inserted_uid':
|
|
echo '<td>'.$users[$sql_row[$fkey]]['email'].'</td>';
|
|
break;
|
|
case 'schstatus':
|
|
echo '<td class="tbl_inv_left" title="'.$lang['srv_telephone_status_'.$sql_row[$fkey]].'">';
|
|
echo $lang['srv_telephone_status_'.$sql_row[$fkey]];
|
|
echo '</td>';
|
|
break;
|
|
case 'email':
|
|
echo '<td>';
|
|
echo '<span class="as_link" onclick="showRecipientTracking(\''.$sql_row['id'].'\'); return false;">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
echo '</span>';
|
|
echo '</td>';
|
|
break;
|
|
case 'list_id':
|
|
echo '<td>';
|
|
if ((int)$sql_row[$fkey] > 0) {
|
|
if ($lists[$sql_row[$fkey]]['name'] != '') {
|
|
echo '<a href="#" onclick="$(\'#globalSettingsInner\').load(\'ajax.php?t=invitations&a=use_recipients_list\', {anketa:srv_meta_anketa_id, pid:'.(int)$sql_row[$fkey].' });">'.$lists[$sql_row[$fkey]]['name'].'</a>';
|
|
} else {
|
|
echo $lang['srv_inv_recipient_list_deleted'];
|
|
}
|
|
} else {
|
|
echo $lists[$sql_row[$fkey]]['name'];
|
|
}
|
|
echo '</td>';
|
|
break;
|
|
default:
|
|
echo '<td class="tbl_inv_left">';
|
|
if ($filter != '') {
|
|
echo $this->hightlight($sql_row[$fkey],$filter);
|
|
} else {
|
|
echo $sql_row[$fkey];
|
|
}
|
|
|
|
echo '</td>';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
echo '</tr>';
|
|
@ob_flush();
|
|
}
|
|
echo '</table>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
echo '<div id="inv_bottom_edit">';
|
|
/*echo '<a href="javascript:inv_selectAll(true);"><span class="faicon arrow_up blue"></span> ';
|
|
echo '<span id="inv_switch_on">'.$lang['srv_select_all'].'</a></span>';
|
|
echo '<span id="inv_switch_off" style="display:none;"><a href="javascript:inv_selectAll(false);">'.$lang['srv_deselect_all'].'</a></span>';*/
|
|
echo '<a href="#" onClick="inv_recipients_form_action(\'delete\');"><span class="faicon trash empty blue" title="'.$lang['srv_invitation_recipients_delete_selected'].'"/></span> '.$lang['srv_invitation_recipients_delete_selected'].'</a>';
|
|
echo '<a href="#" onClick="inv_recipients_form_action(\'export\');"><span class="faicon xls" title="'.$lang['srv_invitation_recipients_export_selected'].'"/></span> '.$lang['srv_invitation_recipients_export_selected'].'</a>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
|
|
} else {
|
|
echo $lang['srv_inv_list_no_recipients_filtred'];
|
|
}
|
|
echo '</form>';
|
|
} else {
|
|
echo $lang['srv_inv_list_no_recipients'];
|
|
}
|
|
|
|
echo '<div class="button_holder">';
|
|
echo '<button class="medium white-blue" onClick="window.location.href=\''.$this->addUrl('recipients_lists').'\';return false;">'.$lang['back'].'</button>';
|
|
echo '<button class="medium blue" onClick="window.location.href=\''.$this->addUrl('start_call').'\';return false;">'.$lang['next1'].'</button>';
|
|
echo '</div>';
|
|
}
|
|
|
|
|
|
/**
|
|
* @desc prikaze prvo stran z linkom na zacni
|
|
*/
|
|
function startCall() {
|
|
global $lang;
|
|
|
|
#preverimo koliko številk imamo na voljo
|
|
$numbersAvailable = $this->getAllNumbers();
|
|
|
|
echo '<fieldset><legend>'.$lang['srv_telephone_call_start'].'</legend>';
|
|
|
|
# preverimo aktivnost ankete
|
|
if ($this->surveySettings['active'] != 1) {
|
|
echo '<p class="bottom16">'.$lang['srv_inv_error9'].'</p>';
|
|
if ($this->isAnketar == true) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (count($numbersAvailable) > 0 ) {
|
|
echo '<p class="bottom16">'.$lang['srv_telephone_call_available'];
|
|
echo ' '.count($numbersAvailable);
|
|
echo '</p>';
|
|
echo '<button class="medium blue" onClick="window.location.href=\'index.php?anketa='.$this->sid.'&a='.A_TELEPHONE.'&m=call\'; return false;">'.$lang['srv_call_start'].'</button>';
|
|
} else {
|
|
$this->getNextTimeCall();
|
|
}
|
|
|
|
echo '</fieldset>';
|
|
}
|
|
|
|
/**
|
|
* @desc zacne s klicanjem telefonskih stevilk
|
|
*/
|
|
function Call() {
|
|
global $site_root, $global_user_id;
|
|
|
|
$schedule = false;
|
|
|
|
// stevilka je izbrana - klicana
|
|
if ($_GET['usr_id'] != '' && (int)$_GET['usr_id'] > 0) {
|
|
$usr_id = (int)$_GET['usr_id'];
|
|
|
|
// zbrisemo cookie za izpolnjevanje -- da ne dobi od prejsnjega, ce je nehu nekje vmes
|
|
setcookie('survey-'.$this->sid, '', time()-3600, str_replace($_SERVER['DOCUMENT_ROOT'], '', $site_root).'main/survey/');
|
|
|
|
sisplet_query("DELETE FROM srv_telephone_schedule WHERE rec_id = '$usr_id'");
|
|
sisplet_query("INSERT INTO srv_telephone_current (rec_id, user_id, started_time) VALUES ('$usr_id', '".$global_user_id."', NOW())");
|
|
}
|
|
else {
|
|
// Po novem moramo pri kliku "klici drugo" pobrisati current iz baze
|
|
if(isset($_GET['n']) && $_GET['n'] == 'clear_current')
|
|
sisplet_query("DELETE srv_telephone_current FROM srv_telephone_current, srv_invitations_recipients
|
|
WHERE srv_telephone_current.user_id='".$global_user_id."' AND srv_telephone_current.rec_id = srv_invitations_recipients.id AND srv_invitations_recipients.ank_id='".$this->sid."'");
|
|
|
|
#uporabnik ni izbran določimo izberemo ga naklučno oziroma če smo dogovorjeni
|
|
$row = $this->get_next_number();
|
|
$usr_id = $row['usr_id'];
|
|
$schedule = (int)$row['schedule'] == 1 ? true : false;
|
|
}
|
|
|
|
if ((int)$usr_id > 0) {
|
|
# preverimo ali je uporabnik že začel klicat
|
|
$openedSurvey = ($_GET['usr_id'] != '' && (int)$_GET['usr_id'] > 0) ? true : false;
|
|
$this->userCallToShow($usr_id,$openedSurvey,$schedule);
|
|
|
|
// Po novem ze ob prikazu stevilke zaklenemo respondenta (da ga ne moreta 2 anketarja hkrati poklicati preden odpreta anketo)
|
|
$sql = sisplet_query("SELECT * FROM srv_telephone_current WHERE rec_id='".$usr_id."' AND user_id='".$global_user_id."' AND started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)");
|
|
if(mysqli_num_rows($sql) == 0)
|
|
sisplet_query("INSERT INTO srv_telephone_current (rec_id, user_id, started_time) VALUES ('$usr_id', '".$global_user_id."', NOW())");
|
|
}
|
|
else {
|
|
$this->getNextTimeCall();
|
|
}
|
|
}
|
|
|
|
function settings() {
|
|
global $lang, $site_url;
|
|
|
|
echo '<fieldset id="tel_setting"><legend>'.$lang['settings'].'</legend>';
|
|
|
|
echo '<form id="phn_settings" method="post">';
|
|
|
|
echo '<div class="set_horizontal">';
|
|
echo $lang['srv_call_settings_z'];
|
|
echo '<input type="text" class="text medium" name="status_z" value="'.$this->status_z.'"/>';
|
|
echo $lang['srv_call_settings_min'];
|
|
echo '</div>';
|
|
echo '<div class="set_horizontal">';
|
|
echo $lang['srv_call_settings_n'];
|
|
echo '<input type="text" class="text medium" name="status_n" value="'.$this->status_n.'"/>';
|
|
echo $lang['srv_call_settings_min'];
|
|
echo '</div>';
|
|
echo '<div class="set_horizontal">';
|
|
echo $lang['srv_call_settings_d'];
|
|
echo '<input type="text" class="text medium" name="status_d" value="'.$this->status_d.'"/>';
|
|
echo $lang['srv_call_settings_min'];
|
|
echo '</div>';
|
|
echo '<div class="set_horizontal">';
|
|
echo $lang['srv_call_settings_max'];
|
|
echo '<input type="text" class="text medium" name="max_calls" value="'.$this->max_calls.'"/>';
|
|
echo $lang['srv_call_settings_min'];
|
|
echo '</div>';
|
|
|
|
// Vrstni red klicanja
|
|
echo '<div class="setting_holder">';
|
|
echo $lang['srv_call_settings_call_order'].':';
|
|
echo '<select name="call_order" class="dropdown medium">';
|
|
echo '<option value="0" '.($this->call_order==0 ? ' selected="selected"' : '').'>'.$lang['srv_call_settings_call_order_0'].'</option>';
|
|
echo '<option value="1" '.($this->call_order==1 ? ' selected="selected"' : '').'>'.$lang['srv_call_settings_call_order_1'].'</option>';
|
|
echo '<option value="2" '.($this->call_order==2 ? ' selected="selected"' : '').'>'.$lang['srv_call_settings_call_order_2'].'</option>';
|
|
echo '<option value="3" '.($this->call_order==3 ? ' selected="selected"' : '').'>'.$lang['srv_call_settings_call_order_3'].'</option>';
|
|
echo '</select>';
|
|
echo '</div>';
|
|
|
|
#$str = "SELECT sd.uid, u.name, u.surname, u.email FROM srv_dostop AS sd LEFT JOIN users AS u ON sd.uid = u.id WHERE sd.ank_id ='$this->sid' AND FIND_IN_SET('phone',sd.dostop )>0";
|
|
#polovimo vse userje ki imajo dostop
|
|
|
|
|
|
echo '<div class="setting_holder">';
|
|
echo '<p class="setting_title">';
|
|
echo $lang['srv_telephone_settings_access_list'];
|
|
printf ($lang['srv_telephone_settings_access_list_link'],$site_url . 'admin/survey/index.php?anketa='.$this->sid.'&a='.A_DOSTOP);
|
|
echo '</p>';
|
|
|
|
$str = "SELECT sd.uid,FIND_IN_SET('phone',sd.dostop ) AS anketar, u.name, u.surname, u.email FROM srv_dostop AS sd LEFT JOIN users AS u ON sd.uid = u.id WHERE sd.ank_id ='$this->sid'";
|
|
$qry = sisplet_query($str);
|
|
while ($sql_row = mysqli_fetch_assoc($qry)) {
|
|
$avtor = array();
|
|
if (trim($sql_row['name'])) {
|
|
$avtor[] = trim ($sql_row['name']);
|
|
}
|
|
if (trim($sql_row['surname'])) {
|
|
$avtor[] = trim ($sql_row['surname']);
|
|
}
|
|
if (trim($sql_row['email'])) {
|
|
$avtor[] = iconv("iso-8859-2", "utf-8",'<span class="gray">('.trim ($sql_row['email']).')</span>');
|
|
}
|
|
|
|
if ( count($avtor) > 0 ) {
|
|
$label = implode(', ',$avtor);
|
|
}
|
|
|
|
echo '<div class="setting_item">';
|
|
echo '<input name="dostop['.$sql_row['uid'].']" id="dostop['.$sql_row['uid'].']" type="checkbox"'.($sql_row['anketar']>0?' checked="checked"':'').'>';
|
|
echo '<label for="dostop['.$sql_row['uid'].']">'.$label.'</label>';
|
|
echo '</div>';
|
|
}
|
|
echo '</div>';
|
|
echo '</form>';
|
|
|
|
echo '</fieldset>';
|
|
echo '<div class="button_holder">';
|
|
echo '<button class="medium blue" onclick="phn_settings_save(); return false;">'.$lang['srv_telephone_settings_save'].'</button>';
|
|
echo '</div>';
|
|
}
|
|
|
|
function settingsSave() {
|
|
$this->status_z = (int)$_POST[status_z];
|
|
$this->status_n = (int)$_POST[status_n];
|
|
$this->status_d = (int)$_POST[status_d];
|
|
$this->max_calls = (int)$_POST[max_calls];
|
|
$this->call_order = (int)$_POST[call_order];
|
|
|
|
sisplet_query("REPLACE srv_telephone_setting (survey_id, status_z, status_n, status_d, max_calls, call_order) VALUES ('$this->sid', '$this->status_z ', '$this->status_n', '$this->status_d', '$this->max_calls', '$this->call_order')");
|
|
#dodamo dostop za anketarja
|
|
|
|
if (count($_POST['dostop']) > 0) {
|
|
$uids = array();
|
|
foreach ($_POST['dostop'] AS $uid => $on) {
|
|
$uids[] = $uid;
|
|
}
|
|
|
|
#najprej odstranimo vsem kateri niso v post
|
|
$str_remove = "UPDATE srv_dostop SET dostop = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', dostop, ','),CONCAT(',', 'phone', ','), ','))"
|
|
." WHERE ank_id='$this->sid' AND uid NOT IN(".implode(",",$uids).")";
|
|
$s1 = sisplet_query($str_remove);
|
|
if (!$s1) echo 'err_phn_dostop_001'.mysqli_error($GLOBALS['connect_db']);
|
|
|
|
#nato dodamo vsem ki so v post.
|
|
;
|
|
$str_update = "UPDATE srv_dostop SET dostop = CONCAT(dostop, ',phone')"
|
|
." WHERE ank_id='$this->sid' AND uid IN(".implode(",",$uids).")";
|
|
$s2 = sisplet_query($str_update);
|
|
if (!$s2) echo 'err_phn_dostop_002'.mysqli_error($GLOBALS['connect_db']);
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc vrne ID spremenljivke telefon
|
|
*/
|
|
function get_spr_telefon_id () {
|
|
|
|
$sql = sisplet_query("SELECT srv_spremenljivka.id
|
|
FROM srv_spremenljivka, srv_grupa
|
|
WHERE srv_spremenljivka.variable = 'telefon'
|
|
AND srv_spremenljivka.sistem = '1'
|
|
AND srv_spremenljivka.gru_id = srv_grupa.id
|
|
AND srv_grupa.ank_id = '$this->sid'
|
|
");
|
|
$row = mysqli_fetch_array($sql);
|
|
return $row['id'];
|
|
}
|
|
|
|
|
|
function addSortField($field){
|
|
$type = 'ASC';
|
|
session_start();
|
|
if ($_SESSION['phn_rec_sort_field'] == $field) {
|
|
if ($_SESSION['phn_rec_sort_type'] == 'DESC') {
|
|
$type = 'ASC';
|
|
} else {
|
|
$type = 'DESC';
|
|
}
|
|
} else {
|
|
$type = 'ASC';
|
|
}
|
|
return ' onclick="phn_set_sort_field(\''.$field.'\',\''.$type.'\');" ';
|
|
}
|
|
function addSortIcon($field){
|
|
session_start();
|
|
if ($_SESSION['phn_rec_sort_field'] == $field) {
|
|
if ($_SESSION['phn_rec_sort_type'] == 'DESC') {
|
|
return ' <span class="faicon sort_descending icon-blue"></span>';
|
|
|
|
} else {
|
|
return ' <span class="faicon sort_ascending icon-blue"></span>';
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
function setSortField() {
|
|
session_start();
|
|
if (isset($_POST['field']) && trim($_POST['field']) != '') {
|
|
$_SESSION['phn_rec_sort_field'] = trim($_POST['field']);
|
|
} else {
|
|
$_SESSION['phn_rec_sort_field'] = 'date_inserted';
|
|
}
|
|
if (isset($_POST['type']) && trim($_POST['type']) != '') {
|
|
$_SESSION['phn_rec_sort_type'] = trim($_POST['type']);
|
|
} else {
|
|
$_SESSION['phn_rec_sort_type'] = 'ASC';
|
|
}
|
|
session_commit();
|
|
}
|
|
|
|
function getSortString() {
|
|
session_start();
|
|
$sort_string = ' ORDER BY i.id ASC';
|
|
if (isset($_SESSION['phn_rec_sort_field']) && trim($_SESSION['phn_rec_sort_field']) != '') {
|
|
$prefix = 'i.';
|
|
if ($_SESSION['phn_rec_sort_field'] == 'count_inv'
|
|
|| $_SESSION['phn_rec_sort_field'] == 'ps_icon'
|
|
|| $_SESSION['phn_rec_sort_field'] == 'schedule_call_time'
|
|
|| $_SESSION['phn_rec_sort_field'] == 'comment'
|
|
|| $_SESSION['phn_rec_sort_field'] == 'usr_email'
|
|
|| $_SESSION['phn_rec_sort_field'] == 'schstatus') {
|
|
$prefix = '';
|
|
}
|
|
$sort_string = ' ORDER BY '.$prefix.trim($_SESSION['phn_rec_sort_field']);
|
|
if ($_SESSION['phn_rec_sort_type'] == 'DESC') {
|
|
$sort_string .= ' DESC, i.id DESC';
|
|
} else {
|
|
$sort_string .= ' ASC, i.id ASC';
|
|
}
|
|
}
|
|
return $sort_string ;
|
|
/*
|
|
session_start();
|
|
$sort_string = ' ORDER BY u.id';
|
|
|
|
if (isset($_SESSION['phn_rec_sort_field']) && trim($_SESSION['phn_rec_sort_field']) != '') {
|
|
#$prefix = 'std_'.$_SESSION['phn_rec_sort_field'].'.';
|
|
$sort_string = ' ORDER BY '.$prefix.trim($_SESSION['phn_rec_sort_field']);
|
|
if ($_SESSION['phn_rec_sort_type'] == 'DESC') {
|
|
$sort_string .= ' DESC';
|
|
} else {
|
|
$sort_string .= ' ASC';
|
|
}
|
|
}
|
|
return $sort_string;
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @desc preveri ce je kaksna nova stevilka (tudi prek ajaxa)
|
|
*/
|
|
function preveri_stevilke () {
|
|
global $lang;
|
|
|
|
$row = $this->get_next_number();
|
|
|
|
if ($row['usr_id'] > 0) {
|
|
echo '<h2 style="text-align:center">'.$lang['srv_call_next'].':</h2><br />';
|
|
echo '<h2 style="text-align:center">'.$row['phone'].' - ';
|
|
echo '<a href="index.php?anketa='.$this->sid.'&a='.A_TELEPHONE.'&m=call&usr_id='.$row['usr_id'].'">'.$lang['srv_call_call'].'</a>';
|
|
echo '</h2>';
|
|
} else {
|
|
echo '<h2 style="text-align:center">'.$lang['srv_call_nonumber'].'</h2><br />';
|
|
|
|
$sql1 = sisplet_query("SELECT srv_telephone_schedule.*
|
|
FROM srv_telephone_schedule, srv_invitations_recipients
|
|
WHERE
|
|
srv_invitations_recipients.deleted ='0' AND
|
|
srv_telephone_schedule.rec_id = srv_invitations_recipients.id AND
|
|
srv_invitations_recipients.ank_id = '$this->sid' AND
|
|
srv_telephone_schedule.call_time > NOW() AND
|
|
srv_telephone_schedule.rec_id NOT IN (
|
|
SELECT srv_telephone_current.rec_id
|
|
FROM srv_telephone_current
|
|
WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)
|
|
) AND
|
|
srv_telephone_schedule.rec_id NOT IN (
|
|
SELECT srv_telephone_history.rec_id
|
|
FROM srv_telephone_history
|
|
GROUP BY srv_telephone_history.rec_id
|
|
HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'
|
|
)
|
|
ORDER BY srv_telephone_schedule.call_time ASC LIMIT 1
|
|
");
|
|
$row1 = mysqli_fetch_array($sql1);
|
|
if (mysqli_num_rows($sql1) > 0)
|
|
echo '<p style="text-align:center">'.$lang['srv_call_nextcall'].': <b>'.datetime($row1['call_time']).'</b></p>';
|
|
else
|
|
echo '<p style="text-align:center">'.$lang['srv_call_nonumbers'].'</p>';
|
|
|
|
echo '<script>preveriStevilkeTimer();</script>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc vrne naslednji row s stevilko za klic
|
|
*/
|
|
function get_next_number () {
|
|
global $global_user_id;
|
|
|
|
# najprej pogledamo ce je kaksen v srv_telephone_current - mor ga obvezno razresiti ker je zaklenjen
|
|
$sel = "SELECT srv_invitations_recipients.id AS usr_id, TRIM(srv_invitations_recipients.phone) AS text"
|
|
." FROM srv_telephone_current LEFT JOIN srv_invitations_recipients ON srv_telephone_current.rec_id = srv_invitations_recipients.id "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND srv_telephone_current.user_id = $global_user_id"
|
|
." AND srv_telephone_current.rec_id = srv_invitations_recipients.id"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ORDER BY srv_invitations_recipients.id ASC"
|
|
." LIMIT 1";
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
return mysqli_fetch_array($sql);
|
|
}
|
|
|
|
// najprej selectamo, tiste ki so zmenjeni po urniku
|
|
$sel = "SELECT srv_invitations_recipients.id AS usr_id, TRIM(srv_invitations_recipients.phone) AS text, '1' AS schedule"
|
|
." FROM srv_telephone_schedule LEFT JOIN srv_invitations_recipients ON srv_telephone_schedule.rec_id = srv_invitations_recipients.id "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND srv_telephone_schedule.rec_id = srv_invitations_recipients.id"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_telephone_schedule.call_time <= NOW()"
|
|
." AND srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_current.rec_id"
|
|
." FROM srv_telephone_current"
|
|
." WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT DISTINCT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." WHERE srv_telephone_history.status = 'R' OR srv_telephone_history.status = 'U'"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." GROUP BY srv_telephone_history.rec_id"
|
|
." HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'"
|
|
." )"
|
|
." ORDER BY srv_telephone_schedule.call_time ASC"
|
|
." LIMIT 1";
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
return mysqli_fetch_array($sql);
|
|
}
|
|
|
|
// ce ni nobenega na urniku pa nadaljujemo z random izbiro ostalih stevilk
|
|
|
|
/* fetch random from available
|
|
* exclude from fetch:
|
|
* - all phones which are currently active
|
|
* - all phones which are on the schedule for the future
|
|
* - all phones which have "R" or "U" status
|
|
* - all phones which are called more that "max_calls" setting
|
|
*/
|
|
|
|
// Sortiranje
|
|
if($this->call_order == 1)
|
|
$order_by = ' srv_invitations_recipients.id ASC';
|
|
elseif($this->call_order == 2)
|
|
$order_by = ' srv_invitations_recipients.firstname ASC, srv_invitations_recipients.lastname ASC, srv_invitations_recipients.email ASC, srv_invitations_recipients.id ASC';
|
|
elseif($this->call_order == 3)
|
|
$order_by = ' srv_invitations_recipients.firstname DESC, srv_invitations_recipients.lastname DESC, srv_invitations_recipients.email DESC, srv_invitations_recipients.id DESC';
|
|
else
|
|
$order_by = ' RAND()';
|
|
|
|
$sel = "SELECT srv_invitations_recipients.id AS usr_id, TRIM(srv_invitations_recipients.phone) AS text, '0' AS schedule"
|
|
." FROM srv_invitations_recipients"
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_current.rec_id"
|
|
." FROM srv_telephone_current"
|
|
." WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_schedule.rec_id"
|
|
." FROM srv_telephone_schedule"
|
|
." WHERE srv_telephone_schedule.call_time > NOW()"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." WHERE srv_telephone_history.status = 'R' OR srv_telephone_history.status = 'U'"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." GROUP BY srv_telephone_history.rec_id"
|
|
." HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'"
|
|
." )"
|
|
." ORDER BY ".$order_by.""
|
|
." LIMIT 1";
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
return mysqli_fetch_array($sql);
|
|
}
|
|
|
|
/**
|
|
* @desc vrne vse stevilke ki se trenutno klicejo (s pravim vrstnim redom)
|
|
*/
|
|
function getAllNumbers () {
|
|
global $global_user_id;
|
|
|
|
$result = array();
|
|
|
|
# najprej pogledamo ce je kaksen v srv_telephone_current - mor ga obvezno razresiti ker je zaklenjen
|
|
$sel = "SELECT srv_invitations_recipients.id, TRIM(srv_invitations_recipients.phone) AS phone"
|
|
." FROM srv_telephone_current LEFT JOIN srv_invitations_recipients ON srv_telephone_current.rec_id = srv_invitations_recipients.id "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND srv_telephone_current.user_id = $global_user_id"
|
|
." AND srv_telephone_current.rec_id = srv_invitations_recipients.id"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ORDER BY srv_invitations_recipients.id ASC";
|
|
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
while ( list($id,$phone) = mysqli_fetch_row($sql)) {
|
|
$result[$id] = $phone;
|
|
}
|
|
}
|
|
|
|
# najprej selectamo, tiste ki so zmenjeni po urniku
|
|
$sel = "SELECT srv_invitations_recipients.id, TRIM(srv_invitations_recipients.phone) AS phone"
|
|
." FROM srv_telephone_schedule LEFT JOIN srv_invitations_recipients ON srv_telephone_schedule.rec_id = srv_invitations_recipients.id "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND srv_telephone_schedule.rec_id = srv_invitations_recipients.id"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_telephone_schedule.call_time <= NOW()"
|
|
." AND srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_current.rec_id"
|
|
." FROM srv_telephone_current"
|
|
." WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT DISTINCT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." WHERE srv_telephone_history.status = 'R' OR srv_telephone_history.status = 'U'"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." GROUP BY srv_telephone_history.rec_id"
|
|
." HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'"
|
|
.")"
|
|
." ORDER BY srv_invitations_recipients.id ASC";
|
|
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
while ( list($id,$phone) = mysqli_fetch_row($sql)) {
|
|
$result[$id] = $phone;
|
|
}
|
|
}
|
|
# ce ni nobenega na urniku pa nadaljujemo z random izbiro ostalih stevilk
|
|
|
|
/* fetch random from available
|
|
* exclude from fetch:
|
|
* - all phones which are currently active
|
|
* - all phones which are on the schedule for the future
|
|
* - all phones which have "R" or "U" status
|
|
* - all phones which are called more that "max_calls" setting
|
|
*/
|
|
|
|
// Sortiranje
|
|
if($this->call_order == 1)
|
|
$order_by = ' srv_invitations_recipients.id ASC';
|
|
elseif($this->call_order == 2)
|
|
$order_by = ' srv_invitations_recipients.firstname ASC, srv_invitations_recipients.lastname ASC, srv_invitations_recipients.email ASC, srv_invitations_recipients.id ASC';
|
|
elseif($this->call_order == 3)
|
|
$order_by = ' srv_invitations_recipients.firstname DESC, srv_invitations_recipients.lastname DESC, srv_invitations_recipients.email DESC, srv_invitations_recipients.id DESC';
|
|
else
|
|
$order_by = ' RAND()';
|
|
|
|
$sel = "SELECT srv_invitations_recipients.id, TRIM(srv_invitations_recipients.phone) AS phone"
|
|
." FROM srv_invitations_recipients "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_current.rec_id"
|
|
." FROM srv_telephone_current"
|
|
." WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_schedule.rec_id"
|
|
." FROM srv_telephone_schedule"
|
|
." WHERE srv_telephone_schedule.call_time > NOW()"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." WHERE srv_telephone_history.status = 'R' OR srv_telephone_history.status = 'U'"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." GROUP BY srv_telephone_history.rec_id"
|
|
." HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'"
|
|
." )"
|
|
."ORDER BY ".$order_by."";
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
while ( list($id,$phone) = mysqli_fetch_row($sql)) {
|
|
$result[$id] = $phone;
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @desc vrne vse stevilke ki so na cakanju in bodo kasneje poklicane
|
|
*/
|
|
function getAllNumbersWaiting () {
|
|
$result = array();
|
|
|
|
# selectamo, tiste ki so zmenjeni po urniku kasneje
|
|
$sel = "SELECT srv_invitations_recipients.id, TRIM(srv_invitations_recipients.phone) AS phone"
|
|
." FROM srv_telephone_schedule LEFT JOIN srv_invitations_recipients ON srv_telephone_schedule.rec_id = srv_invitations_recipients.id "
|
|
." WHERE srv_invitations_recipients.ank_id ='$this->sid'"
|
|
." AND srv_invitations_recipients.deleted ='0'"
|
|
." AND srv_telephone_schedule.rec_id = srv_invitations_recipients.id"
|
|
." AND TRIM(srv_invitations_recipients.phone) != ''"
|
|
." AND srv_telephone_schedule.call_time > NOW()"
|
|
." AND srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_current.rec_id"
|
|
." FROM srv_telephone_current"
|
|
." WHERE srv_telephone_current.started_time >= DATE_SUB(NOW(), INTERVAL 2 HOUR)"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT DISTINCT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." WHERE srv_telephone_history.status = 'R' OR srv_telephone_history.status = 'U'"
|
|
." ) AND"
|
|
." srv_invitations_recipients.id NOT IN ("
|
|
." SELECT srv_telephone_history.rec_id"
|
|
." FROM srv_telephone_history"
|
|
." GROUP BY srv_telephone_history.rec_id"
|
|
." HAVING COUNT(srv_telephone_history.id) >= '$this->max_calls'"
|
|
.")"
|
|
." ORDER BY srv_telephone_schedule.call_time ASC";
|
|
|
|
$sql = sisplet_query($sel);
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
while ( list($id,$phone) = mysqli_fetch_row($sql)) {
|
|
$result[$id] = $phone;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function addMark($options = array()) {
|
|
global $site_url,$global_user_id;
|
|
|
|
if (is_array($options) && isset($options['usr_id']) && (int)$options['usr_id'] > 0) {
|
|
$usr_id = $options['usr_id'];
|
|
} else {
|
|
$usr_id = $_GET['usr_id'];
|
|
}
|
|
if (is_array($options) && isset($options['status']) && (int)$options['status'] > 0) {
|
|
$status = $options['status'];
|
|
} else {
|
|
$status = $_GET['status'];
|
|
}
|
|
if (is_array($options) && isset($options['datetime']) && (int)$options['datetime'] > 0) {
|
|
$datetime = $options['status'];
|
|
} else {
|
|
$datetime = $_GET['datetime'];
|
|
}
|
|
if ($status != '') {
|
|
sisplet_query("INSERT INTO srv_telephone_history (survey_id, user_id, rec_id, insert_time, status) VALUES ('$this->sid', '".$global_user_id."', '$usr_id', NOW(), '$status')");
|
|
}
|
|
|
|
if ($status != 'A') {
|
|
sisplet_query("DELETE FROM srv_telephone_current WHERE rec_id='$usr_id'");
|
|
} else {
|
|
$s = sisplet_query("INSERT INTO srv_telephone_current (rec_id, user_id, started_time) VALUES ('$usr_id', '".$global_user_id."', NOW())");
|
|
if (!$s) echo mysqli_error($GLOBALS['connect_db']);
|
|
}
|
|
|
|
if ($status == 'Z') {
|
|
$s = sisplet_query("INSERT INTO srv_telephone_schedule (rec_id, call_time) VALUES ('$usr_id', NOW() + INTERVAL $this->status_z MINUTE) ON DUPLICATE KEY UPDATE call_time = VALUES(call_time)");
|
|
if (!$s) echo mysqli_error($GLOBALS['connect_db']);
|
|
}
|
|
if ($status == 'N') {
|
|
$s = sisplet_query("INSERT INTO srv_telephone_schedule (rec_id, call_time) VALUES ('$usr_id', NOW() + INTERVAL $this->status_n MINUTE) ON DUPLICATE KEY UPDATE call_time = VALUES(call_time)");
|
|
}
|
|
if ($status == 'D') {
|
|
$s = sisplet_query("INSERT INTO srv_telephone_schedule (rec_id, call_time) VALUES ('$usr_id', NOW() + INTERVAL $this->status_d MINUTE) ON DUPLICATE KEY UPDATE call_time = VALUES(call_time)");
|
|
}
|
|
if ($status == 'T' || $status == 'P') {
|
|
$datetime = substr($datetime,6,4).'-'.substr($datetime,3,2).'-'.substr($datetime,0,2).' '.substr($datetime,11,5).':00';
|
|
$s = sisplet_query("INSERT INTO srv_telephone_schedule (rec_id, call_time) VALUES ('$usr_id', '$datetime') ON DUPLICATE KEY UPDATE call_time = VALUES(call_time)");
|
|
}
|
|
|
|
# če je zavrnil (R) potem izbrišemo morebitne zmenke
|
|
if ($status == 'R' ) {
|
|
sisplet_query("DELETE FROM srv_telephone_schedule WHERE rec_id='$usr_id'");
|
|
}
|
|
|
|
#nardimo pravilne redirekte
|
|
|
|
# ker imamo spodaj exit de ne izvede klasičen komit
|
|
sisplet_query('COMMIT');
|
|
|
|
if ($status == 'A') {
|
|
header("Location: index.php?anketa=$this->sid&a=".A_TELEPHONE."&m=call&usr_id=".$usr_id.'&status='.$status);
|
|
exit();
|
|
|
|
} else {
|
|
session_start();
|
|
if (isset($_SESSION['phnNextAction'][$this->sid]) && (int)$_SESSION['phnNextAction'][$this->sid] == '0') {
|
|
# če je anketar je lako samo na klicanu
|
|
if ($this->isAnketar) {
|
|
header("Location: index.php?anketa=$this->sid&a=".A_TELEPHONE."&m=call"); #'&status='.$status
|
|
exit();
|
|
}
|
|
header("Location: index.php?anketa=$this->sid&a=".A_TELEPHONE."&m=view_recipients");
|
|
exit();
|
|
} else {
|
|
header("Location: index.php?anketa=$this->sid&a=".A_TELEPHONE."&m=call"); #.'&status='.$status
|
|
exit();
|
|
}
|
|
}
|
|
}
|
|
|
|
function preveriStevilkeTimer () {
|
|
$this->preveri_stevilke();
|
|
}
|
|
|
|
function addRecipients() {
|
|
global $global_user_id;
|
|
|
|
$fields = $_POST['fields'];
|
|
$_recipients = $_POST['recipients_list'];
|
|
$recipients_list = str_replace("\n\r", "\n", $recipients_list);
|
|
|
|
# povezava imena polji iz forem, z imeni polji v bazi
|
|
$db_vs_form_array = array(
|
|
'inv_field_email' => 'email',
|
|
'inv_field_firstname' => 'firstname',
|
|
'inv_field_lastname' => 'lastname',
|
|
'inv_field_password' => 'password',
|
|
'inv_field_cookie' => 'cookie',
|
|
'inv_field_salutation' => 'salutation',
|
|
'inv_field_phone' => 'phone',
|
|
'inv_field_custom' => 'custom',
|
|
);
|
|
|
|
$fields = $_POST['fields'];
|
|
if (!is_array($fields)) {
|
|
$fields = array();
|
|
}
|
|
|
|
# katero polje je za password
|
|
if (in_array('inv_field_password',$fields)) {
|
|
$user_password = true;
|
|
} else {
|
|
$user_password = false;
|
|
}
|
|
|
|
#dodamo potrebna sistemska polja
|
|
$this->addSystemVariables($fields);
|
|
|
|
# dodamo ustrezne uporabnike, neustrezne izpišemo še enkrat da se lahko popravijo
|
|
$_recipients = str_replace("\n\r", "\n", $_recipients);
|
|
$recipients_list = explode("\n",$_recipients);
|
|
$num_recipients_list = count($recipients_list);
|
|
|
|
# katero polje je za e-mail
|
|
if (in_array('inv_field_email',$fields)) {
|
|
$user_email = true;
|
|
} else {
|
|
}
|
|
|
|
# polje cookie mora bit zraven
|
|
if (!in_array('inv_field_cookie',$fields)) {
|
|
$fields[] = 'inv_field_cookie';
|
|
}
|
|
|
|
# polovimo že dodane prejemnike iz baze
|
|
$user_in_db = array();
|
|
$sql_string = "SELECT firstname,lastname,salutation,phone,custom FROM srv_invitations_recipients WHERE ank_id = '".$this->sid."' AND deleted='0'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
|
|
if (mysqli_num_rows($sql_query) > 0 ) {
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
|
|
$user_in_db[] = $sql_row['firstname'].$sql_row['lastname'].$sql_row['salutation'].$sql_row['phone'].$sql_row['custom'];
|
|
}
|
|
}
|
|
# katero polje je za password
|
|
if (in_array('inv_field_password',$fields)) {
|
|
$user_password = true;
|
|
} else {
|
|
$user_password = false;
|
|
# dodamo polje password
|
|
$fields[] = 'inv_field_password';
|
|
}
|
|
|
|
# polja za bazo
|
|
$db_fields = '';
|
|
foreach ($fields as $field) {
|
|
$db_fields .= ', '.$db_vs_form_array[$field];
|
|
}
|
|
|
|
# katera gesla (code) že imamo v bazi za to anketo
|
|
$password_in_db = array();
|
|
$sql_string = "SELECT password FROM srv_invitations_recipients WHERE ank_id = '".$this->sid."' AND deleted='0'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
|
|
$password_in_db[$sql_row['password']] = $sql_row['password'];
|
|
}
|
|
|
|
$unsubscribed = array();
|
|
/*polovimo prejemnike ki ne želijo prejemati obvestil
|
|
|
|
$sql_string = "SELECT email FROM srv_invitations_recipients WHERE unsubscribed = '1'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
$unsubscribed = array();
|
|
if (mysqli_num_rows($sql_query) > 0 ) {
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
|
|
$unsubscribed[] = $sql_row['email'];
|
|
}
|
|
}*/
|
|
|
|
#array z veljavnimi zapisi
|
|
$valid_recipiens_array = array();
|
|
# array z zapisi kjer so napake v geslih
|
|
$invalid_password_array = array();
|
|
#array z zapisi kjer so neveljavna gesla
|
|
$invalid_email_array = array();
|
|
#array z podvojenimi zapisi
|
|
$duplicate_email_array = array();
|
|
#aray z zapisi kjer so uporabniki izbrali da ne želijo prejemat e-mailov
|
|
$unsubscribed_recipiens_array = array();
|
|
|
|
if ( $num_recipients_list > 0 ) {
|
|
foreach ($recipients_list AS $recipient_line) {
|
|
$recipient_line = trim($recipient_line);
|
|
if ($recipient_line != null && $recipient_line != '') {
|
|
$line_array = explode(',',$recipient_line);
|
|
# predpostavljamo da je vrstica vredu
|
|
$invalid_line = false;
|
|
|
|
#prilagodimo izbrana polja
|
|
$recipent_array = array();
|
|
$i = 0;
|
|
foreach ($fields AS $field) {
|
|
$recipent_array[$field] = $line_array[$i];
|
|
$i++;
|
|
}
|
|
|
|
# izvedemo validacijo posameznih polij
|
|
|
|
# najprej preverimo gesla, če niso uporabniško določena, jih dodelimo sami
|
|
if ( $invalid_line == false ) {
|
|
# če še ni bilo napake ( da ne podvajamo zapisov pri katerih je več napak)
|
|
if ($user_password == false) {
|
|
# gesla določamo avtomatsko, (ne bo problemov :] )
|
|
|
|
# Izberemo random hash, ki se ni v bazi
|
|
do {
|
|
list($code,$cookie) = $this->generateCode();
|
|
} while (in_array($code,$password_in_db));
|
|
# polje za geslo je na zadnjem mestu (smo ga dodali zgoraj)
|
|
$recipent_array['inv_field_password'] = $code;
|
|
$recipent_array['inv_field_cookie'] = $cookie;
|
|
|
|
# če je vse ok, geslo dodamo v seznam že uporabljenih
|
|
$password_in_db[$code] = $code;
|
|
|
|
} else {
|
|
# gesla je določil uporabnik, (dajmo ga malo preverit)
|
|
$user_password = trim($recipent_array['inv_field_password']);
|
|
|
|
# preverimo ali je geslo že v bazi
|
|
if ($user_password == null || $user_password == '' || in_array($user_password,$password_in_db)) {
|
|
$invalid_password_array[] = $recipient_line;
|
|
$invalid_line = true;
|
|
}
|
|
|
|
# če je vse ok, geslo dodamo v seznam že uporabljenih
|
|
if ($invalid_line == false) {
|
|
$password_in_db[$user_password] = $user_password;
|
|
#dodamo še piškotek
|
|
list($code,$cookie) = $this->generateCode();
|
|
$recipent_array['inv_field_cookie'] = $cookie;
|
|
}
|
|
}
|
|
}
|
|
# če imamo emaile naredimo validacijo, preverimo zavrnitve.. itd
|
|
// if ($user_email == true && $invalid_line == false) {
|
|
if ($invalid_line == false) {
|
|
# # preberemo uporabniški email
|
|
$email_field = trim($recipent_array['inv_field_firstname'])
|
|
. trim($recipent_array['inv_field_lastname'])
|
|
. trim($recipent_array['inv_field_salutation'])
|
|
. trim($recipent_array['inv_field_phone'])
|
|
. trim($recipent_array['inv_field_custom']);
|
|
|
|
|
|
/* #ali je email veljaven
|
|
if (!$this->validEmail($email_field) && $invalid_line == false) {
|
|
$invalid_email_array[] = $recipient_line;
|
|
$invalid_line = true;
|
|
}*/
|
|
|
|
# ali je email podvojen
|
|
if (in_array(strtolower($email_field),$user_in_db) && $invalid_line == false) {
|
|
$duplicate_email_array[] = strtolower($recipient_line);
|
|
$invalid_line = true;
|
|
}
|
|
|
|
/* ali uporabnik ne želi prejemati sporočil (opted out)
|
|
if (in_array($email_field,$unsubscribed) && $invalid_line == false) {
|
|
$unsubscribed_recipiens_array[] = $recipient_line;
|
|
$invalid_line = true;
|
|
}*/
|
|
|
|
# če je vse ok, email dodamo v seznam že uporabljenih
|
|
if ( $invalid_line == false) {
|
|
$user_in_db[] = $email_field;
|
|
}
|
|
}
|
|
# če je vse ok dodamo userja k veljavnim
|
|
if ( $invalid_line == false) {
|
|
$valid_recipiens_array[] = $recipent_array;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
$list_id = (int)$_POST['pid'];
|
|
|
|
# pripravimo sql stavek za vstavljanje
|
|
if (count($valid_recipiens_array ) > 0) {
|
|
$sql_insert_start = "INSERT INTO srv_invitations_recipients (ank_id".$db_fields.",sent,responded,unsubscribed,deleted,date_inserted,inserted_uid,list_id) VALUES ";
|
|
$count = 0;
|
|
|
|
$sql_insert_array = array();
|
|
$cnt = 0;
|
|
$max_in_array = 1000; # po koliko respondentov dodajamo naenkeat
|
|
$array_loop = 0;
|
|
foreach ( $valid_recipiens_array AS $recipent_fields) {
|
|
$cnt++;
|
|
$sql_insert = "('".$this->sid."'";
|
|
foreach ($recipent_fields as $field) {
|
|
$sql_insert .= ", '$field'";
|
|
}
|
|
$sql_insert .= ",'0','0','0','0',NOW(),'".$global_user_id."','".$list_id."')";
|
|
$sql_insert_array[$array_loop][] = $sql_insert;
|
|
if ($cnt >= $max_in_array) {
|
|
$array_loop++;
|
|
$cnt = 0;
|
|
}
|
|
}
|
|
$sql_insert_end = " ON DUPLICATE KEY UPDATE firstname=VALUES(firstname), lastname=VALUES(lastname), salutation=VALUES(salutation), phone=VALUES(phone), custom=VALUES(custom), deleted='0', date_inserted=NOW()";
|
|
|
|
# v loopu dodamo posamezne respondente po skupinah (ker kadar je respondentov veliko mysql crkne)
|
|
if (count($sql_insert_array) > 0) {
|
|
foreach ($sql_insert_array AS $sub_insert_array) {
|
|
$query_insert = $sql_insert_start. implode(',',$sub_insert_array) .$sql_insert_end;
|
|
$sqlQuery = sisplet_query($query_insert);
|
|
$rows = mysqli_affected_rows($GLOBALS['connect_db']);
|
|
if (!$sqlQuery) {
|
|
$error = mysqli_error($GLOBALS['connect_db']);
|
|
}
|
|
}
|
|
sisplet_query("COMMIT");
|
|
|
|
}
|
|
}
|
|
|
|
return array( 'valid_recipiens' => $valid_recipiens_array,
|
|
'invalid_password' => $invalid_password_array,
|
|
'invalid_email' => $invalid_email_array,
|
|
'duplicate_email' => $duplicate_email_array,
|
|
'unsubscribed' => $unsubscribed_recipiens_array);
|
|
}
|
|
|
|
|
|
function addSystemVariables($variables) {
|
|
$user_base = 0;
|
|
global $site_path;
|
|
$system_fields = array(
|
|
'inv_field_email' => 'email',
|
|
'inv_field_firstname' => 'ime',
|
|
'inv_field_lastname' => 'priimek',
|
|
# 'inv_field_password' => 'geslo', # gesla ne dodajamo kot sistemsko spremenljivko
|
|
'inv_field_salutation' => 'naziv',
|
|
'inv_field_phone' => 'telefon',
|
|
'inv_field_custom' => 'drugo',
|
|
);
|
|
$variablesResult=array();
|
|
$sqlb = sisplet_query("SELECT branching, user_base FROM srv_anketa WHERE id = '".$this->sid."'");
|
|
$rowb = mysqli_fetch_array($sqlb);
|
|
|
|
$ba = new BranchingAjax($this->sid);
|
|
if (count($variables) > 0) {
|
|
|
|
// zakaj je bi ta reverse???
|
|
//$variables = array_reverse($variables,true);
|
|
foreach ($variables as $var) {
|
|
if (isset($system_fields[$var])) {
|
|
$spr_id = null;
|
|
|
|
if (isset($system_fields[$var])) {
|
|
$variable = $system_fields[$var];
|
|
} else {
|
|
$variable = str_replace('inv_field_', '', $var);
|
|
}
|
|
|
|
$sqlVariable = sisplet_query("SELECT s.id FROM srv_spremenljivka s, srv_grupa g WHERE s.variable='".$variable."' AND s.gru_id=g.id AND g.ank_id='".$this->sid."'");
|
|
if (mysqli_num_rows($sqlVariable) == 0 && $variable!='pass') { // če varabla še ne obstaja jo kreiramo
|
|
// za polje pass - Geslo ne kreiramo sistemske variable
|
|
|
|
if ($variable != 'language') {
|
|
$user_base = 1;
|
|
}
|
|
|
|
// dodamo novo spremenljivko na konec, tip je 21
|
|
ob_start();
|
|
$ba->ajax_spremenljivka_new(0, 0, 1, 0, 21);
|
|
$spr_id = $ba->spremenljivka;
|
|
ob_clean();
|
|
|
|
$s = sisplet_query("UPDATE srv_spremenljivka SET variable='".$variable."', variable_custom='1', naslov='".$variable."', sistem='1', visible='0' WHERE id='$spr_id'");
|
|
if (!$s) echo 'err435'.mysqli_error($GLOBALS['connect_db']);
|
|
|
|
} else {
|
|
list($spr_id) = mysqli_fetch_row($sqlVariable);
|
|
}
|
|
$variablesResult[$variable] = (int)$spr_id;
|
|
|
|
}
|
|
}
|
|
}
|
|
// če je potreben updejt (ampak najbrž je itak na 1 zaradi e-mail)
|
|
if ($user_base > 0 && $user_base != $rowb['user_base']) {
|
|
$sql = sisplet_query("UPDATE srv_anketa SET user_base='$user_base' WHERE id='" . $this->sid . "'");
|
|
SurveyInfo :: getInstance()->resetSurveyData();
|
|
}
|
|
|
|
return $variablesResult;
|
|
}
|
|
|
|
function generateCode() {
|
|
$cookie = md5(random_int(1, PHP_INT_MAX) . '@' . $_SERVER['REMOTE_ADDR']);
|
|
|
|
return array(substr($cookie,0,6), $cookie);
|
|
}
|
|
|
|
function displayRecipentsErrors($result) {
|
|
global $lang;
|
|
$valid_recipiens = is_array($result['valid_recipiens']) ? $result['valid_recipiens'] : array();
|
|
$invalid_password = is_array($result['invalid_password']) ? $result['invalid_password'] : array();
|
|
$insert_errors = is_array($result['insert_errors']) ? $result['insert_errors'] : array();
|
|
|
|
# dodani so bili nekateri uporabniki
|
|
if (count($valid_recipiens) > 0) {
|
|
echo '<div id="inv_recipiens_added">';
|
|
echo $lang['srv_inv_recipiens_add_success_cnt'].'<span class="inv_count"><span class="as_link" onclick="$(\'#invRecipiensList1\').toggle();">'. count($valid_recipiens).'</span></span><br>';
|
|
echo '<div id="invRecipiensList1" class="displayNone"><br/>';
|
|
foreach ($valid_recipiens AS $fields) {
|
|
if (is_array($fields)) {
|
|
echo strtolower($fields['telefon']);
|
|
if (trim($fields['ime']) != '') {
|
|
echo ', '.$fields['ime'];
|
|
}
|
|
if (trim($fields['priimek']) != '') {
|
|
echo ', '.$fields['priimek'];
|
|
}
|
|
} else {
|
|
echo strtolower($fields);
|
|
}
|
|
echo '<br/>';
|
|
}
|
|
echo '</div>';
|
|
echo '</div>';
|
|
}
|
|
|
|
if ( (count($invalid_password) + count($insert_errors) ) > 0 ) {
|
|
echo '<div id="inv_recipiens_rejected">';
|
|
|
|
# ni veljavnih uporabnikov
|
|
if (count($valid_recipiens) == 0 ) {
|
|
echo $lang['srv_inv_recipiens_add_error'].'<br/>';
|
|
}
|
|
|
|
|
|
# neveljavena gesla
|
|
if (count($invalid_password) > 0) {
|
|
echo $lang['srv_inv_recipiens_add_invalid_password_cnt'].'<span class="inv_count"><span class="as_link" onclick="$(\'#invRecipiensList5\').toggle();">'.count($invalid_password).'!</span></span><br />';
|
|
echo '<div id="invRecipiensList5" class="displayNone"><br/>';
|
|
foreach ($invalid_password AS $fields) {
|
|
if (is_array($fields)) {
|
|
echo strtolower($fields['telefon']);
|
|
if (trim($fields['ime']) != '') {
|
|
echo ', '.$fields['ime'];
|
|
}
|
|
if (trim($fields['priimek']) != '') {
|
|
echo ', '.$fields['priimek'];
|
|
}
|
|
} else {
|
|
echo strtolower($fields);
|
|
}
|
|
echo '<br/>';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
# napake pri insertiranju
|
|
if (count($insert_errors) > 0) {
|
|
echo $lang['srv_inv_recipiens_add_invalid_password_cnt'].'<span class="inv_count"><span class="as_link" onclick="$(\'#invRecipiensList5\').toggle();">'.count($invalid_password).'!</span></span><br />';
|
|
echo '<div id="invRecipiensList5" class="displayNone"><br/>';
|
|
foreach ($insert_errors AS $fields) {
|
|
if (is_array($fields)) {
|
|
echo strtolower($fields['telefon']);
|
|
if (trim($fields['ime']) != '') {
|
|
echo ', '.$fields['ime'];
|
|
}
|
|
if (trim($fields['priimek']) != '') {
|
|
echo ', '.$fields['priimek'];
|
|
}
|
|
} else {
|
|
echo strtolower($fields);
|
|
}
|
|
echo '<br/>';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
echo '</div>';
|
|
|
|
return array_merge($invalid_password, $insert_errors) ;
|
|
}
|
|
return array();
|
|
}
|
|
|
|
function setNextAction() {
|
|
$phnNextAction = (int)$_REQUEST['phnNextAction'];
|
|
session_start();
|
|
$_SESSION['phnNextAction'][$this->sid] =$phnNextAction;
|
|
session_commit();
|
|
}
|
|
|
|
function getNextTimeCall() {
|
|
global $lang;
|
|
echo '<h2>'.$lang['srv_call_nonumber'].'</h2>';
|
|
|
|
# preverimo ali imamo kaj na shedučling
|
|
$str = "SELECT DATE_FORMAT(MIN(scs.call_time), '%d.%m.%Y %H:%i:%s') AS minTime"
|
|
." FROM srv_telephone_schedule AS scs LEFT JOIN srv_invitations_recipients AS sir ON scs.rec_id = sir.id WHERE sir.ank_id='$this->sid' AND sir.deleted='0'";
|
|
$qry = sisplet_query($str);
|
|
if (mysqli_num_rows($qry) > 0) {
|
|
list($nextTime) = mysqli_fetch_row($qry);
|
|
|
|
echo $lang['srv_call_nonumbers_time'];
|
|
echo ' <span class="strong">'.$nextTime.'</span>';
|
|
}
|
|
}
|
|
|
|
function setUserComment() {
|
|
|
|
$usr_id = (int)$_POST['usr_id'];
|
|
$comment = $_POST['comment'];
|
|
|
|
$comment = trim(strip_tags($comment));
|
|
|
|
$strInsert = "INSERT INTO srv_telephone_comment (rec_id, comment_time, comment) VALUES ('$usr_id', NOW(), '$comment') ON DUPLICATE KEY UPDATE comment_time = VALUES(comment_time), comment = VALUES(comment)";
|
|
$qryInsert = sisplet_query($strInsert);
|
|
}
|
|
|
|
function getProfileName(){
|
|
global $lang,$site_url, $global_user_id;
|
|
|
|
$array_profiles = array();
|
|
|
|
# polovimo še ostale porfile
|
|
$sql_string = "SELECT pid, name,comment FROM srv_invitations_recipients_profiles WHERE uid in('".$global_user_id."') AND from_survey = '".$this->sid. "'";
|
|
$sql_query = sisplet_query($sql_string);
|
|
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
|
|
$array_profiles[$sql_row['pid']] = array('name' => $sql_row['name'], 'comment'=>$sql_row['comment']);
|
|
}
|
|
|
|
|
|
echo '<div id="inv_recipients_profile_name">';
|
|
echo '<span class="inv_new_list_note">';
|
|
echo $lang[''].'Izberite seznam kamor želite dodati prejemnike. Izbirate lahko med:<br/><ul><li>\'Nov seznam\' - prejemniki se dodajo v nov seznam, kateremu določite ime</li><li>\'Začasen seznam\' - seznam obstaja samo v času seje brskalnika</li><li>ali izberete obstoječ seznam, h kateremu se bodo dodali prejemniki</li></ul><br/>';
|
|
echo '</span>';
|
|
echo $lang['srv_invitation_recipients_list_add'].': ';
|
|
echo '<select id="profile_id" onchange="inv_new_recipients_list_change(this);" autofocus="autofocus" tabindex="2">';
|
|
echo '<option value="0" class="gray bold"'.((int)$_POST['pid'] > 0 ? '' : ' selected="selected"' ).'>'.$lang['srv_invitation_new_list'].'</option>';
|
|
echo '<option value="-1" class="gray bold">'.$lang['srv_invitation_new_templist'].'</option>';
|
|
if (count($array_profiles) > 0){
|
|
foreach($array_profiles AS $key => $profile) {
|
|
echo '<option value="'.$key.'" comment="'.$profile['comment'].'"'.($_POST['pid'] == $key ? ' selected="selected"' : '').'>'.$profile['name'].'</option>';
|
|
}
|
|
}
|
|
echo '</select>';
|
|
echo '<span id="new_recipients_list_span" '.((int)$_POST['pid'] > 0 ? ' class="displayNone"' : '' ).'>';
|
|
echo '<br><br/>';
|
|
echo '<label>'.$lang['srv_inv_recipient_list_name'];
|
|
# zaporedno številčimo ime seznama1,2.... če slučajno ime že obstaja
|
|
$new_name = $lang['srv_inv_recipient_list_new'];
|
|
$names = array();
|
|
$s = "SELECT name FROM srv_invitations_recipients_profiles WHERE name LIKE '%".$new_name."%' AND uid='$global_user_id' AND from_survey='$this->sid'";
|
|
$q = sisplet_query($s);
|
|
while ($r = mysqli_fetch_assoc($q)) {
|
|
$names[] = $r['name'];
|
|
}
|
|
if (count($names) > 0) {
|
|
$cnt = 1;
|
|
while (in_array($lang['srv_inv_recipient_list_new'].$cnt, $names)) {
|
|
$cnt++;
|
|
}
|
|
$new_name = $lang['srv_inv_recipient_list_new'].$cnt;
|
|
}
|
|
|
|
echo '<input type="text" id="rec_profile_name" value="'.$new_name.'" tabindex="1" autofocus="autofocus">';
|
|
echo '</label>';
|
|
echo '</span>';
|
|
echo '<br/><br/>';
|
|
echo $lang['srv_inv_recipient_list_comment'];
|
|
echo '<textarea id="rec_profile_comment" tabindex="3" rows="2" ></textarea>';
|
|
echo '<span class="buttonwrapper floatLeft spaceRight" title="'.$lang['srv_cancel'].'"><a class="ovalbutton ovalbutton_gray" href="#" onclick="$(\'#fade\').fadeOut(\'slow\');$(\'#fullscreen\').fadeOut(\'slow\').html(\'\');return false;" ><span>'.$lang['srv_cancel'].'</span></a></span>';
|
|
echo '<span class="buttonwrapper floatRight spaceRight" title="'.$lang['save'].'"><a class="ovalbutton ovalbutton_orange" href="#" onclick="phnSaveNewProfile(); return false;"><span>'.$lang['save'].'</span></a></span>';
|
|
echo '</div>'; # id="inv_view_arch_recipients"
|
|
echo '<script type="text/javascript">';
|
|
echo "$('#rec_profile_name').focus();";
|
|
echo '</script>';
|
|
}
|
|
|
|
function saveNewProfile() {
|
|
global $lang, $global_user_id;
|
|
|
|
$profile_id = (int)$_POST['profile_id'];
|
|
$profile_name = $_POST['profile_name'];
|
|
$profile_comment = $_POST['profile_comment'];
|
|
$recipients_list = $_POST['recipients_list'];
|
|
$fields = str_replace('inv_field_','',implode(',',$_POST['fields']));
|
|
|
|
if (trim($fields) != '' && trim($recipients_list) != '') {
|
|
if ($profile_id < 0) {
|
|
# shranimo v začasen profil
|
|
session_start();
|
|
$_SESSION['phn_rec_profile'][$this->sid] = array(
|
|
'pid'=>-1,
|
|
'name'=>$lang['srv_invitation_new_templist'],
|
|
'fields'=>$fields,
|
|
'respondents'=>$recipients_list,
|
|
'comment'=>$profile_comment
|
|
);
|
|
} else if ($profile_id == 0) {
|
|
#shranjujemo v nov profil
|
|
|
|
# dodelimo ime
|
|
#zaporedno številčimo ime seznama1,2.... če slučajno ime že obstaja
|
|
if($profile_name == ''){
|
|
$new_name = $lang['srv_inv_recipient_list_new'];
|
|
$names = array();
|
|
$s = "SELECT name FROM srv_invitations_recipients_profiles WHERE name LIKE '%".$new_name."%' AND uid='$global_user_id' AND from_survey='$this->sid'";
|
|
$q = sisplet_query($s);
|
|
while ($r = mysqli_fetch_assoc($q)) {
|
|
$names[] = $r['name'];
|
|
}
|
|
if (count($names) > 0) {
|
|
$cnt = 1;
|
|
while (in_array($lang['srv_inv_recipient_list_new'].$cnt, $names)) {
|
|
$cnt++;
|
|
}
|
|
$new_name = $lang['srv_inv_recipient_list_new'].$cnt;
|
|
}
|
|
}
|
|
else{
|
|
$new_name = $profile_name;
|
|
}
|
|
|
|
$sql_insert = "INSERT INTO srv_invitations_recipients_profiles".
|
|
" (name,uid,fields,respondents,insert_time,comment, from_survey) ".
|
|
" VALUES ('$new_name', '$global_user_id', '$fields', '$recipients_list', NOW(), '$profile_comment', '$this->sid' )";
|
|
$sqlQuery = sisplet_query($sql_insert);
|
|
if (!$sqlQuery) {
|
|
$return['success'] = '0';
|
|
$return['msg'] = mysqli_error($GLOBALS['connect_db']);
|
|
} else {
|
|
$return['success'] = '1';
|
|
$return['pid'] = mysqli_insert_id($GLOBALS['connect_db']);
|
|
|
|
}
|
|
} else {
|
|
$this->saveProfile(array('pid'=>$profile_id,'fields'=>$fields,'recipients'=>$recipients_list));
|
|
}
|
|
}
|
|
list($recipients_list,$fields) = $this->getRecipientsProfile($profile_id);
|
|
$_POST['pid'] = $profile_id;
|
|
$this->addRecipientsView($fields,$recipients_list);
|
|
}
|
|
|
|
function saveProfile($atributes) {
|
|
$pid = (int)$atributes['pid'];
|
|
$fields = $atributes['fields'];
|
|
$recipients = $atributes['recipients'];
|
|
$comment = $atributes['comment'] !== null ? ", comment='".$atributes['comment']."' " : '';
|
|
if (trim($fields) != '' && trim($recipients) != '' && $pid > 0) {
|
|
# updejtamo obstoječ profil
|
|
$sql_update = " UPDATE srv_invitations_recipients_profiles".
|
|
" SET fields = '$fields', respondents ='$recipients', insert_time=NOW() $comment WHERE pid = '$pid'";
|
|
$sqlQuery = sisplet_query($sql_update);
|
|
}
|
|
|
|
if (!$sqlQuery) {
|
|
$return['success'] = '0';
|
|
$return['msg'] = mysqli_error($GLOBALS['connect_db']);
|
|
} else {
|
|
$return['success'] = '1';
|
|
$return['pid'] = $pid;
|
|
}
|
|
list($recipients_list,$fields) = $this->getRecipientsProfile($pid);
|
|
$_POST['pid'] = $pid;
|
|
$this->addRecipientsView($fields,$recipients_list);
|
|
}
|
|
|
|
function deleteProfile() {
|
|
global $global_user_id;
|
|
$id = (int)$_POST['pid'];
|
|
if ((int)$id > 0) {
|
|
|
|
$sql_string = "DELETE FROM srv_invitations_recipients_profiles WHERE pid='".$id."' ";
|
|
$sqlQuery = sisplet_query($sql_string);
|
|
sisplet_query("COMMIT");
|
|
}
|
|
}
|
|
|
|
function editProfile() {
|
|
global $lang, $site_url, $global_user_id;
|
|
$return = array('error'=>'0');
|
|
$pid = (int)$_POST['pid'];
|
|
if ($pid > 0) {
|
|
$sql_string = "SELECT name, comment, respondents FROM srv_invitations_recipients_profiles WHERE pid='".$pid."'";
|
|
$sqlQuery = sisplet_query($sql_string);
|
|
$sqlRow = mysqli_fetch_assoc($sqlQuery);
|
|
|
|
echo '<div id="inv_recipients_profile_name">';
|
|
echo '<div id="inv_error_note" class="hidden"></div>';
|
|
echo '<table>';
|
|
echo '<tr><td>'.$lang['srv_inv_recipient_list_name'].'</td>';
|
|
echo '<td>';
|
|
echo '<input type="text" id="rec_profile_name" value="'.$sqlRow['name'].'" autofocus="autofocus">';
|
|
echo '</td></tr>';
|
|
echo '<tr><td>'.$lang['srv_inv_recipient_list_comment'].'</td>';
|
|
echo '<td>';
|
|
echo '<input type="text" id="rec_profile_comment" value="'.$sqlRow['comment'].'" >';
|
|
echo '</td></tr>';
|
|
echo '<tr><td>'.$lang['srv_inv_recipient_list_recipients'].'</td>';
|
|
echo '<td>';
|
|
echo '<textarea id="rec_profile_respondents" style="width:250px; height:150px;">'.$sqlRow['respondents'].'</textarea>';
|
|
echo '</td></tr>';
|
|
echo '</table>';
|
|
|
|
echo '<input type="hidden" id="rec_profile_pid" value="'.$pid.'" >';
|
|
|
|
echo '<span class="buttonwrapper floatLeft spaceRight" title="'.$lang['srv_cancel'].'"><a class="ovalbutton ovalbutton_gray" href="#" onclick="$(\'#fade\').fadeOut(\'slow\');$(\'#fullscreen\').fadeOut(\'slow\').html(\'\');return false;" ><span>'.$lang['srv_cancel'].'</span></a></span>';
|
|
echo '<span class="buttonwrapper floatRight spaceRight" title="'.$lang['save'].'"><a class="ovalbutton ovalbutton_orange" href="#" onclick="phnUpdateProfile(); return false;"><span>'.$lang['save'].'</span></a></span>';
|
|
echo '</div>'; # id="inv_view_arch_recipients"
|
|
|
|
}
|
|
}
|
|
|
|
function updateProfile() {
|
|
global $lang,$site_url, $global_user_id;
|
|
$return = array('error'=>'0', 'msg'=>'');
|
|
$pid = (int)(int)$_POST['pid'];
|
|
|
|
$profile_name = (isset($_POST['profile_name']) && trim($_POST['profile_name']) != '') ? trim($_POST['profile_name']) : '';
|
|
$profile_comment = (isset($_POST['profile_comment']) && trim($_POST['profile_comment']) != '') ? trim($_POST['profile_comment']) : '';
|
|
$profile_respondents = (isset($_POST['profile_respondents']) && trim($_POST['profile_respondents']) != '') ? trim($_POST['profile_respondents']) : '';
|
|
if ($pid > 0) {
|
|
|
|
if ($profile_name != '') {
|
|
$sql_update = "UPDATE srv_invitations_recipients_profiles SET name = '$profile_name', comment = '$profile_comment', respondents = '$profile_respondents' WHERE pid = '$pid'";
|
|
$sqlQuery = sisplet_query($sql_update);
|
|
sisplet_query("COMMIT");
|
|
if (!$sqlQuery) {
|
|
$error = mysqli_error($GLOBALS['connect_db']);
|
|
$return = array('error'=>'1', 'msg'=>$error);
|
|
} else {
|
|
$return = array('error'=>'0', 'msg'=>$sql_update);
|
|
|
|
}
|
|
sisplet_query("COMMIT");
|
|
} else {
|
|
$return = array('error'=>'1', 'msg'=>$lang['srv_inv_msg_1']);
|
|
}
|
|
|
|
} else {
|
|
$return = array('error'=>'1', 'msg'=>$lang['srv_inv_msg_2']);
|
|
}
|
|
|
|
echo json_encode($return);
|
|
return json_encode($return);
|
|
}
|
|
|
|
function goToUser() {
|
|
$usr_id = (int)$_POST['showUser'];
|
|
$this->userCallToShow($usr_id,false,false);
|
|
}
|
|
|
|
|
|
function userCallToShow($usr_id,$openedSurvey,$schedule) {
|
|
global $lang;
|
|
global $site_url;
|
|
global $site_root;
|
|
|
|
$sql1 = sisplet_query("SELECT * FROM srv_invitations_recipients WHERE id = '$usr_id' AND deleted='0'");
|
|
$row1 = mysqli_fetch_array($sql1);
|
|
|
|
echo '<fieldset><legend>'.$lang['srv_telephone_call_start'].'</legend>';
|
|
|
|
echo '<table id="phn_call_table">';
|
|
# echo '<table style="width:100%" border="1">';
|
|
echo '<tr>
|
|
<th style="width:33%">'.$lang['srv_telephone_table_history'].'</th>
|
|
<th style="width:33%">'.$lang['srv_telephone_table_calling'].'</th>
|
|
<th style="width:34%">'.$lang['srv_telephone_table_comments'].'</th>
|
|
</tr>';
|
|
|
|
echo '<tr><td>';
|
|
$canCall = true;
|
|
$userStatus = array();
|
|
$last_status = '';
|
|
$sql2 = sisplet_query("SELECT DATE_FORMAT(insert_time, '%d.%m.%Y %H:%i:%s'), status FROM srv_telephone_history WHERE rec_id='$usr_id' ORDER BY insert_time ASC");
|
|
if (mysqli_num_rows($sql2) > 0 ) {
|
|
while (list($insert_time, $status) = mysqli_fetch_array($sql2)) {
|
|
echo '<div class="pregled_klicev">';
|
|
echo '<div id="top">';
|
|
echo '<div id="datum">';
|
|
echo $insert_time;
|
|
echo '</div>';
|
|
echo '<div id="status">';
|
|
echo $lang['srv_telephone_status_'.$status.'2'];
|
|
echo '</div>';
|
|
echo '</div>';
|
|
echo '<div id="comment">';
|
|
echo '</div>';
|
|
if ($status == 'U' || $status == 'R') {
|
|
# preverimo ali lahko uporabnika še kontaktiramo
|
|
$canCall = false;
|
|
}
|
|
$userStatus[$status] = true;
|
|
$last_status = $status;
|
|
}
|
|
} else {
|
|
echo $lang['srv_telephone_status_'];
|
|
}
|
|
|
|
echo '</td>';
|
|
|
|
echo '<td>';
|
|
if ($canCall == true) {
|
|
if ($openedSurvey) {
|
|
# zaprli smo aktivno anketo, prikažemo naslednji korak oz. izbiro zaključne akcije
|
|
echo '<p class="bottom16">'.$lang['srv_telephone_calling_number_end'].$row1['phone'].'</p>';
|
|
|
|
} else {
|
|
echo '<p class="bottom16">'.$lang['srv_telephone_calling_number'].($schedule == true ? $lang['srv_telephone_call_was_schedule']:' ').$row1['phone'].'</p>';
|
|
}
|
|
|
|
echo '<p class="bottom16 semi-bold caps">'.$lang['srv_telephone_calling_number_info'].'</p>';
|
|
|
|
if($row1['firstname'] != '')
|
|
echo '<p>'.$lang['name'].': '.$row1['firstname'].'<p>';
|
|
if($row1['lastname'] != '')
|
|
echo '<p>'.$lang['surname'].': '.$row1['lastname'].'</p>';
|
|
if($row1['email'] != '')
|
|
echo '<p>'.$lang['email'].': '.$row1['email'].'</p>';
|
|
if($row1['custom'] != '')
|
|
echo '<p>Custom: '.$row1['custom'].'</p>';
|
|
|
|
if($row1['firstname'] != '' || $row1['lastname'] != '' || $row1['email'] != '' || $row1['custom'] != '')
|
|
echo '<p class="bottom16"></p>';
|
|
}
|
|
else {
|
|
# onemogočimo ponovno klicanje uporabnika ker je zaključena ali je zavrnil
|
|
echo'<h2 class="red">';
|
|
if (isset($userStatus['U'])) {
|
|
echo $lang['srv_telephone_call_action_cant_edit_U'];
|
|
} elseif (isset($userStatus['R'])) {
|
|
echo $lang['srv_telephone_call_action_cant_edit_R'];
|
|
}
|
|
echo'</h2>';
|
|
echo '<h2 class="red">'.$row1['phone'].'</h2>';
|
|
|
|
if($row1['firstname'] != '')
|
|
echo '<h2>'.$lang['name'].': '.$row1['firstname'].'</h2>';
|
|
if($row1['lastname'] != '')
|
|
echo '<h2>'.$lang['surname'].': '.$row1['lastname'].'</h2>';
|
|
if($row1['email'] != '')
|
|
echo '<h2>'.$lang['email'].': '.$row1['email'].'</h2>';
|
|
if($row1['custom'] != '')
|
|
echo '<h2>Custom: '.$row1['custom'].'</h2>';
|
|
|
|
echo $lang['srv_telephone_calling_next_step'];
|
|
echo '<div style="padding-left: 20px;">';
|
|
echo '<p class="bold"><a href="'.$this->addUrl('view_recipients').'">'.$lang['srv_telephone_call_action_view_recipients'].'</a></p>';
|
|
echo '</div>';
|
|
}
|
|
|
|
|
|
#Uvod
|
|
$intro = $this->surveySettings['introduction'];
|
|
if (trim($intro) == '') {
|
|
$intro = $lang['srv_intro'];
|
|
}
|
|
|
|
echo '<p class="semi-bold caps bottom16">'.$lang['srv_telephone_call_introduction'].'</p>';
|
|
echo '<div class="phn_user_intro">';
|
|
echo $intro;
|
|
echo '</div>';
|
|
|
|
echo '</td>';
|
|
|
|
echo '<td>';
|
|
|
|
if ($canCall == true) {
|
|
/*if ($openedSurvey) {
|
|
# zaprli smo aktivno anketo, prikažemo naslednji korak oz. izbiro zaključne akcije
|
|
echo '<p class="red strong">'.$lang['srv_telephone_calling_step_action'].'</p>';
|
|
} else {
|
|
echo '<p class="red strong">'.$lang['srv_telephone_calling_next_step'].'</p>';
|
|
}*/
|
|
|
|
echo '<div>';
|
|
if ($openedSurvey) {
|
|
# uporqabnik je odprl anketo
|
|
echo '<p class="bottom8"><a href="ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=U">'.$lang['srv_call_successful2'].'</a></p>';
|
|
} else {
|
|
# uporabnik še ni odprl ankete
|
|
echo '<button class="small blue" onclick="phnStartSurvey(\''.$usr_id.'\');">'.$lang['srv_call_open'].'</button>';
|
|
}
|
|
if ($openedSurvey) {
|
|
} else {
|
|
# če smo na userju, potem smo ga dobili, zato ne more bit nedosegljiv ali zaseden
|
|
echo '<p class="bottom8"><a href="ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=Z">'.$lang['srv_call_zaseden'].'</a></p>';
|
|
echo '<p class="bottom8"><a href="ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=N">'.$lang['srv_call_ga_ni'].'</a></p>';
|
|
}
|
|
|
|
echo '<p class="bottom8"><a href="#" onclick="phnShowPopupAddMarker(\''.$usr_id.'\',\'T\'); return false;">'.$lang['srv_call_zmenjen'].'</a></p>';
|
|
echo '<p class="bottom8"><a href="#" onclick="phnShowPopupAddMarker(\''.$usr_id.'\',\'P\'); return false;">'.$lang['srv_call_prekinjen'].'</a></p>';
|
|
echo '<p><a href="ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=D">'.$lang['srv_call_prelozen'].'</a></p>';
|
|
|
|
# preverimo koliko številk še imamo razen trenutno izbrane
|
|
$toCall = $allUsers = $this->getAllNumbers();
|
|
unset($allUsers[$usr_id]);
|
|
|
|
# na voljo je še nekaj številk, izberemo novo
|
|
if ($allUsers > 0) {
|
|
// Dovolimo izbrati novo stevilko samo v primeru ko imamo nakljucno sortiranje
|
|
if($this->call_order == 0)
|
|
echo '<p class="top16 bottom16"><a href="'.$this->addUrl('clear_current').'">'.$lang['srv_telephone_call_action_cancel_nextNumber'].' ('.count($toCall).')</a></p>';
|
|
}
|
|
# na voljo je samo ta številka, ne moremo ponudit druge
|
|
else {
|
|
echo '<p class="top16 bottom16"><a href="'.$this->addUrl('start_call').'">'.$lang['srv_telephone_call_action_cancel_preview'].' ('.count($toCall).')</a></p>';
|
|
}
|
|
|
|
// Razveljavimo zadnji status (undo)
|
|
if($last_status == 'A')
|
|
echo '<p class="bottom16"><a href="#" onClick="phnUndoStatus(\''.$usr_id.'\')">'.$lang['srv_telephone_call_action_undo_status'].' (»'.$last_status.'«)</a></p>';
|
|
echo '</div>';
|
|
|
|
} else {
|
|
# onemogočimo ponovno klicanje uporabnika ker je zaključena ali je zavrnil
|
|
echo '<p class="red strong">'.$lang['srv_telephone_calling_next_step'].'</p>';
|
|
echo '<div style="padding-left: 20px;">';
|
|
|
|
// Seznam respondentov
|
|
echo '<p><a href="'.$this->addUrl('view_recipients').'">'.$lang['srv_telephone_call_action_view_recipients'].'</a></p>';
|
|
|
|
# preverimo koliko številk še imamo razen trenutno izbrane
|
|
$toCall = $allUsers = $this->getAllNumbers();
|
|
unset($allUsers[$usr_id]);
|
|
|
|
# na voljo je še nekaj številk, izberemo novo
|
|
if ($allUsers > 0) {
|
|
// Dovolimo izbrati novo stevilko samo v primeru ko imamo nakljucno sortiranje
|
|
if($this->call_order == 0)
|
|
echo '<p><a href="'.$this->addUrl('call').'">'.$lang['srv_telephone_call_action_cancel_nextNumber'].' ('.count($toCall).')</a></p>';
|
|
}
|
|
# na voljo je samo ta številka, ne moremo ponudit druge
|
|
else {
|
|
echo '<p><a href="'.$this->addUrl('start_call').'">'.$lang['srv_telephone_call_action_cancel_preview'].' ('.count($toCall).')</a></p>';
|
|
}
|
|
|
|
// Razveljavimo zadnji status (undo)
|
|
echo '<p><a href="#" onClick="phnUndoStatus(\''.$usr_id.'\')">'.$lang['srv_telephone_call_action_undo_status'].' (»'.$last_status.'«)</a></p>';
|
|
}
|
|
|
|
$str_comment = "SELECT comment from srv_telephone_comment WHERE rec_id = '$usr_id'";
|
|
$qry_comment = sisplet_query($str_comment);
|
|
$row_comment = mysqli_fetch_assoc($qry_comment);
|
|
echo $lang['srv_telephone_call_comment'];
|
|
echo '<div id="phn_user_comment" class="editable" onblur="phnSetUserComment(this,\''.$usr_id.'\');return false;" contentEditable="true">';
|
|
echo $row_comment['comment'];
|
|
echo '</div>';
|
|
|
|
# spodnje akcije
|
|
# če je anketar ne prikazujemo nextAction
|
|
if ($this->isAnketar == false) {
|
|
|
|
session_start();
|
|
$nextAction = 1;
|
|
|
|
if (isset($_SESSION['phnNextAction'][$this->sid]) && (int)$_SESSION['phnNextAction'][$this->sid]==0) {
|
|
$nextAction = 0;
|
|
}
|
|
|
|
/*echo '<div class="button_holder">';
|
|
echo '<button class="small white-blue" onclick="phnNextActionChange(0);">'.$lang['srv_telephone_call_action_cancel'].'</button>';
|
|
echo '<button class="small blue" onclick="phnNextActionChange(1);">'.$lang['srv_telephone_call_action_nextNumber'].'</button>';
|
|
echo '</div>';*/
|
|
|
|
echo '<div class="setting_holder">';
|
|
|
|
echo '<div class="setting_item">';
|
|
echo '<input type="radio" name="phnNextAction" id="phn_exit" value="0"'.($nextAction == 0?' checked="checked"':'').' ; return false;"><label for="phn_exit">';
|
|
echo $lang['srv_telephone_call_action_cancel'].'</label>';
|
|
echo '</div>';
|
|
echo '<div class="setting_item">';
|
|
echo '<input type="radio" name="phnNextAction" id="phn_next" value="1"'.($nextAction == 1?' checked="checked"':'').' onchange="phnNextActionChange(this); return false;"><label for="phn_next">';
|
|
echo $lang['srv_telephone_call_action_nextNumber'].'</label>';
|
|
echo '</div>';
|
|
|
|
echo '</div>';
|
|
|
|
|
|
|
|
}
|
|
|
|
echo '</td></tr>';
|
|
|
|
echo '</table>';
|
|
echo '</fieldset>';
|
|
}
|
|
|
|
|
|
/* Paginacija za pregled reposndentov
|
|
*
|
|
*/
|
|
function displayPagination($all_records) {
|
|
global $lang,$site_url;
|
|
#trenutna stran
|
|
$page = isset($_GET['page']) ? $_GET['page'] : '1';
|
|
$current = is_numeric($_GET['page']) && (int)$_GET['page'] > 0 ? $page : '1';
|
|
|
|
$all = ceil($all_records / REC_ON_PAGE);
|
|
|
|
# current nastavimo na zadnji element
|
|
if ( $all > 1) {
|
|
|
|
|
|
echo '<div id="pagination" style="margin-bottom:10px;">';
|
|
$baseUrl = $site_url.'admin/survey/index.php?anketa='.$this->sid.'&a='.A_TELEPHONE.'&m=view_recipients&page=';
|
|
|
|
# povezava -10
|
|
if ($all > 10) {
|
|
if ($current - 10 >= 0) {
|
|
echo('<div><a href="'.$baseUrl.($current - 10).'">-10</a></div>');
|
|
} else {
|
|
# brez href povezave
|
|
echo('<div class="disabledPage">-10</div>');
|
|
}
|
|
}
|
|
|
|
# povezava na prejšnjo stran
|
|
$prev_page = $current - 1 ? $current - 1 :$current;
|
|
if( ($current - 1) >= 1) {
|
|
echo('<div><a href="'.$baseUrl.$prev_page.'">'.$lang['previous_page_short'].'</a></div>');
|
|
} else {
|
|
# brez href povezave
|
|
echo('<div class="disabledPage">'.$lang['previous_page_short'].'</div>');
|
|
}
|
|
|
|
# povezave za vmesne strani
|
|
$middle = $all / 2;
|
|
$skipped = false;
|
|
for($a = 1; $a <= $all; $a++) {
|
|
if ($all < ((GROUP_PAGINATE+1) * 2) || $a <= GROUP_PAGINATE || $a > ($all-GROUP_PAGINATE)
|
|
|
|
|| ( abs($a-$current) < GROUP_PAGINATE)) {
|
|
if ($skipped == true) {
|
|
echo '<div class="spacePage">. . .</div>';
|
|
$skipped = false;
|
|
}
|
|
if($a == $current) {
|
|
# brez href povezave
|
|
echo('<div class="currentPage">'.($a).'</div>');
|
|
} else {
|
|
echo('<div><a href="'.$baseUrl.$a.'">'.($a).'</a></div>');
|
|
}
|
|
} else {
|
|
$skipped = true;
|
|
}
|
|
}
|
|
# povezava na naslednjo stran
|
|
$next_page = ($current + 1) ? ($current + 1) : $current;
|
|
if(($current ) < $all) {
|
|
echo('<div><a href="'.$baseUrl.$next_page.'">'.$lang['next_page_short'].'</a></div>');
|
|
} else {
|
|
# brez href povezave
|
|
echo('<div class="disabledPage">'.$lang['next_page_short'].'</div>');
|
|
}
|
|
if ($all > 10) {
|
|
if ($current + 10 < $all) {
|
|
echo('<div><a href="'.$baseUrl.($current + 10).'">+10</a></div>');
|
|
} else {
|
|
# brez href povezave
|
|
echo('<div class="disabledPage">+10</div>');
|
|
}
|
|
}
|
|
|
|
$rec_on_page = $all != $current ? REC_ON_PAGE : ( $all_records - ($all-1)*REC_ON_PAGE);
|
|
echo '<div class="justtext">'.$lang['srv_inv_pagination_shown'].$rec_on_page.$lang['srv_inv_pagination_shown_records'].'</div>';
|
|
echo '</div>';
|
|
}
|
|
else{
|
|
echo '<br />';
|
|
}
|
|
}
|
|
|
|
function startSurvey() {
|
|
# nastavimo marker na A
|
|
# in vrnemo dva urlja, enega za reload strani, drugega pa odpiranje ankete
|
|
global $lang, $site_url, $global_user_id;
|
|
|
|
$return = array('error'=>'1', 'msg'=>'Napaka','reloadUrl'=>'','surveyUrl'=>'');
|
|
|
|
if ((int)$_POST['usr_id'] > 0) {
|
|
|
|
$usr_id = (int)$_POST['usr_id'];
|
|
|
|
# nastavimo url za nastavitev statusa in reload strani
|
|
$return['reloadUrl'] = $site_url.'admin/survey/ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=A';
|
|
#ajax.php?anketa='.$this->sid.'&t='.A_TELEPHONE.'&m=addmark&usr_id='.$usr_id.'&status=A
|
|
|
|
#preberemo vse podatke respondenta
|
|
$res_sel = "SELECT * FROM srv_invitations_recipients WHERE id ='$usr_id'";
|
|
$res_query = sisplet_query($res_sel);
|
|
$res_row = mysqli_fetch_assoc($res_query);
|
|
|
|
#preverimo ali že obstaja povezava med respondentom in userjem
|
|
$chk_user = "SELECT id, pass FROM srv_user WHERE inv_res_id='$usr_id' AND ank_id='".$this->sid."'";
|
|
$chk_query = sisplet_query($chk_user);
|
|
$return['msg'] = $chk_user;
|
|
if (mysqli_num_rows($chk_query) > 0) {
|
|
# user že obstaja
|
|
$user_data = mysqli_fetch_assoc($chk_query);
|
|
|
|
# sestavimo še url za odpiranje izpolnjevanja ankete
|
|
$return['surveyUrl'] = $site_url.'a/'.SurveyInfo::getInstance()->getSurveyHash().'&survey-'.$this->sid.'&code='.$user_data['pass'];
|
|
$return['error'] = '';
|
|
}
|
|
else {
|
|
# user še ne obstaja vstavimo njegove podatke
|
|
# polovimo sistemske spremenljivke z vrednostmi
|
|
$strSistemske = "SELECT s.id, s.naslov, s.variable FROM srv_spremenljivka s, srv_grupa g WHERE s.sistem='1' AND s.gru_id=g.id AND g.ank_id='".$this->sid."' AND variable IN('" . implode("','",$this->inv_variables)."') ORDER BY g.vrstni_red, s.vrstni_red";
|
|
$qrySistemske = sisplet_query($strSistemske);
|
|
$sys_vars = array();
|
|
$sys_vars_ids = array();
|
|
|
|
while ($row = mysqli_fetch_assoc($qrySistemske)) {
|
|
$sys_vars[$row['id']] = array('id'=>$row['id'], 'variable'=>$row['variable'],'naslov'=>$row['naslov']);
|
|
$sys_vars_ids[] =$row['id'];
|
|
}
|
|
|
|
$sqlVrednost = sisplet_query("SELECT spr_id, id AS vre_id FROM srv_vrednost WHERE spr_id IN(".implode(',',$sys_vars_ids).") ORDER BY vrstni_red ASC ");
|
|
while ($row = mysqli_fetch_assoc($sqlVrednost)) {
|
|
if (!isset($sys_vars[$row['spr_id']]['vre_id'])) {
|
|
$sys_vars[$row['spr_id']]['vre_id'] = $row['vre_id'];
|
|
}
|
|
}
|
|
|
|
$strInsert = "INSERT INTO srv_user (ank_id, email, cookie, pass, last_status, time_insert, inv_res_id)"
|
|
." VALUES ('$this->sid','$res_row[email]','$res_row[cookie]', '$res_row[password]', '0', NOW(), '$res_row[id]') ON DUPLICATE KEY UPDATE cookie = '$res_row[cookie]', pass='$res_row[password]'";
|
|
sisplet_query($strInsert);
|
|
$srv_usr_id = mysqli_insert_id($GLOBALS['connect_db']);
|
|
|
|
sisplet_query("COMMIT");
|
|
if ($srv_usr_id) {
|
|
$strInsertDataText = array();
|
|
|
|
# dodamo še podatke za posameznega userja za sistemske spremenljivke
|
|
foreach ($sys_vars AS $sid => $spremenljivka) {
|
|
$_user_variable = $this->inv_variables_link[$spremenljivka['variable']];
|
|
if (trim($res_row[$_user_variable]) != '' && $res_row[$_user_variable] != null) {
|
|
$strInsertDataText[] = "('".$sid."','".$spremenljivka['vre_id']."','".trim($res_row[$_user_variable])."','".$srv_usr_id."')";
|
|
}
|
|
}
|
|
|
|
# vstavimo v srv_userbase
|
|
$strInsert = "INSERT INTO srv_userbase (usr_id, tip, datetime, admin_id) VALUES ('$srv_usr_id','0',NOW(),'$global_user_id')";
|
|
sisplet_query($strInsert);
|
|
|
|
# vstavimo v srv_userstatus
|
|
$strInsert = "INSERT INTO srv_userstatus (usr_id, tip, status, datetime) VALUES ('$srv_usr_id', '0', '0', NOW())";
|
|
sisplet_query($strInsert);
|
|
|
|
# vstavimo v srv_data_text
|
|
$db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString();
|
|
if (count($strInsertDataText) > 0) {
|
|
$strInsert = "INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ";
|
|
$strInsert .= implode(',',$strInsertDataText);
|
|
sisplet_query($strInsert);
|
|
}
|
|
sisplet_query("COMMIT");
|
|
|
|
# sestavimo še url za odpiranje izpolnjevanja ankete
|
|
$return['surveyUrl'] = $site_url.'a/'.SurveyInfo::getInstance()->getSurveyHash().'&survey-'.$this->sid.'&code='.$res_row[password];
|
|
$return['error'] = '';
|
|
}
|
|
}
|
|
}
|
|
|
|
echo json_encode($return);
|
|
|
|
exit;
|
|
}
|
|
|
|
function showPopupAddMarker() {
|
|
global $lang;
|
|
$newDate = date('d.m.Y H:i', time()+3600 );
|
|
$marker = $_POST['marker'];
|
|
$usr_id = (int)$_POST['usr_id'];
|
|
|
|
echo '<h2>'.$lang['srv_inv_recipients_status'].'</h2>';
|
|
echo '<div class="popup_close"><a href="#" onClick="$(\'#telephone_popup\').hide(); $(\'#fade\').fadeOut(\'slow\');">✕</a></div>';
|
|
|
|
$button_setting = '';
|
|
|
|
if ($usr_id > 0 && ($marker == 'P' || $marker == 'T')) {
|
|
if ($marker == 'T') {
|
|
# zmenjen
|
|
echo $lang['srv_telephone_call_mark_T_note'];
|
|
} else if ($marker == 'P') {
|
|
#prekinjen
|
|
echo $lang['srv_telephone_call_mark_P_note'];
|
|
}
|
|
|
|
echo '<p><form name="'.$marker.'">';
|
|
|
|
echo '<div class="setting_holder">';
|
|
echo '<div class="setting_item">';
|
|
echo '<input id="'.$marker.'_datetime" type="text" class="text large" name="'.$marker.'_datetime" value="'.$newDate.'" />
|
|
<span class="faicon calendar_icon blue pointer" id="'.$marker.'_datetime_image"></span>
|
|
<script type="text/javascript">
|
|
Calendar.setup({
|
|
inputField : "'.$marker.'_datetime",
|
|
ifFormat : "%d.%m.%Y %H:%M",
|
|
button : "'.$marker.'_datetime_image",
|
|
singleClick : true
|
|
});
|
|
</script></form>';
|
|
echo '</div>';
|
|
echo '</div>';
|
|
}
|
|
|
|
echo '<div class="button_holder">';
|
|
echo '<button class="medium white-blue" onClick="$(\'#telephone_popup\').hide(); $(\'#fade\').fadeOut(\'slow\');">'.$lang['edit1338'].'</button>';
|
|
|
|
if ($usr_id > 0 && ($marker == 'P' || $marker == 'T')){
|
|
|
|
if ($marker == 'T') {
|
|
echo '<button class="medium blue" onclick="phnAddMarker(\''.$usr_id.'\',\''.$marker.'\'); return false;">'.$lang['srv_call_zmenjen'].'</button>';
|
|
} else if ($marker == 'P') {
|
|
echo '<button class="medium blue" onclick="phnAddMarker(\''.$usr_id.'\',\''.$marker.'\'); return false;">'.$lang['srv_call_prekinjen'].'</button>';
|
|
}
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
// Nastavimo filter za pregled respondentov
|
|
function setRecipientFilter(){
|
|
|
|
session_start();
|
|
|
|
$_SESSION['inv_filter']['value'] = trim($_POST['tel_filter_value']);
|
|
|
|
session_commit();
|
|
}
|
|
|
|
function hightlight($str, $keywords = '') {
|
|
$keywords = preg_replace('/\s\s+/', ' ', strip_tags(trim($keywords))); // filter
|
|
$style = 'inv_high';
|
|
$style_i = 'inv_high_i';
|
|
/* Apply Style */
|
|
$var = '';
|
|
|
|
foreach(explode(' ', $keywords) as $keyword)
|
|
{
|
|
$replacement = "<span class='".$style."'>".$keyword."</span>";
|
|
$var .= $replacement." ";
|
|
$str = str_ireplace($keyword, $replacement, $str);
|
|
}
|
|
|
|
/* Apply Important Style */
|
|
|
|
$str = str_ireplace(rtrim($var), "<span class='".$style_i."'>".$keywords."</span>", $str);
|
|
|
|
return $str;
|
|
}
|
|
|
|
// Pobrisemo zadnji status respondenta (undo)
|
|
private function undoLastStatus(){
|
|
|
|
if(isset($_POST['usr_id'])){
|
|
$usr_id = $_POST['usr_id'];
|
|
|
|
$sql = sisplet_query("DELETE FROM srv_telephone_history WHERE rec_id='".$usr_id."' AND survey_id='".$this->sid."' ORDER BY insert_time DESC LIMIT 1");
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
}
|
|
}
|
|
}
|