diff --git a/lib/DB/patches/0122~general.sql b/lib/DB/patches/0122~general.sql new file mode 100644 index 000000000..156bd3ded --- /dev/null +++ b/lib/DB/patches/0122~general.sql @@ -0,0 +1,4 @@ +ALTER TABLE musicinfo ADD FULLTEXT INDEX ix_musicinfo_artist_title_ft (artist, title); +ALTER TABLE bookinfo ADD FULLTEXT INDEX ix_bookinfo_author_title_ft (author, title); +ALTER TABLE consoleinfo ADD FULLTEXT INDEX ix_consoleinfo_title_platform_ft (title, platform); +UPDATE `tmux` set `value` = '122' where `setting` = 'sqlpatch'; \ No newline at end of file diff --git a/lib/Konsole.php b/lib/Konsole.php index 0aadab4b0..6bd415906 100644 --- a/lib/Konsole.php +++ b/lib/Konsole.php @@ -101,13 +101,29 @@ class Konsole public function getConsoleInfoByName($title, $platform) { - return $this->pdo->queryOneRow( - sprintf( - "SELECT * FROM consoleinfo WHERE title %s AND platform %s", - $this->pdo->likeString($title, true, true), - $this->pdo->likeString($platform, true, true) - ) - ); + //only used to get a count of words + $searchwords = $searchsql = ''; + $ft = $this->pdo->queryDirect("SHOW INDEX FROM consoleinfo WHERE key_name = 'ix_consoleinfo_title_platform_ft'"); + if ($ft->rowCount() !== 2) { + $searchsql .= sprintf(" title %s AND platform %s'", $this->pdo->likeString($title, true, true), $this->pdo->likeString($platform, true, true)); + } else { + $title = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $title); + $title = preg_replace('/[^\w ]+/', '', $title); + $title = trim(preg_replace('/\s\s+/i', ' ', $title)); + $title = trim($title); + $words = explode(' ', $title); + + foreach ($words as $word) { + $word = trim(rtrim(trim($word), '-')); + if ($word !== '' && $word !== '-') { + $word = '+' . $word; + $searchwords .= sprintf('%s ', $word); + } + } + $searchwords = trim($searchwords); + $searchsql .= sprintf(" MATCH(title, platform) AGAINST(%s IN BOOLEAN MODE)", $this->pdo->escapeString($searchwords)); + } + return $this->pdo->queryOneRow(sprintf("SELECT * FROM consoleinfo WHERE %s", $searchsql)); } public function getRange($start, $num) @@ -640,7 +656,7 @@ class Konsole $this->update( $consoleId, $con['title'], $con['asin'], $con['url'], $con['salesrank'], - $con['platform'], $con['publisher'], $con['releasedate'], $con['esrb'], + $con['platform'], $con['publisher'], (isset($con['releasedate']) ? $con['releasedate']: null), $con['esrb'], $con['cover'], $con['consolegenreid'], (isset($con['review']) ? $con['review'] : null) ); } diff --git a/lib/copy_this/www/lib/Books.php b/lib/copy_this/www/lib/Books.php index f1c94cda6..eb12e46bc 100644 --- a/lib/copy_this/www/lib/Books.php +++ b/lib/copy_this/www/lib/Books.php @@ -97,9 +97,38 @@ class Books public function getBookInfoByName($author, $title) { - return $this->pdo->queryOneRow(sprintf('SELECT * FROM bookinfo WHERE author %s AND title %s', $this->pdo->likeString($author, true, true), $this->pdo->likeString($title, true, true))); + $pdo = $this->pdo; + $like = 'ILIKE'; + if ($pdo->dbSystem() === 'mysql') { + $like = 'LIKE'; + } + + //only used to get a count of words + $searchwords = $searchsql = ''; + $ft = $pdo->queryDirect("SHOW INDEX FROM bookinfo WHERE key_name = 'ix_bookinfo_author_title_ft'"); + if ($ft->rowCount() !== 2) { + $searchsql .= sprintf(" author LIKE %s AND title %s %s'", $pdo->escapeString('%' . $author . '%'), $like, $pdo->escapeString('%' . $title . '%')); + } else { + $title = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $title); + $title = preg_replace('/[^\w ]+/', '', $title); + $title = trim(preg_replace('/\s\s+/i', ' ', $title)); + $title = trim($title); + $words = explode(' ', $title); + + foreach ($words as $word) { + $word = trim(rtrim(trim($word), '-')); + if ($word !== '' && $word !== '-') { + $word = '+' . $word; + $searchwords .= sprintf('%s ', $word); + } + } + $searchwords = trim($searchwords); + $searchsql .= sprintf(" MATCH(author, title) AGAINST(%s IN BOOLEAN MODE)", $pdo->escapeString($searchwords)); + } + return $pdo->queryOneRow(sprintf("SELECT * FROM bookinfo WHERE %s", $searchsql)); } + public function getRange($start, $num) { if ($start === false) { diff --git a/lib/copy_this/www/lib/IAFD.php b/lib/copy_this/www/lib/IAFD.php index 0b7c48e0c..99f9c2774 100644 --- a/lib/copy_this/www/lib/IAFD.php +++ b/lib/copy_this/www/lib/IAFD.php @@ -7,8 +7,8 @@ class IAFD const ADE = "Adult DVD Empire"; - const IAFDSEARCHURL = "http://www.iafd.com/results.asp?searchtype=title&searchstring="; - const IAFDURL = "http://www.iafd.com"; + const IAFDSEARCHURL = "http://iafd.com.prx.proxyunblocker.org/results.asp?searchtype=title&searchstring="; + const IAFDURL = "http://iafd.com.prx.proxyunblocker.org"; const HM = "Hot Movies"; public $classUsed = ""; public $cookie = ""; diff --git a/lib/copy_this/www/lib/Musik.php b/lib/copy_this/www/lib/Musik.php index d7afcf52e..ad6c515fe 100644 --- a/lib/copy_this/www/lib/Musik.php +++ b/lib/copy_this/www/lib/Musik.php @@ -103,7 +103,36 @@ class Musik */ public function getMusicInfoByName($artist, $album) { - return $this->pdo->queryOneRow(sprintf("SELECT * FROM musicinfo WHERE title %s AND artist %s", $this->pdo->likeString($album, true, true), $this->pdo->likeString($artist, true, true))); + $pdo = $this->pdo; + $like = 'ILIKE'; + if ($pdo->dbSystem() === 'mysql') { + $like = 'LIKE'; + } + + //only used to get a count of words + $searchwords = $searchsql = ''; + $ft = $pdo->queryDirect("SHOW INDEX FROM musicinfo WHERE key_name = 'ix_musicinfo_artist_title_ft'"); + if ($ft->rowCount() !== 2) { + $searchsql .= sprintf(" artist LIKE %s AND title %s %s'", $pdo->escapeString('%' . $artist . '%'), $like, $pdo->escapeString('%' . $album . '%')); + } else { + $album = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $album); + $album = preg_replace('/[^\w ]+/', '', $album); + $album = preg_replace('/(WEB|FLAC|CD)/', '', $album); + $album = trim(preg_replace('/\s\s+/i', ' ', $album)); + $album = trim($album); + $words = explode(' ', $album); + + foreach ($words as $word) { + $word = trim(rtrim(trim($word), '-')); + if ($word !== '' && $word !== '-') { + $word = '+' . $word; + $searchwords .= sprintf('%s ', $word); + } + } + $searchwords = trim($searchwords); + $searchsql .= sprintf(" MATCH(artist, title) AGAINST(%s IN BOOLEAN MODE)", $pdo->escapeString($searchwords)); + } + return $pdo->queryOneRow(sprintf("SELECT * FROM musicinfo WHERE %s", $searchsql)); } /** @@ -374,7 +403,7 @@ class Musik } if (isset($amaz->Items->Item->ItemAttributes->Title)) { - $mus['title'] = (string) $amaz->Items->Item->ItemAttributes->Title; + $mus['title'] = (string)$amaz->Items->Item->ItemAttributes->Title; if (empty($mus['title'])) { return false; } @@ -390,41 +419,41 @@ class Musik } // Get album properties. - $mus['coverurl'] = (string) $amaz->Items->Item->LargeImage->URL; + $mus['coverurl'] = (string)$amaz->Items->Item->LargeImage->URL; if ($mus['coverurl'] != "") { $mus['cover'] = 1; } else { $mus['cover'] = 0; } - $mus['asin'] = (string) $amaz->Items->Item->ASIN; + $mus['asin'] = (string)$amaz->Items->Item->ASIN; - $mus['url'] = (string) $amaz->Items->Item->DetailPageURL; + $mus['url'] = (string)$amaz->Items->Item->DetailPageURL; $mus['url'] = str_replace("%26tag%3Dws", "%26tag%3Dopensourceins%2D21", $mus['url']); - $mus['salesrank'] = (string) $amaz->Items->Item->SalesRank; + $mus['salesrank'] = (string)$amaz->Items->Item->SalesRank; if ($mus['salesrank'] == "") { $mus['salesrank'] = 'null'; } - $mus['artist'] = (string) $amaz->Items->Item->ItemAttributes->Artist; + $mus['artist'] = (string)$amaz->Items->Item->ItemAttributes->Artist; if (empty($mus['artist'])) { - $mus['artist'] = (string) $amaz->Items->Item->ItemAttributes->Creator; + $mus['artist'] = (string)$amaz->Items->Item->ItemAttributes->Creator; if (empty($mus['artist'])) { $mus['artist'] = ""; } } - $mus['publisher'] = (string) $amaz->Items->Item->ItemAttributes->Publisher; + $mus['publisher'] = (string)$amaz->Items->Item->ItemAttributes->Publisher; - $mus['releasedate'] = $this->pdo->escapeString((string) $amaz->Items->Item->ItemAttributes->ReleaseDate); + $mus['releasedate'] = $this->pdo->escapeString((string)$amaz->Items->Item->ItemAttributes->ReleaseDate); if ($mus['releasedate'] == "''") { $mus['releasedate'] = 'null'; } $mus['review'] = ""; if (isset($amaz->Items->Item->EditorialReviews)) { - $mus['review'] = trim(strip_tags((string) $amaz->Items->Item->EditorialReviews->EditorialReview->Content)); + $mus['review'] = trim(strip_tags((string)$amaz->Items->Item->EditorialReviews->EditorialReview->Content)); } $mus['year'] = $year; @@ -434,7 +463,7 @@ class Musik $mus['tracks'] = ""; if (isset($amaz->Items->Item->Tracks)) { - $tmpTracks = (array) $amaz->Items->Item->Tracks->Disc; + $tmpTracks = (array)$amaz->Items->Item->Tracks->Disc; $tracks = $tmpTracks['Track']; $mus['tracks'] = (is_array($tracks) && !empty($tracks)) ? implode('|', $tracks) : ''; }