Subversion Repositories LCARS

Compare Revisions

Last modification

Ignore whitespace Rev 193 → Rev 194

/trunk/media/video/series/application/models/Series.php
New file
0,0 → 1,273
<?php
 
require_once 'application/models/databases/seriometer/tables/SeriesTable.php';
 
class Series extends \PointedEars\PHPX\Model
{
/**
* (non-PHPdoc)
* @see \PointedEars\PHPX\Model::$_persistentTable
*/
protected static $_persistentTable = 'SeriesTable';
 
/**
* (non-PHPdoc)
* @see \PointedEars\PHPX\Model::$_persistentId
*/
protected static $_persistentId = 'series_id';
 
/**
* (non-PHPdoc)
* @see \PointedEars\PHPX\Model::$_persistentProperties
*/
protected static $_persistentProperties = array(
'title',
'ignore',
'channel_id',
'last_seen',
'seasons',
'showtimes',
'url'
);
 
protected static $_urns = array(
'wiki' => 'http://de.wikipedia.org/wiki/'
);
 
/**
* @var int
*/
protected $_series_id;
 
/**
* @var string
*/
protected $_title;
 
/**
* @var bool
*/
protected $_ignore = false;
 
/**
* @var string
*/
protected $_channel;
 
/**
* @var string
*/
protected $_showtimes;
 
/**
* @var array
*/
protected $_seen;
 
/**
* @var int
*/
protected $_last_seen;
 
/**
* @var array[string]
*/
protected $_seasons;
 
/**
* @var string
*/
protected $_episode_list;
 
/**
* @var array
*/
protected $_episodes;
 
/**
* @var string
*/
protected $_url;
 
/* Computed properties */
 
/**
* Number of seen episodes
* @var int
*/
protected $_count;
 
/**
* The total number of episodes of this series
* @var int
*/
protected $_total;
 
/**
* The percentage of seen episodes
* @var double
*/
protected $_percentage;
 
/**
* Season ranges, consisting of arrays of the number of
* the first and last episode of a season.
* @var array
*/
protected $_season_ranges;
 
public function setSeries_id ($value)
{
$this->_series_id = (int) $value;
return $this;
}
 
public function setTitle ($value)
{
$this->_title = trim((string) $value);
return $this;
}
 
public function setIgnore ($value)
{
$this->_ignore = (bool) $value;
return $this;
}
 
public function setChannel ($value)
{
$this->_channel = trim((string) $value);
return $this;
}
 
public function setShowtimes ($value)
{
$this->_showtimes = trim((string) $value);
return $this;
}
 
public function setLast_seen ($value)
{
$this->_last_seen = ($value === null
? $value
: (($time = strtotime($value . ' GMT')) !== false ? $time : null));
return $this;
}
 
public function setSeasons ($value)
{
$this->_seasons = is_array($value) ? $value : explode(',', $value);
return $this;
}
 
public function setEpisode_list ($value)
{
$episode_list = (string) $value;
 
if ($episode_list !== null)
{
foreach (self::$_urns as $prefix => $urn)
{
if (preg_match("/^{$prefix}:/", $episode_list))
{
$episode_list = preg_replace("/^{$prefix}:/", $urn,
str_replace(' ', '_', $episode_list));
}
}
}
 
$this->_episode_list = $episode_list;
 
return $this;
}
 
public function setEpisodes ($value)
{
$this->_episodes = is_array($value) ? $value : null;
return $this;
}
 
public function setUrl ($value)
{
$this->_url = (string) $value;
return $this;
}
 
public function getCount ()
{
if ($this->_count === null)
{
$count = 0;
$seen = $this->seen;
 
if (is_array($seen))
{
$count = count($seen);
 
foreach ($seen as $episode_or_range)
{
if (is_array($episode_or_range))
{
$count += $episode_or_range[1] - $episode_or_range[0];
}
}
}
 
$this->_count = $count;
}
 
return $this->_count;
}
 
/**
* Returns the number of episodes of this series,
* based on the season or episodes data, preferring the former.
*
* @return int
*/
public function getTotal ()
{
if ($this->_total === null)
{
if (is_array($this->seasons))
{
$total = array_sum($this->seasons);
$episode_count = 1;
$this->_season_ranges = array();
 
foreach ($this->seasons as $season_key => $season_length)
{
if (is_int($season_key))
{
$this->_season_ranges[$season_key + 1] =
array($episode_count, $episode_count + $season_length - 1);
}
 
$episode_count += $season_length;
}
}
else
{
$total = max(array_keys($this->episodes));
}
 
$this->_total = $total;
}
 
return $this->_total;
}
 
/**
* Returns the percentage of seen episodes
* @return double
*/
public function getPercentage ()
{
if ($this->_percentage === null)
{
$this->_percentage = $this->count / $this->total * 100;
}
 
return $this->_percentage;
}
}
/trunk/media/video/series/application/models/mappers/SeriesMapper.php
New file
0,0 → 1,58
<?php
 
require_once 'application/models/Series.php';
 
class SeriesMapper extends \PointedEars\PHPX\Db\Mapper
{
private static $_instance;
 
protected function __construct ()
{
/* singleton */
}
 
/**
* @return SeriesMapper
*/
public static function getInstance ()
{
if (self::$_instance === null)
{
self::$_instance = new self();
}
 
return self::$_instance;
}
 
/**
* @param array $series
*/
public function importAll ($series)
{
foreach ($series as $key => &$data)
{
$data['title'] = $key;
$serie = new Series($data);
// var_dump($data);
var_dump($serie);
// $serie->save();
}
}
 
/**
* @param array $series
*/
public function getList ($series)
{
$series2 = [];
 
foreach ($series as $key => &$data)
{
$data['title'] = $key;
$serie = new Series($data);
$series2[] = $serie;
}
 
return $series2;
}
}