Hoa central
Path.php
Go to the documentation of this file.
1 <?php
2 
38 
47 class Path implements Autocompleter
48 {
54  const PWD = null;
55 
61  protected $_root = null;
62 
68  protected $_iteratorFactory = null;
69 
70 
71 
81  public function __construct(
82  $root = null,
83  \Closure $iteratorFactory = null
84  ) {
85  if (null === $root) {
86  $root = static::PWD;
87  }
88 
89  $this->setRoot($root);
90 
91  if (null !== $iteratorFactory) {
92  $this->setIteratorFactory($iteratorFactory);
93  }
94 
95  return;
96  }
97 
105  public function complete(&$prefix)
106  {
107  $root = $this->getRoot();
108 
109  if (static::PWD === $root) {
110  $root = getcwd();
111  }
112 
113  $path = $root . DS . $prefix;
114 
115  if (!is_dir($path)) {
116  $path = dirname($path) . DS;
117  $prefix = basename($prefix);
118  } else {
119  $prefix = null;
120  }
121 
122  $iteratorFactory = $this->getIteratorFactory() ?:
123  static::getDefaultIteratorFactory();
124 
125  try {
126  $iterator = $iteratorFactory($path);
127  $out = [];
128  $length = mb_strlen($prefix);
129 
130  foreach ($iterator as $fileinfo) {
131  $filename = $fileinfo->getFilename();
132 
133  if (null === $prefix ||
134  (mb_substr($filename, 0, $length) === $prefix)) {
135  if ($fileinfo->isDir()) {
136  $out[] = $filename . '/';
137  } else {
138  $out[] = $filename;
139  }
140  }
141  }
142  } catch (\Exception $e) {
143  return null;
144  }
145 
146  $count = count($out);
147 
148  if (1 === $count) {
149  return $out[0];
150  }
151 
152  if (0 === $count) {
153  return null;
154  }
155 
156  return $out;
157  }
158 
164  public function getWordDefinition()
165  {
166  return '/?[\w\d\\_\-\.]+(/[\w\d\\_\-\.]*)*';
167  }
168 
175  public function setRoot($root)
176  {
177  $old = $this->_root;
178  $this->_root = $root;
179 
180  return $old;
181  }
182 
188  public function getRoot()
189  {
190  return $this->_root;
191  }
192 
200  public function setIteratorFactory(\Closure $iteratorFactory)
201  {
203  $this->_iteratorFactory = $iteratorFactory;
204 
205  return $old;
206  }
207 
213  public function getIteratorFactory()
214  {
216  }
217 
223  public static function getDefaultIteratorFactory()
224  {
225  return function ($path) {
226  return new \DirectoryIterator($path);
227  };
228  }
229 }
__construct($root=null,\Closure $iteratorFactory=null)
Definition: Path.php:81
setIteratorFactory(\Closure $iteratorFactory)
Definition: Path.php:200