Загрузка аватара при регистрации

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

Аватар пользователя Lvl Lvl 23 января 2009 в 13:12

На этом сайте были вопросы, как сделать загрузку аватара при регистрации. На drupal.org есть различные рецепты, но как всегда пришлось собирать работающую версию из нескольких Smile

Шаг 1.

// hook_form_alter
function mym_form_alter($form_id, &$form) {

        if ($form_id == 'user_register') {
                $form['picture'] = array('#type' => 'fieldset', '#title' => t('Picture'), '#weight' => 1);
                $form['picture']['picture_upload'] = array(
                        '#type' => 'file',
                        '#title' => t('Upload picture'),
                        '#size' => 48,
                        '#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', '85x85'), '%size' => variable_get('user_picture_file_size', '30'))) .' '. variable_get('user_picture_guidelines', ''),
                );
                $form['#attributes']['enctype'] = 'multipart/form-data';
        }

#required в данном случае ставить не нужно, даже если мы хотим сделать закачку обязательной, но не будет значка, что поле обязательное.

Шаг 2.

// hook_user
function mm_user($op, &$edit, &$account, $category = NULL) {

        if ($op == 'validate' and $account['form_id'] == 'user_register') {

                if ($file = file_check_upload('picture_upload')) {
                        // getting next id - you cannot use db_next_id!!
                        $res = db_query('SELECT MAX(uid) uid FROM {users}');
                        $user = db_fetch_object($res);
                        // this is now our future user
                        $user->uid++;
                        user_validate_picture($file, $edit, $user);
                } else {
                        form_set_error('picture_upload', 'Вы должны закачать аватар');
                }
        }

}

Код взят из той ветки с drupal.org. Теоретически он может перепутает аватары если одновременно будет сразу две регистрации, но будем надеяться такого не произойдет.
Если загрузка аватара проинудительная не нужна, то нужно убрать else.
Все довольно просто и работает.