| 
<?php
declare(strict_types=1);
 
 use SKien\Google\GClient;
 use SKien\Google\GContact;
 use SKien\Google\GContactGroups;
 use SKien\Google\GContacts;
 use SKien\Google\GSecrets;
 
 require_once 'autoloader.php';
 
 /**
 * This example is only intended to demonstrate the use of the package. The UI
 * is only coded 'quick and dirty', contains no validations and should only be
 * used as a starting point for your own implementation.
 *
 * @author Stefanius <[email protected]>
 * @copyright MIT License - see the LICENSE file for details
 */
 
 $oSecrets = new GSecrets(-1, GSecrets::TOKEN_FILE);
 $oClient = new GClient();
 $oClient->setAccessToken($oSecrets->getAccessToken());
 if ($oClient->isAccessTokenExpired()) {
 // try to refresh the accesstoken
 $strRefreshToken = $oSecrets->getRefreshToken();
 if (empty($strRefreshToken)) {
 // no refresh token available - redirect to google login
 header('Location: ./GoogleLogin.php');
 exit;
 }
 $oClient->setOAuthClient($oSecrets->getClientSecrets());
 $oSecrets->saveAccessToken($oClient->refreshAccessToken($strRefreshToken));
 }
 
 $strSearch = $_REQUEST['search'] ?? '';
 $strGroup = $_REQUEST['group'] ?? '';
 
 // load available user defined contact groups
 $oGroups = new GContactGroups($oClient);
 $aGroups = $oGroups->list(GContactGroups::GT_USER_CONTACT_GROUPS);
 if ($aGroups === false) {
 displayApiError(
 'list contact groups',
 '',
 $oClient->getLastResponseCode(),
 $oClient->getLastError(),
 $oClient->getLastStatus()
 );
 exit;
 }
 $strGroupSelect  = '<select id="group" onchange="onSelectGroup(this);">' . PHP_EOL;
 $strGroupSelect .= '                <option value=""><all contacts></option>' . PHP_EOL;
 foreach ($aGroups as $strGroupResourceName => $strGroupName) {
 $strSelected = ($strGroup == $strGroupResourceName ? ' selected' : '');
 $strGroupSelect .= '                <option value="' . $strGroupResourceName . '"' . $strSelected . '>' . $strGroupName . '</option>' . PHP_EOL;
 }
 $strGroupSelect .= '            </select>' . PHP_EOL;
 
 $oContacts = new GContacts($oClient);
 $oContacts->addPersonFields(GContacts::DEF_LIST_PERSON_FIELDS);
 
 $aContactList = [];
 $strTitle = '';
 if (!empty($strSearch)) {
 $oContacts->setPageSize(50);
 $aContactList = $oContacts->search($strSearch);
 $strTitle = ' - Search for <b><i>[' . $strSearch . ']</i></b>';
 if ($aContactList === false) {
 displayApiError(
 'search contacts',
 'search: ' . $strSearch,
 $oClient->getLastResponseCode(),
 $oClient->getLastError(),
 $oClient->getLastStatus()
 );
 exit;
 }
 } else {
 $aContactList = $oContacts->list(GContacts::SO_LAST_NAME_ASCENDING, $strGroup);
 if ($aContactList === false) {
 displayApiError(
 'list contacts',
 'group: ' . $strGroup,
 $oClient->getLastResponseCode(),
 $oClient->getLastError(),
 $oClient->getLastStatus()
 );
 exit;
 }
 }
 $strTitle = count($aContactList) . ' Contacts' . $strTitle;
 ?>
 <html>
 <head>
 <style>
 body, table {
 font-family: Sans-Serif;
 font-size: 12px;
 }
 a, a:visited {
 color: blue;
 }
 label {
 display: inline-block;
 width: 100px;
 }
 table {
 border-spacing: 0;
 border-collapse: collapse;
 }
 th {
 color: white;
 background-color: #777;
 border: 1px solid #333;
 padding: 2px 4px;
 }
 td {
 border: 1px solid #ccc;
 padding: 2px 4px;
 }
 tr:nth-child(2n+1) {
 background-color: #eee;
 }
 td:nth-child(9) {
 text-align: center;
 }
 a.trash {
 color: #999;
 font-size: 16px;
 font-weight: bold;
 text-decoration: none;
 }
 a.trash:hover {
 color: #009;
 }
 a.starred,
 a.unstarred {
 font-size: 16px;
 font-weight: bold;
 text-decoration: none;
 }
 a.starred,
 a.unstarred:hover {
 color: goldenrod;
 }
 a.starred:hover,
 a.unstarred {
 color: #ccc;
 }
 </style>
 <script>
 function onSelectGroup(oSelect)
 {
 window.location = './ContactList.php?group=' + encodeURI(oSelect.value);
 }
 function deleteContact(strResourceName)
 {
 if (confirm("Delete the contact?")) {
 window.location = './DoAction.php?action=deleteContact&res=' + encodeURI(strResourceName);
 }
 }
 function createGroup()
 {
 var strGroupName = prompt('Enter new group name', '');
 if (strGroupName !== null) {
 window.location = './DoAction.php?action=saveGroup&name=' + encodeURI(strGroupName);
 }
 }
 function deleteGroup()
 {
 var strGroupName = prompt('Enter name of group to delete', '');
 if (strGroupName !== null) {
 window.location = './DoAction.php?action=deleteGroup&name=' + encodeURI(strGroupName);
 }
 }
 </script>
 </head>
 <body>
 <form action="./ContactList.php" method="post">
 <div>
 <label for="search">Query:</label>
 <input id="search" type="text" name="search" />
 <input type="submit" value="Search" />
 <br/><br/>
 <label for="group">or select group:</label>
 <?=$strGroupSelect?>
 </div>
 </form>
 <h2><?=$strTitle?></h2>
 <a href="./ContactDetails.php">Add new contact</a>     
 <a href="javascript: createGroup()">Create new contactgroup</a>     
 <a href="javascript: deleteGroup()">Delete existing contactgroup</a>
 <br/><br/>
 <table style="width: 100%">
 <tbody>
 <tr>
 <th style="width: 4%">#</th>
 <th style="width: 3%"> </th>
 <th style="width: 25%">Name</th>
 <th style="width: 20%" colspan="2">Phone 1</th>
 <th style="width: 20%" colspan="2">Phone 2</th>
 <th style="width: 25%">e-Mail</th>
 <th style="width: 3%"> </th>
 </tr>
 <?php
 $i = 0;
 foreach ($aContactList as $aContact) {
 $i++;
 $oContact = GContact::fromArray($aContact);
 $strResourceName = rawurlencode($aContact['resourceName']);
 $strStarrURL = './DoAction.php?action=starreContact&res=' . $strResourceName . '&setstarred=';
 $strDeleteFunc = "javascript: deleteContact('" . $strResourceName . "')";
 $strName = '[not set]';
 if (isset($aContact['names'][0])) {
 $strName = $aContact['names'][0]['displayNameLastFirst'];
 } else if (isset($aContact['organizations'][0])) {
 $strName = $aContact['organizations'][0]['name'];
 }
 echo '            <tr id="' . $aContact['resourceName'] . '">' . PHP_EOL;
 echo '                <td>' . $i . '</td>' . PHP_EOL;
 if ($oContact->isStarred()) {
 $strStarrURL;
 echo '                <td><a class="starred" href="' . $strStarrURL . 'false" title="unmark">★</a></td>' . PHP_EOL;
 } else {
 echo '                <td><a class="unstarred" href="' . $strStarrURL . 'true" title="mark starred">☆</a></td>' . PHP_EOL;
 }
 echo '                <td><a href="./ContactDetails.php?res=' . $strResourceName . '">' . $strName . '</a></td>' . PHP_EOL;
 echo '                <td>' . (isset($aContact['phoneNumbers'][0]) ? $aContact['phoneNumbers'][0]['type'] : '') . '</td>' . PHP_EOL;
 echo '                <td>' . (isset($aContact['phoneNumbers'][0]) ? $aContact['phoneNumbers'][0]['value'] : '') . '</td>' . PHP_EOL;
 echo '                <td>' . (isset($aContact['phoneNumbers'][1]) ? $aContact['phoneNumbers'][1]['type'] : '') . '</td>' . PHP_EOL;
 echo '                <td>' . (isset($aContact['phoneNumbers'][1]) ? $aContact['phoneNumbers'][1]['value'] : '') . '</td>' . PHP_EOL;
 echo '                <td>' . (isset($aContact['emailAddresses'][0]) ? $aContact['emailAddresses'][0]['value'] : '') . '</td>' . PHP_EOL;
 echo '                <td><a class="trash" href="' . $strDeleteFunc . '" title="delete contact">🗑</a></td>' . PHP_EOL;
 echo '            </tr>' . PHP_EOL;
 }
 ?>
 </tbody>
 </table>
 </body>
 </html>
 
 |