You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
796 lines
23 KiB
796 lines
23 KiB
<?php
|
|
namespace nzedb;
|
|
|
|
use app\models\Settings;
|
|
use nzedb\db\DB;
|
|
use nzedb\processing\adult\ADE;
|
|
use nzedb\processing\adult\ADM;
|
|
use nzedb\processing\adult\AEBN;
|
|
use nzedb\processing\adult\Hotmovies;
|
|
use nzedb\processing\adult\Popporn;
|
|
|
|
/**
|
|
* Class XXX
|
|
*/
|
|
class XXX
|
|
{
|
|
/**
|
|
* @var \nzedb\db\DB
|
|
*/
|
|
public $pdo;
|
|
|
|
/**
|
|
* What scraper class did we use -- used for template and trailer information
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $whichclass = '';
|
|
|
|
/**
|
|
* Current title being passed through various sites/api's.
|
|
* @var string
|
|
*/
|
|
protected $currentTitle = '';
|
|
|
|
/**
|
|
* @var \nzedb\Logger
|
|
*/
|
|
protected $debugging;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
protected $debug;
|
|
|
|
/**
|
|
* @var \nzedb\ReleaseImage
|
|
*/
|
|
protected $releaseImage;
|
|
|
|
protected $currentRelID;
|
|
|
|
protected $movieqty;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $showPasswords;
|
|
|
|
protected $cookie;
|
|
|
|
/**
|
|
* @param array $options Echo to cli / Class instances.
|
|
*/
|
|
public function __construct(array $options = [])
|
|
{
|
|
$defaults = [
|
|
'Echo' => false,
|
|
'ReleaseImage' => null,
|
|
'Settings' => null,
|
|
];
|
|
$options += $defaults;
|
|
|
|
$this->pdo = ($options['Settings'] instanceof DB ? $options['Settings'] : new DB());
|
|
$this->releaseImage = ($options['ReleaseImage'] instanceof ReleaseImage ? $options['ReleaseImage'] : new ReleaseImage($this->pdo));
|
|
|
|
$dummy = Settings::value('..maxxxxprocessed');
|
|
$this->movieqty = ($dummy != '') ? $dummy : 100;
|
|
$this->showPasswords = Releases::showPasswords();
|
|
$this->debug = nZEDb_DEBUG;
|
|
$this->echooutput = ($options['Echo'] && nZEDb_ECHOCLI);
|
|
$this->imgSavePath = nZEDb_COVERS . 'xxx' . DS;
|
|
$this->cookie = nZEDb_TMP . 'xxx.cookie';
|
|
|
|
$this->catWhere = 'AND categories_id IN (' .
|
|
Category::XXX_DVD . ', ' .
|
|
Category::XXX_WMV . ', ' .
|
|
Category::XXX_XVID . ', ' .
|
|
Category::XXX_X264 . ', ' .
|
|
Category::XXX_SD . ', ' .
|
|
Category::XXX_WEBDL . ') ';
|
|
|
|
if (nZEDb_DEBUG || nZEDb_LOGGING) {
|
|
$this->debug = true;
|
|
try {
|
|
$this->debugging = new Logger();
|
|
} catch (LoggerException $error) {
|
|
$this->_debug = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get info for a xxx id.
|
|
*
|
|
* @param int $xxxid
|
|
*
|
|
* @return array|bool
|
|
*/
|
|
public function getXXXInfo($xxxid)
|
|
{
|
|
return $this->pdo->queryOneRow(sprintf("SELECT *, UNCOMPRESS(plot) AS plot FROM xxxinfo WHERE id = %d", $xxxid));
|
|
}
|
|
|
|
/**
|
|
* Get movies for movie-list admin page.
|
|
*
|
|
* @param int $start
|
|
* @param int $num
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getRange($start, $num)
|
|
{
|
|
return $this->pdo->query(
|
|
sprintf('
|
|
SELECT *,
|
|
UNCOMPRESS(plot) AS plot
|
|
FROM xxxinfo
|
|
ORDER BY createddate DESC %s',
|
|
($start === false ? '' : ' LIMIT ' . $num . ' OFFSET ' . $start)
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get count of movies for movie-list admin page.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getCount()
|
|
{
|
|
$res = $this->pdo->queryOneRow('SELECT COUNT(id) AS num FROM xxxinfo');
|
|
return ($res === false ? 0 : $res['num']);
|
|
}
|
|
|
|
/**
|
|
* Get movie releases with covers for xxx browse page.
|
|
*
|
|
* @param $cat
|
|
* @param $start
|
|
* @param $num
|
|
* @param $orderBy
|
|
* @param $maxAge
|
|
* @param array $excludedCats
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getXXXRange($cat, $start, $num, $orderBy, $maxAge = -1, $excludedCats = [])
|
|
{
|
|
$catsrch = '';
|
|
if (count($cat) > 0 && $cat[0] != -1) {
|
|
$catsrch = (new Category(['Settings' => $this->pdo]))->getCategorySearch($cat);
|
|
}
|
|
|
|
$order = $this->getXXXOrder($orderBy);
|
|
|
|
$xxxmovies = $this->pdo->queryCalc(
|
|
sprintf("
|
|
SELECT SQL_CALC_FOUND_ROWS
|
|
xxx.id,
|
|
GROUP_CONCAT(r.id ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_id
|
|
FROM xxxinfo xxx
|
|
LEFT JOIN releases r ON xxx.id = r.xxxinfo_id
|
|
WHERE r.nzbstatus = 1
|
|
AND xxx.title != ''
|
|
AND r.passwordstatus %s
|
|
%s %s %s %s
|
|
GROUP BY xxx.id
|
|
ORDER BY %s %s %s",
|
|
$this->showPasswords,
|
|
$this->getBrowseBy(),
|
|
$catsrch,
|
|
($maxAge > 0
|
|
? 'AND r.postdate > NOW() - INTERVAL ' . $maxAge . 'DAY '
|
|
: ''
|
|
),
|
|
(count($excludedCats) > 0 ? ' AND r.categories_id NOT IN (' . implode(',', $excludedCats) . ')' : ''),
|
|
$order[0],
|
|
$order[1],
|
|
($start === false ? '' : ' LIMIT ' . $num . ' OFFSET ' . $start)
|
|
), true, nZEDb_CACHE_EXPIRY_MEDIUM
|
|
);
|
|
|
|
$xxxIDs = $releaseIDs = false;
|
|
|
|
if (is_array($xxxmovies['result'])) {
|
|
foreach ($xxxmovies['result'] as $xxx => $id) {
|
|
$xxxIDs[] = $id['id'];
|
|
$releaseIDs[] = $id['grp_release_id'];
|
|
}
|
|
}
|
|
|
|
$sql = sprintf("
|
|
SELECT
|
|
GROUP_CONCAT(r.id ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_id,
|
|
GROUP_CONCAT(r.rarinnerfilecount ORDER BY r.postdate DESC SEPARATOR ',') as grp_rarinnerfilecount,
|
|
GROUP_CONCAT(r.haspreview ORDER BY r.postdate DESC SEPARATOR ',') AS grp_haspreview,
|
|
GROUP_CONCAT(r.passwordstatus ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_password,
|
|
GROUP_CONCAT(r.guid ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_guid,
|
|
GROUP_CONCAT(rn.releases_id ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_nfoid,
|
|
GROUP_CONCAT(g.name ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_grpname,
|
|
GROUP_CONCAT(r.searchname ORDER BY r.postdate DESC SEPARATOR '#') AS grp_release_name,
|
|
GROUP_CONCAT(r.postdate ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_postdate,
|
|
GROUP_CONCAT(r.size ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_size,
|
|
GROUP_CONCAT(r.totalpart ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_totalparts,
|
|
GROUP_CONCAT(r.comments ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_comments,
|
|
GROUP_CONCAT(r.grabs ORDER BY r.postdate DESC SEPARATOR ',') AS grp_release_grabs,
|
|
xxx.*, UNCOMPRESS(xxx.plot) AS plot,
|
|
g.name AS group_name,
|
|
rn.releases_id AS nfoid
|
|
FROM releases r
|
|
LEFT OUTER JOIN groups g ON g.id = r.groups_id
|
|
LEFT OUTER JOIN release_nfos rn ON rn.releases_id = r.id
|
|
INNER JOIN xxxinfo xxx ON xxx.id = r.xxxinfo_id
|
|
WHERE r.nzbstatus = 1
|
|
AND xxx.id IN (%s)
|
|
AND xxx.title != ''
|
|
AND r.passwordstatus %s
|
|
%s %s %s %s
|
|
GROUP BY xxx.id
|
|
ORDER BY %s %s",
|
|
(is_array($xxxIDs) ? implode(',', $xxxIDs) : -1),
|
|
$this->showPasswords,
|
|
$this->getBrowseBy(),
|
|
$catsrch,
|
|
($maxAge > 0
|
|
? 'AND r.postdate > NOW() - INTERVAL ' . $maxAge . 'DAY '
|
|
: ''
|
|
),
|
|
(count($excludedCats) > 0 ? ' AND r.categories_id NOT IN (' . implode(',', $excludedCats) . ')' : ''),
|
|
$order[0],
|
|
$order[1]
|
|
);
|
|
$return = $this->pdo->query($sql, true, nZEDb_CACHE_EXPIRY_MEDIUM);
|
|
if (!empty($return)) {
|
|
$return[0]['_totalcount'] = (isset($xxxmovies['total']) ? $xxxmovies['total'] : 0);
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* Get the order type the user requested on the movies page.
|
|
*
|
|
* @param $orderBy
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function getXXXOrder($orderBy)
|
|
{
|
|
$orderArr = explode('_', (($orderBy == '') ? 'MAX(r.postdate)' : $orderBy));
|
|
switch ($orderArr[0]) {
|
|
case 'title':
|
|
$orderField = 'xxx.title';
|
|
break;
|
|
case 'posted':
|
|
default:
|
|
$orderField = 'MAX(r.postdate)';
|
|
break;
|
|
}
|
|
|
|
return [$orderField, ((isset($orderArr[1]) && preg_match('/^asc|desc$/i', $orderArr[1])) ? $orderArr[1] : 'desc')];
|
|
}
|
|
|
|
/**
|
|
* Order types for xxx page.
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public function getXXXOrdering()
|
|
{
|
|
return ['title_asc', 'title_desc'];
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
protected function getBrowseBy()
|
|
{
|
|
$browseBy = ' ';
|
|
$browseByArr = ['title', 'director', 'actors', 'genre', 'id'];
|
|
foreach ($browseByArr as $bb) {
|
|
if (isset($_REQUEST[$bb]) && !empty($_REQUEST[$bb])) {
|
|
$bbv = stripslashes($_REQUEST[$bb]);
|
|
if ($bb == "genre") {
|
|
$bbv = $this->getGenreID($bbv);
|
|
}
|
|
if ($bb == 'id') {
|
|
$browseBy .= 'AND xxx.' . $bb . '=' . $bbv;
|
|
} else {
|
|
$browseBy .= 'AND xxx.' . $bb . ' ' . $this->pdo->likeString($bbv, true, true);
|
|
}
|
|
}
|
|
}
|
|
return $browseBy;
|
|
}
|
|
|
|
/**
|
|
* Create click-able links to actors/genres/directors/etc..
|
|
*
|
|
* @param $data
|
|
* @param $field
|
|
*
|
|
* @return string
|
|
*/
|
|
public function makeFieldLinks($data, $field)
|
|
{
|
|
if (!isset($data[$field]) || $data[$field] == '') {
|
|
return '';
|
|
}
|
|
|
|
$tmpArr = explode(',', $data[$field]);
|
|
$newArr = [];
|
|
$i = 0;
|
|
foreach ($tmpArr as $ta) {
|
|
if (trim($ta) == '') {
|
|
continue;
|
|
}
|
|
if ($field == "genre") {
|
|
$ta = $this->getGenres(true, $ta);
|
|
$ta = $ta["title"];
|
|
}
|
|
if ($i > 7) {
|
|
break;
|
|
} //only use first 8
|
|
$newArr[] = '<a href="' . WWW_TOP . '/xxx?' . $field . '=' . urlencode($ta) . '" title="' . $ta . '">' . $ta . '</a>';
|
|
$i++;
|
|
}
|
|
return implode(', ', $newArr);
|
|
}
|
|
|
|
/**
|
|
* Update XXX Information from getXXXCovers.php in misc/testing/PostProc
|
|
*
|
|
* @param string $id
|
|
* @param string $title
|
|
* @param string $tagLine
|
|
* @param string $plot
|
|
* @param string $genre
|
|
* @param string $director
|
|
* @param string $actors
|
|
* @param string $extras
|
|
* @param string $productInfo
|
|
* @param string $trailers
|
|
* @param string $directUrl
|
|
* @param string $classUsed
|
|
* @param string $cover
|
|
* @param string $backdrop
|
|
*/
|
|
public function update(
|
|
$id = '', $title = '', $tagLine = '', $plot = '', $genre = '', $director = '',
|
|
$actors = '', $extras = '', $productInfo = '', $trailers = '', $directUrl = '', $classUsed = '', $cover = '', $backdrop = ''
|
|
) {
|
|
if (!empty($id)) {
|
|
|
|
$this->pdo->queryExec(
|
|
sprintf("UPDATE xxxinfo SET title = %s, tagline = %s, plot = COMPRESS(%s), genre = %s, director = %s,
|
|
actors = %s, extras = %s, productinfo = %s, trailers = %s, directurl = %s,
|
|
classused = %s, cover = %d, backdrop = %d, updateddate = NOW()
|
|
WHERE id = %d",
|
|
$this->pdo->escapeString($title),
|
|
$this->pdo->escapeString($tagLine),
|
|
$this->pdo->escapeString($plot),
|
|
$this->pdo->escapeString(substr($genre, 0, 64)),
|
|
$this->pdo->escapeString($director),
|
|
$this->pdo->escapeString($actors),
|
|
$this->pdo->escapeString($extras),
|
|
$this->pdo->escapeString($productInfo),
|
|
$this->pdo->escapeString($trailers),
|
|
$this->pdo->escapeString($directUrl),
|
|
$this->pdo->escapeString($classUsed),
|
|
(empty($cover) ? 0 : $cover),
|
|
(empty($backdrop) ? 0 : $backdrop),
|
|
$id
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $movie
|
|
*
|
|
* @return false|int|string
|
|
* @throws \Exception
|
|
*/
|
|
public function updateXXXInfo($movie)
|
|
{
|
|
$cover = $backdrop = 0;
|
|
$xxxID = -2;
|
|
$this->whichclass = 'aebn';
|
|
$mov = new AEBN();
|
|
$mov->cookie = $this->cookie;
|
|
ColorCLI::doEcho(ColorCLI::info('Checking AEBN for movie info'));
|
|
$res = $mov->processSite($movie);
|
|
|
|
if ($res === false) {
|
|
$this->whichclass = 'pop';
|
|
$mov = new Popporn();
|
|
$mov->cookie = $this->cookie;
|
|
ColorCLI::doEcho(ColorCLI::info('Checking PopPorn for movie info'));
|
|
$res = $mov->processSite($movie);
|
|
}
|
|
|
|
if ($res === false) {
|
|
$this->whichclass = 'adm';
|
|
$mov = new ADM();
|
|
$mov->cookie = $this->cookie;
|
|
ColorCLI::doEcho(ColorCLI::info('Checking ADM for movie info'));
|
|
$res = $mov->processSite($movie);
|
|
}
|
|
|
|
if ($res === false) {
|
|
$this->whichclass = 'ade';
|
|
$mov = new ADE();
|
|
ColorCLI::doEcho(ColorCLI::info('Checking ADE for movie info'));
|
|
$res = $mov->processSite($movie);
|
|
}
|
|
|
|
if ($res === false) {
|
|
$this->whichclass = 'hotm';
|
|
$mov = new Hotmovies();
|
|
$mov->cookie = $this->cookie;
|
|
ColorCLI::doEcho(ColorCLI::info('Checking HotMovies for movie info'));
|
|
$res = $mov->processSite($movie);
|
|
}
|
|
|
|
|
|
// If a result is true getAll information.
|
|
if ($res) {
|
|
if ($this->echooutput) {
|
|
|
|
switch ($this->whichclass) {
|
|
case 'aebn':
|
|
$fromstr = 'Adult Entertainment Broadcast Network';
|
|
break;
|
|
case 'ade':
|
|
$fromstr = 'Adult DVD Empire';
|
|
break;
|
|
case 'pop':
|
|
$fromstr = 'PopPorn';
|
|
break;
|
|
case 'adm':
|
|
$fromstr = 'Adult DVD Marketplace';
|
|
break;
|
|
case 'hotm':
|
|
$fromstr = 'HotMovies';
|
|
break;
|
|
default:
|
|
$fromstr = '';
|
|
}
|
|
ColorCLI::doEcho(ColorCLI::primary('Fetching XXX info from: ' . $fromstr));
|
|
}
|
|
$res = $mov->getAll();
|
|
} else {
|
|
// Nothing was found, go ahead and set to -2
|
|
return -2;
|
|
}
|
|
|
|
$res['cast'] = !empty($res['cast']) ? implode(',', $res['cast']) : '';
|
|
$res['genres'] = !empty($res['genres']) ? $this->getGenreID($res['genres']) : '';
|
|
|
|
$mov = [
|
|
'trailers' => !empty($res['trailers']) ? serialize($res['trailers']) : '',
|
|
'extras' => !empty($res['extras']) ? serialize($res['extras']) : '',
|
|
'productinfo' => !empty($res['productinfo']) ? serialize($res['productinfo']) : '',
|
|
'backdrop' => !empty($res['backcover']) ? $res['backcover'] : 0,
|
|
'cover' => !empty($res['boxcover']) ? $res['boxcover'] : 0,
|
|
'title' => !empty($res['title']) ? html_entity_decode($res['title'], ENT_QUOTES, 'UTF-8') : '',
|
|
'plot' => !empty($res['synopsis']) ? html_entity_decode($res['synopsis'], ENT_QUOTES, 'UTF-8') : '',
|
|
'tagline' => !empty($res['tagline']) ? html_entity_decode($res['tagline'], ENT_QUOTES, 'UTF-8') : '',
|
|
'genre' => !empty($res['genres']) ? html_entity_decode($res['genres'], ENT_QUOTES, 'UTF-8') : '',
|
|
'director' => !empty($res['director']) ? html_entity_decode($res['director'], ENT_QUOTES, 'UTF-8') : '',
|
|
'actors' => !empty($res['cast']) ? html_entity_decode($res['cast'], ENT_QUOTES, 'UTF-8') : '',
|
|
'directurl' => !empty($res['directurl']) ? html_entity_decode($res['directurl'], ENT_QUOTES, 'UTF-8') : '',
|
|
'classused' => $this->whichclass
|
|
];
|
|
|
|
$check = $this->pdo->queryOneRow(sprintf('SELECT id FROM xxxinfo WHERE title = %s', $this->pdo->escapeString($mov['title'])));
|
|
|
|
if ($check !== false && $check['id'] > 0) {
|
|
|
|
$xxxID = $check['id'];
|
|
|
|
// Update BoxCover.
|
|
if (!empty($mov['cover'])) {
|
|
$cover = $this->releaseImage->saveImage($xxxID . '-cover', $mov['cover'], $this->imgSavePath);
|
|
}
|
|
|
|
// BackCover.
|
|
if (!empty($mov['backdrop'])) {
|
|
$backdrop = $this->releaseImage->saveImage($xxxID . '-backdrop', $mov['backdrop'], $this->imgSavePath, 1920, 1024);
|
|
}
|
|
|
|
// Update Current XXX Information
|
|
$this->update($check['id'], $mov['title'], $mov['tagline'], $mov['plot'], $mov['genre'], $mov['director'], $mov['actors'], $mov['extras'], $mov['productinfo'], $mov['trailers'], $mov['directurl'], $mov['classused'], $cover, $backdrop);
|
|
}
|
|
|
|
// Insert New XXX Information
|
|
if ($check === false) {
|
|
$xxxID = $this->pdo->queryInsert(
|
|
sprintf('
|
|
INSERT INTO xxxinfo
|
|
(title, tagline, plot, genre, director, actors, extras, productinfo, trailers, directurl, classused, createddate, updateddate)
|
|
VALUES
|
|
(%s, %s, COMPRESS(%s), %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW())',
|
|
$this->pdo->escapeString($mov['title']),
|
|
$this->pdo->escapeString($mov['tagline']),
|
|
$this->pdo->escapeString($mov['plot']),
|
|
$this->pdo->escapeString(substr($mov['genre'], 0, 64)),
|
|
$this->pdo->escapeString($mov['director']),
|
|
$this->pdo->escapeString($mov['actors']),
|
|
$this->pdo->escapeString($mov['extras']),
|
|
$this->pdo->escapeString($mov['productinfo']),
|
|
$this->pdo->escapeString($mov['trailers']),
|
|
$this->pdo->escapeString($mov['directurl']),
|
|
$this->pdo->escapeString($mov['classused'])
|
|
)
|
|
);
|
|
// Update BoxCover.
|
|
if (!empty($mov['cover'])) {
|
|
$cover = $this->releaseImage->saveImage($xxxID . '-cover', $mov['cover'], $this->imgSavePath);
|
|
}
|
|
|
|
// BackCover.
|
|
if (!empty($mov['backdrop'])) {
|
|
$backdrop = $this->releaseImage->saveImage($xxxID . '-backdrop', $mov['backdrop'], $this->imgSavePath, 1920, 1024);
|
|
}
|
|
|
|
$this->pdo->queryExec(sprintf('UPDATE xxxinfo SET cover = %d, backdrop = %d WHERE id = %d', $cover, $backdrop, $xxxID));
|
|
}
|
|
|
|
if ($this->echooutput) {
|
|
ColorCLI::doEcho(
|
|
ColorCLI::headerOver(($xxxID !== false ? 'Added/updated XXX movie: ' . ColorCLI::primary($mov['title']) : 'Nothing to update for XXX movie: ' . ColorCLI::primary($mov['title'])))
|
|
);
|
|
}
|
|
|
|
return $xxxID;
|
|
}
|
|
|
|
/**
|
|
* Process XXX releases where xxxinfo is 0
|
|
*
|
|
* @throws \Exception
|
|
*/
|
|
public function processXXXReleases()
|
|
{
|
|
$res = $this->pdo->query(sprintf('
|
|
SELECT r.searchname, r.id
|
|
FROM releases r
|
|
WHERE r.nzbstatus = 1
|
|
AND r.xxxinfo_id = 0
|
|
%s
|
|
LIMIT %d',
|
|
$this->catWhere,
|
|
$this->movieqty
|
|
)
|
|
);
|
|
$movieCount = count($res);
|
|
|
|
if ($movieCount > 0) {
|
|
|
|
if ($this->echooutput) {
|
|
ColorCLI::doEcho(ColorCLI::header('Processing ' . $movieCount . ' XXX releases.'));
|
|
}
|
|
|
|
// Loop over releases.
|
|
foreach ($res as $arr) {
|
|
|
|
$idcheck = -2;
|
|
|
|
// Try to get a name.
|
|
if ($this->parseXXXSearchName($arr['searchname']) !== false) {
|
|
$check = $this->checkXXXInfoExists($this->currentTitle);
|
|
if ($check === false) {
|
|
$this->currentRelID = $arr['id'];
|
|
if ($this->debug && $this->echooutput) {
|
|
ColorCLI::doEcho('DB name: ' . $arr['searchname'], true);
|
|
}
|
|
if ($this->echooutput) {
|
|
ColorCLI::doEcho(ColorCLI::primaryOver('Looking up: ') . ColorCLI::headerOver($this ->currentTitle), true);
|
|
}
|
|
|
|
ColorCLI::doEcho(ColorCLI::info('Local match not found, checking web!'), true);
|
|
$idcheck = $this->updateXXXInfo($this->currentTitle);
|
|
} else {
|
|
ColorCLI::doEcho(ColorCLI::info('Local match found for XXX Movie: ' . ColorCLI::headerOver($this->currentTitle)), true);
|
|
$idcheck = (int)$check['id'];
|
|
}
|
|
} else {
|
|
ColorCLI::doEcho('.', true);
|
|
}
|
|
$this->pdo->queryExec(sprintf('UPDATE releases SET xxxinfo_id = %d WHERE id = %d %s', $idcheck, $arr['id'], $this->catWhere));
|
|
}
|
|
} elseif ($this->echooutput) {
|
|
ColorCLI::doEcho(ColorCLI::header('No xxx releases to process.'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks xxxinfo to make sure releases exist
|
|
*
|
|
* @param string $releaseName
|
|
*
|
|
* @return array|boolean
|
|
*/
|
|
protected function checkXXXInfoExists($releaseName)
|
|
{
|
|
return $this->pdo->queryOneRow(sprintf("SELECT id, title FROM xxxinfo WHERE title LIKE %s", "'" . $releaseName . "%'"));
|
|
}
|
|
|
|
/**
|
|
* Cleans up a searchname to make it easier to scrape.
|
|
*
|
|
* @param string $releaseName
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function parseXXXSearchName($releaseName)
|
|
{
|
|
$name = '';
|
|
$followingList = '[^\w]((2160|1080|480|720)(p|i)|AC3D|Directors([^\w]CUT)?|DD5\.1|(DVD|BD|BR)(Rip)?|BluRay|divx|HDTV|iNTERNAL|LiMiTED|(Real\.)?Proper|RE(pack|Rip)|Sub\.?(fix|pack)|Unrated|WEB-DL|(x|H)[-._ ]?264|xvid|[Dd][Ii][Ss][Cc](\d+|\s*\d+|\.\d+)|XXX|BTS|DirFix|Trailer|WEBRiP|NFO|(19|20)\d\d)[^\w]';
|
|
|
|
if (preg_match('/([^\w]{2,})?(?P<name>[\w .-]+?)' . $followingList . '/i', $releaseName, $matches)) {
|
|
$name = $matches['name'];
|
|
}
|
|
|
|
// Check if we got something.
|
|
if ($name !== '') {
|
|
|
|
// If we still have any of the words in $followingList, remove them.
|
|
$name = preg_replace('/' . $followingList . '/i', ' ', $name);
|
|
// Remove periods, underscored, anything between parenthesis.
|
|
$name = preg_replace('/\(.*?\)|[-._]/i', ' ', $name);
|
|
// Finally remove multiple spaces and trim leading spaces.
|
|
$name = trim(preg_replace('/\s{2,}/', ' ', $name));
|
|
// Remove Private Movies {d} from name better matching.
|
|
$name = trim(preg_replace('/^Private\s(Specials|Blockbusters|Blockbuster|Sports|Gold|Lesbian|Movies|Classics|Castings|Fetish|Stars|Pictures|XXX|Private|Black\sLabel|Black)\s\d+/i', '', $name));
|
|
// Remove Foreign Words at the end of the name.
|
|
$name = trim(preg_replace('/(brazilian|chinese|croatian|danish|deutsch|dutch|estonian|flemish|finnish|french|german|greek|hebrew|icelandic|italian|latin|nordic|norwegian|polish|portuguese|japenese|japanese|russian|serbian|slovenian|spanish|spanisch|swedish|thai|turkish)$/i', '', $name));
|
|
|
|
// Check if the name is long enough and not just numbers and not file (d) of (d) and does not contain Episodes and any dated 00.00.00 which are site rips..
|
|
if (strlen($name) > 5 && !preg_match('/^\d+$/', $name) &&
|
|
!preg_match('/( File \d+ of \d+|\d+.\d+.\d+)/', $name) &&
|
|
!preg_match('/(E\d+)/', $name) && !preg_match('/\d\d\.\d\d.\d\d/', $name)
|
|
) {
|
|
$this->currentTitle = $name;
|
|
|
|
return true;
|
|
} else {
|
|
$this->pdo->log->doEcho(".", false);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get all genres for search-filter.tpl
|
|
*
|
|
* @param bool $activeOnly
|
|
*
|
|
* @return array|null
|
|
*/
|
|
public function getAllGenres($activeOnly = false)
|
|
{
|
|
$ret = null;
|
|
|
|
if ($activeOnly) {
|
|
$res = $this->pdo->query("SELECT title FROM genres WHERE disabled = 0 AND type = " .
|
|
Category::XXX_ROOT . " ORDER BY title");
|
|
} else {
|
|
$res = $this->pdo->query("SELECT title FROM genres WHERE disabled = 1 AND type = " .
|
|
Category::XXX_ROOT . " ORDER BY title");
|
|
}
|
|
|
|
foreach ($res as $arr => $value) {
|
|
$ret[] = $value['title'];
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Get Genres for activeonly and/or an ID
|
|
*
|
|
* @param bool $activeOnly
|
|
* @param int|null $gid
|
|
*
|
|
* @return array|bool
|
|
*/
|
|
public function getGenres($activeOnly = false, $gid = null)
|
|
{
|
|
if (isset($gid)) {
|
|
$gid = " AND id = " . $this->pdo->escapeString($gid) . " ORDER BY title";
|
|
} else {
|
|
$gid = " ORDER BY title";
|
|
}
|
|
|
|
if ($activeOnly) {
|
|
return $this->pdo->queryOneRow("SELECT title FROM genres WHERE disabled = 0 AND type = " . Category::XXX_ROOT . $gid);
|
|
} else {
|
|
return $this->pdo->queryOneRow("SELECT title FROM genres WHERE disabled = 1 AND type = " . Category::XXX_ROOT . $gid);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get Genre ID's Of the title
|
|
*
|
|
* @param array|string $arr Array or String
|
|
*
|
|
* @return string If array .. 1,2,3,4 if string .. 1
|
|
*/
|
|
private function getGenreID($arr)
|
|
{
|
|
$ret = null;
|
|
|
|
if (!is_array($arr)) {
|
|
$res = $this->pdo->queryOneRow("SELECT id FROM genres WHERE title = " . $this->pdo->escapeString($arr));
|
|
if ($res !== false) {
|
|
return $res["id"];
|
|
}
|
|
}
|
|
|
|
foreach ($arr as $key => $value) {
|
|
$res = $this->pdo->queryOneRow("SELECT id FROM genres WHERE title = " . $this->pdo->escapeString($value));
|
|
if ($res !== false) {
|
|
$ret .= "," . $res["id"];
|
|
} else {
|
|
$ret .= "," . $this->insertGenre($value);
|
|
}
|
|
}
|
|
|
|
$ret = ltrim($ret, ",");
|
|
return ($ret);
|
|
}
|
|
|
|
/**
|
|
* Inserts Genre and returns last affected row (Genre ID)
|
|
*
|
|
* @param $genre
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function insertGenre($genre)
|
|
{
|
|
$res = '';
|
|
if (isset($genre)) {
|
|
$res = $this->pdo->queryInsert(sprintf("INSERT INTO genres (title, type, disabled) VALUES (%s ,%d ,%d)", $this->pdo->escapeString($genre), 6000, 0));
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Inserts Trailer Code by Class
|
|
*
|
|
* @param $whichclass
|
|
* @param $res
|
|
*
|
|
* @return string
|
|
*/
|
|
public function insertSwf($whichclass, $res)
|
|
{
|
|
$ret = '';
|
|
if ($whichclass === "ade") {
|
|
if (!empty($res)) {
|
|
$trailers = unserialize($res);
|
|
$ret .= "<object width='360' height='240' type='application/x-shockwave-flash' id='EmpireFlashPlayer' name='EmpireFlashPlayer' data='" . $trailers['url'] . "'>";
|
|
$ret .= "<param name='flashvars' value= 'streamID=" . $trailers['streamid'] . "&autoPlay=false&BaseStreamingUrl=" . $trailers['baseurl'] . "'>";
|
|
$ret .= "</object>";
|
|
|
|
return ($ret);
|
|
}
|
|
}
|
|
if ($whichclass === "pop") {
|
|
if (!empty($res)) {
|
|
$trailers = unserialize($res);
|
|
$ret .= "<embed id='trailer' width='480' height='360'";
|
|
$ret .= "flashvars='{$trailers['flashvars']}' allowfullscreen='true' allowscriptaccess='always' quality='high' name='trailer' style='undefined'";
|
|
$ret .= "src='{$trailers['baseurl']}' type='application/x-shockwave-flash'>";
|
|
|
|
return ($ret);
|
|
}
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
}
|
|
|