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' )
2020-10-15 13:01:26 +02:00
include ( '../../../../../lang/1.php' );
2020-08-14 13:36:36 +02:00
elseif ( $this -> language == 'den' )
2020-10-15 13:01:26 +02:00
include ( '../../../../../lang/29.php' );
2020-08-14 13:36:36 +02:00
else
2020-10-15 13:01:26 +02:00
include ( '../../../../../lang/2.php' );
2020-08-14 13:36:36 +02:00
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)
2020-10-09 14:15:20 +02:00
public function getParameters (){
2020-08-14 13:36:36 +02:00
// 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 ;
2020-09-09 08:34:20 +02:00
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="">' ;
2020-10-13 09:58:16 +02:00
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>' ;
2020-08-14 13:36:36 +02:00
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 );
2020-10-07 10:52:28 +02:00
$tm_group [ 'tm_id' ] = $row [ 'id' ];
// Se povecamo max kvoto
if ( count ( $email_list ) > 0 ){
$sqlI = sisplet_query ( " UPDATE srv_evoli_teammeter SET kvota_max=kvota_max+ " . count ( $email_list ) . " WHERE ank_id=' " . $this -> anketa . " ' AND skupina_id=' " . $this -> group_id . " ' " );
}
2020-08-14 13:36:36 +02:00
}
// 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 , " \n RewriteRule ^ " . $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 ;
}
}
?>