1KA_F2F/admin/survey/modules/mod_EVOLI/class.EvoliForm.php

917 lines
31 KiB
PHP
Raw Normal View History

2020-08-14 13:36:36 +02:00
<?php
class EvoliForm {
var $pass = ''; // pass za dostop do obrazca
var $anketa; // id ankete
var $db_table = '';
var $email = ''; // email userja
var $language = 'eng'; // jezik skupine
var $departments = 0; // ali je mozen vnos oddelkov ali ne
var $group_id = 0; // ce dolocimo id skupine v naprej, lahko na obstojeco skupino dodajamo maile in departmente
var $type = 'team_meter'; // Tip porocila (team meter, quality climate, teamship meter, organizational employeeship meter)
function __construct($ank_id = 0){
global $site_url;
global $lang;
$this->getParameters();
// Naložimo jezikovno datoteko
if($this->language == 'slo')
include('../../../../lang/1.php');
elseif($this->language == 'den')
include('../../../../lang/29.php');
else
include('../../../../lang/2.php');
if ($this->anketa == 0 && $ank_id != 0)
$this->anketa = $ank_id;
// Ce imamo anketo in email stranke nadaljujemo
if ($this->anketa > 0){
# polovimo vrsto tabel (aktivne / neaktivne)
SurveyInfo :: getInstance()->SurveyInit($this->anketa);
if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) {
$this->db_table = '_active';
}
}
}
// Pridobimo parametre (ank_id in email)
private function getParameters(){
// Ce imamo kodirane parametre jih najprej odkodiramo
if (!isset($_GET['ank_id']) && isset($_GET['dc']) && $_GET['dc'] != null) {
$data = $_GET['dc'];
$data = base64_decode(urldecode($data));
//$data = unserialize($data);
$data = parse_str($data, $params);
foreach ($params AS $get_param => $value) {
if ($get_param != null && $get_param != '' && $value != null && $value != '' && $value != 'undefined') {
$_GET[$get_param] = $value;
}
}
}
if(isset($_GET['pass']))
$this->pass = $_GET['pass'];
elseif(isset($_POST['pass']))
$this->pass = $_POST['pass'];
if(isset($_GET['ank_id']))
$this->anketa = $_GET['ank_id'];
elseif(isset($_POST['ank_id']))
$this->anketa = $_POST['ank_id'];
else
$this->anketa = 0;
if(isset($_GET['email']))
$this->email = $_GET['email'];
elseif(isset($_POST['email']))
$this->email = $_POST['email'];
else
$this->email = 0;
if(isset($_GET['language']))
$this->language = $_GET['language'];
elseif(isset($_POST['language']))
$this->language = $_POST['language'];
else
$this->language = 'eng';
if(isset($_GET['departments']))
$this->departments = $_GET['departments'];
elseif(isset($_POST['departments']))
$this->departments = $_POST['departments'];
else
$this->departments = 0;
if(isset($_GET['group_id']))
$this->group_id = $_GET['group_id'];
elseif(isset($_POST['group_id']))
$this->group_id = $_POST['group_id'];
else
$this->group_id = 0;
}
public function getPass(){ return $this->pass; }
public function getAnkId(){ return $this->anketa; }
public function getEmail(){ return $this->email; }
public function getLanguage(){ return $this->language; }
public function getDepartments(){ return $this->departments; }
public function setReportType($type){
$this->type = $type;
}
// Prikazemo formo za vnos
public function displayForm(){
global $lang;
echo '<form method="post" action="'.$this->type.'.php">';
2020-08-14 13:36:36 +02:00
// Hidden ank_id in email
echo '<input type="hidden" name="pass" value="'.$this->pass.'">';
echo '<input type="hidden" name="ank_id" value="'.$this->anketa.'">';
echo '<input type="hidden" name="email" value="'.$this->email.'">';
echo '<input type="hidden" name="language" value="'.$this->language.'">';
echo '<input type="hidden" name="departments" value="'.$this->departments.'">';
echo '<input type="hidden" name="group_id" value="'.$this->group_id.'">';
// Ce imamo nastavljen id skupine, potem samo posljemo naknadne maile in nic ne dodajamo v bazo
$only_send = false;
if($this->group_id != 0 && $this->group_id != ''){
$sql = sisplet_query("SELECT tm.*, v.naslov AS skupina_naslov
FROM srv_evoli_teammeter tm, srv_vrednost v
WHERE tm.ank_id='".$this->anketa."' AND tm.skupina_id='".$this->group_id."' AND v.id=tm.skupina_id");
$row = mysqli_fetch_assoc($sql);
$only_send = true;
}
// Ime podjetja
if($only_send)
echo $lang['srv_evoli_form_company_name'].':<br /><input type="hidden" name="company" value="'.$row['skupina_naslov'].'">'.$row['skupina_naslov'];
else
echo $lang['srv_evoli_form_company_name'].':<br /><input type="text" name="company" value="">';
echo '<br /><br />';
// Ime posameznih oddelkov (ce je vklopljeno)
if($this->departments == 1){
echo '<div id="department_holder">';
echo $lang['srv_evoli_form_td'].':';
echo '<p class="department_p" id="department_p_1">';
echo '<input type="text" id="department_1" class="department" name="department[]" value="">';
echo '<a href="#" title="'.$lang['srv_evoli_form_dep_add'].'" onClick="addDepartment(); return false;" id="add_department_1" class="add_department"><img src="css/add.png" /></a>';
echo '<a href="#" title="'.$lang['srv_evoli_form_dep_remove'].'" onClick="deleteDepartment(); return false;" id="delete_department_1" class="delete_department"><img src="css/delete.png" /></a>';
echo '</p>';
echo '</div>';
echo '<br />';
}
// Datum zacetka
if($only_send)
echo $lang['srv_evoli_form_test_s'].':<br /><input type="hidden" name="date_from" value="'.date("d.m.Y", strtotime($row['date_from'])).'">'.date("d.m.Y", strtotime($row['date_from']));
else
echo $lang['srv_evoli_form_test_s'].':<br /><input type="text" name="date_from" id="date_from" value="'.date("d.m.Y", time()).'">';
echo '<br /><br />';
// Datum zakljucka - default 8 dno po zacetku
if($only_send)
echo $lang['srv_evoli_form_test_e'].':<br /><input type="hidden" name="date_to" value="'.date("d.m.Y", strtotime($row['date_to'])).'">'.date("d.m.Y", strtotime($row['date_to']));
else
echo $lang['srv_evoli_form_test_e'].':<br /><input type="text" name="date_to" id="date_to" value="'.date("d.m.Y", time() + (60 * 60 * 24 * 8)).'">';
echo '<br /><br />';
// Seznam emailov
echo $lang['srv_evoli_form_email_list'].':<br /><textarea name="email_list" rows="5" cols="40"></textarea>';
echo '<br />';
// Submit
echo '<input type="submit" name="submit" value="'.$lang['srv_evoli_form_send_inv'].'">';
echo '</form>';
// Prikazemo se help na desni
$this->displayHelp();
}
public function displayFooter(){
global $lang;
echo '<p>'.$lang['srv_evoli_form_footer'].'</p>';
}
public function displayError(){
global $lang;
echo $lang['srv_evoli_form_error'].'!';
}
public function displayErrorAccess(){
global $lang;
echo $lang['srv_evoli_form_error_access'].'!';
}
private function displayHelp(){
global $lang;
echo '<div id="tm_help">';
echo '<ol>';
echo '<li>'.$lang['srv_evoli_form_help1'].'</li>';
if($this->departments == 1)
echo '<li>'.$lang['srv_evoli_form_help2'].'</li>';
echo '<li>'.$lang['srv_evoli_form_help3'].'</li>';
echo '<li>'.$lang['srv_evoli_form_help4'].'</li>';
echo '</ol>';
echo '</div>';
}
// Po submitu preverimo vnose in shranimo vse podatke
public function submitForm(){
global $lang;
$errors = array();
// Ime podjetja
if(!isset($_POST['company']) || $_POST['company'] == '')
$errors['company'] = $lang['srv_evoli_form_missing_company'].'!';
else
$company = $_POST['company'];
// Datum zacetka
if(!isset($_POST['date_from']) || $_POST['date_from'] == '')
$date_from = date("d.m.Y", time());
else
$date_from = $_POST['date_from'];
// Datum trajanja
if(!isset($_POST['date_to']) || $_POST['date_to'] == '')
$date_to = date("d.m.Y", time() + (60 * 60 * 24 * 8));
else
$date_to = $_POST['date_to'];
// Deparments
$departments = array();
if(isset($_POST['department'])){
foreach($_POST['department'] as $department){
if($department != '')
$departments[] = $department;
}
}
// Izpis napak
if(!isset($_POST['email_list']) || $_POST['email_list'] == '')
$errors['email_list'] = $lang['srv_evoli_form_missing_email'].'!';
if(!isset($_POST['email']) || $_POST['email'] == '')
$errors['email'] = $lang['srv_evoli_form_missing_user'].'!';
if(!validEmail($_POST['email']))
$errors['email'] = $lang['srv_evoli_form_invalid_uemail'].'!';
if(!isset($_POST['ank_id']) || $_POST['ank_id'] == '' || $_POST['ank_id'] == '0')
$errors['anketa'] = $lang['srv_evoli_form_missing_survey'].'!';
if(!isset($_POST['date_from']) || $_POST['date_from'] == '' || $_POST['date_from'] == '0')
$errors['date_from'] = $lang['srv_evoli_form_missing_start'].'!';
if(!isset($_POST['date_to']) || $_POST['date_to'] == '' || $_POST['date_to'] == '0')
$errors['date_to'] = $lang['srv_evoli_form_missing_end'].'!';
$text = trim($_POST['email_list']);
$email_list = explode('\n', $text);
$email_list = array_filter($email_list, 'trim');
// V vsaki vrstici preverimo ce je veljaven mail
$email_list_fixed = array();
foreach($email_list as $key => $email) {
$email = str_replace('\n', '', str_replace('\r', '', $email));
if($email != ''){
if(!validEmail($email)){
$errors['invalid_email'][] = $email;
}
else
$email_list_fixed[$key] = $email;
}
}
// Preverimo stevilo vnesenih emailov - brez departmentov je limit 39
if(count($email_list_fixed) > 39 && !isset($_POST['department'])){
$errors['email_list_count'] = $lang['srv_evoli_form_email_count'].'!';
}
// Ce je vse ok, shranimo podatke aktiviramo skupino in posljemo maile
if(count($errors) == 0){
$this->saveData($company, $date_from, $date_to, $email_list_fixed, $departments);
// Zabelezimo da je kupec uspesno izvedel posiljanje in mu preprecimo nadaljni dostop
if($this->pass != '')
$sqlA = sisplet_query("UPDATE srv_evoli_landingPage_access SET used='1' WHERE ank_id='".$this->anketa."' AND email='".$this->email."' AND pass='".$this->pass."'");
}
// Drugace izpisemo opozorila za manjkajoca polja
else{
echo '<div id="tm_form_warnings">';
foreach($errors as $error => $value){
if($error == 'invalid_email'){
foreach($value as $invalid_email){
echo $lang['srv_evoli_form_invalid_email'].': '.$invalid_email.'<br />';
}
}
else
echo $value.'<br />';
}
echo '</div>';
$this->displayForm();
}
}
// Shranimo submitane podatke in aktiviramo skupino
private function saveData($company, $date_from, $date_to, $email_list, $departments=array()){
global $lang;
// Najprej ustvarimo skupino
$data = array('title' => $company,
'email' => $this->email,
'language' => $this->language,
//'quota' => '39',
'date_from' => $date_from,
'date_to' => $date_to
);
// Ce imamo departmente ni kvote (oz. je zaenkrat 1000), drugace je kvota enaka stevilu emailov
if(count($email_list) > 0)
$data['quota'] = count($email_list);
else
$data['quota'] = 39;
// Ce imamo dolocen id skupine, potem samo posiljamo dodatne emaile in dodajamo nove deparmente
if($this->group_id != 0 && $this->group_id != ''){
$tm_group = array();
$tm_group['group'] = $this->group_id;
$sql = sisplet_query("SELECT id FROM srv_evoli_teammeter WHERE ank_id='".$this->anketa."' AND skupina_id='".$this->group_id."'");
$row = mysqli_fetch_array($sql);
$tm_group['tm_id'] = $row['id'];
}
// Drugace dodamo novo skupino/podjetje
else{
$tm_group = $this->addGroupTeamMeter($this->anketa, $data);
}
// Ce je prislo do napake pri dodajanju skupine
if(isset($tm_group['error']) || !isset($tm_group['group']) || !isset($tm_group['tm_id'])){
echo $tm_group['error'];
die();
}
// Potem dodamo ustrezne vnose za oddelke (v tabelo)
if(count($departments) > 0){
$data = array('tm_id' => $tm_group['tm_id'],
'departments' => $departments
);
$tm_departments = $this->addSubGroupTeamMeter($this->anketa, $data);
// Ce je prislo do napake pri dodajanju podskupine (oddelka)
if(isset($tm_departments['error'])){
echo $tm_departments['error'];
die();
}
}
// Na koncu posljemo maile - ce je $date_from v prihodnosti samo shranimo za kasnejse posiljanje in poslejmo s cronjobom na ustrezen dan
$date_delayed = new DateTime($date_from);
$date_now = new DateTime();
if($date_delayed > $date_now) {
$delayed_sending = $this->saveDelayedEmails($this->anketa, $date_from, $tm_group, $email_list);
}
// Drugace normalno posljemo maileshranimo podatke
else{
$sending = $this->sendEmails($this->anketa, $tm_group, $email_list);
if(isset($sending['error'])){
echo $sending['error'];
die();
}
}
// Izpisemo povzetek vseh vnesenih podatkov
/*echo 'Survey: '.$this->anketa;
echo '<br />';*/
echo $lang['srv_evoli_form_author_email'].': '.$this->email;
echo '<br /><br />';
echo $lang['srv_evoli_form_company'].': '.$company;
echo '<br /><br />';
echo $lang['srv_evoli_form_date_from'].': '.$date_from;
echo '<br /><br />';
echo $lang['srv_evoli_form_date_to'].': '.$date_to;
echo '<br /><br />';
if(count($departments) > 0){
echo $lang['srv_evoli_form_dep'].':';
foreach($departments as $department){
echo '<br />'.$department;
}
echo '<br /><br />';
}
echo $lang['srv_evoli_form_emails'].':';
foreach($email_list as $email){
echo '<br />'.$email;
}
echo '<br /><br />';
echo $lang['srv_evoli_form_success'].'!';
}
// Posljemo email vabila
public function sendEmails($ank_id, $tm_group, $email_list){
global $lang;
global $global_user_id;
global $admin_type;
$return = array();
// Preverimo ce sploh imamo vklopljena vabila
$isEmail = (int)SurveyInfo::getInstance()->checkSurveyModule('email');
$d = new Dostop();
if(!((int)$isEmail > 0)){
$return['error'] = $lang['srv_evoli_form_err_inv'].'!';
return $return;
exit();
}
// Loop cez maile
foreach($email_list as $email){
// Preverimo ce obstajajo vse 3 sistemske spremenljivke
$sqlVariable = sisplet_query("SELECT s.id FROM srv_spremenljivka s, srv_grupa g WHERE s.variable='email' AND s.gru_id=g.id AND g.ank_id='".$ank_id."'");
if(mysqli_num_rows($sqlVariable) == 0){
$return['error'] = $lang['srv_evoli_form_err_sys'].'!';
}
else{
$skupina_id = 0;
$lang_id = 0;
// Preverimo ce obstaja skupina
$sqlTM = sisplet_query("SELECT * FROM srv_evoli_teammeter WHERE ank_id='".$ank_id."' AND id='".$tm_group['tm_id']."'");
if(mysqli_num_rows($sqlTM) == 1){
$rowTM = mysqli_fetch_array($sqlTM);
$skupina_id = $rowTM['skupina_id'];
$lang_id = $rowTM['lang_id'];
$date_start = date("d.m.Y", strtotime($rowTM['date_from']));
$date_end = date("d.m.Y", strtotime($rowTM['date_to']));
}
if($skupina_id == 0 || $lang_id == 0){
$return['error'] = $lang['srv_evoli_form_err_g1'].' "'.$tm_group['tm_id'].'" '.$lang['srv_evoli_form_err_g2'].'!';
return $return;
exit();
}
else{
$SI = new SurveyInvitationsNew($ank_id);
// polovimo sistemske spremenljivke z vrednostmi
$qrySistemske = sisplet_query("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='".$ank_id."' AND variable IN('email') ORDER BY g.vrstni_red, s.vrstni_red");
$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, vrstni_red, variable FROM srv_vrednost WHERE spr_id IN(".implode(',',$sys_vars_ids).") ORDER BY vrstni_red ASC ");
while ($row = mysqli_fetch_assoc($sqlVrednost)) {
$sys_vars[$row['spr_id']]['vre_id'] = $row['vre_id'];
}
$list_id = '';
// Generiramo kodo za respondenta
// katera gesla (code) že imamo v bazi za to anketo
$password_in_db = array();
$sql_query = sisplet_query("SELECT password FROM srv_invitations_recipients WHERE ank_id='".$ank_id."' AND deleted = '0'");
while ($sql_row = mysqli_fetch_assoc($sql_query)) {
$password_in_db[$sql_row['password']] = $sql_row['password'];
}
// Izberemo random hash, ki se ni v bazi
do {
list($code,$cookie) = $SI->generateCode();
}
while (in_array($code, $password_in_db));
// VSTAVIMO RESPONDENTA V SEZNAM
$sql_insert_start = sisplet_query("INSERT INTO srv_invitations_recipients
(ank_id, email, password, cookie, sent, responded, unsubscribed, deleted, date_inserted, inserted_uid, list_id)
VALUES
('".$ank_id."', '".$email."', '".$code."', '".$cookie."', '0', '0', '0', '0', NOW(), '".$global_user_id."', '".$list_id."')");
$rec_id = mysqli_insert_id($GLOBALS['connect_db']);
// polovimo sporočilo in prejemnike
$sql_query_m = sisplet_query("SELECT id, subject_text, body_text, reply_to, isdefault, comment, naslov, url FROM srv_invitations_messages WHERE ank_id = '".$ank_id."' AND isdefault='1'");
if (mysqli_num_rows($sql_query_m) > 0 ) {
$sql_row_m = mysqli_fetch_assoc($sql_query_m);
} else {
// Nimamo še vsebine sporočila
$return['error'] = $lang['srv_evoli_form_err_server'].'!';
return $return;
exit();
}
// Kreiramo mail
$subject_text = $sql_row_m['subject_text'];
$body_text = $sql_row_m['body_text'];
// Naslov za odgovor je avtor ankete
if ($SI->validEmail($sql_row_m['reply_to'])) {
$reply_to = $sql_row_m['reply_to'];
} else {
$reply_to = Common::getInstance()->getReplyToEmail();
}
# če mamo SEO
$nice_url = SurveyInfo::getSurveyLink();
$date_sent = date ("Y-m-d H:i:s");
$msg_url = $sql_row_m['url'];
# odvisno ali imamo url za jezik.
if ($msg_url != null && trim($msg_url) != '' ) {
$url = $msg_url.'?code='.$code;
} else {
$url = $nice_url.'&code='.$code;
}
$url .= '&ai='.(int)$arch_id;
// Url-ju dodamo se grupo in jezik
$url .= '&skupina='.$skupina_id.'&language='.$lang_id;
#odjava
$unsubscribe = $site_url . 'admin/survey/unsubscribe.php?anketa=' . $ank_id . '&code='.$code;
// VSTAVIMO POSILJANJE V ARHIV
$arvhive_naslov = 'mailing_'.date("d.m.Y").', '.date("H:i:s");
$sqlQuery = sisplet_query("INSERT INTO srv_invitations_archive
(id, ank_id, date_send, subject_text, body_text, uid, comment, naslov, rec_in_db)
VALUES
(NULL, '$ank_id', '$date_sent', '$subject_text', '$body_text', '$global_user_id', '', '$arvhive_naslov', '1')");
$arch_id = mysqli_insert_id($GLOBALS['connect_db']);
// Datapiping - dodatno zamenjamo še text #DATE_START# in #DATE_END# posebej za trajanje team meter testa
$user_body_text = str_replace(
array(
'#URL#',
'#URLLINK#',
'#UNSUBSCRIBE#',
'#EMAIL#',
'#CODE#',
'#PASSWORD#',
'#DATE_START#',
'#DATE_END#'
),
array(
'<a href="' . $url . '">' . $url . '</a>',
$url,
'<a href="' . $unsubscribe . '">' . $lang['user_bye_hl'] . '</a>',
$email,
$code,
$code,
$date_start,
$date_end
),
$body_text
);
// POSLJEMO MAIL
$resultX = null;
try{
$MA = new MailAdapter($ank_id, $type='invitation');
$MA->addRecipients($email);
$resultX = $MA->sendMail($user_body_text, $subject_text);
}
catch (Exception $e){
// todo fajn bi bilo zalogirat kaj se dogaja
$__error = $e->getMessage();
$__errStack = $e->getTraceAsString();
}
// Vabilo OK poslano
if ($resultX) {
// Updatamo prejemnika - status in sent
$sqlQuery = sisplet_query("UPDATE srv_invitations_recipients SET sent='1', date_sent='".$date_sent."', last_status='1' WHERE id='".$rec_id."'");
// Updatamo se arhiv
$sqlQuery = sisplet_query("UPDATE srv_invitations_archive SET cnt_succsess='1', cnt_error='0' WHERE id='".$arch_id."'");
// Updatamo arhiv prejemnikov
$sqlQuery = sisplet_query("INSERT INTO srv_invitations_archive_recipients (arch_id,rec_id,success) VALUES ('".$arch_id."','".$rec_id."','1')");
// Updatamo tracking
$sqlQueryTracking = sisplet_query("INSERT INTO srv_invitations_tracking (inv_arch_id, time_insert, res_id, status) VALUES ('".$arch_id."',NOW(),'".$rec_id."','1')");
// Dodamo userje v bazo
$sqlUserInsert = sisplet_query("INSERT INTO srv_user
(ank_id, email, cookie, pass, last_status, time_insert, inv_res_id)
VALUES
('".$ank_id."', '".$email."', '".$cookie."', '".$code."', '1', NOW(), '".$rec_id."') ON DUPLICATE KEY UPDATE cookie = '".$cookie."', pass='".$code."'");
$usr_id = mysqli_insert_id($GLOBALS['connect_db']);
if ($usr_id) {
// vstavimo v srv_userbase
sisplet_query("INSERT INTO srv_userbase (usr_id, tip, datetime, admin_id) VALUES ('".$usr_id."','0',NOW(),'".$global_user_id."')");
// vstavimo v srv_userstatus
sisplet_query("INSERT INTO srv_userstatus (usr_id, tip, status, datetime) VALUES ('".$usr_id."', '0', '0', NOW())");
// vstavimo v srv_data_text (email, ime, priimek)
SurveyInfo::getInstance()->SurveyInit($ank_id);
$db_table = (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) ? '_active' : '';
foreach ($sys_vars AS $sid => $spremenljivka) {
if($spremenljivka['variable'] == 'email')
sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$email."', '".$usr_id."')");
/*elseif($spremenljivka['variable'] == 'ime')
sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$firstname."', '".$usr_id."')");
elseif($spremenljivka['variable'] == 'priimek')
sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$lastname."', '".$usr_id."')");*/
}
}
else {
// lahko da user že obstaja in je šlo za duplicated keys
}
$return['note'] = $lang['srv_evoli_form_sent'].'.';
}
// Vabilo ni bilo poslano
else {
// Updatamo prejemnika - status in sent
$sqlQuery = sisplet_query("UPDATE srv_invitations_recipients SET last_status='2' WHERE id='".$rec_id."'");
// Updatamo se arhiv
$sqlQuery = sisplet_query("UPDATE srv_invitations_archive SET cnt_succsess='0', cnt_error='1' WHERE id='".$arch_id."'");
// Updatamo arhiv prejemnikov
$sqlQuery = sisplet_query("INSERT INTO srv_invitations_archive_recipients (arch_id,rec_id,success) VALUES ('".$arch_id."','".$rec_id."','0')");
// Updatamo tracking
$sqlQueryTracking = sisplet_query("INSERT INTO srv_invitations_tracking (inv_arch_id, time_insert, res_id, status) VALUES ('".$arch_id."',NOW(),'".$rec_id."','2')");
// Dodamo userje v bazo
$sqlUserInsert = sisplet_query("INSERT INTO srv_user
(ank_id, email, cookie, pass, last_status, time_insert, inv_res_id)
VALUES
('".$ank_id."', '".$email."', '".$cookie."', '".$code."', '2', NOW(), '".$rec_id."') ON DUPLICATE KEY UPDATE cookie = '".$cookie."', pass='".$code."'");
$usr_id = mysqli_insert_id($GLOBALS['connect_db']);
if ($usr_id) {
// vstavimo v srv_userbase
sisplet_query("INSERT INTO srv_userbase (usr_id, tip, datetime, admin_id) VALUES ('".$usr_id."','0',NOW(),'".$global_user_id."')");
// vstavimo v srv_userstatus
sisplet_query("INSERT INTO srv_userstatus (usr_id, tip, status, datetime) VALUES ('".$usr_id."', '0', '0', NOW())");
// vstavimo v srv_data_text (email, ime, priimek)
SurveyInfo::getInstance()->SurveyInit($ank_id);
$db_table = (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) ? '_active' : '';
foreach ($sys_vars AS $sid => $spremenljivka) {
if($spremenljivka['variable'] == 'email'){
$data_insert = sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$email."', '".$usr_id."')");
}
/*elseif($spremenljivka['variable'] == 'ime'){
$data_insert = sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$firstname."', '".$usr_id."')");
}
elseif($spremenljivka['variable'] == 'priimek'){
$data_insert = sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$sid."', '".$spremenljivka['vre_id']."', '".$lastname."', '".$usr_id."')");
}*/
}
}
else {
// lahko da user že obstaja in je šlo za duplicated keys
}
$return['error'] = $lang['srv_evoli_form_err_sending'].'!';
}
}
}
}
return $return;
}
// Shranimo podatke za naknadno posiljanje (skupina je aktivna sele kasneje)
private function saveDelayedEmails($ank_id, $date_from, $tm_group, $email_list){
$tm_group_string = serialize($tm_group);
$email_list_string = serialize($email_list);
$date_from = date("Y-m-d", strtotime($date_from));
// Vstavimo polje za naknadno posiljanje
$sql_insert_start = sisplet_query("INSERT INTO srv_evoli_teammeter_delayed
(ank_id, date_from, tm_group, emails)
VALUES
('".$ank_id."', '".$date_from."', '".$tm_group_string."', '".$email_list_string."')");
}
// Doda novo skupino za Evoli - teammeter
private function addGroupTeamMeter($ank_id, $data){
global $lang;
global $global_user_id;
global $admin_type;
global $site_path;
$return = array();
// Obvezni parametri
$group_naslov = (isset($data['title'])) ? $data['title'] : '';
$email = (isset($data['email'])) ? $data['email'] : '';
$language = (isset($data['language'])) ? $data['language'] : '';
$kvota_max = (isset($data['quota'])) ? $data['quota'] : '';
$date_from = (isset($data['date_from'])) ? $data['date_from'] : '';
$date_to = (isset($data['date_to'])) ? $data['date_to'] : '';
if($group_naslov != '' && $email != '' && $language != '' && $kvota_max != ''){
$ss = new SurveySkupine($ank_id);
$spr_id = $ss->hasSkupine();
// Na zacetku moramo ustvarit najprej vprasanje
if($spr_id == 0){
$sqlG = sisplet_query("SELECT id FROM srv_grupa WHERE ank_id='$ank_id' AND vrstni_red='1'");
$rowG = mysqli_fetch_array($sqlG);
$gru_id = $rowG['id'];
$b = new Branching($ank_id);
$spr_id = $b->nova_spremenljivka($grupa=$gru_id, $grupa_vrstni_red=1, $vrstni_red=0);
$sql = sisplet_query("UPDATE srv_spremenljivka SET naslov='".$lang['srv_skupina']."', variable='skupina', variable_custom='1', skupine='1', sistem='1', visible='0', size='0' WHERE id='$spr_id'");
Vprasanje::change_tip($spr_id, 1);
}
// Ustvarimo vrednost v vprasanju
$v = new Vprasanje($ank_id);
$v->spremenljivka = $spr_id;
$vre_id = $v->vrednost_new($group_naslov);
// Preverimo ce imamo nice URL -> dodamo dodatnega za skupine
$sql = sisplet_query("SELECT * FROM srv_nice_links WHERE ank_id='$ank_id'");
if(mysqli_num_rows($sql) > 0){
Common::updateEditStamp();
$row = mysqli_fetch_array($sql);
$add = false;
$anketa = $ank_id;
$nice_url = $row['link'];
$sql2 = sisplet_query("SELECT variable, vrstni_red FROM srv_vrednost WHERE id='$vre_id'");
$row2 = mysqli_fetch_array($sql2);
$nice_url .= '_'.$row2['vrstni_red'];
$f = @fopen($site_path.'.htaccess', 'rb');
if ($f !== false) {
$add = true;
while (!feof($f)) {
$r = fgets($f);
if (strpos($r, "^".$nice_url.'\b') !== false) { // preverimo, da ni tak redirect ze dodan
$add = false;
}
}
fclose($f);
}
if (strlen($nice_url) < 3) $add = false;
if (SurveyInfo::getInstance()->checkSurveyModule('uporabnost'))
$link = 'main/survey/uporabnost.php?anketa='.$anketa.'&skupina='.$vre_id;
else
$link = 'main/survey/index.php?anketa='.$anketa.'&skupina='.$vre_id;
if ($add) {
$f = @fopen($site_path.'.htaccess', 'a');
if ($f !== false) {
fwrite($f, "\nRewriteRule ^".$nice_url.'\b(.*) '.$link."&foo=\$1&%{QUERY_STRING}");
fclose($f);
$sqlI = sisplet_query("INSERT INTO srv_nice_links_skupine (id,ank_id,nice_link_id,vre_id,link) VALUES ('','$ank_id','$row[id]','$vre_id','$nice_url')");
}
}
}
if($language == 'slo')
$lang_id = 1;
elseif($language == 'den')
$lang_id = 29;
else
$lang_id = 2;
$nice_url = SurveyInfo::getSurveyLink();
$group_url = $nice_url.'?skupina='.$vre_id.'&language='.$lang_id;
// Popravimo datuma od in do
$date_from = date("Y-m-d", strtotime($date_from));
$date_to = date("Y-m-d", strtotime($date_to));
// Dodamo se vrednosti v posebno tabelo za evoli team meter
$sqlI = sisplet_query("INSERT INTO srv_evoli_teammeter
(ank_id, skupina_id, email, lang_id, url, kvota_max, date_from, date_to)
VALUES ('".$ank_id."', '".$vre_id."', '".$email."', '".$lang_id."', '".$group_url."', '".$kvota_max."', '".$date_from."', '".$date_to."')");
// Vrnemo id tm vnosa
$return['tm_id'] = mysqli_insert_id($GLOBALS['connect_db']);
// Vrnemo grupo
$return['group'] = $vre_id;
// Vrnemo tudi url do ankete za ustvarjeno skupino
$return['url'] = $group_url;
$return['note'] = $lang['srv_evoli_form_group_added'].'.';
}
else{
$return['error'] = $lang['srv_evoli_form_err_parameter1'].'!';
}
return $return;
}
// Doda novo PODskupino (department) za Evoli - teammeter
private function addSubGroupTeamMeter($ank_id, $data){
global $lang;
global $global_user_id;
global $admin_type;
global $site_path;
$return = array();
// Obvezni parametri
$departments = (isset($data['departments'])) ? $data['departments'] : '';
$tm_id = (isset($data['tm_id'])) ? $data['tm_id'] : '';
if(count($departments) > 0 && $tm_id != ''){
foreach($departments as $department){
// Dodamo se vrednosti v posebno tabelo oddelkov za evoli team meter
$sqlI = sisplet_query("INSERT INTO srv_evoli_teammeter_department
(tm_id, department)
VALUES ('".$tm_id."', '".$department."')");
}
}
else{
$return['error'] = $lang['srv_evoli_form_err_parameter2'].'!';
}
return $return;
}
// Preverimo ce ima kupec ustrezen pass za dostop do forme
public function checkAccess(){
// Ce obstaja user v bazi z ustreznim geslom ali gre za posebno geslo za rocen vnos
$sql = sisplet_query("SELECT pass FROM srv_evoli_landingPage_access WHERE ank_id='".$this->anketa."' AND email='".$this->email."' AND pass='".$this->pass."' AND used='0'");
if(mysqli_num_rows($sql) > 0 || $this->pass == 'evoli99admin')
return true;
else
return false;
}
}
?>