function preferences_list($params)
 {
     $rcmail = rcmail::get_instance();
     if ($params['section'] == 'addressbook') {
         $params['blocks'][$this->id]['name'] = $this->abook_name;
         $field_id = 'rc_use_plugin';
         $checkbox = new html_checkbox(array('name' => $field_id, 'id' => $field_id, 'value' => 1));
         $params['blocks'][$this->id]['options'][$field_id] = array('title' => html::label($field_id, $this->gettext('use') . $this->abook_name), 'content' => $checkbox->show($rcmail->config->get(google_func::$settings_key_use_plugin)));
         $field_id = 'rc_google_autosync';
         $checkbox = new html_checkbox(array('name' => $field_id, 'id' => $field_id, 'value' => 1));
         $params['blocks'][$this->id]['options'][$field_id] = array('title' => html::label($field_id, $this->gettext('autosync')), 'content' => $checkbox->show($rcmail->config->get(google_func::$settings_key_auto_sync)));
         $field_id = 'rc_google_authcode';
         $input_auth = new html_inputfield(array('name' => $field_id, 'id' => $field_id, 'size' => 45));
         $params['blocks'][$this->id]['options'][$field_id] = array('title' => html::label($field_id, $this->gettext('authcode')), 'content' => $input_auth->show($rcmail->config->get(google_func::$settings_key_auth_code)));
         $params['blocks'][$this->id]['options']['link'] = array('title' => html::span('', ''), 'content' => html::a(array('href' => google_func::get_client()->createAuthUrl(), 'target' => '_blank'), $this->gettext('authcodelink')));
     }
     return $params;
 }
 static function google_sync_contacts($user)
 {
     $rcmail = rcmail::get_instance();
     $client = google_func::get_client();
     $auth_res = google_func::google_authenticate($client, $user);
     if (!$auth_res['success']) {
         return $auth_res;
     }
     $feed = 'https://www.google.com/m8/feeds/groups/default/full' . '?v=3.0';
     $val = $client->getAuth()->authenticatedRequest(new Google_Http_Request($feed));
     if ($val->getResponseHttpCode() == 401) {
         return array('success' => false, 'message' => "Authentication failed.");
     } else {
         if ($val->getResponseHttpCode() == 403) {
             return array('success' => false, 'message' => $rcmail->gettext('googleforbidden', 'google_addressbook'));
         } else {
             if ($val->getResponseHttpCode() != 200) {
                 return array('success' => false, 'message' => $rcmail->gettext('googleunreachable', 'google_addressbook'));
             }
         }
     }
     $xml = xml_utils::xmlstr_to_array($val->getResponseBody());
     $gid = $xml['entry'][0]['id'][0]['@text'];
     $feed = 'https://www.google.com/m8/feeds/contacts/default/full' . '?max-results=9999' . '&v=3.0' . '&group=' . urlencode($gid);
     $val = $client->getAuth()->authenticatedRequest(new Google_Http_Request($feed));
     if ($val->getResponseHttpCode() == 401) {
         return array('success' => false, 'message' => "Authentication failed.");
     } else {
         if ($val->getResponseHttpCode() == 403) {
             return array('success' => false, 'message' => $rcmail->gettext('googleforbidden', 'google_addressbook'));
         } else {
             if ($val->getResponseHttpCode() != 200) {
                 return array('success' => false, 'message' => $rcmail->gettext('googleunreachable', 'google_addressbook'));
             }
         }
     }
     $xml = xml_utils::xmlstr_to_array($val->getResponseBody());
     $backend = new google_addressbook_backend($rcmail->get_dbh(), $user->ID);
     $backend->delete_all();
     $num_entries = 0;
     foreach ($xml['entry'] as $entry) {
         //write_log('google_addressbook', 'getting contact: '.$entry['title'][0]['@text']);
         $record = array();
         $name = $entry['gd:name'][0];
         $record['name'] = trim($name['gd:fullName'][0]['@text']);
         $record['firstname'] = trim($name['gd:givenName'][0]['@text']);
         $record['surname'] = trim($name['gd:familyName'][0]['@text']);
         $record['middlename'] = trim($name['gd:additionalName'][0]['@text']);
         $record['prefix'] = $name['gd:namePrefix'][0]['@text'];
         $record['suffix'] = $name['gd:nameSuffix'][0]['@text'];
         if (empty($record['name'])) {
             $record['name'] = $entry['title'][0]['@text'];
         }
         if (empty($record['name']) && empty($record['firstname']) && empty($record['surname']) && empty($record['middlename']) && !array_key_exists('gd:email', $entry)) {
             continue;
         }
         if (array_key_exists('gd:email', $entry)) {
             foreach ($entry['gd:email'] as $email) {
                 list($rel, $type) = explode('#', $email['@attributes']['rel'], 2);
                 $type = empty($type) ? '' : ':' . $type;
                 $record['email' . $type][] = $email['@attributes']['address'];
             }
         }
         if (array_key_exists('gd:phoneNumber', $entry)) {
             foreach ($entry['gd:phoneNumber'] as $phone) {
                 list($rel, $type) = explode('#', $phone['@attributes']['rel'], 2);
                 $type = empty($type) ? '' : ':' . $type;
                 $record['phone' . $type][] = $phone['@text'];
             }
         }
         if (array_key_exists('link', $entry)) {
             foreach ($entry['link'] as $link) {
                 $rel = $link['@attributes']['rel'];
                 $href = $link['@attributes']['href'];
                 if ($rel == 'http://schemas.google.com/contacts/2008/rel#photo') {
                     // etag is only set if image is available
                     if (isset($link['@attributes']['etag'])) {
                         $resp = $client->getAuth()->authenticatedRequest(new Google_Http_Request($href));
                         if ($resp->getResponseHttpCode() == 200) {
                             $record['photo'] = $resp->getResponseBody();
                         }
                     }
                     break;
                 }
             }
         }
         $num_entries++;
         $backend->insert($record, false);
     }
     return array('success' => true, 'message' => $num_entries . $rcmail->gettext('contactsfound', 'google_addressbook'));
 }