1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
<?php
require_once __DIR__ . '/vendor/autoload.php';
use League\OAuth2\Client\Provider\GenericProvider;
use Microsoft\Kiota\Authentication\Oauth\OnBehalfOfContext;
use Microsoft\Kiota\Abstractions\ApiException;
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Models\TodoTask;
use Microsoft\Graph\Generated\Models\DateTimeTimeZone;
use Microsoft\Graph\Generated\Models\Importance;
use Microsoft\Graph\Generated\Models\ItemBody;
use Microsoft\Graph\Generated\Models\BodyType;
session_start();
session_regenerate_id();
$tenantId = 'common';
$clientId = '{clientId}';
$clientSecret = '{clientSecretId}';
$redirectUri = 'http://localhost/MS-Graph/test-event.php';
$scopes = ['Tasks.ReadWrite', 'User.Read', 'offline_access'];
$oauthClient = new GenericProvider([
'clientId' => $clientId,
'clientSecret' => $clientSecret,
'redirectUri' => $redirectUri,
'urlAuthorize' => "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/authorize",
'urlAccessToken' => "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token",
'urlResourceOwnerDetails' => '',
'scopes' => $scopes,
]);
if (!isset($_GET['code'])) {
$authorizationUrl = $oauthClient->getAuthorizationUrl();
header('Location: ' . $authorizationUrl);
exit;
}
echo "<pre>";
$authCode = $_GET['code'];
$accessToken = $oauthClient->getAccessToken('authorization_code', [
'code' => $authCode
]);
$tokenAccess = $accessToken->getToken();
echo 'Access Token : ' . $tokenAccess . "<br>";
echo 'Refresh Token : ' . $accessToken->getRefreshToken() . "<br>";
echo 'Date d\'expiration : ' . date('d/m/Y H:i:s', $accessToken->getExpires()) . "<br>";
echo 'Déjà expiré ? ' . ($accessToken->hasExpired() ? 'Oui' : 'Non') . "<br>";
$oboContext = new OnBehalfOfContext(
$tenantId,
$clientId,
$clientSecret,
$tokenAccess,
);
$graphClient = new GraphServiceClient($oboContext, $scopes);
try {
$taskLists = $graphClient->me()->todo()->lists()->get()->wait()->getValue();
foreach ($taskLists as $taskList) {
echo 'Task List ID: ' . $taskList->getId() . ' - Title: ' . $taskList->getDisplayName() . PHP_EOL;
}
$task = new TodoTask();
$task->setTitle("Nouvelle tâche OnBehalfOf");
$dueDateTime = new DateTimeTimeZone();
$dueDateTime->setDateTime('2024-10-25Z');
$dueDateTime->setTimeZone('Europe/Paris');
$task->setDueDateTime($dueDateTime);
$task->setImportance(new Importance('normal'));
$task->setIsReminderOn(true);
$reminderDateTime = new DateTimeTimeZone();
$reminderDateTime->setDateTime('2024-10-25T13:00:00Z');
$reminderDateTime->setTimeZone('Europe/Paris');
$task->setReminderDateTime($reminderDateTime);
$body = new ItemBody();
$body->setContent('Ceci est une tâche créée avec le flux OnBehalfOf');
$body->setContentType(new BodyType('text'));
$task->setBody($body);
$graphClient->me()->todo()->lists()->byTodoTaskListId($taskLists[0]->getId())->tasks()->post($task)->wait();
echo "Tâche créée avec succès.";
} catch (ApiException $e) {
echo "Echec de la création de la tâche : ".$ex->getError()->getMessage();
}
?> |
Partager