winter/modules/backend/traits/CollapsableWidget.php

130 lines
3.5 KiB
PHP
Raw Normal View History

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
{
/**
* @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
/**
* @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
{
$this->setCollapseStatus(post('group'), post('status'));
2014-09-10 20:48:53 -07: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
{
if ($this->collapseGroupStatusCache !== false) {
return $this->collapseGroupStatusCache;
2014-10-11 00:07:30 +02:00
}
2014-09-10 20:48:53 -07:00
$groups = $this->getSession($this->collapseSessionKey, []);
2014-10-11 00:07:30 +02:00
if (!is_array($groups)) {
return $this->collapseGroupStatusCache = [];
2014-10-11 00:07:30 +02:00
}
2014-09-10 20:48:53 -07:00
return $this->collapseGroupStatusCache = $groups;
2014-09-10 20:48:53 -07:00
}
/**
* Sets a collapsed state.
*
* @param string $group
* @param string $status
*/
protected function setCollapseStatus($group, $status)
2014-09-10 20:48:53 -07:00
{
$statuses = $this->getCollapseStatuses();
2014-09-10 20:48:53 -07:00
$statuses[$group] = $status;
$this->collapseGroupStatusCache = $statuses;
$this->putSession($this->collapseSessionKey, $statuses);
2014-09-10 20:48:53 -07: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
{
$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
}
//
// 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
}