forked from rebillar/site-accueil-insa
193 lines
No EOL
5.2 KiB
PHP
193 lines
No EOL
5.2 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\MobileMessaging;
|
|
|
|
use Piwik\Option;
|
|
use Piwik\Piwik;
|
|
|
|
class Model
|
|
{
|
|
/**
|
|
* send a SMS
|
|
*
|
|
* @param string $content
|
|
* @param string $phoneNumber
|
|
* @param string $from
|
|
* @return bool true
|
|
*/
|
|
public function sendSMS($content, $phoneNumber, $from)
|
|
{
|
|
$credential = $this->getSMSAPICredential();
|
|
$SMSProvider = SMSProvider::factory($credential[MobileMessaging::PROVIDER_OPTION]);
|
|
$SMSProvider->sendSMS(
|
|
$credential[MobileMessaging::API_KEY_OPTION],
|
|
$content,
|
|
$phoneNumber,
|
|
$from
|
|
);
|
|
|
|
$this->increaseCount(Piwik::getCurrentUserLogin(), MobileMessaging::SMS_SENT_COUNT_OPTION, $phoneNumber);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* get activated phone number list
|
|
*
|
|
* @param string $login
|
|
* @return array $phoneNumber
|
|
*/
|
|
public function getActivatedPhoneNumbers($login)
|
|
{
|
|
$phoneNumbers = $this->retrievePhoneNumbers($login);
|
|
|
|
$activatedPhoneNumbers = array();
|
|
foreach ($phoneNumbers as $phoneNumber => $verificationCode) {
|
|
if ($this->isActivated($verificationCode)) {
|
|
$activatedPhoneNumbers[] = $phoneNumber;
|
|
}
|
|
}
|
|
|
|
return $activatedPhoneNumbers;
|
|
}
|
|
|
|
public function retrievePhoneNumbers($login)
|
|
{
|
|
$settings = $this->getUserSettings($login);
|
|
|
|
$phoneNumbers = array();
|
|
if (isset($settings[MobileMessaging::PHONE_NUMBERS_OPTION])) {
|
|
$phoneNumbers = $settings[MobileMessaging::PHONE_NUMBERS_OPTION];
|
|
}
|
|
|
|
return $phoneNumbers;
|
|
}
|
|
|
|
public function savePhoneNumbers($login, $phoneNumbers)
|
|
{
|
|
$settings = $this->getUserSettings($login);
|
|
|
|
$settings[MobileMessaging::PHONE_NUMBERS_OPTION] = $phoneNumbers;
|
|
|
|
$this->setUserSettings($login, $settings);
|
|
}
|
|
|
|
public function increaseCount($login, $option, $phoneNumber)
|
|
{
|
|
$settings = $this->getUserSettings($login);
|
|
|
|
$counts = array();
|
|
if (isset($settings[$option])) {
|
|
$counts = $settings[$option];
|
|
}
|
|
|
|
$countToUpdate = 0;
|
|
if (isset($counts[$phoneNumber])) {
|
|
$countToUpdate = $counts[$phoneNumber];
|
|
}
|
|
|
|
$counts[$phoneNumber] = $countToUpdate + 1;
|
|
|
|
$settings[$option] = $counts;
|
|
|
|
$this->setUserSettings($login, $settings);
|
|
}
|
|
|
|
public function getSMSAPICredential()
|
|
{
|
|
$settings = $this->getCredentialManagerSettings();
|
|
|
|
$credentials = isset($settings[MobileMessaging::API_KEY_OPTION]) ? $settings[MobileMessaging::API_KEY_OPTION] : null;
|
|
|
|
// fallback for older values, where api key has been stored as string value
|
|
if (!empty($credentials) && !is_array($credentials)) {
|
|
$credentials = array(
|
|
'apiKey' => $credentials
|
|
);
|
|
}
|
|
|
|
return array(
|
|
MobileMessaging::PROVIDER_OPTION =>
|
|
isset($settings[MobileMessaging::PROVIDER_OPTION]) ? $settings[MobileMessaging::PROVIDER_OPTION] : null,
|
|
MobileMessaging::API_KEY_OPTION =>
|
|
$credentials,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* get phone number list
|
|
*
|
|
* @param string $login
|
|
* @return array $phoneNumber => $isValidated
|
|
*/
|
|
public function getPhoneNumbers($login)
|
|
{
|
|
$rawPhoneNumbers = $this->retrievePhoneNumbers($login);
|
|
|
|
$phoneNumbers = array();
|
|
foreach ($rawPhoneNumbers as $phoneNumber => $verificationCode) {
|
|
$phoneNumbers[$phoneNumber] = $this->isActivated($verificationCode);
|
|
}
|
|
|
|
return $phoneNumbers;
|
|
}
|
|
|
|
public function setCredentialManagerSettings($settings)
|
|
{
|
|
$this->setUserSettings($this->getCredentialManagerLogin(), $settings);
|
|
}
|
|
|
|
public function getCredentialManagerSettings()
|
|
{
|
|
return $this->getUserSettings($this->getCredentialManagerLogin());
|
|
}
|
|
|
|
public function getDelegatedManagement()
|
|
{
|
|
$option = Option::get(MobileMessaging::DELEGATED_MANAGEMENT_OPTION);
|
|
return $option === 'true';
|
|
}
|
|
|
|
public function setDelegatedManagement($delegatedManagement)
|
|
{
|
|
Option::set(MobileMessaging::DELEGATED_MANAGEMENT_OPTION, $delegatedManagement);
|
|
}
|
|
|
|
private function isActivated($verificationCode)
|
|
{
|
|
return $verificationCode === null;
|
|
}
|
|
|
|
private function setUserSettings($login, $settings)
|
|
{
|
|
Option::set(
|
|
$login . MobileMessaging::USER_SETTINGS_POSTFIX_OPTION,
|
|
json_encode($settings)
|
|
);
|
|
}
|
|
|
|
private function getCredentialManagerLogin()
|
|
{
|
|
return $this->getDelegatedManagement() ? Piwik::getCurrentUserLogin() : '';
|
|
}
|
|
|
|
private function getUserSettings($user)
|
|
{
|
|
$optionIndex = $user . MobileMessaging::USER_SETTINGS_POSTFIX_OPTION;
|
|
$userSettings = Option::get($optionIndex);
|
|
|
|
if (empty($userSettings)) {
|
|
$userSettings = array();
|
|
} else {
|
|
$userSettings = json_decode($userSettings, true);
|
|
}
|
|
|
|
return $userSettings;
|
|
}
|
|
} |