Skip to content
flashgame.module 4.13 KiB
Newer Older
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
<?php
/**
 * @file
 * A module for flash game websites.
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed

/**
 * Implements hook_menu().
 */
function flashgame_menu() {
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  $items = array();
  $items['admin/config/media/flashgame'] = array(
    'title' => 'Flash Games setting',
    'description' => 'Configuration for Flashgames',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('flashgame_admin_settings'),
    'access arguments' => array('administer site configuration'),
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  );
  return $items;
}

/**
 * Form generation function for flashgame config page.
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function flashgame_admin_settings($form, &$form_state) {
  $form = array();
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  $types = node_type_get_names();
  $form['flashgame_nodetypes'] = array(
    '#type' => 'select',
    '#title' => t('Content types'),
    '#description' => t('Select content types for miniclip games'),
    '#options' => $types,
    '#multiple' => TRUE,
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
    '#default_value' => variable_get('flashgame_nodetypes'),
  );
  return system_settings_form($form);
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
}

/**
 * Implements hook_preprocess_node().
 */
function flashgame_preprocess_node(&$variables) {
  $types = variable_get('flashgame_nodetypes');
  $cur_type = $variables['type'];
  if ($types) {
    foreach ($types as $type) {
      if ($cur_type == $type) {
        drupal_add_js('http://www.miniclip.com/js/game-embed.js', 'external');
      }
    }
  }
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
}

/**
 * Implements hook_field_formatter_info().
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function flashgame_field_formatter_info() {
  return array(
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
    'miniclip' => array(
      'label' => t('Miniclip game'),
      'field types' => array('text'),
    ),
    'flash' => array(
      'label' => t('Flash'),
      'description' => t('For show as a flash file'),
      'field types' => array('file'),
      'settings' => array(
        'width' => 640,
        'height' => 480,
      ),
    ),
  );	
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
}

/**
 * Implements hook_field_formatter_settings_form().
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function flashgame_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $element = array(
    'width' => array(
      '#title' => t('width'),
      '#type' => 'textfield',
      '#size' => 20,
      '#default_value' => 640,
    'height' => array(
      '#title' => t('height'),
      '#type' => 'textfield',
      '#size' => 20,
      '#default_value' => 480,
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  );
  return $element;
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function flashgame_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary = t('Height:@height | Width:@width', array(
    '@height'	=> $settings['height'],
    '@width'	=> $settings['width'],
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  );
  return $summary;
}

/**
 * Implements hook_field_formatter_view().
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function flashgame_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  $settings = $display['settings'];
  switch ($display['type']) {
    case 'miniclip':
      foreach ($items as $delta => $item) {
        $game = array();
        $game = _flashgame_split('/', $item['value']);
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
        $index = count($game) - 2;
        $embed = '<div id="miniclip-game-embed" data-game-name=' . $game[$index] . ' data-theme="1" data-width='
        . $settings['width'] . ' data-height=' . $settings['height'] . '></div>';
        $element[$delta] = array('#markup' => $embed);
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
      }
      break;

    case 'flash':
      foreach ($items as $delta => $item) {
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
        $url = empty($item['uri']) ? '' : file_create_url($item['uri']);
        $embed = '<embed src = "' . $url . '" width = "' . $settings['width'] . '" height = "' . $settings['height'] . '" />';
        $element[$delta] = array('#markup' => $embed);
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
      }
      break;
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
  }
  return $element;
}

/**
 * A helper function for split strings by a given character.
 */
Mohsen Pouryazdan's avatar
Mohsen Pouryazdan committed
function _flashgame_split($s, $str) {
  $ret = array();
  $tmp = '';
  for ($i = 0; $i < drupal_strlen($str); $i++) {
    $char = drupal_substr($str, $i, 1);
    if ($char == $s) {
      $ret[] = $tmp;
      $tmp = '';
    }
    else {
      $tmp .= $char;
    }
  }
  if ($tmp) {
    $ret[] = $tmp;
  }
  return $ret;
}