%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/reportcontent/models/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/reportcontent/models/ReportContent.php |
<?php
namespace humhub\modules\reportcontent\models;
use humhub\components\behaviors\PolymorphicRelation;
use humhub\modules\content\components\ContentAddonActiveRecord;
use humhub\modules\content\permissions\ManageContent;
use humhub\modules\reportcontent\notifications\NewReportAdmin;
use humhub\modules\user\models\Group;
use Yii;
use humhub\modules\space\models\Space;
use humhub\modules\user\models\User;
use humhub\modules\content\components\ContentActiveRecord;
use humhub\modules\content\models\Content;
/**
* This is the model class for table "report_content".
*
* The followings are the available columns in table 'report_content':
* @property integer $id
* @property integer $post_id
* @property integer $reason
* @property string $created_at
* @property integer $created_by
* @property string $updated_at
* @property integer $updated_by
* @property boolean $system_admin_only
*
* @package humhub.modules.reportcontent.models
*/
class ReportContent extends ContentAddonActiveRecord
{
const REASON_NOT_BELONG = 1;
const REASON_OFFENSIVE = 2;
const REASON_SPAM = 3;
/**
* @inheritdoc
*/
public function behaviors()
{
return [
[
'class' => PolymorphicRelation::className(),
'mustBeInstanceOf' => [ContentActiveRecord::className()],
]
];
}
/**
*
* @return string the associated database table name
*/
public static function tableName()
{
return 'report_content';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
return array(
[['object_id', 'reason'], 'required'],
[['object_id', 'created_by', 'updated_by'], 'integer',],
['created_at', 'string', 'max' => 45],
[['updated_at'], 'safe']
);
}
/**
* Sends a notification to eihter space admins or system admins after the creation of a report.
*/
public function afterSave($insert, $changedAttributes)
{
if ($insert) {
if ($this->content->contentContainer instanceof Space && !$this->content->contentContainer->isAdmin($this->content->created_by)) {
$query = User::find()
->leftJoin('space_membership', 'space_membership.user_id=user.id AND space_membership.space_id=:spaceId AND space_membership.group_id=:groupId', [':spaceId' => $this->content->contentContainer->id, ':groupId' => 'admin'])
->where(['IS NOT', 'space_membership.space_id', new \yii\db\Expression('NULL')]);
} else {
$query = Group::getAdminGroup()->getUsers();
}
$notification = new NewReportAdmin;
$notification->source = $this;
$notification->originator = Yii::$app->user->getIdentity();
$notification->sendBulk($query);
}
return parent::afterSave($insert, $changedAttributes);
}
public static function getReason($reason)
{
switch ($reason) {
case ReportContent::REASON_NOT_BELONG:
return Yii::t('ReportcontentModule.models_ReportContent', "Doesn't belong to space");
case ReportContent::REASON_OFFENSIVE:
return Yii::t('ReportcontentModule.models_ReportContent', "Offensive");
case ReportContent::REASON_SPAM:
return Yii::t('ReportcontentModule.models_ReportContent', "Spam");
}
}
public static function canReportPost(ContentActiveRecord $post, $userId = null)
{
if (Yii::$app->user->isGuest) {
return false;
}
$user = ($userId != null) ? User::findOne(['id' => $userId]) : Yii::$app->user->getIdentity();
if ($user == null || $user->isSystemAdmin()) {
return false;
}
// Can't report own content
if ($post->content->created_by == $user->id) {
return false;
}
// Space admins can't report since they can simply delete content
if ($post->content->container instanceof Space && $post->content->getContainer()->isAdmin($user->id)) {
return false;
}
// Check if post exists
if (ReportContent::findOne(['object_model' => $post->className(), 'object_id' => $post->id, 'created_by' => $user->id]) !== null) {
return false;
}
// Don't report system admin content
if (User::findOne(['id' => $post->content->created_by])->isSystemAdmin()) {
return false;
}
return true;
}
public function canDelete($userId = null)
{
if (Yii::$app->user->isGuest) {
return false;
}
$user = ($userId == null) ? Yii::$app->user->getIdentity() : User::findOne(['id' => $userId]);
if ($user->isSystemAdmin()) {
return true;
}
if(version_compare(Yii::$app->version, '1.0', 'gt')
&& $this->content->getContainer()->permissionManager->can(new ManageContent())) {
return true;
}
if ($this->getSource()->content->container instanceof Space && $this->getSource()->content->container->isAdmin($user->id)) {
return true;
}
return false;
}
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'created_by']);
}
public function getContent()
{
return $this->hasOne(Content::className(), ['object_id' => 'object_id', 'object_model' => 'object_model']);
}
}
?>