Skip to content

Commit b462aad

Browse files
committed
✨ v2.0.4
Implemented our own asVisitor() method wrapper with changing language and style (if required)
1 parent f4b5e40 commit b462aad

File tree

4 files changed

+153
-57
lines changed

4 files changed

+153
-57
lines changed

upload/src/addons/SModders/TelegramCore/Listener.php

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -49,47 +49,53 @@ public static function smodders_tgcore__client_setup(Client $client)
4949
$sendAuthMessage = function(Message $message)
5050
use ($client, $options, $templater)
5151
{
52-
$chat = $message->getChat();
53-
54-
try {
55-
$client->call('sendMessage', [
56-
'chat_id' => $chat->getId(),
57-
'parse_mode' => 'HTML',
58-
59-
'reply_markup' => json_encode([
60-
'inline_keyboard' => [
61-
[
52+
/** @var \SModders\TelegramCore\SubContainer\Telegram $telegramContainer */
53+
$telegramContainer = \XF::app()->container('smodders.telegram');
54+
$userId = $message->getChat()->getId();
55+
56+
$telegramContainer->asTelegramVisitorById($userId, function()
57+
use ($client, $options, $templater, $userId, $message)
58+
{
59+
try {
60+
$client->call('sendMessage', [
61+
'chat_id' => $userId,
62+
'parse_mode' => 'HTML',
63+
64+
'reply_markup' => json_encode([
65+
'inline_keyboard' => [
6266
[
63-
'text' => \XF::phraseDeferred('button.login'),
64-
'login_url' => [
65-
'url' => $options->boardUrl . '/connected_account.php',
66-
'request_write_access' => true,
67+
[
68+
'text' => \XF::phraseDeferred('button.login'),
69+
'login_url' => [
70+
'url' => $options->boardUrl . '/connected_account.php',
71+
'request_write_access' => true,
72+
]
6773
]
6874
]
6975
]
70-
]
71-
]),
72-
73-
'text' => $templater->renderTemplate('public:smodders_tgcore__directauth_message', [
74-
'message' => $message,
75-
'board' => [
76-
'url' => $options->boardUrl,
77-
'title' => $options->boardTitle,
78-
],
79-
]),
80-
]);
81-
}
82-
catch (\Exception $e)
83-
{
84-
$exceptionText = $e->getMessage();
85-
if (strpos($exceptionText, "bot was blocked by user") !== FALSE)
86-
{
87-
// block message logging.
88-
return;
76+
]),
77+
78+
'text' => $templater->renderTemplate('public:smodders_tgcore__directauth_message', [
79+
'message' => $message,
80+
'board' => [
81+
'url' => $options->boardUrl,
82+
'title' => $options->boardTitle,
83+
],
84+
]),
85+
]);
8986
}
87+
catch (\Exception $e)
88+
{
89+
$exceptionText = $e->getMessage();
90+
if (strpos($exceptionText, "bot was blocked by user") !== FALSE)
91+
{
92+
// block message logging.
93+
return;
94+
}
9095

91-
\XF::logException($e);
92-
}
96+
\XF::logException($e);
97+
}
98+
});
9399
};
94100

95101
// Register our command listeners.

upload/src/addons/SModders/TelegramCore/SubContainer/Telegram.php

Lines changed: 100 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use SModders\TelegramCore\Entity\User;
1313
use TelegramBot\Api\BotApi;
1414
use TelegramBot\Api\Client;
15-
use XF\ConnectedAccount\Provider\AbstractProvider;
1615
use XF\Container;
1716
use XF\SubContainer\AbstractSubContainer;
1817

@@ -150,20 +149,36 @@ public function isInstalled()
150149
{
151150
return $this->container['bot.isInstalled'];
152151
}
153-
154-
public function asTelegramVisitorById($userId, \Closure $action, $setLanguage = true)
152+
153+
/**
154+
* @param $userId
155+
* @param \Closure $action
156+
* @param bool $setLanguage
157+
* @param bool $setStyle
158+
* @return mixed
159+
* @throws \Exception
160+
*/
161+
public function asTelegramVisitorById($userId, \Closure $action, $setLanguage = true, $setStyle = true)
155162
{
156163
/** @var \SModders\TelegramCore\Entity\User|null $user */
157164
$user = \XF::em()->find('SModders\\TelegramCore:User', $userId);
158165
if (!$user)
159166
{
160-
return $action(false);
167+
return $action(false, false);
161168
}
162169

163170
return $this->asTelegramVisitor($user, $action, $setLanguage);
164171
}
165-
166-
public function asTelegramVisitor(User $user, \Closure $action, $setLanguage = true)
172+
173+
/**
174+
* @param User $user
175+
* @param \Closure $action
176+
* @param bool $setLanguage
177+
* @param bool $setStyle
178+
* @return mixed
179+
* @throws \Exception
180+
*/
181+
public function asTelegramVisitor(User $user, \Closure $action, $setLanguage = true, $setStyle = true)
167182
{
168183
/** @var \XF\Entity\UserConnectedAccount|null $xfUserConnectedAccount */
169184
$xfUserConnectedAccount = \XF::em()->findOne('XF:UserConnectedAccount', [
@@ -172,28 +187,93 @@ public function asTelegramVisitor(User $user, \Closure $action, $setLanguage = t
172187
], 'User');
173188
if (!$xfUserConnectedAccount)
174189
{
175-
return $action(false);
190+
return $action(null);
176191
}
177192

178193
$xfUser = $xfUserConnectedAccount->User;
179-
180-
$oldLanguage = \XF::language();
181-
if ($setLanguage)
194+
195+
// Additional wrapper. We're want add user entity from argument start.
196+
$originalAction = $action;
197+
$action = function() use ($originalAction, $user)
182198
{
183-
$language = \XF::app()->language($xfUser->language_id);
184-
\XF::setLanguage($language);
185-
}
186-
187-
try
199+
$arguments = [$user] + func_get_args();
200+
201+
return call_user_func_array($originalAction, $arguments);
202+
};
203+
204+
// Finally - call the function chain.
205+
return $this->asVisitor($xfUser, $action, $setLanguage, $setStyle);
206+
}
207+
208+
/**
209+
* Temporarily take an action with the given user considered to be the visitor.
210+
* Also changes the language.
211+
*
212+
* @param \XF\Entity\User $user
213+
* @param \Closure $action
214+
* @param boolean $setLanguage
215+
* @param boolean $setStyle
216+
* @return mixed
217+
* @throws \Exception
218+
*/
219+
public function asVisitor(\XF\Entity\User $user, $action, $setLanguage = true, $setStyle = true)
220+
{
221+
if ($setLanguage)
188222
{
189-
return \XF::asVisitor($xfUser, $action);
223+
$originalAction = $action;
224+
$action = function() use ($originalAction, $user)
225+
{
226+
$app = \XF::app();
227+
$templater = $app->templater();
228+
229+
$newLanguage = $app->language($user->language_id);
230+
$oldLanguage = \XF::language();
231+
$oldTemplaterLanguage = $templater->getLanguage();
232+
233+
\XF::setLanguage($newLanguage);
234+
$templater->setLanguage($newLanguage);
235+
236+
try
237+
{
238+
return call_user_func_array($originalAction, func_get_args());
239+
}
240+
finally
241+
{
242+
if ($oldLanguage != null)
243+
{
244+
\XF::setLanguage($oldLanguage);
245+
$templater->setLanguage($oldTemplaterLanguage);
246+
}
247+
}
248+
};
190249
}
191-
finally
250+
if ($setStyle)
192251
{
193-
if ($setLanguage)
252+
$originalAction = $action;
253+
$action = function() use ($originalAction, $user)
194254
{
195-
\XF::setLanguage($oldLanguage);
196-
}
255+
$app = \XF::app();
256+
$templater = $app->templater();
257+
258+
$newStyle = $app->style($user->style_id);
259+
$oldStyle = $templater->getStyle();
260+
261+
$templater->setStyle($newStyle);
262+
263+
try
264+
{
265+
return call_user_func_array($originalAction, func_get_args());
266+
}
267+
finally
268+
{
269+
if ($oldStyle != null)
270+
{
271+
$templater->setStyle($oldStyle);
272+
}
273+
}
274+
};
197275
}
276+
277+
return \XF::asVisitor($user, $action);
198278
}
199279
}

upload/src/addons/SModders/TelegramCore/addon.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
"legacy_addon_id": "",
33
"title": "[Telegram] Core",
44
"description": "Provides the ability to log in via Telegram",
5-
"version_id": 2003070,
6-
"version_string": "2.0.3",
5+
"version_id": 2004070,
6+
"version_string": "2.0.4",
77
"dev": "SourceModders",
88
"dev_url": "https://board.kruzya.me",
99
"faq_url": "https://github.com/XF-Telegram/Core/wiki/FAQ",
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"exclude_files": [
3+
"composer.json",
4+
"composer.lock"
5+
],
6+
7+
"exec": [
8+
"composer install --no-interaction --working-dir=_build/upload/src/addons/{addon_id}/ --no-dev --no-suggest --optimize-autoloader --ignore-platform-reqs"
9+
]
10+
}

0 commit comments

Comments
 (0)