Projet

Général

Profil

Paste
Télécharger (6,55 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / pdf_reader / pdf_reader.module @ 135bbeb9

1
<?php
2

    
3
/**
4
 * @file
5
 * pdf reader module file.
6
 */
7

    
8
/**
9
 * Implements hook_permission().
10
 */
11
function pdf_reader_permission() {
12
  return array(
13
    'administer pdf reader' => array(
14
      'title' => t('Administer PDF Reader'),
15
      'description' => t('Perform maintenance tasks for PDF Reader'),
16
    ),
17
  );
18
}
19

    
20
/**
21
 * Implement hook_field_formatter_info().
22
 */
23
function pdf_reader_field_formatter_info() {
24
  return array(
25
    'pdf_reader_file' => array(
26
      'label' => t('PDF Reader'),
27
      'field types' => array('file', 'text'),
28
      'settings' => array(
29
        'pdf_width' => 600,
30
        'pdf_height' => 780,
31
        'renderer' => 'google',
32
        'download' => FALSE,
33
        'colorbox' => FALSE,
34
        'colorbox_link_text' => '',
35
      )
36
    ),
37
  );
38
}
39

    
40
/**
41
 * Implements hook_field_formatter_settings_form().
42
 */
43
function pdf_reader_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
44
  $display = $instance['display'][$view_mode];
45
  $settings = $display['settings'];
46

    
47
  $element['pdf_width'] = array(
48
    '#title' => t('Width'),
49
    '#type' => 'textfield',
50
    '#default_value' => $settings['pdf_width'],
51
  );
52

    
53
  $element['pdf_height'] = array(
54
    '#title' => t('Height'),
55
    '#type' => 'textfield',
56
    '#default_value' => $settings['pdf_height'],
57
  );
58

    
59
  $element['renderer'] = array(
60
    '#title' => t('Renderer'),
61
    '#type' => 'select',
62
    '#options' => array(
63
      'google' => 'Google Viewer',
64
      'direct' => 'Direct Embed',
65
      'pdf-js' => 'pdf.js'),
66
    '#default_value' => $settings['renderer'],
67
  );
68

    
69
  $element['download'] = array(
70
    '#title' => t('Show download link'),
71
    '#type' => 'checkbox',
72
    '#default_value' => $settings['download'],
73
  );
74

    
75
  if (module_exists('colorbox')) {
76
    variable_set('colorbox_inline', 1);
77
  }
78

    
79
  $element['colorbox'] = array(
80
    '#title' => t('Display in colorbox (colorbox module must be installed).'),
81
    '#type' => 'checkbox',
82
    '#disabled' => !module_exists('colorbox'),
83
    '#default_value' => $settings['colorbox'],
84
  );
85

    
86
  $element['colorbox_link_text'] = array(
87
    '#title' => t('Colorbox link'),
88
    '#type' => 'textfield',
89
    '#disabled' => !module_exists('colorbox'),
90
    '#default_value' => $settings['colorbox_link_text'],
91
  );
92

    
93
  return $element;
94
}
95

    
96
/**
97
 * Implements hook_field_formatter_settings_summary().
98
 */
99
function pdf_reader_field_formatter_settings_summary($field, $instance, $view_mode) {
100
  $renderers = array(
101
    'google' => 'Google Viewer',
102
    'direct' => 'Direct Embed',
103
    'pdf-js' => 'pdf.js');
104
  $display = $instance['display'][$view_mode];
105
  $settings = $display['settings'];
106

    
107
  $summary = 'Size: ' . $settings['pdf_width'] . 'x' . $settings['pdf_height']
108
      . ' Using: ' . $renderers[$settings['renderer']]
109
      . '<br> Download Link: ' . ($settings['download'] == 1 ? 'YES' : 'NO')
110
      . ' Use colorbox: ' . ($settings['colorbox'] == 1 ? 'YES' : 'NO')
111
      . ' Colorbox link text: ' . $settings['colorbox_link_text'];
112
  return $summary;
113
}
114

    
115
/**
116
 * Implements hook_field_formatter_view().
117
 */
118
function pdf_reader_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
119
  $settings = $display['settings'];
120
  $element = array();
121

    
122
  switch ($display['type']) {
123
    case 'pdf_reader_file':
124
      foreach ($items as $delta => $item) {
125
        $element[$delta]['#type'] = 'markup';
126
        $element[$delta]['#markup'] = theme('pdf_reader', array('file' => $item, 'settings' => $settings));
127
      }
128
      break;
129
  }
130

    
131
  return $element;
132
}
133

    
134
/**
135
 * Implements hook_theme().
136
 *
137
 * Use our theme function.
138
 */
139
function pdf_reader_theme($existing, $type, $theme, $path) {
140
  return array(
141
    'pdf_reader' => array(
142
      'variables' => array('file' => NULL, 'settings' => NULL)
143
    ),
144
    'pdf_js' => array(
145
      'template' => 'pdf_js',
146
      'path' => drupal_get_path('module', 'pdf_reader') . '/theme'
147
    )
148
  );
149
}
150

    
151
/**
152
 * Theme the field with pdf reader
153
 */
154
function theme_pdf_reader($variables) {
155
  $file_url = isset($variables['file']['uri']) ? file_create_url($variables['file']['uri']) : $variables['file']['value'];
156

    
157
  switch ($variables['settings']['renderer']) {
158
    case 'google':
159
      $output = '<iframe id="pdf_reader" src="//docs.google.com/viewer?embedded=true&url='
160
          . urlencode($file_url)
161
          . '" width="' . $variables['settings']['pdf_width']
162
          . '" height="' . $variables['settings']['pdf_height']
163
          . '" scrolling="no'
164
          . '" style="border: none;"></iframe>';
165
      break;
166

    
167
    case 'direct':
168
      $output = '<object id="pdf_reader" data="' . $file_url . '#view=Fit' . '" '
169
          . 'type="application/pdf' . '" '
170
          . 'width="' . $variables['settings']['pdf_width'] . '" '
171
          . 'height="' . $variables['settings']['pdf_height'] . '">'
172
          . '<embed src="' . $file_url . '#view=Fit' . '"'
173
          . 'width="' . $variables['settings']['pdf_width'] . '" '
174
          . 'height="' . $variables['settings']['pdf_height'] . '" '
175
          . 'type="application/pdf">'
176
          . '<p>' . t('It appears your Web browser is not configured to display PDF files. ')
177
          . l(t('Download adobe Acrobat '), 'http://www.adobe.com/products/reader.html')
178
          . ' ' . t('or') . ' ' . l(t('click here to download the PDF file.'), $file_url) . '</p>'
179
          . '</embed></object>';
180
      break;
181

    
182
    case 'pdf-js':
183
      _pdf_reader_load_pdf_js($file_url);
184
      $output = theme('pdf_js');
185
      break;
186
  }
187

    
188
  if ($variables['settings']['download'] == TRUE) {
189
    $output .= l(t('Click here to download the PDF file.'), $file_url, array('attributes' => array('class' => 'pdf-reader-download-link')));
190
  }
191

    
192
  if ($variables['settings']['colorbox'] == TRUE) {
193
    $html = $output;
194

    
195
    $options = array(
196
      'attributes' => array('class' => array('colorbox-inline', 'show')),
197
      'query' => array(
198
        'width' => $variables['settings']['pdf_width'],
199
        'height' => $variables['settings']['pdf_height'],
200
        'inline' => 'true',
201
      ),
202
      'fragment' => 'pdf_reader',
203
    );
204

    
205
    $output = l(t($variables['settings']['colorbox_link_text']), $file_url, $options);
206

    
207
    $output .= '<div style="display:none">' . $html . '</div>';
208
  }
209

    
210
  return $output;
211
}
212

    
213
function _pdf_reader_load_pdf_js($file_url) {
214
  $path = drupal_get_path('module', 'pdf_reader');
215
  $d_path = base_path() . $path;
216

    
217
  drupal_add_js("$path/js/pdf.js");
218
  drupal_add_js("PDFJS.workerSrc = '$d_path/js/pdf.js'", 'inline');
219
  drupal_add_js("$path/js/l10n.js");
220
  drupal_add_js("$path/js/compatibility.js");
221
  drupal_add_js("$path/js/viewer.js");
222
  drupal_add_css("$path/css/pdf_reader-viewer.css");
223

    
224
  drupal_add_js('kDefaultURL = "' . $file_url . '";', 'inline');
225
}