From 86623ca99f057e8fdeca17cf404e9e2b894e2319 Mon Sep 17 00:00:00 2001
From: Claudiu Cristea <clau.cristea@gmail.com>
Date: Tue, 8 Nov 2011 17:18:44 +0200
Subject: [PATCH] #1335424 by claudiu.cristea: Added Title as a select.

---
 link.module |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/link.module b/link.module
index 16a5fad..cba9a02 100644
--- a/link.module
+++ b/link.module
@@ -89,6 +89,7 @@ function link_field_instance_settings_form($field, $instance) {
     'optional' => t('Optional Title'),
     'required' => t('Required Title'),
     'value' => t('Static Title'),
+    'select' => t('Selected Title'),
     'none' => t('No Title'),
   );
 
@@ -105,6 +106,23 @@ function link_field_instance_settings_form($field, $instance) {
     '#title' => t('Static title'),
     '#default_value' => isset($instance['settings']['title_value']) ? $instance['settings']['title_value'] : '',
     '#description' => t('This title will always be used if &ldquo;Static Title&rdquo; is selected above.'),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="instance[settings][title]"]' => array('value' => 'value'),
+      ),
+    ),
+  );
+
+  $form['title_allowed_values'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Title allowed values'),
+    '#default_value' => isset($instance['settings']['title_allowed_values']) ? $instance['settings']['title_allowed_values'] : '',
+    '#description' => t('When using "Selected Title", you can allow users to select the title from a limited set of values (eg. Home, Office, Other). Enter here all possible values that title can take, one value per line.'),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="instance[settings][title]"]' => array('value' => 'select'),
+      ),
+    ),
   );
 
   $form['title_maxlength'] = array( // patch #1307788 from nmc
@@ -210,7 +228,11 @@ function link_field_instance_settings_form($field, $instance) {
 function link_field_settings_form_validate($element, &$form_state, $complete_form) {
   if ($form_state['values']['instance']['settings']['title'] === 'value'
       && empty($form_state['values']['instance']['settings']['title_value'])) {
-    form_set_error('title_value', t('A default title must be provided if the title is a static value.'));
+    form_set_error('instance][settings][title_value', t('A default title must be provided if the title is a static value.'));
+  }
+  if ($form_state['values']['instance']['settings']['title'] === 'select'
+      && empty($form_state['values']['instance']['settings']['title_allowed_values'])) {
+    form_set_error('instance][settings][title_allowed_values', t('You must enter one or more allowed values for link Title, the title is a selected value.'));
   }
   if (!empty($form_state['values']['instance']['settings']['display']['url_cutoff'])  // patch #1307788 from nmc
       && !is_numeric($form_state['values']['instance']['settings']['display']['url_cutoff'])) {
@@ -642,7 +664,7 @@ function link_field_process($element, $form_state, $complete_form) {
     '#required' => ($element['#delta'] == 0 && $settings['url'] !== 'optional') ? $element['#required'] : FALSE,
     '#default_value' => isset($element['#value']['url']) ? $element['#value']['url'] : NULL,
   );
-  if ($settings['title'] !== 'none' && $settings['title'] !== 'value') {
+  if (in_array($settings['title'], array('optional', 'required'))) {
     $element['title'] = array(
       '#type' => 'textfield',
       '#maxlength' => $settings['title_maxlength'],  // patch #1307788 from nmc
@@ -652,6 +674,18 @@ function link_field_process($element, $form_state, $complete_form) {
       '#default_value' => isset($element['#value']['title']) ? $element['#value']['title'] : NULL,
     );
   }
+  elseif ($settings['title'] == 'select') {
+    $options = array('' => t('<none>'));
+    $options += drupal_map_assoc(array_filter(explode("\n", str_replace("\r", "\n", trim($settings['title_allowed_values'])))));
+    $element['title'] = array(
+      '#type' => 'select',
+      '#title' => t('Title'),
+      '#description' => t('Select the a title for this link.'),
+      '#default_value' => isset($element['#value']['title']) ? $element['#value']['title'] : NULL,
+      '#options' => $options,
+    );
+  }
+
 
   // Initialize field attributes as an array if it is not an array yet.
   if (!is_array($settings['attributes'])) {
-- 
1.7.5.4

