0); if (empty($settings['vocabulary'])) { // Get existing taxonomy vocabularies. $vocab = $options = array(); $options = _rules_action_taxonomy_get_vocab(); $form['settings']['vocabulary'] = array( '#type' => 'select', '#title' => t('Vocabulary'), '#options' => $options, '#description' => !empty($options) ? t('Select the vocabulary.') : t('There are no existing vocabularies, you should add one.', array('@add-url' => url('/admin/content/taxonomy/add/vocabulary'))), '#required' => TRUE, '#disabled' => empty($options), ); // Hide some form elements in the first step. $form['new']['#access'] = FALSE; $form['input_help']['#access'] = FALSE; $form['weight']['#access'] = FALSE; // Replace the usual submit handlers with our own handler. $form['submit']['#submit'] = array('rules_action_taxonomy_load_term_form_step_submit'); $form['submit']['#value'] = t('Continue'); } else { $options = array(); $vocabulary = taxonomy_vocabulary_load($settings['vocabulary']); $terms = taxonomy_get_tree($vocabulary->vid); foreach ($terms as $term) { $options[$term->tid] = check_plain($term->name); } $form['settings']['term'] = array( '#type' => 'fieldset', '#title' => t("Select a term"), '#description' => empty($options) ? t('There are no terms in the vocabulary, you should add one.', array('@add-url' => url('admin/content/taxonomy/'. $vocabulary->vid .'/add/term'))) : t('Select an existing term from vocabulary !vocab or manually enter the name of the term that should be added or removed from the content.', array('!vocab' => $vocabulary->name)), ); $form['settings']['term']['term_select'] = rules_taxonomy_form($vocabulary->vid, !empty($settings['term']['term_select']) ? $settings['term']['term_select'] : 0); $form['settings']['term']['term_text'] = array( '#type' => 'textarea', '#title' => t('Select by term id'), '#default_value' => !empty($settings['term']['term_text']) ? $settings['term']['term_text'] : '', '#disabled' => empty($options), '#description' => t('Optional: enter the term id (not the term name) that should be loaded . If this field is used "Select a term" field will be ignored.'), ); } } function rules_action_taxonomy_load_term_form_step_submit($form, &$form_state) { $form_state['element']['#settings']['vocabulary'] = $form_state['values']['settings']['vocabulary']; } /** * Own version of taxonomy_form(), which forces the form to be not multiple. */ function rules_taxonomy_form($vid, $value = 0, $help = NULL, $name = 'taxonomy') { $vocabulary = taxonomy_vocabulary_load($vid); $help = ($help) ? $help : $vocabulary->help; return _taxonomy_term_select(check_plain($vocabulary->name), $name, $value, $vid, $help, FALSE, t('- None selected -')); } /** * Action: Add a new term to vocabulary configuration form. * * As we allow adding terms to vocabularies that are created on the fly, we * can't present the term's advanced settings. */ function rules_action_taxonomy_add_term_form($settings, &$form, $form_state) { // Fields definition taken from taxonomy_form_term(). $form['settings']['term'] = array( '#type' => 'fieldset', '#title' => t('Term Identification'), '#collapsible' => TRUE, ); $form['settings']['term']['name'] = array( '#type' => 'textfield', '#title' => t('Term name'), '#default_value' => !empty($settings['term']['name']) ? $settings['term']['name'] : '', '#maxlength' => 255, '#description' => t('The name of this term.'), '#required' => TRUE, ); $form['settings']['term']['description'] = array( '#type' => 'textarea', '#title' => t('Description'), '#default_value' => !empty($settings['term']['description']) ? $settings['term']['description'] : '', '#description' => t('A description of the term. To be displayed on taxonomy/term pages and RSS feeds.'), ); } /** * Action: Load a vocabulary configuration form. */ function rules_action_taxonomy_load_vocab_form($settings, &$form, $form_state) { $form['settings']['vocabulary'] = array( '#type' => 'fieldset', '#title' => t('Vocabulary selection'), ); $options = _rules_action_taxonomy_get_vocab(); $form['settings']['vocabulary']['vocab_select'] = array( '#type' => 'select', '#title' => t('Select a vocabulary'), '#options' => $options, '#default_value' => !empty($settings['vocabulary']['vocab_select']) ? $settings['vocabulary']['vocab_select'] : '', '#description' => !empty($options) ? t('Select the vocabulary.') : t('There are no existing vocabularies, you should add one.', array('@add-url' => url('admin/content/taxonomy/add/vocabulary'))), '#required' => TRUE, '#disabled' => empty($options), ); $form['settings']['vocabulary']['vocab_text'] = array( '#type' => 'textarea', '#title' => t('Select by vocabulary id'), '#default_value' => !empty($settings['vocabulary']['vocab_text']) ? $settings['vocabulary']['vocab_text'] : '', '#disabled' => empty($options), '#description' => t('Optional: Enter the vocabulary id (not the vocabulary name) that should be loaded. If this field is used, the "Select a vocabulary" field will be ignored.'), ); } /** * Action: Create a new vocabulary configuration form. * * @see rules_action_taxonomy_add_vocab_submit(). */ function rules_action_taxonomy_add_vocab_form($settings, &$form, $form_state) { module_load_include('inc', 'taxonomy', 'taxonomy.admin'); $form['settings']['vocab'] = array( '#type' => 'fieldset', '#title' => t('Vocabulary settings'), ); $form['settings']['vocab']['vocab'] = taxonomy_form_vocabulary($form_state, !empty($settings) ? $settings : array()); // Remove the 'Save' button. unset($form['settings']['vocab']['vocab']['submit']); } /** * Action: Create a new vocabulary submit handler. * * Flatten the vocabulary settings so they can be passed to * taxonomy_form_vocabulary(). */ function rules_action_taxonomy_add_vocab_submit(&$settings, $form, $form_state) { $vocab = array(); if (!empty($settings['vocab'])) { foreach ($settings['vocab']['vocab'] as $key => $values) { if (is_array($values)) { if (!empty($values['nodes'])) { // User array_filter for the nodes, otherwise all content types will // be chosen. $values['nodes'] = array_filter($values['nodes']); } $vocab += $values; } else { $vocab[$key] = $values; } } } $settings = $vocab; } /** * Helper function; Return all existing vocabularies. */ function _rules_action_taxonomy_get_vocab() { $vocabs = taxonomy_get_vocabularies(); $options = array(); foreach ($vocabs as $vocab) { $options[$vocab->vid] = check_plain($vocab->name); } return $options; } /** * Condition: Check for terms; Configuration form. */ function rules_condition_content_has_term_form($settings, &$form) { $vocabularies = taxonomy_get_vocabularies(); $options = array(); foreach ($vocabularies as $vocabulary) { $terms = taxonomy_get_tree($vocabulary->vid); foreach($terms as $term) { $options[check_plain($vocabulary->name)][$term->tid] = check_plain($term->name); } } $form['settings']['tids'] = array( '#type' => 'select', '#title' => t('Taxonomy terms'), '#options' => $options, '#multiple' => TRUE, '#default_value' => isset($settings['tids']) ? $settings['tids'] : array(), '#required' => TRUE, ); } /** * @} */