1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * @file |
---|
5 | * Menu callbacks, form callbacks and helpers. |
---|
6 | */ |
---|
7 | |
---|
8 | /** |
---|
9 | * Render a page of available importers. |
---|
10 | */ |
---|
11 | function feeds_page() { |
---|
12 | $rows = array(); |
---|
13 | if ($importers = feeds_importer_load_all()) { |
---|
14 | foreach ($importers as $importer) { |
---|
15 | if ($importer->disabled) { |
---|
16 | continue; |
---|
17 | } |
---|
18 | if (!(user_access('import '. $importer->id .' feeds') || user_access('administer feeds'))) { |
---|
19 | continue; |
---|
20 | } |
---|
21 | if (empty($importer->config['content_type'])) { |
---|
22 | $link = 'import/'. $importer->id; |
---|
23 | $title = $importer->config['name']; |
---|
24 | } |
---|
25 | elseif (node_access('create', $importer->config['content_type'])) { |
---|
26 | $link = 'node/add/'. str_replace('_', '-', $importer->config['content_type']); |
---|
27 | $title = node_get_types('name', $importer->config['content_type']); |
---|
28 | } |
---|
29 | else { |
---|
30 | continue; |
---|
31 | } |
---|
32 | $rows[] = array( |
---|
33 | l($title, $link), |
---|
34 | check_plain($importer->config['description']), |
---|
35 | ); |
---|
36 | } |
---|
37 | } |
---|
38 | if (empty($rows)) { |
---|
39 | drupal_set_message(t('There are no importers, go to <a href="@importers">Feed importers</a> to create one or enable an existing one.', array('@importers' => url('admin/build/feeds')))); |
---|
40 | } |
---|
41 | $header = array( |
---|
42 | t('Import'), |
---|
43 | t('Description'), |
---|
44 | ); |
---|
45 | return theme('table', $header, $rows); |
---|
46 | } |
---|
47 | |
---|
48 | /** |
---|
49 | * Render a feeds import form on import/[config] pages. |
---|
50 | */ |
---|
51 | function feeds_import_form(&$form_state, $importer_id) { |
---|
52 | $source = feeds_source($importer_id, empty($form['nid']['#value']) ? 0 : $form['nid']['#value']); |
---|
53 | |
---|
54 | $form = array(); |
---|
55 | $form['#importer_id'] = $importer_id; |
---|
56 | // @todo Move this into fetcher? |
---|
57 | $form['#attributes']['enctype'] = 'multipart/form-data'; |
---|
58 | $form['feeds'] = array( |
---|
59 | '#type' => 'fieldset', |
---|
60 | '#tree' => TRUE, |
---|
61 | ); |
---|
62 | $form['feeds'] += $source->configForm($form_state); |
---|
63 | $form['submit'] = array( |
---|
64 | '#type' => 'submit', |
---|
65 | '#value' => t('Import'), |
---|
66 | ); |
---|
67 | return $form; |
---|
68 | } |
---|
69 | |
---|
70 | /** |
---|
71 | * Validation handler for node forms and feeds_import_form(). |
---|
72 | */ |
---|
73 | function feeds_import_form_validate($form, &$form_state) { |
---|
74 | // @todo This may be a problem here, as we don't have a feed_nid at this point. |
---|
75 | feeds_source($form['#importer_id'])->configFormValidate($form_state['values']['feeds']); |
---|
76 | } |
---|
77 | |
---|
78 | /** |
---|
79 | * Submit handler for feeds_import_form(). |
---|
80 | */ |
---|
81 | function feeds_import_form_submit($form, &$form_state) { |
---|
82 | |
---|
83 | // Save source and import. |
---|
84 | $source = feeds_source($form['#importer_id']); |
---|
85 | $source->addConfig($form_state['values']['feeds']); |
---|
86 | $source->save(); |
---|
87 | |
---|
88 | // Refresh feed if import on create is selected. |
---|
89 | if ($source->importer->config['import_on_create']) { |
---|
90 | feeds_batch_set(t('Importing'), 'import', $form['#importer_id']); |
---|
91 | } |
---|
92 | |
---|
93 | // Add to schedule, make sure importer is scheduled, too. |
---|
94 | $source->schedule(); |
---|
95 | $source->importer->schedule(); |
---|
96 | } |
---|
97 | |
---|
98 | /** |
---|
99 | * Render a feeds import form on node/id/import pages. |
---|
100 | */ |
---|
101 | function feeds_import_tab_form(&$form_state, $node) { |
---|
102 | $importer_id = feeds_get_importer_id($node->type); |
---|
103 | |
---|
104 | $form = array(); |
---|
105 | $form['#feed_nid'] = $node->nid; |
---|
106 | $form['#importer_id'] = $importer_id; |
---|
107 | $form['#redirect'] = 'node/'. $node->nid; |
---|
108 | return confirm_form($form, t('Import all content from feed?'), 'node/'. $node->nid, '', t('Import'), t('Cancel'), 'confirm feeds update'); |
---|
109 | } |
---|
110 | |
---|
111 | /** |
---|
112 | * Submit handler for feeds_import_tab_form(). |
---|
113 | */ |
---|
114 | function feeds_import_tab_form_submit($form, &$form_state) { |
---|
115 | $form_state['redirect'] = $form['#redirect']; |
---|
116 | feeds_batch_set(t('Importing'), 'import', $form['#importer_id'], $form['#feed_nid']); |
---|
117 | } |
---|
118 | |
---|
119 | /** |
---|
120 | * Render a feeds delete form. |
---|
121 | * |
---|
122 | * Used on both node pages and configuration pages. |
---|
123 | * Therefore $node may be missing. |
---|
124 | */ |
---|
125 | function feeds_delete_tab_form(&$form_state, $importer_id, $node = NULL) { |
---|
126 | if (empty($node)) { |
---|
127 | $form['#redirect'] = 'import/'. $importer_id; |
---|
128 | } |
---|
129 | else { |
---|
130 | $importer_id = feeds_get_importer_id($node->type); |
---|
131 | $form['#feed_nid'] = $node->nid; |
---|
132 | $form['#redirect'] = 'node/'. $node->nid; |
---|
133 | } |
---|
134 | // Form cannot pass on feed object. |
---|
135 | $form['#importer_id'] = $importer_id; |
---|
136 | return confirm_form($form, t('Delete all items from feed?'), $form['#redirect'], '', t('Delete'), t('Cancel'), 'confirm feeds update'); |
---|
137 | } |
---|
138 | |
---|
139 | /** |
---|
140 | * Submit handler for feeds_delete_tab_form(). |
---|
141 | */ |
---|
142 | function feeds_delete_tab_form_submit($form, &$form_state) { |
---|
143 | $form_state['redirect'] = $form['#redirect']; |
---|
144 | $feed_nid = empty($form['#feed_nid']) ? 0 : $form['#feed_nid']; |
---|
145 | feeds_batch_set(t('Deleting'), 'clear', $form['#importer_id'], $feed_nid); |
---|
146 | } |
---|
147 | |
---|
148 | /** |
---|
149 | * Handle a fetcher callback. |
---|
150 | */ |
---|
151 | function feeds_fetcher_callback($importer, $feed_nid = 0) { |
---|
152 | if ($importer instanceof FeedsImporter) { |
---|
153 | try { |
---|
154 | return $importer->fetcher->request($feed_nid); |
---|
155 | } |
---|
156 | catch (Exception $e) { |
---|
157 | // Do nothing. |
---|
158 | } |
---|
159 | } |
---|
160 | drupal_access_denied(); |
---|
161 | } |
---|
162 | |
---|
163 | /** |
---|
164 | * Theme upload widget. |
---|
165 | */ |
---|
166 | function theme_feeds_upload($element) { |
---|
167 | drupal_add_css(drupal_get_path('module', 'feeds') .'/feeds.css'); |
---|
168 | _form_set_class($element, array('form-file')); |
---|
169 | $output = ''; |
---|
170 | if (!empty($element['#file_info'])) { |
---|
171 | $info = $element['#file_info']; |
---|
172 | $output .= '<div class="file-info">'; |
---|
173 | $output .= '<div class="file-name">'; |
---|
174 | $output .= l(basename($info['path']), $info['path']); |
---|
175 | $output .= '</div>'; |
---|
176 | $output .= '<div class="file-size">'; |
---|
177 | $output .= format_size($info['size']); |
---|
178 | $output .= '</div>'; |
---|
179 | if (isset($info['mime'])) { |
---|
180 | $output .= '<div class="file-mime">'; |
---|
181 | $output .= check_plain($info['mime']); |
---|
182 | $output .= '</div>'; |
---|
183 | } |
---|
184 | $output .= '</div>'; |
---|
185 | } |
---|
186 | $output .= '<div class="file-upload">'; |
---|
187 | $output .= '<input type="file" name="'. $element['#name'] .'"'. ($element['#attributes'] ? ' '. drupal_attributes($element['#attributes']) : '') .' id="'. $element['#id'] .'" size="'. $element['#size'] ."\" />\n"; |
---|
188 | $output .= '</div>'; |
---|
189 | return theme('form_element', $element, $output); |
---|
190 | } |
---|