* @copyright 2015 - 2018 Timothy J. Warren * @license http://www.opensource.org/licenses/mit-license.html MIT License * @version 4.1 * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient */ namespace Aviat\AnimeClient; use Aviat\Ion\Di\ContainerInterface; /** * Helper object to manage form generation, especially for config editing */ final class FormGenerator { /** * Html generation helper * * @var \Aura\Html\HelperLocator */ private $helper; /** * FormGenerator constructor. * * @param ContainerInterface $container * @throws \Aviat\Ion\Di\Exception\ContainerException * @throws \Aviat\Ion\Di\Exception\NotFoundException */ public function __construct(ContainerInterface $container) { $this->helper = $container->get('html-helper'); } /** * Generate the html structure of the form * * @param string $name * @param array $form * @return string */ public function generate(string $name, array $form): string { $type = $form['type']; if ($form['display'] === FALSE) { return $this->helper->input([ 'type' => 'hidden', 'name' => $name, 'value' => $form['value'], ]); } $params = [ 'name' => $name, 'value' => $form['value'], 'attribs' => [ 'id' => $name, ], ]; switch($type) { case 'boolean': $params['type'] = 'radio'; $params['options'] = [ '1' => 'Yes', '0' => 'No', ]; unset($params['attribs']['id']); break; case 'string': $params['type'] = 'text'; break; case 'select': $params['type'] = 'select'; $params['options'] = array_flip($form['options']); break; } foreach (['readonly', 'disabled'] as $key) { if ($form[$key] !== FALSE) { $params['attribs'][$key] = $form[$key]; } } return (string)$this->helper->input($params); } }