Collections

Personas in this Story: Default, Client.

For the purpose of this test, we have created a project with 10 notes, some of the grouped, and some standing alone, some of the visible to client, and some hidden. Owner sees all top level notes, ordered as they were created (newest first):

Response: HTTP 200, application/json (Hide)
GET /projects/1/notes

Response:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
[
    {
        "id": 8,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/8",
        "name": "Public with Subnotes",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Public with Subnotes Body",
        "body_formatted": "Public with Subnotes Body",
        "body_plain_text": "Public with Subnotes Body",
        "created_on": 1430164162,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 2,
        "is_in_collection": true,
        "position": 0,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 7,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/7",
        "name": "Private Note",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": true,
        "body": "Private Note Body",
        "body_formatted": "Private Note Body",
        "body_plain_text": "Private Note Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 0,
        "is_in_collection": false,
        "position": 1,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 2,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/2",
        "name": "Private With Subnotes",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": true,
        "body": "Private With Subnotes Body",
        "body_formatted": "Private With Subnotes Body",
        "body_plain_text": "Private With Subnotes Body",
        "created_on": 1430164160,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 4,
        "is_in_collection": true,
        "position": 2,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 1,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/1",
        "name": "Public Note",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Public Note Body",
        "body_formatted": "Public Note Body",
        "body_plain_text": "Public Note Body",
        "created_on": 1430164160,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 0,
        "is_in_collection": false,
        "position": 3,
        "contributor_ids": [
            1
        ]
    }
]

On the other hand, client sees only public notes:

Response: HTTP 200, application/json (Hide)
GET /projects/1/notes (as Client)

Response:

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
81
82
83
84
85
86
[
    {
        "id": 8,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/8",
        "name": "Public with Subnotes",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Public with Subnotes Body",
        "body_formatted": "Public with Subnotes Body",
        "body_plain_text": "Public with Subnotes Body",
        "created_on": 1430164162,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 2,
        "is_in_collection": true,
        "position": 0,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 4,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/4",
        "name": "Private Public Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Private Public Subpage Body",
        "body_formatted": "Private Public Subpage Body",
        "body_plain_text": "Private Public Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 2,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 1,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/1",
        "name": "Public Note",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Public Note Body",
        "body_formatted": "Public Note Body",
        "body_plain_text": "Public Note Body",
        "created_on": 1430164160,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 0,
        "is_in_collection": false,
        "position": 3,
        "contributor_ids": [
            1
        ]
    }
]

Notice that public note "bubbles-up" to the top level if it is under a private note. This is because ActiveCollab reveals all collections that have public content, while still making private part hidden.

If we try to get collection data of that public-under-private note, system will return only information about public notes in a collection:

Response: HTTP 200, application/json (Hide)
GET /projects/1/notes/4/collection (as Client)

Response:

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
[
    {
        "id": 4,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/4",
        "name": "Private Public Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Private Public Subpage Body",
        "body_formatted": "Private Public Subpage Body",
        "body_plain_text": "Private Public Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 2,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 5,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/5",
        "name": "Second Private Public Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Second Private Public Subpage Body",
        "body_formatted": "Second Private Public Subpage Body",
        "body_plain_text": "Second Private Public Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 3,
        "contributor_ids": [
            1
        ]
    }
]

Trying to access collection info via private page will result in Page Not Found HTTP error:

Response: HTTP 404, text/html
GET /projects/1/notes/3/collection (as Client)

Members will see all notes in a collection, of course:

Response: HTTP 200, application/json (Hide)
GET /projects/1/notes/4/collection

Response:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
[
    {
        "id": 2,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/2",
        "name": "Private With Subnotes",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": true,
        "body": "Private With Subnotes Body",
        "body_formatted": "Private With Subnotes Body",
        "body_plain_text": "Private With Subnotes Body",
        "created_on": 1430164160,
        "created_by_id": 1,
        "updated_on": 1430164162,
        "updated_by_id": 1,
        "note_id": 0,
        "is_subnote": false,
        "subnotes_count": 4,
        "is_in_collection": true,
        "position": 2,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 3,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/3",
        "name": "Private Private Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": true,
        "body": "Private Private Subpage Body",
        "body_formatted": "Private Private Subpage Body",
        "body_plain_text": "Private Private Subpage Body",
        "created_on": 1430164160,
        "created_by_id": 1,
        "updated_on": 1430164160,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 1,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 4,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/4",
        "name": "Private Public Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Private Public Subpage Body",
        "body_formatted": "Private Public Subpage Body",
        "body_plain_text": "Private Public Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 2,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 5,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/5",
        "name": "Second Private Public Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "Second Private Public Subpage Body",
        "body_formatted": "Second Private Public Subpage Body",
        "body_plain_text": "Second Private Public Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 3,
        "contributor_ids": [
            1
        ]
    },
    {
        "id": 6,
        "class": "Note",
        "url_path": "\/projects\/1\/notes\/6",
        "name": "Second Private Private Subpage",
        "comments_count": 0,
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": true,
        "body": "Second Private Private Subpage Body",
        "body_formatted": "Second Private Private Subpage Body",
        "body_plain_text": "Second Private Private Subpage Body",
        "created_on": 1430164161,
        "created_by_id": 1,
        "updated_on": 1430164161,
        "updated_by_id": 1,
        "note_id": 2,
        "is_subnote": true,
        "subnotes_count": 0,
        "is_in_collection": true,
        "position": 4,
        "contributor_ids": [
            1
        ]
    }
]