voting_rules.module in Voting Rules 7
Same filename and directory in other branches
Voting Rules module.
File
voting_rules.moduleView source
<?php
/**
* @file
* Voting Rules module.
*/
/**
* @file
* Provides Rules intregration for the Voting API module.
*/
/**
* Implements hook_votingapi_insert().
*/
function voting_rules_votingapi_insert($votes) {
_voting_rules_votingapi_op($votes, 'insert');
}
/**
* Implements hook_votingapi_results().
*/
function voting_rules_votingapi_delete($votes) {
_voting_rules_votingapi_op($votes, 'delete');
}
/**
* Wrapper for hook_votingapi_insert() and hook_votingapi_delete().
*/
function _voting_rules_votingapi_op($votes, $op) {
foreach ($votes as $vote) {
$entity = voting_rules_load_entity($vote['entity_type'], $vote['entity_id']);
if ($entity) {
if (in_array($vote['entity_type'], array_keys(voting_rules_get_types()))) {
rules_invoke_event('voting_rules_' . $op . '_' . $vote['entity_type'], $vote, $entity);
}
else {
rules_invoke_event('voting_rules_' . $op . '_entity', $vote, entity_metadata_wrapper($vote['entity_type'], $entity));
}
}
}
}
/**
* Implements hook_votingapi_results().
*/
function voting_rules_votingapi_results($cached, $entity_type, $entity_id) {
$vote_results = array();
$entity = voting_rules_load_entity($entity_type, $entity_id);
foreach ($cached as $result) {
$vote_results[$result['function']] = $result;
}
if ($entity) {
rules_invoke_event('voting_rules_results_' . $entity_type, $vote_results, $entity);
}
}
/**
* Helper function that loads content of the specified type. Since Voting API is
* built to support client defined content types, while Rules requires content
* types to be pre-defined, we use this helper function to encapsulate the
* loading of new content based on supported types (currently nodes, users, and
* comments) and the entity API for unknown entities.
*
* @param $entity_type
* The entity type.
* @param $entity_id
* The entity ID.
*/
function voting_rules_load_entity($entity_type, $entity_id) {
switch ($entity_type) {
case 'node':
return node_load($entity_id);
case 'user':
return user_load($entity_id);
case 'comment':
return comment_load($entity_id);
default:
$entity_key = voting_rules_get_entity_key($entity_type);
$entities = entity_load($entity_type, array(
$entity_id,
));
$entity = reset($entities);
return $entity;
}
}
/**
* Helper function to get Voting API entity types that should be used by rules.
*
* @return
* A keyed array of entity types.
*/
function voting_rules_get_types() {
$types = array(
'node' => t('Node'),
'user' => t('User'),
'comment' => t('Comment'),
);
drupal_alter('voting_rules_types', $types);
return $types;
}
/**
* Helper function to get the primary key used by an entity.
*
* @return
* An entity key.
*/
function voting_rules_get_entity_key($entity_type) {
switch ($entity_type) {
case 'node':
return 'nid';
case 'user':
return 'uid';
case 'comment':
return 'cid';
default:
$entity_info = entity_get_info($entity_type);
return $entity_info['entity keys']['id'];
}
}
/**
* Rules callback for user and entities.
*/
function voting_rules_get_property($data, array $options, $name, $entity_type) {
switch ($name) {
case 'user':
return user_load($data['uid']);
case 'entity':
return voting_rules_load_entity($data['entity_type'], $data['entity_id']);
}
}
/**
* Rules callback to get votes on an entity.
*/
function voting_rules_get_votes($entity, array $options, $name, $entity_type) {
$entity_key = voting_rules_get_entity_key($entity_type);
$votes = votingapi_select_votes(array(
'entity_id' => $entity->{$entity_key},
'entity_type' => $entity_type,
));
return $votes;
}
/**
* Rules callback to get vote results on an entity.
*/
function voting_rules_get_vote_results($entity, array $options, $name, $entity_type) {
$entity_key = voting_rules_get_entity_key($entity_type);
$results = array();
$select_results = votingapi_select_results(array(
'entity_id' => $entity->{$entity_key},
'entity_type' => $entity_type,
));
foreach ($select_results as $select_result) {
$results[$select_result['function']] = $select_result;
}
return $results;
}Functions
|
Name |
Description |
|---|---|
| voting_rules_get_entity_key | Helper function to get the primary key used by an entity. |
| voting_rules_get_property | Rules callback for user and entities. |
| voting_rules_get_types | Helper function to get Voting API entity types that should be used by rules. |
| voting_rules_get_votes | Rules callback to get votes on an entity. |
| voting_rules_get_vote_results | Rules callback to get vote results on an entity. |
| voting_rules_load_entity | Helper function that loads content of the specified type. Since Voting API is built to support client defined content types, while Rules requires content types to be pre-defined, we use this helper function to encapsulate the loading of new content… |
| voting_rules_votingapi_delete | Implements hook_votingapi_results(). |
| voting_rules_votingapi_insert | Implements hook_votingapi_insert(). |
| voting_rules_votingapi_results | Implements hook_votingapi_results(). |
| _voting_rules_votingapi_op | Wrapper for hook_votingapi_insert() and hook_votingapi_delete(). |