1+ <?php
2+
3+ /**
4+ *
5+ * Description:
6+ * - List all groups containing Planner plans
7+ * - Identify plans accessible to the specific group
8+ * - Extract all tasks from qualifying plans
9+ *
10+ * Permissions:
11+ * Accessing group plans requires both Group.Read.All and Tasks.Read.All permissions.
12+ */
13+
14+
15+ use Office365 \GraphServiceClient ;
16+ use Office365 \Planner \Plans \PlannerPlan ;
17+ use Office365 \Planner \Tasks \PlannerTask ;
18+
19+ require_once '../vendor/autoload.php ' ;
20+
21+ $ settings = include ('../../tests/Settings.php ' );
22+ $ client = GraphServiceClient::withClientSecret ($ settings ['TenantName ' ], $ settings ['ClientId ' ], $ settings ['ClientSecret ' ]);
23+
24+
25+ // 1. Get the specific group
26+ $ groups = $ client ->getGroups ()
27+ ->filter ("displayName eq 'PlanGroup' " )
28+ ->get ()
29+ ->executeQuery ();
30+
31+ // 2. Get all plans in this group
32+ $ plans = $ groups [0 ]->getPlanner ()
33+ ->getPlans ()
34+ ->get ()
35+ ->executeQuery ();
36+
37+ $ allPlansWithTasks = [];
38+
39+ /** @var PlannerPlan $plan */
40+ foreach ($ plans as $ plan ) {
41+ try {
42+ // 3. Get all tasks for each plan
43+ $ tasks = $ plan ->getTasks ()
44+ ->get ()
45+ ->executeQuery ();
46+
47+ $ planData = [
48+ 'plan_id ' => $ plan ->getId (),
49+ 'plan_title ' => $ plan ->getTitle (),
50+ //'plan_created' => $plan->getOwner()->getCreatedDateTime(),
51+ 'tasks ' => []
52+ ];
53+
54+ /** @var PlannerTask $task */
55+ foreach ($ tasks as $ task ) {
56+ $ planData ['tasks ' ][] = [
57+ 'task_id ' => $ task ->getId (),
58+ 'task_title ' => $ task ->getTitle (),
59+ 'assignments ' => $ task ->getAssignments (),
60+ 'created_date ' => $ task ->getCreatedDateTime (),
61+ 'completed_date ' => $ task ->getCompletedDateTime (),
62+ ];
63+ }
64+
65+ $ allPlansWithTasks [] = $ planData ;
66+
67+ } catch (\Exception $ e ) {
68+ echo "Error processing plan {$ plan ->getTitle ()}: {$ e ->getMessage ()}\n" ;
69+ continue ;
70+ }
71+ }
72+
73+ // Output the results
74+ echo json_encode ($ allPlansWithTasks , JSON_PRETTY_PRINT );
0 commit comments