1KA_F2F/admin/survey/classes/class.SurveyAppendMerge.php

1088 lines
35 KiB
PHP
Raw Normal View History

2020-08-14 13:36:36 +02:00
<?php
/**
*
* V tem classu so funkcije, ki se ticejo appenda in merga podatkov
*
*/
class SurveyAppendMerge {
private $anketa;
private $db_table = '';
/**
*
*
* @param int $anketa ID ankete
*/
function __construct ($anketa) {
$this->anketa = $anketa;
SurveyInfo::getInstance()->SurveyInit($this->anketa);
$this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString();
2020-08-14 13:36:36 +02:00
}
function display ($merge = false) {
if ( count($_POST) == 0 ) {
echo '<div id="inv_import">';
$this->displayAppendMerge($merge);
echo '</div>';
} else {
$this->do_append_merge();
}
}
function displayAppendMerge ( $merge = false ) {
global $lang, $site_path, $site_url;
$field_list = array();
$sql = sisplet_query("SELECT s.id, s.variable, s.tip FROM srv_spremenljivka s, srv_grupa g WHERE s.gru_id=g.id AND g.ank_id='$this->anketa' AND s.tip IN (1, 2, 3, 7, 8, 21) ORDER BY g.vrstni_red, s.vrstni_red");
while ($row = mysqli_fetch_array($sql)) {
$field_list[$row['id']] = $row['variable'] . ' ('.($row['tip']==1?'radio':'').($row['tip']==2?'checkbox':'').($row['tip']==3?'dropdown':'').($row['tip']==21?'text':'').($row['tip']==7?'number':'').($row['tip']==8?'date':'').')';
}
$import_type = isset($_POST['import_type']) ? (int)$_POST['import_type'] : 2;
session_start();
// Append
if (!$merge){
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_append'].'</legend>';
echo '<form id="inv_recipients_upload_form" name="resp_uploader" enctype="multipart/form-data" method="POST" action="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m='.$_GET['m'].'">';
echo '<input type="hidden" name="MAX_FILE_SIZE" value="50000000" />';
echo '<input type="hidden" name="do" value="0">';
echo '<input type="hidden" name="anketa" value="'.$this->anketa.'">';
// Opis združevanja podatkov
echo '<p class="bottom16">'.$lang['srv_append_note'].'</p>';
2020-08-14 13:36:36 +02:00
// Korak 1
echo '<p class="bold">'.$lang['srv_append_step1'].'</p>';
echo '<div class="appendmerge_indent">';
echo '<ul>';
echo '<li>'.$lang['srv_append_step1_notea'].'</li>';
echo '<li>'.$lang['srv_append_step1_noteb'].'</li>';
echo '<li>'.$lang['srv_append_step1_notec'].'</li>';
echo '</ul>';
2020-08-14 13:36:36 +02:00
echo '<div id="inv_field_container">';
echo '<ul class="connectedSortable">';
$field_lang = array();
if (count($field_list ) > 0) {
foreach ($field_list AS $field => $text_label) {
# tukaj polja niso izbrana
$is_selected = false;
# če je polje obkljukano
$css = $is_selected ? ' class="inv_field_enabled"' : '';
# labela sproži klik checkboxa
$label_for = ' for="'.$field.'_chk"';
echo '<li id="'.$field.'"'.$css.'>';
echo '<input id="'.$field.'_chk" type="checkbox" name="fields[]" value="'.$field.'" class="inv_checkbox' . $hidden_checkbox . '"'.($is_selected == true ? ' checked="checked"' : '').' '.($merge?' onclick="merge_getItems();"':'').'>';
echo '<label'.$label_for.' style="display: inline">'.$text_label.'</label>';
echo '</li>';
if ($is_selected == true) {
$field_lang[] = $text_label;
}
}
}
echo '</ul>';
2020-08-14 13:36:36 +02:00
echo '</div>';
echo '<p>'.$lang['srv_append_step1_noted'].'</p>';
2020-08-14 13:36:36 +02:00
echo '</div>';
// Korak 2
echo '<p class="bold">'.$lang['srv_append_step2'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<script type="text/javascript">initAppendMergeConnectedSortable();</script>';
echo '<div class="setting_holder">';
echo '<span class="setting_title">'.$lang['srv_appendmerge_source'].'</span>';
echo '<div class="setting_item">';
echo '<input name="inv_import_type" id="inv_import_type0" type="radio" value="0" onclick="append_change_import_type(\''.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m='.$_GET['m'].'\');" checked="checked">';
echo '<label for="inv_import_type0">'.$lang['srv_iz_seznama'].'</label>';
echo '</div>';
echo '<div class="setting_item">';
echo '<input name="inv_import_type" id="inv_import_type1" type="radio" value="1" onclick="append_change_import_type(\''.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m=upload_xls\');">';
echo '<label for="inv_import_type1">'.$lang['srv_iz_excela'].'</label>';
echo '</div>';
echo '</div>';
2020-08-14 13:36:36 +02:00
echo '<input type="hidden" name="do_merge" value="0" id="do_merge">';
echo '</div>';
# iz seznama
echo '<div id="inv_import_list"'.($import_type != 1 ? '' : ' style="display:none"').'>' ;
// Korak 3
echo '<p class="bold">'.$lang['srv_append_step3'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo $lang['srv_append_step3_note'];
echo '<ul>';
echo '<li>'.$lang['srv_append_step3_note1'].'</li>';
echo '<li>'.$lang['srv_append_step3_note2'].'</li>';
echo '<li>'.$lang['srv_append_step3_note3'].'</li>';
echo '</ul>';
echo '<p class="top16 bottom16">'.$lang['srv_append_step3_note4'].'</p>';
echo '<ul>';
echo '<li>'.$lang['srv_append_step3_note5'].'</li>';
echo '<li>'.$lang['srv_append_step3_note6'].'</li>';
echo '</ul>';
echo '<p class="top16 bottom16">'.$lang['srv_append_step3_note7'].'</p>';
echo '<p>'.$lang['srv_append_step3_note8'].'</p>';
echo '<p>'.$lang['srv_append_step3_note9'].'</p>';
echo '<p class="top16">'.$lang['srv_append_step3_note10'].' <span id="inv_field_list" class="inv_type_0 bold">';
echo implode(', ',$field_lang);
echo '</span></p>';
echo '<textarea id="inv_recipients_list" name="inv_recipients_list"">';
2020-08-14 13:36:36 +02:00
if (is_array($recipients_list) && count($recipients_list) > 0 ) {
echo implode("\n",$recipients_list);
}
echo '</textarea>';
echo '</div>';
echo '</div>'; # id=inv_import_list
# iz datoteke
echo '<div id="inv_import_file"'.($import_type == 1 ? '' : ' style="display:none"').'>' ;
// Korak 3
echo '<p class="bold">'.$lang['srv_append_step3_xls'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<p class="top16 bottom16"><input type="file" name="recipientsFile" id="recipientsFile" /></p>';
2020-08-14 13:36:36 +02:00
echo '</div>';
echo '</div>'; # id=inv_import_file
echo '<div class="button_holder bottom16">';
echo '<button class="medium blue" onclick="append_submit(); return false;">'.$lang['srv_append_add'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
$d = new Dostop();
if ($d->checkDostopSub('edit')){
echo '<span class="red">';
2020-08-14 13:36:36 +02:00
printf($lang['src_coding_alert'], $this->anketa);
echo '</span>';
}
echo '</form>';
//echo '</div>'; # id=inv_import_list_container
echo '</fieldset>';
}
// Merge
else{
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_merge'].'</legend>';
echo '<form id="inv_recipients_upload_form" name="resp_uploader" enctype="multipart/form-data" method="POST" action="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m='.$_GET['m'].'">';
echo '<input type="hidden" name="MAX_FILE_SIZE" value="50000000" />';
echo '<input type="hidden" name="do" value="0">';
echo '<input type="hidden" name="anketa" value="'.$this->anketa.'">';
//Opis združevanja podatkov
echo '<p class="bottom16">'.$lang['srv_merge_note'].'</p>';
2020-08-14 13:36:36 +02:00
// Korak 1
echo '<p class="bold">'.$lang['srv_merge_step1'].'</p>';
echo '<div class="appendmerge_indent">';
echo '<ul>';
echo '<li>'.$lang['srv_merge_step1_notea'].'</li>';
echo '<li>'.$lang['srv_merge_step1_noteb'].'</li>';
echo '<li>'.$lang['srv_merge_step1_notec'].'</li>';
echo '</ul>';
2020-08-14 13:36:36 +02:00
echo '<div id="inv_field_container">';
echo '<ul class="connectedSortable">';
$field_lang = array();
if (count($field_list ) > 0) {
foreach ($field_list AS $field => $text_label) {
# tukaj polja niso izbrana
$is_selected = false;
# če je polje obkljukano
$css = $is_selected ? ' class="inv_field_enabled"' : '';
# labela sproži klik checkboxa
$label_for = ' for="'.$field.'_chk"';
echo '<li id="'.$field.'"'.$css.'>';
echo '<input id="'.$field.'_chk" type="checkbox" name="fields[]" value="'.$field.'" class="inv_checkbox' . $hidden_checkbox . '"'.($is_selected == true ? ' checked="checked"' : '').' '.($merge?' onclick="merge_getItems();"':'').'>';
echo '<label'.$label_for.' style="display: inline">'.$text_label.'</label>';
echo '</li>';
if ($is_selected == true) {
$field_lang[] = $text_label;
}
}
}
echo '</ul>';
2020-08-14 13:36:36 +02:00
echo '</div>';
echo '<p>'.$lang['srv_merge_step1_noted'].'</p>';
echo '</div>';
2020-08-14 13:36:36 +02:00
// Korak 2
echo '<p class="bold">'.$lang['srv_merge_step2'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<script type="text/javascript">initAppendMergeConnectedSortable();</script>';
echo '<div class="setting_holder">';
echo '<span class="setting_title">'.$lang['srv_appendmerge_source'].'</span>';
echo '<div class="setting_item">';
echo '<input name="inv_import_type" id="inv_import_type0" type="radio" value="0" onclick="append_change_import_type(\''.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m='.$_GET['m'].'\');" checked="checked">';
echo '<label for="inv_import_type0">'.$lang['srv_iz_seznama'].'</label>';
echo '</div>';
echo '<div class="setting_item">';
echo '<input name="inv_import_type" id="inv_import_type1" type="radio" value="1" onclick="append_change_import_type(\''.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m=upload_xls\');">';
echo '<label for="inv_import_type1">'.$lang['srv_iz_excela'].'</label>';
echo '</div>';
echo '</div>';
echo '</div>';
2020-08-14 13:36:36 +02:00
// Korak 3
echo '<p class="bold">'.$lang['srv_merge_step3'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<input type="hidden" name="do_merge" value="1" id="do_merge">';
echo '<p>'.$lang['srv_izberite_identifikator'].'</p>';
echo '<ul id="merge">';
echo '</ul>';
echo '</div>';
# iz seznama
echo '<div id="inv_import_list"'.($import_type != 1 ? '' : ' style="display:none"').'>' ;
// Korak 4
echo '<p class="bold">'.$lang['srv_merge_step4'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<ul>';
echo '<li>'.$lang['srv_append_step3_note1'].'</li>';
echo '<li>'.$lang['srv_append_step3_note2'].'</li>';
echo '<li>'.$lang['srv_append_step3_note3'].'</li>';
echo '</ul>';
2020-08-14 13:36:36 +02:00
echo '<p class="top16 bottom16">'.$lang['srv_append_step3_note4'].'</p>';
echo '<ul>';
echo '<li>'.$lang['srv_append_step3_note5'].'</li>';
echo '<li>'.$lang['srv_append_step3_note6'].'</li>';
echo '</ul>';
echo '<p class="top16 bottom16">'.$lang['srv_append_step3_note7'].'</p>';
echo '<p>'.$lang['srv_append_step3_note8'].'</p>';
echo '<p>'.$lang['srv_append_step3_note9'].'</p>';
echo '<p class="top16">'.$lang['srv_append_step3_note10'].' <span id="inv_field_list" class="inv_type_0 bold">';
2020-08-14 13:36:36 +02:00
echo implode(',',$field_lang);
echo '</span>';
echo '<textarea id="inv_recipients_list" name="inv_recipients_list">';
2020-08-14 13:36:36 +02:00
if (is_array($recipients_list) && count($recipients_list) > 0 ) {
echo implode("\n",$recipients_list);
}
echo '</textarea>';
echo '</div>';
echo '</div>'; # id=inv_import_list
# iz datoteke
echo '<div id="inv_import_file"'.($import_type == 1 ? '' : ' style="display:none"').'>' ;
// Korak 4
echo '<p class="bold">'.$lang['srv_merge_step4_xls'].'</p>';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo ' <input type="file" name="recipientsFile" id="recipientsFile" />';
echo '</div>';
echo '</div>'; # id=inv_import_file
echo '<div class="button_holder bottom16">';
echo '<button class="medium blue" onclick="append_submit(); return false;">'.$lang['srv_merge_add'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
$d = new Dostop();
if ($d->checkDostopSub('edit')){
echo '<span class="red">';
2020-08-14 13:36:36 +02:00
printf($lang['src_coding_alert'], $this->anketa);
echo '</span>';
}
echo '</form>';
echo '</fieldset>';
}
}
function do_append_merge() {
global $lang;
global $site_url;
global $global_user_id;
# dodamo uporabnike
$fields = $_POST['fields'];
$recipients_list = mysql_real_unescape_string( $_POST['inv_recipients_list'] );
$merge = (int)$_POST['merge'];
$do_merge = (int)$_POST['do_merge'];
$import_type = (int)$_POST['inv_import_type'];
if ($_POST['do']=='1') $do = true; else $do = false;
2020-08-14 13:36:36 +02:00
// ce uploadamo datoteko
if ($import_type == 1) {
$file_name = $_FILES["recipientsFile"]["tmp_name"];
$fh = @fopen($file_name, "rb");
if ($fh) {
$recipients_list = fread($fh, filesize($file_name));
fclose($fh);
}
if (isset ($_POST['recipientsDelimiter'])) {
$recipients_list = str_replace($_POST['recipientsDelimiter'], "|~|", $recipients_list);
}
else {
$recipients_list = str_replace(",", "|~|", $recipients_list);
}
}
// append
if ($do_merge == 0) {
$result = $this->appendData($do, $fields, $recipients_list);
if ($result == -1) {
$output = $lang['srv_append-merge_required_field'];
} elseif ($result == -3) {
$output = $lang['srv_append-merge_required_data'];
} elseif ($result >= 0) {
$output = $lang['srv_append-merge_added_1'].' '.$result.' '.$lang['srv_append-merge_added_2'];
}
// merge
} elseif ($do_merge == 1) {
$result = $this->mergeData($do, $fields, $recipients_list, $merge);
if ($result == -1) {
$output = $lang['srv_append-merge_required_field'];
} elseif ($result == -2) {
$output = $lang['srv_append-merge_required_id'];
} elseif ($result == -3) {
$output = $lang['srv_append-merge_required_data'];
} elseif ($result >= 0) {
$output = $lang['srv_append-merge_merged_1'].' '.$result.' '.$lang['srv_append-merge_merged_2'];
}
}
// prikazemo obvestilo in formo za potrditev
if ($import_type == 1){
if ($do_merge == 1)
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_merge'].'</legend>';
else
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_append'].'</legend>';
}
if ( ! $do ) {
// napaka
if ($result <= 0) {
echo '<h2>'.$lang['error'].'</h2>';
echo '<div class="popup_close"><a href="#" onClick="append_submit_close(); return false;"">✕</a></div>';
2020-08-14 13:36:36 +02:00
if ($result < 0)
echo '<p>'.$output.'</p>';
else
echo '<p>'.$lang['srv_append-merge_error_value'].'</p>';
echo '<div class="button_holder">';
echo '<button class="medium white-blue" onclick="append_submit_close(); return false;">'.$lang['back'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
} else {
echo '<h2>'.$lang['srv_potrditev'].'</h2>';
echo '<div class="popup_close"><a href="#" onClick="append_submit_close(); return false;"">✕</a></div>';
2020-08-14 13:36:36 +02:00
if ($do_merge == 0)
echo '<p>'.$lang['srv_append-merge_process_1'].' '.$result.' '.$lang['srv_append-merge_process_2'].'. '.'</p>';
else
echo '<p>'.$lang['srv_append-merge_process_o_1'].' '.$result.' '.$lang['srv_append-merge_process_o_2'].'</p>';
echo '<div class="button_holder">';
echo '<button class="medium white-blue" onclick="append_submit_close(); return false;">'.$lang['srv_cancel'].'</button>';
echo '<button class="medium blue" onclick="append_submit(1); return false;">'.$lang['srv_potrdi'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
}
// shranjeno, prikazemo resultat
} else {
echo '<h2>'.$lang['fin_import_ok'].'</h2>';
echo '<div class="popup_close"><a href="#" onClick="append_submit_close(); return false;"">✕</a></div>';
2020-08-14 13:36:36 +02:00
echo '<p>'.$output.'</p>';
echo '<p>'.$lang['srv_append-merge_fin'].'</p>';
echo '<div class="button_holder">';
echo '<button class="medium white-blue" onclick="append_submit_close(); return false;">'.$lang['srv_zapri'].'</button>';
echo '<button class="medium blue" onclick="window.location.href=\'index.php?anketa='.$this->anketa.'&a=data'.(count($this->usr_ids) < 100?'&highlight_usr='.implode('-', $this->usr_ids).'':'').'\'">'.$lang['data_show'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
}
if ($import_type == 1){
echo '</fieldset>';
}
}
private $usr_ids = array();
function appendData($do = true, $fields, $rawdata) {
if ($do) TrackingClass::update($this->anketa, 1);
if (false) {
echo 'dumping for append:';
echo '<pre>';
print_r($fields);
echo '</pre>';
echo '<pre>';
print_r($rawdata);
echo '</pre>';
}
$data = explode("\n", $rawdata);
if (count($fields) <= 0) return -1;
if ($rawdata == '') return -3;
if (count($data) <= 0) return -3;
$tip = array();
$vre_id = array();
$sql = sisplet_query("SELECT id, tip FROM srv_spremenljivka WHERE id IN (".implode(',', $fields).")");
while ($row = mysqli_fetch_array($sql)) {
$tip[$row['id']] = $row['tip'];
if ( in_array($row['tip'], array(1, 2, 3)) ) {
$s = sisplet_query("SELECT id, variable FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
while ($r = mysqli_fetch_array($s)) {
$vre_id[$row['id']][$r['variable']] = $r['id'];
}
} elseif ( in_array($row['tip'], array(7, 21,8)) ) {
// v tekstovno spremenljivko pisemo v prvo polje
$s = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
$r = mysqli_fetch_array($s);
$vre_id[$row['id']] = $r['id'];
}
}
$added = 0;
foreach ($data AS $dataline) {
$line = explode(',', $dataline);
foreach ($line AS $key => $val) {
$line[$key] = trim($val);
}
$added += $this->insertLine($line,$fields,$tip,$vre_id,$do);
}
if ($do) SurveyPostProcess::forceRefreshData($this->anketa);
return $added;
}
function insertLine($line,$fields,$tip,$vre_id,$do,$fromExcel=false){
$added=0;
// izberemo random hash, ki se ni v bazi
$ip = GetIP();
do {
2023-01-23 19:41:39 +01:00
$rand = md5(random_int(1, PHP_INT_MAX).'@'.$ip);
2020-08-14 13:36:36 +02:00
$sql = sisplet_query("SELECT id FROM srv_user WHERE cookie = '$rand'");
} while (mysqli_num_rows($sql) > 0);
// nov user
if ($do) {
$sql = sisplet_query("INSERT INTO srv_user (id, ank_id, cookie, time_insert, time_edit, last_status, lurker) VALUES ('', '$this->anketa', '$rand', NOW(), NOW(), '5', '0')");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$usr_id = mysqli_insert_id($GLOBALS['connect_db']);
}
if ($usr_id > 0 || $do==false) {
$this->usr_ids[] = $usr_id;
$i = 0;
foreach ($fields AS $id) {
if ($do) {
if ( in_array($tip[$id], array(1, 3)) ) {
$vre = $vre_id[$id][$line[$i]];
if ($vre != '') {
$sql = sisplet_query("INSERT INTO srv_data_vrednost".$this->db_table." (spr_id, vre_id, usr_id, loop_id) VALUES ('$id', '$vre', '$usr_id', NULL)");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
} elseif ( in_array($tip[$id], array(2)) ) {
$checks = explode(' ', $line[$i]);
if ( count($checks) > 0 ) {
$sql = sisplet_query("DELETE FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$id' AND usr_id='$usr_id' AND loop_id IS NULL");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
foreach ($checks AS $k => $v) {
$vre = $vre_id[$id][$v];
if ($vre != '') {
$sql = sisplet_query("INSERT INTO srv_data_vrednost".$this->db_table." (spr_id, vre_id, usr_id, loop_id) VALUES ('$id', '$vre', '$usr_id', NULL)");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
}
}
} elseif ( in_array($tip[$id], array(7, 21, 8)) ) {
if ($tip[$id] == 21) {
$vre = $vre_id[$id];
} elseif ($tip[$id] == 7 || $tip[$id] == 8) {
$vre = 0;
}
if ($tip[$id] == 8)
{
#datum prekodiramo v pravo obliko
$value = PHPExcel_Style_NumberFormat::toFormattedString($line[$i], "D.M.YYYY");
}
else
{
$value = $line[$i];
}
$sql = sisplet_query("INSERT INTO srv_data_text".$this->db_table." (id, spr_id, vre_id, text, text2, usr_id, loop_id) VALUES ('', '$id', '$vre', '$value', '', '$usr_id', NULL)");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
}
$i++;
}
$added++;
}
return $added;
}
function mergeData($do = true, $fields, $rawdata, $merge) {
if ($do) TrackingClass::update($this->anketa, 1);
if (false) {
echo 'dumping for merge:';
echo '<pre>';
print_r($fields);
echo '</pre>';
echo '<pre>';
print_r($rawdata);
echo '</pre>';
echo '<pre>';
print_r($merge);
echo '</pre>';
}
if (count($fields) <= 0) return -1;
if ($merge <= 0) return -2;
$merge_key = array_keys($fields, $merge);
$merge_key = $merge_key[0];
$data = explode("\n", $rawdata);
if ($rawdata == '') return -3;
if (count($data) <= 0) return -3;
$tip = array();
$vre_id = array();
$sql = sisplet_query("SELECT id, tip FROM srv_spremenljivka WHERE id IN (".implode(',', $fields).")");
while ($row = mysqli_fetch_array($sql)) {
$tip[$row['id']] = $row['tip'];
if ( in_array($row['tip'], array(1, 2, 3)) ) {
$s = sisplet_query("SELECT id, variable FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
while ($r = mysqli_fetch_array($s)) {
$vre_id[$row['id']][$r['variable']] = $r['id'];
}
} elseif ( in_array($row['tip'], array(7, 21, 8)) ) {
// v tekstovno spremenljivko pisemo v prvo polje
$s = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
$r = mysqli_fetch_array($s);
$vre_id[$row['id']] = $r['id'];
}
}
$merge_tip = $tip[$merge];
$merged = 0;
foreach ($data AS $dataline) {
$line = explode(',', $dataline);
foreach ($line AS $key => $val) {
$line[$key] = trim($val);
}
if ($line[$merge_key] != '') {
// poiscemo userja za merge
if ( in_array($merge_tip, array(1, 2, 3)) ) {
$sqlu = sisplet_query("SELECT usr_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$merge' AND vre_id='".$vre_id[$merge][$line[$merge_key]]."'");
} elseif ( in_array($merge_tip, array(7, 21, 8)) ) {
if ($merge_tip == 21) {
$vre = $vre_id[$merge];
} elseif ($merge_tip == 7 || $merge_tip == 8) {
$vre = 0;
}
$sqlu = sisplet_query("SELECT usr_id FROM srv_data_text".$this->db_table." WHERE spr_id='$merge' AND vre_id='$vre' AND text='$line[$merge_key]'");
}
if (!$sqlu) echo mysqli_error($GLOBALS['connect_db']);
while ($rowu = mysqli_fetch_array($sqlu)) {
if ($do) {
$usr_id = $rowu['usr_id'];
$s = sisplet_query("UPDATE srv_user SET time_edit=NOW() WHERE id='$usr_id'");
if (!$s) echo mysqli_error($GLOBALS['connect_db']);
$this->usr_ids[] = $usr_id;
}
$i = 0;
foreach ($fields AS $id) {
if ($id != $merge) {
if ($do) {
if ( in_array($tip[$id], array(1, 3)) ) {
$vre = $vre_id[$id][$line[$i]];
if ($vre != '') {
$sql = sisplet_query("DELETE FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$id' AND usr_id='$usr_id' AND loop_id IS NULL");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$sql = sisplet_query("INSERT INTO srv_data_vrednost".$this->db_table." (spr_id, vre_id, usr_id, loop_id) VALUES ('$id', '$vre', '$usr_id', NULL)");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
} elseif ( in_array($tip[$id], array(2)) ) {
$checks = explode(' ', $line[$i]);
if ( count($checks) > 0 ) {
$sql = sisplet_query("DELETE FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$id' AND usr_id='$usr_id' AND loop_id IS NULL");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
foreach ($checks AS $k => $v) {
$vre = $vre_id[$id][$v];
if ($vre != '') {
$sql = sisplet_query("INSERT INTO srv_data_vrednost".$this->db_table." (spr_id, vre_id, usr_id, loop_id) VALUES ('$id', '$vre', '$usr_id', NULL)");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
}
}
} elseif ( in_array($tip[$id], array(7, 21, 8)) ) {
if ($tip[$id] == 21) {
$vre = $vre_id[$id];
} elseif ($tip[$id] == 7 || $tip[$id] == 8) {
$vre = 0;
}
// ker je primary nastavljen na ID, moramo najprej pobrisat
$sql = sisplet_query("DELETE FROM srv_data_text".$this->db_table." WHERE spr_id='$id' AND vre_id='$vre' AND usr_id='$usr_id'");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$sql = sisplet_query("INSERT INTO srv_data_text".$this->db_table." (spr_id, vre_id, text, usr_id) VALUES ('$id', '$vre', '$line[$i]', '$usr_id')");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
}
}
$i++;
}
$merged++;
}
}
}
if ($do) SurveyPostProcess::forceRefreshData($this->anketa);
return $merged;
}
function upload_xls(){
global $lang, $site_url,$site_path,$global_user_id;
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_append'].'</legend>';
if (isset($_POST['fields']) && count($_POST['fields']) > 0){
if (isset($_FILES['recipientsFile'])
&& is_array($_FILES['recipientsFile'])
&& isset($_FILES['recipientsFile']['size']) && $_FILES['recipientsFile']['size'] > 0
&& (int)$_FILES['recipientsFile']['error'] == 0
&& (pathinfo($_FILES['recipientsFile']['name'],PATHINFO_EXTENSION) == 'xls' || pathinfo($_FILES['recipientsFile']['name'],PATHINFO_EXTENSION) == 'xlsx') )
{
$orig_parts = pathinfo($_FILES["recipientsFile"]["name"]);
$path_parts = pathinfo($_FILES["recipientsFile"]["tmp_name"]);
$fileName = $this->anketa.'_'.$global_user_id.'_'.$path_parts['filename'].'.'.$orig_parts['extension'];
$file = $site_path.'admin/survey/tmp/'.$fileName;
$move = move_uploaded_file($_FILES['recipientsFile']['tmp_name'], $file);
if ($move == true){
#spremenljivke
$field_list = array();
$sql = sisplet_query("SELECT s.id, s.variable, s.tip FROM srv_spremenljivka s, srv_grupa g WHERE s.gru_id=g.id AND g.ank_id='$this->anketa' AND s.tip IN (1, 2, 3, 7, 8, 21) ORDER BY g.vrstni_red, s.vrstni_red");
while ($row = mysqli_fetch_array($sql)) {
$field_list[$row['id']] = $row['variable'] . ' ('.($row['tip']==1?'radio':'').($row['tip']==2?'checkbox':'').($row['tip']==3?'dropdown':'').($row['tip']==21?'text':'').($row['tip']==7?'number':'').($row['tip']==8?'date':'').')';
}
include_once("./excel/PHPExcel.php");
require_once("./excel/PHPExcel/IOFactory.php");
$result = array();
$objPHPExcel = PHPExcel_IOFactory::load($file);
$objWorksheet = $objPHPExcel->getActiveSheet();
// Get worksheet dimensions
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$columns = array();
$highestColumn++;
for ($column = 'A'; $column != $highestColumn; $column++)
{
$columns[] = $column;
}
echo '<form id="append_xml" name="resp_uploader" enctype="multipart/form-data" method="POST" action="'.$site_url.'admin/survey/index.php?anketa='.$this->anketa.'&a=data&m=append_xls">';
echo '<input type="hidden" name="anketa" value="'.$this->anketa.'">';
echo '<input type="hidden" name="file" value="'.$fileName.'">';
foreach ($_POST['fields'] AS $field)
{
echo '<input id="'.$field.'_chk" type="hidden" name="fields[]" value="'.$field.'" />';
}
echo $lang['srv_append_xls_note'];
echo '<div id="inv_field_container">';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<ul class="connectedSortable">';
foreach ($_POST['fields'] AS $spr_id)
{
echo '<li class="inv_field_enabled nocursor"><label>'.$field_list[$spr_id].'</label></li>';
2020-08-14 13:36:36 +02:00
}
echo '</ul>';
echo '</div>';
echo '</div>';
if (count($columns) > 0){
echo '<p>'.$lang['srv_append_xls_step1'].'</p>';
2020-08-14 13:36:36 +02:00
echo '<div id="inv_field_container">';
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<ul class="connectedSortable">';
foreach ($columns AS $column){
echo '<li><input type="checkbox" name="xls_column[]" id="'.$column.'" value="'.$column.'"><label for="'.$column.'">'.$column.'</label></li>';
2020-08-14 13:36:36 +02:00
}
echo '</ul>';
echo '</div>';
echo '</div>';
}
echo $lang['srv_append_xls_step2'];
2020-08-14 13:36:36 +02:00
echo '<div class="appendmerge_indent">';
2020-08-14 13:36:36 +02:00
echo '<div class="setting_holder">';
echo '<label>'.$lang['srv_append_xls_step2_begin'].'</label>';
echo '<input name="start_row" type="number" min="1" max="'.(int)$highestRow.'" value="1">';
echo '</div>';
echo '<div class="setting_holder">';
echo '<label>'.$lang['srv_append_xls_step2_end'].'</label>';
echo '<input name="end_row" type="number" min="1" max="'.(int)$highestRow.'" value="'.(int)$highestRow.'">';
echo '</div>';
echo '<div class="button_holder top16 bottom0">';
echo '<button class="medium blue" onclick="$(\'#append_xml\').submit();">'.$lang['srv_append_add'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
echo '</div>';
echo '</form>';
}
}
elseif(pathinfo($_FILES['recipientsFile']['name'],PATHINFO_EXTENSION) != 'xls' && pathinfo($_FILES['recipientsFile']['name'],PATHINFO_EXTENSION) != 'xlsx'){
echo $lang['srv_iz_excela_xls_error'];
}
else{
echo 'File error. #'.(int)$_FILES['recipientsFile']['error'];
}
}
else
{
echo 'No list';
}
echo '</fieldset>';
}
function append_xls() {
global $lang, $site_url,$site_path,$global_user_id;
$fileName = $_POST['file'];
$file = $site_path.'admin/survey/tmp/'.$fileName;
$columns = $_POST['xls_column'];
$fields = $_POST['fields'];
$do_merge = (int)$_POST['do_merge'];
if (file_exists($file)
&& is_array($columns) && count($columns ) > 0
&& is_array($fields) && count($fields ) > 0)
{
$do = 1;
include_once("./excel/PHPExcel.php");
require_once("./excel/PHPExcel/IOFactory.php");
$objPHPExcel = PHPExcel_IOFactory::load($file);
$objWorksheet = $objPHPExcel->getActiveSheet();
// Get worksheet dimensions
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$start_row = min($_POST['start_row'],$highestRow);
$end_row = min($_POST['end_row'],$highestRow);
if ($end_row < $start_row)
{
$end_row = $start_row;
}
#podatki spremenljivk
$ids = array();
$tip = array();
$vre_id = array();
$sql = sisplet_query("SELECT id, tip FROM srv_spremenljivka WHERE id IN (".implode(',', $fields).")");
while ($row = mysqli_fetch_array($sql)) {
$tip[$row['id']] = $row['tip'];
if ( in_array($row['tip'], array(1, 2, 3)) ) {
$s = sisplet_query("SELECT id, variable FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
while ($r = mysqli_fetch_array($s)) {
$vre_id[$row['id']][$r['variable']] = $r['id'];
}
} elseif ( in_array($row['tip'], array(7, 21,8)) ) {
// v tekstovno spremenljivko pisemo v prvo polje
$s = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$row[id]' ORDER BY vrstni_red");
$r = mysqli_fetch_array($s);
$vre_id[$row['id']] = $r['id'];
}
}
$added = 0;
for ($row = $start_row; $row <= $end_row; ++$row)
{
$line=array();
foreach ($columns AS $column)
{
$value = $objWorksheet->getCell("$column$row")->getCalculatedValue();
$line[] = mysqli_real_escape_string($GLOBALS['connect_db'], $value);
#$line[] = mysqli_real_escape_string($GLOBALS['connect_db'], $objWorksheet->getCell("$column$row")->getValue());
}
$added += $this->insertLine($line,$fields,$tip,$vre_id,$do);
}
$result = $added;
}
else
{
echo $lang['srv_append-merge_error_file'];
}
if ($result == -1) {
$output = $lang['srv_append-merge_required_field'];
} elseif ($result == -3) {
$output = $lang['srv_append-merge_required_data'];
} elseif ($result >= 0) {
$output = $lang['srv_append-merge_added_1'].' '.$result.' '.$lang['srv_append-merge_added_2'];
}
// prikazemo obvestilo in formo za potrditev
if ($do_merge == 1)
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_merge'].'</legend>';
else
echo '<fieldset><legend>'.$lang['srv_data_subnavigation_append'].'</legend>';
if ( ! $do ) {
// napaka
if ($result <= 0) {
echo '<h2>'.$lang['error'].'</h2>';
if ($result < 0)
echo '<p>'.$output.'</p>';
else
echo '<p>'.$lang['merge_error_value'].'.</p>';
echo '<span id="inv_upload_recipients_no_sbmt" class="buttonwrapper floatLeft"><a class="ovalbutton ovalbutton_gray" onclick="append_submit_close(); return false;"><span>'.$lang['back'].'</span></a></span>';
} else {
echo '<h2>'.$lang['srv_potrditev'].'</h2>';
if ($do_merge == 0)
echo '<p>'.$lang['srv_append-merge_process_1'].' '.$result.' '.$lang['srv_append-merge_process_2'].'. </p>';
else
echo '<p>'.$lang['srv_append-merge_process_o_1'].' '.$result.' '.$lang['srv_append-merge_process_o_2'].'</p>';
echo '<span id="inv_upload_recipients_no_sbmt" class="buttonwrapper floatLeft"><a class="ovalbutton ovalbutton_orange" onclick="append_submit(1); return false;"><span>'.$lang['srv_potrdi'].'</span></a></span>';
echo '<span id="inv_upload_recipients_no_sbmt" class="buttonwrapper floatLeft"><a class="ovalbutton ovalbutton_gray" onclick="append_submit_close(); return false;"><span>'.$lang['srv_cancel'].'</span></a></span>';
}
// shranjeno, prikazemo resultat
} else {
echo '<p class="bold bottom16">'.$lang['fin_import_ok'].'</p>';
2020-08-14 13:36:36 +02:00
echo '<p>'.$output.'</p>';
echo '<p>'.$lang['fin_import_ok_text'].'</p>';
echo '<div class="button_holder top16 bottom0">';
echo '<button class="medium blue" onclick="window.location.href=\'index.php?anketa='.$this->anketa.'&a=data\'">'.$lang['data_show'].'</button>';
echo '</div>';
2020-08-14 13:36:36 +02:00
}
echo '</fieldset>';
}
function ajax() {
$this->anketa = $_REQUEST['anketa'];
if ($_GET['a'] == 'change_import_type') {
$this->ajax_change_import_type();
} elseif ($_GET['a'] == 'add_recipients') {
$this->ajax_addRecipients();
} elseif ($_GET['a'] == 'submit') {
$this->ajax_submit();
}
}
function ajax_change_import_type() {
$this->displayAppendMerge();
}
function ajax_addRecipients() {
$this->do_append_merge();
}
function ajax_submit () {
$this->do_append_merge();
}
}
?>