Blame view

vendor/yiisoft/multiparser/ParserHandler.php 2.86 KB
036717a1   Mihail   add error excepti...
1
2
3
4
  <?php
  
  namespace yii\multiparser;
  
6215a30d   Mihail   add converter int...
5
  use common\components\CustomVarDamp;
036717a1   Mihail   add error excepti...
6
7
8
  
  class ParserHandler
  {
6215a30d   Mihail   add converter int...
9
10
11
      //@todo - добавить комменты на анг язе (ошибки выкидывать тоже на англ яз.)
      //@todo - сделать универсальную обработку ошибок
      //@todo - возможно отказаться от YiiParserHandler
036717a1   Mihail   add error excepti...
12
13
14
15
16
      const DEFAULT_MODE = 'web';
      /** @var string */
      protected $filePath;
  
      /** @var string */
6215a30d   Mihail   add converter int...
17
18
19
      protected $configuration = [];
      /** @var string */
      protected $custom_configuration = [];
036717a1   Mihail   add error excepti...
20
21
22
23
24
25
26
  
      /** @var instance of SplFileObject */
      protected $fileObject;
  
      /** @var string - extension of file $filePath */
      protected $extension;
  
6215a30d   Mihail   add converter int...
27
      /** @var string - */
036717a1   Mihail   add error excepti...
28
29
      protected $mode;
  
6215a30d   Mihail   add converter int...
30
      /** @var string - */
036717a1   Mihail   add error excepti...
31
32
33
34
35
      protected $options;
  
      /**
       * @param string first line in file for parsing
       */
6215a30d   Mihail   add converter int...
36
      public function setup($filePath, $options = [])
036717a1   Mihail   add error excepti...
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
      {
          $this->filePath = $filePath;
          if (isset($options['mode'])) {
  
              $this->mode = $options['mode'];
              unset($options['mode']);
  
          } else {
  
              $this->mode = self::DEFAULT_MODE;
  
          }
  
          $this->options = $options;
  
6215a30d   Mihail   add converter int...
52
          $this->fileObject = new \SplFileObject($this->filePath, 'r');
036717a1   Mihail   add error excepti...
53
54
55
56
  
          $options['file'] = $this->fileObject;
          $this->extension = $this->fileObject->getExtension();
  
6215a30d   Mihail   add converter int...
57
58
          $this->custom_configuration = $this->getCustomConfiguration($this->extension, $this->mode);
          $this->custom_configuration = array_merge_recursive($this->custom_configuration, $options);
036717a1   Mihail   add error excepti...
59
60
61
62
63
  
      }
  
      public function run()
      {
036717a1   Mihail   add error excepti...
64
          $result = [];
6215a30d   Mihail   add converter int...
65
66
67
          if (count($this->custom_configuration)) {
  
              $parser = $this->createObjectByConfiguration($this->custom_configuration);
036717a1   Mihail   add error excepti...
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  
              try {
  
                  $parser->setup();
                  $result = $parser->read();
  
              } catch (\ErrorException $e) {
  
                  echo $e->getMessage();
  
              }
  
          }
  
          return $result;
      }
6215a30d   Mihail   add converter int...
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
  
      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);
      }
036717a1   Mihail   add error excepti...
110
  }
6215a30d   Mihail   add converter int...