Rename methods in CollapsableWidget

The methods were far too generic. When a trait or behavior is used, it's usually a good include to include the name of the trait in the methods and properties it provides. This reduces the chance of a conflict with the implementing class.
This commit is contained in:
Samuel Georges 2017-06-10 15:42:24 +10:00
parent f020479b91
commit a2a7eec4f5
7 changed files with 110 additions and 70 deletions

View File

@ -1,7 +1,5 @@
<?php namespace Backend\Traits;
use Input;
/**
* Collapsable Widget Trait
* Adds collapse/expand item features to back-end widgets
@ -12,42 +10,120 @@ use Input;
trait CollapsableWidget
{
protected $groupStatusCache = false;
/**
* @var string The key name to use when storing collapsed states in the session.
*/
public $collapseSessionKey = 'groups';
public function onGroupStatusUpdate()
/**
* @var array|false Memory cache of collapsed states.
*/
protected $collapseGroupStatusCache = false;
/**
* AJAX handler to toggle a collapsed state. This should take two post variables:
* - group: The collapsible group name
* - status: The state of the group. Usually a 1 or a 0.
*
* @return void
*/
public function onSetCollapseStatus()
{
$this->setGroupStatus(Input::get('group'), Input::get('status'));
$this->setCollapseStatus(post('group'), post('status'));
}
protected function getGroupStatuses()
/**
* Returns the array of all collapsed states belonging to this widget.
*
* @return array
*/
protected function getCollapseStatuses()
{
if ($this->groupStatusCache !== false) {
return $this->groupStatusCache;
if ($this->collapseGroupStatusCache !== false) {
return $this->collapseGroupStatusCache;
}
$groups = $this->getSession('groups', []);
$groups = $this->getSession($this->collapseSessionKey, []);
if (!is_array($groups)) {
return $this->groupStatusCache = [];
return $this->collapseGroupStatusCache = [];
}
return $this->groupStatusCache = $groups;
return $this->collapseGroupStatusCache = $groups;
}
protected function setGroupStatus($group, $status)
/**
* Sets a collapsed state.
*
* @param string $group
* @param string $status
*/
protected function setCollapseStatus($group, $status)
{
$statuses = $this->getGroupStatuses();
$statuses = $this->getCollapseStatuses();
$statuses[$group] = $status;
$this->groupStatusCache = $statuses;
$this->putSession('groups', $statuses);
$this->collapseGroupStatusCache = $statuses;
$this->putSession($this->collapseSessionKey, $statuses);
}
protected function getGroupStatus($group, $default = true)
/**
* Gets a collapsed state.
*
* @param string $group
* @param bool $default
* @return bool|string
*/
protected function getCollapseStatus($group, $default = true)
{
$statuses = $this->getGroupStatuses();
$statuses = $this->getCollapseStatuses();
if (array_key_exists($group, $statuses)) {
return $statuses[$group];
}
return $default;
}
//
// Deprecations, remove if year >= 2019
//
/**
* @deprecated onGroupStatusUpdate is deprecated. Please update onSetCollapseStatus instead.
*/
public function onGroupStatusUpdate()
{
traceLog('onGroupStatusUpdate is deprecated. Please update onSetCollapseStatus instead. Class: '.get_class($this));
$this->onSetCollapseStatus();
}
/**
* @deprecated - getGroupStatuses is deprecated. Please update getCollapseStatuses instead.
*/
protected function getGroupStatuses()
{
traceLog('getGroupStatuses is deprecated. Please update getCollapseStatuses instead. Class: '.get_class($this));
return $this->getCollapseStatuses();
}
/**
* @deprecated - setGroupStatus is deprecated. Please update setCollapseStatus instead.
*/
protected function setGroupStatus($group, $status)
{
traceLog('setGroupStatus is deprecated. Please update setCollapseStatus instead. Class: '.get_class($this));
return $this->setCollapseStatus($group, $status);
}
/**
* @deprecated - getGroupStatus is deprecated. Please update getCollapseStatus instead.
*/
protected function getGroupStatus($group, $default = true)
{
traceLog('getGroupStatus is deprecated. Please update getCollapseStatus instead. Class: '.get_class($this));
return $this->getCollapseStatus($group, $default);
}
}

View File

@ -37,8 +37,6 @@ class AssetList extends WidgetBase
protected $theme;
protected $groupStatusCache = false;
/**
* @var string Message to display when there are no records in the list.
*/
@ -87,14 +85,9 @@ class AssetList extends WidgetBase
]);
}
/*
* Event handlers
*/
public function onGroupStatusUpdate()
{
$this->setGroupStatus(Input::get('group'), Input::get('status'));
}
//
// Event handlers
//
public function onOpenDirectory()
{

View File

@ -20,6 +20,7 @@ class TemplateList extends WidgetBase
const SORTING_FILENAME = 'fileName';
use \Backend\Traits\SelectableWidget;
use \Backend\Traits\CollapsableWidget;
protected $searchTerm = false;
@ -27,8 +28,6 @@ class TemplateList extends WidgetBase
protected $theme;
protected $groupStatusCache = false;
/**
* @var string object property to use as a title.
*/
@ -87,6 +86,7 @@ class TemplateList extends WidgetBase
$this->dataSource = $dataSource;
$this->theme = Theme::getEditTheme();
$this->selectionInputName = 'template';
$this->collapseSessionKey = $this->getThemeSessionKey('groups');
parent::__construct($controller, []);
@ -133,11 +133,6 @@ class TemplateList extends WidgetBase
return $this->updateList();
}
public function onGroupStatusUpdate()
{
$this->setGroupStatus(Input::get('group'), Input::get('status'));
}
public function onUpdate()
{
$this->extendSelection();
@ -400,43 +395,11 @@ class TemplateList extends WidgetBase
return false;
}
protected function getGroupStatus($group)
{
$statuses = $this->getGroupStatuses();
if (array_key_exists($group, $statuses)) {
return $statuses[$group];
}
return false;
}
protected function getThemeSessionKey($prefix)
{
return $prefix.$this->theme->getDirName();
}
protected function getGroupStatuses()
{
if ($this->groupStatusCache !== false) {
return $this->groupStatusCache;
}
$groups = $this->getSession($this->getThemeSessionKey('groups'), []);
if (!is_array($groups)) {
return $this->groupStatusCache = [];
}
return $this->groupStatusCache = $groups;
}
protected function setGroupStatus($group, $status)
{
$statuses = $this->getGroupStatuses();
$statuses[$group] = $status;
$this->groupStatusCache = $statuses;
$this->putSession($this->getThemeSessionKey('groups'), $statuses);
}
protected function getSortingProperty()
{
$property = $this->getSession($this->getThemeSessionKey('sorting_property'), self::SORTING_FILENAME);

View File

@ -1,6 +1,10 @@
<div class="layout-absolute">
<div class="control-scrollbar" data-control="scrollbar">
<div class="control-filelist component-list" data-control="filelist" data-group-status-handler="<?= $this->getEventHandler('onGroupStatusUpdate') ?>" id="<?= $this->getId('component-list') ?>">
<div
class="control-filelist component-list"
data-control="filelist"
data-group-status-handler="<?= $this->getEventHandler('onSetCollapseStatus') ?>"
id="<?= $this->getId('component-list') ?>">
<?= $this->makePartial('items', ['items'=>$data]) ?>
</div>
</div>

View File

@ -1,7 +1,7 @@
<?php if ($items): ?>
<ul>
<?php foreach ($items as $item): ?>
<li class="group" data-status="<?= $this->getGroupStatus($item->pluginClass, false) ? 'expanded' : 'collapsed' ?>" data-group-id="<?= e($item->pluginClass) ?>">
<li class="group" data-status="<?= $this->getCollapseStatus($item->pluginClass, false) ? 'expanded' : 'collapsed' ?>" data-group-id="<?= e($item->pluginClass) ?>">
<div class="group">
<h4><a href="#"><?= e(trans($item->title)) ?></a></h4>
<i class="<?= $item->icon ?>"></i>

View File

@ -3,7 +3,7 @@
<?php foreach ($items as $item): ?>
<?php if (property_exists($item, 'items')): ?>
<?php if ($item->items): ?>
<li class="group" data-status="<?= $this->getGroupStatus($item->title) ? 'expanded' : 'collapsed' ?>">
<li class="group" data-status="<?= $this->getCollapseStatus($item->title) ? 'expanded' : 'collapsed' ?>">
<h4><a href="javascript:;"><?= e($item->title) ?></a></h4>
<?= $this->makePartial('items', ['items'=>$item->items, 'nested'=>true]) ?>
</li>

View File

@ -1,6 +1,10 @@
<div class="layout-absolute">
<div class="control-scrollbar" data-control="scrollbar">
<div class="control-filelist <?= $this->controlClass ?>" data-control="filelist" data-group-status-handler="<?= $this->getEventHandler('onGroupStatusUpdate') ?>" id="<?= $this->getId('template-list') ?>">
<div
class="control-filelist <?= $this->controlClass ?>"
data-control="filelist"
data-group-status-handler="<?= $this->getEventHandler('onSetCollapseStatus') ?>"
id="<?= $this->getId('template-list') ?>">
<?= $this->makePartial('items', ['items' => $data]) ?>
</div>
</div>