📜 ⬆️ ⬇️

Cakephp Sphinx behavior

On duty, I have to work with Cake and Sphinx . Once I got tired of doing a search to the sphinx with pens, and I decided to write a little behavior.
First you need to put sphinxapi.php in the app / vendors folder. Next, save the code to the sphinx.php file and put it in app / models / behaviors.
Actually code:

Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  1. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  2. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  3. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  4. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  5. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  6. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  7. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  8. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  9. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  10. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  11. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  12. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  13. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  14. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  15. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  16. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  17. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  18. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  19. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  20. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  21. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  22. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  23. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  24. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  25. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  26. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  27. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  28. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  29. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  30. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  31. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  32. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  33. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  34. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  35. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  36. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  37. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  38. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  39. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  40. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  41. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  42. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  43. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  44. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  45. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  46. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  47. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  48. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  49. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  50. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  51. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  52. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  53. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  54. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  55. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  56. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  57. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  58. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  59. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  60. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  61. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  62. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  63. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  64. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  65. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  66. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  67. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  68. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  69. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  70. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  71. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  72. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  73. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  74. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  75. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  76. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  77. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  78. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  79. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  80. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  81. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  82. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  83. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  84. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  85. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  86. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  87. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  88. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  89. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  90. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  91. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  92. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  93. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  94. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  95. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>
  96. Copy Source | Copy HTML <?php /** <br/> * Behavior for simple usage of Sphinx search engine <br/> * http://www.sphinxsearch.com <br/> * <br/> * @copyright 2008, Vilen Tambovtsev <br/> * @author Vilen Tambovtsev <br/> * @license http://www.opensource.org/licenses/mit-license.php The MIT License <br/> */ class SphinxBehavior extends ModelBehavior { /** <br/> * Used for runtime configuration of model <br/> */ var $runtime = array (); var $_defaults = array ( 'server' => 'localhost' , 'port' => 3312 ); /** <br/> * Spinx client object <br/> * <br/> * @var SphinxClient <br/> */ var $sphinx = null ; function setup(& $model , $config = array ()) { $settings = array_merge( $this ->_defaults, ( array ) $config ); $this ->settings[ $model ->alias] = $settings ; App::import( 'Vendor' , 'sphinxapi' ); $this ->runtime[ $model ->alias][ 'sphinx' ] = new SphinxClient(); $this ->runtime[ $model ->alias][ 'sphinx' ]->SetServer( $this ->settings[ $model ->alias][ 'server' ], $this ->settings[ $model ->alias][ 'port' ]); } /** <br/> * beforeFind Callback <br/> * <br/> * @param array $query <br/> * @return array Modified query <br/> * @access public <br/> */ function beforeFind(& $model , $query ) { if ( empty ( $query [ 'sphinx' ]) || empty ( $query [ 'search' ])) return true ; if ( $model ->findQueryType == 'count' ) { $model ->recursive = - 1 ; $query [ 'limit' ] = 1 ; } foreach ( $query [ 'sphinx' ] as $key => $setting ) { switch ( $key ) { case 'filter' : foreach ( $setting as $arg ) { $arg [ 2 ] = empty ( $arg [ 2 ]) ? false : $arg [ 2 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->SetFilter( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ]); } break ; case 'filterRange' : case 'filterFloatRange' : $method = 'Set' . $key ; foreach ( $setting as $arg ) { $arg [ 3 ] = empty ( $arg [ 3 ]) ? false : $arg [ 3 ]; $this ->runtime[ $model ->alias][ 'sphinx' ]->{ $method }( $arg [ 0 ], ( array ) $arg [ 1 ], $arg [ 2 ], $arg [ 3 ]); } break ; case 'matchMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetMatchMode( $setting ); break ; case 'sortMode' : $this ->runtime[ $model ->alias][ 'sphinx' ]->SetSortMode(key( $setting ), reset( $setting )); break ; default : break ; } } $this ->runtime[ $model ->alias][ 'sphinx' ]->SetLimits(( $query [ 'page' ] - 1 ) * $query [ 'limit' ], $query [ 'limit' ]); $indexes = ! empty ( $query [ 'sphinx' ][ 'index' ]) ? implode( ',' , $query [ 'sphinx' ][ 'index' ]) : '*' ; $result = $this ->runtime[ $model ->alias][ 'sphinx' ]->Query( $query [ 'search' ], $indexes ); if ( $result === false ) { trigger_error( "Search query failed: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastError()); return false ; } else if ( isset ( $result [ 'matches' ])) { if ( $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()) { trigger_error( "Search query warning: " . $this ->runtime[ $model ->alias][ 'sphinx' ]->GetLastWarning()); } } unset ( $query [ 'conditions' ]); unset ( $query [ 'order' ]); unset ( $query [ 'offset' ]); $query [ 'page' ] = 1 ; if ( $model ->findQueryType == 'count' ) { $result [ 'total' ] = ! empty ( $result [ 'total' ]) ? $result [ 'total' ] : 0 ; $query [ 'fields' ] = 'ABS(' . $result [ 'total' ] . ') AS count' ; } else { if ( isset ( $result [ 'matches' ])) $ids = array_keys( $result [ 'matches' ]); else $ids = array ( 0 ); $query [ 'conditions' ] = array ( $model ->alias . '.' . $model ->primaryKey => $ids ); $query [ 'order' ] = 'FIND_IN_SET(' . $model ->alias. '.' . $model ->primaryKey. ', \'' . implode( ',' , $ids ) . '\')' ; } return $query ; } } ?>


How to use:
In the model code, add
<?php
var $actsAs = array( 'Sphinx' );
?>


In the controller we use:
<?php
$sphinx
= array( 'matchMode' => SPH_MATCH_ALL , 'sortMode' => array( SPH_SORT_EXTENDED => '@relevance DESC' ));
$results = $this -> Film -> find ( 'all' , array( 'search' => ' ' , 'sphinx' => $sphinx ));
?>

FRT: reformatted the code, because Habr ate part

')

Source: https://habr.com/ru/post/41702/


All Articles