| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- /* $Id: SearchEngineBase.php 2833 2007-04-08 11:58:47Z b4rt $ */
- /*************************************************************
- * TorrentFlux PHP Torrent Manager
- * www.torrentflux.com
- **************************************************************/
- /*
- This file is part of TorrentFlux.
- TorrentFlux is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- TorrentFlux is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with TorrentFlux; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- /*
- This is the base search engine class that is inherited from to
- create specialized search engines.
- Each new Search must use the following nameing standards.
- ???Engine.php where ??? is the search engine name.
- !! All changes and customizations should be done in those files and not in this file. !!
- */
- // Created By Kboy
- class SearchEngineBase
- {
- var $engineName = ''; // The Engine Name Must be the same as the File name
- // minus Engine.
- var $mainTitle = ''; // The displayed Main Title for the engine.
- var $mainURL = ''; // The Primary URL used in searching or paging.
- var $altURL = ''; // The alternate URL used in searching or paging.
- var $author = ''; // the author of this engine
- var $version = '';
- var $updateURL = 'http://www.torrentflux.com/forum/index.php/board,14.0.html';
- // ------------------------------------------------------------------------------
- // You should only need to set the above variables in each of the custom classes.
- // ------------------------------------------------------------------------------
- var $cfg = array(); // The config array that holds the config settings of
- // TorrentFlux at time of initialization
- // This may contain the mainCatalog and catFilter
- // as assigned by the admin tool.
- // If it doesn't then we ask the individual engines for there
- // mainCatalog and catFilter.
- var $mainCatalogName = ''; // The name of the Main Catalog
- var $mainCatalog = array(); // An array of Main Catalog entries.
- var $subCatalog = array(); // An array of Sub Catalog entries.
- var $catFilterName = ''; // Name of Filter used to retrieve from DB.
- var $catFilter = array(); // An array of categories to Filter out from DB.
- var $curRequest =''; // The actual Request sent to the Search Engine
- var $hideSeedless = false; // Boolean to determine if we should hide or show seedless torrents
- var $searchTerm = ''; // Search term passed into the engine
- var $htmlPage = ''; // HTML created by the engine for displaying
- var $msg = ''; // Message to be displayed
- var $pg = ''; // Page Variable used in Paging
- var $fp = ''; // Pointer to a socket connection
- var $initialized = false; // Boolean to determine if the search engine initialized ok.
- /**
- * Constructor
- */
- function SearchEngineBase() {
- die('Virtual Class -- cannot instantiate');
- }
- //----------------------------------------------------------------
- // Initialize the Search Engine setting up the Catalog and Filters.
- // and Testing the connection.
- function Initialize($cfg) {
- $rtnValue = false;
- $this->cfg = unserialize($cfg);
- $this->pg = tfb_getRequestVar('pg');
- if (empty($this->altURL))
- $this->altURL = $this->mainURL;
- if (empty($this->cfg)) {
- $this->msg = "Config not passed";
- $this->initialized = false;
- return;
- }
- $this->catFilterName = $this->engineName."GenreFilter";
- $this->mainCatalogName = $this->engineName."_catalog";
- if (array_key_exists('hideSeedless',$_SESSION))
- $this->hideSeedless = $_SESSION['hideSeedless'];
- $this->catFilter = (array_key_exists($this->catFilterName,$this->cfg))
- ? $this->cfg[$this->catFilterName]
- : array();
- if (array_key_exists($this->mainCatalogName,$this->cfg))
- $this->mainCatalog = $this->cfg[$this->mainCatalogName];
- else
- $this->populateMainCategories();
- if ($this->getConnection())
- $rtnValue = true;
- $this->closeConnection();
- // in PHP 5 use
- //$this->curRequest = http_build_query($_REQUEST);
- $this->curRequest = $this->http_query_builder($_REQUEST);
- $this->initialized = $rtnValue;
- }
- //------------------------------------------------------------------
- // This is for backward compatibility.
- function http_query_builder( $formdata, $numeric_prefix = null, $key = null ) {
- $res = array();
- foreach ((array)$formdata as $k=>$v) {
- $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k);
- if ($key) $tmp_key = $key.'['.$tmp_key.']';
- $res[] = (is_array($v) || is_object($v))
- ? $this->http_query_builder($v, null, $tmp_key)
- : $tmp_key."=".urlencode($v);
- }
- $separator = ini_get('arg_separator.output');
- return implode($separator, $res);
- }
- //----------------------------------------------------------------
- // Function to populate the mainCatalog
- function populateMainCategories() {
- return;
- }
- //----------------------------------------------------------------
- // Function to Get Sub Categories
- function getSubCategories($mainGenre) {
- return array();
- }
- //----------------------------------------------------------------
- // Function to test Connection.
- function getConnection() {
- // Try to connect
- if (!$this->fp = @fsockopen ($this->mainURL, 80, $errno, $errstr, 30)) {
- // Error Connecting
- $this->msg = "Error connecting to ".$this->mainURL."!";
- return false;
- }
- return true;
- }
- //----------------------------------------------------------------
- // Function to Close Connection.
- function closeConnection() {
- if($this->fp)
- fclose($this->fp);
- }
- //----------------------------------------------------------------
- // Function to return the URL needed by tf
- function searchURL() {
- return "index.php?iid=torrentSearch&searchEngine=".$this->engineName;
- }
- //----------------------------------------------------------------
- // Function to Make the GetRequest
- function makeRequest($request, $useAlt = false) {
- $refererURI = (isset($_SESSION['lastOutBoundURI']))
- ? $_SESSION['lastOutBoundURI']
- : "http://".$this->mainURL;
- $request = ($useAlt)
- ? "http://".$this->altURL. $request
- : "http://".$this->mainURL. $request;
- // require SimpleHTTP
- require_once("inc/classes/SimpleHTTP.php");
- // get data
- $this->htmlPage = SimpleHTTP::getData($request, $refererURI);
- // return
- return (SimpleHTTP::getState() == SIMPLEHTTP_STATE_OK);
- }
- //----------------------------------------------------------------
- // Function to Get Main Categories
- function getMainCategories($filtered = true) {
- $output = array();
- foreach ($this->mainCatalog as $mainId => $mainName) {
- if ($filtered) {
- // see if this is filtered out.
- if (!(@in_array($mainId, $this->catFilter)))
- $output[$mainId] = $mainName;
- } else {
- $output[$mainId] = $mainName;
- }
- }
- return $output;
- }
- //----------------------------------------------------------------
- // Function to Get Main Category Name
- function GetMainCatName($mainGenre) {
- $mainGenreName = '';
- foreach ($this->getMainCategories() as $mainId => $mainName) {
- if ($mainId == $mainGenre)
- $mainGenreName = $mainName;
- }
- return $mainGenreName;
- }
- //----------------------------------------------------------------
- // Function to setup the table header
- function tableHeader() {
- $output = "<table width=\"100%\" cellpadding=3 cellspacing=0 border=0>";
- $output .= "<br>\n";
- $output .= "<tr bgcolor=\"".$this->cfg["table_header_bg"]."\">";
- $output .= " <td> </td>";
- $output .= " <td><strong>Torrent Name</strong> (";
- $tmpURI = str_replace(array("?hideSeedless=yes","&hideSeedless=yes","?hideSeedless=no","&hideSeedless=no"),"",$_SERVER["REQUEST_URI"]);
- // Check to see if Question mark is there.
- $tmpURI .= (strpos($tmpURI,'?'))
- ? "&"
- : "?";
- $output .= ($this->hideSeedless == "yes")
- ? "<a href=\"". $tmpURI . "hideSeedless=no\">Show Seedless</a>"
- : "<a href=\"". $tmpURI . "hideSeedless=yes\">Hide Seedless</a>";
- $output .= ")</td>";
- $output .= " <td><strong>Category</strong></td>";
- $output .= " <td align=center><strong> Size</strong></td>";
- $output .= " <td><strong>Seeds</strong></td>";
- $output .= " <td><strong>Peers</strong></td>";
- $output .= "</tr>\n";
- return $output;
- }
- }
- ?>
|