mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-29 12:13:06 -04:00
326 lines
11 KiB
PHP
326 lines
11 KiB
PHP
<?php
|
|
|
|
namespace Modules\LaraBuilder\Http\Controllers;
|
|
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\LaraBuilder\Entities\Page;
|
|
use Modules\LaraBuilder\Entities\Revision;
|
|
use Modules\LaraBuilder\Entities\Template;
|
|
use Modules\LaraBuilder\Facades\PageSettings;
|
|
use Modules\LaraBuilder\Facades\Settings;
|
|
|
|
class PageBuilderController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index(): Renderable
|
|
{
|
|
return view('larabuilder::index');
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create(): Renderable
|
|
{
|
|
return view('larabuilder::create');
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request): Renderable
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the specified resource.
|
|
*
|
|
* @param int $id
|
|
*/
|
|
public function show($id): Renderable
|
|
{
|
|
return view('larabuilder::show');
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
*/
|
|
public function edit($id): Renderable
|
|
{
|
|
return view('larabuilder::edit');
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param int $id
|
|
*/
|
|
public function update(Request $request, $id): Renderable
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param int $id
|
|
*/
|
|
public function destroy($id): Renderable
|
|
{
|
|
//
|
|
}
|
|
|
|
public function build($pageId, Request $request)
|
|
{
|
|
$page = PageSettings::getPage($pageId);
|
|
|
|
[$grid_templates, $componentTabs, $components] = $this->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 = '<ul class="op-themeform__wrap">';
|
|
foreach ($fields as $field) {
|
|
$field['tab_key'] = $tab_key;
|
|
if (empty($params['repeater_id'])) {
|
|
$id = ! empty($field['id']) ? $field['id'] : '';
|
|
$db_value = PageSettings::getPageSectionSettings($pageId, $sectionId, $id);
|
|
$field['db_value'] = $db_value;
|
|
if (! empty($db_value)) {
|
|
$field['value'] = $db_value;
|
|
}
|
|
} else {
|
|
$field['repeater_id'] = ! empty($params['repeater_id']) ? $params['repeater_id'] : '';
|
|
$field['index'] = ! empty($params['repeater_id']) ? $params['index'] : '';
|
|
}
|
|
$html .= Settings::getField($field);
|
|
}
|
|
$html .= '</ul>';
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|