protected function getColumnNameAndOptions(ColumnMap $column) { $name = strtolower($column->getName()); $relation = $column->getRelation(); $options = array('label' => $relation ? $relation->getName() : ucfirst(str_replace("_", " ", $name)), 'id' => 'table-' . str_replace('_', '-', $column->getTableName()) . '-column-' . str_replace("_", "-", $name) . rand()); return array($name, $options); }
/** * Gets value for row table * * Swaps foreign creator_node_id values for their unique FQDN value. Note that the other * part(s) to a primary or foreign key is set by the creator and is the same in all nodes, * so may be hashed without causing difference problems between nodes. * * @todo Better node table detection required (should use known prefix) * @todo Fix column name hardwiring * * @param MeshingBaseObject $object * @param ColumnMap $columnMap * @return mixed */ protected function getRowValue(MeshingBaseObject $object, ColumnMap $columnMap) { // Get value for this column $columnName = $columnMap->getName(); $value = $object->getByName($columnName, BasePeer::TYPE_RAW_COLNAME); // If the related table name ends with '_known_node' then we assume this is a // FK to a creator node ID. if ($columnMap->isForeignKey()) { $match = '_known_node'; $isNodeTable = $match == substr($columnMap->getRelatedTableName(), -strlen($match)); if ($isNodeTable && $columnMap->getRelatedColumnName() == 'ID') { $nodePeerName = $columnMap->getRelation()->getForeignTable()->getPeerClassname(); $node = call_user_func(array($nodePeerName, 'retrieveByPK'), $value, $this->con); // If there is no related node, we really do have problems! if (!$node) { $primaryKey = $object->getPrimaryKey(); if (is_array($primaryKey)) { $primaryKey = '{' . implode(',', $primaryKey) . '}'; } $type = get_class($object); throw new Exception("Row {$primaryKey} in table '{$type}' points to a non-existent node row"); } $value = $node->getFqdn(); } } return $value; }