<?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';
 
require_once 'displayApiError.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));
 
}
 
 
$strAction = $_GET['action'] ?? 'saveContact';
 
 
$result = false;
 
$strLocation = '';
 
switch ($strAction) {
 
    case 'saveContact':
 
        $oContacts = new GContacts($oClient);
 
 
        $oContact = new GContact([]);
 
 
        $strResourceName = $_POST['resourceName'];
 
        $bCreateContact = false;
 
        if (!empty($strResourceName)) {
 
            $strAction = 'saving contact';
 
            $oContact->setMetaData($_POST['metadataType'], $_POST['metadataId'], $_POST['metadataEtag']);
 
        } else {
 
            $strAction = 'creating contact';
 
            $bCreateContact = true;
 
        }
 
        // get all 'pathed' values
 
        foreach ($_POST as $strName => $strValue) {
 
            $aPath = explode('_', $strName);
 
            if (count($aPath) == 3) {
 
                $iIndex = intval($aPath[1]);
 
                if (!isset($oContact[$aPath[0]])) {
 
                    $oContact[$aPath[0]] = [];
 
                    $oContacts->addPersonFields($aPath[0]);
 
                }
 
                if (!isset($oContact[$aPath[0]][$iIndex])) {
 
                    $oContact[$aPath[0]][$iIndex] = [];
 
                }
 
                $oContact[$aPath[0]][$iIndex][$aPath[2]] = $strValue;
 
            }
 
        }
 
 
        // set the primary items
 
        $aPrimaryRadios = [
 
            GContact::PF_ADDRESSES,
 
            GContact::PF_EMAIL_ADDRESSES,
 
            GContact::PF_PHONE_NUMBERS,
 
            GContact::PF_URLS,
 
        ];
 
        foreach ($aPrimaryRadios as $strPrimary) {
 
            if (isset($_POST[$strPrimary])) {
 
                $oContact->setPrimaryItem($strPrimary, intval($_POST[$strPrimary]));
 
            }
 
        }
 
        // handle birthday and membership separate...
 
        if (strlen($_POST['birthday']) > 0) {
 
            $oContacts->addPersonFields(GContact::PF_BIRTHDAYS);
 
            $oContact->setDateOfBirth($_POST['birthday']);
 
        }
 
        if (isset($_POST['memberships']) && is_array($_POST['memberships'])) {
 
            $oContacts->addPersonFields(GContact::PF_MEMBERSHIPS);
 
            $oContact['memberships'] = [];
 
            foreach ($_POST['memberships'] as $strGroupResourceName) {
 
                $oContact['memberships'][] = ['contactGroupMembership' => ['contactGroupResourceName' => $strGroupResourceName]];
 
            }
 
        }
 
        if ($bCreateContact) {
 
            $oContact = $oContacts->createContact($oContact);
 
            if ($oContact !== false) {
 
                $result = true;
 
                $strLocation = './ContactDetails.php?res=' . $oContact->getResourceName();
 
            }
 
        } else {
 
            if ($oContacts->updateContact($strResourceName, $oContact) !== false) {
 
                $result = true;
 
                $strLocation = './ContactDetails.php?res=' . $strResourceName;
 
            }
 
        }
 
        break;
 
    case 'deleteContact':
 
        $strAction = 'deleting contact';
 
        $oContacts = new GContacts($oClient);
 
 
        $strResourceName = rawurldecode($_GET['res'] ?? '');
 
        if (!empty($strResourceName)) {
 
            $result = $oContacts->deleteContact($strResourceName);
 
            $strLocation = './ContactList.php';
 
        }
 
        break;
 
    case 'starreContact':
 
        $strAction = 'starre/unstarre contact';
 
        $oContacts = new GContacts($oClient);
 
 
        $strResourceName = rawurldecode($_GET['res'] ?? '');
 
        if (!empty($strResourceName)) {
 
            $result = $oContacts->setContactStarred($strResourceName, $_GET['setstarred'] == 'true');
 
            $strLocation = './ContactList.php';
 
        }
 
        break;
 
    case 'setContactPhoto':
 
        $strAction = 'setting contact photo';
 
        $oContacts = new GContacts($oClient);
 
        $strResourceName = $_POST['resourceName'];
 
        if (isset($_FILES['photoFile']) && $_FILES['photoFile']['tmp_name'] != '') {
 
            $strFilename = $_FILES['photoFile']['tmp_name'];
 
            $result = $oContacts->setContactPhotoFile($strResourceName, $strFilename);
 
            $strLocation = './ContactDetails.php?res=' . $strResourceName;
 
        }
 
        break;
 
    case 'deleteContactPhoto':
 
        $strAction = 'deleting contact photo';
 
        $oContacts = new GContacts($oClient);
 
        $strResourceName = $_GET['res'];
 
        $result = $oContacts->deleteContactPhoto($strResourceName);
 
        $strLocation = './ContactDetails.php?res=' . $strResourceName;
 
        break;
 
    case 'saveGroup':
 
        $strAction = 'saving contact group';
 
        $oGroups = new GContactGroups($oClient);
 
 
        $strResourceName = rawurldecode($_GET['res'] ?? '');
 
        $strGroupName = rawurldecode($_GET['name'] ?? '');
 
 
        if (empty($strResourceName)) {
 
            $oGroup = $oGroups->createGroup($strGroupName);
 
        } else {
 
            $oGroup = $oGroups->updateGroup($strResourceName, $strGroupName);
 
        }
 
        $result = ($oGroup !== false);
 
        $strLocation = './ContactList.php';
 
        break;
 
    case 'deleteGroup':
 
        $strAction = 'deleting contact group';
 
        $oGroups = new GContactGroups($oClient);
 
 
        $strResourceName = rawurldecode($_GET['res'] ?? '');
 
        $strGroupName = rawurldecode($_GET['name'] ?? '');
 
        if (empty($strResourceName) && !empty($strGroupName)) {
 
            $strResourceName = $oGroups->getGroupResourceName($strGroupName);
 
        }
 
        if ($strResourceName !== false && !empty($strResourceName)) {
 
            $result = $oGroups->deleteGroup($strResourceName);
 
            $strLocation = './ContactList.php';
 
        }
 
        break;
 
}
 
if ($result !== false && !empty($strLocation)) {
 
    header('Location: ' . $strLocation);
 
} else {
 
    displayApiError(
 
        $strAction,
 
        $strResourceName,
 
        $oClient->getLastResponseCode(),
 
        $oClient->getLastError(),
 
        $oClient->getLastStatus()
 
    );
 
}
 
 
 |