Bin will be removed on June 1, 2014 in favor of http://gist.github.com. Please save all your pastes before then. So long, and thanks for all the fish!×
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
81
82
83
84
85
86
87
88
<?php
class Ticket extends AppModel {
    var $name = 'Ticket';  
   
    var $validate = array(
        'dummy' => array(
            'rule' => 'notEmpty',
            'message' => 'Please use setTicket instead!'
        )
    );
 
    function beforeValidate() {
        if ( !isset($this->data[$this->alias]['dummy']) ) {
            $this->data[$this->alias]['dummy'] = '';
        }
        return true;
    }
 
   
    function setTicket($url = null, $data = null, $deadline = null, $usecount = null) {
        $this->_garbage();
        if ( $url && $data ) {
            if ( empty($deadline) ) {
                $deadline = date('Y-m-d H:i:s', time() + (24 * 60 * 60));
            }
            $record[$this->alias]['hash'] = Security::hash(time().$url, 'md5');
            $record[$this->alias]['caller'] = $url;
            $record[$this->alias]['data'] = $data;
            $record[$this->alias]['deadline'] = $deadline;
            $record[$this->alias]['usecount'] = $usecount;
            $record[$this->alias]['dummy'] = 'dummy';
           
            if ( $this->save($record) ) {
                return $record[$this->alias]['hash'];
            }
        }
        return false;
    }
   
    function getTicket($url = null, $hash = null) {
        $this->_garbage();
        if ( $url && $hash ) {
            $result = $this->findByHash($hash);
            if ( is_array($result) && is_array($result[$this->alias]) && ($result[$this->alias]['caller']==$url) ) {
                return $result[$this->alias]['data'];
            }
        }
        return false;
    }
 
    function drop($hash = null) {
        $this->_garbage();
        if ( $hash ) {
            $result = $this->findByHash($hash);
            if ( is_array($result) && is_array($result[$this->alias]) ) {
               
                if ( !empty($result[$this->alias]['usecount']) ) {
                    $result[$this->alias]['usecount']--;
                    if ( empty($result[$this->alias]['usecount']) ) {
                        $result = $this->del($result[$this->alias]['id']);
                    } else {
                        $result[$this->alias]['dummy'] = 'dummy';
                        $result = $this->save($result);
                    }
                } elseif ( $result[$this->alias]['usecount'] === 0 || $result[$this->alias]['usecount'] === '0' ) {
                    $result = true;
                } else {
                    $result = $this->del($result[$this->alias]['id']);
                }
               
                return $result;
            }
        }
        return false;
    }
 
 
    function _garbage() {
        $now = date('Y-m-d H:i:s', time());
        $result = $this->deleteAll( array(
            'OR' => array(
                $this->alias.'.deadline <' => $now,
                $this->alias.'.deadline' => null
            )
        ));
    }
}
?>