public final function __construct($data)
 {
     if (!self::$access_key) {
         self::$access_key = new FW_Access_Key('extension');
     }
     $this->rel_path = $data['rel_path'];
     $this->path = $data['path'];
     $this->uri = $data['uri'];
     $this->parent = $data['parent'];
     $this->depth = $data['depth'];
     $this->customizations_locations = $data['customizations_locations'];
     $variables = fw_get_variables_from_file($this->path . '/manifest.php', array('manifest' => array()));
     $manifest = $variables['manifest'];
     unset($variables);
     if (empty($manifest['name'])) {
         $manifest['name'] = fw_id_to_title($this->get_name());
     }
     $this->manifest = new FW_Extension_Manifest($manifest);
 }
 public final function __construct(&$parent, $declared_dir, $declared_source, $URI, $depth)
 {
     if (!self::$access_key) {
         self::$access_key = new FW_Access_Key('extension');
     }
     $this->parent =& $parent;
     $this->declared_source = $declared_source;
     $this->declared_dir = $declared_dir;
     $this->declared_URI = $URI . $this->get_rel_path();
     // ! set $this->parent before calling get_rel_path()
     $this->depth = $depth;
     $manifest = array();
     if (file_exists($this->declared_dir . '/manifest.php')) {
         $variables = fw_get_variables_from_file($this->declared_dir . '/manifest.php', array('manifest' => array()));
         $manifest = $variables['manifest'];
         unset($variables);
     }
     if (empty($manifest['name'])) {
         $manifest['name'] = fw_id_to_title($this->get_name());
     }
     $this->manifest = new FW_Extension_Manifest($manifest);
 }
 /**
  * @param FW_Extension $extension
  */
 private static function load_extension_shortcodes($extension)
 {
     $ext_name = $extension->get_name();
     if (version_compare(fw()->manifest->get_version(), '2.2', '<')) {
         $ext_rel_path = $extension->get_rel_path();
         if ($extension->get_declared_source() === 'framework') {
             self::load_folder_shortcodes($ext_name, array('path' => $extension->get_declared_path('/shortcodes'), 'uri' => $extension->get_declared_URI('/shortcodes')), array('paths' => array(fw_get_stylesheet_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes'), fw_get_template_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes')), 'uris' => array(fw_get_stylesheet_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes'), fw_get_template_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes'))));
             self::load_folder_shortcodes($ext_name, array('path' => fw_get_template_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes'), 'uri' => fw_get_template_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes')), array('paths' => array(fw_get_stylesheet_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes')), 'uris' => array(fw_get_stylesheet_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes'))));
             self::load_folder_shortcodes($ext_name, array('path' => fw_get_stylesheet_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes'), 'uri' => fw_get_stylesheet_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes')));
         } elseif ($extension->get_declared_source() === 'parent') {
             self::load_folder_shortcodes($ext_name, array('path' => $extension->get_declared_path('/shortcodes'), 'uri' => $extension->get_declared_URI('/shortcodes')), array('paths' => array(fw_get_stylesheet_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes')), 'uris' => array(fw_get_stylesheet_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes'))));
             self::load_folder_shortcodes($ext_name, array('path' => fw_get_stylesheet_customizations_directory('/extensions' . $ext_rel_path . '/shortcodes'), 'uri' => fw_get_stylesheet_customizations_directory_uri('/extensions' . $ext_rel_path . '/shortcodes')));
         } else {
             self::load_folder_shortcodes($ext_name, array('path' => $extension->get_declared_path('/shortcodes'), 'uri' => $extension->get_declared_URI('/shortcodes')));
         }
     } else {
         $customizations_locations = array('paths' => array(), 'uris' => array());
         foreach ($extension->get_customizations_locations() as $path => $uri) {
             $customizations_locations['paths'][] = $path . '/shortcodes';
             $customizations_locations['uris'][] = $uri . '/shortcodes';
         }
         $path = $extension->get_path('/shortcodes');
         $uri = $extension->get_uri('/shortcodes');
         do {
             if (empty($customizations_locations['paths'])) {
                 $customizations_locations = array();
             }
             self::load_folder_shortcodes($ext_name, array('path' => $path, 'uri' => $uri), $customizations_locations);
             if ($customizations_locations) {
                 $path = array_pop($customizations_locations['paths']);
                 $uri = array_pop($customizations_locations['uris']);
             }
         } while ($customizations_locations);
     }
 }