diff --git a/og.tokens.inc b/og.tokens.inc index 9d74950..fa081a9 100644 --- a/og.tokens.inc +++ b/og.tokens.inc @@ -15,11 +15,13 @@ function og_token_info() { 'needs-data' => 'group', ); - $types['group-manager'] = array( - 'name' => t('Group manager'), - 'description' => t('Tokens related to the group manager user.'), - 'type' => 'user', - ); + if(module_exists('og_context')) { + $types['current-group'] = array( + 'name' => t('Current group'), + 'description' => t('Tokens related to the current group as found via OG\'s context module settings.'), + 'type' => 'group', + ); + } $group['gid'] = array( 'name' => t('Group ID'), @@ -42,9 +44,23 @@ function og_token_info() { 'type' => 'date', ); + $group['node'] = array( + 'name' => t('Main group node'), + 'description' => t('The main node that identifies this group'), + 'type' => 'node', + ); + + $group['manager'] = array( + 'name' => t('Manager user'), + 'description' => t('Tokens related to the group manager user.'), + 'type' => 'user', + ); + return array( 'types' => $types, - 'tokens' => array('group' => $group), + 'tokens' => array( + 'group' => $group, + ), ); } @@ -66,7 +82,14 @@ function og_tokens($type, $tokens, array $data = array(), array $options = array if ($type == 'group' && !empty($data['group'])) { $group = $data['group']; foreach ($tokens as $name => $original) { - switch ($name) { + + // Get first subtoken only + $piece = $name; + if(($pos = strpos($name,":")) !== FALSE) { + $piece = substr($name,0,$pos); + } + + switch ($piece) { // Basic user account information. case 'gid': $replacements[$original] = !empty($group->gid) ? $group->gid : t('not yet assigned'); @@ -85,6 +108,32 @@ function og_tokens($type, $tokens, array $data = array(), array $options = array case 'created': // In the case of user_presave the created date may not yet be set. $replacements[$original] = !empty($group->created) ? format_date($group->created, 'medium', '', NULL, $language_code) : t('not yet created'); + break; + + case 'node': + if($group->entity_type == "node") { + $entity = $group->getEntity(); + // TODO: Check entity_type + if (($node_tokens = token_find_with_prefix($tokens, 'node')) && $entity) { + $replacements += token_generate('node', $node_tokens, array('node' => $entity), $options); + } + } else { + $replacements[$original] = t('group entity not a node'); + } + break; + + case 'manager': + if($group->entity_type == "node") { + $entity = $group->getEntity(); + if (($node_tokens = token_find_with_prefix($tokens, 'manager')) + && ($entity = $group->getEntity()) + && ($user = user_load($entity->uid)) + ) { + $replacements += token_generate('user', $node_tokens, array('user' => $user), $options); + } + } else { + $replacements[$original] = t('group entity not a node'); + } break; } } @@ -94,8 +143,10 @@ function og_tokens($type, $tokens, array $data = array(), array $options = array } } - if ($type == 'group-manager' && !empty($data['group-manager'])) { - $replacements += token_generate('user', $tokens, array('user' => $data['group-manager']), $options); + if ($type == 'current-group' && module_exists('og_context')) { + if ($group = og_context()) { + $replacements += token_generate('group', $tokens, array('group' => $group), $options); + } } return $replacements;