123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?php
- /**
- * Implementation of hook_user_import_form_field_match().
- */
- function profile_user_import_form_field_match() {
- module_load_include('inc', 'user_import', 'user_import.admin');
- $fields = _user_import_profile('fid', 'title');
- $options['profile'] = $fields;
- return $options;
- }
- /**
- * Implementation of hook_user_import_form_update_user().
- */
- function profile_user_import_form_update_user() {
- $form['profile'] = array('title' => t('Profile'), 'description' => t('Affected: Profile fields.'));
- return $form;
- }
- /**
- * Implementation of hook_user_import_data().
- */
- function profile_user_import_data($settings, $update_setting, $column_settings, $module, $field_id, $data, $column_id) {
- if ($module != 'profile') return;
- return trim($data[$column_id]);
- }
- /**
- * Implementation of hook_user_import_after_save().
- */
- function profile_user_import_after_save($settings, $account, $password, $fields, $updated, $update_setting_per_module) {
- // get all fields
- $profile_fields = profile_get_fields();
- $data = $old_data = unserialize($account->data);
- foreach ($profile_fields as $field) {
- profile_user_import_save_profile($field, $account->uid, $fields['profile'][$field->fid][0], $updated, $update_setting_per_module['profile'], $data);
- }
- // data column in the user table needs to be updated
- if ($data != $old_data) {
- db_update('users')
- ->fields(array('data' => serialize($data)))
- ->condition('uid', $account->uid)
- ->execute();
- }
- return;
- }
- function profile_user_import_save_profile($field, $uid, $value, $updated, $update_setting, &$data) {
- // when the profile field is displayed on the registration form an empty value is automatically saved by the Profile module
- $exists = db_query_range('SELECT value FROM {profile_values} WHERE fid = :fid AND uid = :uid', 0, 1, array(':fid' => $field->fid, ':uid' => $uid))->fetchField();
- user_import_profile_date($value, $field->type);
- if ($updated) {
- switch ($update_setting) {
- case UPDATE_NONE:
- return;
- case UPDATE_ADD:
- if (empty($value) || (!empty($exists) && $exists != '')) return;
- case UPDATE_REPLACE:
- if (empty($value) && $update_setting == UPDATE_REPLACE) {
- db_query("DELETE FROM {profile_values} WHERE fid = :fid AND uid = :uid", array(':fid' => $field->fid, ':uid' => $uid));
- unset($data[$field->name]);
- return;
- }
- if ((empty($exists) && $exists != '') || $exists === FALSE) {
- $id = db_insert('profile_values')
- ->fields(array(
- 'fid' => $field->fid,
- 'uid' => $uid,
- 'value' => $value,
- ))
- ->execute();
- }
- else {
- $id = db_update('profile_values')
- ->fields(array(
- 'value' => $value,
- ))
- ->condition('fid', $field->fid)
- ->condition('uid', $uid)
- ->execute();
- }
- $data[$field->name] = $value;
- return;
- }
- }
- else {
- if (empty($value)) return;
- if ((empty($exists) && $exists != '') || $exists === FALSE) {
- $id = db_insert('profile_values')
- ->fields(array('fid' => $field->fid, 'uid' => $uid, 'value' => $value))
- ->execute();
- }
- else {
- db_update('profile_values')
- ->fields(array('value' => $value))
- ->condition('fid', $field->fid)
- ->condition('uid', $uid)
- ->limit(1)
- ->execute();
- $data[$field->name] = $value;
- }
- }
- return;
- }
- /**
- *
- */
- function profile_get_fields() {
- static $fields = array();
- // Avoid making more than one database call for profile info.
- if (empty($fields)) {
- $results = db_query('SELECT * FROM {profile_field}');
- foreach ($results as $row) {
- $fields[] = $row;
- }
- }
- return $fields;
- }
- /**
- * Convert date into format that Profile module expects:
- * a:3:{s:5:"month";s:1:"1";s:3:"day";s:1:"1";s:4:"year";s:4:"1976";}
- */
- function user_import_profile_date(&$value, $field_type) {
- if ($field_type != "date" || empty($value)) {
- return;
- }
- $date = explode('/', $value);
- if (!is_array($date)) {
- return;
- }
- // Get seleceted format.
- $date_format = variable_get('user_import_profile_date_format', 'MM/DD/YYYY');
- if ($date_format == 'MM/DD/YYYY') {
- list($month, $day, $year) = explode('/', $value);
- }
- else {
- if ($date_format == 'DD/MM/YYYY') {
- list($day, $month, $year) = explode('/', $value);
- }
- else {
- if ($date_format == 'YYYY/MM/DD') {
- list($year, $month, $day) = explode('/', $value);
- }
- else {
- if ($date_format == 'YYYY/DD/MM') {
- list($year, $day, $month) = explode('/', $value);
- }
- }
- }
- }
- // Leading zeros cause a problem so remove them.
- if (substr($day, 0, 1) == '0') {
- $day = substr($day, 1, 1);
- }
- if (substr($month, 0, 1) == '0') {
- $month = substr($month, 1, 1);
- }
- $value = serialize(array('month' => $month, 'day' => $day, 'year' => $year));
- }
|