public function attributeFormat($attribute)
{
$column = $this->generator->getColumnByAttribute($attribute);
if (!$column) {
return;
}
// handle columns with a primary key, to create links in pivot tables (changed at 0.3-dev; 03.02.2015)
// TODO double check with primary keys not named `id` of non-pivot tables
// TODO Note: condition does not apply in every case
if ($column->isPrimaryKey) {
//return null; #TODO: double check with primary keys not named `id` of non-pivot tables
}
$relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column);
if ($relation) {
if ($relation->multiple) {
return;
}
$title = $this->generator->getModelNameAttribute($relation->modelClass);
$route = $this->generator->createRelationRoute($relation, 'view');
// prepare URLs
$routeAttach = 'create';
$routeIndex = $this->generator->createRelationRoute($relation, 'index');
$modelClass = $this->generator->modelClass;
$relationGetter = 'get' . (new ModelGenerator())->generateRelationName([$relation], $modelClass::getTableSchema(), $column->name, $relation->multiple) . '()';
$relationModel = new $relation->modelClass();
$relationModelName = StringHelper::basename($modelClass);
$pks = $relationModel->primaryKey();
$paramArrayItems = '';
foreach ($pks as $attr) {
$paramArrayItems .= "'{$attr}' => \$model->{$relationGetter}->one()->{$attr},";
}
$attachArrayItems = "'{$relationModelName}'=>['{$column->name}' => \$model->{$column->name}]";
$method = __METHOD__;
$code = <<<EOS
// generated by {$method}
[
'format' => 'html',
'attribute' => '{$column->name}',
'value' => (\$model->{$relationGetter}->one() ?
Html::a('<i class="glyphicon glyphicon-list"></i>', ['{$routeIndex}']).' '.
Html::a('<i class="glyphicon glyphicon-circle-arrow-right"></i> '.\$model->{$relationGetter}->one()->{$title}, ['{$route}', {$paramArrayItems}]).' '.
Html::a('<i class="glyphicon glyphicon-paperclip"></i>', ['{$routeAttach}', {$attachArrayItems}])
:
'<span class="label label-warning">?</span>'),
]
EOS;
return $code;
}
}