pageSettings($page); $revisions = Revision::where('page_id', $page->id)->latest()->get(); $templates = Template::whereNotNull('title')->orderBy('created_at', 'desc')->get(); $blocks = []; return view('larabuilder::pagebuilder', compact('grid_templates', 'components', 'blocks', 'page', 'componentTabs', 'revisions', 'templates')); } /** * @return array[] */ public function pageSettings($page): array { if (! $page) { abort(404); } $grid_templates = []; foreach (getGrids() as $grid) { $columns = getColumnInfo($grid); $grid_templates[$grid] = view('larabuilder::components.add-grid-placeholder', compact('columns', 'grid'))->render(); } $components = $componentDirectories = $templates = $componentTabs = []; if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets'))) { $componentDirectories = array_diff(scandir(module_path('LaraBuilder', 'Resources/views/widgets')), ['..', '.']); } foreach ($componentDirectories as $directory) { if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'))) { $currentSettings = include module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'); if (! empty($currentSettings['id']) && $directory == $currentSettings['id']) { setCurrentDirectory($currentSettings['id']); $components[$currentSettings['id']] = [ 'directory' => $directory, 'settings' => $currentSettings, 'template' => view()->exists('larabuilder::widgets.'.$directory.'.view') ? view('larabuilder::widgets.'.$directory.'.view')->render() : view('larabuilder::components.no-view')->render(), ]; $componentTabs[$currentSettings['tab']][$currentSettings['id']] = $currentSettings['id']; } } } setCurrentPageId($page->id); return [$grid_templates, $componentTabs, $components]; } public function iframe($pageId, Request $request) { $page = PageSettings::getPage($pageId); $edit = true; [$grid_templates, $componentTabs, $components] = $this->pageSettings($page); return view('larabuilder::pagebuilder-iframe', compact('grid_templates', 'components', 'page', 'componentTabs', 'edit')); } public function renderPage($pageSlug) { $page = Page::select('id', 'name', 'title', 'description', 'slug', 'settings', 'status') ->whereSlug(str_replace('larabuilder/', '', $pageSlug)) ->when(empty(request()->get('preview')), function ($q) { return $q->whereStatus('published'); }) ->firstOrFail(); $pageSections = view('larabuilder::components.page-components', compact('page')); setCurrentPageId($page->id); return view('larabuilder::page', compact('page', 'pageSections')); } public function getSettings(Request $request) { $pageId = $request->input('page_id'); $directory = $request->input('directory'); $sectionId = $request->input('id'); $gridId = $request->input('grid_id'); if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'))) { $settings = include module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'); } if (! empty($settings['fields'])) { $settingsHtml = $this->getPageSectionSettings($pageId, $sectionId, $settings['fields']); } $styles = $this->getSectionStyles($pageId, $gridId); $json = ['type' => 'success', 'section_data' => PageSettings::getPageSettings($pageId) ?? [], 'settings' => $settingsHtml ?? '', 'styles' => $styles]; return response(json_encode($json), 200); } public function getPageSectionSettings($pageId, $sectionId, $fields) { $html = $db_value = ''; if (is_array($fields) && ! empty($fields)) { $tab_key = ! empty($params['tab_key']) ? $params['tab_key'] : ''; $html = ''; } return $html; } public function getSectionStyles($pageId, $sectionId) { $page = PageSettings::getPage($pageId); $styles = $page->settings['section_data'][$sectionId]['styles'] ?? []; return view('larabuilder::components.styles', ['styles' => $styles])->render(); } public function setPageSettings(Request $request) { $status = $request->input('status'); $settings = $sectionId = null; if (! empty($request->get('settings'))) { $settings = $request->get('settings'); } if (! empty($request->get('current_section_data'))) { parse_str($request->get('current_section_data'), $form_data); parse_str($request->get('current_advanced_settings'), $advanced_form_data); $sectionId = $form_data['section_id']; unset($form_data['_method']); unset($form_data['_token']); unset($form_data['section_id']); $settings['section_data'][$sectionId]['settings'] = []; foreach ($form_data as $key => $value) { $isArray = 0; if (is_array($value)) { $isArray = 1; } $settings['section_data'][$sectionId]['settings'][$key]['value'] = $isArray ? $value : (is_null($value) ? '' : trim($value)); $settings['section_data'][$sectionId]['settings'][$key]['is_array'] = (int) $isArray; } $grid_id = $advanced_form_data['grid_id'] ?? null; unset($advanced_form_data['grid_id']); $settings['section_data'][$grid_id]['styles'] = []; foreach ($advanced_form_data as $key => $value) { if ($value != 'rgba(0,0,0,0)') { $settings['section_data'][$grid_id]['styles'][$key] = $value; } } if (empty($settings['section_data'][$grid_id]['styles']['content_width']) || (! empty($settings['section_data'][$grid_id]['styles']['content_width']) && $settings['section_data'][$grid_id]['styles']['content_width'] == 'full_width')) { unset($settings['section_data'][$grid_id]['styles']['boxed_slider_input']); } } $page = PageSettings::setPageSettings($request->input('page_id'), $settings); if (! empty($sectionId)) { setCurrentPageId($request->input('page_id')); $sectionHtml = $this->getSectionHtml($sectionId, $request->input('directory')); } if ($status == 'template') { Template::create([ 'settings' => $settings, 'title' => $request->input('template_name'), ]); } else { $page->status = 'published'; $page->save(); } return response()->json( [ 'success' => [ 'type' => 'success', 'title' => __('Congratulations'), 'message' => __('Page settings updated successfully'), ], 'html' => $sectionHtml ?? '', 'css' => ! empty($grid_id) ? getComponentStyles($grid_id) : '', 'custom_attributes' => ! empty($grid_id) ? getCustomAttributes($grid_id) : '', 'bgOverlay' => ! empty($grid_id) ? getBgOverlay($grid_id) : '', 'classes' => ! empty($grid_id) ? getClasses($grid_id) : '', 'sectionData' => $page->settings['section_data'] ?? [], ] ); } public function getSectionHtml($sectionId, $directory = null) { $html = ''; if ($sectionId && $directory) { $edit = true; setSectionId($sectionId); $html = view()->exists('larabuilder::widgets.'.$directory.'.view') ? view('larabuilder::widgets.'.$directory.'.view', compact('edit'))->render() : __('larabuilder::pagebuilder.no_view', ['block' => $directory]); } return $html; } public function getPageSectionSettingsArray($pageId, $sectionId, $fields, $directory) { $settings = []; if (is_array($fields) && ! empty($fields)) { foreach ($fields as $field) { $id = ! empty($field['id']) ? $field['id'] : ''; $db_value = PageSettings::getPageSectionSettings($pageId, $sectionId, $id); if (empty($db_value)) { $db_value = getDefaultValues($directory, $id); } $settings[$id] = $db_value; } } return $settings; } }