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; $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; } $options = isset($var['options']) ? $var['options'] : array(); $value = isset($var['value']) ? $var['value'] : null; $type = isset($var['type']) ? $var['type'] : 'text'; $help = isset($var['help']) ? array('data-help' => $this->get('translator')->trans($var['help'])) : array(); $name = $key.'_'.$var['key']; $label = isset($var['label']) ? $var['label'] : $name; $form->add( $name, $type, array( 'label' => $label, 'data' => $value, 'attr' => array_merge($options, $help) ) ); $fields[] = $name; } $tabs[$key] = array( 'title' => $tab_title, 'fields' => $fields ); } $fieldsets[] = array( 'title' => $title, 'tabs' => $tabs, ); } elseif (isset($fieldset['vars']) && is_array($fieldset['vars'])) { $title = isset($fieldset['title']) ? $fieldset['title'] : null; $fields = array(); foreach ($fieldset['vars'] as $var) { if (!is_array($var)) { continue; } if (!isset($var['key'])) { continue; } $options = isset($var['options']) ? $var['options'] : array(); $value = isset($var['value']) ? $var['value'] : null; $type = isset($var['type']) ? $var['type'] : 'text'; $help = isset($var['help']) ? array('data-help' => $this->get('translator')->trans($var['help'])) : array(); $name = $var['key']; $label = isset($var['label']) ? $var['label'] : $name; $form->add( $name, $type, array( 'label' => $label, 'data' => $value, 'attr' => array_merge($options, $help) ) ); $fields[] = $name; } $fieldsets[] = array( 'title' => $title, 'fields' => $fields, ); } } } return $fieldsets; } }