Commit e4483deb authored by MBoretto's avatar MBoretto

introducing conversation notes

parent 5f7ec807
...@@ -60,11 +60,10 @@ class SurveyCommand extends UserCommand ...@@ -60,11 +60,10 @@ class SurveyCommand extends UserCommand
$conversation = new Conversation($user_id, $chat_id, $this->getName()); $conversation = new Conversation($user_id, $chat_id, $this->getName());
//cache data from the tracking session if any //cache data from the tracking session if any
$session = $conversation->getData(); if (!isset($conversation->notes['state'])) {
if (!isset($session['state'])) {
$state = '0'; $state = '0';
} else { } else {
$state = $session['state']; $state = $conversation->notes['state'];
} }
//state machine //state machine
...@@ -73,35 +72,35 @@ class SurveyCommand extends UserCommand ...@@ -73,35 +72,35 @@ class SurveyCommand extends UserCommand
switch ($state) { switch ($state) {
case 0: case 0:
if (empty($text)) { if (empty($text)) {
$session['state'] = '0'; $conversation->notes['state'] = 0;
$conversation->update($session); $conversation->update();
$data['text'] = 'Type your name:'; $data['text'] = 'Type your name:';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]); $data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
$result = Request::sendMessage($data); $result = Request::sendMessage($data);
break; break;
} }
$session['name'] = $text; $conversation->notes['name'] = $text;
$text = ''; $text = '';
// no break // no break
case 1: case 1:
if (empty($text)) { if (empty($text)) {
$session['state'] = 1; $conversation->notes['state'] = 1;
$conversation->update($session); $conversation->update();
$data['text'] = 'Type your surname:'; $data['text'] = 'Type your surname:';
$result = Request::sendMessage($data); $result = Request::sendMessage($data);
break; break;
} }
$session['surname'] = $text; $conversation->notes['surname'] = $text;
++$state; ++$state;
$text = ''; $text = '';
// no break // no break
case 2: case 2:
if (empty($text) || !is_numeric($text)) { if (empty($text) || !is_numeric($text)) {
$session['state'] = '2'; $conversation->notes['state'] = 2;
$conversation->update($session); $conversation->update();
$data['text'] = 'Type your age:'; $data['text'] = 'Type your age:';
if (!empty($text) && !is_numeric($text)) { if (!empty($text) && !is_numeric($text)) {
$data['text'] = 'Type your age, must be a number'; $data['text'] = 'Type your age, must be a number';
...@@ -109,14 +108,14 @@ class SurveyCommand extends UserCommand ...@@ -109,14 +108,14 @@ class SurveyCommand extends UserCommand
$result = Request::sendMessage($data); $result = Request::sendMessage($data);
break; break;
} }
$session['age'] = $text; $conversation->notes['age'] = $text;
$text = ''; $text = '';
// no break // no break
case 3: case 3:
if (empty($text) || !($text == 'M' || $text == 'F')) { if (empty($text) || !($text == 'M' || $text == 'F')) {
$session['state'] = '3'; $conversation->notes['state'] = 3;
$conversation->update($session); $conversation->update();
$keyboard = [['M','F']]; $keyboard = [['M','F']];
$reply_keyboard_markup = new ReplyKeyboardMarkup( $reply_keyboard_markup = new ReplyKeyboardMarkup(
...@@ -135,14 +134,14 @@ class SurveyCommand extends UserCommand ...@@ -135,14 +134,14 @@ class SurveyCommand extends UserCommand
$result = Request::sendMessage($data); $result = Request::sendMessage($data);
break; break;
} }
$session['gender'] = $text; $conversation->notes['gender'] = $text;
$text = ''; $text = '';
// no break // no break
case 4: case 4:
if (is_null($message->getLocation())) { if (is_null($message->getLocation())) {
$session['state'] = '4'; $conversation->notes['state'] = 4;
$conversation->update($session); $conversation->update();
$data['text'] = 'Insert your home location (need location object):'; $data['text'] = 'Insert your home location (need location object):';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]); $data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
...@@ -150,33 +149,33 @@ class SurveyCommand extends UserCommand ...@@ -150,33 +149,33 @@ class SurveyCommand extends UserCommand
break; break;
} }
$session['longitude'] = $message->getLocation()->getLongitude(); $conversation->notes['longitude'] = $message->getLocation()->getLongitude();
$session['latitude'] = $message->getLocation()->getLatitude(); $conversation->notes['latitude'] = $message->getLocation()->getLatitude();
// no break // no break
case 5: case 5:
if (is_null($message->getPhoto())) { if (is_null($message->getPhoto())) {
$session['state'] = '5'; $conversation->notes['state'] = 5;
$conversation->update($session); $conversation->update();
$data['text'] = 'Insert your picture:'; $data['text'] = 'Insert your picture:';
$result = Request::sendMessage($data); $result = Request::sendMessage($data);
break; break;
} }
$session['photo_id'] = $message->getPhoto()[0]->getFileId(); $conversation->notes['photo_id'] = $message->getPhoto()[0]->getFileId();
// no break // no break
case 6: case 6:
$conversation->stop();
$out_text = '/Survey result:' . "\n"; $out_text = '/Survey result:' . "\n";
unset($session['state']); unset($conversation->notes['state']);
foreach ($session as $k => $v) { foreach ($conversation->notes as $k => $v) {
$out_text .= "\n" . ucfirst($k).': ' . $v; $out_text .= "\n" . ucfirst($k).': ' . $v;
} }
$data['photo'] = $session['photo_id']; $data['photo'] = $conversation->notes['photo_id'];
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]); $data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
$data['caption'] = $out_text; $data['caption'] = $out_text;
$conversation->stop();
$result = Request::sendPhoto($data); $result = Request::sendPhoto($data);
break; break;
} }
......
...@@ -26,11 +26,18 @@ class Conversation ...@@ -26,11 +26,18 @@ class Conversation
protected $conversation = null; protected $conversation = null;
/** /**
* Data stored inside the conversation * Notes stored inside the conversation
* *
* @var array * @var array
*/ */
protected $data = null; protected $protected_notes = null;
/**
* Notes to be stored
*
* @var array
*/
public $notes = null;
/** /**
* Telegram user id * Telegram user id
...@@ -78,7 +85,8 @@ class Conversation ...@@ -78,7 +85,8 @@ class Conversation
protected function load() protected function load()
{ {
$this->conversation = null; $this->conversation = null;
$this->data = null; $this->protected_notes = null;
$this->notes = null;
//Select an active conversation //Select an active conversation
$conversation = ConversationDB::selectConversation($this->user_id, $this->chat_id, 1); $conversation = ConversationDB::selectConversation($this->user_id, $this->chat_id, 1);
...@@ -95,7 +103,8 @@ class Conversation ...@@ -95,7 +103,8 @@ class Conversation
} }
//Load the conversation data //Load the conversation data
$this->data = json_decode($this->conversation['data'], true); $this->protected_notes = json_decode($this->conversation['data'], true);
$this->notes = $this->protected_notes;
} }
return $this->exists(); return $this->exists();
...@@ -186,10 +195,10 @@ class Conversation ...@@ -186,10 +195,10 @@ class Conversation
* *
* @return bool * @return bool
*/ */
public function update($data) public function update()
{ {
if ($this->exists()) { if ($this->exists()) {
$fields = ['data' => json_encode($data)]; $fields = ['data' => json_encode($this->notes)];
$where = [ $where = [
'status' => 'active', 'status' => 'active',
'user_id' => $this->user_id, 'user_id' => $this->user_id,
...@@ -201,7 +210,7 @@ class Conversation ...@@ -201,7 +210,7 @@ class Conversation
return true; return true;
} }
} elseif ($this->start()) { } elseif ($this->start()) {
return $this->update($data); return $this->update();
} }
return false; return false;
...@@ -224,6 +233,6 @@ class Conversation ...@@ -224,6 +233,6 @@ class Conversation
*/ */
public function getData() public function getData()
{ {
return $this->data; return $this->notes;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment