You are here

socialmedia.module in Social media 7

Demonstrate basic module socialmedia.

File

socialmedia.module
View source
<?php

// $Id$

/**
 * @file
 * Demonstrate basic module socialmedia.
 */
define('SOCIALMEDIA_WIDTH_DEFAULT', '292');
define('SOCIALMEDIA_HEIGHT_DEFAULT', '300');
define('SOCIALMEDIA_COLOR_BODY_BACKGROUND_DEFAULT', '#F6F6F2');
define('SOCIALMEDIA_COLOR_BODY_TEXT_DEFAULT', '#3B3B3B');
define('SOCIALMEDIA_COLOR_BODY_LINKTEXT_DEFAULT', '#0779BF');
define('SOCIALMEDIA_COLOR_HEADER_BACKGROUND_DEFAULT', '#DDDDDD');
define('SOCIALMEDIA_COLOR_HEADER_TEXT_DEFAULT', '#3B3B3B');
define('SOCIALMEDIA_COLOR_BORDER_DEFAULT', '#D6D6D6');
define('SOCIALMEDIA_LINK_TARGET_PROFILE_DEFAULT', '_blank');
define('SOCIALMEDIA_LINK_TARGET_SHARING_DEFAULT', '_blank');
define('SOCIALMEDIA_LINK_REL_PROFILE_DEFAULT', '<none>');
define('SOCIALMEDIA_LINK_REL_SHARING_DEFAULT', '<none>');
define('SOCIALMEDIA_LINK_CLASS_PROFILE_DEFAULT', '<none>');
define('SOCIALMEDIA_LINK_CLASS_SHARING_DEFAULT', '<none>');
define('SOCIALMEDIA_ICON_DEFAULT_STYLE_DEFAULT', 'levelten_glossy:32x32');

// Permissions
define('SOCIALMEDIA_PERM_ADMINISTER', 'administer social media');
define('SOCIALMEDIA_PERM_ADMINISTER_OWN_PROFILES', 'administer own social profiles');
define('SOCIALMEDIA_PERM_ADMINISTER_ANY_PROFILES', 'administer any social profiles');

// TODO figure out better way to include widgetx_elements
include_once drupal_get_path('module', 'socialmedia') . '/socialmedia.widgets.inc';
include_once drupal_get_path('module', 'socialmedia') . '/socialmedia.platforms.inc';
include_once drupal_get_path('module', 'socialmedia') . '/socialmedia.icons.inc';

/**
 * Implements hook_permission().
 */
function socialmedia_permission() {
  return array(
    SOCIALMEDIA_PERM_ADMINISTER => array(
      'title' => t('Administer social media'),
      'description' => t('Can configure any social media settings and profiles.'),
    ),
    SOCIALMEDIA_PERM_ADMINISTER_OWN_PROFILES => array(
      'title' => t('Administer own social profiles'),
      'description' => t('Can setup user level social media profiles for their user account.'),
    ),
    SOCIALMEDIA_PERM_ADMINISTER_ANY_PROFILES => array(
      'title' => t('Administer any social profiles'),
      'description' => t('Can setup user level social media profiles for any user account.'),
    ),
  );
}

/**
 * Implements hook_menu().
 */
function socialmedia_menu() {

  // Module settings.
  $items['admin/config/media/socialmedia'] = array(
    'title' => 'Social media',
    'description' => 'Social media defaults and site profile settings',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'socialmedia_admin_settings',
    ),
    'access arguments' => array(
      'administer social media',
    ),
    'file' => 'socialmedia.admin.inc',
    'file path' => drupal_get_path('module', 'socialmedia'),
    'type' => MENU_NORMAL_ITEM,
  );
  $items['admin/config/media/socialmedia/settings'] = array(
    'title' => 'Settings',
    'description' => 'Social media defaults and site profile settings',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'socialmedia_admin_settings',
    ),
    'access arguments' => array(
      'administer social media',
    ),
    'file' => 'socialmedia.admin.inc',
    'file path' => drupal_get_path('module', 'socialmedia'),
    'weight' => 0,
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
  $items['admin/config/media/socialmedia/profiles'] = array(
    'title' => 'Profiles',
    'description' => 'Social media profile configuration',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'socialmedia_admin_profiles_form',
    ),
    'access arguments' => array(
      'administer social media',
    ),
    'file' => 'socialmedia.admin.inc',
    'file path' => drupal_get_path('module', 'socialmedia'),
    'weight' => 1,
    'type' => MENU_LOCAL_TASK,
  );
  if (module_exists('redirect') && FALSE) {

    // TODO not implemented yet
    $items['admin/config/media/socialmedia/redirects'] = array(
      'title' => 'Redirects',
      'description' => 'Social media profile configuration',
      'page callback' => 'drupal_get_form',
      'page arguments' => array(
        'socialmedia_admin_redirect_form',
      ),
      'access arguments' => array(
        'administer social media',
      ),
      'file' => 'socialmedia.admin.inc',
      'file path' => drupal_get_path('module', 'socialmedia'),
      'weight' => 2,
      'type' => MENU_LOCAL_TASK,
    );
  }
  if (module_exists('widgets')) {
    $items['admin/config/media/socialmedia/widgets'] = array(
      'title' => 'Widgets',
      'description' => 'Social media widget sets configuration',
      'page callback' => 'drupal_get_form',
      'page arguments' => array(
        'socialmedia_admin_profile_widgets_form',
      ),
      'access arguments' => array(
        'administer social media',
      ),
      'file' => 'socialmedia.admin.inc',
      'file path' => drupal_get_path('module', 'socialmedia'),
      'weight' => 3,
      'type' => MENU_LOCAL_TASK,
    );
    $items['admin/config/media/socialmedia/widgets/profile'] = array(
      'title' => 'Default profile set',
      'description' => 'Social media default profile widget sets configuration',
      'page callback' => 'drupal_get_form',
      'page arguments' => array(
        'socialmedia_admin_profile_widgets_form',
      ),
      'access arguments' => array(
        'administer social media',
      ),
      'file' => 'socialmedia.admin.inc',
      'file path' => drupal_get_path('module', 'socialmedia'),
      'weight' => 0,
      'type' => MENU_DEFAULT_LOCAL_TASK,
    );
    $items['admin/config/media/socialmedia/widgets/share'] = array(
      'title' => 'Default share set',
      'description' => 'Social media default profile widget sets configuration',
      'page callback' => 'drupal_get_form',
      'page arguments' => array(
        'socialmedia_admin_share_widgets_form',
      ),
      'access arguments' => array(
        'administer social media',
      ),
      'file' => 'socialmedia.admin.inc',
      'file path' => drupal_get_path('module', 'socialmedia'),
      'weight' => 0,
      'type' => MENU_LOCAL_TASK,
    );
    $items['admin/config/media/socialmedia/setup'] = array(
      'title' => 'Setup wizard',
      'description' => 'Setup wizard to help you get started quickly.',
      'page callback' => 'socialmedia_admin_setup',
      'page arguments' => array(
        5,
      ),
      'access arguments' => array(
        'administer social media',
      ),
      'file' => 'socialmedia.setup.inc',
      'file path' => drupal_get_path('module', 'socialmedia'),
      'weight' => 2,
      'type' => MENU_LOCAL_ACTION,
    );
  }
  $items['user/%user/socialmedia'] = array(
    'title' => 'Social profiles',
    'description' => 'User social media profiles',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'socialmedia_admin_profiles_form',
      'user',
      1,
    ),
    //'page arguments' => array(),
    'access callback' => 'socialmedia_user_profile_access',
    'access arguments' => array(
      1,
    ),
    'type' => MENU_LOCAL_TASK,
    'file' => 'socialmedia.admin.inc',
  );

  /*
  // add menu items for redirects
  $platforms = socialmedia_platform_definitions();
  $defaults = array_keys($platforms);
  $active_platforms = variable_get('socialmedia_platforms_site_redirects', $defaults);
  foreach ($platforms AS $name => $platform) {
    if ((!isset($active_platforms[$name]) || !$active_platforms[$name]) || (!isset($platform['redirect path'])) {
      continue;
    }
    $profile = socialmedia_profile_load($name);

  }
  */
  $items['socialmedia/util'] = array(
    'title' => 'Social media util',
    'page callback' => 'socialmedia_util',
    'access arguments' => array(
      'access link intelligence',
    ),
    'type' => MENU_CALLBACK,
  );
  $items['socialmedia/util_pattern'] = array(
    'title' => 'Social media pattern util',
    'page callback' => 'socialmedia_util_pattern',
    'access arguments' => array(
      'access link intelligence',
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Access callback for user social profiles edition page
 * @global User $user Current user
 * @param User $account User whose profile is accessed
 * @return boolean Access granted
 */
function socialmedia_user_profile_access($account) {
  global $user;
  return user_access(SOCIALMEDIA_PERM_ADMINISTER_ANY_PROFILES) || $account->uid == $user->uid && user_access(SOCIALMEDIA_PERM_ADMINISTER_OWN_PROFILES);
}

/**
 * Implements hook_admin_paths()
 */
function socialmedia_admin_paths() {
  $paths = array(
    'user/*/socialmedia' => 1,
  );
  return $paths;
}
function socialmedia_util() {
  $platforms = socialmedia_platform_definitions();
  $defaults = drupal_map_assoc(array_keys($platforms));

  //dsm($defaults);
  $active_platforms = variable_get('socialmedia_platforms_site_redirects', $defaults);
  foreach ($platforms as $name => $platform) {
    if (!isset($active_platforms[$name]) || !$active_platforms[$name] || !isset($platform['redirect path'])) {
      continue;
    }
    $source = $platform['redirect path'];
    $profile = socialmedia_profile_load($name);
    if (!isset($profile['url'])) {
      continue;
    }
    if (!($redirect = redirect_load_by_source($source))) {
      $redirect = new stdClass();
      redirect_object_prepare($redirect, array(
        'source' => $source,
        'source_options' => array(),
        'redirect' => 'http://' . $profile['url'],
        'redirect_options' => array(),
        'language' => LANGUAGE_NONE,
      ));
    }
    redirect_save($redirect);
  }
  return '';
}
function socialmedia_util_pattern() {
  $str = <<<EOF
Twitter url: [socialmedia:twitter_url]
Twitter @username: [socialmedia:twitter_amp-username]

EOF;
  $output = $str;
  $output .= "<br /><br />";
  $output .= token_replace($str);
  return $output;
}

/**
 * Implements hook_help().
 */
function socialmedia_help($path, $arg) {
  switch ($path) {
    case 'admin/settings/socialmedia':
      return t('This is some help text for the socialmedia settings page.');
    case 'admin/help#socialmedia':
      $output = '<p>' . t('This is help text for the socialmedia help page') . '</p>';
      return $output;
  }
}
function socialmedia_profile_save($profile, $platform = null, $uid = null) {
  if (!isset($platform) && isset($profile['platform'])) {
    $platform = $profile['platform'];
  }
  if (!isset($uid)) {
    $uid = isset($profile['uid']) ? $profile['uid'] : 0;
  }
  $query = db_merge('socialmedia_profile');
  $query
    ->key(array(
    'platform' => $platform,
    'uid' => $uid,
  ));
  $query
    ->fields(array(
    'data' => serialize($profile),
  ));
  $id = $query
    ->execute();
}
function socialmedia_profile_load($platform, $uid = 0) {
  static $profiles = array();
  if (isset($profiles[$platform][$uid])) {
    return $profiles[$platform][$uid];
  }
  $query = db_select('socialmedia_profile', 'a')
    ->fields('a')
    ->condition('a.platform', $platform)
    ->condition('a.uid', $uid);
  $result = $query
    ->execute()
    ->fetchAssoc();
  if (!$result) {
    return FALSE;
  }
  $profile = unserialize($result['data']);
  $profile['result'] = $result;
  $profiles[$platform][$uid] = $profile;
  return $profile;
}
function socialmedia_profile_load_all($platform = null, $uid = null) {

  // Select all the user-defined sets.
  $query = db_select('socialmedia_profile', NULL, array(
    'fetch' => PDO::FETCH_ASSOC,
  ))
    ->fields('socialmedia_profile');
  if (isset($platform)) {
    $query
      ->condition('platform', $platform);
  }
  if (isset($uid)) {
    $query
      ->condition('uid', $uid);
  }
  $profiles = $query
    ->execute()
    ->fetchAllAssoc('smid', PDO::FETCH_ASSOC);
  return $profiles;
}

/**
 * Pull in image elements exposed by modules implementing hook_widgetx_element_info().
 *
 * @return
 *   An array of image elements to be used when transforming images.
 * @see hook_widgetx_element_info()
 * @see widgetx_element_definition_load()
 */
function socialmedia_platform_definitions() {
  global $language;
  static $platforms = NULL;
  if (isset($platforms)) {
    return $platforms;
  }
  $platforms = array();
  include_once drupal_get_path('module', 'socialmedia') . '/socialmedia.platforms.inc';
  foreach (module_implements('socialmedia_platform_info') as $module) {
    foreach (module_invoke($module, 'socialmedia_platform_info') as $name => $platform) {

      // Ensure the current toolkit supports the element.
      $platform['module'] = $module;
      $platform['name'] = $name;
      $platform['title'] = $platform['title'];
      $platform['data'] = isset($platform['data']) ? $platform['data'] : array();
      $platforms[$name] = $platform;
    }
  }
  return $platforms;
}

/**
 * Load the definition for an widget.
 *
 * The element definition is a set of core properties for an image element, not
 * containing any user-settings. The definition defines various functions to
 * call when configuring or executing an image element. This loader is mostly for
 * internal use within image.module. Use widgetx_element_load() or
 * widgetx_set_load() to get image elements that contain configuration.
 *
 * @param $element
 *   The name of the element definition to load.
 * @param $set
 *   An image set array to which this element will be added.
 * @return
 *   An array containing the image element definition with the following keys:
 *   - "element": The unique name for the element being performed. Usually prefixed
 *     with the name of the module providing the element.
 *   - "module": The module providing the element.
 *   - "help": A description of the element.
 *   - "function": The name of the function that will execute the element.
 *   - "form": (optional) The name of a function to configure the element.
 *   - "summary": (optional) The name of a theme function that will display a
 *     one-line summary of the element. Does not include the "theme_" prefix.
 */
function socialmedia_platform_definition_load($platform, $uid = NULL) {
  $definitions = socialmedia_platform_definitions();

  // If a set is specified, do not allow loading of default set
  // elements.
  // TODO: what was I doing here? I can't remember, commenting out logic

  /*
  if (isset($uid)) {
    $set = socialmedia_user_load($uid, NULL);
  }
  */
  return isset($definitions[$platform]) ? $definitions[$platform] : FALSE;
}
function socialmedia_widgets_set_form_alter(&$form, $set) {
  $data = $set['data'];
  $form['socialmedia'] = array(
    '#type' => 'fieldset',
    '#title' => t('Social media'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $options = array(
    'site' => t('Use site profiles only'),
    'user' => t('Use user profiles only'),
    'usersite' => t('Try user profiles first, fallback to site profiles.'),
  );
  $form['socialmedia']['profile_context'] = array(
    '#type' => 'radios',
    '#title' => t('Profile context'),
    '#description' => t('Both site and user level social media profiles can be enabed. This option sets which types of profiles to use for the this widget set.'),
    '#options' => $options,
    '#default_value' => isset($data['socialmedia']['profile_context']) ? $data['socialmedia']['profile_context'] : 'usersite',
  );
}
function _socialmedia_widgets_set_error($name, $msg, $status = 'warning') {
  if (module_exists('widgets')) {
    if (user_access('administer socialmedia')) {
      widgets_set_error($name, $msg);
    }
    else {
      widgets_set_error($name);
    }
  }
}
function socialmedia_update_redirects($redirects = array(), $original_redirects = array()) {
  if (!module_exists('redirect')) {
    return FALSE;
  }
  $platforms = socialmedia_platform_definitions();
  $defaults = drupal_map_assoc(array_keys($platforms));
  $active_platforms = variable_get('socialmedia_platforms_site_redirects_enabled', $defaults);
  $sources = variable_get('socialmedia_platforms_site_redirects_source', array());
  foreach ($platforms as $name => $platform) {
    if (!isset($active_platforms[$name]) && $active_platforms[$name]) {
      continue;
    }
    $source = '';
    if (isset($sources[$name])) {
      $source = $sources[$name];
    }
    elseif (isset($platform['redirect path'])) {
      $source = $platform['redirect path'];
    }
    if (!$source) {
      continue;
    }
    $source = $platform['redirect path'];
    $profile = socialmedia_profile_load($name);
    if (!isset($profile['url'])) {
      continue;
    }
    if ($redirect = redirect_load_by_source($source)) {
      $redirect->source = $source;
      $redirect->redirect = 'http://' . $profile['url'];
    }
    else {
      $redirect = new stdClass();
      redirect_object_prepare($redirect, array(
        'source' => $source,
        'source_options' => array(),
        'redirect' => 'http://' . $profile['url'],
        'redirect_options' => array(),
        'language' => LANGUAGE_NONE,
      ));
    }
    redirect_save($redirect);
  }
}

/** 
 * Determines if page has a author context. Uses widgets algo if widgets is installed
 * @param $data
 */
function socialmedia_get_context_author_uid($data) {
  if (module_exists('widgets')) {
    return widgets_get_context_author_uid($data);
  }
  $uid = '';
  if (isset($data['node']->uid)) {
    $uid = $data['node']->uid;
  }
  elseif (arg(0) == 'node' && is_numeric(arg(1))) {
    $obj = menu_get_object();
    if (is_object($obj)) {
      $uid = $obj->uid;
    }
  }
  elseif (arg(0) == 'user' && is_numeric(arg(1))) {
    $obj = menu_get_object('user', 1);
    if (is_object($obj)) {
      $uid = $obj->uid;
    }
  }
  drupal_alter('socialmedia_context_author_uid', $uid, $data);
  return $uid;
}

/**
 * Implementation of hook_features_api().
 *
 * Allow exporting of config wizards by the Features module.
 */
function socialmedia_features_api() {
  return array(
    'socialmedia_profile' => array(
      'name' => t('Socialmedia profiles'),
      'feature_source' => TRUE,
      'default_hook' => 'socialmedia_profile_defaults',
      'default_file' => FEATURES_DEFAULTS_INCLUDED,
      //'default_file' => 'widgets',
      'file' => drupal_get_path('module', 'socialmedia') . '/socialmedia.features.inc',
    ),
  );
}

/**
 * Implements hook_user_load()
 *
 * Attaches socialmedia profile data on users
 * @param $users
 */
function socialmedia_user_load($users) {
  foreach ($users as $uid => $user) {
    $users[$uid]->socialmedia = array(
      'profiles' => array(),
    );
    $profiles = socialmedia_profile_load_all(null, $uid);
    if (is_array($profiles)) {
      foreach ($profiles as $smid => $profile) {
        $data = unserialize($profile['data']);

        // skip empty profiles
        if (empty($data)) {
          continue;
        }
        $users[$uid]->socialmedia['profiles'][$profile['platform']] = $data;
      }
    }
  }
}
function socialmedia_user_insert(&$edit, $account, $category) {
  socialmedia_user_save($edit, $account, $category);
}
function socialmedia_user_update(&$edit, $account, $category) {
  socialmedia_user_save($edit, $account, $category);
}
function socialmedia_user_save(&$edit, $account, $category) {
  if (isset($edit['socialmedia']) && !empty($edit['socialmedia']['profiles']) && is_array($edit['socialmedia']['profiles'])) {
    foreach ($edit['socialmedia']['profiles'] as $platform => $profile) {
      socialmedia_profile_save($profile, $platform, $account->uid);
    }
  }
}

Functions

Namesort descending Description
socialmedia_admin_paths Implements hook_admin_paths()
socialmedia_features_api Implementation of hook_features_api().
socialmedia_get_context_author_uid Determines if page has a author context. Uses widgets algo if widgets is installed
socialmedia_help Implements hook_help().
socialmedia_menu Implements hook_menu().
socialmedia_permission Implements hook_permission().
socialmedia_platform_definitions Pull in image elements exposed by modules implementing hook_widgetx_element_info().
socialmedia_platform_definition_load Load the definition for an widget.
socialmedia_profile_load
socialmedia_profile_load_all
socialmedia_profile_save
socialmedia_update_redirects
socialmedia_user_insert
socialmedia_user_load Implements hook_user_load()
socialmedia_user_profile_access Access callback for user social profiles edition page @global User $user Current user
socialmedia_user_save
socialmedia_user_update
socialmedia_util
socialmedia_util_pattern
socialmedia_widgets_set_form_alter
_socialmedia_widgets_set_error

Constants