278 lines
7.3 KiB
PHP
278 lines
7.3 KiB
PHP
<?php
|
|
/**
|
|
* @package Campcaster
|
|
* @subpackage htmlUI
|
|
* @copyright 2010 Sourcefabric O.P.S.
|
|
*/
|
|
class uiScratchPad
|
|
{
|
|
/**
|
|
* @var uiBase
|
|
*/
|
|
private $Base;
|
|
|
|
/**
|
|
* The contents of the scratchpad.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $items;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $order;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $reloadUrl;
|
|
|
|
public function __construct(&$uiBase)
|
|
{
|
|
$this->Base =& $uiBase;
|
|
$this->items =& $_SESSION[UI_SCRATCHPAD_SESSNAME]['content'];
|
|
$this->order =& $_SESSION[UI_SCRATCHPAD_SESSNAME]['order'];
|
|
$this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close';
|
|
}
|
|
|
|
|
|
public function setReload()
|
|
{
|
|
$this->Base->redirUrl = $this->reloadUrl;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the scratchpad, automatically load from the DB if necessary.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function &get()
|
|
{
|
|
if (!is_array($this->items)) {
|
|
$this->_load();
|
|
}
|
|
return $this->items;
|
|
}
|
|
|
|
|
|
/**
|
|
* Load the scratchpad from the database and save it in the session.
|
|
* @return void
|
|
*/
|
|
private function _load()
|
|
{
|
|
$this->items = array();
|
|
// The scratchpad is kept as a user preference.
|
|
// The value of the preference is a list of of media file IDs
|
|
// separate by space characters.
|
|
$spData = $this->Base->gb->loadPref($this->Base->sessid, UI_SCRATCHPAD_KEY);
|
|
if (!PEAR::isError($spData)) {
|
|
// The ScratchPad was found in the DB,
|
|
// get the scratchpad list
|
|
$arr = explode(' ', $spData);
|
|
$maxLength = $this->Base->STATIONPREFS[UI_SCRATCHPAD_MAXLENGTH_KEY];
|
|
$arr = array_slice($arr, 0, $maxLength);
|
|
foreach ($arr as $item) {
|
|
//for audiofiles.
|
|
list($type, $savedId) = explode(":", $item);
|
|
|
|
if($type === 'pl') {
|
|
$id = $savedId;
|
|
if ($i = $this->Base->getPLMetaInfo($id)) {
|
|
$this->items[] = $i;
|
|
}
|
|
}
|
|
else {
|
|
$gunid = $savedId;
|
|
if (preg_match('/[0-9]{1,20}/', $gunid)) {
|
|
$f = StoredFile::RecallByGunid($gunid);
|
|
//$id = BasicStor::IdFromGunid($this->Base->toHex($gunid));
|
|
if (!PEAR::isError($f)) {
|
|
if ($i = $this->Base->getMetaInfo($f->getId())) {
|
|
$this->items[] = $i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} // fn _load
|
|
|
|
|
|
/**
|
|
* Save the scratchpad to the database.
|
|
* @return void
|
|
*/
|
|
public function save()
|
|
{
|
|
foreach ($this->items as $val) {
|
|
if($val['type'] === 'playlist') {
|
|
$str .= 'pl:'.$val['id'].' ';
|
|
}
|
|
else {
|
|
$str .= 'ac:'.$val['gunid'].' ';
|
|
}
|
|
}
|
|
$this->Base->gb->savePref($this->Base->sessid, UI_SCRATCHPAD_KEY, $str);
|
|
} // fn save
|
|
|
|
|
|
/**
|
|
* Add an item to the scratchpad
|
|
*
|
|
* @param string|array $ids
|
|
* One or more media IDs.
|
|
* @return boolean
|
|
*/
|
|
public function addItem($ids, $type=null)
|
|
{
|
|
if (!$this->Base->STATIONPREFS[UI_SCRATCHPAD_MAXLENGTH_KEY]) {
|
|
if (UI_WARNING) {
|
|
$this->Base->_retMsg('The scratchpad length is not set in system preferences, so it cannot be used.');
|
|
}
|
|
return false;
|
|
}
|
|
if (!$ids) {
|
|
if (UI_WARNING) {
|
|
$this->Base->_retMsg('No item(s) selected.');
|
|
}
|
|
return FALSE;
|
|
}
|
|
if (!is_array($ids)) {
|
|
$ids = array($ids);
|
|
}
|
|
|
|
$scratchpad = $this->get();
|
|
foreach ($ids as $id) {
|
|
if($type === 'playlist') {
|
|
$item = $this->Base->getPLMetaInfo($id);
|
|
} else {
|
|
$item = $this->Base->getMetaInfo($id);
|
|
}
|
|
|
|
foreach ($scratchpad as $key => $val) {
|
|
if ($val['id'] == $item['id']) {
|
|
unset($scratchpad[$key]);
|
|
if (UI_VERBOSE) {
|
|
$this->Base->_retMsg('Entry $1 is already on the scratchpad. It has been moved to the top of the list.', $item['title'], $val['added']);
|
|
}
|
|
} else {
|
|
#$this->Base->incAccessCounter($id);
|
|
}
|
|
}
|
|
$scratchpad = array_merge(array($item), is_array($scratchpad) ? $scratchpad : NULL);
|
|
}
|
|
|
|
$maxScratchpadLength = $this->Base->STATIONPREFS[UI_SCRATCHPAD_MAXLENGTH_KEY];
|
|
for ($n = 0; $n < $maxScratchpadLength; $n++) {
|
|
if (!isset($scratchpad[$n])) {
|
|
break;
|
|
}
|
|
if (is_array($scratchpad[$n])) {
|
|
$this->items[$n] = $scratchpad[$n];
|
|
}
|
|
}
|
|
ksort($this->items);
|
|
return true;
|
|
} // fn addItem
|
|
|
|
|
|
/**
|
|
* Remove one or more items from the scratchpad.
|
|
*
|
|
* @param string|array $ids
|
|
* @return boolean
|
|
*/
|
|
public function removeItems($ids)
|
|
{
|
|
if (!$ids) {
|
|
if (UI_WARNING) {
|
|
$this->Base->_retMsg('No item(s) selected.');
|
|
}
|
|
return FALSE;
|
|
}
|
|
if (!is_array($ids)) {
|
|
$ids = array($ids);
|
|
}
|
|
|
|
foreach ($ids as $id) {
|
|
$sp =& $this->get();
|
|
foreach ($sp as $key=>$val) {
|
|
if ($val['id'] === $id) {
|
|
unset ($sp[$key]);
|
|
#$this->Base->decAccessCounter($id);
|
|
}
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
} // fn removeItems
|
|
|
|
|
|
/**
|
|
* Enter description here...
|
|
*
|
|
* @param unknown_type $by
|
|
* @return void
|
|
*/
|
|
public function reorder($by)
|
|
{
|
|
if (count($this->items) == 0) {
|
|
return;
|
|
}
|
|
|
|
foreach ($this->items as $key=>$val) {
|
|
$s[$key] = $val[$by];
|
|
}
|
|
$curr = $this->order[$by];
|
|
$this->order = array();
|
|
if (is_null($curr) || $curr=='DESC') {
|
|
$this->order[$by] = 'ASC';
|
|
} else {
|
|
$this->order[$by] = 'DESC';
|
|
}
|
|
switch ($this->order[$by]) {
|
|
case "ASC":
|
|
asort($s);
|
|
break;
|
|
case "DESC":
|
|
arsort($s);
|
|
break;
|
|
}
|
|
foreach ($s as $key=>$val) {
|
|
$res[] = $this->items[$key];
|
|
}
|
|
$this->items = $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* Reload the metadata for the items in the scratchpad.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function reloadMetadata()
|
|
{
|
|
foreach ($this->items as $key => $val) {
|
|
if ($val['type'] === 'playlist') {
|
|
$this->items[$key] = $this->Base->getPLMetaInfo($val['id']);
|
|
} else {
|
|
$this->items[$key] = $this->Base->getMetaInfo($val['id']);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function reloadActivePLMetadata($id)
|
|
{
|
|
foreach ($this->items as $key => $val) {
|
|
if($val['id'] === $id) {
|
|
$this->items[$key] = $this->Base->getPLMetaInfo($val['id']);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
} // class uiScratchPad
|
|
?>
|