function _connector_information_update in Connector 6
3 calls to _connector_information_update()
- connector_cron in ./
connector.module - Implementation of hook_cron().
- _connector_information_fetch in ./
connector.module - _connector_log_in in ./
connector.module
File
- ./
connector.module, line 487 - Connector module
Code
function _connector_information_update($uid, $types = NULL) {
//TODO: Configure more types of information that we want fetched?
if (is_object($uid)) {
$uid = $uid->uid;
}
$connection = _connector_get_primary_connection($uid);
$connector = isset($connection) ? _connector_get_connectors($connection->connector) : FALSE;
if ($connector) {
if (isset($connector['information callback']) && is_callable($connector['information callback'])) {
$info = call_user_func($connector['information callback'], $connector, $connection->cid, $types);
}
$info = $info ? (array) $info : array();
foreach ((array) $types as $type => $value) {
if (!empty($value) && !array_key_exists($type, $info) && $type != 'avatar') {
$info[$type] = FALSE;
}
}
if (empty($types) || !empty($types['avatar'])) {
if (variable_get('user_pictures', 0) && isset($connector['avatar callback']) && is_callable($connector['avatar callback'])) {
$avatar = call_user_func($connector['avatar callback'], $connector, $connection->cid);
}
else {
$avatar = NULL;
}
}
if (!empty($connector['cache'])) {
$max_life = time() + $connector['cache'];
}
else {
//TODO: Make default cache time configurable?
$max_life = time() + 432000;
//5 days x 24 hours per day x 3600 seconds per hour = 432000
}
}
if (!empty($info)) {
if (array_key_exists('real name', $info)) {
$real_name = (object) array(
'uid' => $uid,
'type' => 'real name',
);
$existing = db_fetch_object(db_query("SELECT value, failure_level FROM {connector_info} WHERE uid = %d AND type = 'real name'", array(
':uid' => $uid,
)));
if ($info['real name'] === FALSE) {
$real_name->max_life = intval(time() + 30 * 60 * pow(5.6346264945, $existing->failure_level));
// 30 minutes * 60 seconds per minute * failure level 4 = delay of 3 weeks
if ($existing->failure_level < 4) {
$real_name->failure_level = $existing->failure_level + 1;
}
}
else {
$real_name->max_life = $max_life;
if ($existing && $existing->failure_level > 0) {
$real_name->failure_level = 0;
}
}
if ($info['real name'] !== FALSE || !empty($connector['invalidate old info'])) {
$real_name->value = empty($info['real name']) ? '' : $info['real name'];
//TODO: Empty should be saved as NULL?
}
if ($existing !== FALSE) {
if ($existing->value == $info['real name']) {
unset($real_name->value);
}
drupal_write_record('connector_info', $real_name, array(
'uid',
'type',
));
}
else {
drupal_write_record('connector_info', $real_name);
}
_connector_information_fetch($uid, NULL, FALSE, TRUE);
}
}
if (isset($avatar)) {
if ($avatar !== FALSE || !empty($connector['invalidate old info'])) {
$account = user_load($uid);
if (isset($account->picture) && $account->picture != $destination && file_exists($account->picture)) {
file_delete($account->picture);
}
}
$avatar_record = (object) array(
'uid' => $uid,
'type' => 'avatar',
);
$existing = db_fetch_object(db_query("SELECT failure_level FROM {connector_info} WHERE uid = %d AND type = 'avatar'", array(
':uid' => $uid,
)));
if ($avatar === FALSE) {
$avatar_record->max_life = time() + 30 * pow(5.6346264945, $existing->failure_level);
// Failure level 4 = delay of 3 weeks
if ($existing->failure_level < 4) {
$avatar_record->failure_level = $avatar_record->failure_level + 1;
}
}
elseif ($existing->failure_level > 0) {
$avatar_record->max_life = $max_life;
$avatar_record->failure_level = 0;
}
if (db_result(db_query("SELECT COUNT(*) FROM {connector_info} WHERE uid = %d AND type = 'avatar'", array(
':uid' => $uid,
)))) {
drupal_write_record('connector_info', $avatar_record, array(
'uid',
'type',
));
}
else {
drupal_write_record('connector_info', $avatar_record);
}
if (!empty($avatar)) {
$result = drupal_http_request($avatar);
if ($result->code != 200) {
watchdog('connector', 'Failed importing avatar for user @uid, code : @code', array(
'@uid' => $uid,
'@code' => $result->code,
));
}
else {
//Copied from file_save_data - needs to write the file before validating it
$temp = file_directory_temp();
// On Windows, tempnam() requires an absolute path, so we use realpath().
$tmp_file = tempnam(realpath($temp), 'file');
if (!($fp = fopen($tmp_file, 'wb'))) {
drupal_set_message(t('The file could not be created.'), 'error');
}
else {
fwrite($fp, $result->data);
fclose($fp);
$file = new stdClass();
$file->filename = file_munge_filename(trim(basename($tmp_file), '.'), 'jpg jpeg gif png', FALSE);
$file->filepath = $tmp_file;
$file->filemime = file_get_mimetype($tmp_file);
$file->filesize = filesize($tmp_file);
$errors = array();
$errors += file_validate_is_image($file);
$errors += file_validate_image_resolution($file, variable_get('user_picture_dimensions', '85x85'));
$errors += file_validate_size($file, variable_get('user_picture_file_size', '30') * 1024);
if (empty($errors)) {
$info = image_get_info($file->filepath);
$destination = file_create_path(variable_get('user_picture_path', 'pictures'));
file_check_directory($destination, FILE_CREATE_DIRECTORY);
if (file_copy($file, $destination . '/picture-' . $uid . '.' . $info['extension'], FILE_EXISTS_REPLACE)) {
user_save($account, array(
'picture' => $file->filepath,
));
}
}
file_delete($tmp_file);
}
}
}
}
}