function avatar_selection_update_7003 in Avatar Selection 7
Create a file entry for each existing avatar for users upgrading from D6.
File
- ./
avatar_selection.install, line 321 - The Avatar Selection module install file.
Code
function avatar_selection_update_7003() {
// Prepare the pictures directory.
file_prepare_directory($picture_directory, FILE_CREATE_DIRECTORY);
$picture_directory = file_default_scheme() . '://' . variable_get('user_picture_path', 'pictures');
// Prepare the avatar_selection directory.
$avs_directory = file_build_uri('avatar_selection');
file_prepare_directory($avs_directory, FILE_CREATE_DIRECTORY);
// Get all users using old avatar_selection avatars and create copies in the
// "pictures" directory for them.
$query = db_select('users', 'u')
->fields('u', array(
'uid',
'picture',
));
$query
->join('file_managed', 'f', 'u.picture = f.fid');
$query
->addField('f', 'uri');
$result = $query
->condition('uri', '%/avatar_selection/%', 'LIKE')
->execute();
foreach ($result as $account) {
// Don't bother copying files that don't exist.
if (file_exists($account->uri)) {
$info = image_get_info($account->uri);
$destination = file_stream_wrapper_uri_normalize($picture_directory . '/picture-' . $account->uid . '-' . REQUEST_TIME . '.' . $info['extension']);
$original_file = file_load($account->picture);
// Create a file object.
$file = new stdClass();
$file->uri = $account->uri;
$file->filename = drupal_basename($file->uri);
$file->filemime = file_get_mimetype($file->uri);
$file->uid = $account->uid;
$file->status = FILE_STATUS_PERMANENT;
if ($file = file_copy($file, $destination, FILE_EXISTS_RENAME)) {
$file->status = FILE_STATUS_PERMANENT;
$file = file_save($file);
file_usage_add($file, 'user', 'user', $account->uid);
file_usage_delete($original_file, 'user', 'user', $account->uid);
db_update('users')
->fields(array(
'picture' => $file->fid,
))
->condition('uid', $account->uid)
->execute();
}
}
}
// Create a file object for each old avatar and update avatar_selection table
// with the fid.
$result = db_select('avatar_selection', 'avs')
->fields('avs', array(
'aid',
'avatar',
))
->condition('fid', 0)
->execute();
foreach ($result as $avatar) {
$uri = $avs_directory . '/' . $avatar->avatar;
$uri = file_stream_wrapper_uri_normalize($uri);
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
$fid = db_select('file_managed', 'f')
->fields('f', array(
'fid',
))
->condition('uri', $uri)
->execute()
->fetchField();
if (empty($fid)) {
$file = new stdClass();
$file->uid = 1;
$file->filename = basename($uri);
$file->uri = $uri;
$file->filemime = file_get_mimetype($uri);
// This is gagged because some uris will not support it.
$file->filesize = @filesize($uri);
$file->timestamp = REQUEST_TIME;
$file->status = FILE_STATUS_PERMANENT;
$file->is_new = TRUE;
$file = file_save($file);
$fid = $file->fid;
}
db_update('avatar_selection')
->fields(array(
'fid' => $fid,
))
->condition('aid', $avatar->aid)
->execute();
}
return t('Created file objects for D6 avatars.');
}