partia duużych zmian
[watermeloncms.git] / wtrmln / modules / models / model_tempkeys.php
blobd65ba75cdcc706fe8c1f933ee1ec36b509b63eee
1 <?php
2 /********************************************************************
4 Watermelon CMS
6 Copyright 2008-2009 Radosław Pietruszewski
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 version 2 as published by the Free Software Foundation.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 ********************************************************************/
23 class Model_TempKeys extends Model
26 * public string[2] MakeKey(string $comment[, uint $time])
28 * tworzy losowy klucz z komentarzem $comment,
29 * zapisuje go w bazie i zwraca użytkownikowi.
30 * Taki klucz ma żywotność 5 minut, lub wygasa
31 * $time + 5 minut, gdy $time jest podane
33 * zwraca: array(string $key, string $value)
34 * przy czym $key jest to klucz zapisany w bazie
35 * danych, a $value to wartość przypisana do tego klucza
37 * string $comment - komentarz do klucza
38 * uint $time - timestamp żywotności klucza. gdy
39 * podany, klucz wygaśnie 300 sekund
40 * później niż $time
42 * przykład użycia:
44 * $this->TempKeys = $this->load->model('tempkeys');
45 * list($key, $value) = $this->TempKeys->MakeKey('komentarz');
48 public function MakeKey($comment, $time = null)
50 // generujemy losowy, ośmioznakowy klucz oraz wartość tego klucza
52 $key = substr(strHash(uniqid(mt_rand(), true)), 0, 8);
53 $value = substr(strHash(uniqid(mt_rand(), true)), 0, 8);
54 $comment = mysql_real_escape_string($comment);
56 // ustawiamy czas utworzenia
58 if($time === null)
60 $time = time();
63 // zapisujemy klucz w bazie
65 $this->db->query("INSERT INTO `__temporary_keys` (`key`, `value`, `created`, `comment`) VALUES ('%1', '%2', '%3', '%4')", $key, $value, $time, $comment);
67 // usuwamy stare klucze
69 $this->DeleteOldKeys();
71 return array($key, $value);
75 * public object GetKey(string $key)
77 * pobiera dane klucza tymczasowego o identyfikatorze $key
78 * zwraca dane tego klucza, jeśli istnieje, lub false
79 * gdy nie istnieje.
82 public function GetKey($key)
84 $key = mysql_real_escape_string($key);
86 // pobieramy dane danego klucza
88 $keyData = $this->db->query("SELECT * FROM `__temporary_keys` WHERE `key` = '%1'", $key);
90 // jesli ten klucz nie istnieje
92 if($keyData->num_rows() == 0)
94 return false;
97 // jeśli natomiast istnieje
99 return $keyData->to_obj();
103 * public bool CheckKey(string $key, string $value, string $comment)
105 * sprawdza, czy klucz jest prawdziwy (czy istnieje, czy wartość się
106 * zgadza z tą w bazie danych oraz czy komentarz się zgadza z tym w
107 * bazie danych).
109 * zwraca true, jeśli klucz istnieje, false gdy jest fałszywy (nie
110 * istnieje, wartość jest zła, lub komentarz jest zły)
112 * string $key - klucz, którego prawdziwość ma zostać potwierdzona
113 * string $value - wartość, która ma zostać porównana z tą w bazie danych
114 * string $comment - komentarz, który ma zostać porównany z tym w bazie danych
116 * przykład użycia:
118 * $this->TempKeys = $this->load->model('tempkeys');
119 * if(!$this->TempKeys->CheckKey($key, $value, $comment))
121 * echo $this->load->view('error');
122 * return;
126 public function CheckKey($key, $value, $comment)
128 // pobieramy dane
130 $data = $this->GetKey($key);
132 // sprawdzamy, czy takowy istnieje
134 if(!$data)
136 return false;
139 // sprawdzamy czy wartości się zgadzają
141 if($value != $data->value)
143 return false;
146 // sprawdzamy czy komentarze pasują do siebie
148 if($comment != $data->comment)
150 return false;
153 // skoro wszystko się zgadza to usuwamy klucz
155 $this->DeleteKey($key);
157 return true;
161 * public void DeleteKey(string $key)
163 * usuwa klucz tymczasowy o identyfikatorze $key
166 public function DeleteKey($key)
168 $key = mysql_real_escape_string($key);
170 $this->db->query("DELETE FROM `__temporary_keys` WHERE `key` = '%1'", $key);
174 * private void DeleteOldKeys()
176 * usuwa klucze, które zostały stworzone dawniej, niż 5 minut temu.
177 * Ma to zapobiec nadmiernemu rozrastaniu się tabeli
180 private function DeleteOldKeys()
182 $this->db->query("DELETE FROM `__temporary_keys` WHERE `created` < '%1'", time() - 300);