silverstripe-framework/forms/gridfield/GridFieldLevelup.php
Will Rossiter ddcfcf7bed Update @package, @subpackage labels
Cleanup of framework's use of @package and @subpackage labels and additional of labels for classes missing packages.

Moved all GridField related components to the one name.

Countless spelling fixes, grammar for other comments.

Link ClassName references in file headers.
2013-05-21 22:24:41 +12:00

88 lines
2.1 KiB
PHP

<?php
/**
* Adds a "level up" link to a GridField table, which is useful when viewing
* hierarchical data. Requires the managed record to have a "getParent()"
* method or has_one relationship called "Parent".
*
* @package framework
* @subpackage fields-gridfield
*/
class GridFieldLevelup extends Object implements GridField_HTMLProvider {
/**
* @var integer - the record id of the level up to
*/
protected $currentID = null;
/**
* sprintf() spec for link to link to parent.
* Only supports one variable replacement - the parent ID.
* @var string
*/
protected $linkSpec = '';
/**
* @var array Extra attributes for the link
*/
protected $attributes = array();
/**
*
* @param integer $currentID - The ID of the current item; this button will find that item's parent
*/
public function __construct($currentID) {
if($currentID && is_numeric($currentID)) $this->currentID = $currentID;
}
public function getHTMLFragments($gridField) {
$modelClass = $gridField->getModelClass();
$parentID = 0;
if($this->currentID) {
$modelObj = DataObject::get_by_id($modelClass, $this->currentID);
if($modelObj->hasMethod('getParent')) {
$parent = $modelObj->getParent();
} elseif($modelObj->ParentID) {
$parent = $modelObj->Parent();
}
if($parent) $parentID = $parent->ID;
// Attributes
$attrs = array_merge($this->attributes, array(
'href' => sprintf($this->linkSpec, $parentID),
'class' => 'cms-panel-link list-parent-link'
));
$attrsStr = '';
foreach($attrs as $k => $v) $attrsStr .= " $k=\"" . Convert::raw2att($v) . "\"";
$forTemplate = new ArrayData(array(
'UpLink' => sprintf('<a%s>%s</a>', $attrsStr, _t('GridField.LEVELUP', 'Level up'))
));
return array(
'before' => $forTemplate->renderWith('GridFieldLevelup'),
);
}
}
public function setAttributes($attrs) {
$this->attributes = $attrs;
return $this;
}
public function getAttributes() {
return $this->attributes;
}
public function setLinkSpec($link) {
$this->linkSpec = $link;
return $this;
}
public function getLinkSpec() {
return $this->linkSpec;
}
}