public function singleWords() { if ($this->request->is('post')) { if (!empty($this->request['data']['mainValue'])) { $this->set('mainValue', $this->request['data']['mainValue']); $documentModel = ClassRegistry::init('Document'); $documentModel->recursive = 1; $documents = $documentModel->find('all'); $this->set('documents', $documents); $languageModel = ClassRegistry::init('Language'); $languageModel->recursive = 1; $languages = $languageModel->find('all'); $this->set('languages', $languages); $this->set('documentFilter', array_key_exists('documentFilter', $this->request['data']) ? $this->request['data']['documentFilter'] : 0); if (isset($this->request['data']['documentIds'])) { $documentIds = $this->request['data']['documentIds']; } else { $documentIds = array(); } $this->set('documentIds', $documentIds); $params = explode(',', $this->request['data']['mainValue']); $wordModel = ClassRegistry::init('Word'); $wordModel->recursive = 2; $options = array('order' => 'case Word.split when 1 then concat(Word.stem, Word.suffix) else Word.text end', 'conditions' => array('Word.id IN (' . QueryBuilder::singleWordChoices($params) . ')')); if (!empty($documentIds)) { array_push($options['conditions'], 'Word.id IN (' . QueryBuilder::singleWordDocuments($documentIds) . ')'); } else { array_push($options['conditions'], 'false'); } $totalCount = $wordModel->find('count', $options); $this->set('word_count', $totalCount); $page = 0; if (!empty($this->request['data']['page'])) { $page = $this->request['data']['page']; } $this->set('page', $page); $this->set('totalPages', (int) ($totalCount / $this->RESULTS_PER_PAGE) + 1); $options['limit'] = $this->RESULTS_PER_PAGE; $options['offset'] = $this->RESULTS_PER_PAGE * $page; $words = $wordModel->find('all', $options); $annotatedWords = array(); $contexts = array(); foreach ($words as $word) { array_push($annotatedWords, new AnnotatedWord($word)); array_push($contexts, $documentModel->query(" select * from documents inner join languages on languages.id = documents.language_id inner join sentences on documents.id = sentences.document_id and sentences.id = " . $word['Word']['sentence_id'] . " inner join words on sentences.id = words.sentence_id order by words.position;")); } if (count($annotatedWords) != count($contexts)) { die("annotatedWords is of different length than contexts"); } $this->set('words', $annotatedWords); $this->set('contexts', $contexts); $wordAnnotationTypeModel = ClassRegistry::init('WordAnnotationType'); $wordAnnotationTypeModel->recursive = 0; $this->set('wordAnnotationTypes', $wordAnnotationTypeModel->find('all')); } else { $this->Session->setFlash("Empty search query, add search criteria for all searched words."); return $this->redirect(array('action' => 'generator')); } } }