From 57117dd2614bd14808e391a7f1ae20ade00b8d5b Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Sat, 25 Aug 2012 18:28:59 +0000
Subject: [PATCH] 1. Przeportowanie modułu data do nowej wersji API. 2. Dodanie metody setClass() do klasy BotSession. 3. Aktualizacja "Instrukcji tworzenia modułów" o w/w metodę.

---
 modules/10_data/init.php    |   58 +++++++++
 /dev/null                   |  145 ------------------------
 modules/10_data/handler.php |  105 +++++++++++++++++
 class/BotSession.php        |   10 +
 MODULES.html                |    8 +
 5 files changed, 179 insertions(+), 147 deletions(-)

diff --git a/MODULES.html b/MODULES.html
index 7b1ab7b..6397387 100755
--- a/MODULES.html
+++ b/MODULES.html
@@ -264,10 +264,16 @@
 
 <p>Odpowiednik klasy database z poprzedniej wersji bota. Aktualnie instancja klasy BotSession, umożliająca przechowywanie danych przypisanych do użytkownika, m.in. miasta, nazwy kina i tym podobnych.</p>
 
+<p class="warning">Przed użyciem sesji należy ustawić nazwę klasy, dla której zmienne będą przetwarzane. Jest to odpowiednik drugiego argumentu przekazywanego do metody database::get() z pierwszych wersji bota.</p>
+
 <p>Przykład użycia:</p>
 
 <pre>
-<code><i>// Ustawienie pojedynczej wartości</i>
+<code>
+<i>// Ustawienie nazwy modułu. WYMAGANE!</i>
+<var>$msg<b>-&gt;</b>session<b>-&gt;</b>setClass</var><b>(<cite>'przyklad'</cite>);</b>
+
+<i>// Ustawienie pojedynczej wartości</i>
 <var>$msg<b>-&gt;</b>session<b>-&gt;</b>zmienna</var> <b>= <cite>'To jest test'</cite>;</b>
 <a href="http://php.net/assert"><b>assert</b></a><b>(</b><var>$msg<b>-&gt;</b>session<b>-&gt;</b>zmienna</var> <b>=== <cite>'To jest test'</cite>);</b>
 
diff --git a/class/BotSession.php b/class/BotSession.php
index cec7f45..e8b8930 100644
--- a/class/BotSession.php
+++ b/class/BotSession.php
@@ -7,7 +7,7 @@
 	
 	/**
 	 * Nazwa modułu, którego zmienne klasa przetwarza
-	 * @var string max. 40 znak�w
+	 * @var string max. 40 znaków
 	 */
 	var $class;
 	
@@ -25,6 +25,10 @@
 	}
 	
 	private function init() {
+		if(strlen($this->class) == 0) {
+			throw new Exception('Przed użyciem $msg->session należy ustawić nazwę modułu za pomocą metody setClass - patrz "Poradnik tworzenia modułów", dział "Klasa BotMessage", rozdział "Pole $session".');
+		}
+		
 		if($this->PDO) {
 			return NULL;
 		}
@@ -145,6 +149,10 @@
 		return $return;
 	}
 	
+	function setClass($class) {
+		$this->class = $class;
+	}
+	
 	function truncate() {
 		$this->init();
 		
diff --git a/modules/10_data.php b/modules/10_data.php
deleted file mode 100644
index 5a93bad..0000000
--- a/modules/10_data.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-class data implements module {
-	static $dni = array(
-		'niedziela',
-		'poniedziałek',
-		'wtorek',
-		'środa',
-		'czwartek',
-		'piątek',
-		'sobota',
-	);
-	static $miesiace = array(
-		1 => 'stycznia',
-		'lutego',
-		'marca',
-		'kwietnia',
-		'maja',
-		'czerwca',
-		'lipca',
-		'sierpnia',
-		'września',
-		'października',
-		'listopada',
-		'grudnia',
-	);
-	
-	static function register_cmd() {
-		return array(
-			'data' => 'cmd_data',
-			'dzien' => 'cmd_data',
-			'd' => 'cmd_data',
-			'imieniny' => 'cmd_imieniny',
-			'im' => 'cmd_imieniny',
-			'i' => 'cmd_imieniny',
-		);
-	}
-	
-	static function help($cmd = NULL) {
-		switch($cmd) {
-			case 'data':
-			case 'd':
-				GGapi::putRichText('data', TRUE);
-				GGapi::putRichText(' [dzień]', FALSE, TRUE);
-				GGapi::putRichText(' (alias: ');
-				GGapi::putRichText('d', TRUE);
-				GGapi::putRichText(')'."\n".'   Zwraca informacje (wschód/zachód słońca, imieniny) o dniu dzisiejszym lub podanym dniu ');
-				GGapi::putRichText('[dzień]', FALSE, TRUE);
-				GGapi::putRichText("\n\n".'Przykłady:', FALSE, FALSE, TRUE);
-				GGapi::putRichText("\n".'   data'."\n".'   data pojutrze'."\n".'   data 1.01.2009');
-			break;
-			case 'imieniny':
-			case 'im':
-			case 'i':
-				GGapi::putRichText('imieniny', TRUE);
-				GGapi::putRichText(' imie', FALSE, TRUE);
-				GGapi::putRichText(' (alias: ');
-				GGapi::putRichText('i', TRUE);
-				GGapi::putRichText(')'."\n".'   Podaje dni, w których imieniny obchodzi osoba o imieniu ');
-				GGapi::putRichText('imie', FALSE, TRUE);
-				GGapi::putRichText("\n\n".'Przykłady:', FALSE, FALSE, TRUE);
-				GGapi::putRichText("\n".'   imieniny Adama'."\n".'   imieniny Ewy');
-			break;
-			default:
-				GGapi::putRichText('data', TRUE);
-				GGapi::putRichText(' [dzien]', FALSE, TRUE);
-				GGapi::putRichText("\n".'   Informacje o danym dniu'."\n");
-				
-				GGapi::putRichText('imieniny ', TRUE);
-				GGapi::putRichText(' imie', FALSE, TRUE);
-				GGapi::putRichText("\n".'   Kiedy ');
-				GGapi::putRichText('imie', FALSE, TRUE);
-				GGapi::putRichText(' obchodzi imieniny'."\n\n");
-			break;
-		}
-	}
-	
-	static function cmd_data($name, $arg) {
-		if(empty($arg)) {
-			$data = time();
-		}
-		else
-		{
-			$data = calendar::parse_date($arg);
-			if(!$data) {
-				GGapi::putText('Podana data nie została rozpoznana'."\n\n");
-				GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE);
-				GGapi::putRichText("\n".'   data'."\n".'   data pojutrze'."\n".'   data 1.01.2009');
-				
-				return;
-			}
-		}
-		
-		if(date('d.m.Y') == date('d.m.Y', $data)) {
-			$txt = 'Dziś jest ';
-		}
-		else
-		{
-			$txt = 'Wybrany dzień to ';
-		}
-		
-		include('./data/data/data.php');
-		
-		$txt .= self::$dni[date('w', $data)].', '.date('j', $data).' '.self::$miesiace[date('n', $data)].' '.date('Y').' r., '.(date('z', $data)+1).' dzień roku.';
-		
-		$geo = database::get($_GET['from'], 'pogoda', 'geo');
-		if(!$geo) {
-			$geo = array('lon' => '52.25', 'lat' => '21.0');
-		}
-		
-		$txt .= "\n\n".'Imieniny: '.$imieniny[date('n', $data)][date('j', $data)]."\n".'Wschód Słońca: '.date_sunrise($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I'))."\n".'Zachód Słońca: '.date_sunset($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I'));
-		
-		GGapi::putText($txt);
-	}
-	
-	static function cmd_imieniny($name, $arg) {
-		$arg = funcs::utfToAscii($arg);
-		
-		if(empty($arg)) {
-			GGapi::putText('Nie podano imienia!'."\n\n");
-			GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE);
-			GGapi::putRichText("\n".'   imieniny Adama'."\n".'   imieniny Ewy');
-			
-			return;
-		}
-		
-		include('./data/data/imieniny.php');
-		
-		if(!isset($imiona[$arg])) {
-			GGapi::putText('Nie znaleziono imienia w bazie. Pamiętaj, by podać imię w dopełniaczu liczby pojedynczej!'."\n\n");
-			GGapi::putRichText('Przykłady:', FALSE, FALSE, TRUE);
-			GGapi::putRichText("\n".'   imieniny Adama'."\n".'   imieniny Ewy');
-			
-			return;
-		}
-		
-		foreach($imiona[$arg] as $dzien) {
-			$dzien = explode('.', $dzien);
-			
-			$txt[] = $dzien[0].' '.self::$miesiace[$dzien[1]];
-		}
-		
-		GGapi::putText('Imieniny '.ucfirst($arg).' są '.implode(', ', $txt));
-	}
-}
-?>
\ No newline at end of file
diff --git a/modules/10_data/handler.php b/modules/10_data/handler.php
new file mode 100644
index 0000000..175eebe
--- /dev/null
+++ b/modules/10_data/handler.php
@@ -0,0 +1,105 @@
+<?php
+class bot_data_module implements BotModule {
+	static $dni = array(
+		'niedziela',
+		'poniedzia�ek',
+		'wtorek',
+		'�roda',
+		'czwartek',
+		'pi�tek',
+		'sobota',
+	);
+	static $miesiace = array(
+		1 => 'stycznia',
+		'lutego',
+		'marca',
+		'kwietnia',
+		'maja',
+		'czerwca',
+		'lipca',
+		'sierpnia',
+		'wrze�nia',
+		'pa�dziernika',
+		'listopada',
+		'grudnia',
+	);
+	
+	function data($msg, $params) {
+		$arg = funcs::utfToAscii($msg->args);
+		
+		if(empty($arg)) {
+			$data = time();
+		}
+		else
+		{
+			$data = calendar::parse_date($arg);
+			if(!$data) {
+				return new BotMsg('Podana data nie zosta�a rozpoznana<br />'."\n"
+					. '<br />'."\n"
+					. '<u>Przyk�ady:</u><br />'."\n"
+					. 'data<br />'."\n"
+					. 'data pojutrze<br />'."\n"
+					. 'data 1.01.2009');
+			}
+		}
+		
+		if(date('d.m.Y') == date('d.m.Y', $data)) {
+			$txt = 'Dzi� jest ';
+		}
+		else
+		{
+			$txt = 'Wybrany dzie� to ';
+		}
+		
+		include('./data/data/data.php');
+		
+		$txt .= self::$dni[date('w', $data)].', '.date('j', $data).' '.self::$miesiace[date('n', $data)].' '.date('Y').' r., '.(date('z', $data)+1).' dzie� roku.<br />'."\n"
+			. '<br />'."\n";
+		
+		$msg->session->setClass('pogoda');
+		if(!isset($msg->session->geo)) {
+			$geo = array('lon' => '52.25', 'lat' => '21.0');
+		}
+		else
+		{
+			$geo = $msg->session->geo;
+		}
+		
+		$txt .= 'Imieniny: '.$imieniny[date('n', $data)][date('j', $data)].'<br />'."\n"
+			. 'Wsch�d S�o�ca: '.date_sunrise($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I')).'<br />'."\n"
+			. 'Zach�d S�o�ca: '.date_sunset($data, SUNFUNCS_RET_STRING, $geo['lat'], $geo['lon'], 90.58, 1+date('I'));
+		
+		return new BotMsg($txt);
+	}
+	
+	function imieniny($msg, $params) {
+		$arg = funcs::utfToAscii($arg);
+		
+		if(empty($arg)) {
+			return new BotMsg('Nie podano imienia!<br />'."\n"
+				. '<br />'."\n"
+				. '<u>Przyk�ady:</u><br />'."\n"
+				. 'imieniny Adama<br />'."\n"
+				. 'imieniny Ewy');
+		}
+		
+		include('./data/data/imieniny.php');
+		
+		if(!isset($imiona[$arg])) {
+			return new BotMsg('Nie znaleziono imienia w bazie. Pami�taj, by poda� imi� w dope�niaczu liczby pojedynczej!<br />'."\n"
+				. '<br />'."\n"
+				. '<u>Przyk�ady:</u><br />'."\n"
+				. 'imieniny Adama<br />'."\n"
+				. 'imieniny Ewy');
+		}
+		
+		foreach($imiona[$arg] as $dzien) {
+			$dzien = explode('.', $dzien);
+			
+			$txt[] = $dzien[0].' '.self::$miesiace[$dzien[1]];
+		}
+		
+		return new BotMsg('Imieniny '.ucfirst($arg).' s� '.implode(', ', $txt));
+	}
+}
+?>
\ No newline at end of file
diff --git a/modules/10_data/init.php b/modules/10_data/init.php
new file mode 100644
index 0000000..d86377b
--- /dev/null
+++ b/modules/10_data/init.php
@@ -0,0 +1,58 @@
+<?php
+class bot_data_init implements BotModuleInit {
+	function register() {
+		$handler_data = array(
+			array(
+				'file' => 'handler.php',
+				'class' => 'bot_data_module',
+				'method' => 'data',
+			)
+		);
+		$handler_imieniny = array(
+			array(
+				'file' => 'handler.php',
+				'class' => 'bot_data_module',
+				'method' => 'imieniny',
+			)
+		);
+		
+		return array(
+			'data' => $handler_data,
+			'dzien' => $handler_data,
+			'd' => $handler_data,
+			'imieniny' => $handler_imieniny,
+			'im' => $handler_imieniny,
+			'i' => $handler_imieniny,
+		);
+	}
+	
+	function help($params = NULL) {
+		if($params === NULL) {
+			return new BotMsg('<b>data</b> <i>[dzień]</i><br />'."\n"
+				. '   Informacje o danym dniu.<br />'."\n"
+				. '<b>imieniny</b> <i>imię</i><br />'."\n"
+				. '   Kiedy <i>imię</i> obchodzi imieniny.');
+		}
+		elseif(substr($params, 0, 1) == 'd') {
+			return new BotMsg('<b>data</b> <i>[dzień]</i> (aliasy: <b>d, dzień</b>)<br />'."\n"
+				. '   Zwraca informacje (wschód/zachód słońca, imieniny) o dniu podanym w argumencie <i>[dzień]</i> lub o dniu dzisiejszym - gdy nie uda się określić dnia lub nie podano argumentu.<br />'."\n"
+				. '<br />'."\n"
+				. '<u>Przykłady:</u><br />'."\n"
+				. 'data<br />'."\n"
+				. 'data pojutrze<br />'."\n"
+				. 'data 1.01.2009');
+		}
+		else
+		{
+			return new BotMsg('<b>imieniny</b> <i>imię</i> (alias: <b>i</b>)<br />'."\n"
+				. '   Podaje dni, w których <i>imię</i> obchodzi imieniny. Parametr <i>imię</i> winien być podany w dopełniaczu liczby pojedynczej.<br />'."\n"
+				. '<br />'."\n"
+				. '<u>Przykłady:</u><br />'."\n"
+				. 'imieniny Adama<br />'."\n"
+				. 'imieniny Ewy');
+		}
+	}
+}
+
+return 'bot_data_init';
+?>
\ No newline at end of file

--
Gitblit v1.9.1