Blame view

common/components/parsers/Parser.php 3.43 KB
ad2e91f7   Mihail   move multyparser ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  <?php
  /**
   * Created by PhpStorm.
   * User: Cibermag
   * Date: 04.09.2015
   * Time: 18:25
   */
  
  namespace common\components\parsers;
  
  //@todo - заменить read на parse
  //@todo - xml - убрать из названий функций xml и array - это и так понятно
  
  
  use common\components\CustomVarDamp;
  
  abstract class Parser
  {
      public $converter_conf  = [];
      protected $converter = NULL;
  
      /** @var file-resource читаемого файла */
      public $file;
      /** @var string путь читаемого файла */
      public $file_path;
  
      /**
       * @var array - результирующий массив с отпарсенными значениями
       */
      protected $result = [];
  
      /** @var array - массив с заголовком,
       * */
      public $keys = NULL;
      /** @var bool
      имеет ли файл заголовок который будет установлен ключами возвращемого массива*/
      public $has_header_row = false;
      /*
       *если есть ключи, то колонки с пустыми значениями будут пропускаться (из ряда такие значения будут удаляться),
       * например если в файле вторая колонка пустая то она будет удалена
       * если есть $has_header_row - то первая значимая строка становится ключами, но пустые колонки не удаляются из ряда
       * например если в файле вторая колонка пустая то ей будет назначен соответсвующий ключ (второй) из первой строки
       * все описаное выше реализуется в дочернем семействе классов TableParser в методе filterRow()
       * для xml происходит просто сопоставление переданных ключей с прочитанными
      */
  
  
  
  
      public function setup()
      {
          $this->setupConverter();
      }
  
      protected function setupConverter()
      {
          if ( $this->has_header_row || $this->keys !== NULL ) {
              // если у файла есть заголовок, то в результате имеем ассоциативный массив
              $this->converter_conf['hasKey'] = 1;
          }
  
          if ( $this->converter_conf ) {
              $converter = ObjectCreator::build( $this->converter_conf );
              if ( $converter instanceof ConverterInterface ) {
  
                  $this->converter = $converter;
  
              }
          }
  
  
      }
  
      public abstract function read();
  
      /**
       * @param $arr
       * @return mixed
       * преобразовует значения прочитанного массива в нужные типы, согласно конфигурации конвертера
       */
      protected function convert( $arr )
      {
  
          if ($this->converter !== NULL) {
  
              $arr = $this->converter->convertByConfiguration( $arr, $this->converter_conf );
  
          }
  
  
          return $arr;
  
      }
  
4b12e92e   Mihail   work with margins...
95
96
      public final static function supportedExtension()
      {
5c35d76d   Mihail   add xls parser
97
          return ['csv','xml','xlsx','txt','xls'];
4b12e92e   Mihail   work with margins...
98
99
      }
  
ad2e91f7   Mihail   move multyparser ...
100
101
102
103
104
105
106
107
108
109
110
111
      protected function cleanUp(  )
      {
  
          unset( $this->file );
          unset( $this->converter );
          unset( $this->converter_conf );
  
  
      }
  
  
  }