203 lines
7.7 KiB
PHP
203 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace Trinity\Bundle\VarsEditorBundle\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\Yaml\Yaml;
|
|
use Symfony\Component\Yaml\Dumper;
|
|
use Symfony\Component\Filesystem\Filesystem;
|
|
use Symfony\Component\Filesystem\Exception\IOException;
|
|
|
|
/**
|
|
* @Route("/admin")
|
|
*/
|
|
class VarsAdminController extends Controller
|
|
{
|
|
/**
|
|
* @Route("/editor", name="TrinityVarsEditorBundleVarsAdmin_index")
|
|
* @Template()
|
|
*/
|
|
public function indexAction(Request $request)
|
|
{
|
|
// $this->get('trinity_vars_editor.config'); // appDevDebugProjectContainer
|
|
$file = $this->container->getParameter('trinity_vars_editor.file');
|
|
$message = null;
|
|
$fieldsets = array();
|
|
$form = $this->createFormBuilder();
|
|
$fs = new Filesystem();
|
|
|
|
if (empty($file)) {
|
|
$message = 'error.configuration';
|
|
} else {
|
|
if (!$fs->exists($file)) {
|
|
$message = 'error.notFound';
|
|
} else {
|
|
$fieldsets = $this->getConfiguration($file, $form);
|
|
}
|
|
}
|
|
|
|
$form = $form->getForm();
|
|
|
|
if ($request->isMethod('POST') && empty($message)) {
|
|
$form = $this->processForm($form, $fieldsets, $file, $request);
|
|
}
|
|
|
|
return array(
|
|
'message' => $message,
|
|
'fieldsets' => $fieldsets,
|
|
'form' => $form->createView(),
|
|
);
|
|
}
|
|
|
|
protected function processForm($form, $fieldsets, $file, Request $request)
|
|
{
|
|
$form->bind($request);
|
|
|
|
$post = $request->request->get($form->getName());
|
|
$config = Yaml::parse($file);
|
|
$dumper = new Dumper();
|
|
|
|
foreach ($config['fieldsets'] as $k => $fieldset) {
|
|
if (isset($fieldset['vars'])) {
|
|
foreach ($fieldset['vars'] as $l => $var) {
|
|
$config['fieldsets'][$k]['vars'][$l]['value'] = $post[$var['key']];
|
|
}
|
|
} elseif (isset($fieldset['tabs'])) {
|
|
foreach ($fieldset['tabs'] as $l => $tab) {
|
|
foreach ($tab['vars'] as $m => $var) {
|
|
$config['fieldsets'][$k]['tabs'][$l]['vars'][$m]['value'] = $post[$l.'_'.$var['key']];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$fs = new Filesystem();
|
|
|
|
if (is_writable($file)) {
|
|
file_put_contents($file, $dumper->dump($config, 7));
|
|
} else {
|
|
throw new IOException(sprintf('The file "%s" is not writable.', $file));
|
|
}
|
|
|
|
return $form;
|
|
}
|
|
|
|
protected function getConfiguration($file, &$form)
|
|
{
|
|
$fieldsets = array();
|
|
|
|
$config = Yaml::parse($file);
|
|
|
|
if (isset($config['fieldsets']) && is_array($config['fieldsets'])) {
|
|
foreach ($config['fieldsets'] as $fieldset) {
|
|
if (isset($fieldset['tabs']) && is_array($fieldset['tabs'])) {
|
|
$title = isset($fieldset['title']) ? $fieldset['title'] : null;
|
|
$appendTemplate = isset($fieldset['append_template']) ? $fieldset['append_template'] : null;
|
|
$prependTemplate = isset($fieldset['prepend_template']) ? $fieldset['prepend_template'] : null;
|
|
$title = isset($fieldset['title']) ? $fieldset['title'] : null;
|
|
$tabs = array();
|
|
|
|
foreach ($fieldset['tabs'] as $key => $tab) {
|
|
$fields = array();
|
|
$tab_title = isset($tab['title']) ? $tab['title'] : 'tab'.$key;
|
|
|
|
foreach ($tab['vars'] as $var) {
|
|
if (!is_array($var)) {
|
|
continue;
|
|
}
|
|
|
|
if (!isset($var['key'])) {
|
|
continue;
|
|
}
|
|
|
|
$help = isset($var['help']) ? array('data-help' => $this->get('translator')->trans($var['help'])) : array();
|
|
$options = isset($var['options']) ? $var['options'] : array();
|
|
$configuration = isset($var['configuration']) ? $var['configuration'] : array();
|
|
|
|
$configuration['attr'] = array_merge(
|
|
isset($configuration['attr']) ? $configuration['attr'] : array(),
|
|
array_merge($options, $help)
|
|
);
|
|
|
|
$type = isset($var['type']) ? $var['type'] : 'text';
|
|
$name = $key.'_'.$var['key'];
|
|
|
|
$configuration['label'] = isset($var['label']) ? $var['label'] : $name;
|
|
$configuration['data'] = isset($var['value']) ? $var['value'] : null;
|
|
|
|
$form->add(
|
|
$name,
|
|
$type,
|
|
$configuration
|
|
);
|
|
|
|
$fields[] = $name;
|
|
}
|
|
|
|
$tabs[$key] = array(
|
|
'title' => $tab_title,
|
|
'fields' => $fields
|
|
);
|
|
|
|
}
|
|
$fieldsets[] = array(
|
|
'title' => $title,
|
|
'tabs' => $tabs,
|
|
'prepend_template' => $prependTemplate,
|
|
'append_template' => $appendTemplate,
|
|
);
|
|
} elseif (isset($fieldset['vars']) && is_array($fieldset['vars'])) {
|
|
$title = isset($fieldset['title']) ? $fieldset['title'] : null;
|
|
$appendTemplate = isset($fieldset['append_template']) ? $fieldset['append_template'] : null;
|
|
$prependTemplate = isset($fieldset['prepend_template']) ? $fieldset['prepend_template'] : null;
|
|
$fields = array();
|
|
|
|
foreach ($fieldset['vars'] as $var) {
|
|
if (!is_array($var)) {
|
|
continue;
|
|
}
|
|
|
|
if (!isset($var['key'])) {
|
|
continue;
|
|
}
|
|
|
|
$help = isset($var['help']) ? array('data-help' => $this->get('translator')->trans($var['help'])) : array();
|
|
$options = isset($var['options']) ? $var['options'] : array();
|
|
$configuration = isset($var['configuration']) ? $var['configuration'] : array();
|
|
$configuration['attr'] = array_merge(
|
|
isset($configuration['attr']) ? $configuration['attr'] : array(),
|
|
array_merge($options, $help)
|
|
);
|
|
|
|
$type = isset($var['type']) ? $var['type'] : 'text';
|
|
$name = $var['key'];
|
|
|
|
$configuration['label'] = isset($var['label']) ? $var['label'] : $name;
|
|
$configuration['data'] = isset($var['value']) ? $var['value'] : null;
|
|
|
|
$form->add(
|
|
$name,
|
|
$type,
|
|
$configuration
|
|
);
|
|
|
|
$fields[] = $name;
|
|
}
|
|
|
|
$fieldsets[] = array(
|
|
'title' => $title,
|
|
'fields' => $fields,
|
|
'prepend_template' => $prependTemplate,
|
|
'append_template' => $appendTemplate,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $fieldsets;
|
|
}
|
|
}
|