type] = $type->name; } return array( 'ops' => array('insert' => t('Create'), 'update' => t('Update'), 'delete' => t('Delete')), 'types' => $token_types, 'roles' => array( 'author' => array( '#name' => t('Author'), '#description' => t('The person who created the node.'), '#default' => t('[author] [operation]d the [node-type] [node-link]'), ), // This is what corresponds to ACTIVITY_ALL 'all' => array( '#name' => t('All'), '#description' => t('The general public.'), '#default' => t('[author-all] [operation]d the [node-type] [node-link]'), ), ), ); } /** * Implementation of hook_activityapi(). */ function nodeactivity_activityapi(&$activity, $op) { if ($op == 'load') { if ($activity['data']['module'] == 'nodeactivity' && !node_access('view', node_load($activity['data']['node-id']))) { $activity = array(); } } } /** * Token module integration. Defines available default tokens. */ function nodeactivity_token_list($type = 'all') { if ($type == 'nodeactivity') { $tokens['nodeactivity'] = array( 'node-id' => t('Id of the post'), 'node-title' => t('Title of the post'), 'node-link' => t('Link to the post'), 'node-type' => t('The node type of the post'), ); return $tokens; } } /** * Token module integration. Defines available default token values. */ function nodeactivity_token_values($type, $data = NULL, $options = array()) { if ($type == 'nodeactivity' && !empty($data)) { $data['node-type'] = theme('activity_node_type', $data['node-type']); $data['node-link'] = l($data['node-title'], 'node/'. $data['node-id']); return $data; } } /** * Implementation of hook_nodeapi(). */ function nodeactivity_nodeapi(&$node, $op, $teaser, $page) { switch ($op) { case 'insert': case 'update': case 'delete': if ($node->status == 1) { $operation = $op == 'insert' ? t('create') : t($op); $type = $node->type; // Check if both type and operation are // enabled for activity. If not then stop here if (!in_array($node->type, variable_get('nodeactivity_token_types', array($node->type)), TRUE) || !in_array($op, variable_get('nodeactivity_op_types', array($op)), TRUE)) { return FALSE; } $user = user_load(array('uid' => $node->uid)); // Privacy setting check if (activity_user_privacy_optout($user)) { return FALSE; } // User hide activity permission check if (user_access('hide activity', $user)) { return FALSE; } $data = array( 'operation' => $operation, 'node-id' => $node->nid, 'node-title' => $node->title, 'node-type' => $node->type, ); // This determines who sees messages based on this data. // This implementation will ensure that the activity is shown // to the special group ACTIVITY_ALL (everybody, basically), // as well as to the person who inserted, updated or deleted the node. // The use of the role (all and author) ensures that we know later how // to address the person... ie "You" or "Bob". $target_users_roles = array( ACTIVITY_ALL => 'all', $node->uid => 'author' ); activity_insert($node->uid, 'nodeactivity', $type, $op, $data, $target_users_roles); } break; } }