'. t("Replaces the default \'description\' text on free-tagging textfields on node edit pages with a list of taxonomy terms in that vocabulary, with appropriate labeling"). '
'; break; } return $output; } /** * Valid permissions for this module * @return array An array of valid permissions for the suggestedterms module */ /** * Implementation of hook_perm(). */ function suggestedterms_perm() { return array('administer suggested terms configuration'); } /** * Build tags for each term. * * @ingroup themeable * @param $name * The term name to theme. */ function theme_suggestedterm($name) { if (FALSE !== strpos($name, ',')) { $name = '"'. $name .'"'; } return "{$name}"; } /** * Creates all spans from vocabulary terms * @return string A string containing the clickable spans for the suggestedterms module */ function _suggestedterms_build_suggestions($vid, $sort_order) { // get total terms set by admin $total_terms = variable_get('suggestedterms_maximum_displayed', 5); // get sort order set by admin switch ($sort_order) { case SUGGESTEDTERMS_SORT_POPULAR: $query = "SELECT t.name AS name, COUNT(t.name) AS total FROM {term_data} t INNER JOIN {term_node} n ON (t.tid = n.tid) WHERE t.vid = %d GROUP BY t.name ORDER BY total desc"; break; case SUGGESTEDTERMS_SORT_RECENT: $query = "SELECT t.name AS name FROM {term_data} t INNER JOIN {term_node} n ON (t.tid = n.tid) WHERE t.vid = %d GROUP BY t.name ORDER BY t.tid desc"; break; case SUGGESTEDTERMS_SORT_RECENT_USED: $query = "SELECT t.name AS name FROM {term_data} t INNER JOIN {term_node} n ON (t.tid = n.tid) WHERE t.vid = %d /*GROUP BY t.name*/ ORDER BY n.nid desc"; break; default: $query = "SELECT t.name AS name FROM {term_data} t INNER JOIN {term_node} n ON (t.tid = n.tid) WHERE t.vid = %d GROUP BY t.name ORDER BY t.name"; break; } // $query_result = ($total_terms > 0) ? db_query_range($query, $vid, 0, $total_terms) : db_query($query, $vid); $query_result = db_query_range($query, $vid, 0, 100); $terms = array(); while($record = db_fetch_object($query_result)) { $terms[] = theme('suggestedterm', check_plain($record->name)); } $terms = array_unique($terms); $terms = array_slice($terms,0,$total_terms); return implode(', ', $terms); } /** * Implementation of hook_form_alter(). */ function suggestedterms_form_alter($form_id, &$form) { if ((isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) && isset($form['taxonomy']['tags'])) { $path = drupal_get_path('module', 'suggestedterms'); drupal_add_js($path . '/suggestedterms.js'); // if multiple vocabularies, loop over each foreach ($form['taxonomy']['tags'] as $vid => $thisindex) { // if free-tagging taxonomy is true, add new links for each free-tag textfield. $sort_order = variable_get('suggestedterms_sort_order', SUGGESTEDTERMS_SORT_NAME); switch ($sort_order) { case SUGGESTEDTERMS_SORT_POPULAR: $tag_description = 'Most popular terms'; break; case SUGGESTEDTERMS_SORT_RECENT: $tag_description = 'Recently added'; break; case SUGGESTEDTERMS_SORT_RECENT_USED: $tag_description = 'Recently used'; break; default: $tag_description = 'Terms by name'; break; } // build the suggested terms and set in description tag $form['taxonomy']['tags'][$vid]['#description'] = t($tag_description) . ': ' . _suggestedterms_build_suggestions($vid, $sort_order); } } } /** * Administration page for suggested terms */ function suggestedterms_admin() { $form['suggestedterms_maximum_displayed'] = array( '#type' => 'textfield', '#title' => t('Maximum number of links'), '#default_value' => variable_get('suggestedterms_maximum_displayed', 5), '#size' => 2, '#maxlength' => 2, '#description' => t('The maximum number of links to display in the block. Enter 0 to show all.'), ); $form['suggestedterms_sort_order'] = array( '#type' => 'radios', '#title' => t('Link sort order'), '#default_value' => variable_get('suggestedterms_sort_order', SUGGESTEDTERMS_SORT_NAME), '#description' => t("The sort order for the links displayed."), '#options' => array( SUGGESTEDTERMS_SORT_POPULAR => t('Most used'), SUGGESTEDTERMS_SORT_NAME => t('Alphabetically'), SUGGESTEDTERMS_SORT_RECENT => t('Most recently added'), SUGGESTEDTERMS_SORT_RECENT_USED => t('Most recently used'), ), ); return system_settings_form($form); } /** * Menu in admin for suggested terms */ function suggestedterms_menu() { $items = array(); $items[] = array( 'path' => 'admin/content/suggestedterms', 'title' => t('Suggested terms'), 'description' => t('Provide integrated suggestions of recent or popular tags from the given vocabulary.'), 'callback' => 'drupal_get_form', 'callback arguments' => 'suggestedterms_admin', 'access' => user_access('administer suggested terms configuration'), 'type' => MENU_NORMAL_ITEM, ); return $items; }