public function testCreateNodeWithOnlyRequiredConfigUsesTheDefaultValues() { /** @var Application|\PHPUnit_Framework_MockObject_MockObject $appMock */ $appMock = $this->getMockBuilder('Silex\\Application')->disableOriginalConstructor()->getMock(); $appMock->expects(self::any())->method('offsetExists')->with('manager-config')->will(self::returnValue(['manager' => []])); $appMock->expects(self::any())->method('offsetGet')->with('manager-config')->will(self::returnValue(['manager' => ['dummy' => ['index' => ['columns' => []]]]])); $node = new Node($appMock, 'dummy', 'index'); self::assertSame(10, $node->getItemPerPage()); self::assertSame([], $node->getColumns()); self::assertSame('dummy', $node->getDbTable()); self::assertSame('Manager: dummy', $node->getHeader()); self::assertSame('setting', $node->getIcon()); self::assertEmpty($node->getQuery()); self::assertNull($node->getSearch()); }
public function createSave(Application $app, Request $request, $dbTable) { $config = new Node($app, $dbTable, 'new'); $fields = $config->getColumns(); $pk = $config->getPrimaryKey(); $header = $config->getHeader() ?: sprintf('Create: %s', $dbTable); $icon = $config->getIcon() ?: 'edit'; $after = isset($action['after']) ? $action['after'] : ''; $before = isset($action['before']) ? $action['before'] : ''; /** @var \Symfony\Component\Form\Form $form */ $form = $app['form.factory']->createBuilder('form'); foreach ($fields as $name => $field) { $type = isset($field['type']) ? $field['type'] : null; $options = isset($field['options']) ? $field['options'] : []; $form->add($name, $type, $options); } $form = $form->getForm(); $form->handleRequest($request); // Save if valid if (!$form->isValid()) { return $app['twig']->render($app['manager-config']['view']['new'], ['title' => $fields, 'pk' => $pk, 'header' => $header, 'icon' => $icon, 'form' => $form->createView(), 'currentTable' => $dbTable]); } $requestData = $request->request->all(); if (isset($requestData['form']['_token'])) { unset($requestData['form']['_token']); } if ($before && is_callable($before)) { $before($requestData['form']); } foreach ($requestData['form'] as $key => $row) { if (isset($action['modifier'][$key])) { $callable = $action['modifier'][$key]; $requestData['form'][$key] = $callable($requestData['form'][$key], $requestData['form']); } } $requestData['form'] = array_filter($requestData['form']); $query = sprintf('INSERT INTO %s(%s) VALUES(%s)', $config->getDbTable(), implode(', ', array_keys($requestData['form'])), '"' . implode('", "', array_map('addslashes', $requestData['form'])) . '"'); if ($this->db->execute($query)) { if ($after && is_callable($after)) { $after($requestData['form']); } $app['session']->getFlashBag()->add('messageSuccess', 'Added with success'); return $app->redirect($app['url_generator']->generate('manager-index', ['dbTable' => $dbTable])); } }