123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /**
- * @file
- * Main hooks for twitter post module
- */
- /**
- * Implements hook_menu().
- */
- function twitter_post_menu() {
- $items['admin/config/services/twitter/post'] = array(
- 'title' => 'Post',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('twitter_post_admin_settings'),
- 'access arguments' => array('administer site configuration'),
- 'file' => 'twitter_post.pages.inc',
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 3,
- );
- return $items;
- }
- /**
- * Implements hook_permission().
- */
- function twitter_post_permission() {
- return array(
- 'post to twitter' => array(
- 'title' => t('Post a message to Twitter'),
- ),
- );
- }
- /**
- * Implements hook_form_alter().
- */
- function twitter_post_form_alter(&$form, $form_state, $form_id) {
- // Alter any node forms.
- if (isset($form['#node']) && $form['#node']->type . '_node_form' == $form_id) {
- // If we haven't enabled Twitter posting on this node type, nothing to do
- // here.
- $type = $form['#node']->type;
- $allowed_types = variable_get('twitter_post_types', array('story' => 'story', 'blog' => 'blog'));
- if (empty($allowed_types[$type])) {
- return;
- }
- module_load_include('inc', 'twitter');
- $twitter_form = twitter_post_form();
- if (!$twitter_form) {
- return;
- }
- $form['twitter'] = array(
- '#type' => 'fieldset',
- '#title' => t('Post to twitter.com'),
- '#collapsible' => TRUE,
- '#collapsed' => FALSE,
- '#tree' => TRUE,
- );
- $form['twitter']['post'] = array(
- '#type' => 'checkbox',
- '#title' => t('Announce this post on Twitter'),
- '#default_value' => (empty($form['nid']['#value'])),
- '#id' => 'twitter-toggle',
- );
- $form['twitter'] += $twitter_form;
- $form['twitter']['status']['#default_value'] = variable_get('twitter_post_default_format', 'New post: !title !tinyurl');
- $form['twitter']['status']['#description'] = t('The given text will be posted to twitter.com. You can use !url, !url-alias, !tinyurl, !title and !user as replacement text.');
- $form['twitter']['status']['#maxlength'] = 150;
- }
- }
- /**
- * Implementation of hook_node_insert().
- *
- * Intercepts newly published nodes and posts noticed to Twitter.
- */
- function twitter_post_node_insert($node) {
- if (!empty($node->status) && !empty($node->twitter) && !empty($node->twitter['post'])) {
- module_load_include('inc', 'twitter');
- $twitter_account = twitter_account_load($node->twitter['account']);
- $replacements = array(
- '!title' => $node->title,
- '!url' => url('node/' . $node->nid, array('absolute' => TRUE, 'alias' => TRUE)),
- '!url-alias' => url('node/' . $node->nid, array('absolute' => TRUE)),
- '!user' => $node->name,
- );
- // Only generate the shortened URL if it's going to be used. No sense
- // burning through TinyURLs without a good reason.
- if (strstr($node->twitter['status'], '!tinyurl') !== FALSE) {
- $replacements['!tinyurl'] = twitter_shorten_url(url('node/' . $node->nid, array('absolute' => TRUE)));
- }
- $status = strtr($node->twitter['status'], $replacements);
- try {
- $result = twitter_set_status($twitter_account, $status);
- drupal_set_message(t('Successfully posted to Twitter'));
- }
- catch (TwitterException $e) {
- drupal_set_message(t('An error occurred when posting to twitter: %code %error',
- array('%code' => $result->code, '%error' => $result->error)), 'warning');
- }
- }
- }
- /**
- * Implementation of hook_node_update().
- */
- function twitter_post_node_update($node) {
- twitter_post_node_insert($node);
- }
- /**
- * Generate a twitter posting form for the given user.
- *
- * @param $account
- * A Drupal user object.
- */
- function twitter_post_form($account = NULL) {
- drupal_add_js(drupal_get_path('module', 'twitter_post') . '/twitter_post.js');
- if (empty($account)) {
- $account = user_load($GLOBALS['user']->uid);
- }
- if (!user_access('post to twitter', $account)) {
- return;
- }
- $options = array();
- foreach ($account->twitter_accounts as $twitter_account) {
- $options[$twitter_account->id] = $twitter_account->screen_name;
- }
- if (count($options)) {
- $form = array();
- $form['status'] = array(
- '#type' => 'textfield',
- '#id' => 'twitter-textfield',
- );
- if (count($options) > 1) {
- $form['account'] = array(
- '#type' => 'select',
- '#title' => t('Account'),
- '#options' => $options,
- '#id' => 'twitter-account',
- );
- }
- else {
- $form['account'] = array(
- '#type' => 'value',
- '#value' => array_pop(array_keys($options)),
- );
- }
- return $form;
- }
- }
|