Blame view

common/behaviors/SaveImgBehavior.php 2.59 KB
4ca21c3e   Alexey Boroda   first commit
1
  <?php
b8a993f6   Alexey Boroda   -Image behavior a...
2
3
4
5
6
7
8
9
10
11
12
13
14
      
      namespace common\behaviors;
      
      use yii\base\Behavior;
      use yii\base\ModelEvent;
      use yii\db\ActiveRecord;
      use yii\web\UploadedFile;
      /**
       * Class Save Image Behavior
       * @property ActiveRecord $owner
       * @package common\behaviors
       */
      class SaveImgBehavior extends Behavior
4ca21c3e   Alexey Boroda   first commit
15
      {
b8a993f6   Alexey Boroda   -Image behavior a...
16
17
18
19
20
21
22
23
24
25
          
          public $fields;
          public $is_language = false;
          
          public function events()
          {
              return [
                  ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeSave',
                  ActiveRecord::EVENT_BEFORE_INSERT => 'beforeSave',
              ];
4ca21c3e   Alexey Boroda   first commit
26
          }
b8a993f6   Alexey Boroda   -Image behavior a...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
      
          /**
           * @param ModelEvent $event
           */
          public function beforeSave($event) {
              foreach($this->fields as $field){
                  $field_name = $field['name'];
                  $name = $field_name;
                  if($this->is_language) {
                      $name = '['.$this->owner->language_id.']'.$name;
                  }
      
                  $image = UploadedFile::getInstance($this->owner, $name);
                  
                  if(empty($image) && $event->name == ActiveRecord::EVENT_BEFORE_UPDATE) {
                      $this->owner->$field_name = $this->owner->getOldAttribute($field_name);
                  } elseif(!empty($image)) {
                      $imgDir = \Yii::getAlias('@storage/'.$field['directory'].'/');
              
                      if(!is_dir($imgDir)) {
                          mkdir($imgDir, 0755, true);
                      }
                      
                      $baseName = $image->baseName;
                      
                      $iteration = 0;
                      $file_name = $imgDir.$baseName.'.'.$image->extension;
                      while(file_exists($file_name)) {
                          $baseName = $image->baseName.'_'.++$iteration;
                          $file_name = $imgDir.$baseName.'.'.$image->extension;
                      }
                      unset($iteration);
                      
                      $this->owner->$field_name = $baseName.'.'.$image->extension;
                      
                      $image->saveAs($file_name);
                  }
4ca21c3e   Alexey Boroda   first commit
64
              }
4ca21c3e   Alexey Boroda   first commit
65
          }
b8a993f6   Alexey Boroda   -Image behavior a...
66
67
68
                  
          public function getImageFile($image = 'image') {
              return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image;
4ca21c3e   Alexey Boroda   first commit
69
          }
b8a993f6   Alexey Boroda   -Image behavior a...
70
71
72
          
          public function getImageUrl($image = 'image') {
              return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image;
4ca21c3e   Alexey Boroda   first commit
73
          }
b8a993f6   Alexey Boroda   -Image behavior a...
74
75
76
77
          
          
          
      }