MDL-27120 Add global cache to backup_xml_transformer::register_link_encoders()
[moodle.git] / backup / moodle2 / backup_xml_transformer.class.php
index a3770d0..fec3c59 100644 (file)
@@ -32,6 +32,12 @@ defined('MOODLE_INTERNAL') || die();
  *
  * TODO: Finish phpdocs
  */
+
+// cache for storing link encoders, so that we don't need to call
+// register_link_encoders each time backup_xml_transformer is constructed
+global $LINKS_ENCODERS_CACHE;
+$LINKS_ENCODERS_CACHE = array();
+
 class backup_xml_transformer extends xml_contenttransformer {
 
     private $absolute_links_encoders; // array of static methods to be called in order to
@@ -41,13 +47,18 @@ class backup_xml_transformer extends xml_contenttransformer {
     private $unicoderegexp;           // to know if the site supports unicode regexp
 
     public function __construct($courseid) {
+        global $LINKS_ENCODERS_CACHE;
+
         $this->absolute_links_encoders = array();
         $this->courseid = $courseid;
         // Check if we support unicode modifiers in regular expressions
         $this->unicoderegexp = @preg_match('/\pL/u', 'a'); // This will fail silently, returning false,
                                                            // if regexp libraries don't support unicode
         // Register all the available content link encoders
-        $this->absolute_links_encoders = $this->register_link_encoders();
+        if (!empty($LINKS_ENCODERS_CACHE)) {
+            $LINKS_ENCODERS_CACHE = $this->register_link_encoders();
+        }
+        $this->absolute_links_encoders = $LINKS_ENCODERS_CACHE;
     }
 
     public function process($content) {