diff --git a/og.test b/og.test index ab99fd0..18b9507 100644 --- a/og.test +++ b/og.test @@ -1209,4 +1209,120 @@ class OgUpgradePath7001TestCase extends OgUpgradePathTestCase { // Assert the created time was updated. $this->assertEqual($group_memberships[2]->created, 1000000000, t('Create date was upgraded.')); } -} \ No newline at end of file +} + +class OgTokensTestCase extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Organic groups tokens', + 'description' => 'Test organic groups tokens.', + 'group' => 'Organic groups', + ); + } + + function setUp() { + parent::setUp('og','entity_test'); + module_enable(array('entity_feature')); + + // Add a new content type for groups, and attach group field + $this->group_node_type = $this->drupalCreateContentType( array( 'name' => 'group' ) ); + og_create_field(OG_GROUP_FIELD, 'node', 'group'); + + // Add OG group field to the entity_test's "main" bundle. + og_create_field(OG_GROUP_FIELD, 'entity_test', 'main'); + + // Add OG audience field to the node's "article" bundle. + og_create_field(OG_AUDIENCE_FIELD, 'node', 'article'); + } + + function testOgEntityGroupTokens() { + $admin_user = $this->drupalCreateUser(); + $entity = entity_create('entity_test', array('name' => 'main', 'uid' => $admin_user->uid)); + $entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1; + $entity->save(); + $group = og_get_group('entity_test', $entity->pid); + + $this->assertEqual(token_replace("[group:gid]", array("group" => $group) ), $group->gid, t('Generation of "[group:gid]" token for entity groups')); + $this->assertEqual(token_replace("[group:label]", array("group" => $group) ), $group->label, t('Generation of "[group:label]" token for entity groups')); + $uri = entity_uri('entity_test', $entity); + $this->assertEqual(token_replace("[group:url]", array("group" => $group) ), url($uri['path'],array('absolute' => TRUE)), t('Generation of "[group:url]" token for entity groups')); + $this->assertEqual( + token_replace("[group:created]", array("group" => $group) ), + format_date($group->created, 'medium'), + t('Generation of "[group:created]" token for entity groups') + ); + + // Test token chaining on created subtoken (date) + $this->assertEqual( + token_replace("[group:created:raw]", array("group" => $group) ), + token_replace("[date:raw]", array("date" => $group->created) ), + t('Generation of "[group:created:raw]" token for entity groups') + ); + + // Test token chaining on node subtoken (node) + $this->assertEqual( + token_replace("[group:node:title]", array("group" => $group) ), + "[group:node:title]", // unreplaced, group entity is not a node + t('Generation of "[group:node:title]" token for entity groups') + ); + + // Test token chaining on manager subtoken (user) + $this->assertEqual( + token_replace("[group:manager:uid]", array("group" => $group) ), + token_replace("[user:uid]", array("user" => $admin_user) ), + t('Generation of "[group:manager:uid]" token for entity groups') + ); + } + + function testOgNodeGroupTokens() { + $admin_user = $this->drupalCreateUser(); + // Create a group node, and a group content node + $gnode = $this->drupalCreateNode( array( + 'title' => 'My group', + 'type' => 'group', + 'uid' => $admin_user->uid, + OG_GROUP_FIELD => array( LANGUAGE_NONE => array( array( 'value' => 1 ) ) ), + )); + $group = og_get_group('node',$gnode->nid); + + // Create a group content node + $cnode = $this->drupalCreateNode(array( + 'title' => 'My group content', + 'type' => 'article', + 'uid' => $admin_user->uid, + OG_AUDIENCE_FIELD => array( LANGUAGE_NONE => array( array( 'gid' => $group->gid ) ) ), + )); + + $this->assertEqual(token_replace("[group:gid]", array("group" => $group) ), $group->gid, t('Generation of "[group:gid]" token for node groups')); + $this->assertEqual(token_replace("[group:label]", array("group" => $group) ), $group->label, t('Generation of "[group:label]" token for node groups')); + $uri = entity_uri('node', $gnode); + $this->assertEqual(token_replace("[group:url]", array("group" => $group) ), url($uri['path'], array('absolute' => TRUE)), t('Generation of "[group:url]" token for node groups')); + $this->assertEqual( + token_replace("[group:created]", array("group" => $group) ), + format_date($group->created, 'medium'), + t('Generation of "[group:created]" token for node groups') + ); + + // Test token chaining on created subtoken (date) + $this->assertEqual( + token_replace("[group:created:raw]", array("group" => $group) ), + token_replace("[date:raw]", array("date" => $group->created) ), + t('Generation of "[group:created:raw]" token for node groups') + ); + + // Test token chaining on node subtoken + $this->assertEqual( + token_replace("[group:node:title]", array("group" => $group) ), + token_replace("[node:title]", array("node" => $gnode) ), + t('Generation of "[group:node:title]" token for node groups') + ); + + // Test token chaining on manager subtoken + $this->assertEqual( + token_replace("[group:manager:uid]", array("group" => $group) ), + token_replace("[user:uid]", array("user" => $admin_user) ), + t('Generation of "[group:manager:uid]" token for node groups') + ); + } + +} diff --git a/og.tokens.inc b/og.tokens.inc index 9d74950..31b8414 100644 --- a/og.tokens.inc +++ b/og.tokens.inc @@ -15,12 +15,6 @@ 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', - ); - $group['gid'] = array( 'name' => t('Group ID'), 'description' => t("The unique ID of the group."), @@ -42,6 +36,18 @@ 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), @@ -69,33 +75,56 @@ function og_tokens($type, $tokens, array $data = array(), array $options = array switch ($name) { // Basic user account information. case 'gid': - $replacements[$original] = !empty($group->gid) ? $group->gid : t('not yet assigned'); + if(!empty($group->gid)) { + $replacements[$original] = $group->gid; + } break; case 'label': $replacements[$original] = og_label($group->gid, $sanitize); break; + case 'node': case 'url': - $entity = $group->getEntity(); - $uri = entity_uri($group->entity_type, $entity); - $replacements[$original] = !empty($uri['path']) ? url($uri['path'], $url_options) : t('not yet assigned'); + if (($entity = $group->getEntity()) && ($uri = entity_uri($group->entity_type, $entity)) && !empty($uri['path'])) { + $replacements[$original] = url($uri['path'], $url_options); + } break; 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'); + if (!empty($group->created)) { + $replacements[$original] = format_date($group->created, 'medium', '', NULL, $language_code); + } break; + + case 'manager': + if(($entity = $group->getEntity()) && ($account = user_load($entity->uid))) { + $replacements[$original] = $sanitize ? check_plain($account->name) : $account->name; + } + break; + } } if ($registered_tokens = token_find_with_prefix($tokens, 'created')) { - $replacements += token_generate('date', $registered_tokens, array('date' => $account->created), $options); + $replacements += token_generate('date', $registered_tokens, array('date' => $group->created), $options); + } + + if ($node_tokens = token_find_with_prefix($tokens, 'manager')) { + if (($entity = $group->getEntity()) && ($account = user_load($entity->uid))) { + $replacements += token_generate('user', $node_tokens, array('user' => $account), $options); + } + } + + if ($group->entity_type == "node") { + if ($node_tokens = token_find_with_prefix($tokens, 'node')) { + if ($entity = $group->getEntity()) { + $replacements += token_generate('node', $node_tokens, array('node' => $entity), $options); + } + } } - } - if ($type == 'group-manager' && !empty($data['group-manager'])) { - $replacements += token_generate('user', $tokens, array('user' => $data['group-manager']), $options); } return $replacements; diff --git a/og_context/og_context.tokens.inc b/og_context/og_context.tokens.inc new file mode 100644 index 0000000..893d37e --- /dev/null +++ b/og_context/og_context.tokens.inc @@ -0,0 +1,37 @@ + t('Current group'), + 'description' => t('Tokens related to the current group as found via OG\'s context module settings.'), + 'type' => 'group', + ); + + return array( + 'types' => $types, + ); +} + +/** + * Implements hook_tokens(). + */ +function og_context_tokens($type, $tokens, array $data = array(), array $options = array()) { + $replacements = array(); + + if ($type == 'current-group') { + if ($group = og_context()) { + $replacements += token_generate('group', $tokens, array('group' => $group), $options); + } + } + + return $replacements; +} +