123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace app\models\base;
- use Yii;
- use app\helpers\Transliterator;
- use app\helpers\Avatar;
- use yii\db\ActiveRecord;
- use yii\helpers\Url;
- use app\models\CommentsConf;
- /**
- * @property string $id
- * @property string $comment_pull_id
- * @property string $message
- * @property \app\models\News | null $post
- * @property string $publishedAt
- * @property string $author
- * @property string $parent_id
- * @property string $fakename
- * @property string $liked
- */
- class Comments extends ActiveRecord
- {
- public static $conf = null;
- public static $story_dir = 'images/avatar-images';
- public $islike = false;
- public $merr = false;
- public static function tableName()
- {
- return "{{%comments}}";
- }
- public function init()
- {
- parent::init();
- self::$conf = \Yii::$app->cache->getOrSet(CommentsConf::$keysCache, function () {
- return CommentsConf::find()->one();
- });
- }
- public function getPost()
- {
- $sql = $this->hasOne(\app\models\News::class,['id'=>'news_id'])->createCommand()->getRawSql();
- return $this->hasOne(\app\models\News::class,['id'=>'news_id']);
- }
- public function getPublishedAt($simle = false){
- if( $simle ) return date( "H:i:s d-m-Y", strtotime( $this->created_at ) );
- if($this->created_at<date("Y-m-d H:i:s",strtotime("-1 day"))){
- return date("d",strtotime($this->created_at))." ".mb_strtolower(Transliterator::month(date("n",strtotime($this->created_at))));
- } else {
- $diff = ceil((time() - strtotime($this->created_at))/60); //В минутах
- if($diff<=60){
- return Transliterator::plural($diff,['минуту','минуты', 'минут'],true,'только что','минуту')." назад";
- } else {
- $diff = (int)floor($diff/60);
- return Transliterator::plural($diff,['час','часа', 'часов'],true,'только что','час')." назад";
- }
- }
- }
- public function beforeSave($insert)
- {
- if( $insert ){
- $this->merr = \app\models\CommentsFilter::test($this);
- if( $this->merr ) $this->visible = 'N';
- }
- return true;
- }
- public function afterSave($insert, $changedAttributes) {
- parent::afterSave($insert, $changedAttributes);
- if( $insert ){
- $news = \Yii::$app->db->createCommand('SELECT title FROM news WHERE id='.$this->news_id)->queryOne();
- $ntitle = '';
- if( $news && isset( $news['title'] ) ) $ntitle = $news['title'];
- $stat = ($this->visible == 'Y')?'green':'red';
- $tstat = ($this->visible == 'Y')?'Показывается':'Спрятано';
- $msg = "Fakename: <b>".$this->fakename."</b><br><br>Сообщение: <br>".$this->message."<br><br>IP: ".$this->ip_address."<br> HTTP_USER_AGENT: ".$this->user_agent
- ."<br>[".$this->created_at."]<br><br>"
- ."Статус:<p style='color:$stat'>".$tstat."(".$this->visible.")</p><br>"
- ."<b>".$this->merr."</b><br>"
- .'<br>Новость: <a href="https://www.amic.ru/news/'.$this->news_id.'">'.$ntitle.'/</a><br><br><hr>'
- .'<a href="https://www.amic.ru/manager/comments/toggle?id='.$this->id.'&value=N">Cкрыть</a><br>'
- .'<a href="https://www.amic.ru/manager/comments/toggle?id='.$this->id.'&value=Y">Показать</a><br>';
- \Yii::$app->mailer->compose()
- ->setFrom(\Yii::$app->params['senderEmail'])
- ->setTo(\Yii::$app->params['moderatorEmail'])
- ->setSubject('Сообщение с сайта amic.ru')
- // ->setTextBody('Текст сообщения')
- ->setHtmlBody($msg)
- ->send();
- }
- }
- public function getHash()
- {
- return md5($this->user_agent.'_'.$this->ip_address);
- }
- public function getAvatar()
- {
- $hash = $this->getHash();
- $name = "avatar_{$hash}.png";
- if( !file_exists( Yii::getAlias('@webroot').'/'.static::$story_dir."/$name" ) ){
- file_put_contents( Yii::getAlias('@webroot').'/'.static::$story_dir."/$name", Avatar::get($hash, 48) );
- }
- return "/".static::$story_dir."/$name";
- }
- // Возможно будет лучше в кэше или БД
- public function isUserLike($cid)
- {
- $session = \Yii::$app->session;
- if ($session->has('likeed_'.$cid)){
- return true;
- }
- return false;
- }
- public function setUserLike($nid, $cid)
- {
- $session = \Yii::$app->session;
- $session->set('likeed_'.$cid, $nid);
- $r = $session->get('likeedn_'.$nid);
- if( $r && is_array($r) ){
- array_push($r, $cid);
- }else{
- $r = [$cid];
- }
- $session->set('likeedn_'.$nid, $r);
- }
- public function getUserLike($nid)
- {
- $session = \Yii::$app->session;
- return $session->get('likeedn_'.$nid);
- }
- public function getAuthor()
- {
- // здесь ещё если есть профиль добавить проверку
- if( trim( $this->fakename ) ){
- return $this->fakename;
- }
- return "Гость";
- }
- }
|