'VideoJS Filter', 'page callback' => 'drupal_get_form', 'page arguments' => array('videojs_filter_settings_form'), 'access arguments' => array('administer site configuration'), 'description' => 'Configure the settings for the VideoJS Filter module.', ); return $items; } /** * create settings form * */ function videojs_filter_settings_form() { $form = array(); $form['videojs_filter_video_directory'] = array( '#type' => 'textfield', '#title' => t('Video folder'), '#default_value' => variable_get('videojs_filter_video_directory', ''), '#field_prefix' => file_create_url('public://'), '#required' => TRUE, ); $form['videojs_filter_poster_directory'] = array( '#type' => 'textfield', '#title' => t('Poster folder'), '#default_value' => variable_get('videojs_filter_poster_directory', ''), '#field_prefix' => file_create_url('public://'), '#required' => TRUE, ); $form['videojs_filter_poster_file'] = array( '#type' => 'textfield', '#title' => t('Default poster file'), '#default_value' => variable_get('videojs_filter_poster_file', ''), '#required' => TRUE, ); $form['videojs_filter_width'] = array( '#type' => 'textfield', '#title' => t('Default player width'), '#default_value' => variable_get('videojs_filter_width', 320), '#required' => TRUE, ); $form['videojs_filter_height'] = array( '#type' => 'textfield', '#title' => t('Default player height'), '#default_value' => variable_get('videojs_filter_height', 240), '#required' => TRUE, ); $form = system_settings_form($form); $form['#validate'][] = 'videojs_filter_settings_form_validate'; $form['#submit'][] = 'videojs_filter_settings_form_submit'; return $form; } /** * Validation function to validate the videojs_filter_settings_form() form. */ function videojs_filter_settings_form_validate($form, &$form_state) { $path_video = $form_state['values']['videojs_filter_video_directory']; if (!file_exists(drupal_realpath('public://') . '/' . $path_video)) { form_error($form['videojs_filter_video_directory'], t('The video folder is not exist.')); } $path_poster = $form_state['values']['videojs_filter_poster_directory']; if (!file_exists(drupal_realpath('public://') . '/' . $path_poster)) { form_error($form['videojs_filter_poster_directory'], t('The poster folder is not exist.')); } $poster_file = $form_state['values']['videojs_filter_poster_file']; if (!file_exists(drupal_realpath('public://') . '/' . $path_poster . '/' . $poster_file)) { form_error($form['videojs_filter_poster_file'], t('The default poster file is not exist.')); } if (!ctype_digit($form_state['values']['videojs_filter_width'])) { form_error($form['videojs_filter_width'], t('Default player width - incorrect value.')); } if (!ctype_digit($form_state['values']['videojs_filter_height'])) { form_error($form['videojs_filter_height'], t('Default player height - incorrect value.')); } } /** * Submit handler for the videojs_filter_settings_form() form. */ function videojs_filter_settings_form_submit($form, &$form_state) { variable_set('videojs_filter_video_directory', $form_state['values']['videojs_filter_video_directory']); variable_set('videojs_filter_poster_directory', $form_state['values']['videojs_filter_poster_directory']); variable_set('videojs_filter_poster_file', $form_state['values']['videojs_filter_poster_file']); variable_set('videojs_filter_width', $form_state['values']['videojs_filter_width']); variable_set('videojs_filter_height', $form_state['values']['videojs_filter_height']); } /* * Implements hook_filter_info(). */ function videojs_filter_filter_info() { $filters['videojs_filter'] = array( 'title' => t('VideoJS Filter'), 'description' => t('Replace [videojs:{video_file}|poster:{poster_file}|width:{width}|height:{height}] to video with VideoJS player. {video_file} is required argument.'), 'prepare callback' => '_videojs_filter_filter_prepare', 'process callback' => '_videojs_filter_filter_process', 'tips callback' => '_videojs_filter_filter_tips', ); return $filters; } /** * filter prepare callback. */ function _videojs_filter_filter_prepare($text, $filter) { return $text; } /** * Time filter process callback. */ function _videojs_filter_filter_process($text, $filter) { preg_match_all("/(\[)videojs(\:)[^\]]*(\])/s", $text, $matches); $orig_match = array(); $html_code = array(); $public_uri = 'public://'; $video_dir = variable_get('videojs_filter_video_directory'); $poster_dir = variable_get('videojs_filter_poster_directory'); $poster_file = variable_get('videojs_filter_poster_file'); $player_width = variable_get('videojs_filter_width', 320); $player_height = variable_get('videojs_filter_height', 240); $i = 0; foreach ($matches[0] as $match) { $attr = array(); $file = array(); $orig_match[] = $match; $match = str_replace(array('[', ']', '{', '}'), '', $match); $options = explode('|', $match); foreach ($options as $index => $opt) { $tmp = explode(':', $opt); $attr[$tmp[0]] = trim($tmp[1]); } if (isset($attr['videojs'])) { $videojs = $attr['videojs']; if (stristr($videojs, ',')) { // More than one video file type $vtypes = explode(',', $videojs); } else { // Only one video file type $vtypes = array($videojs); } $items_video = array(); foreach ($vtypes as $vtype) { $file_ext = pathinfo($vtype); $uri = $public_uri . $video_dir . '/' . $vtype; $file['uid'] = 1; $file['display'] = 1; $file['filename'] = $vtype; $file['filemime'] = 'video/' . $file_ext['extension']; $file['filesize'] = filesize($uri); $file['uri'] = $uri; $file['status'] = 1; $items_video[$file_ext['extension']] = $file; } $file_poster['uri'] = (isset($attr['poster'])) ? $public_uri . $poster_dir . '/' . $attr['poster'] : $public_uri . $poster_dir . '/' . $poster_file; $file_ext = pathinfo($file_poster['uri']); $file_poster['filemime'] = 'image/' . $file_ext['extension']; $items_video['poster'] = $file_poster; $attributes['width'] = (isset($attr['width'])) ? $attr['width'] : $player_width; $attributes['height'] = (isset($attr['height'])) ? $attr['height'] : $player_height; $html_code[] = '