yourtar-cli 1.3.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/backTemplate/Makefile +7 -0
- package/bin/backTemplate/config/packages/monolog.yaml +61 -0
- package/bin/backTemplate/docker/config/promtail/config.yml +18 -0
- package/bin/backTemplate/docker/docker-compose.prod.yml +11 -0
- package/bin/backTemplate/docker/docker-compose.stage.yml +11 -0
- package/bin/backTemplate/src/Logging/YTExtraDataProcessor.php +20 -0
- package/bin/botTemplate/.env.dev-example +4 -2
- package/bin/botTemplate/.env.prod-example +4 -2
- package/bin/botTemplate/.env.stage-example +4 -2
- package/bin/botTemplate/Makefile +21 -2
- package/bin/botTemplate/config/packages/monolog.yaml +61 -0
- package/bin/botTemplate/docker/config/promtail/config.yml +18 -0
- package/bin/botTemplate/docker/docker-compose.prod.yml +11 -0
- package/bin/botTemplate/docker/docker-compose.stage.yml +11 -0
- package/bin/botTemplate/src/Controller/MessageController.php +74 -11
- package/bin/botTemplate/src/Entity/Chat.php +39 -25
- package/bin/botTemplate/src/Entity/DialogContext.php +1 -32
- package/bin/botTemplate/src/Entity/User.php +93 -0
- package/bin/botTemplate/src/Logging/YTExtraDataProcessor.php +20 -0
- package/bin/botTemplate/src/Repository/UserRepository.php +43 -0
- package/bin/botTemplate/src/Service/Service/MessageProcessService.php +34 -0
- package/bin/botTemplate/src/Service/Service/MessageThemeService/CustomMessageService.php +164 -0
- package/bin/botTemplate/src/Service/Service/MessageThemeService/MessageServiceTemplate.php +79 -0
- package/bin/botTemplate/src/Service/Service/MessageThemeService/MessageThemeInterface.php +8 -0
- package/bin/botTemplate/src/Service/Service/MessengerService/MaxService.php +275 -0
- package/bin/botTemplate/src/Service/Service/MessengerService/MessengerInterface.php +22 -0
- package/bin/botTemplate/src/Service/Service/MessengerService/TelegramService.php +195 -0
- package/bin/botTemplate/src/Service/Service/MessengerService/VkService.php +590 -0
- package/bin/index.js +5 -2
- package/package.json +1 -1
- package/bin/botTemplate/src/Service/MessageProcessService.php +0 -256
- package/bin/botTemplate/src/Service/TelegramService.php +0 -227
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Entity;
|
|
4
|
+
|
|
5
|
+
use App\Repository\UserRepository;
|
|
6
|
+
use Doctrine\Common\Collections\ArrayCollection;
|
|
7
|
+
use Doctrine\Common\Collections\Collection;
|
|
8
|
+
use Doctrine\ORM\Mapping as ORM;
|
|
9
|
+
|
|
10
|
+
#[ORM\Entity(repositoryClass: UserRepository::class)]
|
|
11
|
+
class User
|
|
12
|
+
{
|
|
13
|
+
#[ORM\Id]
|
|
14
|
+
#[ORM\GeneratedValue]
|
|
15
|
+
#[ORM\Column]
|
|
16
|
+
private ?int $id = null;
|
|
17
|
+
|
|
18
|
+
#[ORM\Column(length: 255, nullable: true)]
|
|
19
|
+
private ?string $phone = null;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @var Collection<int, Chat>
|
|
23
|
+
*/
|
|
24
|
+
#[ORM\OneToMany(targetEntity: Chat::class, mappedBy: 'user', orphanRemoval: true)]
|
|
25
|
+
private Collection $chats;
|
|
26
|
+
|
|
27
|
+
#[ORM\Column(length: 255, nullable: true)]
|
|
28
|
+
private ?string $role = null;
|
|
29
|
+
|
|
30
|
+
public function __construct()
|
|
31
|
+
{
|
|
32
|
+
$this->chats = new ArrayCollection();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public function getId(): ?int
|
|
36
|
+
{
|
|
37
|
+
return $this->id;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public function getPhone(): ?string
|
|
41
|
+
{
|
|
42
|
+
return $this->phone;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public function setPhone(?string $phone): static
|
|
46
|
+
{
|
|
47
|
+
$this->phone = $phone;
|
|
48
|
+
|
|
49
|
+
return $this;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @return Collection<int, Chat>
|
|
54
|
+
*/
|
|
55
|
+
public function getChats(): Collection
|
|
56
|
+
{
|
|
57
|
+
return $this->chats;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public function addChat(Chat $chat): static
|
|
61
|
+
{
|
|
62
|
+
if (!$this->chats->contains($chat)) {
|
|
63
|
+
$this->chats->add($chat);
|
|
64
|
+
$chat->setUser($this);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return $this;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public function removeChat(Chat $chat): static
|
|
71
|
+
{
|
|
72
|
+
if ($this->chats->removeElement($chat)) {
|
|
73
|
+
// set the owning side to null (unless already changed)
|
|
74
|
+
if ($chat->getUser() === $this) {
|
|
75
|
+
$chat->setUser(null);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return $this;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public function getRole(): ?string
|
|
83
|
+
{
|
|
84
|
+
return $this->role;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public function setRole(?string $role): static
|
|
88
|
+
{
|
|
89
|
+
$this->role = $role;
|
|
90
|
+
|
|
91
|
+
return $this;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Logging;
|
|
4
|
+
|
|
5
|
+
use Monolog\Attribute\AsMonologProcessor;
|
|
6
|
+
use Monolog\LogRecord;
|
|
7
|
+
use Monolog\Processor\ProcessorInterface;
|
|
8
|
+
|
|
9
|
+
#[AsMonologProcessor]
|
|
10
|
+
class YTExtraDataProcessor implements ProcessorInterface
|
|
11
|
+
{
|
|
12
|
+
public function __invoke(LogRecord $record): LogRecord
|
|
13
|
+
{
|
|
14
|
+
// Add data to the 'extra' array
|
|
15
|
+
$record->extra['yourtar_log'] = true;
|
|
16
|
+
$record->extra['project'] = '{{name}}';
|
|
17
|
+
|
|
18
|
+
return $record;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Repository;
|
|
4
|
+
|
|
5
|
+
use App\Entity\User;
|
|
6
|
+
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
7
|
+
use Doctrine\Persistence\ManagerRegistry;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @extends ServiceEntityRepository<User>
|
|
11
|
+
*/
|
|
12
|
+
class UserRepository extends ServiceEntityRepository
|
|
13
|
+
{
|
|
14
|
+
public function __construct(ManagerRegistry $registry)
|
|
15
|
+
{
|
|
16
|
+
parent::__construct($registry, User::class);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// /**
|
|
20
|
+
// * @return User[] Returns an array of User objects
|
|
21
|
+
// */
|
|
22
|
+
// public function findByExampleField($value): array
|
|
23
|
+
// {
|
|
24
|
+
// return $this->createQueryBuilder('u')
|
|
25
|
+
// ->andWhere('u.exampleField = :val')
|
|
26
|
+
// ->setParameter('val', $value)
|
|
27
|
+
// ->orderBy('u.id', 'ASC')
|
|
28
|
+
// ->setMaxResults(10)
|
|
29
|
+
// ->getQuery()
|
|
30
|
+
// ->getResult()
|
|
31
|
+
// ;
|
|
32
|
+
// }
|
|
33
|
+
|
|
34
|
+
// public function findOneBySomeField($value): ?User
|
|
35
|
+
// {
|
|
36
|
+
// return $this->createQueryBuilder('u')
|
|
37
|
+
// ->andWhere('u.exampleField = :val')
|
|
38
|
+
// ->setParameter('val', $value)
|
|
39
|
+
// ->getQuery()
|
|
40
|
+
// ->getOneOrNullResult()
|
|
41
|
+
// ;
|
|
42
|
+
// }
|
|
43
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Service;
|
|
4
|
+
|
|
5
|
+
use App\Entity\Chat;
|
|
6
|
+
use App\Entity\DialogContext;
|
|
7
|
+
use App\Service\MessageThemeService\CustomMessageService;
|
|
8
|
+
use Doctrine\ORM\EntityManagerInterface;
|
|
9
|
+
use Psr\Log\LoggerInterface;
|
|
10
|
+
|
|
11
|
+
class MessageProcessService
|
|
12
|
+
{
|
|
13
|
+
private ?EntityManagerInterface $em = null;
|
|
14
|
+
private ?LoggerInterface $logger;
|
|
15
|
+
|
|
16
|
+
public function __construct(EntityManagerInterface $em, LoggerInterface $logger)
|
|
17
|
+
{
|
|
18
|
+
$this->em = $em;
|
|
19
|
+
$this->logger = $logger;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public function processMessage(array $message): bool
|
|
23
|
+
{
|
|
24
|
+
$this->logger->error('msg '. json_encode($message));
|
|
25
|
+
|
|
26
|
+
$messageIsProcessed = false;
|
|
27
|
+
// add Message services
|
|
28
|
+
if (!$messageIsProcessed) $messageIsProcessed = new CustomMessageService($this->em, $this->logger)->processMessage($message);
|
|
29
|
+
/* ADD Service */
|
|
30
|
+
|
|
31
|
+
return $messageIsProcessed;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Service\MessageThemeService;
|
|
4
|
+
|
|
5
|
+
use App\Entity\Chat;
|
|
6
|
+
use App\Entity\DialogContext;
|
|
7
|
+
use App\Entity\User;
|
|
8
|
+
use App\Service\MessengerService\VkService;
|
|
9
|
+
use Doctrine\ORM\EntityManagerInterface;
|
|
10
|
+
use Psr\Log\LoggerInterface;
|
|
11
|
+
|
|
12
|
+
class CustomMessageService implements MessageThemeInterface
|
|
13
|
+
{
|
|
14
|
+
private ?EntityManagerInterface $em = null;
|
|
15
|
+
|
|
16
|
+
private ?LoggerInterface $logger;
|
|
17
|
+
|
|
18
|
+
private $paginationCount = 3;
|
|
19
|
+
private $comission = 10;
|
|
20
|
+
|
|
21
|
+
public function __construct(EntityManagerInterface $em, LoggerInterface $logger)
|
|
22
|
+
{
|
|
23
|
+
$this->em = $em;
|
|
24
|
+
$this->logger = $logger;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public function processMessage($message): bool
|
|
28
|
+
{
|
|
29
|
+
$this->logger->debug('Processing message', ['message' => $message]);
|
|
30
|
+
$isProcessed = true;
|
|
31
|
+
|
|
32
|
+
$chat = $this->em->getRepository(Chat::class)->findOneBy(array('chatId' => $message['from']), array('id' => 'desc'));
|
|
33
|
+
$context = $this->em->getRepository(DialogContext::class)->findOneBy(['chat' => $chat]);
|
|
34
|
+
if (array_key_exists('message', $message)) {
|
|
35
|
+
$arr = explode(' ', $message['message']);
|
|
36
|
+
|
|
37
|
+
//Comment: Это свитч для работы с командами и ручным вводом
|
|
38
|
+
switch (strtolower($arr[0])) {
|
|
39
|
+
case '/start':
|
|
40
|
+
$isInit = false;
|
|
41
|
+
if (!$chat instanceof Chat) {
|
|
42
|
+
$chat = new Chat();
|
|
43
|
+
if (array_key_exists('username', $message)) $chat->setUsername($message['username']);
|
|
44
|
+
if (array_key_exists('userId', $message)) $chat->setUserId($message['userId']);
|
|
45
|
+
$chat->setChatId($message['from']);
|
|
46
|
+
$chat->setType(match ($message['type']) {
|
|
47
|
+
'MAX' => Chat::TYPE_MAX,
|
|
48
|
+
'TG' => Chat::TYPE_TG,
|
|
49
|
+
'VK' => Chat::TYPE_VK,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
$user = new User();
|
|
53
|
+
$this->em->persist($user);
|
|
54
|
+
$chat->setUser($user);
|
|
55
|
+
|
|
56
|
+
$this->em->persist($chat);
|
|
57
|
+
$this->em->flush();
|
|
58
|
+
$isInit = true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
$responseText = "";
|
|
62
|
+
|
|
63
|
+
if ($isInit) $responseText = "Добрый день! Вы попали в чат-бота!";
|
|
64
|
+
|
|
65
|
+
if (strlen($responseText) > 0) $resp = $chat->getMessenger()->sendMessage($responseText);
|
|
66
|
+
|
|
67
|
+
if (is_null($chat->getPhone())) {
|
|
68
|
+
$resp = $chat->getMessenger()->sendKeyboardMessage("Поделитесь, пожалуйста, номером телефона", [
|
|
69
|
+
[['text' => 'Поделиться номером телефона', 'request_contact' => true]]
|
|
70
|
+
]);
|
|
71
|
+
$this->logger->error('resp', $resp);
|
|
72
|
+
}
|
|
73
|
+
if ($chat->getMessenger() instanceof VkService) $chat->getMessenger()->sendKeyboardMessage("Воспользуйтесь меню для работы с ботом", [
|
|
74
|
+
[['text' => 'Меню'],],
|
|
75
|
+
]);
|
|
76
|
+
break;
|
|
77
|
+
case '/example':
|
|
78
|
+
// $context = new DialogContext();
|
|
79
|
+
// $context->setChat($chat);
|
|
80
|
+
// $context->setContext(['data' => ['files'],]);
|
|
81
|
+
// $this->dialogRepo->add($context, true);
|
|
82
|
+
//
|
|
83
|
+
// $buttons = [];
|
|
84
|
+
// $responseText = "В данном разделе Вы можете заказать и оплатить услуги печати из Библиотеки ТУСУР с доставкой в корпус или общежитие\r\n\r\n" .
|
|
85
|
+
// "Прикрепите, пожалуйста, файлы для печати";
|
|
86
|
+
//
|
|
87
|
+
// $messenger->sendMessage($responseText, $from, $buttons);
|
|
88
|
+
break;
|
|
89
|
+
case '/help':
|
|
90
|
+
case '?':
|
|
91
|
+
$buttons = [];
|
|
92
|
+
if ($chat->getUser()->getRole() === Chat::ROLE_ADMIN) {
|
|
93
|
+
$responseText = "Приветствую! Я Вас узнал) Вы из администрации бота\r\n" .
|
|
94
|
+
"Что желаете сделать?\r\n\r\n" .
|
|
95
|
+
"P.S.: бот с любовью и заботой разработан командой @yourtar";
|
|
96
|
+
$buttons[] = [['text' => 'Админ. панель', 'callback_data' => json_encode(array('command' => 'adminMenu',)),]];
|
|
97
|
+
$buttons[] = [['text' => 'Статистика', 'callback_data' => json_encode(array('command' => 'stats',)),]];
|
|
98
|
+
} else {
|
|
99
|
+
$responseText = "Добро пожаловать в чат-бота !\r\n\r\n" .
|
|
100
|
+
"P.S.: бот с любовью и заботой разработан командой @yourtar!";
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
$chat->getMessenger()->sendMessage($responseText, $buttons);
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
if ($context instanceof DialogContext) {
|
|
107
|
+
//Comment: Это свитч для работы с контектом ввода (когда вводят ответ на вопрос бота)
|
|
108
|
+
switch ($context->getContext()['data'][0]) {
|
|
109
|
+
case 'example':
|
|
110
|
+
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
$isProcessed = false;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// else if (array_key_exists('photo', $message['message']) && count($message['message']['photo']) > 1 && array_key_exists('media_group_id', $message)) {
|
|
118
|
+
// $ms = $this->em->getRepository(MessageSending::class)->findOneBy(array('photoMediaGroupId' => $message['media_group_id']));
|
|
119
|
+
|
|
120
|
+
// if ($ms instanceof MessageSending) {
|
|
121
|
+
// $file = $messenger->getFile(end($message['message']['photo'])['file_id']);
|
|
122
|
+
|
|
123
|
+
// $files = $ms->getImage();
|
|
124
|
+
// $files[] = $file;
|
|
125
|
+
// $ms->setImage($files);
|
|
126
|
+
// $this->em->flush();
|
|
127
|
+
// }
|
|
128
|
+
// }
|
|
129
|
+
else $isProcessed = false;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else if (array_key_exists('data', $message)) {
|
|
134
|
+
$arr = json_decode($message['data'], true);
|
|
135
|
+
|
|
136
|
+
//Comment: Это свитч для работы с командами и ручным вводом
|
|
137
|
+
switch ($arr['command']) {
|
|
138
|
+
case 'adminMenu':
|
|
139
|
+
$chat->getMessenger()->deleteMessage($message['message_id']);
|
|
140
|
+
$chat->getMessenger()->sendMessage("Чем хотите управлять?", [
|
|
141
|
+
[['text' => 'Адреса', 'callback_data' => json_encode(array('command' => 'branchList',)),]],
|
|
142
|
+
[['text' => 'Услуги', 'callback_data' => json_encode(array('command' => 'serviceList',)),]],
|
|
143
|
+
[['text' => 'Пользоваатели', 'callback_data' => json_encode(array('command' => 'users',)),]],
|
|
144
|
+
]);
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
$isProcessed = false;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (array_key_exists('phone', $message) && $chat) {
|
|
153
|
+
$phone = preg_replace('/[^0-9+]/', '', $chat->getPhone());
|
|
154
|
+
$phone = substr($phone, -10);
|
|
155
|
+
$chat->setPhone($phone);
|
|
156
|
+
if (is_null($chat->getUser()->getPhone())) $chat->getUser()->setPhone($phone);
|
|
157
|
+
$chat->getMessenger()->sendMessage("Спасибо, что поделились номером!");
|
|
158
|
+
|
|
159
|
+
$this->em->flush();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return $isProcessed;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Service\MessageThemeService;
|
|
4
|
+
|
|
5
|
+
use App\Entity\Chat;
|
|
6
|
+
use App\Entity\DialogContext;
|
|
7
|
+
use App\Service\MessengerService\VkService;
|
|
8
|
+
use Doctrine\ORM\EntityManagerInterface;
|
|
9
|
+
use Psr\Log\LoggerInterface;
|
|
10
|
+
|
|
11
|
+
class MessageServiceTemplate implements MessageThemeInterface
|
|
12
|
+
{
|
|
13
|
+
private ?EntityManagerInterface $em = null;
|
|
14
|
+
|
|
15
|
+
private ?LoggerInterface $logger;
|
|
16
|
+
|
|
17
|
+
private $paginationCount = 3;
|
|
18
|
+
private $comission = 10;
|
|
19
|
+
|
|
20
|
+
public function __construct(EntityManagerInterface $em, LoggerInterface $logger)
|
|
21
|
+
{
|
|
22
|
+
$this->em = $em;
|
|
23
|
+
$this->logger = $logger;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public function processMessage(array $message):bool
|
|
27
|
+
{
|
|
28
|
+
$isProcessed = true;
|
|
29
|
+
|
|
30
|
+
$chat = $this->em->getRepository(Chat::class)->findOneBy(array('chatId' => $message['from']), array('id' => 'desc'));
|
|
31
|
+
$context = $this->em->getRepository(DialogContext::class)->findOneBy(['chat' => $chat]);
|
|
32
|
+
if (array_key_exists('message', $message)) {
|
|
33
|
+
$from = $message['from'];
|
|
34
|
+
|
|
35
|
+
$arr = explode(' ', $message['message']);
|
|
36
|
+
|
|
37
|
+
//Comment: Это свитч для работы с командами и ручным вводом
|
|
38
|
+
switch (strtolower($arr[0])) {
|
|
39
|
+
case 'example':
|
|
40
|
+
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
if ($context instanceof DialogContext) {
|
|
44
|
+
//Comment: Это свитч для работы с контектом ввода (когда вводят ответ на вопрос бота)
|
|
45
|
+
switch ($context->getContext()['data'][0]) {
|
|
46
|
+
case 'example':
|
|
47
|
+
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
$isProcessed = false;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else $isProcessed = false;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (array_key_exists('data', $message)) {
|
|
59
|
+
$arr = json_decode($message['data'], true);
|
|
60
|
+
|
|
61
|
+
//Comment: Это свитч для работы с командами и ручным вводом
|
|
62
|
+
switch ($arr['command']) {
|
|
63
|
+
case 'example':
|
|
64
|
+
// $chat->getMessenger()->deleteMessage($message['message_id'], $chat);
|
|
65
|
+
// $chat->getMessenger()->sendMessage("Чем хотите управлять?", $chat, [
|
|
66
|
+
// [['text' => 'Адреса', 'callback_data' => json_encode(array('command' => 'branchList',)),]],
|
|
67
|
+
// [['text' => 'Услуги', 'callback_data' => json_encode(array('command' => 'serviceList',)),]],
|
|
68
|
+
// [['text' => 'Пользоваатели', 'callback_data' => json_encode(array('command' => 'users',)),]],
|
|
69
|
+
// ]);
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
$isProcessed = false;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return $isProcessed;
|
|
78
|
+
}
|
|
79
|
+
}
|