function getRecordAsTableCells( IdStack $idPath, Editor $editor, Structure $visibleStructure, Record $record, &$startColumn = 0 ) { $result = ''; $childEditorMap = $editor->getAttributeEditorMap(); foreach ( $visibleStructure->getAttributes() as $visibleAttribute ) { $childEditor = $childEditorMap->getEditorForAttribute( $visibleAttribute ); if ( $childEditor != null ) { $attribute = $childEditor->getAttribute(); $type = $attribute->type; $value = $record->getAttributeValue( $attribute ); $idPath->pushAttribute( $attribute ); $attributeId = $idPath->getId(); if ( $childEditor instanceof RecordTableCellEditor ) { $result .= getRecordAsTableCells( $idPath, $childEditor, $visibleAttribute->type, $value, $startColumn ); } else { $displayValue = $childEditor->showsData( $value ) ? $childEditor->view( $idPath, $value ) : ""; $result .= '<td class="' . getHTMLClassForType( $type, $attribute ) . ' column-' . parityClass( $startColumn ) . '">' . $displayValue . '</td>'; $startColumn++; } $idPath->popAttribute(); } else { $result .= '<td/>'; } } return $result; }
public function edit( IdStack $idPath, $value ) { global $wgScriptPath ; $result = '<table id="' . $idPath->getId() . '" class="wiki-data-table">'; $key = $value->getKey(); $rowAttributes = $this->getRowAttributesText(); $visibleStructure = $this->getTableStructureForEdit( $idPath, $value ); $columnOffset = $this->allowRemove ? 1 : 0; $headerRows = getStructureAsTableHeaderRows( $visibleStructure, $columnOffset, $idPath ); if ( $this->allowRemove ) $headerRows[0] = '<th class="remove" rowspan="' . count( $headerRows ) . '"><img src="' . $wgScriptPath . '/extensions/Wikidata/Images/Delete.png" title="' . wfMsgSc( "RemoveHint" ) . '" alt="' . wfMsgSc( "Remove" ) . '"/></th>' . $headerRows[0]; if ( $this->repeatInput ) $headerRows[0] .= '<th class="add" rowspan="' . count( $headerRows ) . '">Input rows</th>'; foreach ( $headerRows as $headerRow ) $result .= '<tr id="' . $idPath->getId() . '" ' . $rowAttributes . '>' . $headerRow . '</tr>' . EOL; $recordCount = $value->getRecordCount(); for ( $i = 0; $i < $recordCount; $i++ ) { $result .= '<tr>'; $record = $value->getRecord( $i ); $idPath->pushKey( project( $record, $key ) ); if ( $this->allowRemove ) { $result .= '<td class="remove">'; if ( $this->permissionController->allowRemovalOfValue( $idPath, $record ) ) $result .= getRemoveCheckBox( 'remove-' . $idPath->getId() ); $result .= '</td>' . EOL; } if ( $this->permissionController->allowUpdateOfValue( $idPath, $record ) ) $result .= getRecordAsEditTableCells( $idPath, $this, $visibleStructure, $record ); else $result .= getRecordAsTableCells( $idPath, $this, $visibleStructure, $record ); $idPath->popKey(); if ( $this->repeatInput ) $result .= '<td/>' . EOL; $result .= '</tr>' . EOL; } if ( $this->allowAddController->check( $idPath ) ) $result .= $this->getAddRowAsHTML( $idPath, $this->repeatInput, $this->allowRemove ); $result .= '</table>' . EOL; return $result; }