? 0-user-text-field-tokens.txt
? field_token.tpl.php
? jquery-ui-tree
? jstree
? menu.tokens.inc
? patches
? theme
? token.inc
? treeTable
Index: token.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/token/token.install,v
retrieving revision 1.15
diff -u -p -r1.15 token.install
--- token.install	8 Dec 2010 16:25:09 -0000	1.15
+++ token.install	14 Feb 2011 23:20:50 -0000
@@ -8,17 +8,26 @@ function token_requirements($phase = 'ru
   $requirements = array();
   $t = get_t();
 
-  // Check for duplicate tokens.
   if ($phase == 'runtime') {
-    if ($duplicate_tokens = token_find_duplicate_tokens()) {
-      foreach ($duplicate_tokens as $token => $modules) {
-        $duplicate_tokens[$token] = $t('@token (defined by modules: @modules)', array('@token' => $token, '@modules' => implode(', ', $modules)));
+    // Check for various token definition problems.
+    $token_problems = token_get_token_problems();
+    // Format and display each token problem.
+    foreach ($token_problems as $problem_key => $problem) {
+      if (!empty($problem['problems'])) {
+        $problems = array_unique($problem['problems']);
+        $problems = array_map('check_plain', $problems);
+        $token_problems[$problem_key] = $problem['label'] . theme('item_list', array('items' => $problems));
       }
-      $requirements['token_duplicates'] = array(
-        'title' => $t('Duplicate tokens'),
-        'value' => $t('The following tokens are defined by multiple modules and may cause problems when performing token replacement.'),
+      else {
+        unset($token_problems[$problem_key]);
+      }
+    }
+    if (!empty($token_problems)) {
+      $requirements['token_problems'] = array(
+        'title' => $t('Tokens'),
+        'value' => $t('The following problems were detected with the token definitions on your site.'),
         'severity' => REQUIREMENT_WARNING,
-        'description' => theme('item_list', array('items' => $duplicate_tokens)),
+        'description' => '<p>' . implode('</p><p>', $token_problems) . '</p>', //theme('item_list', array('items' => $token_problems)),
       );
     }
   }
Index: token.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/token/token.module,v
retrieving revision 1.62
diff -u -p -r1.62 token.module
--- token.module	31 Jan 2011 21:10:02 -0000	1.62
+++ token.module	14 Feb 2011 23:20:51 -0000
@@ -771,37 +771,102 @@ function _token_build_tree($token_type, 
 }
 
 /**
- * Find tokens that have been declared twice by different modules.
+ * Get token problems.
  */
-function token_find_duplicate_tokens() {
-  $all_tokens = array();
+function token_get_token_problems() {
+  //$token_info = array();
+  //foreach (module_implements('token_info') as $module) {
+  //  $module_token_info = module_invoke($module, 'token_info');
+  //  if (in_array($module, _token_core_supported_modules())) {
+  //    $module .= '/token';
+  //  }
+  //  if (isset($module_token_info['types'])) {
+  //    if (is_array($module_token_info['types'])) {
+  //      foreach (array_keys($module_token_info['types']) as $type) {
+  //        if (is_array($module_token_info['types'][$type])) {
+  //          $module_token_info['types'][$type] += array('module' => $module);
+  //        }
+  //      }
+  //    }
+  //  }
+  //  if (isset($module_token_info['tokens'])) {
+  //    if (is_array($module_token_info['tokens'])) {
+  //
+  //    }
+  //  }
+  //  if (is_array($module_token_info)) {
+  //    $token_info = array_merge_recursive($token_info, $module_token_info);
+  //  }
+  //}
+  //dpm($token_info);
+
+  $token_info = token_info();
+  $token_problems = array(
+    'not-array' => array(
+      'label' => t('The following tokens or token types are not defined as arrays:'),
+    ),
+    'missing-info' => array(
+      'label' => t('The following tokens or token types are missing required name and description information:'),
+    ),
+    'type-no-tokens' => array(
+      'label' => t('The following token types do not have any tokens defined:'),
+    ),
+    'tokens-no-type' => array(
+      'label' => t('The following token type is not defined but has tokens:'),
+    ),
+    'duplicate' => array(
+      'label' => t('The following token or token types are defined by multiple modules:')
+    ),
+  );
 
-  foreach (module_implements('token_info') as $module) {
-    $module_token_info = module_invoke($module, 'token_info');
-    if (in_array($module, _token_core_supported_modules())) {
-      $module = 'token';
+  // Check token types for problems.
+  foreach ($token_info['types'] as $type => $type_info) {
+    $real_type = !empty($type_info['type']) ? $type_info['type'] : $type;
+    if (!is_array($type_info)) {
+      $token_problems['not-array']['problems'][] = "\$info['types']['$type']";
+      continue;
     }
-    if (!empty($module_token_info['types'])) {
-      foreach (array_keys($module_token_info['types']) as $type) {
-        $all_tokens['type:' . $type][] = $module;
-      }
+    elseif (!isset($type_info['name']) || !isset($type_info['description'])) {
+      $token_problems['missing-info']['problems'][] = "\$info['types']['$type']";
+    }
+    elseif (empty($token_info['tokens'][$real_type])) {
+      $token_problems['type-no-tokens']['problems'][] = "\$info['tokens']['$real_type']";
+    }
+  }
+
+  // Check tokens for problems.
+  foreach ($token_info['tokens'] as $type => $tokens) {
+    if (!is_array($tokens)) {
+      $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']";
+      continue;
     }
-    if (!empty($module_token_info['tokens'])) {
-      foreach ($module_token_info['tokens'] as $type => $tokens) {
-        foreach (array_keys($tokens) as $token) {
-          $all_tokens[$type . ':' . $token][] = $module;
+    else {
+      foreach (array_keys($tokens) as $token) {
+        if (!is_array($tokens[$token])) {
+          $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']['$token']";
+          continue;
+        }
+        elseif (!isset($tokens[$token]['name']) || !isset($tokens[$token]['description'])) {
+          $token_problems['missing-info']['problems'][] = "\$info['tokens']['$type']['$token']";
+        }
+        elseif (is_array($tokens[$token]['name']) || is_array($tokens[$token]['description'])) {
+          $token_problems['duplicate']['problems'][] = "\$info['tokens']['$type']['$token']";
         }
       }
     }
+    if (!isset($token_info['types'][$type])) {
+      $token_problems['tokens-no-type']['problems'][] = "\$info['types']['$type']";
+    }
   }
 
-  foreach ($all_tokens as $token => $modules) {
-    if (count($modules) < 2) {
-      unset($all_tokens[$token]);
+  // Check for duplicate tokens.
+  if ($duplicate_tokens = token_find_duplicate_tokens()) {
+    foreach ($duplicate_tokens as $token => $modules) {
+      //$token_problems['duplicate-tokens']['problems'][] = "[$token] (" . implode(', ', $modules) . ")";
     }
   }
 
-  return $all_tokens;
+  return $token_problems;
 }
 
 /**
