2014-09-10 20:48:53 -07:00
|
|
|
<?php namespace Backend\Traits;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Collapsable Widget Trait
|
|
|
|
* Adds collapse/expand item features to back-end widgets
|
|
|
|
*
|
|
|
|
* @package october\backend
|
|
|
|
* @author Alexey Bobkov, Samuel Georges
|
|
|
|
*/
|
|
|
|
|
|
|
|
trait CollapsableWidget
|
|
|
|
{
|
2017-06-10 15:42:24 +10:00
|
|
|
/**
|
|
|
|
* @var string The key name to use when storing collapsed states in the session.
|
|
|
|
*/
|
|
|
|
public $collapseSessionKey = 'groups';
|
2014-09-10 20:48:53 -07:00
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
/**
|
|
|
|
* @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()
|
2014-09-10 20:48:53 -07:00
|
|
|
{
|
2017-06-10 15:42:24 +10:00
|
|
|
$this->setCollapseStatus(post('group'), post('status'));
|
2014-09-10 20:48:53 -07:00
|
|
|
}
|
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
/**
|
|
|
|
* Returns the array of all collapsed states belonging to this widget.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function getCollapseStatuses()
|
2014-09-10 20:48:53 -07:00
|
|
|
{
|
2017-06-10 15:42:24 +10:00
|
|
|
if ($this->collapseGroupStatusCache !== false) {
|
|
|
|
return $this->collapseGroupStatusCache;
|
2014-10-11 00:07:30 +02:00
|
|
|
}
|
2014-09-10 20:48:53 -07:00
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
$groups = $this->getSession($this->collapseSessionKey, []);
|
|
|
|
|
2014-10-11 00:07:30 +02:00
|
|
|
if (!is_array($groups)) {
|
2017-06-10 15:42:24 +10:00
|
|
|
return $this->collapseGroupStatusCache = [];
|
2014-10-11 00:07:30 +02:00
|
|
|
}
|
2014-09-10 20:48:53 -07:00
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
return $this->collapseGroupStatusCache = $groups;
|
2014-09-10 20:48:53 -07:00
|
|
|
}
|
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
/**
|
|
|
|
* Sets a collapsed state.
|
|
|
|
*
|
|
|
|
* @param string $group
|
|
|
|
* @param string $status
|
|
|
|
*/
|
|
|
|
protected function setCollapseStatus($group, $status)
|
2014-09-10 20:48:53 -07:00
|
|
|
{
|
2017-06-10 15:42:24 +10:00
|
|
|
$statuses = $this->getCollapseStatuses();
|
|
|
|
|
2014-09-10 20:48:53 -07:00
|
|
|
$statuses[$group] = $status;
|
2017-06-10 15:42:24 +10:00
|
|
|
|
|
|
|
$this->collapseGroupStatusCache = $statuses;
|
|
|
|
|
|
|
|
$this->putSession($this->collapseSessionKey, $statuses);
|
2014-09-10 20:48:53 -07:00
|
|
|
}
|
|
|
|
|
2017-06-10 15:42:24 +10:00
|
|
|
/**
|
|
|
|
* Gets a collapsed state.
|
|
|
|
*
|
|
|
|
* @param string $group
|
|
|
|
* @param bool $default
|
|
|
|
* @return bool|string
|
|
|
|
*/
|
|
|
|
protected function getCollapseStatus($group, $default = true)
|
2014-09-10 20:48:53 -07:00
|
|
|
{
|
2017-06-10 15:42:24 +10:00
|
|
|
$statuses = $this->getCollapseStatuses();
|
|
|
|
|
2014-10-11 00:07:30 +02:00
|
|
|
if (array_key_exists($group, $statuses)) {
|
2014-09-10 20:48:53 -07:00
|
|
|
return $statuses[$group];
|
2014-10-11 00:07:30 +02:00
|
|
|
}
|
2014-09-10 20:48:53 -07:00
|
|
|
|
2016-03-28 15:47:29 +02:00
|
|
|
return $default;
|
2014-09-10 20:48:53 -07:00
|
|
|
}
|
2017-06-10 15:42:24 +10:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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);
|
|
|
|
}
|
2014-10-11 00:07:30 +02:00
|
|
|
}
|