summaryrefslogtreecommitdiffstats
path: root/admin/survey/classes/surveyData/class.ExclusiveLock.php
blob: 2103345a9c2a8ba531fac55ce5939bcbf2543e1f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php 

class ExclusiveLock
{
	protected $key;  	            // Lock key
	protected $own = false; 	    // Owner of lock

    
	public function __construct($key=NULL) {

		if ($key == NULL) {
			throw new Exception('ExclusiveLock: Key must not be NULL!');
        }
        
        $this->key = $key;
    }
    
    function __destruct() {

		if($this->own == TRUE) {
			$this->unlock();
		}
	}


    // Poskusamo zakleniti datoteke za doloceno anketo
	public function lock() {
		global $global_user_id;
		
		// Preverimo ce je datoteka zaklenjena in če je od tega minilo manj kot 15 minut
		$sqlLocked = sisplet_query("SELECT COUNT(*) 
                                    FROM srv_lock 
                                    WHERE lock_key = '$this->key' AND locked='1' AND last_lock_date > NOW() - INTERVAL 15 MINUTE");
		list($lockCount) = mysqli_fetch_row($sqlLocked);
		
        // Datoteka je zaklenjena - mi nimamo dostopa do nje
		if ($lockCount > 0){
            $this->own = false;
        }
        // Datoteka je odklenjena - jo zaklenemo
        else{
            $sqlLock = sisplet_query("INSERT INTO srv_lock 
                                            (lock_key, locked, usr_id, last_lock_date) 
                                        VALUES 
                                            ('".$this->key."', '1', '".$global_user_id."', NOW()) 
                                        ON DUPLICATE KEY 
                                            UPDATE locked='1', usr_id='".$global_user_id."', last_lock_date=NOW()");

            // Uspesno smo zaklenili datoteko - nastavimo, da smo owner in lahko operiramo z datoteko
            if ($sqlLock) {
                $this->own = true;
            }
        }

        return $this->own;
	}

    // Odklenemo datoteko, ki jo generiramo
	public function unlock() {
        
        // Ce smo owner lahko odkelenmo datoteke za anketo
        if($this->own){
        
            // Updejtamo lock = '0' in popravimo datum odklepanja
		    $sqlUnlock = sisplet_query("UPDATE srv_lock SET locked='0', last_unlock_date=NOW() WHERE lock_key='".$this->key."'");
        }

        // Po odklepanju nismo vec owner
        $this->own = false;
	}
    
    // Pridobimo datum zadnjega zaklepanja
	function getLockDate(){

        $sql = sisplet_query("SELECT DATE_FORMAT(last_lock_date, '%m.%d.%Y  %T') FROM srv_lock WHERE lock_key='".$this->key."' AND locked='1'");
        list($lastLockDate) = mysqli_fetch_row($sql);
        
		return $lastLockDate;
	}
};