function process_category($field_id, $cat_name, $form_id) { $cat_name = trim($cat_name); if ($cat_name == '') { return $cat_name; } $job_map =& $this->FMD->getOption('job_map'); // job post mappings $category_id = JB_match_category_id_from_name($cat_name, $form_id); if (!$category_id) { $category_id = 0; // this will make this function return 0 unless error or $category_id is assigned. // What to do if cannot find the category_id from $cat_name ? switch ($job_map[$field_id]['cat_mode']) { case 'ADD_NEW': // add new category using $job_map[$key]['parent_category'] as parent $category_id = $this->add_category($job_map[$field_id]['parent_category'], $cat_name, $form_id); break; case 'ADD_MATCH': // ADD_MATCH is only available for jobs // try to match the category by breaking up the data in to words, and then search each word for the // category/ $cat_match = $job_map[$field_id]['cat_match']; // get the element name, eg. jamit|jobsFeed|job|title $category_id = JB_match_text_to_category($this->clean_data($this->data[$cat_match]['data']), $form_id); if ($category_id === false) { $this->set_import_error("Error. Cannot match category for: [" . $cat_name . "] field_id: [{$field_id}] "); } break; case 'ERROR': // Throw an error & skip the whole record, because a category cannot be found $this->set_import_error("Error. No code exists for '" . $cat_name . "' in the database, when importing <" . $job_map[$field_id]['element'] . "> "); return false; break; case 'IGNORE': break; } } return $category_id; }
function jb_match_text_to_category($text, $form_id, $lang = '') { $MAX_SEARCH = 5; $i = 0; if (!$lang) { $lang = JB_get_default_lang(); } if (strlen($text) == 0) { return false; } $words = preg_split("/\\s+/", $text); $result = array_count_values(array_map('strtolower', $words)); // Returns an associative array of values from input as keys and their count as value. Case insensitive arsort($result); while (($word = key($result)) && $i < $MAX_SEARCH) { $i++; // match to category // return $category_id if (strlen($word) < 3) { // ignore any words with 2 or less chars continue; } if ($cat_name = JB_match_category_id_from_name($word, $form_id, $lang = '')) { return $cat_name; } next($result); } return false; }