'fieldset', '#title' => t('Linkit field settings'), '#collapsible' => FALSE, '#collapsed' => FALSE, ); // Enable Linkit on this field instance. $form['instance']['settings']['linkit']['enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Linkit for this field.'), '#default_value' => isset($instance['settings']['linkit']['enable']) ? $instance['settings']['linkit']['enable'] : 0, '#description' => t('Do not use this for CKeditor and TinyMCE fields. You will have to configure this on the wysiwyg/ckeditor profile.'), ); $profiles = linkit_profile_field_load_all(); $options = array(); foreach ($profiles as $profile) { $options[$profile->name] = $profile->admin_title; } // Sort the options. natsort($options); $form['instance']['settings']['linkit']['profile'] = array( '#type' => 'select', '#title' => t('Profile'), '#options' => $options, '#empty_option' => t('- Select a profile -'), '#default_value' => isset($instance['settings']['linkit']['profile']) ? $instance['settings']['linkit']['profile'] : '', '#states' => array( 'invisible' => array( 'input[name="instance[settings][linkit][enable]"]' => array('checked' => FALSE), ), 'required' => array( 'input[name="instance[settings][linkit][enable]"]' => array('checked' => TRUE), ), ), '#element_validate' => array('linkit_field_profile_validate'), ); // Enable Linkit on this field instance. $form['instance']['settings']['linkit']['button_text'] = array( '#type' => 'textfield', '#title' => t('Button text that activates linkit modal.'), '#default_value' => isset($instance['settings']['linkit']['button_text']) ? $instance['settings']['linkit']['button_text'] : t('Search'), ); } } /** * Validation callback; Only validate the profile field if linkit is enabled on * the instance. * * @see linkit_form_field_ui_field_edit_form_alter() */ function linkit_field_profile_validate($element, &$form_state, $form) { if (isset($form_state['values']['instance']['settings']['linkit']['enable']) && $form_state['values']['instance']['settings']['linkit']['enable']) { if (empty($element['#value'])) { form_error($element, t('You must select an profile.')); } } } /** * After build callback. * * @param array $element * Form API element. * @param array $form_state * State of form the element belongs to. * * @return array * Form API element with attached Linkit functionality. */ function linkit_field_element_after_build(array $element, array &$form_state) { // Only proceed if the field is attached to an entity. if (!isset($element['#entity_type'])) { return $element; } $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']); if (empty($instance['settings']['linkit']['enable'])) { return $element; } // Load the profile. /* @var \LinkitProfile $profile */ $profile = linkit_profile_load($instance['settings']['linkit']['profile']); if (!$profile || !isset($profile->data['insert_plugin']['plugin'])) { return $element; } // Load the insert plugin for the profile. $insert_plugin = linkit_insert_plugin_load($profile->data['insert_plugin']['plugin']); $js_settings = array( 'helper' => 'field', 'source' => $element['#id'], 'profile' => $instance['settings']['linkit']['profile'], 'insertPlugin' => $profile->data['insert_plugin']['plugin'], ); // Special treatment for link fields. if ('link_field' == $element['#type']) { $js_settings['source'] = $element['url']['#id']; // @see link_field_info() // @see link_field_instance_settings_form() // // Link fields have a title field, but value could // be changed only for those options. if (in_array($instance['settings']['title'], array('optional', 'required'))) { $js_settings['titleField'] = $element['title']['#id']; } } // Add Linkit dialog button to the element suffix. $element['#field_suffix'] = l(empty($instance['settings']['linkit']['button_text']) ? t('Search') : $instance['settings']['linkit']['button_text'], '', array( 'attributes' => array( 'class' => array( "button", "linkit-field-button", "linkit-field-{$js_settings['source']}", ), ), )); // Attach js files and settings Linkit needs. $element['#attached']['library'][] = array('linkit', 'base'); $element['#attached']['library'][] = array('linkit', 'field'); $element['#attached']['js'][] = $insert_plugin['javascript']; $element['#attached']['js'][] = array( 'type' => 'setting', 'data' => array( 'linkit' => array('fields' => array($js_settings)), ), ); return $element; }