Blame view

lib/ParserHandler.php 2.87 KB
8e128526   Mihail   add xlsx parser
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  <?php
  
  namespace artweb\yii_multiparser;
  
  use common\components\CustomVarDamp;
  
  class ParserHandler
  {
      //@todo - добавить комменты на анг язе (ошибки выкидывать тоже на англ яз.)
      //@todo - сделать универсальную обработку ошибок
      //@todo - возможно отказаться от YiiParserHandler
      const DEFAULT_MODE = 'web';
      /** @var string */
      protected $filePath;
  
      /** @var string */
      protected $configuration = [];
      /** @var string */
      protected $custom_configuration = [];
  
      /** @var instance of SplFileObject */
      protected $fileObject;
  
      /** @var string - extension of file $filePath */
      protected $extension;
  
      /** @var string - */
      protected $mode;
  
      /** @var string - */
      protected $options;
  
      /**
       * @param string first line in file for parsing
       */
      public function setup($filePath, $options = [])
      {
          $this->filePath = $filePath;
          if (isset($options['mode'])) {
  
              $this->mode = $options['mode'];
              unset($options['mode']);
  
          } else {
  
              $this->mode = self::DEFAULT_MODE;
  
          }
  
          $this->options = $options;
  
          $this->fileObject = new \SplFileObject($this->filePath, 'r');
  
          $options['file'] = $this->fileObject;
          $this->extension = $this->fileObject->getExtension();
  
          $this->custom_configuration = $this->getCustomConfiguration($this->extension, $this->mode);
          $this->custom_configuration = array_merge_recursive($this->custom_configuration, $options);
  
      }
  
      public function run()
      {
          $result = [];
          if (count($this->custom_configuration)) {
  
              $parser = $this->createObjectByConfiguration($this->custom_configuration);
  
              try {
  
                  $parser->setup();
                  $result = $parser->read();
  
              } catch (\ErrorException $e) {
  
                  echo $e->getMessage();
  
              }
  
          }
  
          return $result;
      }
  
      public function getCustomConfiguration($extension, $parameter)
      {
          if (!count($this->configuration)) {
              $this->setConfiguration(require(__DIR__ . '/config.php'));
          }
  
          if (!isset($this->configuration[$extension])) {
              throw new \ErrorException("Parser do not maintain file with extension  {$extension}");
          }
          if (!isset($this->configuration[$extension][$parameter])) {
              throw new \ErrorException("Parser configurator do not have settings for {$parameter} parameter");
          }
  
          return $this->configuration[$extension][$parameter];
      }
  
      public function setConfiguration($configuration)
      {
          $this->configuration = $configuration;
      }
  
      protected function createObjectByConfiguration($configuration)
      {
          return ObjectCreator::build($configuration);
      }
  }