Merge pull request #4689 from javiexin/ticket/15080

[ticket/15080] Save unneeded file loads for extension metadata
This commit is contained in:
Marc Alexander 2017-04-17 10:19:19 +02:00
commit 8303058ac6
No known key found for this signature in database
GPG key ID: 50E0D2423696F995

View file

@ -99,13 +99,11 @@ class metadata_manager
*/ */
public function get_metadata($element = 'all') public function get_metadata($element = 'all')
{ {
$this->set_metadata_file(); // Fetch and clean the metadata if not done yet
if ($this->metadata_file === '')
// Fetch the metadata {
$this->fetch_metadata(); $this->fetch_metadata_from_file();
}
// Clean the metadata
$this->clean_metadata_array();
switch ($element) switch ($element)
{ {
@ -128,11 +126,11 @@ class metadata_manager
} }
/** /**
* Sets the filepath of the metadata file * Sets the path of the metadata file, gets its contents and cleans loaded file
* *
* @throws \phpbb\extension\exception * @throws \phpbb\extension\exception
*/ */
private function set_metadata_file() private function fetch_metadata_from_file()
{ {
$ext_filepath = $this->extension_manager->get_extension_path($this->ext_name); $ext_filepath = $this->extension_manager->get_extension_path($this->ext_name);
$metadata_filepath = $this->phpbb_root_path . $ext_filepath . 'composer.json'; $metadata_filepath = $this->phpbb_root_path . $ext_filepath . 'composer.json';
@ -143,37 +141,19 @@ class metadata_manager
{ {
throw new \phpbb\extension\exception($this->user->lang('FILE_NOT_FOUND', $this->metadata_file)); throw new \phpbb\extension\exception($this->user->lang('FILE_NOT_FOUND', $this->metadata_file));
} }
}
/** if (!($file_contents = file_get_contents($this->metadata_file)))
* Gets the contents of the composer.json file
*
* @return bool True if success, throws an exception on failure
* @throws \phpbb\extension\exception
*/
private function fetch_metadata()
{
if (!file_exists($this->metadata_file))
{ {
throw new \phpbb\extension\exception($this->user->lang('FILE_NOT_FOUND', $this->metadata_file)); throw new \phpbb\extension\exception($this->user->lang('FILE_CONTENT_ERR', $this->metadata_file));
} }
else
if (($metadata = json_decode($file_contents, true)) === null)
{ {
if (!($file_contents = file_get_contents($this->metadata_file))) throw new \phpbb\extension\exception($this->user->lang('FILE_JSON_DECODE_ERR', $this->metadata_file));
{
throw new \phpbb\extension\exception($this->user->lang('FILE_CONTENT_ERR', $this->metadata_file));
}
if (($metadata = json_decode($file_contents, true)) === null)
{
throw new \phpbb\extension\exception($this->user->lang('FILE_JSON_DECODE_ERR', $this->metadata_file));
}
array_walk_recursive($metadata, array($this, 'sanitize_json'));
$this->metadata = $metadata;
return true;
} }
array_walk_recursive($metadata, array($this, 'sanitize_json'));
$this->metadata = $metadata;
} }
/** /**
@ -187,16 +167,6 @@ class metadata_manager
$value = htmlspecialchars($value); $value = htmlspecialchars($value);
} }
/**
* This array handles the cleaning of the array
*
* @return array Contains the cleaned metadata array
*/
private function clean_metadata_array()
{
return $this->metadata;
}
/** /**
* Validate fields * Validate fields
* *