• 10-02-2009, 05:14:35
    #1
    <?php
    /**
    defined('_JEXEC') or die('Restricted access');
    // no direct access
    defined('_JEXEC') or die('Restricted access');
    require_once (JPATH_BASE.DS.'components'.DS.'com_community'.DS.'models'.DS.'models.php');
    class CommunityModelSearch extends JCCModel
    {
    	var $_data = null;
    	var $_profile;
    	var $_pagination;
    	function CommunityModelSearch(){
    		parent::JCCModel();
     	 	global $mainframe;
     	 	// Get pagination request variables
     	 	$limit		= ($mainframe->getCfg('list_limit') == 0) ? 5 : $mainframe->getCfg('list_limit');
    	    $limitstart = JRequest::getVar('limitstart', 0, 'REQUEST');
     	 	// In case limit has been changed, adjust it
    	    $limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
    		$this->setState('limit',$limit);
     	 	$this->setState('limitstart',$limitstart);
    	}	
    	function &getFiltered($wheres = array())
    	{
    		$db			= &$this->getDBO();
    		$wheres[] = 'block = 0';
    		$query = "SELECT *"
    			. ' FROM #__users'
    			. ' WHERE ' . implode( ' AND ', $wheres )
    			. ' ORDER BY `id` DESC ';
    		$db->setQuery( $query );
    		if($db->getErrorNum()) {
    			JError::raiseError( 500, $db->stderr());
    		}
    		$result = $db->loadObjectList();
    		return $result;
    	}
    	/**
    	 * get pagination data
    	 */	 	
    	function getPagination()
    	{
    		return $this->_pagination;
    	}	
    	/**
    	 * Search for people
    	 * @param query	string	people's name to seach for	
    	 */	 
    	function searchPeople($query){
    		$db	= &$this->getDBO();
    		$filter = array();
    		$strict = true;
    		$regex = $strict? 
    		      '/^([.0-9a-z_-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' : 
    		       '/^([*+!.&#$¦\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' ;
    		$data = array();
    		//select only non empty field
    		foreach($query as $key => $value) {
    			if(!empty($query[$key]))
    			$data[$key]=$value;
    		}
    		$filterField = array();
    		// build where condition
    		foreach($data as $key => $value){
    			//for username of email
    			if($key=='q' && !empty($value)){
    				if (preg_match($regex, trim($value), $matches)){ 
    					$query = array($matches[1], $matches[2]);
    					$cond = $matches[1]."@".$matches[2];
    					$filter[] = "`email`=" . $db->Quote($cond);
    			    } else {
    					$filter[] = "(UCASE(`name`) like UCASE(" . $db->Quote('%'.$value.'%') . ") OR "
    								."UCASE(`username`) like UCASE(" . $db->Quote('%'.$value.'%') . ") )";
    			    } 
    		    }
    		    //for others fields
    		    // @todo: we need to verify that each field is really searchable
    		    if(preg_match('/^field([0-9]+)$/i',trim($key),$matches1)){
    		    	if(!is_array($value))
    					$filterField[] = "(`field_id`='{$matches1[1]}' AND `value` = '{$value}')";
    			}
    		}
    		$limit = $this->getState('limit');
    		$limitstart = $this->getState('limitstart');		
    		$finalResult = array();
    		if(count($filter)> 0 || count($filterField > 0)){
    // 			// get total record count.
    // 			$query = "SELECT count(distinct b.`id`) FROM #__community_fields_values a
    // 					  right join #__users b on (a.user_id = b.id)";	    			  
    // 			$query .= " WHERE b.block = 0 AND ".implode(' AND ',$filter);
    // 
    // 			$db->setQuery( $query );
    // 			$total = $db->loadResult();
    // 			
    			// Perform the simple search
    			$basicResult = null;
    			if(!empty($filter) && count($filter)>0){
    				$query = "SELECT distinct b.`id` FROM #__community_fields_values a
    						  right join #__users b on (a.user_id = b.id)";	    			  
    				$query .= " WHERE b.block = 0 AND ".implode(' AND ',$filter);
    				$db->setQuery( $query );
    				$basicResult = $db->loadResultArray();
    				if($db->getErrorNum()) {
    					JError::raiseError( 500, $db->stderr());
    				}
    			}
    			if($basicResult == null)
    				$basicResult = array();
    			// Perform advance search
    			$filterResult = null;
    			if(!empty($filterField) & count($filterField) > 0){
    				foreach($filterField as $f){
    					$query = "SELECT distinct b.`id` FROM #__community_fields_values a
    							  right join #__users b on (a.user_id = b.id)";	    			  
    					$query .= " WHERE b.block = 0 AND ". $f;
    					$db->setQuery( $query );
    					$result = $db->loadResultArray();
    					if($db->getErrorNum()) {
    						JError::raiseError( 500, $db->stderr());
    					}
    					if($filterResult == null)
    						$filterResult = $result;
    					elseif (!empty($filterResult )){
    						// We reduce the result only for intersected userid
    						$filterResult = array_intersect($filterResult, $result);
    					}
    				}
    			}
    			if($filterResult == null)
    				$filterResult = array();
    			$finalResult = array_merge($filterResult, $basicResult);
    			$total = count($finalResult);
    			// Appy pagination
    			if (empty($this->_pagination)) {
    		 	    jimport('joomla.html.pagination');
    		 	    $this->_pagination = new JPagination($total, $limitstart, $limit);
    		 	}
    		} 				
    //         //getting the actual records
    // 		$query = "SELECT distinct `user_id`,`username`,`email`,b.`id` FROM #__community_fields_values a
    // 				  right join #__users b on (a.user_id = b.id)
    // 				  WHERE b.block = 0 AND ".implode(' AND ',$filter);        
    // 		$query .= " LIMIT {$limitstart}, {$limit}";
    // 		
    // 		$id=array();		
    // 		if(count($filter)>0){
    // 			$db->setQuery( $query );
    // 			echo $db->getQuery();
    // 				
    // 			if($db->getErrorNum()) {
    // 				JError::raiseError( 500, $db->stderr());
    // 			}
    // 			
    // 			$rows = $db->loadObjectList();
    // 			
    // 			//get user profile
    // 			foreach($rows as $row){
    // 				$id[]=$row->id;
    // 			}
    // 						
    // 			$id = implode(",",$id);
    // 		}
    		//$finalResult = array('62','63');
    		if(empty($finalResult))
    			$finalResult = array(0);
    		$id = implode(",",$finalResult);
    		//print_r($finalResult);
    		$where = array("`id` IN (".$id.")");
    	    $result = $this->getFiltered($where);
    		return $result;
    	}
    	// @params $field, array with key[fieldcode] = value
    	// just use 1 field for now
    	function searchByFieldCode($field){
    // 					print_r($field);
    // 			exit;
    		CError::assert($field , '', '!empty', __FILE__ , __LINE__ );
    		$db			=& $this->getDBO();
    		$keys = array_keys($field);
    		$vals = array_values($field);		
    		$fieldId = $this->_getFieldIdFromFieldCode($keys[0]);
    		$sql = "SELECT `user_id` FROM jos_community_fields_values "
    			." WHERE `value`=". $db->Quote($vals[0]) 
    			." AND field_id=". $db->Quote($fieldId);
    		$db->setQuery($sql);
    		$result = $db->loadObjectList();
    		// need to return user object
    		$users = array();
    		foreach($result as $row){
    			$users [] =& CFactory::getUser($row->user_id);
    		}
    		return $users;
    	}
    	function _getFieldIdFromFieldCode($code)
    	{
    		CError::assert($code , '', '!empty', __FILE__ , __LINE__ );
    		$db	=& $this->getDBO();
    		$query	= 'SELECT' . $db->nameQuote( 'id' ) . ' '
    				. 'FROM ' . $db->nameQuote( '#__community_fields' ) . ' '
    				. 'WHERE ' . $db->nameQuote( 'fieldcode' ) . '=' . $db->Quote( $code );
    		$db->setQuery( $query );
    		$id		= $db->loadResult();
    		CError::assert($id , '', '!empty', __FILE__ , __LINE__ );
    		return $id;
    	}
    	/**
    	 * Method to get users list on this site
    	 * 	 
    	 **/	 	
    	function getPeople( $sorted = 'latest')
    	{
    		jimport('joomla.html.pagination');
    		$db	= &$this->getDBO();
    		$limit = $this->getState('limit');
    		$limitstart = $this->getState('limitstart');
    		// getting the actual records count
    		$query = "SELECT count(*) FROM #__users as b WHERE b.block = 0 ORDER BY `registerDate` DESC";
    		$db->setQuery($query);
    		$total = $db->loadResult();
    		switch( $sorted )
    		{
    			case 'online':
    				$query	= 'SELECT DISTINCT(a.id) '
    						. 'FROM ' . $db->nameQuote( '#__users' ) . ' AS a '
    						. 'LEFT JOIN ' . $db->nameQuote( '#__session' ) . ' AS b '
    						. 'ON a.id=b.userid '
    						. 'WHERE a.block=' . $db->Quote( '0' )
    						. 'ORDER BY b.userid DESC';
    				break;
    			default:
    				$query = JString::str_ireplace('count(*)', 'b.id', $query);
    				break;
    		}
    		$query	.= ' LIMIT ' . $limitstart . ',' . $limit;
    		$db->setQuery($query);
    		$result = $db->loadObjectList();
    		$this->_pagination = new JPagination($total, $limitstart, $limit);
    		$cusers = array();
    		for($i = 0; $i < count($result); $i++)
    		{
    			//$usr =& CFactory::getUser(	$result[$i]->id );
    			$usr =& CFactory::getUser(	$result[$i]->id );
    			$cusers[] = $usr;
    		}
    		return $cusers;
    	}
    }
    sistem search ederken database de yukardaki kodda search e temel olan tablolara ek olarak , jos_contact_details tablosunda "state" "country" satırlarından da arama yapmasını sağlamak için, bu koda nası bi edit yapmak gerekir..
    yardımcı olacaklara şimdiden teşekkürler..
  • 10-02-2009, 08:37:44
    #2
    Üyeliği durduruldu
    hazır scriptlerin bölümü web tabanlı uygulamalar kısmıdır
    https://www.r10.net/web-tabanli-uygulamalar/
  • 10-02-2009, 09:51:36
    #3
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    hazır scriptlerin bölümü web tabanlı uygulamalar kısmıdır
    https://www.r10.net/web-tabanli-uygulamalar/
    o kısma taşınmayı istirham edebiliri miyim sizden o halde.
    yada herangi bir moddan ..
    saolun.
  • 10-02-2009, 10:07:04
    #4
    Üyeliği durduruldu
    erdemgerekli adlı üyeden alıntı: mesajı görüntüle
    o kısma taşınmayı istirham edebiliri miyim sizden o halde.
    yada herangi bir moddan ..
    saolun.
    ben mod degilim zaten
  • 10-02-2009, 11:13:41
    #5
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    ben mod degilim zaten
    cemalpaşa mahallesindenim. toprağız galiba.: )
    bu konuda bana bi yardım yapabilirmisiniz?
  • 10-02-2009, 11:37:23
    #6
    Üyeliği durduruldu
    erdemgerekli adlı üyeden alıntı: mesajı görüntüle
    cemalpaşa mahallesindenim. toprağız galiba.: )
    bu konuda bana bi yardım yapabilirmisiniz?
    ömrümde hiç jooamla kullanmadim
    genelde kendim kodlamayi tercih ederim