817 lines
32 KiB
PHP
817 lines
32 KiB
PHP
![]() |
<?php
|
||
|
/**
|
||
|
* Created on 11.12.2009
|
||
|
*
|
||
|
* @author: Gorazd Veselič
|
||
|
*/
|
||
|
|
||
|
session_start();
|
||
|
|
||
|
global $site_path;
|
||
|
|
||
|
|
||
|
class SurveyRespondents {
|
||
|
|
||
|
static private $instance;
|
||
|
|
||
|
static private $surveyId = null;
|
||
|
static private $uId = null;
|
||
|
|
||
|
static private $messages = null;
|
||
|
static private $errors = null;
|
||
|
|
||
|
static private $currentProfileId = null; // trenutno izbrana lista
|
||
|
static private $profiles = array(); // seznam vseh list uporannika
|
||
|
|
||
|
static private $systemVariables = null;
|
||
|
/* naredimo v konstruktu
|
||
|
static private $systemVariables = array(
|
||
|
'email' => array('naslov'=>$lang['srv_system_variables_email']),
|
||
|
'ime' => array('naslov'=>$lang['srv_system_variables_name']),
|
||
|
'priimek' => array('naslov'=>$lang['srv_system_variables_surname']),
|
||
|
'telefon' => array('naslov'=>$lang['srv_system_variables_phone']),
|
||
|
'naziv' => array('naslov'=>$lang['srv_system_variables_title']));
|
||
|
*/
|
||
|
|
||
|
protected function __construct() {
|
||
|
global $lang;
|
||
|
self::$systemVariables = array(
|
||
|
'email' => array('naslov'=>$lang['srv_system_variables_email']),
|
||
|
'pass' => array('naslov'=>$lang['password']),
|
||
|
'ime' => array('naslov'=>$lang['srv_system_variables_name']),
|
||
|
'priimek' => array('naslov'=>$lang['srv_system_variables_surname']),
|
||
|
'telefon' => array('naslov'=>$lang['srv_system_variables_phone']),
|
||
|
'naziv' => array('naslov'=>$lang['srv_system_variables_title']),
|
||
|
'drugo' => array('naslov'=>$lang['srv_system_variables_custom']),
|
||
|
'odnos' => array('naslov'=>$lang['srv_system_variables_relation']));
|
||
|
}
|
||
|
|
||
|
final private function __clone() {}
|
||
|
|
||
|
/** Poskrbimo za samo eno instanco razreda
|
||
|
*
|
||
|
*/
|
||
|
static function getInstance()
|
||
|
{
|
||
|
if(!self::$instance)
|
||
|
{
|
||
|
self::$instance = new SurveyRespondents();
|
||
|
}
|
||
|
return self::$instance;
|
||
|
}
|
||
|
|
||
|
/** napolnimo podatke
|
||
|
*
|
||
|
*/
|
||
|
static function Init($_surveyId)
|
||
|
{
|
||
|
global $global_user_id;
|
||
|
|
||
|
if ($_surveyId && $global_user_id)
|
||
|
{
|
||
|
self::$surveyId = $_surveyId;
|
||
|
self::$uId = $global_user_id;
|
||
|
// inicializiramo datoteko z nastavitvami
|
||
|
SurveyUserSetting :: getInstance()->Init(self::$surveyId, self::$uId);
|
||
|
// polovimo uporabnikovo privzeto listo
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::getSistemVariables();
|
||
|
} else {
|
||
|
die("Mandatory data missing in SurveyRespondents class!");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static function getSurveyId() { return self::$surveyId; }
|
||
|
static function getGlobalUserId() { return self::$uId; }
|
||
|
static function getCurentProfileId() { return self::$currentProfileId; }
|
||
|
|
||
|
static function getProfileId() {
|
||
|
// preverimo ali obstaja nastavitev
|
||
|
// poiščemo kateri profil variabel imamo
|
||
|
$drl = SurveyUserSetting :: getInstance()->getSettings('default_respondent_profile');
|
||
|
|
||
|
|
||
|
if ($drl == null || $drl < 1) {
|
||
|
$drl = self::checkDefaultProfile();
|
||
|
if ($drl > 0)
|
||
|
SurveyUserSetting :: getInstance()->saveSettings('default_respondent_profile', $drl);
|
||
|
|
||
|
}
|
||
|
self::$currentProfileId = $drl;
|
||
|
return self::$currentProfileId;
|
||
|
}
|
||
|
|
||
|
static function checkDefaultProfile() {
|
||
|
global $lang;
|
||
|
|
||
|
# če smo v telefonski anketi skreiramo začasen prazen profil,
|
||
|
if ($_GET['a'] == A_PHONE || $_POST['profile_from'] == A_PHONE) {
|
||
|
|
||
|
// najprej preverimo ali obstaja seja začasin profil
|
||
|
if ( isset($_SESSION['respondent_profile']) ) {
|
||
|
# preverimo ali obstaja variabla telefon, potem je bil provil pravilno skreiran
|
||
|
if (strpos($_SESSION['respondent_profile']['variables'],'telefon')) {
|
||
|
// vrnemo id iz seje
|
||
|
return $_SESSION['respondent_profile']['id'];
|
||
|
}
|
||
|
}
|
||
|
# če profil ne obstaja skreiramo nov zacasni prodil v obliki seje
|
||
|
|
||
|
$_SESSION['respondent_profile'] = array( 'id' => 0,
|
||
|
'uid' => self::getGlobalUserId(),
|
||
|
'variables' => 'telefon',
|
||
|
'lines' => array());
|
||
|
if (!isset($_SESSION['respondent_profile']['name'])) {
|
||
|
$_SESSION['respondent_profile']['name'] = $lang['srv_temp_profile_author'];
|
||
|
}
|
||
|
return 0; # vrnemo id = 0, pravkar skreiranega profila
|
||
|
}
|
||
|
# če pa smo v e-mail anketi pa skreiramo prazen e-mail profil
|
||
|
if ($_GET['a'] == A_EMAIL || $_POST['profile_from'] == A_EMAIL) {
|
||
|
|
||
|
// najprej preverimo ali obstaja seja začasin profil
|
||
|
if ( isset($_SESSION['respondent_profile']) ) {
|
||
|
# preverimo ali obstaja variabla email, potem je bil provil pravilno skreiran
|
||
|
if (strpos($_SESSION['respondent_profile']['variables'],'email')) {
|
||
|
// vrnemo id iz seje
|
||
|
return $_SESSION['respondent_profile']['id'];
|
||
|
}
|
||
|
}
|
||
|
# če profil ne obstaja skreiramo nov zacasni prodil v obliki seje
|
||
|
# in dodamo listo z avtorjevim e-mailom
|
||
|
$qryEmail = sisplet_query("SELECT email FROM users WHERE id = '".self::getGlobalUserId()."'");
|
||
|
$rowEmail = mysqli_fetch_assoc($qryEmail);
|
||
|
|
||
|
$_SESSION['respondent_profile'] = array( 'id' => 0,
|
||
|
'uid' => self::getGlobalUserId(),
|
||
|
'variables' => 'email',
|
||
|
'lines' => array($rowEmail['email']));
|
||
|
if (!isset($_SESSION['respondent_profile']['name'])) {
|
||
|
$_SESSION['respondent_profile']['name'] = $lang['srv_temp_profile_author'];
|
||
|
}
|
||
|
return 0; # vrnemo id = 0, pravkar skreiranega profila
|
||
|
}
|
||
|
|
||
|
# če smo tukaj je napaka !
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/** Pridobimo seznam vseh list uporabnika
|
||
|
* v obliki arraya
|
||
|
*/
|
||
|
static function getProfiles() {
|
||
|
|
||
|
self::$profiles = array();
|
||
|
// dodamo profil iz seje , če obstaja
|
||
|
if ( isset($_SESSION['respondent_profile']) ) {
|
||
|
self::$profiles[$_SESSION['respondent_profile']['id']] = $_SESSION['respondent_profile'];
|
||
|
}
|
||
|
|
||
|
// dodamo še ostale profile iz baze
|
||
|
$stringSelect = "SELECT * FROM srv_respondent_profiles WHERE uid = '".self::getGlobalUserId()."' ORDER BY id";
|
||
|
$querySelect = sisplet_query($stringSelect);
|
||
|
|
||
|
while ( $rowSelect = mysqli_fetch_assoc($querySelect) ) {
|
||
|
self::$profiles[$rowSelect['id']] = $rowSelect;
|
||
|
}
|
||
|
return self::$profiles;
|
||
|
}
|
||
|
|
||
|
static function getProfileData($pid = null) {
|
||
|
$result = array();
|
||
|
if($pid == null) {
|
||
|
$pid = self::$currentProfileId;
|
||
|
}
|
||
|
if (isset($_SESSION['respondent_profile']['id']) && $pid == $_SESSION['respondent_profile']['id']) {
|
||
|
$result[$_SESSION['respondent_profile']['id']] = array('pid'=> $_SESSION['respondent_profile']['id'], 'lines'=>$_SESSION['respondent_profile']['lines']);
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
// cene dodamo podatke iz baze
|
||
|
|
||
|
$selectString = "SELECT * FROM srv_respondents WHERE pid = '".$pid."'";
|
||
|
$querySelect = sisplet_query($selectString);
|
||
|
$_lines = array();
|
||
|
while ( $rowSelect = mysqli_fetch_assoc($querySelect) ){
|
||
|
$_lines[] = $rowSelect['line'];
|
||
|
}
|
||
|
$result[$pid] = array('pid'=> $pid, 'lines'=>$_lines);
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
static function getSistemVariables() {
|
||
|
// osnovnm sistemskim variablam dodamo tiste iz ankete
|
||
|
$sqlSistemske = 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='".self::getSurveyId()."' ORDER BY g.vrstni_red, s.vrstni_red");
|
||
|
if (mysqli_num_rows($sqlSistemske) > 0) {
|
||
|
while ($rowSistemske = mysqli_fetch_assoc($sqlSistemske)) {
|
||
|
if (!isset(self::$systemVariables[$rowSistemske['variable']])) {
|
||
|
self::$systemVariables[$rowSistemske['variable']] = array('naslov'=>$rowSistemske['naslov']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return self::$systemVariables;
|
||
|
}
|
||
|
|
||
|
static function displayProfiles() {
|
||
|
global $admin_type;
|
||
|
global $lang;
|
||
|
|
||
|
?>
|
||
|
<div class="respondent_profile_holder">
|
||
|
<div id="respondent_profiles" class="select">
|
||
|
<input type="hidden" id="profile_from" value="<?php
|
||
|
|
||
|
echo isset($_POST['profile_from']) ? $_POST['profile_from'] : $_GET['a']; ?>" />
|
||
|
<?php
|
||
|
foreach ( self::$profiles as $key => $profile ) {
|
||
|
echo '<div class="option' . ($profile['id'] == self::$currentProfileId ? ' active' : '') . '" value="' . $profile['id'] . '">' . $profile['name'] . '</div>';
|
||
|
}
|
||
|
?>
|
||
|
</div>
|
||
|
<div class="clr"></div>
|
||
|
<div class="respondent_profiles_links link_no_decoration">
|
||
|
<a href="#" onclick="showDeleteRespondentProfile(); return false;"><?=$lang['srv_delete_profile'];?></a><br/>
|
||
|
<?php
|
||
|
//zacasnega profila ne moremo preimenovat
|
||
|
if (self::$currentProfileId != 0)
|
||
|
echo ' <a href="#" onclick="showRenameRespondentProfile(); return false;">'.$lang['srv_rename_profile'].'</a>'."\n";
|
||
|
?>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="respondent_profile_values" ><?=self::displayProfileData(self::$currentProfileId);?></div>
|
||
|
<div id="respondent_profile_right" >
|
||
|
<?php
|
||
|
if (!($admin_type <= 1)) {
|
||
|
?>
|
||
|
<?=$lang['srv_user_base_user_note20']?></p><?
|
||
|
}
|
||
|
?>
|
||
|
<div id="respondent_profile_notes" ><?=$lang['srv_mailing_add_help'];?></div>
|
||
|
<div id="respondent_profile_upload" >
|
||
|
<form id="resp_uploader" name="resp_uploader" method="post" enctype="multipart/form-data" action="index.php?anketa=<?=self::getSurveyId();?>&a=email&m=uploadRespondents">
|
||
|
<input type="hidden" name="posted" value="1" /><?=$lang['srv_mailing_upload_list'];?>:<input type="file" name="ul" id="ul" size="42"onChange="submit();" />
|
||
|
</form>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="clr"></div>
|
||
|
<script type="text/javascript">
|
||
|
$(document).ready(function() {
|
||
|
$("#respondent_profiles .option").click(function() {
|
||
|
$("#respondent_profiles .option").each(function () {
|
||
|
$(this).removeClass("active"); });
|
||
|
$(this).addClass("active");
|
||
|
change_respondent_profile($(this).attr('value'));
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
<!-- dialog za skrani kot nov -->
|
||
|
<div id="respondent_new_dialog"><?=$lang['srv_respondent_profile_name']?>:
|
||
|
<input id="newProfileName" name="newProfileName" type="text" value="" size="45" />
|
||
|
<input id="newProfileId" type="hidden" />
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onclick="$('#respondent_new_dialog, #fade').hide(); return false;"><span><?=$lang['srv_close_profile'];?></span></a></span></span>
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_orange" href="#" onclick="respondent_saveNewProfile(); return false;"><span><?=$lang['srv_save_profile_yes'];?></span></a></span></span>
|
||
|
</div>
|
||
|
|
||
|
<!-- dialog za preimenuj -->
|
||
|
<div id="respondent_rename_dialog"><?=$lang['srv_respondent_profile_name'];?>:
|
||
|
<input id="renameProfileName" name="renameProfileName" type="text" value="<?=self::$profiles[self::$currentProfileId]['name'];?>" size="45" />
|
||
|
<input id="renameProfileId" type="hidden" />
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onclick="$('#respondent_rename_dialog, #fade').hide(); return false;"><span><?=$lang['srv_close_profile'];?></span></a></span></span>
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_orange" href="#" onclick="respondent_renameProfile(); return false;"><span><?=$lang['srv_rename_profile_yes'];?></span></a></span></span>
|
||
|
</div>
|
||
|
|
||
|
<!-- div za brisanje -->
|
||
|
<div id="respondent_delete_dialog"><?=$lang['srv_missing_profile_delete_confirm'];?>: <b><?=self::$profiles[self::$currentProfileId]['name']?></b>?
|
||
|
<input id="deleteProfileId" type="hidden" value="<?=self::$currentProfileId?>" />
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onclick="$('#respondent_delete_dialog, #fade').hide(); return false;"><span><?=$lang['srv_close_profile'];?></span></a></span></span>
|
||
|
<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_orange" href="#" onclick="respondent_deleteProfile(); return false;"><span><?=$lang['srv_delete_profile_yes'];?></span></a></span></span>
|
||
|
</div>
|
||
|
<?php
|
||
|
|
||
|
|
||
|
}
|
||
|
static function displayProfileData($pid) {
|
||
|
|
||
|
global $lang;
|
||
|
|
||
|
$pd = self::getProfileData($pid);
|
||
|
|
||
|
$data = implode("\n",$pd[$pid]['lines']);
|
||
|
|
||
|
echo '<p> <span class="labelSpanWide" >'.$lang['srv_respondents_variables'].':</span>';
|
||
|
echo '<div id="respondent_profile_variables_box">';
|
||
|
foreach (self::$systemVariables as $sysKey =>$sysVar) {
|
||
|
echo '<input type="checkbox" value="'.$sysKey.'" name="resp_check"',((strpos(self::$profiles[$pid]['variables'],$sysKey) === false) ? '' : ' checked="checked"'),
|
||
|
' onChange="respondent_change_variable(\''.$sysKey.'\');" />',$sysVar['naslov'];
|
||
|
|
||
|
|
||
|
}
|
||
|
echo '</div>';
|
||
|
echo '<div class="clr"></div>';
|
||
|
echo '<span class="labelSpanWide" > </span>';
|
||
|
echo '<input type="text" id="respondent_profile_variables" value="' . self::$profiles[$pid]['variables'] . '" /></p>';
|
||
|
echo '<p> <span class="labelSpanWide" >'.$lang['srv_respondents_respondents'].':</span>';
|
||
|
echo '<textarea id="respondent_profile_value_text" >'.$data.'</textarea>';
|
||
|
echo '<div class="">';
|
||
|
|
||
|
echo ' <span class="floatRight spaceRight"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_orange" href="#" onclick="respondent_run(\''.$pid.'\'); return false;"><span>'.$lang['srv_respondents_add'].'</span></a></div></span>';
|
||
|
echo ' <span class="floatRight spaceRight"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onclick="respondent_save(\''.$pid.'\'); return false;"><span>'.$lang['srv_respondents_save'].'</span></a></div></span>';
|
||
|
echo ' <span class="floatRight spaceRight"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onclick="respondent_save_new(\''.$pid.'\'); return false;"><span>'.$lang['srv_respondents_save_as_new'].'</span></a></div></span>';
|
||
|
|
||
|
echo ' <div class="clr"></div>';
|
||
|
|
||
|
echo '</div>';
|
||
|
}
|
||
|
|
||
|
|
||
|
static function CheckUploadedFile() {
|
||
|
global $lang;
|
||
|
$error = array();
|
||
|
|
||
|
$fileName = $_FILES['ul']['name'];
|
||
|
$tmpName = $_FILES['ul']['tmp_name'];
|
||
|
$fileSize = $_FILES['ul']['size'];
|
||
|
$fileType = $_FILES['ul']['type'];
|
||
|
|
||
|
|
||
|
$okFileType = ( $fileType == 'text/plain' || $fileType == 'application/vnd.ms-excel' );
|
||
|
$okFileEnd = (pathinfo($fileName, PATHINFO_EXTENSION) != 'txt' || pathinfo($fileName, PATHINFO_EXTENSION) != 'csv');
|
||
|
// preverimo tip:
|
||
|
if ( $okFileType = false ) {
|
||
|
$error[] = $lang['srv_respondents_invalid_file_type'];
|
||
|
}
|
||
|
// prevermio še končnico (.txt)
|
||
|
else if ($okFileEnd = false)
|
||
|
$error[] = $lang['srv_respondents_invalid_file_type'];
|
||
|
|
||
|
// preverimo velikost
|
||
|
if ( $fileSize == 0 )
|
||
|
$error[] = $lang['srv_respondents_invalid_file_size'];
|
||
|
|
||
|
// ce je do tu vse ok pregledamo vsebino
|
||
|
$respondents = array();
|
||
|
$fh = @fopen($tmpName, "rb");
|
||
|
|
||
|
if ($fh) {
|
||
|
//$data = fread($fh, 4096); // zakaj je ta limit?
|
||
|
$data = fread($fh, filesize($tmpName));
|
||
|
fclose($fh);
|
||
|
|
||
|
// počistimo prazne vrstice in kakšno zlonamerno kodo
|
||
|
$data = strip_tags(str_replace(array("\n\r","\n"),array("\n","\n"),$data));
|
||
|
$respondents = explode("\n",$data);
|
||
|
$respondents = array_values(array_filter($respondents));
|
||
|
|
||
|
} else {
|
||
|
$error[] = 'file read';
|
||
|
}
|
||
|
|
||
|
// ce ni napak in ce imamo zapise kreiramo nov zacasni profil v seji
|
||
|
if (count($error) == 0 && count($respondents) > 0) {
|
||
|
|
||
|
$_SESSION['respondent_profile'] = array( 'id' => 0,
|
||
|
'uid' => self::getGlobalUserId(),
|
||
|
'variables' => 'email',
|
||
|
'lines' => $respondents);
|
||
|
$_SESSION['respondent_profile']['name'] = $lang['srv_respondents_temp_profile'];
|
||
|
// nastavimo profil
|
||
|
self::$currentProfileId = 0;
|
||
|
|
||
|
} else {
|
||
|
echo $lang['error'].'<br/>';
|
||
|
foreach ( $error as $value ) {
|
||
|
echo $value,"<br/>";
|
||
|
}
|
||
|
}
|
||
|
// prikazemo vrednosti
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
}
|
||
|
|
||
|
static function checkSystemVariables($variables, $setUserbase=true) {
|
||
|
$user_base = 0;
|
||
|
global $site_path;
|
||
|
|
||
|
$sqlb = sisplet_query("SELECT branching, user_base FROM srv_anketa WHERE id = '".self::getSurveyId()."'");
|
||
|
$rowb = mysqli_fetch_array($sqlb);
|
||
|
|
||
|
$ba = new BranchingAjax(self::getSurveyId());
|
||
|
|
||
|
if (count($variables) > 0) {
|
||
|
// zakaj je bi ta reverse???
|
||
|
//$variables = array_reverse($variables,true);
|
||
|
foreach ($variables as $variable) {
|
||
|
|
||
|
$sqlVariable = sisplet_query("SELECT s.id FROM srv_spremenljivka s, srv_grupa g WHERE s.variable='".$variable."' AND s.gru_id=g.id AND g.ank_id='".self::getSurveyId()."'");
|
||
|
if (mysqli_num_rows($sqlVariable) == 0 && $variable!='pass') { // če varabla še ne obstaja jo kreiramo
|
||
|
// za polje pass - Geslo ne kreiramo sistemske variable
|
||
|
|
||
|
if ($variable != 'language') $user_base = 1;
|
||
|
|
||
|
// dodamo novo spremenljivko na konec, tip je 21
|
||
|
ob_start();
|
||
|
$ba->ajax_spremenljivka_new(0, 0, 1, 0, 21);
|
||
|
$spr_id = $ba->spremenljivka;
|
||
|
ob_clean();
|
||
|
|
||
|
$s = sisplet_query("UPDATE srv_spremenljivka SET variable='".$variable."', variable_custom='1', naslov='".((isset($allowed[$variable]['naslov']) ? $allowed[$variable]['naslov'] : $variable))."', sistem='1', visible='0' WHERE id='$spr_id'");
|
||
|
if (!$s) echo 'err435'.mysqli_error($GLOBALS['connect_db']);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// če je potreben updejt (ampak najbrž je itak na 1 zaradi e-mail)
|
||
|
if ($setUserbase == true && $user_base > 0 && $user_base != $rowb['user_base']) {
|
||
|
$sql = sisplet_query("UPDATE srv_anketa SET user_base='$user_base' WHERE id='" . self::getSurveyId() . "'");
|
||
|
SurveyInfo :: getInstance()->resetSurveyData();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
static function displayAddedUsers() {
|
||
|
global $site_path, $site_url, $lang;
|
||
|
|
||
|
SurveyInfo::getInstance()->SurveyInit(self::getSurveyId());
|
||
|
$db_table = (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) ? '_active' : '';
|
||
|
|
||
|
echo '<span>'.$lang['srv_respondents_added_respondents'].':</span>';
|
||
|
echo '<span class="floatRight spaceLeft" ><span class="buttonwrapper"><a class="ovalbutton ovalbutton_orange" href="' . $site_url . 'admin/survey/index.php?anketa='.self::getSurveyId().'&a=email&m=usermailing_setting" ><span>'.$lang['forward'].'</span></a></span></span>';
|
||
|
echo '<br class="clr"/>';
|
||
|
echo '<br/>';
|
||
|
|
||
|
$temp_user_data = array();
|
||
|
$data = array();
|
||
|
$header = array();
|
||
|
|
||
|
// poiščemo sistemske spremenljivke ki so navedene za spremenlivko
|
||
|
$sprList = "";
|
||
|
$prefix="";
|
||
|
|
||
|
$sql = sisplet_query("SELECT s.id, s.variable, s.naslov FROM srv_spremenljivka s, srv_grupa g WHERE s.sistem='1' AND s.gru_id=g.id AND g.ank_id='".self::getSurveyId()."' ORDER BY g.vrstni_red, s.vrstni_red ASC");
|
||
|
while($row = mysqli_fetch_assoc($sql)) {
|
||
|
$sprList .= $prefix.$row['id'];
|
||
|
$prefix=",";
|
||
|
$header[$row['id']] = $row['naslov'];
|
||
|
}
|
||
|
|
||
|
// dodamo sistemske podatke
|
||
|
$header_sys = array('pass'=>$lang['srv_respondents_cookie'],
|
||
|
'status'=>$lang['srv_respondents_status'],
|
||
|
'datetime'=>$lang['srv_respondents_datetime'],
|
||
|
'admin_id'=>$lang['srv_respondents_admin']);
|
||
|
|
||
|
$str_qry_users = "SELECT u.id AS usr_id, u.cookie, u.pass, u.unsubscribed, IF(u.last_status = '-1','null',u.last_status) as status FROM srv_user as u WHERE u.ank_id = '".self::getSurveyId()."' AND u.preview = '0' ";
|
||
|
|
||
|
$qry_users = sisplet_query($str_qry_users);
|
||
|
while ( $row_users = mysqli_fetch_assoc($qry_users)) {
|
||
|
// polovimo podatke sistemskih spremenljivk od userja
|
||
|
if ($sprList != "") {
|
||
|
$sqlSprData = sisplet_query("SELECT spr_id,text FROM srv_data_text".$db_table." WHERE usr_id='".$row_users['usr_id']."' AND spr_id IN (".$sprList.")");
|
||
|
|
||
|
while ($rowSprData = mysqli_fetch_assoc($sqlSprData)) {
|
||
|
$data[$row_users['usr_id']][$rowSprData['spr_id']] = $rowSprData['text'];
|
||
|
}
|
||
|
}
|
||
|
// uporabniku dodamo podatke o kookiju in statusu
|
||
|
$data[$row_users['usr_id']]['pass'] = $row_users['pass'];
|
||
|
$data[$row_users['usr_id']]['status'] = $row_users['status'] . ' - ' .$lang['srv_userstatus_'.$row_users['status']];
|
||
|
|
||
|
if ($row_users['unsubscribed'] == 1) $data[$row_users['usr_id']]['status'] .= ', '.$lang['srv_unsubscribed'];
|
||
|
|
||
|
// polovimo podatke iz userbase
|
||
|
// $str_ub = "SELECT ub.*, usr.name, usr.surname, usr.email FROM srv_userbase AS ub LEFT JOIN (SELECT usr.* FROM users as usr) as usr ON usr.id = ub.admin_id WHERE ub.usr_id = '".$row_users['usr_id']."' ORDER BY ub.tip ASC LIMIT 1";
|
||
|
$str_ub = "SELECT ub.* FROM srv_userbase AS ub WHERE ub.usr_id = '".$row_users['usr_id']."' ORDER BY ub.tip ASC LIMIT 1";
|
||
|
$qry_ub = sisplet_query($str_ub);
|
||
|
$row_ub = mysqli_fetch_assoc($qry_ub);
|
||
|
|
||
|
$data[$row_users['usr_id']]['datetime'] = $row_ub['datetime'];
|
||
|
|
||
|
// user insert data
|
||
|
if (!isset($temp_user_data[$row_ub['admin_id']])) {
|
||
|
$str_user = "SELECT usr.name, usr.surname, usr.email FROM users as usr WHERE usr.id = '".$row_ub['admin_id']."'";
|
||
|
$qry_user = sisplet_query($str_user);
|
||
|
$row_user = mysqli_fetch_assoc($qry_user);
|
||
|
$data[$row_users['usr_id']]['admin_id'] = $row_user['name']." ".$row_user['surname'];
|
||
|
$temp_user_data[$row_ub['admin_id']] = $row_user['name']." ".$row_user['surname'];
|
||
|
} else
|
||
|
$data[$row_users['usr_id']]['admin_id'] = $temp_user_data[$row_ub['admin_id']];
|
||
|
|
||
|
}
|
||
|
echo '<table id="respondentTable" class="anl_tbl anl_bt anl_bl anl_br anl_bb" style="padding:0px; margin:0px; border-collapse: collapse;">' . "\n";
|
||
|
// naslovna vrstica
|
||
|
echo '<tr>';
|
||
|
echo '<th class="anl_br anl_al anl_bck anl_bb anl_w50">'.$lang['srv_anketadelete_txt'].'</th>';
|
||
|
echo '<th class="anl_br anl_al anl_bck anl_bb anl_w50">'.$lang['srv_unsubscribe_1'].'</th>';
|
||
|
foreach ($header as $header_key => $headerTitle) {
|
||
|
echo '<th class="anl_br anl_al anl_bb anl_bck">'. $headerTitle .'</th>';
|
||
|
}
|
||
|
foreach ($header_sys as $header_key => $headerTitle) {
|
||
|
echo '<th class="anl_br anl_al anl_bb anl_bck">'. $headerTitle .'</th>';
|
||
|
}
|
||
|
|
||
|
echo '</tr>'."\n";
|
||
|
foreach ( $data as $user_id => $user_data ) {
|
||
|
|
||
|
echo '<tr id="respondent_id_'.$user_id.'">';
|
||
|
echo '<td class="anl_br anl_ac"><a href="#" onclick="respondent_data_delete(\''.$user_id.'\', \''.$lang['srv_ask_delete'].'\'); return false;"><img src="img_0/delete_red.png" alt="' . $lang['srv_delete_respondent'] . '" title="' . $lang['srv_delete_respondent'] . '" /></a></td>';
|
||
|
echo '<td class="anl_br anl_ac"><a href="#" onclick="$.post(\'unsubscribe.php?anketa='.self::getSurveyId().'&code='.$user_data['pass'].'\', {}, function() { window.location.reload(); }); return false;"><img src="img_0/email_delete.png" alt="' . $lang['srv_unsubscribe_2'] . '" title="' . $lang['srv_unsubscribe_2'] . '" /></a></td>';
|
||
|
// držimo se vrstnega reda header polij
|
||
|
foreach ($header as $header_key => $headerTitle) {
|
||
|
echo '<td class="anl_br anl_ac">'.($data[$user_id][$header_key] != null && $data[$user_id][$header_key] != "" ? $data[$user_id][$header_key] : ' ').'</td>';
|
||
|
}
|
||
|
foreach ($header_sys as $header_key => $headerTitle) {
|
||
|
echo '<td class="anl_br anl_ac">'.($data[$user_id][$header_key] != null && $data[$user_id][$header_key] != "" ? $data[$user_id][$header_key] : ' ').'</td>';
|
||
|
}
|
||
|
echo '</tr>'."\n";
|
||
|
}
|
||
|
echo '</table>'. "\n";
|
||
|
|
||
|
}
|
||
|
|
||
|
static function Ajax($action) {
|
||
|
switch ( $action ) {
|
||
|
case 'save_new_respondent_profile':
|
||
|
// shranimo podatek
|
||
|
self::ajaxSaveNewProfile();
|
||
|
// osvezimo
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
break;
|
||
|
|
||
|
case 'change_respondent_profile':
|
||
|
// osvezimo
|
||
|
$pid = (isset($_POST['pid']) ? $_POST['pid'] : SurveyUserSetting :: getInstance()->getSettings('default_respondent_profile') );
|
||
|
// if ($pid > 0) // če ni seja, shranimo kot privzeti
|
||
|
SurveyUserSetting :: getInstance()->saveSettings('default_respondent_profile', $pid);
|
||
|
self::$currentProfileId = $pid;
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
// self::displayProfileData($pid);
|
||
|
break;
|
||
|
case 'save_respondent_profile':
|
||
|
// shranimo podatek
|
||
|
self::ajaxSaveProfile();
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
break;
|
||
|
case 'run_respondent_profile':
|
||
|
// shranimo podatek
|
||
|
self::ajaxRunProfile();
|
||
|
// osvežimo
|
||
|
# odvisno ali smo v telefonu ali e-mail vabilih
|
||
|
if ($_POST['profile_from'] == A_PHONE) {
|
||
|
# če smo telefon
|
||
|
echo 'index.php?anketa=',self::getSurveyId(),'&a='.A_PHONE.'&m=start';
|
||
|
} else {
|
||
|
# če smo e-mail
|
||
|
echo 'index.php?anketa=',self::getSurveyId(),'&a=email&m=respondenti_view';
|
||
|
}
|
||
|
break;
|
||
|
case 'rename_respondent_profile':
|
||
|
// shranimo podatek
|
||
|
self::ajaxRenameProfile();
|
||
|
// osvežimo
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
break;
|
||
|
case 'delete_respondent_profile':
|
||
|
// pobrišemo
|
||
|
self::ajaxDeleteProfile();
|
||
|
// osvežimo
|
||
|
self::getProfileId();
|
||
|
self::getProfiles();
|
||
|
self::displayProfiles();
|
||
|
break;
|
||
|
|
||
|
|
||
|
default:
|
||
|
self::displayProfiles();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static function ajaxSaveNewProfile() {
|
||
|
global $lang;
|
||
|
if ( isset($_POST['name']) && isset($_POST['pid']) ) {
|
||
|
|
||
|
if ( !isset($_POST['variables']) )
|
||
|
self::$messages[] = 'Manjka podatek spremenljivke!';
|
||
|
if ( !isset($_POST['data']) )
|
||
|
self::$messages[] = 'Polje respondenti je prazno!';
|
||
|
|
||
|
// shranimo vrednosti
|
||
|
$new_name = $_POST['name'];
|
||
|
$variables = $_POST['variables'];
|
||
|
$stringInsert = "INSERT INTO srv_respondent_profiles (uid, name, variables) VALUES ('".self::getGlobalUserId()."', '".$new_name."', '".$variables."')";
|
||
|
$queryInsert = sisplet_query($stringInsert) or die(mysqli_error($GLOBALS['connect_db']));
|
||
|
$newId = mysqli_insert_id($GLOBALS['connect_db']);
|
||
|
|
||
|
if ($newId > 0) {
|
||
|
SurveyUserSetting :: getInstance()->saveSettings('default_respondent_profile', $newId);
|
||
|
self::$currentProfileId = $newId;
|
||
|
|
||
|
// dodamo še podatke (najprej pobrišemo stare če obstajajo)
|
||
|
$lines = explode("\n",$_POST['data']);
|
||
|
if (count($lines)) {
|
||
|
foreach ( $lines as $line ) {
|
||
|
$stringInsert = "INSERT INTO srv_respondents (pid, line) VALUES ('".$newId."', '".$line."')";
|
||
|
$queryInsert = sisplet_query($stringInsert) or die(mysqli_error($GLOBALS['connect_db']));
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
self::$errors[] = $lang['srv_respondents_error_create'];
|
||
|
}
|
||
|
} else {
|
||
|
self::$errors[] = $lang['srv_respondents_error_data'];
|
||
|
}
|
||
|
// posodobimo podatke
|
||
|
}
|
||
|
|
||
|
static function ajaxSaveProfile() {
|
||
|
|
||
|
if (isset($_POST['pid'])) {
|
||
|
$pid = $_POST['pid'];
|
||
|
if ($pid == 0) { // imamo profil iz seje
|
||
|
//popravimo podatke v seji
|
||
|
|
||
|
$lines = explode("\n",$_POST['data']);
|
||
|
$_SESSION['respondent_profile']['lines'] = $lines;
|
||
|
|
||
|
$_SESSION['respondent_profile']['variables'] = $_POST['variables'];
|
||
|
|
||
|
} else {
|
||
|
// popravimo podatek za variables v bazi
|
||
|
$stringUpdate = "UPDATE srv_respondent_profiles SET variables = '".$_POST['variables']."' WHERE id = '".$pid."'";
|
||
|
sisplet_query($stringUpdate);
|
||
|
|
||
|
// pobrisemo stare zapise (podatke)
|
||
|
$stringDelete = "DELETE FROM srv_respondents WHERE pid = '".$pid."'";
|
||
|
sisplet_query($stringDelete);
|
||
|
// dodamo še podatke
|
||
|
$lines = explode("\n",$_POST['data']);
|
||
|
if (count($lines)) {
|
||
|
foreach ( $lines as $line ) {
|
||
|
$stringInsert = "INSERT INTO srv_respondents (pid, line) VALUES ('".$pid."', '".$line."')";
|
||
|
$queryInsert = sisplet_query($stringInsert) or die(mysqli_error($GLOBALS['connect_db']));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static function ajaxRunProfile() {
|
||
|
global $admin_type;
|
||
|
|
||
|
SurveyInfo::getInstance()->SurveyInit(self::getSurveyId());
|
||
|
$db_table = (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) ? '_active' : '';
|
||
|
|
||
|
// preverimo potrebne sistemske variable
|
||
|
// tu je lahko vejica
|
||
|
$variables = explode(",",$_POST['variables']);
|
||
|
self::checkSystemVariables($variables);
|
||
|
|
||
|
// poskrbeti moramo za pravilni vrstni red shranjevanja (vrstni red in id-je spremenljivk)
|
||
|
$cnt=0;
|
||
|
$spremenlivke = array(); // array kam po vrstnem redu shranimo id-je spremenlivk
|
||
|
$vrednosti = array(); // poleg IDja spremenljivk potrebujemo tudi ID vrednosti (ker za tip 21 imamo lahko vec text fieldov)
|
||
|
foreach ($variables as $variabla) {
|
||
|
// za vsako variablo dobimo id spremenlivke
|
||
|
if ($variabla != 'pass') {
|
||
|
$sqlSpremenlivka = sisplet_query("SELECT s.id FROM srv_spremenljivka s, srv_grupa g WHERE s.sistem='1' AND s.variable = '".$variabla."' AND s.gru_id=g.id AND g.ank_id='".self::$surveyId."' ORDER BY g.vrstni_red, s.vrstni_red");
|
||
|
$rowSpremenlivka = mysqli_fetch_assoc($sqlSpremenlivka);
|
||
|
$spremenlivke[$cnt] = $rowSpremenlivka['id'];
|
||
|
$sqlVrednost = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id = '$rowSpremenlivka[id]' ORDER BY vrstni_red ASC LIMIT 1");
|
||
|
$rowVrednost = mysqli_fetch_array($sqlVrednost);
|
||
|
$vrednosti[$cnt] = $rowVrednost['id'];
|
||
|
} else {
|
||
|
$spremenlivke[$cnt] = -1;
|
||
|
$vrednosti[$cnt] = -1;
|
||
|
}
|
||
|
$cnt++;
|
||
|
}
|
||
|
$delimiter = $_POST['recipientsDelimiter'];
|
||
|
|
||
|
$users = mysql_real_unescape_string($_POST['data']);
|
||
|
// najprej razdelimo vrstice
|
||
|
$vrstice = explode("\n", $users);
|
||
|
|
||
|
// navadni userji lahko dodajo najvec 20 respondentov
|
||
|
if ($admin_type <= 1) {
|
||
|
$count = null;
|
||
|
} else {
|
||
|
$sql = sisplet_query("SELECT COUNT(*) AS count FROM srv_user WHERE ank_id='".self::$surveyId."' AND preview='0'");
|
||
|
$row = mysqli_fetch_array($sql);
|
||
|
$count = $row['count'];
|
||
|
}
|
||
|
|
||
|
// shranjujemo v session za progress bar
|
||
|
session_start();
|
||
|
$_SESSION['progressBar'][self::$surveyId]['status'] = 'ok';
|
||
|
$_SESSION['progressBar'][self::$surveyId]['total'] = (int)count($vrstice);
|
||
|
$_SESSION['progressBar'][self::$surveyId]['current'] = (int)0;
|
||
|
session_commit();
|
||
|
|
||
|
$progressCounter = 0;
|
||
|
|
||
|
foreach ($vrstice AS $vrstica) {
|
||
|
|
||
|
if ($count === null || $count < 20) {
|
||
|
if ($vrstica != '') {
|
||
|
|
||
|
// izberemo random hash, ki se ni v bazi
|
||
|
do {
|
||
|
$rand = md5(mt_rand(1, mt_getrandmax()) . '@' . $_SERVER['REMOTE_ADDR']);
|
||
|
$sql = sisplet_query("SELECT id FROM srv_user WHERE SUBSTRING(cookie, 1, 6) = SUBSTRING('".$rand."', 1, 6)");
|
||
|
} while (mysqli_num_rows($sql) > 0);
|
||
|
|
||
|
sisplet_query("INSERT INTO srv_user (ank_id, cookie, pass, last_status, time_insert) VALUES ('".self::$surveyId."', '".$rand."', '".substr($rand, 0, 6)."', '0', NOW())");
|
||
|
$usr_id = mysqli_insert_id($GLOBALS['connect_db']);
|
||
|
|
||
|
sisplet_query("INSERT INTO srv_userbase (usr_id, tip, datetime, admin_id) VALUES ('".$usr_id."', '0', NOW(), '" . self::$uId . "')");
|
||
|
sisplet_query("INSERT INTO srv_userstatus (usr_id, tip, status, datetime) VALUES ('".$usr_id."', '0', '0', NOW())");
|
||
|
|
||
|
// vrstico razbijemo v data, v $i pa mamo stevec in dodajamo po vrsti v while zanki
|
||
|
// pa smo spet pri vejicah ipd.
|
||
|
|
||
|
$data = explode($delimiter, $vrstica);
|
||
|
|
||
|
$i = 0;
|
||
|
if (count($data) > 0) {
|
||
|
foreach ( $data as $value ) {
|
||
|
$value = trim($value);
|
||
|
if (isset($spremenlivke[$i])) {
|
||
|
if ($spremenlivke[$i] > 0) { // sistemska
|
||
|
if (!isset($value) || $value == "")
|
||
|
$value = -1;
|
||
|
sisplet_query("INSERT INTO srv_data_text".$db_table." (spr_id, vre_id, text, usr_id) VALUES ('".$spremenlivke[$i]."', '".$vrednosti[$i]."', '" . trim($value) . "', '".$usr_id."')");
|
||
|
} elseif ($spremenlivke[$i] == -1) { // pass - Geslo
|
||
|
sisplet_query("UPDATE srv_user SET pass='".strtolower($value)."' WHERE id='$usr_id'");
|
||
|
}
|
||
|
}
|
||
|
$i++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
session_start();
|
||
|
$_SESSION['progressBar'][self::$surveyId]['current'] = (int)++$progressCounter;
|
||
|
session_commit();
|
||
|
|
||
|
}
|
||
|
}
|
||
|
if ($count !== null) $count++;
|
||
|
}
|
||
|
|
||
|
session_start();
|
||
|
$_SESSION['progressBar'][self::$surveyId]['status'] = 'end';
|
||
|
session_commit();
|
||
|
|
||
|
}
|
||
|
|
||
|
static function ajaxRenameProfile() {
|
||
|
|
||
|
$pid = $_POST['pid'];
|
||
|
$name = $_POST['name'];
|
||
|
|
||
|
if (isset($pid) && $pid > 0 && isset($name) && $name != "") {
|
||
|
// popravimo podatek za variables
|
||
|
$stringUpdate = "UPDATE srv_respondent_profiles SET name = '".$name."' WHERE id = '".$pid."'";
|
||
|
sisplet_query($stringUpdate);
|
||
|
|
||
|
} else {
|
||
|
global $lang;
|
||
|
die($lang['srv_respondents_error_data']);
|
||
|
}
|
||
|
}
|
||
|
static function ajaxDeleteProfile() {
|
||
|
$pid = $_POST['pid'];
|
||
|
if ($pid == 0) {
|
||
|
// brišemo session (to lahko samo če imamo še druge profile)
|
||
|
unset( $_SESSION['respondent_profile'] );
|
||
|
} else if (isset($pid) && $pid > 0) {
|
||
|
// pobrišemo vrednosti
|
||
|
$stringDelete = "DELETE FROM srv_respondents WHERE pid = '".$pid."'";
|
||
|
sisplet_query($stringDelete);
|
||
|
|
||
|
// pobrišemo profil
|
||
|
$stringDelete = "DELETE FROM srv_respondent_profiles WHERE id = '".$pid."'";
|
||
|
sisplet_query($stringDelete);
|
||
|
|
||
|
// nastavimo nov privzet profil
|
||
|
$stringSelect = "SELECT id FROM srv_respondent_profiles WHERE uid = '".self::getGlobalUserId()."' ORDER BY id LIMIT 1";
|
||
|
$querySelect = sisplet_query($stringSelect);
|
||
|
$rowSelect = mysqli_fetch_assoc($querySelect);
|
||
|
if ($rowSelect['id'])
|
||
|
SurveyUserSetting :: getInstance()->saveSettings('default_respondent_profile', $rowSelect['id']);
|
||
|
else
|
||
|
SurveyUserSetting :: getInstance()->saveSettings('default_respondent_profile', 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
?>
|