public static function exportBlocks($theme) { // convert db data to blocks override file if (!empty($theme)) { self::_processDatabaseBlocks($theme->id); @mkdir(base_path() . '/resources/views/themes/' . $theme->theme . '/export'); @mkdir(base_path() . '/resources/views/themes/' . $theme->theme . '/export/blocks'); $blocksCsv = fopen(base_path() . '/resources/views/themes/' . $theme->theme . '/export/blocks.csv', 'w'); $blockCategoriesCsv = fopen(base_path() . '/resources/views/themes/' . $theme->theme . '/export/blocks/categories.csv', 'w'); $selectOptionsCsv = fopen(base_path() . '/resources/views/themes/' . $theme->theme . '/export/blocks/select_options.csv', 'w'); $formRulesCsv = fopen(base_path() . '/resources/views/themes/' . $theme->theme . '/export/blocks/form_rules.csv', 'w'); fputcsv($selectOptionsCsv, ['Block Name', 'Option', 'Value']); $blockSelectOptions = []; $selectOptions = BlockSelectOption::all(); if (!$selectOptions->isEmpty()) { foreach ($selectOptions as $selectOption) { if (!isset($blockSelectOptions[$selectOption->block_id])) { $blockSelectOptions[$selectOption->block_id] = []; } $blockSelectOptions[$selectOption->block_id][] = [$selectOption->option, $selectOption->value]; } } fputcsv($formRulesCsv, ['Form Template', 'Field', 'Rule']); $formRules = BlockFormRule::all(); if (!$formRules->isEmpty()) { $formsDir = base_path() . '/resources/views/themes/' . $theme->theme . '/blocks/forms'; if (is_dir($formsDir)) { $themeForms = []; foreach (scandir($formsDir) as $formTemplate) { if (!in_array($formTemplate, ['.', '..'])) { $formTemplateParts = explode('.', $formTemplate); $themeForms[] = $formTemplateParts[0]; } } foreach ($formRules as $formRule) { if (in_array($formRule->form_template, $themeForms)) { fputcsv($formRulesCsv, [$formRule->form_template, $formRule->field, $formRule->rule]); } } } } fputcsv($blocksCsv, ['Block Name', 'Block Label', 'Block Note', 'Block Category', 'Block Type', 'Global (show in site-wide)', 'Global (show in pages)', 'Templates', 'Block Order']); $categoryIds = []; foreach (self::$_databaseBlocks as $blockName => $block) { $categoryIds[$block->category_id] = $block->category_id; fputcsv($blocksCsv, [$blockName, self::$_databaseBlocks[$blockName]->label, self::$_databaseBlocks[$blockName]->note, self::_getBlockCategory($block->category_id, 'name'), self::$_databaseBlocks[$blockName]->type, isset(self::$_databaseGlobalBlocks[$blockName]) && self::$_databaseGlobalBlocks[$blockName]->show_in_global ? 'yes' : 'no', isset(self::$_databaseGlobalBlocks[$blockName]) && self::$_databaseGlobalBlocks[$blockName]->show_in_pages ? 'yes' : 'no', isset(self::$_databaseBlockTemplates[$blockName]) ? implode(',', self::$_databaseBlockTemplates[$blockName]) : '', self::$_databaseBlocks[$blockName]->order]); if (!empty($blockSelectOptions[$block->id])) { foreach ($blockSelectOptions[$block->id] as $blockSelectOption) { fputcsv($selectOptionsCsv, [$block->name, $blockSelectOption[0], $blockSelectOption[1]]); } } } fputcsv($blockCategoriesCsv, ['Block Category', 'Category Order']); foreach ($categoryIds as $categoryId) { if ($category = self::_getBlockCategory($categoryId)) { fputcsv($blockCategoriesCsv, [$category->name, $category->order]); } } fclose($blocksCsv); fclose($blockCategoriesCsv); fclose($selectOptionsCsv); fclose($formRulesCsv); } }