summaryrefslogblamecommitdiffstats
path: root/admin/survey/modules/mod_MAZA/class.MAZAExport.php
blob: cfb686361b62c824459310cd783d0a948aec5048 (plain) (tree)




































































































































































































































































































































                                                                                                                                                                                                                                                                    
<?php

/**
 * Created on 23.1.2018
 *
 * @author: Uroš Podkrižnik
 *
 * @desc: for exports of module MAZA - mobile app for respondents
 *
 *
 */
class MAZAExport {

    var $_ank_id; // id ankete

    function __construct($ank_id = 0) {
        $this->_ank_id = $ank_id;
    }

    /*private function getDataInactiveIdentifiers() {
        $Query = "SELECT au.datetime_inserted, au.identifier FROM maza_app_users AS au " .
                "LEFT JOIN (SELECT ank_id, maza_user_id FROM maza_user_srv_access) AS sa " .
                "ON au.id = sa.maza_user_id WHERE sa.ank_id='$this->_ank_id' AND au.datetime_last_active IS NULL;";

        $podatki = array(array('inserted', 'identifier'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($sql_row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($sql_row['datetime_inserted'], $sql_row['identifier']);
            }
        }

        return $podatki;
    }
    
    private function getDataActiveIdentifiers() {
        $Query = "SELECT au.datetime_inserted, au.identifier, au.datetime_last_active, au.deviceInfo, au.tracking_log FROM maza_app_users AS au " .
                "LEFT JOIN (SELECT ank_id, maza_user_id FROM maza_user_srv_access) AS sa " .
                "ON au.id = sa.maza_user_id WHERE sa.ank_id='$this->_ank_id' AND au.datetime_last_active IS NOT NULL;";

        $podatki = array(array('inserted', 'identifier', 'last_active', 'device_info', 'tracking_log'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($sql_row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($sql_row['datetime_inserted'], $sql_row['identifier'], $sql_row['datetime_last_active'], $sql_row['deviceInfo'], $sql_row['tracking_log']);
            }
        }

        return $podatki;
    }*/
    
    private function getDataIdentifiers() {
        $act = isset($_POST['maza_active_ident']) && $_POST['maza_active_ident'] == 1;
        $inact = isset($_POST['maza_inactive_ident']) && $_POST['maza_inactive_ident'] == 1;
        $deact = isset($_POST['maza_deactive_ident']) && $_POST['maza_deactive_ident'] == 1;
        
        $where = '';
        if($act && !$inact)
            $where .= ' AND au.datetime_last_active IS NOT NULL';
        else if(!$act && $inact && $deact)
            $where .= ' AND (au.datetime_last_active IS NULL OR sa.datetime_unsubscribed IS NOT NULL)';
        else if(!$act && $inact)
            $where .= ' AND au.datetime_last_active IS NULL';
        if($deact && !$act && !$inact)
            $where .= ' AND sa.datetime_unsubscribed IS NOT NULL';
        else if(!$deact)
            $where .= ' AND sa.datetime_unsubscribed IS NULL';
        
        $Query = "SELECT au.datetime_inserted, au.identifier, au.datetime_last_active, au.deviceInfo, au.tracking_log, sa.datetime_unsubscribed FROM maza_app_users AS au " .
                "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_unsubscribed FROM maza_user_srv_access) AS sa " .
                "ON au.id = sa.maza_user_id WHERE sa.ank_id='$this->_ank_id'$where;";
        
        $podatki = array(array('inserted', 'identifier', 'last_active', 'device_info', 'tracking_log', 'unsubscribed'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($sql_row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($sql_row['datetime_inserted'], $sql_row['identifier'], $sql_row['datetime_last_active'], $sql_row['deviceInfo'], $sql_row['tracking_log'], $sql_row['datetime_unsubscribed']);
            }
        }

        return $podatki;
    }
    
    private function getDataTrackingLocations() {
        $Query = "SELECT au.identifier, ml.maza_user_id, ml.lat, ml.lng, ml.provider, ml.timestamp, ml.accuracy, ml.altitude, "
                . "ml.bearing, ml.speed, ml.vertical_acc, ml.speed_acc, ml.bearing_acc, ml.extras, ml.is_mock FROM maza_user_locations AS ml "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa "
                . "ON ml.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = ml.maza_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL AND sa.datetime_started <= ml.timestamp "
                . "ORDER BY sa.datetime_started, au.identifier, ml.timestamp DESC;";

        $podatki = array(array('Identifier', 'timestamp', 'latitude', 'longitude', 'provider', 'accuracy', 
            'altitude', 'bearing', 'speed', 'vertical_acc', 'speed_acc', 'bearing_acc', 'extras', 'is_mock'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['timestamp'], $row['lat'], $row['lng'], $row['provider'], 
                    $row['accuracy'], $row['altitude'], $row['bearing'], $row['speed'], $row['vertical_acc'], $row['speed_acc'], 
                    $row['bearing_acc'], $row['extras'], $row['is_mock']);
            }
        }
        return $podatki;
    }
    
    private function getDataTrackingAR() {
        $Query = "SELECT au.identifier, ml.maza_user_id, ml.timestamp, ml.in_vehicle, ml.on_bicycle, ml.on_foot, ml.walking, "
                . "ml.running, ml.still, ml.tilting, ml.unknown FROM maza_user_activity_recognition AS ml "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa "
                . "ON ml.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = ml.maza_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL AND sa.datetime_started <= ml.timestamp "
                . "ORDER BY sa.datetime_started, au.identifier, ml.timestamp DESC;";

        $podatki = array(array('identifier', 'timestamp', 'in_vehicle', 'on_bicycle', 'on_foot', 'walking', 'running', 
            'still', 'tilting', 'unknown'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['timestamp'], $row['in_vehicle'], $row['on_bicycle'], $row['on_foot'], 
                    $row['walking'], $row['running'], $row['still'], $row['tilting'], $row['unknown']);
            }
        }

        return $podatki;
    }
    
    private function getDataAlarmRespondents() {
        $Query = "SELECT au.identifier, su.maza_user_id, su.srv_user_id, su.mode, su.srv_version_datetime, res.id, res.recnum, re.ank_id FROM maza_srv_users AS su "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa ON su.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT ank_id FROM maza_srv_repeaters) AS re ON re.ank_id = sa.ank_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = su.maza_user_id "
                . "LEFT JOIN (SELECT id, recnum FROM srv_user) AS res ON res.id = su.srv_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND re.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL AND (mode='repeater' OR (su.geof_id IS NULL AND su.activity_id IS NULL)) "//todo zadnji OR je samo zacasno, pobrisi enkrat po APP verziji 25
                . "ORDER BY sa.datetime_started, au.identifier, su.srv_version_datetime DESC;";

        $podatki = array(array('identifier', 'recnum', 'time_version'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['recnum'], $row['srv_version_datetime']);
            }
        }
        return $podatki;
    }
        
    private function getDataTriggeredGeofences() {
        $Query = "SELECT tg.id, tg.maza_user_id, tg.geof_id, tg.triggered_timestamp, tg.enter_timestamp, tg.dwell_timestamp, au.identifier, ge.name, su.maza_user_id, su.srv_user_id, su.srv_version_datetime, su.mode, su.tgeof_id, res.id, res.recnum "
                . ", ml.maza_user_id, ml.lat, ml.lng, ml.provider, ml.timestamp, ml.accuracy, ml.altitude, ml.bearing, ml.speed, ml.vertical_acc, ml.speed_acc, ml.bearing_acc, ml.extras, ml.is_mock"
                . " FROM maza_srv_triggered_geofences AS tg "
                . "LEFT JOIN (SELECT tgeof_id, maza_user_id, lat, lng, provider, timestamp, accuracy, altitude, bearing, speed, vertical_acc, speed_acc, bearing_acc, extras, is_mock FROM maza_user_locations) AS ml ON tg.id = ml.tgeof_id "
                . "LEFT JOIN (SELECT ank_id, id, name FROM maza_srv_geofences) AS ge ON ge.id = tg.geof_id "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa ON tg.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = tg.maza_user_id "
                . "LEFT JOIN (SELECT maza_user_id, srv_user_id, srv_version_datetime, tgeof_id, mode FROM maza_srv_users) AS su ON su.maza_user_id = tg.maza_user_id AND su.tgeof_id = tg.id "
                . "LEFT JOIN (SELECT id, recnum FROM srv_user) AS res ON res.id = su.srv_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND ge.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL "
                . "ORDER BY sa.datetime_started, au.identifier, tg.triggered_timestamp DESC;";
        
        $podatki = array(array('identifier', 'recnum', 'geofence_id', 'geofence_name', 'triggered_timestamp', 'enter_timestamp', 'dwell_timestamp', 'location_timestamp', 'latitude', 'longitude', 'provider', 'accuracy', 
            'altitude', 'bearing', 'speed', 'vertical_acc', 'speed_acc', 'bearing_acc', 'extras', 'is_mock'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['recnum'], $row['geof_id'], $row['name'], $row['triggered_timestamp'], $row['enter_timestamp'], $row['dwell_timestamp'], 
                    $row['timestamp'], $row['lat'], $row['lng'], $row['provider'], $row['accuracy'], $row['altitude'], $row['bearing'], $row['speed'], $row['vertical_acc'], $row['speed_acc'], 
                    $row['bearing_acc'], $row['extras'], $row['is_mock']);
            }
        }
        return $podatki;
    }
    
        private function getDataTriggeredGeofencesAnswers() {
        $Query = "SELECT tg.id, tg.maza_user_id, tg.geof_id, tg.triggered_timestamp, au.identifier, ge.name, su.maza_user_id, su.srv_user_id, su.srv_version_datetime, su.mode, su.tgeof_id, res.id, res.recnum "
                . ", ml.maza_user_id, ml.lat, ml.lng, ml.provider, ml.timestamp, ml.accuracy, ml.altitude, ml.bearing, ml.speed, ml.vertical_acc, ml.speed_acc, ml.bearing_acc, ml.extras, ml.is_mock"
                . " FROM maza_srv_triggered_geofences AS tg "
                . "LEFT JOIN (SELECT tgeof_id, maza_user_id, lat, lng, provider, timestamp, accuracy, altitude, bearing, speed, vertical_acc, speed_acc, bearing_acc, extras, is_mock FROM maza_user_locations) AS ml ON tg.id = ml.tgeof_id "
                . "LEFT JOIN (SELECT ank_id, id, name FROM maza_srv_geofences) AS ge ON ge.id = tg.geof_id "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa ON tg.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = tg.maza_user_id "
                . "LEFT JOIN (SELECT maza_user_id, srv_user_id, srv_version_datetime, tgeof_id, mode FROM maza_srv_users) AS su ON su.maza_user_id = tg.maza_user_id AND su.tgeof_id = tg.id "
                . "LEFT JOIN (SELECT id, recnum FROM srv_user) AS res ON res.id = su.srv_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND ge.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL AND su.mode='geofence' "
                . "ORDER BY res.recnum DESC;";
        
        $podatki = array(array('identifier', 'recnum', 'geofence_id', 'geofence_name', 'triggered_timestamp', 'location_timestamp', 'latitude', 'longitude', 'provider', 'accuracy', 
            'altitude', 'bearing', 'speed', 'vertical_acc', 'speed_acc', 'bearing_acc', 'extras', 'is_mock'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['recnum'], $row['geof_id'], $row['name'], $row['triggered_timestamp'], $row['timestamp'], $row['lat'], $row['lng'], $row['provider'], 
                    $row['accuracy'], $row['altitude'], $row['bearing'], $row['speed'], $row['vertical_acc'], $row['speed_acc'], 
                    $row['bearing_acc'], $row['extras'], $row['is_mock']);
            }
        }
        return $podatki;
    }
    
    private function getDataEntryLocations() {
        $Query = "SELECT au.identifier, su.maza_user_id, su.srv_user_id, su.srv_version_datetime, su.mode, res.id, res.recnum, su.loc_id, ml.id "
                . ", ml.maza_user_id, ml.lat, ml.lng, ml.provider, ml.timestamp, ml.accuracy, ml.altitude, ml.bearing, ml.speed, ml.vertical_acc, ml.speed_acc, ml.bearing_acc, ml.extras, ml.is_mock"
                . " FROM maza_srv_users AS su "
                . "LEFT JOIN (SELECT ank_id, maza_user_id, datetime_started FROM maza_user_srv_access) AS sa ON su.maza_user_id = sa.maza_user_id "
                . "LEFT JOIN (SELECT id, identifier FROM maza_app_users) AS au ON au.id = su.maza_user_id "
                . "LEFT JOIN (SELECT * FROM maza_user_locations) AS ml ON su.maza_user_id = ml.maza_user_id AND su.loc_id = ml.id "
                . "LEFT JOIN (SELECT id, recnum FROM srv_user) AS res ON res.id = su.srv_user_id "
                . "WHERE sa.ank_id='$this->_ank_id' AND sa.datetime_started IS NOT NULL AND su.mode='entry' "
                . "ORDER BY res.recnum DESC;";

        $podatki = array(array('identifier', 'recnum', 'entry_timestamp', 'location_timestamp', 'latitude', 'longitude', 'provider', 'accuracy', 
            'altitude', 'bearing', 'speed', 'vertical_acc', 'speed_acc', 'bearing_acc', 'extras', 'is_mock'));
        
        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['identifier'], $row['recnum'], $row['srv_version_datetime'], $row['timestamp'], $row['lat'], $row['lng'], $row['provider'], 
                    $row['accuracy'], $row['altitude'], $row['bearing'], $row['speed'], $row['vertical_acc'], $row['speed_acc'], 
                    $row['bearing_acc'], $row['extras'], $row['is_mock']);
            }
        }
        return $podatki;
    }
            
    private function getDataGeofences() {
        $Query = "SELECT * FROM maza_srv_geofences WHERE ank_id='$this->_ank_id' ORDER BY id;";

        $podatki = array(array('id', 'survey_id', 'geofence_on', 'center_latitude', 'center_longitude', 'radius', 'center_address', 'name', 
            'notification_title', 'notification_message', 'notification_sound', 'on_transition', 'after_seconds', 'location_after_triggered'));

        $sqlQuery = sisplet_query($Query);

        if (mysqli_num_rows($sqlQuery)) {
            while ($row = mysqli_fetch_assoc($sqlQuery)) {
                $podatki[] = array($row['id'], $row['ank_id'], $row['geofence_on'], $row['lat'], $row['lng'], $row['radius'], $row['address'], $row['name'], $row['notif_title'], 
                    $row['notif_message'], $row['notif_sound'], $row['on_transition'], $row['after_seconds'], $row['location_triggered']);
            }
        }

        return $podatki;
    }

    private function exportCSVTable($data, $name) {
        // Izvozimo CSV
        $fp = fopen('php://output', 'w');

        header('Content-Type: application/csv charset=UTF-8');
        header('Content-Disposition: attachement; filename="'.$name.'_' . time() .'_'. $this->_ank_id . '.csv";');
        echo "\xEF\xBB\xBF"; // UTF-8 BOM

        foreach ($data as $row) {
            fputcsv($fp, $row, ',');
        }

        fclose($fp);
    }
    
    public function exportCSVIdentifiers(){
        $data = $this->getDataIdentifiers();
        $this->exportCSVTable($data, 'maza_identifiers');
    }
    
    /*public function exportCSVInactiveIdentifiers(){
        $data = $this->getDataInactiveIdentifiers();
        $this->exportCSVTable($data, 'maza_inactive');
    }
    
    public function exportCSVActiveIdentifiers(){
        $data = $this->getDataActiveIdentifiers();
        $this->exportCSVTable($data, 'maza_active');
    }*/
    
    public function exportCSVTrackingLocations(){
        $data = $this->getDataTrackingLocations();
        $this->exportCSVTable($data, 'maza_tracking_locations');
    }
    
    public function exportCSVTrackingAR(){
        $data = $this->getDataTrackingAR();
        $this->exportCSVTable($data, 'maza_tracking_ar');
    }
    
    public function exportCSVEntryLocations(){
        $data = $this->getDataEntryLocations();
        $this->exportCSVTable($data, 'maza_entry_locations');
    }
        
    public function exportCSVTriggeredGeofences(){
        $data = $this->getDataTriggeredGeofences();
        $this->exportCSVTable($data, 'maza_triggered_geofences');
    }
    
    public function exportCSVTriggeredGeofencesAnswered(){
        $data = $this->getDataTriggeredGeofencesAnswers();
        $this->exportCSVTable($data, 'maza_triggered_geofences_answers');
    }
    
    public function exportCSVGeofences(){
        $data = $this->getDataGeofences();
        $this->exportCSVTable($data, 'maza_geofences');
    }
    
    public function exportCSVAlarmRespondets(){
        $data = $this->getDataAlarmRespondents();
        $this->exportCSVTable($data, 'maza_alarm_respondets');
    }
}

?>