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; |
} |
} |