Пример #1
0
 public function testMultiFileWithOneFile()
 {
     $form = new Zend_Form();
     $element = new Zend_Form_Element_File('file');
     $element->setMultiFile(1);
     $subform0 = new Zend_Form_SubForm();
     $subform0->addElement($element);
     $subform1 = new Zend_Form_SubForm();
     $subform1->addSubform($subform0, 'subform0');
     $subform2 = new Zend_Form_SubForm();
     $subform2->addSubform($subform1, 'subform1');
     $subform3 = new Zend_Form_SubForm();
     $subform3->addSubform($subform2, 'subform2');
     $form->addSubform($subform3, 'subform3');
     $form->setView(new Zend_View());
     $output = (string) $form;
     $this->assertNotContains('name="file[]"', $output);
 }
Пример #2
0
 protected function buildAutoForm()
 {
     //
     global $gANNOTATION_KEYS;
     extract($gANNOTATION_KEYS);
     if ($this->recurseSubEntities) {
         $this->addSaveButton('upper_submit');
     }
     foreach ($this->entityColumns as $propertyName => $def) {
         if (!isset($def['annotations'][$annoKeyAwe])) {
             continue;
         }
         $elementType = false;
         $element = false;
         // annotation keys
         $anno = $def['annotations'];
         // determine element type
         if (isset($anno[$annoKeyId])) {
             $elementType = 'hidden_primary_key';
         } else {
             if (isset($anno[$annoKeyM21])) {
                 $elementType = $this->recurseSubEntities ? 'foreign_dropdown' : 'hidden_foreign_key';
             } else {
                 if (isset($anno[$annoKey12m]) && $this->recurseSubEntities && $anno[$annoKeyAwe]->editInline && $this->repopData && !$this->isRestful) {
                     $elementType = 'foreign_editInline';
                 } else {
                     if (isset($anno[$annoKeyM2m])) {
                         $elementType = 'foreign_multi_checkbox';
                     } else {
                         if (isset($anno[$annoKeyCol])) {
                             $elementType = 'entity';
                         }
                     }
                 }
             }
         }
         // Render that type of element
         switch ($elementType) {
             case 'hidden_primary_key':
                 //
                 $element = new Zend_Form_Element_Hidden('id');
                 $element->setDecorators(array('ViewHelper'));
                 if ($this->repopData) {
                     $element->setValue($this->repopData->id);
                 }
                 break;
             case 'hidden_foreign_key':
                 //
                 $elementName = isset($anno[$annoKeyJoinColumn]->name) ? $anno[$annoKeyJoinColumn]->name : $propertyName . '_id';
                 $element = new Zend_Form_Element_Hidden($elementName);
                 $element->setDecorators(array('ViewHelper'));
                 $element->setValue($this->repopData->{$propertyName}->id);
                 break;
             case 'entity':
                 //
                 // setup properties
                 // use a label param if set,
                 // otherwise use the @Column annotation's name property
                 // replace underscores with spaces and capitalize each word
                 // otherwise default to the property name of the object
                 $label = $anno[$annoKeyAwe]->label ? $anno[$annoKeyAwe]->label : ucwords(str_replace('_', ' ', preg_replace('[^a-zA-Z0-9_]', '', isset($anno[$annoKeyCol]) && $anno[$annoKeyCol]->name ? $anno[$annoKeyCol]->name : $propertyName)));
                 $type = $anno[$annoKeyAwe]->type ? $anno[$annoKeyAwe]->type : $this->getDefaultElementType($anno[$annoKeyCol]->type);
                 $colType = $anno[$annoKeyCol]->type;
                 $params = isset($anno[$annoKeyAwe]->params) ? $anno[$annoKeyAwe]->params : array();
                 $validators = count((array) $anno[$annoKeyAwe]->validators) ? (array) $anno[$annoKeyAwe]->validators : $this->getDefaultElementValidators($anno[$annoKeyCol]);
                 // build element
                 $element = new $type($propertyName, $params);
                 $element->setLabel($label);
                 $validatorList = array();
                 foreach ($validators as $v => $args) {
                     $validatorList[] = new $v((array) $args);
                 }
                 $element->setValidators($validatorList);
                 // repopulate data
                 if ($this->repopData) {
                     if ($colType == 'datetime' || $colType == 'date') {
                         $value = $this->repopData->{$propertyName}->format('Y-m-d');
                     } else {
                         $value = $this->repopData->{$propertyName};
                     }
                     $element->setValue($value);
                 }
                 break;
             case 'foreign_dropdown':
                 //
                 // setup properties
                 $label = $anno[$annoKeyAwe]->label ? $anno[$annoKeyAwe]->label : ucwords(str_replace('_', ' ', preg_replace('[^a-zA-Z0-9_]', '', isset($anno[$annoKeyCol]) && $anno[$annoKeyCol]->name ? $anno[$annoKeyCol]->name : $propertyName)));
                 $targetEntity = $anno[$annoKeyM21]->targetEntity;
                 $displayColumn = $anno[$annoKeyAwe]->displayColumn;
                 $join_column = $anno[$annoKeyJoinColumn]->name;
                 // get related entities
                 $dql = "select e from {$targetEntity} e";
                 $foreignEntities = $this->_doctrine->createQuery($dql)->getResult();
                 $dropdowns = array();
                 $dropdowns[''] = '';
                 foreach ($foreignEntities as $id => $f) {
                     $dropdowns[$f->id] = $f->{$displayColumn};
                 }
                 // build element
                 $element = new Zend_Form_Element_Select($join_column);
                 $element->setMultiOptions($dropdowns);
                 $element->setLabel($label);
                 // repopulate data
                 if ($this->repopData && $this->repopData->{$propertyName}) {
                     $element->setValue($this->repopData->{$propertyName}->id);
                 }
                 break;
             case 'foreign_multi_checkbox':
                 //
                 // setup properties
                 $label = $anno[$annoKeyAwe]->label ? $anno[$annoKeyAwe]->label : ucwords(str_replace('_', ' ', preg_replace('[^a-zA-Z0-9_]', '', isset($anno[$annoKeyCol]) && $anno[$annoKeyCol]->name ? $anno[$annoKeyCol]->name : $propertyName)));
                 $targetEntity = $anno[$annoKeyM2m]->targetEntity;
                 $displayColumn = $anno[$annoKeyAwe]->displayColumn;
                 $inverseColumn = $anno[$annoKeyJoinTable]->inverseJoinColumns[0]->name;
                 $targetId = str_replace('\\', '_', $targetEntity);
                 $attribute = str_replace('_id', '', "{$inverseColumn}s");
                 // get related entities
                 $dql = "select e from {$targetEntity} e";
                 $foreignEntities = $this->_doctrine->createQuery($dql)->getResult();
                 $foreignColumns = $this->getEntityColumnDefs($targetEntity);
                 $options = array();
                 if (count($foreignEntities)) {
                     foreach ($foreignEntities as $fe) {
                         $options[$fe->id] = $fe->{$displayColumn};
                     }
                 }
                 // build element
                 $element = new Zend_Form_Element_MultiCheckbox("{$inverseColumn}s");
                 $element->setMultiOptions($options);
                 $element->setLabel($label);
                 // repopulate data
                 $values = array();
                 foreach ($this->repopData->{$attribute} as $subEntity) {
                     $values[] = $subEntity->id;
                 }
                 $element->setValue($values);
                 break;
             case 'foreign_editInline':
                 //
                 // setup properties
                 $label = $anno[$annoKeyAwe]->label ? $anno[$annoKeyAwe]->label : ucwords(str_replace('_', ' ', preg_replace('[^a-zA-Z0-9_]', '', isset($anno[$annoKeyCol]) && $anno[$annoKeyCol]->name ? $anno[$annoKeyCol]->name : $propertyName)));
                 $targetEntity = $anno[$annoKey12m]->targetEntity;
                 $editInline = $anno[$annoKeyAwe]->editInline;
                 $targetId = str_replace('\\', '_', $targetEntity);
                 $subformName = "{$targetId}_subform";
                 // get sub entities
                 $sub_entities = $this->repopData->{$propertyName};
                 $subEntityColumns = $this->getEntityColumnDefs($targetEntity);
                 // build sub forms
                 $subform = new Zend_Form_SubForm();
                 $subform->setLegend($label);
                 $recurse = false;
                 $parent = $this->repopData;
                 $x = 0;
                 foreach ($sub_entities as $subEntity) {
                     $autoCrudForm = new Awe_Form_AutoMagic($subformName, $subEntityColumns, $subEntity, $recurse, $parent);
                     $subform->addSubform($autoCrudForm, $x++);
                 }
                 $this->addSubform($subform, $targetId);
                 break;
         }
         if ($element) {
             $this->getAutoSubform('entity')->addElement($element);
         }
     }
     if ($this->recurseSubEntities) {
         $this->addSaveButton('lower_submit');
     }
 }
Пример #3
0
 public function testMultiFileInSubSubSubform()
 {
     $form = new Zend_Form();
     $element = new Zend_Form_Element_File('file');
     $element->setMultiFile(2);
     $subform0 = new Zend_Form_SubForm();
     $subform0->addElement($element);
     $subform1 = new Zend_Form_SubForm();
     $subform1->addSubform($subform0, 'subform0');
     $subform2 = new Zend_Form_SubForm();
     $subform2->addSubform($subform1, 'subform1');
     $subform3 = new Zend_Form_SubForm();
     $subform3->addSubform($subform2, 'subform2');
     $form->addSubform($subform3, 'subform3');
     $form->setView(new Zend_View());
     $output = (string) $form;
     $this->assertContains('name="file[]"', $output);
     $this->assertEquals(2, substr_count($output, 'file[]'));
 }