/**
  * Converts only listViewDefs.
  * Old format contains only default fields, current - default and enabled.
  */
 public function run()
 {
     if (!version_compare($this->from_version, '7.2', '<')) {
         return;
     }
     $sb = new StudioBrowser();
     $sb->loadModules();
     foreach ($sb->modules as $module => $defs) {
         if (!file_exists("custom/modules/{$module}/metadata/popupdefs.php")) {
             continue;
         }
         require "custom/modules/{$module}/metadata/popupdefs.php";
         if (!isset($popupMeta['listviewdefs'])) {
             continue;
         }
         $popupDefaultFieldNames = array();
         foreach ($popupMeta['listviewdefs'] as $key => $popupFieldDefs) {
             $popupDefaultFieldNames[] = isset($popupFieldDefs['name']) ? $popupFieldDefs['name'] : strtolower($key);
         }
         $sidecarParser = new SidecarListLayoutMetaDataParser(MB_SIDECARPOPUPVIEW, $module, null, 'base');
         $panel = $sidecarParser->getOriginalPanelDefs();
         $allFields = array_merge($sidecarParser->getAvailableFields(), $sidecarParser->getAdditionalFields());
         // Sidecar originally enabled and default fields.
         $newPanelDef = $panel[0]['fields'];
         // Reset all defaul fields to save available.
         array_walk($newPanelDef, function (&$val) {
             $val['default'] = false;
         });
         foreach ($popupDefaultFieldNames as $defaultFieldName) {
             // Populate with new default set.
             foreach ($newPanelDef as &$panelDef) {
                 if ($panelDef['name'] == $defaultFieldName) {
                     $panelDef['default'] = true;
                     continue 2;
                 }
             }
             // The field is hidden, populate the result defs with it.
             if (isset($allFields[$defaultFieldName])) {
                 $newPanelDef[] = array_merge($allFields[$defaultFieldName], array('default' => true, 'enabled' => true, 'name' => $defaultFieldName));
             }
         }
         $sidecarParser->setPanelFields($newPanelDef);
         $sidecarParser->handleSave(false);
     }
 }
示例#2
0
 public function action_listViewSave()
 {
     $GLOBALS['log']->info("action_listViewSave");
     if (isset($_REQUEST['PORTAL'])) {
         $this->view = 'portallistview';
         $parser = ParserFactory::getParser($this->view, $_REQUEST['view_module'], null, null, MB_PORTAL);
         //$parser->init ( $_REQUEST [ 'view_module' ] ) ; // removed init because MetaDataParsers don't use it
     } else {
         $packageName = isset($_REQUEST['view_package']) && strtolower($_REQUEST['view_package']) != 'studio' ? $_REQUEST['view_package'] : null;
         $subpanelName = !empty($_REQUEST['subpanel']) ? $_REQUEST['subpanel'] : null;
         $parser = ParserFactory::getParser($_REQUEST['view'], $_REQUEST['view_module'], $packageName, $subpanelName);
         $this->view = 'listView';
         // To make sure that dashlets can render customized list views on BWC
         // modules, we need to save list customizations for BWC modules in
         // the new style as well.
         if (isModuleBWC($_REQUEST['view_module']) && empty($packageName) && empty($subpanelName)) {
             $sidecarListParser = new SidecarListLayoutMetaDataParser(MB_SIDECARLISTVIEW, $_REQUEST['view_module'], null, 'base');
             $sidecarListParser->handleSave();
         }
     }
     // for backwards compatibility we need to parse the subpanel the old way as well
     // TODO: Remove this when all BWC Modules are converted
     if ($parser instanceof SidecarSubpanelLayoutMetaDataParser) {
         require_once 'modules/ModuleBuilder/parsers/views/SubpanelMetaDataParser.php';
         $oldSubpanelParser = new SubpanelMetaDataParser($subpanelName, $_REQUEST['view_module'], $packageName);
         $oldSubpanelParser->handleSave();
         unset($oldSubpanelParser);
     }
     $parser->handleSave();
     if (empty($packageName) && !empty($subpanelName)) {
         $rr = new RepairAndClear();
         $rr->show_output = false;
         $rr->rebuildExtensions();
     }
     // clear the cache for the linked module and requested module
     MetaDataManager::refreshModulesCache($parser->getAffectedModules());
 }