You are here

jquery_social_stream.module in jQuery social stream 8.2

Code for the Campaign social media module.

File

jquery_social_stream.module
View source
<?php

/**
 * @file
 * Code for the Campaign social media module.
 */

/**
 * Implements hook_theme().
 */
function jquery_social_stream_theme() {
  return array(
    'jquery_social_stream' => array(
      'variables' => array(
        'content_id' => '',
        'content' => '',
        'header' => '',
        'footer' => '',
        'settings' => '',
      ),
    ),
  );
}

/**
 * Returns content of feed block.
 */
function jquery_social_stream_block_content($conf, $content = '') {
  global $base_path;
  $block = array();
  $content_id = $conf['id'];
  unset($conf['id']);
  $header = $conf['header'];
  unset($conf['header']);
  $footer = $conf['footer'];
  unset($conf['footer']);
  if (isset($conf['general']) && is_array($conf['general'])) {
    $conf += $conf['general'];
  }
  unset($conf['general']);

  // Twitter callback path.
  $conf['feeds']['twitter']['url'] = $base_path . 'js/jquery_social_stream/twitter';

  // Facebook callback path.
  $conf['feeds']['facebook']['url'] = $base_path . 'js/jquery_social_stream/facebook';
  $config = \Drupal::config('jquery_social_stream.settings');

  // Google+ API key.
  $conf['feeds']['google']['api_key'] = $config
    ->get('google_key');

  // YouTube API key.
  $conf['feeds']['youtube']['api_key'] = $config
    ->get('youtube_key');

  // Instagram API info.
  $conf['feeds']['instagram']['accessToken'] = $config
    ->get('instagram_access_token');
  $conf['feeds']['instagram']['redirectUrl'] = $config
    ->get('instagram_redirect_url');
  $conf['feeds']['instagram']['clientId'] = $config
    ->get('instagram_client_id');
  if (!empty($conf['wall'])) {
    $conf['theme'] = 'dark_1';
    $conf['rotate'] = array(
      'delay' => 0,
    );
  }
  if ($conf['theme'] != '_custom') {
    $styles = jquery_social_stream_styles();
    $style = $styles[$conf['theme']];
    $conf['iconPath'] = $GLOBALS['base_path'] . $style['iconPath'];
    $conf['imagePath'] = $GLOBALS['base_path'] . $style['imagePath'];
    $css = $style['css'];
    foreach ($style['classes'] as $key => $val) {
      $conf[$key] = $val;
    }
  }
  $block['subject'] = '';
  $block['content'] = array(
    '#theme' => 'jquery_social_stream',
    '#content_id' => $content_id,
    '#content' => $content,
    '#header' => $header,
    '#footer' => $footer,
    '#settings' => $conf,
    '#attached' => array(
      'js' => array(),
    ),
  );
  $js_filenames = jquery_social_stream_js_filenames();
  if (empty($conf['wall'])) {
    if (isset($css)) {
      $block['content']['#attached']['css'] = array(
        $css,
      );
    }
  }
  else {

    // Plugin wall js.
    $block['content']['#attached']['js'][] = array(
      'data' => libraries_get_path('jquery-social-stream') . '/js/' . $js_filenames['wall'],
      'type' => 'file',
    );
    $block['content']['#attached']['css'] = array(
      libraries_get_path('jquery-social-stream') . '/css/dcsns_wall.css',
    );
  }

  // Plugin stream js.
  $block['content']['#attached']['js'][] = array(
    'data' => libraries_get_path('jquery-social-stream') . '/js/' . $js_filenames['stream'],
    'type' => 'file',
  );

  // Module's js.
  $block['content']['#attached']['js'][] = array(
    'data' => drupal_get_path('module', 'jquery_social_stream') . '/jquery_social_stream.js',
    'type' => 'file',
  );

  // Module's css.
  $block['content']['#attached']['css'][] = drupal_get_path('module', 'jquery_social_stream') . '/jquery_social_stream.css';

  // Settings.
  $block['content']['#attached']['js'][] = array(
    'data' => array(
      'jQuerySocialStream' => array(
        $content_id => $conf,
      ),
    ),
    'type' => 'setting',
  );
  return $block;
}

/**
 * Returns textfield form element.
 */
function _jquery_social_stream_settings_text(&$form, $conf, $name, $title, $description, $default = '', $maxlength = 128) {
  $form[$name] = array(
    '#type' => 'textfield',
    '#title' => t($title),
    '#description' => t($description),
    '#default_value' => isset($conf[$name]) ? $conf[$name] : $default,
    '#maxlength' => $maxlength,
  );
}

/**
 * Returns textfield form element.
 */
function _jquery_social_stream_settings_select(&$form, $conf, $name, $title, $description, $options, $default) {
  $form[$name] = array(
    '#type' => 'select',
    '#title' => t($title),
    '#description' => t($description),
    '#options' => $options,
    '#default_value' => isset($conf[$name]) ? $conf[$name] : $default,
  );
}

/**
 * Available plugin styles.
 */
function jquery_social_stream_styles() {
  return array(
    'light_1' => array(
      'title' => t('Light 1'),
      'css' => libraries_get_path('jquery-social-stream') . '/css/dcsns_light.css',
      'iconPath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-light/',
      'imagePath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-light/',
      'classes' => array(
        'container' => 'dcsns',
        'cstream' => 'stream',
        'content' => 'dcsns-content',
      ),
    ),
    'light_2' => array(
      'title' => t('Light 2'),
      'css' => libraries_get_path('jquery-social-stream') . '/css/dcsns_light.css',
      'iconPath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-light-1/',
      'imagePath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-light-1/',
      'classes' => array(
        'container' => 'dcsns',
        'cstream' => 'stream',
        'content' => 'dcsns-content',
      ),
    ),
    'dark_1' => array(
      'title' => t('Dark 1'),
      'css' => libraries_get_path('jquery-social-stream') . '/css/dcsns_dark.css',
      'iconPath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-dark/',
      'imagePath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-dark/',
      'classes' => array(
        'container' => 'dcsns',
        'cstream' => 'stream',
        'content' => 'dcsns-content',
      ),
    ),
    'dark_2' => array(
      'title' => t('Dark 2'),
      'css' => libraries_get_path('jquery-social-stream') . '/css/dcsns_dark.css',
      'iconPath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-dark-1/',
      'imagePath' => libraries_get_path('jquery-social-stream') . '/images/dcsns-dark-1/',
      'classes' => array(
        'container' => 'dcsns',
        'cstream' => 'stream',
        'content' => 'dcsns-content',
      ),
    ),
  );
}

/**
 * General stream settings.
 */
function jquery_social_stream_settings_form($conf) {
  $form = array();
  $general_form = jquery_social_stream_common_form(!empty($conf['general']) ? $conf['general'] : array());
  $general_form['#type'] = 'details';
  $general_form['#title'] = 'General streams settings';
  $general_form['#tree'] = TRUE;
  $general_form['#open'] = FALSE;
  $form['id'] = array(
    '#type' => 'textfield',
    '#title' => 'Feed ID',
    '#description' => 'Feed container <em>id</em> attribute.',
    '#required' => TRUE,
    '#default_value' => isset($conf['id']) ? $conf['id'] : '',
    '#element_validate' => array(
      'jquery_social_stream_validate_container_id',
    ),
  );
  $form['header'] = array(
    '#type' => 'textarea',
    '#title' => t('Header text'),
    '#description' => 'Text right above the feed.',
    '#default_value' => isset($conf['header']) ? $conf['header'] : '',
  );
  $form['footer'] = array(
    '#type' => 'textarea',
    '#title' => t('Footer text'),
    '#description' => 'Text right below the feed.',
    '#default_value' => isset($conf['footer']) ? $conf['footer'] : '',
  );
  $form['general'] = $general_form;
  $form['feeds'] = array(
    '#type' => 'details',
    '#title' => t('Feeds'),
    '#tree' => TRUE,
    '#open' => TRUE,
  );
  $types = array(
    'facebook' => t('Facebook'),
    'twitter' => t('Twitter'),
    'google' => t('Google +1'),
    'youtube' => t('YouTube'),
    'flickr' => t('Flickr'),
    'delicious' => t('Delicious'),
    'pinterest' => t('Pinterest'),
    'rss' => t('RSS feed'),
    'lastfm' => t('Last.fm'),
    'dribbble' => t('Dribbble'),
    'vimeo' => t('Vimeo'),
    'stumbleupon' => t('Stumbleupon'),
    'deviantart' => t('Deviantart'),
    'tumblr' => t('Tumblr'),
    'instagram' => t('Instagram'),
  );
  foreach ($types as $type => $type_name) {
    $function = "jquery_social_stream_{$type}_form";
    if (function_exists($function)) {
      $type_form = $function(!empty($conf['feeds'][$type]) ? $conf['feeds'][$type] : array());
      $type_form['#type'] = 'details';
      $type_form['#title'] = $type_name;
      $type_form['#open'] = FALSE;
      $form['feeds'][$type] = $type_form;
    }
  }
  return $form;
}

/**
 * Common stream settings.
 */
function jquery_social_stream_common_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'remove', 'Removed posts', 'This option allows you to remove specific posts from the stream. To remove posts enter the URL of the post. To remove multiple posts enter each URL separated by a comma (e.g <em>https://twitter.com/designchemical/status/364012915533164544</em>)');
  _jquery_social_stream_settings_text($form, $conf, 'twitterId', 'Twitter ID', 'Enter your twitter username to be used when sharing posts via twitter - this will be added to the tweets as "via @username".');
  _jquery_social_stream_settings_select($form, $conf, 'max', 'Feed size mode', 'Set whether to create the feed based on maximum days or number of results per network.', array(
    'days' => t('Age'),
    'limit' => t('Limit'),
  ), 'days');
  _jquery_social_stream_settings_text($form, $conf, 'days', 'Age', 'Maximum age of stream items in days.', 30);
  $form['days']['#states'] = array(
    'visible' => array(
      ':input[name$="[max]"]' => array(
        'value' => 'days',
      ),
    ),
  );
  _jquery_social_stream_settings_text($form, $conf, 'limit', 'Limit', 'Maximum number of results to check/return for each social network.', 50);
  $form['limit']['#states'] = array(
    'visible' => array(
      ':input[name$="[max]"]' => array(
        'value' => 'limit',
      ),
    ),
  );
  _jquery_social_stream_settings_select($form, $conf, 'external', 'External links', 'Select whether to open all links in new browser window.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  _jquery_social_stream_settings_text($form, $conf, 'speed', 'Speed', 'Speed (in milliseconds) of animation.', '600');
  _jquery_social_stream_settings_text($form, $conf, 'height', 'Height', 'Height in pixels of stream container.', '520');
  _jquery_social_stream_settings_select($form, $conf, 'wall', 'Wall', 'Select whether to output the social stream as an isotope powered social network wall.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  _jquery_social_stream_settings_select($form, $conf, 'order', 'Order', 'Set to <em>Random</em> to order wall feed items randomly as opposed to by <em>Date</em>.', array(
    'date' => 'Date',
    'random' => t('Random'),
  ), 'date');
  _jquery_social_stream_settings_select($form, $conf, 'filter', 'Filter', 'Select whether to include a filter navigation allowing the user to filter specific social networks.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 1);
  _jquery_social_stream_settings_select($form, $conf, 'controls', 'Controls', 'Select whether to include links for controlling feed rotator.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 1);
  $form['rotate'] = array(
    '#type' => 'details',
    '#title' => t('Rotate'),
    '#tree' => TRUE,
    '#description' => t('Feed rotator options.'),
    '#open' => TRUE,
    '#states' => array(
      'visible' => array(
        ':input[name$="[wall]"]' => array(
          'value' => 0,
        ),
      ),
    ),
  );
  if (!isset($conf['rotate'])) {
    $conf['rotate'] = array();
  }
  _jquery_social_stream_settings_select($form['rotate'], $conf['rotate'], 'direction', 'Direction', 'Direction for content rotation', array(
    'up' => t('Up'),
    'down' => t('Down'),
  ), 'up');
  _jquery_social_stream_settings_text($form['rotate'], $conf['rotate'], 'delay', 'Delay', 'Delay in milliseconds between rotations - if set to 0 the automatic rotation effect is disabled.', '8000');
  _jquery_social_stream_settings_select($form, $conf, 'cache', 'Cache', 'Select whether to cache AJAX response, set to false to force response not to be cached by the browser.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  $styles = jquery_social_stream_styles();
  foreach ($styles as &$style) {
    $style = $style['title'];
  }
  $styles['_custom'] = t('Custom');
  $form['theme'] = array(
    '#type' => 'select',
    '#title' => t('Stream style'),
    '#description' => t('Select one of pre-defined themes, or <em>Custom</em> to define custom styling.'),
    '#options' => $styles,
    '#default_value' => isset($conf['theme']) ? $conf['theme'] : reset($styles),
    '#states' => array(
      'visible' => array(
        ':input[name$="[wall]"]' => array(
          'value' => 0,
        ),
      ),
    ),
  );
  _jquery_social_stream_settings_text($form, $conf, 'container', 'Container class', 'CSS class of main element', 'dcsns');
  _jquery_social_stream_settings_text($form, $conf, 'cstream', 'Stream list class', 'CSS class of stream ul tag.', 'stream');
  _jquery_social_stream_settings_text($form, $conf, 'content', 'Content class', 'CSS class of main content wrapper.', 'dcsns-content');
  _jquery_social_stream_settings_text($form, $conf, 'iconPath', 'Icon path', '', $GLOBALS['base_path'] . libraries_get_path('jquery-social-stream') . '/images/dcsns-dark/');
  _jquery_social_stream_settings_text($form, $conf, 'imagePath', 'Image path', '', $GLOBALS['base_path'] . libraries_get_path('jquery-social-stream') . '/images/dcsns-dark/');
  $form['iconPath']['#states'] = $form['imagePath']['#states'] = $form['container']['#states'] = $form['cstream']['#states'] = $form['content']['#states'] = array(
    'visible' => array(
      ':input[name$="[theme]"]' => array(
        'value' => '_custom',
      ),
    ),
  );
  _jquery_social_stream_settings_select($form, $conf, 'debug', 'Debug', 'Select whether to include returned error messages in feed items', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  return $form;
}

/**
 * Twitter settings form.
 */
function jquery_social_stream_twitter_form($conf) {
  $form = array();
  $api_key = \Drupal::config('jquery_social_stream.settings')
    ->get('twitter_api_key');
  if (!$api_key) {
    $form['#description'] = t('Please note you must enter Twitter API keys at <a href="/admin/config/services/jquery-social-stream">admin/config/services/jquery-social-stream</a> to display Twitter feed');
  }
  $id_description = '<p>Twitter has 3 different feed options:</p>
<dl>
<dt>Tweets from a specific user name</dt>
<dd>Enter the required user name (minus the "@" symbol) (e.g. <em>designchemical</em>)</dd>
<dt>Tweets from a list</dt>
<dd>To show a list enter "/" followed by the list ID you want to display (e.g. <em>/9927875</em>)</dd>
<dt>Tweets from a search</dt>
<dd>Enter "#" followed by the search term (e.g. <em>#designchemical</em>)</dd></dl>';
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Twitter ID', $id_description, '', 512);
  _jquery_social_stream_settings_select($form, $conf, 'retweets', 'Retweets', 'Select whether to  to include retweets.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  _jquery_social_stream_settings_select($form, $conf, 'replies', 'Replies', 'Select whether to  to include replies.', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 0);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Intro', 'Feed item intro text.', t('Tweeted'));
  _jquery_social_stream_settings_text($form, $conf, 'search', 'Search', 'Search item intro text.', t('Tweeted'));
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, text, user, share.', 'intro,text,user,share');
  $images_options = array(
    '' => 'None',
    'thumb' => 'Thumb (150x150 px)',
    'small' => 'Small (340x150 px)',
    'medium' => 'Medium (600x264 px)',
    'large' => 'Large (768x346 px)',
  );
  _jquery_social_stream_settings_select($form, $conf, 'images', 'Images', 'Option to show twitter images. Select one of the sizes to include the image when available or <em>None</em> to exclude images.', $images_options, '');
  $form['icon'] = array(
    '#type' => 'value',
    '#value' => 'twitter.png',
  );
  $form['url'] = array(
    '#type' => 'value',
    '#value' => 'js/jquery_social_stream/twitter',
  );
  return $form;
}

/**
 * Facebook settings form.
 */
function jquery_social_stream_facebook_form($conf) {
  $form = array();
  $api_key = \Drupal::config('jquery_social_stream.settings')
    ->get('facebook_app_id');
  if (!$api_key) {
    $form['#description'] = t('Please note you must enter Facebook App info at <a href="/admin/config/services/jquery-social-stream">admin/config/services/jquery-social-stream</a> to display Facebook feed');
  }
  $id_description = '<p>Facebook has 2 different ID options:</p>
<dl>
<dt>Facebook page wall posts</dt>
<dd>Enter the page ID. For facebook page posts the ID of your facebook page must be used -
this should be a numerical value, not the actual name of your facebook page (e.g. <em>157969574262873</em>).
To get the ID from your username you can use the following tool from facebook - replace "[username]" with the
name of your Facebook page profile: https://graph.facebook.com/[username]</dd>
<dt>Facebook page gallery images</dt>
<dd>Enter the text you would like to show for the facebook gallery name followed by "/" followed by the page gallery ID (e.g. <em>Facebook Timeline/376995711728</em>)</dd></dl>';
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Facebook ID', $id_description, '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Intro', 'Feed item intro text.', t('Posted to wall'));
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share.', 'intro,thumb,title,text,user,share');
  $comments_options = range(0, 25);
  $comments_options = array_combine($comments_options, $comments_options);
  _jquery_social_stream_settings_select($form, $conf, 'comments', 'Comments', 'the maximum number of comments to display for facebook page gallery images.', $comments_options, 3);
  $width_options = array(
    3 => '600px',
    4 => '480px',
    5 => '320px',
    6 => '180px',
  );
  _jquery_social_stream_settings_select($form, $conf, 'image_width', 'Image width', 'Select the image size for facebook gallery images.', $width_options, 6);
  _jquery_social_stream_settings_select($form, $conf, 'feed', 'Feed', '<em>Feed</em>: show all posts on the facebook page, including those by other users. <em>Posts</em>: show only those posts made by the page admin.', array(
    'feed' => t('Feed'),
    'posts' => t('Posts'),
  ), 'feed');
  $form['icon'] = array(
    '#type' => 'value',
    '#value' => 'facebook.png',
  );
  return $form;
}

/**
 * Google +1 settings form.
 */
function jquery_social_stream_google_form($conf) {
  $form = array();
  $api_key = \Drupal::config('jquery_social_stream.settings')
    ->get('google_key');
  if (!$api_key) {
    $form['#description'] = t('Please note you must enter Google +1 API key at <a href="/admin/config/services/jquery-social-stream">admin/config/services/jquery-social-stream</a> to display Google +1 feed');
  }
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Google +1 profile IDs', '', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', '', 'Shared');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options are: intro, thumb, title, text, share', 'intro,thumb,title,text,share');
  _jquery_social_stream_settings_text($form, $conf, 'image_height', 'Google +1 Thumbnail height', '', '90');
  _jquery_social_stream_settings_text($form, $conf, 'image_width', 'Google +1 Thumbnail width', '', '90');
  _jquery_social_stream_settings_select($form, $conf, 'shares', 'Include share stats', '', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 1);
  return $form;
}

/**
 * YouTube settings form.
 */
function jquery_social_stream_youtube_form($conf) {
  $form = array();
  $api_key = \Drupal::config('jquery_social_stream.settings')
    ->get('youtube_key');
  if (!$api_key) {
    $form['#description'] = t('Please note you must enter YouTube API key at <a href="/admin/config/services/jquery-social-stream">admin/config/services/jquery-social-stream</a> to display YouTube feed');
  }
  _jquery_social_stream_settings_text($form, $conf, 'id', 'YouTube ID', '<p>YouTube has 2 different ID options:</p>
<dl><dt>Videos from a specific user name</dt><dd>Enter the required user name (e.g. <em>designchemical</em>)</dd>
<dt>Videos from a search</dt><dd>Enter "#" followed by the search term (e.g. <em>#designchemical</em>)</dd>
<dt>Videos from a playlist</dt><dd>Enter the text you would like to show for the playlist name followed by "/" then the playlist ID (e.g. <em>Playlist Title/8BCDD04DE8F771B2</em>)</dd></dl>
<p>Note: The maximum limit for each youtube feed is 50 - if the limit option is set higher than 50 the plugin will automatically use 50 for youtube feeds.</p>', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', '', 'Uploaded,Favorite,New Video');
  _jquery_social_stream_settings_text($form, $conf, 'search', 'Search item intro text', '', 'Search');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,share');
  _jquery_social_stream_settings_text($form, $conf, 'feed', 'Feed options', 'Availavle options: uploads, favorites, newsubscriptionvideos. Only applies to user names.', 'uploads,favorites,newsubscriptionvideos');
  _jquery_social_stream_settings_select($form, $conf, 'thumb', 'Size of thumbnail image', '', array(
    'default' => '120px',
    0 => '480px',
  ), 'default');
  return $form;
}

/**
 * Flickr settings form.
 */
function jquery_social_stream_flickr_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Flickr ID ', '<p>Flickr has 2 different ID options:</p>
<dl><dt>Uploads from a specific user name</dt><dd>Enter the required user name</dd><dt>Images from a group</dt><dd>Enter "/" followed by the flickr group ID</dd></dl>', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, share', 'intro,thumb,title,text,share');
  _jquery_social_stream_settings_text($form, $conf, 'lang', 'Language', '', 'en-us');
  return $form;
}

/**
 * Delicious settings form.
 */
function jquery_social_stream_delicious_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Delicious usernames', 'You can enter multiple usernames separated by comma.', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', '', 'Bookmarked');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  return $form;
}

/**
 * Pinterest settings form.
 */
function jquery_social_stream_pinterest_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Pinterest ID', '<p>Pinterest has 2 different ID options:</p>
<dl><dt>Posts for a user name</dt><dd>Enter the required user name</dd><dt>Posts for a specific user board</dt><dd>Enter the user name followed by "/" and then the board name (e.g. <em>designchemical/design-ideas</em>)</dd></dl>', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Pinned', 'Feed item intro text');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  return $form;
}

/**
 * RSS feed settings form.
 */
function jquery_social_stream_rss_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'RSS feed URLs', 'You can enter multiple URLs separated by comma.', '', 1024);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', '', 'Posted');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, title, text, share', 'intro,thumb,title,text,share');
  _jquery_social_stream_settings_select($form, $conf, 'text', 'RSS element', 'Select the RSS element to use in the feed output. <em>Content</em> will output complete wall post text including any images, <em>Сontent snippet</em> (default) shows brief introduction.', array(
    'contentSnippet' => t('Content snippet'),
    'content' => t('Content'),
  ), 'contentSnippet');
  return $form;
}

/**
 * Last.fm settings form.
 */
function jquery_social_stream_lastfm_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Last.fm usernames', 'You can enter multiple usernames separated by comma.', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Listened to,Loved,Replied');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  _jquery_social_stream_settings_text($form, $conf, 'feed', 'Feed type', '<p>Options include</p><dl>
  <dt>lovedtracks</dt><dd>A feed of tracks a user has loved</dd>
  <dt>recenttracks</dt><dd>10 recently played tracks for this profile</dd>
  <dt>replytracker</dt><dd>A feed of replies to a user\'s forum posts and journal comments</dd>', 'recenttracks,lovedtracks,replytracker');
  return $form;
}

/**
 * Dribbble settings form.
 */
function jquery_social_stream_dribbble_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Dribbble ID', '');
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Posted shot,Liked');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  _jquery_social_stream_settings_text($form, $conf, 'feed', 'Feed type', 'Options available: shots, likes', 'shots,likes');
  return $form;
}

/**
 * Vimeo settings form.
 */
function jquery_social_stream_vimeo_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Vimeo ID', '');
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Liked,Video,Appeared In,Video,Album,Channel,Group');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  _jquery_social_stream_settings_text($form, $conf, 'feed', 'Feed', '<p>Options available:</p><dl><dt>likes</dt><dd>Most recent likes</dd>
<dt>videos</dt><dd>Videos created by user</dd>
<dt>appears_in</dt><dd>Videos that the user appears in</dd>
<dt>all_videos</dt><dd>Videos that the user appears in and created</dd>
<dt>albums</dt><dd>Albums the user has created</dd>
<dt>channels</dt><dd>Channels the user has created and subscribed to</dd>
<dt>groups</dt><dd>Groups the user has created and joined</dd></dl>', 'likes,videos,appears_in,all_videos,albums,channels,groups');
  _jquery_social_stream_settings_select($form, $conf, 'thumb', 'Size of thumbnail image', '', array(
    'small' => t('100px wide'),
    'medium' => t('200px wide'),
    'large' => t('640px wide'),
  ), 'medium');
  _jquery_social_stream_settings_select($form, $conf, 'stats', 'Stats', 'If selected the feed will include statistics (e.g. number of likes, views, comments, etc)', array(
    1 => t('Yes'),
    0 => t('No'),
  ), 1);
  return $form;
}

/**
 * Stumbleupon settings form.
 */
function jquery_social_stream_stumbleupon_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Stumbleupon usernames', 'You can enter multiple usernames separated by comma.', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Shared,Reviewed');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  _jquery_social_stream_settings_text($form, $conf, 'feed', 'Feed', '<p>Options available:</p><dl><dt>favorites</dt><dd>The sites you thumbed up</dd><dt>reviews</dt><dd>Reviews you have written</dd>', 'favorites,reviews');
  return $form;
}

/**
 * Deviantart settings form.
 */
function jquery_social_stream_deviantart_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Deviantart usernames', 'You can enter multiple usernames separated by comma.', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Deviation');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, title, text, user, share', 'intro,thumb,title,text,user,share');
  return $form;
}

/**
 * Tumblr settings form.
 */
function jquery_social_stream_tumblr_form($conf) {
  $form = array();
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Tumblr usernames', 'You can enter multiple usernames separated by comma.', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', 'Posted');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, title, text, user, share', 'intro,title,text,user,share');
  _jquery_social_stream_settings_select($form, $conf, 'thumb', 'Width of thumbnail image', '', array(
    '75' => t('75px'),
    '100' => t('100px'),
    '250' => t('250px'),
    '400' => t('400px'),
    '500' => t('500px'),
    '1280' => t('1280px'),
  ), '100');
  _jquery_social_stream_settings_select($form, $conf, 'video', 'Width of video player', 'For video type posts.', array(
    '250' => t('250px'),
    '400' => t('400px'),
    '500' => t('500px'),
  ), '250');
  return $form;
}

/**
 * Instagram settings form.
 */
function jquery_social_stream_instagram_form($conf) {
  $form = array();
  $access_token = \Drupal::config('jquery_social_stream.settings')
    ->get('instagram_access_token');
  if (!$access_token) {
    $form['#description'] = t('Please note you must enter Instagram API info at <a href="/admin/config/services/jquery-social-stream">admin/config/services/jquery-social-stream</a> to display Instagram feed');
  }
  _jquery_social_stream_settings_text($form, $conf, 'id', 'Instagram ID', '<p>Instagram can handle 4 different types of network feed ID - search, tags, user ID and a location ID:</p>
<dl>
<dt>Search</dt><dd>This will return Instagram posts based on a geographical location, which is defined by a latitude &amp; longitude plus a distance. To enter a search ID start with the character "?" followed by the latitude, longitude and distance in meters (up to a maximum of 5000) all separated by a "/" (e.g. <em>?55.5/0/20</em>)</dd>
<dt>Tags</dt><dd>To search by tag start with the character "#" followed by the tag (e.g. <em>#london</em>)</dd>
<dt>User ID</dt><dd>To show latest posts by user start the ID with a "!" followed by the user\'s profile ID (e.g. <em>!12345</em>)</dd>
<dt>Location ID</dt><dd>To show latest posts by a location ID start with a "@" followed by the ID (e.g. <em>@12345</em>)</dd>
</dl>
<p>As with all networks multiple feeds can be entered by separating each feed ID with a comma:  e.g. id: <em>?50.3/40.8/10,#london,!12345,@12345</em></p>', '', 512);
  _jquery_social_stream_settings_text($form, $conf, 'intro', 'Feed item intro text', '', 'Posted');
  _jquery_social_stream_settings_text($form, $conf, 'search', 'Search item intro text', '', 'Search');
  _jquery_social_stream_settings_text($form, $conf, 'out', 'Output', 'Stream item output: content blocks & order. Available options: intro, thumb, text, user, share, meta', 'intro,thumb,text,user,share,meta');
  _jquery_social_stream_settings_text($form, $conf, 'comments', 'Number of comments to display', 'Enter the maximum number of comments to display for each instagram image. Set to zero to disable comments.', '0');
  _jquery_social_stream_settings_text($form, $conf, 'likes', 'Number of likes to display', 'Enter the maximum number of profile thumbnails to display for users who have liked a post. Set to zero to disable likes.', '0');
  _jquery_social_stream_settings_select($form, $conf, 'thumb', 'Width & Height of image', '', array(
    'thumbnail' => t('Thumbnail (150 px)'),
    'low_resolution' => t('Low resolution (306 px)'),
    'standard_resolution' => t('Standard resolution (612 px)'),
  ), 'low_resolution');
  return $form;
}

/**
 * Returns names of the plugin js files (with versions).
 */
function jquery_social_stream_js_filenames() {
  $cache = \Drupal::cache()
    ->get('jquery_social_stream:js_filenames');
  if (!$cache) {
    $filenames = array(
      'wall' => '',
      'stream' => '',
    );
    $files = scandir(libraries_get_path('jquery-social-stream') . '/js/');
    foreach ($files as $file) {
      if (preg_match('/jquery.social.stream[\\d\\.]*.min.js/', $file)) {
        $filenames['stream'] = $file;
      }
      elseif (preg_match('/jquery.social.stream.wall[\\d\\.]*.js/', $file)) {
        $filenames['wall'] = $file;
      }
    }
    \Drupal::cache()
      ->set('jquery_social_stream:js_filenames', $filenames);
  }
  else {
    $filenames = $cache->data;
  }
  return $filenames;
}

/**
 * Validate callback for container id.
 */
function jquery_social_stream_validate_container_id($element, &$form_state) {
  $value = $element['#value'];
  if ($value !== '' && !preg_match('/^[-_a-z]+$/', $value)) {
    form_error($element, t('%name must contain only lowercase letters, numbers, hyphens and underscores.', array(
      '%name' => $element['#title'],
    )));
  }
}

Functions

Namesort descending Description
jquery_social_stream_block_content Returns content of feed block.
jquery_social_stream_common_form Common stream settings.
jquery_social_stream_delicious_form Delicious settings form.
jquery_social_stream_deviantart_form Deviantart settings form.
jquery_social_stream_dribbble_form Dribbble settings form.
jquery_social_stream_facebook_form Facebook settings form.
jquery_social_stream_flickr_form Flickr settings form.
jquery_social_stream_google_form Google +1 settings form.
jquery_social_stream_instagram_form Instagram settings form.
jquery_social_stream_js_filenames Returns names of the plugin js files (with versions).
jquery_social_stream_lastfm_form Last.fm settings form.
jquery_social_stream_pinterest_form Pinterest settings form.
jquery_social_stream_rss_form RSS feed settings form.
jquery_social_stream_settings_form General stream settings.
jquery_social_stream_stumbleupon_form Stumbleupon settings form.
jquery_social_stream_styles Available plugin styles.
jquery_social_stream_theme Implements hook_theme().
jquery_social_stream_tumblr_form Tumblr settings form.
jquery_social_stream_twitter_form Twitter settings form.
jquery_social_stream_validate_container_id Validate callback for container id.
jquery_social_stream_vimeo_form Vimeo settings form.
jquery_social_stream_youtube_form YouTube settings form.
_jquery_social_stream_settings_select Returns textfield form element.
_jquery_social_stream_settings_text Returns textfield form element.