/**
     * Load current Sugar metadata for this module
     * 
     * @return array
     */
    protected function loadDefaultMetadata()
    {
        $client = $this->client == 'wireless' ? 'mobile' : $this->client;
        // The new defs array - this should contain OOTB defs for the module
        $newdefs = $viewdefs = array();
        $viewname = MetaDataFiles::getName($this->viewtype);
        if (!$viewname) {
            $viewname = $this->viewtype;
        }
        // Bug 55568 - new metadata was not included for custom metadata
        // conversion from pre-6.6 installations.
        // Grab the new metadata for this module. For undeployed modules we
        // need to get the metadata from the SugarObject type.
        // If there are defs for this module, grab them
        $this->defsfile = 'modules/' . $this->module . '/clients/' . $client . '/views/' . $viewname . '/' . $viewname . '.php';
        if (file_exists($this->defsfile)) {
            require $this->defsfile;
            if (isset($viewdefs[$this->module][$client]['view'][$viewname])) {
                $newdefs = $viewdefs[$this->module][$client]['view'][$viewname];
            }
        }
        // Fallback to the object type if there were no defs found
        // Bug 57216 - Upgrade wizard was dying on undeployed modules getType
        if (empty($newdefs)) {
            if ($this->deployed) {
                require_once 'modules/ModuleBuilder/Module/StudioModuleFactory.php';
                $sm = StudioModuleFactory::getStudioModule($this->module);
                $moduleType = $sm->getType();
            } elseif ($this->package) {
                require_once 'modules/ModuleBuilder/MB/ModuleBuilder.php';
                $mb = new ModuleBuilder();
                $package = $mb->getPackage($this->package);
                $module = $package->getModule($this->module);
                $moduleType = $module->getModuleType();
            }
            if (!empty($moduleType)) {
                $this->base_defsfile = 'include/SugarObjects/templates/' . $moduleType . '/clients/' . $client . '/views/' . $viewname . '/' . $viewname . '.php';
                if (file_exists($this->base_defsfile)) {
                    require $this->base_defsfile;
                } else {
                    $this->base_defsfile = 'include/SugarObjects/templates/basic/clients/' . $client . '/views/' . $viewname . '/' . $viewname . '.php';
                    if (file_exists($this->base_defsfile)) {
                        require $this->base_defsfile;
                    } else {
                        $this->logUpgradeStatus("Could not find basic {$viewname} template for module {$this->module} type {$moduleType}");
                    }
                }
                // See if there are viewdefs defined that we can use
                if (isset($viewdefs['<module_name>'][$client]['view'][$viewname])) {
                    //Need to perform variable replacement for some field defs
                    $module = $this->getNormalizedModuleName();
                    $convertedDefs = MetaDataFiles::getModuleMetaDataDefsWithReplacements($module, $viewdefs);
                    if (isset($convertedDefs[$module][$client]['view'][$viewname])) {
                        $newdefs = $convertedDefs[$module][$client]['view'][$viewname];
                    } else {
                        $newdefs = $viewdefs['<module_name>'][$client]['view'][$viewname];
                    }
                }
                // Only write a defs file for deployed modules
                if ($newdefs && $this->deployed) {
                    // If we used the template, create the basic one
                    $this->logUpgradeStatus(get_class($this) . ": Copying template defs {$this->base_defsfile} to {$this->defsfile}");
                    mkdir_recursive(dirname($this->defsfile));
                    $viewname = pathinfo($this->defsfile, PATHINFO_FILENAME);
                    $export = var_export($newdefs, true);
                    $data = <<<END
<?php
/* Generated by SugarCRM Upgrader */
\$viewdefs['{$this->module}']['{$client}']['view']['{$viewname}'] = {$export};
END;
                    sugar_file_put_contents($this->defsfile, $data);
                }
            }
        }
        return $newdefs;
    }
 /**
  * Gets the metadata from various non module locations as a fallback. If 
  * no metadata file is found, will log an error and return an empty set of 
  * viewdefs.
  * 
  * @param string $marker The property to set when metadata is found
  * @return array
  */
 public function getFallbackMetadata($marker = 'loadedMetadataFile')
 {
     // Prepare the return
     $viewdefs = array();
     // Get our module type
     $sm = new StudioModule($this->_moduleName);
     $template = $sm->getType();
     // Build an array of files to search defs for
     $files = array();
     if (!$this->_viewClient !== 'base') {
         // This is the OOTB file for this module in the base client
         $files[] = $this->getMetadataFilename(MB_BASEMETADATALOCATION, null, 'base');
     }
     // This is the metadata file for this module type
     $files[] = $this->getMetadataFilename('', $template, 'base');
     if ($template !== 'basic') {
         // This is the metadata file for basic modules
         $files[] = $this->getMetadataFilename('', 'basic', 'base');
     }
     // Used for logging
     $found = false;
     // Loop and set
     foreach ($files as $file) {
         if (file_exists($file)) {
             require $file;
             if (!empty($viewdefs)) {
                 // This needs to be done in the event we have a SugarObject template file in use
                 $viewdefs = MetaDataFiles::getModuleMetaDataDefsWithReplacements($this->bean, $viewdefs);
                 if (isset($viewdefs[$this->_moduleName])) {
                     $this->{$marker} = $file;
                     $found = true;
                     break;
                 }
             }
         }
     }
     // If we found nothing, log it
     if (!$found) {
         $GLOBALS['log']->error("Could not find a filter file for {$this->_moduleName}");
     }
     return $viewdefs;
 }
 private function replaceVariables($defs, $module)
 {
     return MetaDataFiles::getModuleMetaDataDefsWithReplacements($module instanceof StudioModule ? $module->seed : $module, $defs);
     /*
             $var_values = array(
     	"<object_name>" => $module->seed->object_name,
     	"<_object_name>" => strtolower($module->seed->object_name),
     	"<OBJECT_NAME>" => strtoupper($module->seed->object_name),
     	"<module_name>" => $module->seed->module_dir,
     	'<_module_name>'=> strtolower ( $module->seed->module_dir )
     );
     return $this->recursiveVariableReplace($defs, $module, $var_values);
     */
 }