popsu-d7/sites/all/modules/twitter/twitter_actions/twitter_actions.module
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

189 lines
6.4 KiB
Plaintext

<?php
/**
* @file
* Exposes Drupal actions for sending Twitter messages.
*/
/**
* Implements hook_action_info().
*/
function twitter_actions_action_info() {
return array(
'twitter_actions_set_status_action' => array(
'type' => 'system',
'label' => t('Post a message to Twitter'),
'configurable' => TRUE,
'triggers' => array(
'node_view',
'node_insert',
'node_update',
'node_delete',
'comment_view',
'comment_insert',
'comment_update',
'comment_delete',
'user_view',
'user_insert',
'user_update',
'user_delete',
'user_login',
'cron',
),
),
);
}
/**
* Returns a form definition so the Twitter action can be configured.
*
* @param $context
* Default values (if we are editing an existing action instance).
* @return
* Form definition.
*/
function twitter_actions_set_status_action_form($context) {
$options = array();
$results = db_query("SELECT screen_name FROM {twitter_account}");
foreach ($results as $result) {
$options[$result->screen_name] = $result->screen_name;
}
// Set default values for form.
$form['screen_name'] = array(
'#type' => 'select',
'#title' => t('Twitter account name'),
'#options' => $options,
'#default_value' => isset($context['screen_name']) ? $context['screen_name'] : '',
'#required' => TRUE,
);
if (!count($options)) {
$form['screen_name']['#description'] = t('You first need to add a Twitter account to one of ' .
'your users with rights for posting to Twitter.');
}
$form['message'] = array(
'#type' => 'textarea',
'#title' => t('Message'),
'#default_value' => isset($context['message']) ? $context['message'] : '',
'#cols' => '80',
'#rows' => '3',
'#description' => t('The message that should be sent. You may include the following variables: ' .
'%site_name, %username, %node_url, %node_type, %title, %summary, %body, ' .
'%tinyurl. Not all variables will be available in all contexts.'),
'#required' => TRUE,
);
return $form;
}
/**
* Verifies if Oauth module has been setup and also checks the Twitter
* authentication against the provided screen name.
*/
function twitter_actions_set_status_action_validate($form, $form_state) {
if (!_twitter_use_oauth()) {
form_set_error('screen_name', t('Oauth has not been setup yet. Please go to !link and follow steps.',
array('!link' => l(t('Twitter settings'), 'admin/settings/twitter'))));
}
}
/**
* Submits the form and sets the twitter account pulling the data from the
* twitter_account table.
*/
function twitter_actions_set_status_action_submit($form, $form_state) {
$form_values = $form_state['values'];
$twitter_uid = db_query("SELECT twitter_uid FROM {twitter_account} WHERE screen_name = :screen_name", array(':screen_name' => $form_values['screen_name']))->fetchField();
// Process the HTML form to store configuration. The keyed array that
// we return will be serialized to the database.
$params = array(
'twitter_uid' => $twitter_uid,
'screen_name' => $form_values['screen_name'],
'message' => $form_values['message'],
);
return $params;
}
/**
* Implementation of a configurable Twitter actions.
* @todo Implementation for language negotiation for the body and sumary. Also
* need implementation for bodies with multiple values. Right now it is hard
* coded and it will only get body and summary for 'und' language and only
* the first value of the body field.
* If the final message is over 140 chars, there is no feedback to the user.
*/
function twitter_actions_set_status_action($object, $context) {
global $user;
$variables['%site_name'] = variable_get('site_name', 'Drupal');
// Seting variables array depending on action's group
switch ($context['group']) {
case 'node':
$node = $context['node'];
if (isset($node)) {
$variables = array_merge($variables, array(
'%uid' => $node->uid,
'%username' => $node->name,
'%node_url' => url('node/' . $node->nid, array('absolute' => TRUE)),
'%node_type' => node_type_get_name($node),
'%title' => $node->title,
'%summary' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['summary'] : '',
'%body' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['value'] : '',
)
);
}
break;
case 'comment':
$node = node_load($context['comment']->nid);
if (isset($node)) {
$variables = array_merge($variables, array(
'%uid' => $context['comment']->uid,
'%username' => $context['comment']->name,
'%node_url' => url('node/' . $node->nid, array('absolute' => TRUE)),
'%node_type' => node_type_get_name($node),
'%title' => $node->title,
'%summary' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['summary'] : '',
'%body' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['value'] : '',
)
);
}
break;
case 'user':
$variables['%username'] = $context['user']->name;
break;
case 'cron':
break;
default:
// We are being called directly.
$node = $object;
if (isset($node) && is_object($node)) {
$variables = array_merge($variables, array(
'%uid' => $node->uid,
'%username' => $node->name,
'%node_url' => url('node/' . $node->nid, array('absolute' => TRUE)),
'%node_type' => node_type_get_name($node),
'%title' => $node->title,
'%summary' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['summary'] : '',
'%body' => isset($node->body['und'][0]['value']) ? $node->body['und'][0]['value'] : '',
)
);
}
}
// Only make a tinyurl if it was asked for.
if (strstr($context['message'], '%tinyurl') !== FALSE) {
$variables = array_merge($variables, array(
'%tinyurl' => twitter_shorten_url(url('node/' . $node->nid, array('absolute' => TRUE))),
));
}
$message = strtr($context['message'], $variables);
module_load_include('inc', 'twitter');
$twitter_account = twitter_account_load($context['twitter_uid']);
twitter_set_status($twitter_account, $message);
}