Commit e4483deb authored by MBoretto's avatar MBoretto

introducing conversation notes

parent 5f7ec807
......@@ -57,21 +57,19 @@ class SendtochannelCommand extends AdminCommand
// Conversation
$this->conversation = new Conversation($user_id, $chat_id, $this->getName());
$session = $this->conversation->getData();
$channels = (array) $this->getConfig('your_channel');
if (!isset($session['state'])) {
if (!isset($conversation->notes['state'])) {
$state = (count($channels) == 0) ? -1 : 0;
$session['last_message_id'] = $message->getMessageId();
$conversation->notes['last_message_id'] = $message->getMessageId();
} else {
$state = $session['state'];
$state = $conversation->notes['state'];
}
switch ($state) {
case -1:
// getConfig has not been configured asking for channel to administer
if ($type != 'Message' || empty($text)) {
$session['state'] = -1;
$this->conversation->update($session);
$conversation->notes['state'] = -1;
$this->conversation->update();
$data['text'] = 'Insert the channel name: (@yourchannel)';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
......@@ -79,8 +77,8 @@ class SendtochannelCommand extends AdminCommand
break;
}
$session['channel'] = $text;
$session['last_message_id'] = $message->getMessageId();
$conversation->notes['channel'] = $text;
$conversation->notes['last_message_id'] = $message->getMessageId();
// Jump to state 1
goto insert;
......@@ -89,8 +87,8 @@ class SendtochannelCommand extends AdminCommand
case 0:
// getConfig has been configured choose channel
if ($type != 'Message' || !in_array($text, $channels)) {
$session['state'] = 0;
$this->conversation->update($session);
$conversation->notes['state'] = 0;
$this->conversation->update();
$keyboard = [];
foreach ($channels as $channel) {
......@@ -112,33 +110,33 @@ class SendtochannelCommand extends AdminCommand
$result = Request::sendMessage($data);
break;
}
$session['channel'] = $text;
$session['last_message_id'] = $message->getMessageId();
$conversation->notes['channel'] = $text;
$conversation->notes['last_message_id'] = $message->getMessageId();
// no break
case 1:
insert:
if ($session['last_message_id'] == $message->getMessageId() || ($type == 'Message' && empty($text))) {
$session['state'] = 1;
$this->conversation->update($session);
if ($conversation->notes['last_message_id'] == $message->getMessageId() || ($type == 'Message' && empty($text))) {
$conversation->notes['state'] = 1;
$this->conversation->update();
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
$data['text'] = 'Insert the content you want to share: text, photo, audio...';
$result = Request::sendMessage($data);
break;
}
$session['last_message_id'] = $message->getMessageId();
$session['message'] = $message->reflect();
$session['message_type'] = $type;
$conversation->notes['last_message_id'] = $message->getMessageId();
$conversation->notes['message'] = $message->reflect();
$conversation->notes['message_type'] = $type;
// no break
case 2:
if ($session['last_message_id'] == $message->getMessageId() || !($text == 'Yes' || $text == 'No')) {
$session['state'] = 2;
$this->conversation->update($session);
if ($conversation->notes['last_message_id'] == $message->getMessageId() || !($text == 'Yes' || $text == 'No')) {
$conversation->notes['state'] = 2;
$this->conversation->update();
// Execute this just with object that allow caption
if ($session['message_type'] == 'Video' || $session['message_type'] == 'Photo') {
if ($conversation->notes['message_type'] == 'Video' || $conversation->notes['message_type'] == 'Photo') {
$keyboard = [['Yes', 'No']];
$reply_keyboard_markup = new ReplyKeyboardMarkup(
[
......@@ -151,48 +149,48 @@ class SendtochannelCommand extends AdminCommand
$data['reply_markup'] = $reply_keyboard_markup;
$data['text'] = 'Would you insert caption?';
if ($session['last_message_id'] != $message->getMessageId() && !($text == 'Yes' || $text == 'No')) {
if ($conversation->notes['last_message_id'] != $message->getMessageId() && !($text == 'Yes' || $text == 'No')) {
$data['text'] = 'Would you insert a caption?' . "\n" . 'Type Yes or No';
}
$result = Request::sendMessage($data);
break;
}
}
$session['set_caption'] = false;
$conversation->notes['set_caption'] = false;
if ($text == 'Yes') {
$session['set_caption'] = true;
$conversation->notes['set_caption'] = true;
}
$session['last_message_id'] = $message->getMessageId();
$conversation->notes['last_message_id'] = $message->getMessageId();
// no break
case 3:
if (($session['last_message_id'] == $message->getMessageId() || $type != 'Message' ) && $session['set_caption']) {
$session['state'] = 3;
$this->conversation->update($session);
if (($conversation->notes['last_message_id'] == $message->getMessageId() || $type != 'Message' ) && $conversation->notes['set_caption']) {
$conversation->notes['state'] = 3;
$this->conversation->update();
$data['text'] = 'Insert caption:';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
$result = Request::sendMessage($data);
break;
}
$session['last_message_id'] = $message->getMessageId();
$session['caption'] = $text;
$conversation->notes['last_message_id'] = $message->getMessageId();
$conversation->notes['caption'] = $text;
// no break
case 4:
if ($session['last_message_id'] == $message->getMessageId() || !($text == 'Yes' || $text == 'No')) {
$session['state'] = 4;
$this->conversation->update($session);
if ($conversation->notes['last_message_id'] == $message->getMessageId() || !($text == 'Yes' || $text == 'No')) {
$conversation->notes['state'] = 4;
$this->conversation->update();
$data['text'] = 'Message will look like this:';
$result = Request::sendMessage($data);
if ($session['message_type'] != 'command') {
if ($session['set_caption']) {
$data['caption'] = $session['caption'];
if ($conversation->notes['message_type'] != 'command') {
if ($conversation->notes['set_caption']) {
$data['caption'] = $conversation->notes['caption'];
}
$result = $this->sendBack(new Message($session['message'], 'thisbot'), $data);
$result = $this->sendBack(new Message($conversation->notes['message'], 'thisbot'), $data);
$data['text'] = 'Would you post it?';
if ($session['last_message_id'] != $message->getMessageId() && !($text == 'Yes' || $text == 'No')) {
if ($conversation->notes['last_message_id'] != $message->getMessageId() && !($text == 'Yes' || $text == 'No')) {
$data['text'] = 'Would you post it?' . "\n" . 'Press Yes or No';
}
$keyboard = [['Yes', 'No']];
......@@ -210,18 +208,18 @@ class SendtochannelCommand extends AdminCommand
break;
}
$session['post_message'] = false;
$conversation->notes['post_message'] = false;
if ($text == 'Yes') {
$session['post_message'] = true;
$conversation->notes['post_message'] = true;
}
$session['last_message_id'] = $message->getMessageId();
$conversation->notes['last_message_id'] = $message->getMessageId();
// no break
case 5:
$this->conversation->stop();
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
if ($session['post_message']) {
$data['text'] = $this->publish(new Message($session['message'], 'anystring'), $session['channel'], $session['caption']);
if ($conversation->notes['post_message']) {
$data['text'] = $this->publish(new Message($conversation->notes['message'], 'anystring'), $conversation->notes['channel'], $conversation->notes['caption']);
$result = Request::sendMessage($data);
break;
}
......
......@@ -60,11 +60,10 @@ class SurveyCommand extends UserCommand
$conversation = new Conversation($user_id, $chat_id, $this->getName());
//cache data from the tracking session if any
$session = $conversation->getData();
if (!isset($session['state'])) {
if (!isset($conversation->notes['state'])) {
$state = '0';
} else {
$state = $session['state'];
$state = $conversation->notes['state'];
}
//state machine
......@@ -73,35 +72,35 @@ class SurveyCommand extends UserCommand
switch ($state) {
case 0:
if (empty($text)) {
$session['state'] = '0';
$conversation->update($session);
$conversation->notes['state'] = 0;
$conversation->update();
$data['text'] = 'Type your name:';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
$result = Request::sendMessage($data);
break;
}
$session['name'] = $text;
$conversation->notes['name'] = $text;
$text = '';
// no break
case 1:
if (empty($text)) {
$session['state'] = 1;
$conversation->update($session);
$conversation->notes['state'] = 1;
$conversation->update();
$data['text'] = 'Type your surname:';
$result = Request::sendMessage($data);
break;
}
$session['surname'] = $text;
$conversation->notes['surname'] = $text;
++$state;
$text = '';
// no break
case 2:
if (empty($text) || !is_numeric($text)) {
$session['state'] = '2';
$conversation->update($session);
$conversation->notes['state'] = 2;
$conversation->update();
$data['text'] = 'Type your age:';
if (!empty($text) && !is_numeric($text)) {
$data['text'] = 'Type your age, must be a number';
......@@ -109,14 +108,14 @@ class SurveyCommand extends UserCommand
$result = Request::sendMessage($data);
break;
}
$session['age'] = $text;
$conversation->notes['age'] = $text;
$text = '';
// no break
case 3:
if (empty($text) || !($text == 'M' || $text == 'F')) {
$session['state'] = '3';
$conversation->update($session);
$conversation->notes['state'] = 3;
$conversation->update();
$keyboard = [['M','F']];
$reply_keyboard_markup = new ReplyKeyboardMarkup(
......@@ -135,14 +134,14 @@ class SurveyCommand extends UserCommand
$result = Request::sendMessage($data);
break;
}
$session['gender'] = $text;
$conversation->notes['gender'] = $text;
$text = '';
// no break
case 4:
if (is_null($message->getLocation())) {
$session['state'] = '4';
$conversation->update($session);
$conversation->notes['state'] = 4;
$conversation->update();
$data['text'] = 'Insert your home location (need location object):';
$data['reply_markup'] = new ReplyKeyBoardHide(['selective' => true]);
......@@ -150,33 +149,33 @@ class SurveyCommand extends UserCommand
break;
}
$session['longitude'] = $message->getLocation()->getLongitude();
$session['latitude'] = $message->getLocation()->getLatitude();
$conversation->notes['longitude'] = $message->getLocation()->getLongitude();
$conversation->notes['latitude'] = $message->getLocation()->getLatitude();
// no break
case 5:
if (is_null($message->getPhoto())) {
$session['state'] = '5';
$conversation->update($session);
$conversation->notes['state'] = 5;
$conversation->update();
$data['text'] = 'Insert your picture:';
$result = Request::sendMessage($data);
break;
}
$session['photo_id'] = $message->getPhoto()[0]->getFileId();
$conversation->notes['photo_id'] = $message->getPhoto()[0]->getFileId();
// no break
case 6:
$conversation->stop();
$out_text = '/Survey result:' . "\n";
unset($session['state']);
foreach ($session as $k => $v) {
unset($conversation->notes['state']);
foreach ($conversation->notes as $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['caption'] = $out_text;
$conversation->stop();
$result = Request::sendPhoto($data);
break;
}
......
......@@ -26,11 +26,18 @@ class Conversation
protected $conversation = null;
/**
* Data stored inside the conversation
* Notes stored inside the conversation
*
* @var array
*/
protected $data = null;
protected $protected_notes = null;
/**
* Notes to be stored
*
* @var array
*/
public $notes = null;
/**
* Telegram user id
......@@ -78,7 +85,8 @@ class Conversation
protected function load()
{
$this->conversation = null;
$this->data = null;
$this->protected_notes = null;
$this->notes = null;
//Select an active conversation
$conversation = ConversationDB::selectConversation($this->user_id, $this->chat_id, 1);
......@@ -95,7 +103,8 @@ class Conversation
}
//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();
......@@ -186,10 +195,10 @@ class Conversation
*
* @return bool
*/
public function update($data)
public function update()
{
if ($this->exists()) {
$fields = ['data' => json_encode($data)];
$fields = ['data' => json_encode($this->notes)];
$where = [
'status' => 'active',
'user_id' => $this->user_id,
......@@ -201,7 +210,7 @@ class Conversation
return true;
}
} elseif ($this->start()) {
return $this->update($data);
return $this->update();
}
return false;
......@@ -224,6 +233,6 @@ class Conversation
*/
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