aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/extension/metadata_manager.php
diff options
context:
space:
mode:
authorjaviexin <javiexin@gmail.com>2017-02-12 14:39:26 +0100
committerjaviexin <javiexin@gmail.com>2017-02-12 14:39:26 +0100
commitd3a687df270268b4cbbe3ae0d10e8c4e2ae29235 (patch)
treeb3b4328db6ed1b00a4f847e50aec021ae4bcb4fc /phpBB/phpbb/extension/metadata_manager.php
parent5266821e1b5b271e69b00d717b9e9b1f77b65b9f (diff)
downloadforums-d3a687df270268b4cbbe3ae0d10e8c4e2ae29235.tar
forums-d3a687df270268b4cbbe3ae0d10e8c4e2ae29235.tar.gz
forums-d3a687df270268b4cbbe3ae0d10e8c4e2ae29235.tar.bz2
forums-d3a687df270268b4cbbe3ae0d10e8c4e2ae29235.tar.xz
forums-d3a687df270268b4cbbe3ae0d10e8c4e2ae29235.zip
[ticket/15087] Optimize creation of metadata objects by caching
Code for [ticket/15080] Save unneeded file loads for extension metadata for phpbb 3.2. PHPBB3-15087
Diffstat (limited to 'phpBB/phpbb/extension/metadata_manager.php')
-rw-r--r--phpBB/phpbb/extension/metadata_manager.php64
1 files changed, 16 insertions, 48 deletions
diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php
index 348b3c2cdf..089f9a7a32 100644
--- a/phpBB/phpbb/extension/metadata_manager.php
+++ b/phpBB/phpbb/extension/metadata_manager.php
@@ -81,13 +81,11 @@ class metadata_manager
*/
public function get_metadata($element = 'all')
{
- $this->set_metadata_file();
-
- // Fetch the metadata
- $this->fetch_metadata();
-
- // Clean the metadata
- $this->clean_metadata_array();
+ // Fetch and clean the metadata if not done yet
+ if ($this->metadata === array())
+ {
+ $this->fetch_metadata_from_file();
+ }
switch ($element)
{
@@ -121,52 +119,32 @@ 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
*/
- private function set_metadata_file()
+ private function fetch_metadata_from_file()
{
$ext_filepath = $this->extension_manager->get_extension_path($this->ext_name);
- $metadata_filepath = $this->phpbb_root_path . $ext_filepath . 'composer.json';
-
- $this->metadata_file = $metadata_filepath;
+ $this->metadata_file = $this->phpbb_root_path . $ext_filepath . 'composer.json';
if (!file_exists($this->metadata_file))
{
throw new \phpbb\extension\exception('FILE_NOT_FOUND', array($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))
+ if (!($file_contents = file_get_contents($this->metadata_file)))
{
- throw new \phpbb\extension\exception('FILE_NOT_FOUND', array($this->metadata_file));
+ throw new \phpbb\extension\exception('FILE_CONTENT_ERR', array($this->metadata_file));
}
- else
- {
- if (!($file_contents = file_get_contents($this->metadata_file)))
- {
- throw new \phpbb\extension\exception('FILE_CONTENT_ERR', array($this->metadata_file));
- }
- if (($metadata = json_decode($file_contents, true)) === null)
- {
- throw new \phpbb\extension\exception('FILE_JSON_DECODE_ERR', array($this->metadata_file));
- }
-
- array_walk_recursive($metadata, array($this, 'sanitize_json'));
- $this->metadata = $metadata;
-
- return true;
+ if (($metadata = json_decode($file_contents, true)) === null)
+ {
+ throw new \phpbb\extension\exception('FILE_JSON_DECODE_ERR', array($this->metadata_file));
}
+
+ array_walk_recursive($metadata, array($this, 'sanitize_json'));
+ $this->metadata = $metadata;
}
/**
@@ -181,16 +159,6 @@ class metadata_manager
}
/**
- * 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
*
* @param string $name ("all" for display and enable validation