%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/mail/models/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/mail/models/Config.php |
<?php
namespace humhub\modules\mail\models;
use DateInterval;
use DateTime;
use humhub\modules\user\models\User;
use Yii;
use humhub\modules\mail\Module;
/**
* ConfigureForm defines the configurable fields.
*
* @package humhub\modules\mail\models
* @author Akopian Gaik
*/
class Config extends \yii\base\Model
{
public $showInTopNav;
public $newUserRestrictionEnabled = 0;
public $newUserSinceDays = 3;
public $newUserConversationRestriction = 2;
public $newUserMessageRestriction = 5;
public $userConversationRestriction = 15;
public $userMessageRestriction = null;
public function init()
{
parent::init();
$module = $this->getModule();
$this->showInTopNav = !$module->hideInTopNav();
$this->newUserRestrictionEnabled = (int) $module->settings->get('newUserRestrictionEnabled', $this->newUserRestrictionEnabled);
$this->newUserSinceDays = (int) $module->settings->get('newUserSinceDays', $this->newUserSinceDays);
$this->newUserConversationRestriction = (int) $module->settings->get('newUserConversationRestriction', $this->newUserConversationRestriction);
$this->newUserMessageRestriction = (int) $module->settings->get('newUserMessageRestriction', $this->newUserMessageRestriction);
$this->userConversationRestriction = (int) $module->settings->get('userConversationRestriction', $this->userConversationRestriction);
$this->userMessageRestriction = (int) $module->settings->get('userMessageRestriction', $this->userMessageRestriction);
}
/**
* @return Module
*/
public static function getModule()
{
return Yii::$app->getModule('mail');
}
/**
* Declares the validation rules.
*/
public function rules()
{
return [
[['showInTopNav', 'newUserRestrictionEnabled'], 'boolean'],
[['newUserConversationRestriction',
'newUserMessageRestriction',
'userConversationRestriction',
'userMessageRestriction'], 'integer', 'min' => 0],
['newUserSinceDays', 'integer', 'min' => 1]
];
}
/**
* Declares customized attribute labels.
* If not declared here, an attribute would have a label that is
* the same as its name with the first letter in upper case.
*/
public function attributeLabels()
{
return [
'showInTopNav' => Yii::t('MailModule.base', 'Show menu item in top Navigation'),
'newUserRestrictionEnabled' => Yii::t('MailModule.base', 'Seperate restrictions for new users'),
'newUserSinceDays' => Yii::t('MailModule.base', 'Until a user is member since (days)'),
'newUserConversationRestriction' => Yii::t('MailModule.base', 'Max number of new conversations allowed for a new user per day'),
'newUserMessageRestriction' => Yii::t('MailModule.base', 'Max number of messages allowed for a new user per day'),
'userConversationRestriction' => Yii::t('MailModule.base', 'Max number of new conversations allowed for a user per day'),
'userMessageRestriction' => Yii::t('MailModule.base', 'Max messages allowed per day')
];
}
public function save()
{
if(!$this->validate()) {
return false;
}
$module = static::getModule();
$module->settings->set('showInTopNav', $this->showInTopNav);
$module->settings->set('newUserRestrictionEnabled', $this->newUserRestrictionEnabled);
$module->settings->set('newUserSinceDays', $this->newUserSinceDays);
$module->settings->set('newUserConversationRestriction', $this->newUserConversationRestriction);
$module->settings->set('newUserMessageRestriction', $this->newUserMessageRestriction);
$module->settings->set('userConversationRestriction', $this->userConversationRestriction);
$module->settings->set('userMessageRestriction', $this->userMessageRestriction);
return true;
}
public function canCreateConversation(User $originator)
{
if($originator->isSystemAdmin()) {
return true;
}
$maxConversations = $this->isNewUser($originator)
? $this->newUserConversationRestriction
: $this->userConversationRestriction;
return empty($maxConversations) || $this->getConversationCount($originator) < $maxConversations;
}
public function isNewUser(User $originator)
{
if(empty($this->newUserRestrictionEnabled)) {
return false;
}
return (new DateTime($originator->created_at))->diff(new DateTime())->days < $this->newUserSinceDays;
}
public function getConversationCount($originator)
{
$module = static::getModule();
$lastTS = $module->settings->contentContainer($originator)->get('conversationCountTime');
if(!$lastTS) {
$module->settings->contentContainer($originator)->set('conversationCountTime', time());
$module->settings->contentContainer($originator)->set('conversationCount', 0);
return 0;
}
$lastDate = (new \DateTime())->setTimestamp($lastTS);
$today = (new \DateTime())->setTime(0,0,0);
if($today > $lastDate) {
$module->settings->contentContainer($originator)->set('conversationCountTime', time());
$module->settings->contentContainer($originator)->set('conversationCount', 0);
return 0;
}
return (integer) static::getModule()->settings->contentContainer($originator)->get('conversationCount', 0);
}
public function reset($originator)
{
$module = static::getModule();
$module->settings->contentContainer($originator)->set('conversationCountTime', null);
$module->settings->contentContainer($originator)->set('conversationCount', null);
}
public function incrementConversationCount($originator)
{
static::getModule()->settings->contentContainer($originator)->set('conversationCount', ($this->getConversationCount($originator) + 1));
}
}