Пример #1
0
 function &buildWidget(&$record, &$field, &$form, $formFieldName, $new = false)
 {
     /*
      *
      * This field uses a table widget.
      *
      */
     //$field['display'] = 'block';
     $table =& $record->_table;
     $formTool =& Dataface_FormTool::getInstance();
     $factory =& Dataface_FormTool::factory();
     $widget =& $field['widget'];
     $el =& $factory->addElement('grid', $formFieldName, $widget['label']);
     $el->setProperties($widget);
     $rperms = $record->getPermissions(array('relationship' => $field['relationship']));
     if (!$record->checkPermission('add new related record', array('relationship' => $field['relationship']))) {
         //echo "No add new ".$record->_table->tablename;
         $el->addNew = false;
     }
     if (!$record->checkPermission('add existing related record', array('relationship' => $field['relationship']))) {
         //echo "No add new ".$record->_table->tablename;
         $el->addExisting = false;
     }
     if (isset($field['relationship'])) {
         $relationship =& $table->getRelationship($field['relationship']);
         if (!$record->checkPermission('remove related record', array('relationship' => $field['relationship']))) {
             $el->delete = false;
         } else {
             if ($relationship->isOneToMany() and isset($rperms['delete related record']) and !@$rperms['delete related record']) {
                 $el->delete = false;
             }
         }
         if (!$relationship->supportsRemove()) {
             $el->delete = false;
         }
         if (!$relationship->supportsAddNew()) {
             $el->addNew = false;
         }
         if (!$relationship->supportsAddExisting()) {
             $el->addExisting = false;
         } else {
             $el->addExistingFilters = $relationship->getAddExistingFilters();
         }
         $el->table = $relationship->getDomainTable();
         if (isset($widget['columns'])) {
             $columns = array_map('trim', explode(',', $widget['columns']));
         } else {
             $columns = $relationship->_schema['short_columns'];
         }
         $count = 0;
         $subfactory = new HTML_QuickForm();
         $dummyRelatedRecord = new Dataface_RelatedRecord($record, $relationship->getName());
         //print_r($dummyRelatedRecord->getPermissions());
         $orderCol = $relationship->getOrderColumn();
         if (!$orderCol or PEAR::isError($orderCol)) {
             $el->reorder = false;
         }
         foreach ($columns as $column) {
             $colTable =& $relationship->getTable($column);
             if (!$colTable) {
                 echo "Could not find table for column {$column}";
             }
             $colPerms = $dummyRelatedRecord->getPermissions(array('field' => $column));
             if (!@$colPerms['view']) {
                 unset($colTable);
                 unset($dummyRecord);
                 continue;
             }
             // We need to be a bit more refined on this one.  We need to take
             // into account the context being that we are in a relationship.
             $dummyRecord = new Dataface_Record($colTable->tablename, $record->vals());
             /*
             if ( !$dummyRecord->checkPermission('view', 
             	array('field'=>$column, 'recordmask'=>array('view'=>1))) ) {
             	unset($colTable);
             	unset($dummyRecord);
             	continue;
             }
             */
             $colFieldDef =& $colTable->getField($column);
             $columnElement =& $formTool->buildWidget($dummyRecord, $colFieldDef, $subfactory, $column, false);
             $defaultValue = $colTable->getDefaultValue($column);
             $columnElement->setValue($defaultValue);
             $el->defaults[$column] = $defaultValue;
             $el->addField($colFieldDef, $columnElement, $colPerms);
             unset($columnElement);
             unset($colFieldDef);
             unset($dummyRecord);
             unset($colTable);
             unset($elementFilter);
         }
     } else {
         if (isset($widget['fields'])) {
             $widget_fields =& $widget['fields'];
             foreach ($widget_fields as $widget_field) {
                 $widget_field =& Dataface_Table::getTableField($widget_field, $this->db);
                 if (PEAR::isError($widget_field)) {
                     return $widget_field;
                 }
                 $widget_widget = $formTool->buildWidget($record, $widget_field, $factory, $widget_field['name']);
                 $defaultValue = $table->getDefaultValue($widget_field['name']);
                 $widget_widget->setValue($defaultValue);
                 $el->addField($widget_widget);
                 $el->defaults[$widget_field['name']] = $defaultValue;
             }
         } else {
             if (isset($field['fields'])) {
                 foreach (array_keys($field['fields']) as $field_key) {
                     $widget_widget = $formTool->buildWidget($record, $field['fields'][$field_key], $factory, $field['fields'][$field_key]['name']);
                     $defaultValue = $table->getDefaultValue($widget_field['name']);
                     $widget_widget->setValue($defaultValue);
                     $el->defaults[$widget_field['name']] = $defaultValue;
                     $el->addField($widget_widget);
                     unset($widget_widget);
                 }
             }
         }
     }
     return $el;
 }