Blame view

common/behaviors/SaveImgBehavior.php 3.08 KB
36d1807a   Yarik   Big commit.
1
  <?php
d55d2fe0   Yarik   Multilanguage
2
3
4
5
6
7
8
      
      namespace common\behaviors;
      
      use yii\base\Behavior;
      use yii\base\ModelEvent;
      use yii\db\ActiveRecord;
      use yii\web\UploadedFile;
af036678   Yarik   Image behaviors
9
      
d55d2fe0   Yarik   Multilanguage
10
11
12
13
14
15
      /**
       * Class Save Image Behavior
       * @property ActiveRecord $owner
       * @package common\behaviors
       */
      class SaveImgBehavior extends Behavior
36d1807a   Yarik   Big commit.
16
      {
d55d2fe0   Yarik   Multilanguage
17
18
          
          public $fields;
af036678   Yarik   Image behaviors
19
          
8af13427   Yarik   For leha commit.
20
          public $isLanguage = false;
d55d2fe0   Yarik   Multilanguage
21
22
23
24
25
26
27
          
          public function events()
          {
              return [
                  ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeSave',
                  ActiveRecord::EVENT_BEFORE_INSERT => 'beforeSave',
              ];
36d1807a   Yarik   Big commit.
28
          }
af036678   Yarik   Image behaviors
29
          
d55d2fe0   Yarik   Multilanguage
30
31
32
          /**
           * @param ModelEvent $event
           */
af036678   Yarik   Image behaviors
33
34
35
36
          public function beforeSave($event)
          {
              foreach($this->fields as $field) {
                  $field_name = $field[ 'name' ];
d55d2fe0   Yarik   Multilanguage
37
                  $name = $field_name;
8af13427   Yarik   For leha commit.
38
                  if($this->isLanguage) {
af036678   Yarik   Image behaviors
39
                      $name = '[' . $this->owner->language_id . ']' . $name;
d55d2fe0   Yarik   Multilanguage
40
                  }
af036678   Yarik   Image behaviors
41
                  
d55d2fe0   Yarik   Multilanguage
42
43
                  $image = UploadedFile::getInstance($this->owner, $name);
                  
af036678   Yarik   Image behaviors
44
                  if(empty( $image ) && $event->name == ActiveRecord::EVENT_BEFORE_UPDATE) {
d55d2fe0   Yarik   Multilanguage
45
                      $this->owner->$field_name = $this->owner->getOldAttribute($field_name);
af036678   Yarik   Image behaviors
46
47
48
                  } elseif(!empty( $image )) {
                      $imgDir = \Yii::getAlias('@storage/' . $field[ 'directory' ] . '/');
                      
d55d2fe0   Yarik   Multilanguage
49
50
51
52
53
54
55
                      if(!is_dir($imgDir)) {
                          mkdir($imgDir, 0755, true);
                      }
                      
                      $baseName = $image->baseName;
                      
                      $iteration = 0;
af036678   Yarik   Image behaviors
56
                      $file_name = $imgDir . $baseName . '.' . $image->extension;
d55d2fe0   Yarik   Multilanguage
57
                      while(file_exists($file_name)) {
af036678   Yarik   Image behaviors
58
59
                          $baseName = $image->baseName . '_' . ++$iteration;
                          $file_name = $imgDir . $baseName . '.' . $image->extension;
d55d2fe0   Yarik   Multilanguage
60
                      }
af036678   Yarik   Image behaviors
61
                      unset( $iteration );
d55d2fe0   Yarik   Multilanguage
62
                      
af036678   Yarik   Image behaviors
63
                      $this->owner->$field_name = $baseName . '.' . $image->extension;
d55d2fe0   Yarik   Multilanguage
64
65
66
                      
                      $image->saveAs($file_name);
                  }
36d1807a   Yarik   Big commit.
67
              }
36d1807a   Yarik   Big commit.
68
          }
d55d2fe0   Yarik   Multilanguage
69
          
af036678   Yarik   Image behaviors
70
71
72
73
74
75
76
77
78
79
80
          /**
           * @param int $field
           *
           * @return null|string
           */
          public function getImageFile($field = 0)
          {
              $fieldset = $this->fields[ $field ];
              $name = $fieldset[ 'name' ];
              $directory = $fieldset[ 'directory' ];
              return empty( $this->owner->$name ) ? NULL : '/storage/' . $directory . '/' . $this->owner->$name;
36d1807a   Yarik   Big commit.
81
          }
d55d2fe0   Yarik   Multilanguage
82
          
af036678   Yarik   Image behaviors
83
84
85
86
87
88
89
90
91
92
93
94
          /**
           * @param int $field
           *
           * @return null|string
           */
          public function getImageUrl($field = 0)
          {
              $fieldset = $this->fields[ $field ];
              $name = $fieldset[ 'name' ];
              $directory = $fieldset[ 'directory' ];
              return empty( $this->owner->$name ) ? NULL : '/storage/' . $directory . '/' . $this->owner->$name;
          }
d55d2fe0   Yarik   Multilanguage
95
      }