Example #1
0
 public function getAssignedKeywords()
 {
     if (($keywords = $this->getKeywords()) === false) {
         static::raiseError(__CLASS__ . '::getKeywords() returned false!');
         return false;
     }
     if (empty($keywords)) {
         return null;
     }
     $names = array();
     foreach ($keywords as $keyword_idx) {
         try {
             $keyword = new \Mtlda\Models\KeywordModel(array('idx' => $keyword_idx));
         } catch (\Exception $e) {
             static::raiseError(__METHOD__ . "(), failed to load KeywordModel({$keyword_idx})!");
             return false;
         }
         if (($name = $keyword->getName()) === false) {
             static::raiseError(get_class($keyword) . '::getName() returned false!');
             return false;
         }
         array_push($names, $name);
     }
     return implode(', ', $names);
 }
Example #2
0
 protected function buildKeywordSuggestions()
 {
     global $tmpl;
     $archive_item_keywords = array();
     if (!isset($this->archiveItem) || empty($this->archiveItem)) {
         static::raiseError(__METHOD__ . '(), have no item to operate on!');
         return false;
     }
     if (!$this->keywords->hasItems()) {
         return true;
     }
     if ($this->archiveItem->hasKeywords()) {
         if (($assigned_keywords = $this->archiveItem->getKeywords()) === false) {
             static::raiseError(get_class($this->archiveItem) . '::getKeywords() returned false!');
             return false;
         }
         foreach ($assigned_keywords as $idx) {
             try {
                 $keyword = new \Mtlda\Models\KeywordModel(array('idx' => $idx));
             } catch (\Exception $e) {
                 static::raiseError(__METHOD__ . '(), failed to load KeywordModel!', false, $e);
                 return false;
             }
             if (($name = $keyword->getName()) === false) {
                 static::raiseError(get_class($keyword) . '::getName() returned false!');
                 return false;
             }
             array_push($archive_item_keywords, $name);
         }
     }
     $sources = array();
     if ($this->archiveItem->hasTitle()) {
         if (($title = $this->archiveItem->getTitle()) === false) {
             static::raiseError(get_class($this->archiveItem) . '::getTitle() returned false!');
             return false;
         }
         array_push($sources, $title);
     }
     if (($filename = $this->archiveItem->getFileNameBase()) === false) {
         static::raiseError(get_class($this->archiveItem) . '::getFileName() returned false');
         return false;
     }
     array_push($sources, $filename);
     if ($this->archiveItem->hasIndices()) {
         if (($indices = $this->archiveItem->getIndices(true)) === false) {
             static::raiseError(get_class($this->archiveItem) . '::getIndices() returned false!');
             return false;
         }
         if (!isset($indices) || empty($indices) || !is_array($indices)) {
             static::raiseError(get_class($this->archiveItem) . '::getIndices() returned invalid data!');
             return false;
         }
         foreach ($indices as $index) {
             if (($text = $index->getDocumentText()) === false) {
                 static::raiseError(get_class($index) . '::getDocumentText() returned false!');
                 return false;
             }
             array_push($sources, $text);
         }
     }
     if (is_a($this->archiveItem, 'Mtlda\\Models\\DocumentModel') && $this->archiveItem->hasProperties()) {
         if (($properties = $this->archiveItem->getProperties()) === false) {
             static::raiseError(get_class($this->archiveItem) . '::getProperties() returned false!');
             return false;
         }
         if (!isset($properties) || empty($properties) || !is_array($properties)) {
             static::raiseError(get_class($this->archiveItem) . '::getProperties() returned invalid data!');
             return false;
         }
         foreach ($properties as $property) {
             if (($value = $property->getDocumentValue()) === false) {
                 static::raiseError(get_class($property) . '::getDocumentValue() returned false!');
                 return false;
             }
             array_push($sources, $value);
         }
     }
     if (($sources = array_unique($sources)) === false) {
         static::raiseError(__METHOD__ . '(), failed to filter sources!');
         return false;
     }
     $existing_keywords = array();
     foreach ($this->keywords->getItems() as $keyword) {
         if (($name = $keyword->getName()) === false) {
             static::raiseError(get_class($keyword) . '::getName() returned false!');
             return false;
         }
         array_push($existing_keywords, $name);
     }
     $suggestions = array();
     $words = array();
     foreach ($sources as $source) {
         $source = str_replace('_', ' ', $source);
         $source = preg_replace('/[^[:alnum:][:space:]]/u', '', $source);
         if (count($found_words = str_word_count($source, 1)) < 1) {
             continue;
         }
         array_walk($found_words, function (&$word, $key) {
             $word = trim($word);
             return true;
         });
         $found_words = array_filter($found_words, function ($word) {
             if (strlen($word) < 1) {
                 return false;
             }
             return true;
         });
         if (count($found_words) < 1) {
             continue;
         }
         foreach ($found_words as $word) {
             array_push($words, $word);
         }
     }
     foreach ($words as $key => $word) {
         if (isset($existing_keywords) && !empty($existing_keywords) && ($matching_keyword = preg_grep("/{$word}/", $existing_keywords)) && isset($matching_keyword) && !empty($matching_keyword) && is_array($matching_keyword) && count($matching_keyword) > 0 && ($matching_keyword = array_shift($matching_keyword))) {
             $words[$key] = $matching_keyword;
             continue;
         }
         unset($words[$key]);
     }
     if (($words = array_count_values($words)) === false) {
         static::raiseError(__METHOD__ . '(), array_count_values() returned false!');
         return false;
     }
     if (!arsort($words, SORT_NUMERIC)) {
         static::raiseError(__METHOD__ . '(), arsort() returned false!');
         return false;
     }
     if (($words = array_slice($words, 0, 10)) === false) {
         static::raiseError(__METHOD__ . '(), array_slice() returned false!');
         return false;
     }
     foreach ($words as $word => $occur) {
         if (in_array($word, $archive_item_keywords)) {
             continue;
         }
         $this->keywordSuggestions[$word] = $occur;
     }
     if (isset($this->keywordSuggestions) && !empty($this->keywordSuggestions)) {
         $tmpl->assign('has_keyword_suggestions', true);
     }
     if (!$this->archive->hasItems()) {
         return true;
     }
     $items = array();
     $filenames = array();
     $titles = array();
     $sources = array();
     foreach ($this->archive->getItems() as $document) {
         if (($idx = $document->getIdx()) === false) {
             static::raiseError(get_class($document) . '::getIdx() returned false!');
             return false;
         }
         $items[$idx] = $document;
         if (($filename = $document->getFileName()) === false) {
             static::raiseError(get_class($document) . '::getFileName() returned false!');
             return false;
         }
         if ($document->hasTitle() && ($title = $document->getTitle()) === false) {
             static::raiseError(get_class($document) . '::getTitle() returned false!');
             return false;
         }
         $filenames[$idx] = $filename;
         $titles[$idx] = $title;
     }
     if ($this->archiveItem->hasTitle()) {
         $archive_item_title = $this->archiveItem->getTitle();
     }
     $archive_item_filename = $this->archiveItem->getFileName();
     foreach ($filenames as $idx => $filename) {
         if (($diff = levenshtein($archive_item_filename, $filename)) === -1) {
             continue;
         }
         if ($diff > 10) {
             continue;
         }
         $document = $items[$idx];
         if (!$document->hasKeywords()) {
             continue;
         }
         if (($keywords = $document->getKeywords()) === false) {
             static::raiseError(get_class($document) . '::getKeywords() returned false!');
             return false;
         }
         if (!isset($keywords) || empty($keywords)) {
             continue;
         }
         foreach ($keywords as $idx) {
             try {
                 $keyword = new \Mtlda\Models\KeywordModel(array('idx' => $idx));
             } catch (\Exception $e) {
                 static::raiseError(__METHOD__ . '(), failed to load KeywordModel!', false, $e);
                 return false;
             }
             if (($name = $keyword->getName()) === false) {
                 $this->raiseErrror(get_class($keyword) . '::getName() returned false!');
                 return false;
             }
             array_push($sources, $name);
         }
     }
     if (isset($archive_item_title)) {
         foreach ($titles as $idx => $title) {
             if (($diff = levenshtein($archive_item_title, $title)) === -1) {
                 continue;
             }
             if ($diff > 10) {
                 continue;
             }
             $document = $items[$idx];
             if (!$document->hasKeywords()) {
                 continue;
             }
             if (($keywords = $document->getKeywords()) === false) {
                 static::raiseError(get_class($document) . '::getKeywords() returned false!');
                 return false;
             }
             if (!isset($keywords) || empty($keywords)) {
                 continue;
             }
             foreach ($keywords as $idx) {
                 try {
                     $keyword = new \Mtlda\Models\KeywordModel(array('idx' => $idx));
                 } catch (\Exception $e) {
                     static::raiseError(__METHOD__ . '(), failed to load KeywordModel!', false, $e);
                     return false;
                 }
                 if (($name = $keyword->getName()) === false) {
                     $this->raiseErrror(get_class($keyword) . '::getName() returned false!');
                     return false;
                 }
                 array_push($sources, $name);
             }
         }
     }
     if (($words = array_count_values($sources)) === false) {
         static::raiseError(__METHOD__ . '(), array_count_values() returned false!');
         return false;
     }
     if (!arsort($words, SORT_NUMERIC)) {
         static::raiseError(__METHOD__ . '(), arsort() returned false!');
         return false;
     }
     if (($words = array_slice($words, 0, 10)) === false) {
         static::raiseError(__METHOD__ . '(), array_slice() returned false!');
         return false;
     }
     foreach ($words as $word => $occur) {
         if (in_array($word, $archive_item_keywords)) {
             continue;
         }
         $this->keywordSuggestionsSimilar[$word] = $occur;
     }
     if (isset($this->keywordSuggestionsSimilar) && !empty($this->keywordSuggestionsSimilar)) {
         $tmpl->assign('has_keyword_suggestions_similar', true);
     }
     return true;
 }