Comments.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace app\models\base;
  3. use Yii;
  4. use app\helpers\Transliterator;
  5. use app\helpers\Avatar;
  6. use yii\db\ActiveRecord;
  7. use yii\helpers\Url;
  8. use app\models\CommentsConf;
  9. /**
  10. * @property string $id
  11. * @property string $comment_pull_id
  12. * @property string $message
  13. * @property \app\models\News | null $post
  14. * @property string $publishedAt
  15. * @property string $author
  16. * @property string $parent_id
  17. * @property string $fakename
  18. * @property string $liked
  19. */
  20. class Comments extends ActiveRecord
  21. {
  22. public static $conf = null;
  23. public static $story_dir = 'images/avatar-images';
  24. public $islike = false;
  25. public static function tableName()
  26. {
  27. return "{{%comments}}";
  28. }
  29. public function init()
  30. {
  31. parent::init();
  32. self::$conf = \Yii::$app->cache->getOrSet(CommentsConf::$keysCache, function () {
  33. return CommentsConf::find()->one();
  34. });
  35. }
  36. public function getPost()
  37. {
  38. $sql = $this->hasOne(\app\models\News::class,['id'=>'news_id'])->createCommand()->getRawSql();
  39. return $this->hasOne(\app\models\News::class,['id'=>'news_id']);
  40. }
  41. public function getPublishedAt($simle = false){
  42. if( $simle ) return date( "H:i:s d-m-Y", strtotime( $this->created_at ) );
  43. if($this->created_at<date("Y-m-d H:i:s",strtotime("-1 day"))){
  44. return date("d",strtotime($this->created_at))." ".mb_strtolower(Transliterator::month(date("n",strtotime($this->created_at))));
  45. } else {
  46. $diff = ceil((time() - strtotime($this->created_at))/60); //В минутах
  47. if($diff<=60){
  48. return Transliterator::plural($diff,['минуту','минуты', 'минут'],true,'только что','минуту')." назад";
  49. } else {
  50. $diff = (int)floor($diff/60);
  51. return Transliterator::plural($diff,['час','часа', 'часов'],true,'только что','час')." назад";
  52. }
  53. }
  54. }
  55. public function afterSave($insert, $changedAttributes) {
  56. parent::afterSave($insert, $changedAttributes);
  57. if( $insert ){
  58. $news = \Yii::$app->db->createCommand('SELECT title FROM news WHERE id='.$this->news_id)->queryOne();
  59. $ntitle = '';
  60. if( $news && isset( $news['title'] ) ) $ntitle = $news['title'];
  61. $stat = ($this->visible == 'Y')?'green':'red';
  62. $tstat = ($this->visible == 'Y')?'Показывается':'Спрятано';
  63. $msg = "Fakename: <b>".$this->fakename."</b><br><br>Сообщение: <br>".$this->message."<br><br>IP: ".$this->ip_address."<br> HTTP_USER_AGENT: ".$this->user_agent
  64. ."<br>[".$this->created_at."]<br><br>"
  65. ."Статус:<p style='color:$stat'>".$tstat."(".$this->visible.")</p><br>"
  66. .'<br>Новость: <a href="https://www.amic.ru/news/'.$this->news_id.'">'.$ntitle.'/</a><br><br><hr>'
  67. .'<a href="https://www.amic.ru/manager/comments/toggle?id='.$this->id.'&value=N">Cкрыть</a><br>'
  68. .'<a href="https://www.amic.ru/manager/comments/toggle?id='.$this->id.'&value=Y">Показать</a><br>';
  69. \Yii::$app->mailer->compose()
  70. ->setFrom(\Yii::$app->params['senderEmail'])
  71. ->setTo(\Yii::$app->params['moderatorEmail'])
  72. ->setSubject('Сообщение с сайта amic.ru')
  73. // ->setTextBody('Текст сообщения')
  74. ->setHtmlBody($msg)
  75. ->send();
  76. }
  77. }
  78. public function getHash()
  79. {
  80. return md5($this->user_agent.'_'.$this->ip_address);
  81. }
  82. public function getAvatar()
  83. {
  84. $hash = $this->getHash();
  85. $name = "avatar_{$hash}.png";
  86. if( !file_exists( Yii::getAlias('@webroot').'/'.static::$story_dir."/$name" ) ){
  87. file_put_contents( Yii::getAlias('@webroot').'/'.static::$story_dir."/$name", Avatar::get($hash, 48) );
  88. }
  89. return "/".static::$story_dir."/$name";
  90. }
  91. // Возможно будет лучше в кэше или БД
  92. public function isUserLike($cid)
  93. {
  94. $session = \Yii::$app->session;
  95. if ($session->has('likeed_'.$cid)){
  96. return true;
  97. }
  98. return false;
  99. }
  100. public function setUserLike($nid, $cid)
  101. {
  102. $session = \Yii::$app->session;
  103. $session->set('likeed_'.$cid, $nid);
  104. $r = $session->get('likeedn_'.$nid);
  105. if( $r && is_array($r) ){
  106. array_push($r, $cid);
  107. }else{
  108. $r = [$cid];
  109. }
  110. $session->set('likeedn_'.$nid, $r);
  111. }
  112. public function getUserLike($nid)
  113. {
  114. $session = \Yii::$app->session;
  115. return $session->get('likeedn_'.$nid);
  116. }
  117. public function getAuthor()
  118. {
  119. // здесь ещё если есть профиль добавить проверку
  120. if( trim( $this->fakename ) ){
  121. return $this->fakename;
  122. }
  123. return "Гость";
  124. }
  125. }