124 lines
3.3 KiB
PHP
124 lines
3.3 KiB
PHP
<?php
|
|
namespace Domain\Layouts;
|
|
|
|
class LayoutsRepository
|
|
{
|
|
private $db;
|
|
|
|
public function __construct( $db )
|
|
{
|
|
$this->db = $db;
|
|
}
|
|
|
|
public function layoutDelete( $layoutId )
|
|
{
|
|
if ( $this->db->count( 'pp_layouts' ) > 1 )
|
|
return $this->db->delete( 'pp_layouts', [ 'id' => (int)$layoutId ] );
|
|
|
|
return false;
|
|
}
|
|
|
|
public function layoutDetails( $layoutId )
|
|
{
|
|
$layout = $this->db->get( 'pp_layouts', '*', [ 'id' => (int)$layoutId ] );
|
|
$layout['pages'] = $this->db->select( 'pp_layouts_pages', 'page_id', [ 'layout_id' => (int)$layoutId ] );
|
|
|
|
return $layout;
|
|
}
|
|
|
|
public function layoutSave( $layoutId, $name, $status, $pages, $html, $css, $js, $mHtml, $mCss, $mJs )
|
|
{
|
|
if ( !$layoutId )
|
|
return $this->createLayout( $name, $status, $pages, $html, $css, $js, $mHtml, $mCss, $mJs );
|
|
|
|
return $this->updateLayout( $layoutId, $name, $status, $pages, $html, $css, $js, $mHtml, $mCss, $mJs );
|
|
}
|
|
|
|
public function menusList()
|
|
{
|
|
$pagesRepo = new \Domain\Pages\PagesRepository( $this->db );
|
|
$results = $this->db->select( 'pp_menus', 'id', [ 'ORDER' => [ 'name' => 'ASC' ] ] );
|
|
if ( is_array( $results ) )
|
|
foreach ( $results as $row )
|
|
{
|
|
$menu = $pagesRepo->menuDetails( $row );
|
|
$menu['pages'] = $pagesRepo->menuPages( $row );
|
|
$menus[] = $menu;
|
|
}
|
|
|
|
return isset( $menus ) ? $menus : null;
|
|
}
|
|
|
|
public function layoutsList()
|
|
{
|
|
return $this->db->select( 'pp_layouts', '*', [ 'ORDER' => [ 'name' => 'ASC' ] ] );
|
|
}
|
|
|
|
private function createLayout( $name, $status, $pages, $html, $css, $js, $mHtml, $mCss, $mJs )
|
|
{
|
|
if ( $status == 'on' )
|
|
$this->db->update( 'pp_layouts', [ 'status' => 0 ] );
|
|
|
|
$this->db->insert( 'pp_layouts', [
|
|
'name' => $name,
|
|
'html' => $html,
|
|
'css' => $css,
|
|
'js' => $js,
|
|
'm_html' => $mHtml,
|
|
'm_css' => $mCss,
|
|
'm_js' => $mJs,
|
|
'status' => $status == 'on' ? 1 : 0
|
|
] );
|
|
|
|
$id = $this->db->id();
|
|
if ( !$id )
|
|
return false;
|
|
|
|
$this->replaceLayoutPages( (int)$id, $pages );
|
|
\S::delete_cache();
|
|
|
|
return $id;
|
|
}
|
|
|
|
private function updateLayout( $layoutId, $name, $status, $pages, $html, $css, $js, $mHtml, $mCss, $mJs )
|
|
{
|
|
if ( $status == 'on' )
|
|
$this->db->update( 'pp_layouts', [ 'status' => 0 ] );
|
|
|
|
$this->db->update( 'pp_layouts', [
|
|
'name' => $name,
|
|
'html' => $html,
|
|
'css' => $css,
|
|
'js' => $js,
|
|
'm_html' => $mHtml,
|
|
'm_css' => $mCss,
|
|
'm_js' => $mJs,
|
|
'status' => $status == 'on' ? 1 : 0
|
|
], [
|
|
'id' => $layoutId
|
|
] );
|
|
|
|
$this->db->delete( 'pp_layouts_pages', [ 'layout_id' => (int)$layoutId ] );
|
|
$this->replaceLayoutPages( (int)$layoutId, $pages );
|
|
|
|
\S::delete_cache();
|
|
return $layoutId;
|
|
}
|
|
|
|
private function replaceLayoutPages( int $layoutId, $pages ): void
|
|
{
|
|
if ( is_array( $pages ) )
|
|
foreach ( $pages as $page )
|
|
{
|
|
$this->db->delete( 'pp_layouts_pages', [ 'page_id' => (int)$page ] );
|
|
$this->db->insert( 'pp_layouts_pages', [ 'layout_id' => $layoutId, 'page_id' => (int)$page ] );
|
|
}
|
|
else if ( $pages )
|
|
{
|
|
$this->db->delete( 'pp_layouts_pages', [ 'page_id' => (int)$pages ] );
|
|
$this->db->insert( 'pp_layouts_pages', [ 'layout_id' => $layoutId, 'page_id' => (int)$pages ] );
|
|
}
|
|
}
|
|
}
|
|
?>
|