Add basket

This commit is contained in:
2012-01-05 00:44:23 +00:00
parent 885d12ceb7
commit b6a0899141
10 changed files with 367 additions and 38 deletions

View File

@@ -0,0 +1,104 @@
<?php
class MediaListing_Basket {
const CONF_BasketContents = 'basket.contents';
protected $items;
protected $cached_total_size = null;
protected $source_prefixes = null;
public function __construct() {
$this->items = array();
$this->restoreSession();
}
public function restoreSession() {
$session = MediaListing_Main::instance()->session();
if ($session->exists(static::CONF_BasketContents)) {
$this->items = $session->get(static::CONF_BasketContents);
}
}
public function saveSession() {
$session = MediaListing_Main::instance()->session();
$session->set(static::CONF_BasketContents, $this->items);
}
public function addItems($items) {
if ( ! is_array($items)) {
$items = array($items);
}
$this->items = array_merge($this->items, $items);
$this->saveSession();
}
public function getItems() {
return $this->items;
}
public function clear() {
$this->items = array();
$this->saveSession();
}
public function removeItems($items) {
if ( ! is_array($items)) {
$items = array($items);
}
$this->items = array_values(array_diff($this->items, $items));
$this->saveSession();
}
public function count() {
return count($this->items);
}
public function contains($item) {
return in_array($item, $this->items);
}
protected function loadSourcePrefixes() {
if ($this->source_prefixes !== null) {
return;
}
$config = MediaListing_Main::instance()->config();
$sources = $config->get('sources');
$this->source_prefixes = array();
foreach ($sources as $source_path) {
list($name, $path) = explode(':', $source_path);
$this->source_prefixes[$name] = $path;
}
}
public function size($item) {
$this->loadSourcePrefixes();
list($source,$path) = explode(':', $item);
return MediaListing_Main::recursiveFilesize($this->source_prefixes[$source] . '/' . $path);
}
public function totalSize() {
if ($this->cached_total_size === null) {
$this->cached_total_size = 0;
$this->loadSourcePrefixes();
foreach ($this->items as $item_path) {
list($source,$path) = explode(':', $item_path);
$this->cached_total_size += MediaListing_Main::recursiveFilesize($this->source_prefixes[$source] . '/' . $path);
}
}
return $this->cached_total_size;
}
}
?>

View File

@@ -11,24 +11,30 @@ class MediaListing_Main extends SihnonFramework_Main {
protected $smarty;
protected $request;
protected $basket;
protected function __construct() {
parent::__construct();
}
public function init() {
parent::init();
$request_string = isset($_GET['l']) ? $_GET['l'] : '';
$this->request = new MediaListing_RequestParser($request_string, $this->template_dir, $this->template_code_dir);
$this->basket = new MediaListing_Basket();
if (ML_File == 'index') {
$this->smarty = new Smarty();
$this->smarty->template_dir = $this->template_dir;
$this->smarty->compile_dir = '../private/tmp/templates';
$this->smarty->cache_dir = '../private/tmp/cache';
$this->smarty->config_dir = '../private/tmp/config';
$this->smarty->registerPlugin('modifier', 'formatDuration', array('MediaListing_Main', 'formatDuration'));
$this->smarty->registerPlugin('modifier', 'formatFilesize', array('MediaListing_Main', 'formatFilesize'));
$this->smarty->assign('title', 'Media Listing');
$this->smarty->assign('version', '0.1');
$this->smarty->assign('messages', array());
@@ -62,6 +68,14 @@ class MediaListing_Main extends SihnonFramework_Main {
return $this->request;
}
/**
*
* @return MediaListing_Basket
*/
public function basket() {
return $this->basket;
}
}