All pastes #746032 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-22 22:09 UTC
rendered paste body
	function search() {
		uses('sanitize');
		uses('set');
		$this->allowed = true;
		$this->set('states',$this->State->generateList());
		$this->set('types',$this->Course->Type->generateList());
		if(empty($this->data)) {
			$this->render();
		} else {
			//cuida das palavras no assunto...
			$words = Sanitize::paranoid($this->data['Search']['subject'], array(' '));
			$wordsarray = explode(" ",$words);
			array_unshift($wordsarray,$words);
			$wordsarray = array_unique($wordsarray);
			
			//cuida de procurar por um local específico
			if(!empty($this->data['Search']['city'])) {
				$this->Place->unbindModel(array('hasAndBelongsToMany' => array('Course')));
				$placevals = $this->Place->findAll(array('Place.city' => array($this->data['Search']['city'])));
				$places = Set::extract($placevals, '{n}.Place.id');
			}
			
			//cuida de procurar por alguma coisa nos módulos e nos dados do curso de acordo com as palavras
			foreach($wordsarray as $word) {
				$mod_conditions['OR'][] = "Module.body LIKE '%{$word}%'";
				$course_conditions['OR'][] = "Course.title LIKE '%{$word}%'";
			}
			$modvals = $this->Module->findAll($mod_conditions);
			$mods = Set::extract($modvals, '{n}.Module.id');

			$coursevals = $this->Course->findAll($course_conditions);
			$courses = Set::extract($coursevals, '{n}.Course.id');

			//prepara a busca no modelo
			$this->Course->recursive = 2;
			$conditions = array();
			(!empty($this->data['Search']['state'])) ? $conditions['Provider.state_id'] = $this->data['Search']['state'] : "";
			(!empty($this->data['Search']['type'])) ? $conditions['Course.type_id'] = $this->data['Search']['type'] : "";
			(!empty($placevals)) ? $conditions['CoursesPlace.place_id'] = $places : "";
			(!empty($coursevals)) ? $conditions['Course.id'] = $courses : "";
			(!empty($modvals)) ? $conditions['Module.id'] = $mods : "";
			//$conditions['Course.moderated'] = 1;
			
			/** /
			pr($conditions);
			die();
			/**/
			
			//envia os resultados
			$this->Course->bindModel(array('hasOne'=>array('CoursesPlace'=>array()), 'hasMany' => array('Module' => array())));
			$this->set('results', $this->Course->findAll($conditions,null,'Course.rank DESC'));
			
			//mostra os resultados
			$this->render();
		}
	}