'Flash Games setting', 'description' => 'Configuration for Flashgames', 'page callback' => 'drupal_get_form', 'page arguments' => array('flashgame_admin_settings'), 'access arguments' => array('administer site configuration'), ); return $items; } /** * Form generation function for flashgame config page. */ function flashgame_admin_settings($form, &$form_state) { $form = array(); $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, '#default_value' => variable_get('flashgame_nodetypes'), ); return system_settings_form($form); } /** * 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'); } } } } /** * Implements hook_field_formatter_info(). */ function flashgame_field_formatter_info() { return array( '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, ), ), ); } /** * Implements hook_field_formatter_settings_form(). */ 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, ), ); return $element; } /** * Implements hook_field_formatter_settings_summary(). */ 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'], ) ); return $summary; } /** * Implements hook_field_formatter_view(). */ 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']); $index = count($game) - 2; $embed = '
'; $element[$delta] = array('#markup' => $embed); } break; case 'flash': foreach ($items as $delta => $item) { $url = empty($item['uri']) ? '' : file_create_url($item['uri']); $embed = ''; $element[$delta] = array('#markup' => $embed); } break; } return $element; } /** * A helper function for split strings by a given character. */ 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; }