| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: images.previewlist.imagefield.inc,v 1.6 2009/03/15 21:54:57 grandcat Exp $ 3 4 /* 5 * Provide a list (queue) of uploaded images for CCK ImageField; all captions can be edited at the same time 6 */ 7 function fupload_list_images_imagefield(&$form_state, $node_type) { 8 global $user; 9 $count = 0; 10 11 $node_type = str_replace("-", "_", $node_type); 12 $image_node_types = variable_get('image_node_types', array()); 13 // get some infos about all fields of this content type and, of course, of our imagefield (e.x. estrictions) 14 $field_name = $image_node_types[$node_type]['fieldname']; 15 $fields = content_types($node_type); 16 $field_image = $fields['fields'][$field_name]; 17 18 // form a more useful list of fields which should be displayed in preview list 19 $fields_preview_list = array('node' => array(), 'imagefield' => array(), 'taxonomy' => array(), 'cck' => array()); 20 foreach ($field_image['widget']['fupload_previewlist_field_settings'] as $key) { 21 $elements = explode("_", $key, 2); 22 if ($field_image['widget']['fupload_previewlist_field_settings'][$key] != FALSE) 23 array_push($fields_preview_list[$elements[0]], $elements[1]); 24 } 25 26 // checks which fields should be displayed (not for all fields) 27 28 // prepare token 29 $token_installed = module_exists("token"); 30 31 // prepare taxonomy 32 $form_taxonomy = array(); 33 if (module_exists("taxonomy") && count($fields_preview_list['taxonomy'])) { 34 $form_taxonomy = array('type' => array('#value' => $node_type), '#node' => (object) array('type' => $node_type)); 35 taxonomy_form_alter($form_taxonomy, array(), $node_type .'_node_form'); 36 37 // delete all elements without the ones we need 38 foreach ($form_taxonomy['taxonomy'] as $key => $value) { 39 // taxonomy normal 40 if (!in_array($key, $fields_preview_list['taxonomy']) && is_numeric($key)) { 41 unset($form_taxonomy['taxonomy'][$key]); 42 } 43 } 44 foreach ($form_taxonomy['taxonomy']['tags'] as $key => $value) { 45 // taxonomy tags 46 if (!in_array($key, $fields_preview_list['taxonomy'])) { 47 unset($form_taxonomy['taxonomy']['tags'][$key]); 48 } 49 } 50 } 51 52 // get our preview images 53 $result = db_query("SELECT p.nid, p.fid, f.filename, f.filepath FROM {fupload_previewlist} AS p JOIN {files} AS f ON p.fid = f.fid WHERE p.fieldname = '%s' AND p.uid = %d", $field_name, $user->uid); 54 while ($image = db_fetch_object($result)) { 55 $count += 1; 56 $image_items[$image->fid] = $image->nid; 57 58 // get title and body fields contents if available and storage mode is single 59 if ($field_image['widget']['fupload_mode'] == "single") { 60 $node = db_query("SELECT title, body FROM {node_revisions} WHERE nid = %d", $image->nid); 61 $node = db_fetch_object($node); 62 } 63 64 $form[$image->fid] = array( 65 '#type' => 'fieldset', 66 '#title' => t('Image @count', array('@count' => $count)), 67 '#collapsible' => FALSE, 68 '#collapsed' => FALSE, 69 ); 70 $form[$image->fid]['preview_image'] = array( 71 '#prefix' => '<div class="image_fupload_preview">', 72 '#value' => theme('imagecache', $image_node_types[$node_type]['imagecache_preset'], $image->filepath, check_plain($image->filename), check_plain($image->filename), $field_image['widget']['fupload_previewlist_img_attributes']), 73 '#suffix' => '</div>', 74 '#weight' => -16, 75 ); 76 77 // node title field 78 if (in_array("title", $fields_preview_list['node'])) { 79 $form[$image->fid]['node_title_' .$image->fid] = array( 80 '#type' => 'textfield', 81 '#title' => check_plain($fields['title_label']), 82 '#default_value' => isset($form_state['values']['node_title_' .$image->fid]) ? $form_state['values']['node_title_' .$image->fid] : $node->title, 83 '#size' => 60, 84 '#required' => TRUE, 85 '#disabled' => FALSE, 86 '#weight' => $fields['extra']['title']['weight'], 87 ); 88 } 89 90 // filefield / imageField fields 91 if (in_array("title", $fields_preview_list['imagefield']) && $field_image['widget']['custom_title']) { 92 if ($token_installed && !empty($field_image['widget']['title'])) { 93 $default_value = token_replace($field_image['widget']['title']); 94 } else { 95 if (!empty($field_image['widget']['title'])) { 96 $default_value = $field_image['widget']['title']; 97 } else { 98 $default_value = $image->filename; 99 } 100 } 101 102 $form[$image->fid]['imagefield_title_' .$image->fid] = array( 103 '#type' => 'textfield', 104 '#title' => $field_image['widget']['label'] .' ' .t('title'), 105 '#default_value' => isset($form_state['values']['imagefield_title_' .$image->fid]) ? $form_state['values']['imagefield_title_' .$image->fid] : $default_value, 106 '#size' => 60, 107 '#required' => FALSE, 108 '#disabled' => FALSE, 109 '#weight' => $field_image['widget']['weight'], 110 ); 111 } 112 if (in_array("alt", $fields_preview_list['imagefield']) && $field_image['widget']['custom_alt']) { 113 if ($token_installed && !empty($field_image['widget']['alt'])) { 114 $default_value = token_replace($field_image['widget']['alt']); 115 } else { 116 if (!empty($field_image['widget']['alt'])) { 117 $default_value = $field_image['widget']['alt']; 118 } else { 119 $default_value = $image->filename; 120 } 121 } 122 123 $form[$image->fid]['imagefield_alt_' .$image->fid] = array( 124 '#type' => 'textfield', 125 '#title' => $field_image['widget']['label'] .' ' .t('alt'), 126 '#default_value' => isset($form_state['values']['imagefield_alt_' .$image->fid]) ? $form_state['values']['imagefield_alt_' .$image->fid] : $default_value, 127 '#size' => 60, 128 '#required' => FALSE, 129 '#disabled' => FALSE, 130 '#weight' => $field_image['widget']['weight'] + 0.3, 131 ); 132 } 133 if (in_array("description", $fields_preview_list['imagefield'])) { 134 $form[$image->fid]['imagefield_description_' .$image->fid] = array( 135 '#type' => 'textfield', 136 '#title' => $field_image['widget']['label'] .' ' .t('description'), 137 '#default_value' => $form_state['values']['imagefield_description_' .$image->fid], 138 '#size' => 60, 139 '#required' => FALSE, 140 '#disabled' => FALSE, 141 '#weight' => $field_image['widget']['weight'] + 0.5, 142 ); 143 } 144 145 // node body field 146 if (in_array("description", $fields_preview_list['node'])) { 147 $form[$image->fid]['node_body_' .$image->fid] = array( 148 '#type' => 'textarea', 149 '#title' => check_plain($fields['extra']['body_field']['label']), 150 '#default_value' => isset($form_state['values']['node_body_' .$image->fid]) ? $form_state['values']['node_body_' .$image->fid] : '', 151 '#rows' => 5, 152 //'#required' => ($type->min_word_count > 0), 153 // will be checked later via validation hook 154 '#disabled' => FALSE, 155 '#weight' => $fields['extra']['body_field']['weight'], 156 ); 157 $form[$image->fid]['format_' .$image->fid] = filter_form(FILTER_FORMAT_DEFAULT, $fields['extra']['body_field']['weight'], array('format_' .$image->fid)); 158 $form[$image->fid]['format_' .$image->fid]['#weight'] = $fields['extra']['body_field']['weight'] + 0.1; 159 } 160 161 // taxonomy field 162 if (count($form_taxonomy)) { 163 $form_taxonomy['taxonomy']['#weight'] = $fields['extra']['taxonomy']['weight']; 164 $form[$image->fid]['taxonomy_' .$image->fid] = $form_taxonomy['taxonomy']; 165 } 166 167 // ckk fields here ... in a future version 168 169 } 170 171 // any images uploaded 172 if ($count) { 173 // some images in queue 174 $form['text'] = array('#value' => t('In this step, you can edit the captions of all uploaded images. To complete this task, click the button "Done Editing" at the bottom of this page.'), '#weight' => -19); 175 $form['node_type'] = array('#type' => 'value', '#value' => $node_type); 176 $form['field_name'] = array('#type' => 'value', '#value' => $field_name); 177 $form['storage_mode'] = array('#type' => 'value', '#value' => $field_image['widget']['fupload_mode']); 178 $form['image_items'] = array('#type' => 'value', '#value' => $image_items); 179 $form['#validate'][] = 'fupload_list_images_imagefield_validate'; // some additonal validation of body field and cck 180 $form['submit'] = array('#type' => 'submit', '#value' => t('Done Editing')); 181 182 // set redirect url 183 if ($field_image['widget']['fupload_previewlist_redirecturl']) { 184 // alternative redirect url provided 185 $form['#redirect'] = $field_image['widget']['fupload_previewlist_redirecturl']; 186 } else { 187 if ($field_image['widget']['fupload_mode'] == "multiple") { 188 $form['#redirect'] = 'node/' .array_pop($image_items); // redirect to updated node 189 } else { 190 $form['#redirect'] = 'node/add/' .str_replace("_", "-", $node_type); // redirect to first upload page again 191 } 192 } 193 194 } else { 195 // no images in queue 196 $form['text'] = array('#value' => t('No images yet in queue.'), '#weight' => -19); 197 drupal_set_message(t('No images have been found in queue, probably no images have been uploaded yet. Please return to !upload_page if you want to upload some images.', array('!upload_page' => l(t('image upload page'), 'node/add/' .str_replace("_", "-", $node_type)))), 'warning'); 198 } 199 200 return $form; 201 } 202 203 function fupload_list_images_imagefield_validate($form, &$form_state) { 204 // validation of some special parts 205 $i = 0; 206 $storage_mode = $form_state['values']['storage_mode']; 207 $type = node_get_types('type', $form_state['values']['node_type']); 208 209 foreach ($form_state['values']['image_items'] as $fid => $nid) { 210 $i++; 211 // load saved node(s) 212 if ($storage_mode == "multiple" && empty($node)) 213 $node = node_load($nid); 214 if ($storage_mode == "single") 215 $node = node_load($nid); 216 217 // map some data to our $node to be able to do validation 218 // taxonomy 219 $node->taxonomy = $form_state['values']['taxonomy_' .$fid]; 220 221 // body field: if min_word_count set, check reality 222 if (!empty($type->min_word_count) && isset($form_state['values']['node_body_' .$fid]) && count(explode(' ', $form_state['values']['node_body_' .$fid])) < $type->min_word_count) { 223 form_set_error('node_body_' .$fid, t('The field %body_label of the @img_number. image is too short. You need at least %words words.', array('%body_label' => $type->body_label, '@img_number' => $i, '%words' => $type->min_word_count))); 224 } 225 226 // little hack: prevent that body field will be checked again 227 unset($node->body); 228 // call hook_validation 229 node_validate($node); 230 } 231 232 } 233 234 function fupload_list_images_imagefield_submit($form, &$form_state) { 235 global $user; 236 // define some basic variables 237 $imagefield_fields = array("title", "description", "alt"); 238 $storage_mode = $form_state['values']['storage_mode']; 239 240 // get fids (--> nids) of images and start batch process (saving) 241 foreach ($form_state['values']['image_items'] as $fid => $nid) { 242 // split up storage modes to provide a better handling 243 // storage mode: multiple images per node 244 if ($storage_mode == "multiple") { 245 // only load node once 246 if (!isset($node)) 247 $node = node_load($nid); 248 249 $image_field = $node->$form_state['values']['field_name']; 250 for ($x = 0; $x < count($image_field); $x++) { 251 if ($image_field[$x]['fid'] == $fid) { 252 // found our image to be edited 253 foreach ($imagefield_fields as $key => $value) { 254 if (isset($form_state['values']['imagefield_' .$value .'_' .$fid])) 255 $image_field[$x]['data'][$value] = $form_state['values']['imagefield_' .$value .'_' .$fid]; 256 } 257 258 break; 259 } 260 } 261 // map our data to $node 262 $node->$form_state['values']['field_name'] = $image_field; 263 } 264 265 // storage mode: single image per node 266 if ($storage_mode == "single") { 267 $node = node_load($nid); 268 269 // new changes to node object 270 // basic fields (core modules of drupal) 271 if (isset($form_state['values']['node_title_' .$fid])) 272 $node->title = !empty($form_state['values']['node_title_' .$fid]) ? $form_state['values']['node_title_' .$fid] : $node->title; // work around [#227966] 273 if (isset($form_state['values']['node_body_' .$fid])) 274 $node->body = !empty($form_state['values']['node_body_' .$fid]) ? $form_state['values']['node_body_' .$fid] : $node->body; 275 $node->teaser = node_teaser($node->body, $form_state['values']['format_' .$fid]); 276 if (isset($form_state['values']['format_' .$fid])) 277 $node->format = isset($form_state['values']['format_' .$fid]) ? $form_state['values']['format_' .$fid] : $node->format; 278 if (isset($form_state['values']['taxonomy_' .$fid])) 279 $node->taxonomy = isset($form_state['values']['taxonomy_' .$fid]) ? array_merge($form_state['values']['taxonomy_' .$fid], $node->taxonomy) : $node->taxonomy; 280 281 // imagefield (cck) 282 $image_field = $node->$form_state['values']['field_name']; 283 foreach ($imagefield_fields as $key => $value) { 284 if (isset($form_state['values']['imagefield_' .$value .'_' .$fid])) 285 $image_field[0]['data'][$value] = $form_state['values']['imagefield_' .$value .'_' .$fid]; 286 } 287 $node->$form_state['values']['field_name'] = $image_field; 288 289 // cck fields (contributed module) 290 // ... will follow in future version 291 292 // save changes to node 293 node_save($node); 294 } 295 } 296 297 // multiple mode: map our new data into node 298 if ($storage_mode == "multiple") 299 node_save($node); 300 301 // delete preview image list for this user 302 if (!form_get_errors()) 303 db_query("DELETE FROM {fupload_previewlist} WHERE fieldname = '%s' AND uid = %d", $form_state['values']['field_name'], $user->uid); 304 305 // show message and redirect user to upload page 306 drupal_set_message(t('All images have been saved and published.')); 307 drupal_redirect_form($form); 308 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Jul 9 18:01:44 2012 | Cross-referenced by PHPXref 0.7 |