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 0:
|
159
|
case 'google':
|
160
|
default:
|
161
|
$output = '<iframe id="pdf_reader" src="//docs.google.com/viewer?embedded=true&url='
|
162
|
. urlencode($file_url)
|
163
|
. '" width="' . $variables['settings']['pdf_width']
|
164
|
. '" height="' . $variables['settings']['pdf_height']
|
165
|
. '" scrolling="no'
|
166
|
. '" style="border: none;"></iframe>';
|
167
|
break;
|
168
|
|
169
|
case 2:
|
170
|
case 'direct':
|
171
|
$output = '<object id="pdf_reader" data="' . $file_url . '#view=Fit' . '" '
|
172
|
. 'type="application/pdf' . '" '
|
173
|
. 'width="' . $variables['settings']['pdf_width'] . '" '
|
174
|
. 'height="' . $variables['settings']['pdf_height'] . '">'
|
175
|
. '<embed src="' . $file_url . '#view=Fit' . '"'
|
176
|
. 'width="' . $variables['settings']['pdf_width'] . '" '
|
177
|
. 'height="' . $variables['settings']['pdf_height'] . '" '
|
178
|
. 'type="application/pdf">'
|
179
|
. '<p>' . t('It appears your Web browser is not configured to display PDF files. ')
|
180
|
. l(t('Download adobe Acrobat '), 'http://www.adobe.com/products/reader.html')
|
181
|
. ' ' . t('or') . ' ' . l(t('click here to download the PDF file.'), $file_url) . '</p>'
|
182
|
. '</embed></object>';
|
183
|
break;
|
184
|
|
185
|
case 3:
|
186
|
case 'pdf-js':
|
187
|
_pdf_reader_load_pdf_js($file_url);
|
188
|
$output = theme('pdf_js');
|
189
|
break;
|
190
|
}
|
191
|
|
192
|
if ($variables['settings']['download'] == TRUE) {
|
193
|
$output .= l(t('Click here to download the PDF file.'), $file_url, array('attributes' => array('class' => 'pdf-reader-download-link')));
|
194
|
}
|
195
|
|
196
|
if ($variables['settings']['colorbox'] == TRUE) {
|
197
|
$html = $output;
|
198
|
|
199
|
$options = array(
|
200
|
'attributes' => array('class' => array('colorbox-inline', 'show')),
|
201
|
'query' => array(
|
202
|
'width' => $variables['settings']['pdf_width'],
|
203
|
'height' => $variables['settings']['pdf_height'],
|
204
|
'inline' => 'true',
|
205
|
),
|
206
|
'fragment' => 'pdf_reader',
|
207
|
);
|
208
|
|
209
|
$output = l(t($variables['settings']['colorbox_link_text']), $file_url, $options);
|
210
|
|
211
|
$output .= '<div style="display:none">' . $html . '</div>';
|
212
|
}
|
213
|
|
214
|
return $output;
|
215
|
}
|
216
|
|
217
|
function _pdf_reader_load_pdf_js($file_url) {
|
218
|
$path = drupal_get_path('module', 'pdf_reader');
|
219
|
$d_path = base_path() . $path;
|
220
|
|
221
|
drupal_add_js("$path/js/pdf.js");
|
222
|
drupal_add_js("PDFJS.workerSrc = '$d_path/js/pdf.js'", 'inline');
|
223
|
drupal_add_js("$path/js/l10n.js");
|
224
|
drupal_add_js("$path/js/compatibility.js");
|
225
|
drupal_add_js("$path/js/viewer.js");
|
226
|
drupal_add_css("$path/css/pdf_reader-viewer.css");
|
227
|
|
228
|
drupal_add_js('kDefaultURL = "' . $file_url . '";', 'inline');
|
229
|
}
|