1 |
85ad3d82
|
Assos Assos
|
<?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 |
5a7e6170
|
Florent Torregrosa
|
'renderer' => 'google',
|
32 |
85ad3d82
|
Assos Assos
|
'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 |
5a7e6170
|
Florent Torregrosa
|
'#options' => array(
|
63 |
|
|
'google' => 'Google Viewer',
|
64 |
|
|
'direct' => 'Direct Embed',
|
65 |
|
|
'pdf-js' => 'pdf.js'),
|
66 |
85ad3d82
|
Assos Assos
|
'#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 |
5a7e6170
|
Florent Torregrosa
|
$renderers = array(
|
101 |
|
|
'google' => 'Google Viewer',
|
102 |
|
|
'direct' => 'Direct Embed',
|
103 |
|
|
'pdf-js' => 'pdf.js');
|
104 |
85ad3d82
|
Assos Assos
|
$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 |
5a7e6170
|
Florent Torregrosa
|
case 'google':
|
160 |
85ad3d82
|
Assos Assos
|
default:
|
161 |
5a7e6170
|
Florent Torregrosa
|
$output = '<iframe id="pdf_reader" src="//docs.google.com/viewer?embedded=true&url='
|
162 |
85ad3d82
|
Assos Assos
|
. 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 |
5a7e6170
|
Florent Torregrosa
|
case 2:
|
170 |
|
|
case 'direct':
|
171 |
85ad3d82
|
Assos Assos
|
$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 |
5a7e6170
|
Florent Torregrosa
|
case 'pdf-js':
|
187 |
85ad3d82
|
Assos Assos
|
_pdf_reader_load_pdf_js($file_url);
|
188 |
|
|
$output = theme('pdf_js');
|
189 |
|
|
break;
|
190 |
|
|
}
|
191 |
|
|
|
192 |
|
|
if ($variables['settings']['download'] == TRUE) {
|
193 |
5a7e6170
|
Florent Torregrosa
|
$output .= l(t('Click here to download the PDF file.'), $file_url, array('attributes' => array('class' => 'pdf-reader-download-link')));
|
194 |
85ad3d82
|
Assos Assos
|
}
|
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 |
|
|
} |