|  | @@ -307,18 +307,101 @@ function tripal_save_title_format($entity, $format) {
 | 
											
												
													
														|  |   *   A default title format.
 |  |   *   A default title format.
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  |  function tripal_get_default_title_format($entity) {
 |  |  function tripal_get_default_title_format($entity) {
 | 
											
												
													
														|  | -  $format = array();
 |  | 
 | 
											
												
													
														|  | 
 |  | +  $format = NULL;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    // Retrieve all available tokens.
 |  |    // Retrieve all available tokens.
 | 
											
												
													
														|  |    $tokens = tripal_get_tokens($entity);
 |  |    $tokens = tripal_get_tokens($entity);
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  foreach($tokens as $token) {
 |  | 
 | 
											
												
													
														|  | -    if ($token['required']) {
 |  | 
 | 
											
												
													
														|  | -      $format[] = $token['token'];
 |  | 
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +  // A) Check to see if more informed modules have suggested a title for this type.
 | 
											
												
													
														|  | 
 |  | +  // Invoke hook_tripal_default_title_format() to get all suggestions from other modules.
 | 
											
												
													
														|  | 
 |  | +  $suggestions = module_invoke_all('tripal_default_title_format', $entity, $tokens);
 | 
											
												
													
														|  | 
 |  | +  if ($suggestions) {
 | 
											
												
													
														|  | 
 |  | +    // Use the suggestion with the lightest weight.
 | 
											
												
													
														|  | 
 |  | +    $lightest_key = NULL;
 | 
											
												
													
														|  | 
 |  | +    foreach ($suggestions as $k => $s) {
 | 
											
												
													
														|  | 
 |  | +      if ($lightest_key === NULL) $lightest_key = $k;
 | 
											
												
													
														|  | 
 |  | +      if ($s['weight'] < $lightest_key) $lightest_key = $k;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +    $format = $suggestions[$lightest_key]['format'];
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +  
 | 
											
												
													
														|  | 
 |  | +  // B) Check to see if any fields contain "name" in the machine name and if so, use them.
 | 
											
												
													
														|  | 
 |  | +  $name_fields = preg_grep('/name/', array_keys($tokens));
 | 
											
												
													
														|  | 
 |  | +  if ($name_fields AND !$format) {
 | 
											
												
													
														|  | 
 |  | +    $format = implode(', ', $name_fields);
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +  
 | 
											
												
													
														|  | 
 |  | +  // C) Generate our own ugly title by simply comma-separating all the required fields.
 | 
											
												
													
														|  | 
 |  | +  if (!$format) {
 | 
											
												
													
														|  | 
 |  | +    $tmp = array();
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +    // Check which tokens are required fields and join them into a default format.
 | 
											
												
													
														|  | 
 |  | +    foreach($tokens as $token) {
 | 
											
												
													
														|  | 
 |  | +      if ($token['required']) {
 | 
											
												
													
														|  | 
 |  | +        $tmp[] = $token['token'];
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    $format = implode(', ', $tmp);
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +  
 | 
											
												
													
														|  | 
 |  | +  return $format;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +/**
 | 
											
												
													
														|  | 
 |  | + * Implement this hook to define default formats for Tripal Content Types.
 | 
											
												
													
														|  | 
 |  | + *
 | 
											
												
													
														|  | 
 |  | + * @param TripalBundle $entity
 | 
											
												
													
														|  | 
 |  | + *   A tripal content type entity with information to be used for determining the default title format.
 | 
											
												
													
														|  | 
 |  | + * @param array $available_tokens
 | 
											
												
													
														|  | 
 |  | + *   An array of available tokens for this particular tripal content type.
 | 
											
												
													
														|  | 
 |  | + *
 | 
											
												
													
														|  | 
 |  | + * @return array
 | 
											
												
													
														|  | 
 |  | + *   An array of potential formats. The lightest weighted format suggested by all modules will be chosen.
 | 
											
												
													
														|  | 
 |  | + *   Each array item should consist of a 'weight' and 'format'. See the hook implementation below
 | 
											
												
													
														|  | 
 |  | + *   for examples.
 | 
											
												
													
														|  | 
 |  | + *    - weight: an integer used to determine priority of suggestions. 
 | 
											
												
													
														|  | 
 |  | + *        The smaller/lighter the number the higher the priority.
 | 
											
												
													
														|  | 
 |  | + *        Best practice is to use a weight less than 0 for extension modules.
 | 
											
												
													
														|  | 
 |  | + *        specifically, -2 is a good weight for calculated formats and -5 is a
 | 
											
												
													
														|  | 
 |  | + *        good weight for hard-coded formats specific to a given type.
 | 
											
												
													
														|  | 
 |  | + *    - format: a string including approved tokens used to determine the title 
 | 
											
												
													
														|  | 
 |  | + *        on Tripal content pages.
 | 
											
												
													
														|  | 
 |  | + */
 | 
											
												
													
														|  | 
 |  | +function hook_tripal_default_title_format($entity, $available_tokens) {
 | 
											
												
													
														|  | 
 |  | +  $format = array();
 | 
											
												
													
														|  | 
 |  | +  
 | 
											
												
													
														|  | 
 |  | +  // If you want to suggest a default format for a particular vocabulary term:
 | 
											
												
													
														|  | 
 |  | +  //---------------------------------------------------------------------------
 | 
											
												
													
														|  | 
 |  | +  // Load the term associated with this Tripal Content type.
 | 
											
												
													
														|  | 
 |  | +  $term = entity_load('TripalTerm', array('id' => $entity->term_id));
 | 
											
												
													
														|  | 
 |  | +  $term = reset($term);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  // If it's the term you are interested in then suggest a format.
 | 
											
												
													
														|  | 
 |  | +  if ($term->name == 'organism') {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // To suggest a format, add an element to the array with a format & weight key.
 | 
											
												
													
														|  | 
 |  | +    $format[] = array(
 | 
											
												
													
														|  | 
 |  | +      // This is the format/pattern you suggest be used to determine the title of organism pages.
 | 
											
												
													
														|  | 
 |  | +      'format' => '[organism__genus] [organism__species]',
 | 
											
												
													
														|  | 
 |  | +      // The weight/priority of your suggestion.
 | 
											
												
													
														|  | 
 |  | +      'weight' => -5
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  // Say you know that in your particular site, all 'names' are required
 | 
											
												
													
														|  | 
 |  | +  // and you want to only use the human-readable name:
 | 
											
												
													
														|  | 
 |  | +  //---------------------------------------------------------------------------
 | 
											
												
													
														|  | 
 |  | +  $name_field = preg_grep('/__name]$/', array_keys($available_tokens));
 | 
											
												
													
														|  | 
 |  | +  $name_field = reset($name_field);
 | 
											
												
													
														|  | 
 |  | +  if (is_string($name_field)) {
 | 
											
												
													
														|  | 
 |  | +    $format[] = array(
 | 
											
												
													
														|  | 
 |  | +      'format' => $name_field,
 | 
											
												
													
														|  | 
 |  | +      'weight' => -2,
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  return implode(', ', $format);
 |  | 
 | 
											
												
													
														|  | 
 |  | +  return $format;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  /**
 |  |  /**
 | 
											
										
											
												
													
														|  | @@ -551,4 +634,4 @@ function hook_vocab_select_term_form_validate($form, &$form_state) {
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  |  function hook_vocab_get_term($namespace, $accession) {
 |  |  function hook_vocab_get_term($namespace, $accession) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +}
 |