ReactionButtons.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace app\models;
  3. use Yii;
  4. /**
  5. * This is the model class for table "reaction_button".
  6. *
  7. * @property int $id
  8. * @property string $counter Счётчики json
  9. * @property string $type Метка для разных разделов
  10. */
  11. class ReactionButtons extends \yii\db\ActiveRecord
  12. {
  13. private $cache;
  14. const types = ['news', 'page'];
  15. public function init()
  16. {
  17. $this->cache = isset(Yii::$app->memcache)?Yii::$app->memcache:Yii::$app->cache;
  18. $this->counter = json_encode([0,0,0,0,0,0]);
  19. }
  20. /**
  21. * {@inheritdoc}
  22. */
  23. public static function tableName()
  24. {
  25. return 'reaction_button';
  26. }
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public function rules()
  31. {
  32. return [
  33. [['id', 'counter', 'type'], 'required'],
  34. [['id'], 'integer'],
  35. [['counter'], 'string'],
  36. [['type'], 'string', 'max' => 32],
  37. [['id'], 'unique'],
  38. ];
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function attributeLabels()
  44. {
  45. return [
  46. 'id' => 'ID',
  47. 'counter' => 'Счётчики json',
  48. 'type' => 'Метка для разных разделов',
  49. ];
  50. }
  51. /**
  52. * голосовал ли этот клиент
  53. * {@inheritdoc}
  54. */
  55. public function testq($id, $type)
  56. {
  57. $key = "rb_$id"."_$type";
  58. $ua = \Yii::$app->request->getUserAgent();
  59. $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP();
  60. $hash = md5( $ua.$uip );
  61. // $this->cache->delete($hash);
  62. // $this->cache->delete($key);
  63. $data = $this->cache->get($hash) ;
  64. if( $data == $key ){ // часто кликает один пользователь включаем троттлинг
  65. $this->cache->set($hash, $key, 60*10) ;
  66. return true;
  67. }
  68. $data = $this->cache->get($key) ;
  69. if( $data === false ) return false;
  70. if( $data == $hash) return true; // повторно голосует
  71. return false;
  72. }
  73. /**
  74. * {@inheritdoc}
  75. */
  76. public function addlog($id, $type)
  77. {
  78. $key = "rb_$id"."_$type";
  79. $ua = \Yii::$app->request->getUserAgent();
  80. $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP();
  81. $hash = md5( $ua.$uip );
  82. $this->cache->set($key, $hash, 60*60) ;
  83. $this->cache->set($hash, $key, 60) ;
  84. }
  85. public function getcounter()
  86. {
  87. return json_decode($this->counter, true);
  88. }
  89. }