[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

/sites/all/modules/image_fupload/includes/ -> images.previewlist.imagefield.inc (source)

   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  }


Generated: Mon Jul 9 18:01:44 2012 Cross-referenced by PHPXref 0.7