Код: Выделить всё
class PayedMessage extends \app\plugins\Plugin implements BootstrapInterface, HasSettings
{
const SETTINGS_MESSAGES_COST_PER_MESSAGE = 'messagePrice';
const SETTINGS_POSTS_COST_PER_POST = 'postPrice';
/**
* @param \yii\base\Application $app
*/
public function bootstrap($app)
{
if ($app instanceof ConsoleApplication) {
return;
}
if (Yii::$app->user->isGuest || Yii::$app->user->identity->isAdmin) {
return;
}
$this->setupMessages();
}
private function setupMessages()
{
Event::on(MessageForm::class, Message::EVENT_BEFORE_VALIDATE, function (ModelEvent $event) {
/** @var MessageForm $messageForm */
$messageForm = $event->sender;
$messagePrice = $this->getSetting(self::SETTINGS_MESSAGES_COST_PER_MESSAGE);
$userId = Yii::$app->user->id;
if (!Yii::$app->balanceManager->hasEnoughCredits($userId, $messagePrice)) {
$messageForm->addError('message',
Yii::t('app', 'youre out of credits: {upgradeLink}', [
'upgradeLink' => Html::a(Yii::t('app', 'get more credits'), ['/balance/services'])
])
);
$event->isValid = false;
} else if ($messagePrice > 0) {
Yii::$app->balanceManager->decrease(['user_id' => $userId], $messagePrice, [
'class' => MessageTransaction::class,
'toUserId' => $messageForm->contactId,
]);
}
});
Код: Выделить всё
public function activatePremium($userId)
{
$premiumPrice = $this->getPremiumPrice();
if (!$this->hasEnoughCredits($userId, $premiumPrice)) {
return false;
}
$userPremium = UserPremium::activatePremium($userId, $this->getPremiumDuration());
$this->decrease(['user_id' => $userId], $premiumPrice, [
'class' => PremiumTransaction::class,
'premiumAt' => $userPremium->created_at,
'premiumUntil' => $userPremium->premium_until,
]);
return true;
Код: Выделить всё
$userPremium = UserPremium::activatePremium($userId, $this->getPremiumDuration());
$this->decrease(['user_id' => $userId], $premiumPrice, [
'class' => PremiumTransaction::class,
'premiumAt' => $userPremium->created_at,
'premiumUntil' => $userPremium->premium_until,
]);
return true;
}