1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-21 22:47:43 +00:00
Files
matomo/plugins/LanguagesManager/LanguagesHelper.php
Michal Kleiner 7cc8a70b3d Add mechanism to send inactive users notification (#23425)
* Add new setting for enabling inactive user notifications (#23393)
* Migrate 'last seen' from options table to users table (#23388)
* Create scheduled task to send inactive users security notification (#23403)
* Simplify enrich user and remove surplus methods
* Create a language helper to run code using given user's preferred language
* Update UI test screenshots

---------

Co-authored-by: Nathan Gavin <nathangavin987@gmail.com>
2025-08-05 13:54:58 +12:00

79 خطوط
2.3 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\LanguagesManager;
use Piwik\Container\StaticContainer;
use Piwik\Plugins\UsersManager\Model as UserModel;
use Piwik\Plugins\LanguagesManager\Model as LangModel;
use Piwik\Translation\Translator;
/**
* Helper class allowing to run a callback function with the given user's preferred language
* temporarily set for the translator.
*
* This is handy for cases such as sending a reminder or notification email from the scheduled task
* where the system is not running under the given user. Previously set language is restored after the callback is run.
*
* Usage:
*
* LanguageHelper::doWithUserLanguage('someUsernameOrEmail', function() { ... code to run ... });
*/
class LanguagesHelper
{
private static function getUserFromEmailOrLogin(string $emailOrLogin): ?array
{
$userModel = new UserModel();
$user = null;
if ($userModel->userExists($emailOrLogin)) {
$user = $userModel->getUser($emailOrLogin);
} elseif ($userModel->userEmailExists($emailOrLogin)) {
$user = $userModel->getUserByEmail($emailOrLogin);
}
return $user;
}
public static function doWithUserLanguage(string $emailOrLogin, callable $callback)
{
$user = self::getUserFromEmailOrLogin($emailOrLogin);
if (!$user) {
return $callback();
}
$langModel = new LangModel();
$userLanguage = $langModel->getLanguageForUser($user['login']);
$translator = StaticContainer::get(Translator::class);
$backupLanguage = $translator->getCurrentLanguage();
if (empty($backupLanguage)) {
// if no language was set yet, ensure to restore the default language
$backupLanguage = $translator->getDefaultLanguage();
}
if (!empty($userLanguage)) {
// temporarily overwrite the language to perform the callback action
$translator->setCurrentLanguage($userLanguage);
}
try {
$result = $callback();
} catch (\Throwable $ex) {
throw $ex;
} finally {
$translator->setCurrentLanguage($backupLanguage);
}
return $result;
}
}