123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- namespace app\models;
- use Yii;
- /**
- * This is the model class for table "reaction_button".
- *
- * @property int $id
- * @property string $counter Счётчики json
- * @property string $type Метка для разных разделов
- */
- class ReactionButtons extends \yii\db\ActiveRecord
- {
- private $cache;
- const types = ['news', 'page'];
- public function init()
- {
- $this->cache = isset(Yii::$app->memcache)?Yii::$app->memcache:Yii::$app->cache;
- $this->counter = json_encode([0,0,0,0,0,0]);
- }
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'reaction_button';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['id', 'counter', 'type'], 'required'],
- [['id'], 'integer'],
- [['counter'], 'string'],
- [['type'], 'string', 'max' => 32],
- [['id'], 'unique'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'counter' => 'Счётчики json',
- 'type' => 'Метка для разных разделов',
- ];
- }
- /**
- * голосовал ли этот клиент
- * {@inheritdoc}
- */
- public function testq($id, $type)
- {
- $key = "rb_$id"."_$type";
- $ua = \Yii::$app->request->getUserAgent();
- $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP();
- $hash = md5( $ua.$uip );
- // $this->cache->delete($hash);
- // $this->cache->delete($key);
- $data = $this->cache->get($hash) ;
- if( $data == $key ){ // часто кликает один пользователь включаем троттлинг
- $this->cache->set($hash, $key, 60*10) ;
- return true;
- }
- $data = $this->cache->get($key) ;
- if( $data === false ) return false;
- if( $data == $hash) return true; // повторно голосует
- return false;
- }
- /**
- * {@inheritdoc}
- */
- public function addlog($id, $type)
- {
- $key = "rb_$id"."_$type";
- $ua = \Yii::$app->request->getUserAgent();
- $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP();
- $hash = md5( $ua.$uip );
- $this->cache->set($key, $hash, 60*60) ;
- $this->cache->set($hash, $key, 60) ;
- }
- public function getcounter()
- {
- return json_decode($this->counter, true);
- }
- }
|