Ejemplo n.º 1
0
 public static function updateBlockTemplates($themeId, $block, $blockData)
 {
     if (!isset(self::$_fileBlocks[$block])) {
         $blockData['global_pages'] = 0;
         $blockData['global_site'] = 0;
     }
     // do empty check as new blocks won't be found
     $databaseBlockTemplates = !empty(self::$_databaseBlockTemplates[$block]) ? self::$_databaseBlockTemplates[$block] : [];
     $fileBlockTemplates = !empty(self::$_fileBlockTemplates[$block]) ? self::$_fileBlockTemplates[$block] : [];
     if (!empty($blockData['global_pages']) || !empty($blockData['global_site'])) {
         $toAdd = [];
         $toDelete = $databaseBlockTemplates;
         $fileBlockTemplatesIds = [];
         foreach ($fileBlockTemplates as $fileBlockTemplate) {
             $fileBlockTemplatesIds[] = self::$_databaseTemplates[$fileBlockTemplate]->id;
         }
         $excludeTemplates = array_diff(array_keys(self::$_databaseTemplateIds), $fileBlockTemplatesIds);
         sort($excludeTemplates);
         $excludeList = implode(',', $excludeTemplates);
         $blockData['global_pages'] = !empty($blockData['global_pages']) ? 1 : 0;
         $blockData['global_site'] = !empty($blockData['global_site']) ? 1 : 0;
         // Insert or Update ThemeBlock
         if (empty(self::$_databaseGlobalBlocks[$block])) {
             $newThemeBlock = new ThemeBlock();
             $newThemeBlock->theme_id = $themeId;
             $newThemeBlock->block_id = self::$_allBlocks[$block]->id;
             $newThemeBlock->show_in_pages = $blockData['global_pages'];
             $newThemeBlock->show_in_global = $blockData['global_site'];
             $newThemeBlock->exclude_templates = $excludeList;
             $newThemeBlock->save();
         } elseif (self::$_databaseGlobalBlocks[$block]->show_in_pages != $blockData['global_pages'] || self::$_databaseGlobalBlocks[$block]->show_in_global != $blockData['global_site'] || self::$_databaseGlobalBlocks[$block]->exclude_templates != $excludeList) {
             self::$_databaseGlobalBlocks[$block]->show_in_pages = $blockData['global_pages'];
             self::$_databaseGlobalBlocks[$block]->show_in_global = $blockData['global_site'];
             self::$_databaseGlobalBlocks[$block]->exclude_templates = $excludeList;
             self::$_databaseGlobalBlocks[$block]->save();
         }
     } else {
         // Delete from theme blocks if no longer a theme block
         if (!empty(self::$_databaseGlobalBlocks[$block])) {
             ThemeBlock::where('block_id', '=', self::$_allBlocks[$block]->id)->where('theme_id', '=', $themeId)->delete();
             $databaseBlockTemplates = [];
         }
         $toAdd = array_diff($fileBlockTemplates, $databaseBlockTemplates);
         $toDelete = array_diff($databaseBlockTemplates, $fileBlockTemplates);
     }
     // Update TemplateBlocks
     if (!empty($toDelete)) {
         $templateIds = [];
         foreach ($toDelete as $template) {
             $templateIds[] = self::$_databaseTemplates[$template]->id;
         }
         TemplateBlock::where('block_id', '=', self::$_allBlocks[$block]->id)->whereIn('template_id', $templateIds)->delete();
     }
     if (!empty($toAdd)) {
         foreach ($toAdd as $template) {
             $newTemplateBlock = new TemplateBlock();
             $newTemplateBlock->block_id = self::$_allBlocks[$block]->id;
             $newTemplateBlock->template_id = self::$_databaseTemplates[$template]->id;
             $newTemplateBlock->save();
         }
     }
 }