Помогите с сабмитом формы

Главные вкладки

Аватар пользователя Boozenok Boozenok 11 октября 2013 в 18:50

пытаюсь вытянуть форму загрузки аватара пользователя

<?phpfunction custom_picture_form() {
  global $user;
 
  $form = array(
    '#attributes' => array('enctype' => 'multipart/form-data'),
  );
  $form['picture']['picture_upload'] = array(
  '#type' => 'file',
  '#title' => t('Upload picture'),
  '#size' => 28,
  '#description' => t('Your virtual face or picture. Maximum dimensions are %dimensions and the maximum size is %size kB.',
  array('%dimensions' => variable_get('user_picture_dimensions', '200x200'),
  '%size' => variable_get('user_picture_file_size', '300'))) .' '. variable_get('user_picture_guidelines', '')
  );
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Отправить',
    

  );

  $form['#uid'] = $user->uid;
  
  return $form;
  
}
function custom_picture_form_validate($form, &$form_state) {
  // If required, validate the uploaded picture.
  $validators = array(
    'file_validate_is_image' => array(),
    'file_validate_image_resolution' => array(variable_get('user_picture_dimensions', '130x130')),
    'file_validate_size' => array(variable_get('user_picture_file_size', '30') * 1024),
  );
  if ($file = file_save_upload('picture_upload', $validators)) {
    // Remove the old picture.
    if (isset($form_state['values']['_account']->picture) && file_exists($form_state['values']['_account']->picture)) {
      file_delete($form_state['values']['_account']->picture);
    }
 
    $info = image_get_info($file->filepath);
    $destination = variable_get('user_picture_path', 'pictures') .'/picture-'. $form['#uid'] .'.'. $info['extension'];
    if (file_copy($file, $destination, FILE_EXISTS_REPLACE)) {
      $form_state['values']['picture'] = $file->filepath;
 
      cache_clear_all($form['#uid'] .':', 'cache_menu', TRUE);
      cache_clear_all();
      drupal_set_message(t('The changes have been saved.'));
      
    }
    else {
      form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn't exist or is not writable.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
    }
  }
  
}
 ?>

Картинка загружается в files но не цепляется к юзеру и не отображается.
пытаюсь на сабмит навесить еще что-то типа:

<?phpfunction _photos_form_submit($form, $form_state) {
    global $user;
    $user = user_load($user->uid);
    $file = file_load($form_state['storage']['fid']);
    $user->field_user_photo['und'] = array(array('fid' => $file->fid));
    user_save($user);
  }?>

это код для 7-рки, пыталась переделать под 6-рку разными манипуляциями. Но фото все равно не цепляется и выдает ошибку:
user warning: Duplicate entry '' for key 'name' query: INSERT INTO users (created, access) VALUES (1381502495, 1381502495) in modules/user/user.module on line 342.
в Принципе я понимаю что создаю типа "дубликата", но как тогда правильно написать в коде?

Заранее спасибо

Комментарии

Аватар пользователя sg85 sg85 11 октября 2013 в 20:22

Почему у Вас логика сабмита в функции валидации? Сами потом ведь запутаетесь. Прежде чем записывать в БД есть смысл проверить, не самый шустрый способ, за то кроссплатформенный.

Аватар пользователя sg85 sg85 11 октября 2013 в 20:46

Выше ерунду написал.

В 6рке объект пользователя устроен несколько иначе, по дефолту он не является сущностью, потому обычным методом поле к нему не прицепить, однако, на сколько помню, там может использоваться дефолтный $user->picture(или как-то так), это если не используете дополнительные модули, например content_profile(или как там его) проще наверное будет посмотреть на объект пользователя через devel.

Аватар пользователя Boozenok Boozenok 12 октября 2013 в 14:52

"sg85" wrote:
например content_profile(или как там его

использую) По в моем случае профиль генерирует свой модуль. content_profile используется, но только в полях, а изображение выводится стандартное $picture

Аватар пользователя sg85 sg85 13 октября 2013 в 3:43

Значит в этот самый $picture и пихать, создайте вручную юзера с изображением и посмотрите как он выглядит через модуль devel(вкладка "разработка"(development) в профиле юзера), и потом от этого пляшите.(на сколько помню там сразу присваивается fid, напрямую, но могу ошибаться, потому и стоит посмотреть на это через devel)

З.Ы. devel это модуль, если что Wink