rhymix/modules/admin/controllers/Design.php
2023-01-17 20:59:21 +09:00

114 lines
2.7 KiB
PHP

<?php
namespace Rhymix\Modules\Admin\Controllers;
use Context;
use FileHandler;
use Rhymix\Framework\DB;
class Design extends Base
{
/**
* Save the default design configuration.
*/
public function procAdminInsertDefaultDesignInfo()
{
$vars = Context::getRequestVars();
$this->updateDefaultDesignInfo($vars);
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
* Subroutine for the above.
*
* @param object $vars
* @return void
*/
public function updateDefaultDesignInfo(object $vars): void
{
$vars->module_skin = json_decode($vars->module_skin);
$siteDesignPath = \RX_BASEDIR . 'files/site_design/';
if (!is_dir($siteDesignPath))
{
FileHandler::makeDir($siteDesignPath);
}
$siteDesignFile = \RX_BASEDIR . 'files/site_design/design_0.php';
$layoutTarget = 'layout_srl';
$skinTarget = 'skin';
if ($vars->target_type == 'M')
{
$layoutTarget = 'mlayout_srl';
$skinTarget = 'mskin';
}
if (is_readable($siteDesignFile))
{
include $siteDesignFile;
}
else
{
$designInfo = new \stdClass;
}
$layoutSrl = (!$vars->layout_srl) ? 0 : $vars->layout_srl;
$designInfo->{$layoutTarget} = $layoutSrl;
foreach ($vars->module_skin as $moduleName => $skinName)
{
if ($moduleName == 'ARTICLE')
{
$moduleName = 'page';
}
if (!isset($designInfo->module))
{
$designInfo->module = new \stdClass;
}
if (!isset($designInfo->module->{$moduleName}))
{
$designInfo->module->{$moduleName} = new \stdClass;
}
$designInfo->module->{$moduleName}->{$skinTarget} = $skinName;
}
$this->makeDefaultDesignFile($designInfo);
}
/**
* Subroutine for the above;
*
* @param object $designInfo
* @return void
*/
public function makeDefaultDesignFile(object $designInfo): void
{
$buff = array();
$buff[] = '<?php if(!defined("__XE__")) exit();';
$buff[] = '$designInfo = new stdClass;';
if($designInfo->layout_srl)
{
$buff[] = sprintf('$designInfo->layout_srl = %d; ', intval($designInfo->layout_srl));
}
if($designInfo->mlayout_srl)
{
$buff[] = sprintf('$designInfo->mlayout_srl = %d;', intval($designInfo->mlayout_srl));
}
$buff[] = '$designInfo->module = new stdClass;';
foreach($designInfo->module as $moduleName => $skinInfo)
{
$buff[] = sprintf('$designInfo->module->{%s} = new stdClass;', var_export(strval($moduleName), true));
foreach($skinInfo as $target => $skinName)
{
$buff[] = sprintf('$designInfo->module->{%s}->{%s} = %s;', var_export(strval($moduleName), true), var_export(strval($target), true), var_export(strval($skinName), true));
}
}
$siteDesignFile = \RX_BASEDIR . 'files/site_design/design_0.php';
FileHandler::writeFile($siteDesignFile, implode(\PHP_EOL, $buff));
}
}