Skip to content

Commit eecd41c

Browse files
updated traits paging
1 parent 782ab0f commit eecd41c

File tree

8 files changed

+97
-64
lines changed

8 files changed

+97
-64
lines changed

changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ Fixed connect method authenticating, now accepts an optional $id defaults to log
4141
Added traits:
4242
* Drive
4343
* ToDo
44+
45+
## Version 1.2.2
46+
47+
Updated traits to support correct paging, each trait should return an array containing the total records (where available), top, skip and count keys.

images/applicationId.png

-36.9 KB
Binary file not shown.

images/create-name.png

-81 KB
Binary file not shown.

images/permissions.png

-120 KB
Binary file not shown.

images/platforms.png

-70.4 KB
Binary file not shown.

src/Api/Drive.php

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,53 @@
44

55
trait Drive {
66

7-
public function drive($limit = 25, $skip = 0, $messageQueryParams = [])
7+
public function drive($top = 25, $skip = 0, $params = [])
88
{
9-
$skip = request('next', $skip);
9+
if ($params == []) {
1010

11-
if ($messageQueryParams != []) {
12-
$messageQueryParams = [
13-
"\$skip" => $skip,
14-
"\$top" => $limit,
15-
"\$count" => "true",
16-
];
17-
}
11+
$top = request('top', $top);
12+
$skip = request('skip', $skip);
1813

19-
$files = self::get('me/drive/root/children'.http_build_query($messageQueryParams));
14+
$params = http_build_query([
15+
"\$top" => $top,
16+
"\$skip" => $skip,
17+
"\$count" => "true",
18+
]);
19+
} else {
20+
$params = http_build_query($params);
21+
}
2022

21-
$data = self::getPagination($files, $skip);
23+
24+
$files = self::get('me/drive/root/children'.$params);
25+
26+
$total = isset($files['@odata.count']) ? $files['@odata.count'] : 0;
27+
28+
if (isset($files['@odata.nextLink'])) {
29+
30+
$parts = parse_url($files['@odata.nextLink']);
31+
parse_str($parts['query'], $query);
32+
33+
$top = isset($query['$top']) ? $query['$top'] : 0;
34+
$skip = isset($query['$skip']) ? $query['$skip'] : 0;
35+
}
2236

2337
return [
2438
'files' => $files,
25-
'total' => $data['total'],
26-
'previous' => $data['previous'],
27-
'next' => $data['next'],
39+
'total' => $total,
40+
'top' => $top,
41+
'skip' => $skip
2842
];
2943
}
3044

3145
public function driveDownload($id)
3246
{
33-
$id = self::get("me/drive/items/$id");
47+
$id = self::get("me/drive/items/$id");
3448

3549
return redirect()->away($id['@microsoft.graph.downloadUrl']);
3650
}
3751

3852
public function driveDelete($id)
3953
{
40-
return self::delete("me/drive/items/$id");
54+
return self::delete("me/drive/items/$id");
4155
}
4256
}

src/Api/Emails.php

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44

55
trait Emails {
66

7-
public function emails($limit = 25, $skip = 0, $folderId = null)
7+
public function emails($top = 25, $skip = 0, $folderId = null, $params = [])
88
{
9-
$messageQueryParams = array (
10-
"\$skip" => $skip,
11-
"\$top" => $limit,
12-
"\$count" => "true",
13-
);
9+
if ($params == []) {
10+
11+
$top = request('top', $top);
12+
$skip = request('skip', $skip);
13+
14+
$params = http_build_query([
15+
"\$orderby" => "displayName",
16+
"\$top" => $top,
17+
"\$skip" => $skip,
18+
"\$count" => "true",
19+
]);
20+
} else {
21+
$params = http_build_query($params);
22+
}
1423

1524
if ($folderId == null) {
16-
$folder = 'Inbox';
25+
$folder = 'Inbox';
1726
} else {
18-
$folder = $folderId;
27+
$folder = $folderId;
1928
}
2029

2130
//get inbox from folders list
@@ -25,45 +34,38 @@ public function emails($limit = 25, $skip = 0, $folderId = null)
2534
$inbox = $folder['value'][0]['id'];
2635

2736
//get messages from inbox folder
28-
$emails = self::get("me/mailFolders/$inbox/messages?".http_build_query($messageQueryParams));
37+
$emails = self::get("me/mailFolders/$inbox/messages?".$params);
2938

30-
$total = $emails['@odata.count'];
31-
$previous = null;
32-
$next = null;
33-
if (isset($emails['@odata.nextLink'])) {
34-
$first = explode('$skip=', $emails['@odata.nextLink']);
39+
$total = isset($emails['@odata.count']) ? $emails['@odata.count'] : 0;
3540

36-
$skip = explode('&', $first[1]);
37-
$previous = $skip[0]-$limit;
38-
$next = $skip[0];
41+
if (isset($emails['@odata.nextLink'])) {
3942

40-
if ($previous < 0) {
41-
$previous = 0;
42-
}
43+
$parts = parse_url($emails['@odata.nextLink']);
44+
parse_str($parts['query'], $query);
4345

44-
if ($next == $total) {
45-
$next = null;
46-
}
47-
}
46+
$top = isset($query['$top']) ? $query['$top'] : 0;
47+
$skip = isset($query['$skip']) ? $query['$skip'] : 0;
48+
}
4849

4950
return [
5051
'emails' => $emails,
5152
'total' => $total,
52-
'previous' => $previous,
53-
'next' => $next
53+
'top' => $top,
54+
'skip' => $skip
5455
];
56+
5557
}
5658

5759
public function emailAttachments($email_id)
5860
{
59-
return self::get("me/messages/".$email_id."/attachments");
61+
return self::get("me/messages/".$email_id."/attachments");
6062
}
6163

6264
public function emailInlineAttachments($email)
6365
{
64-
$attachments = self::emailAttachments($email['id']);
66+
$attachments = self::emailAttachments($email['id']);
6567

66-
//replace every case of <img='cid:' with the base64 image
68+
//replace every case of <img='cid:' with the base64 image
6769
$email['body']['content'] = preg_replace_callback(
6870
'~cid.*?"~',
6971
function($m) use($attachments) {

src/Api/ToDo.php

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,61 @@
44

55
trait ToDo {
66

7-
public function tasks($limit = 25, $skip = 0, $messageQueryParams = [])
7+
public function tasks($top = 25, $skip = 0, $params = [])
88
{
9-
$skip = request('next', $skip);
9+
if ($params == []) {
1010

11-
if ($messageQueryParams != []) {
12-
$messageQueryParams = [
13-
"\filter" => "status eq 'notStarted'",
14-
"\$skip" => $skip,
15-
"\$top" => $limit,
16-
"\$count" => "true",
17-
];
18-
}
11+
$top = request('top', $top);
12+
$skip = request('skip', $skip);
1913

20-
$tasks = self::get('me/messages?'.http_build_query($messageQueryParams));
14+
$params = http_build_query([
15+
"\filter" => "status eq 'notStarted'",
16+
"\$top" => $top,
17+
"\$skip" => $skip,
18+
"\$count" => "true",
19+
]);
20+
} else {
21+
$params = http_build_query($params);
22+
}
2123

22-
$data = self::getPagination($tasks, $skip);
24+
$tasks = self::get('me/messages?'.$params);
25+
26+
$total = isset($tasks['@odata.count']) ? $tasks['@odata.count'] : 0;
27+
28+
if (isset($tasks['@odata.nextLink'])) {
29+
30+
$parts = parse_url($tasks['@odata.nextLink']);
31+
parse_str($parts['query'], $query);
32+
33+
$top = isset($query['$top']) ? $query['$top'] : 0;
34+
$skip = isset($query['$skip']) ? $query['$skip'] : 0;
35+
}
2336

2437
return [
2538
'tasks' => $tasks,
26-
'total' => $data['total'],
27-
'previous' => $data['previous'],
28-
'next' => $data['next'],
39+
'total' => $total,
40+
'top' => $top,
41+
'skip' => $skip
2942
];
3043
}
3144

3245
public function taskCreate($data)
3346
{
34-
return self::post("me/outlook/tasks", $data);
47+
return self::post("me/outlook/tasks", $data);
3548
}
3649

3750
public function taskGet($id)
3851
{
39-
return self::get("me/outlook/tasks/$id");
52+
return self::get("me/outlook/tasks/$id");
4053
}
4154

4255
public function taskUpdate($id, $data)
4356
{
44-
return self::patch("me/outlook/tasks/$id", $data);
57+
return self::patch("me/outlook/tasks/$id", $data);
4558
}
4659

4760
public function taskDelete($id)
4861
{
49-
return self::delete("me/outlook/tasks/$id");
62+
return self::delete("me/outlook/tasks/$id");
5063
}
5164
}

0 commit comments

Comments
 (0)