/** * Admin constructor. * * @param string $id * @param string $type * @param string[] $classes * @param array $data * @param string $title * @param string $baseHref * @param VisitorInterface $initializer * @param VisitorInterface $renderer * @param WritableInterface $pageContents * @param QueryWrapperInterface[] $queries * @throws \Exception If an invalid object manager mode is provided. */ public function __construct($id, $type, array $classes, array $data, $title, $baseHref, VisitorInterface $initializer, VisitorInterface $renderer, WritableInterface $pageContents, array $queries) { /** @var string $mode */ $mode = $this->getParameter(static::MODE_FIELD, static::MODE_PAGE); $this->queries = $queries; switch ($mode) { case static::MODE_PAGE: $writable = $pageContents; $type = static::TYPE_MINI_HEADER; break; case static::MODE_TABLE: $sectionBuilder = SectionBuilder::begin()->setId('admin-tables-container'); foreach ($this->makeTables() as $table) { $sectionBuilder->addWritable($table); } $writable = WritableBearerBuilder::begin()->addWritable($sectionBuilder->build())->build(); $type = static::TYPE_MINI_HEADER; break; case static::MODE_DETAIL: $writable = $this->makeDetail(); $type = static::TYPE_BARE; break; case static::MODE_DELETE: $writable = $this->makeDelete(); $type = static::TYPE_BARE; break; default: throw new \Exception("Invalid object manager mode '{$mode}' provided in URL parameters."); } parent::__construct($id, $type, $classes, $data, $title, $baseHref, $initializer, $renderer, $writable); }
/** * @return PageInterface * @throws Exception If the a query has not been provided. */ public function build() { $this->validateInitializer(); $this->validateRenderer(); if ($this->queries === []) { throw new Exception("For an object manager page, you must provide a Propel query(ies) using ::addQuery."); } $pageContents = WritableBearerBuilder::begin()->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content')->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content-head')->addWritable($this->buildTopMatter())->build())->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content-body')->addWritable($this->buildWritableBearer())->addWritable(SectionBuilder::begin()->setId('admin-tables-container')->build())->build())->build())->build(); $admin = new Admin($this->id, $this->type, $this->classes, $this->data, $this->title, $this->baseHref, $this->initializer, $this->renderer, $pageContents, $this->queries); return $admin; }
/** * Basic tests for the Form builder classes. * * Any test here could potentially fail because of a failure in the constructed form. * * @throws \Exception */ public function testBuilder() { $action = new FormAction([], [], "label", "method", ""); $formFoundValid = false; $onValidFunc = function () use($formFoundValid) { $formFoundValid = true; }; $formFoundInvalid = false; $onInvalidFunc = function () use($formFoundInvalid) { $formFoundInvalid = true; }; $field = new Field([], [], 'literal', 'A literal field', []); $fieldName = "field"; $id = "f" . (string) rand(); $type = "t" . (string) rand(); $method = "m" . (string) rand(); $target = "t" . (string) rand(); $classes = [(string) rand(), (string) rand()]; $form = FormBuilder::begin()->clear()->setId($id)->addClass($classes[0])->addClass($classes[1])->setType($type)->setMethod($method)->setTarget($target)->addAction($action)->addWritable($field, $fieldName)->addOnInvalidFunc($onInvalidFunc)->addOnValidFunc($onValidFunc)->build(); $this->assertEquals([$action], $form->getActions()); $this->assertContains($field, $form->getWritables()); $this->assertEquals($id, $form->getId()); $this->assertEquals($classes, $form->getClasses()); $this->assertEquals($type, $form->getType()); $this->assertEquals($method, $form->getMethod()); $this->assertEquals($target, $form->getTarget()); /* Test default type/method/target */ $form = FormBuilder::begin()->setId($id)->build(); $this->assertEquals("base", $form->getType()); $this->assertEquals("post", $form->getMethod()); $this->assertEquals("_self", $form->getTarget()); $object = $this->instances[0]; $form = FormBuilder::begin()->clear()->setId("f-" . (string) rand())->addObject($object)->build(); $expectedFieldNames = $object->getQualifiedPascalCasedColumnNames(); $this->assertEquals($expectedFieldNames, array_keys($form->getWritables())); /* Test FormBuilder::addFieldBearer */ $field = new Field([], [], 'literal', 'A literal field', []); $writableBearer = WritableBearerBuilder::begin()->addWritable($field, "field")->build(); $form = FormBuilder::begin()->setId("f-" . (string) rand())->addWritableBearer($writableBearer)->build(); $this->assertContains("field", array_keys($form->getWritables())); /* Test FormBuilder::addSubForms */ $field = new Field([], [], 'literal', 'A literal field', []); $writableBearer = WritableBearerBuilder::begin()->addWritable($field, "field")->build(); $form1 = FormBuilder::begin()->setId("f-" . (string) rand())->addWritableBearer($writableBearer)->build(); $form2 = FormBuilder::begin()->setId("f-" . (string) rand())->addWritableBearer($writableBearer)->build(); $form = FormBuilder::begin()->setId("f-" . (string) rand())->addWritable($form1, "Form1")->addWritable($form2, "Form2")->build(); $this->assertEquals(2, sizeof($form->getWritables())); $this->assertContains($form1, $form->getWritables()); $this->assertContains($form2, $form->getWritables()); }
/** * Test subforms get unique suffixes. */ public function testUniqueSuffixesForSubforms() { $initializer = new Initializer(); $fieldBearer1 = WritableBearerBuilder::begin()->addWritable(new Field([], [], 'literal', 'A literal field', [], "field"))->addWritable(new Field([], [], 'literal', 'A second literal field', []), "field2")->build(); $fieldBearer2 = WritableBearerBuilder::begin()->addWritable(new Field([], [], 'literal', 'A literal field', [], "field"))->addWritable(new Field([], [], 'literal', 'A second literal field', []), "field2")->build(); $form1 = FormBuilder::begin()->addWritableBearer($fieldBearer1)->setId("f-" . (string) rand())->build(); $form2 = FormBuilder::begin()->addWritableBearer($fieldBearer2)->setId("f-" . (string) rand())->build(); $form = FormBuilder::begin()->setId("f-" . (string) rand())->addWritable($form1, 'Form1')->addWritable($form2, 'Form2')->build(); // Initialize the form to add suffixes $_SERVER["REQUEST_METHOD"] = "GET"; $initializer->visitForm($form); // Grab all of the fields from both of the sub forms $writables = array_merge(array_values($form->getWritableBearer()->getWritableByHandle("Form1")->getWritableBearer()->getWritables()), array_values($form->getWritableBearer()->getWritableByHandle("Form2")->getWritableBearer()->getWritables())); // Map each field to a serialization of its suffixes $suffixes = []; foreach ($writables as $writable) { if ($writable instanceof FieldInterface) { $suffixes[] = serialize($writable->getSuffixes()); } } // Assert that every set of suffixes is unique $this->assertEquals(sizeof($suffixes), sizeof(array_unique($suffixes))); }
/** * @return PageInterface * @throws \Exception If the type of the page has not been set. */ public function build() { if ($this->type === null) { throw new \Exception("You must set a page type using ::setType before calling this function."); } $this->validateInitializer(); $this->validateRenderer(); $writable = WritableBearerBuilder::begin()->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content')->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content-head')->addWritable($this->buildTopMatter())->build())->addWritable(SectionBuilder::begin()->setType(SectionBuilder::TYPE_DIV)->setId('page-content-body')->addWritable($this->buildWritableBearer())->build())->build())->build(); return new Page($this->id, $this->type, $this->classes, $this->data, $this->title, $this->baseHref, $this->initializer, $this->renderer, $writable); }
/** * @return void */ private function createWritableBearerBuilderIfNull() { if ($this->writableBearerBuilder === null) { $this->writableBearerBuilder = WritableBearerBuilder::begin(); } }