Skip to content

Commit 6f8a723

Browse files
authored
Merge pull request #316 from maxixcom/features
Help Center: Management Permission Groups / User Segments
2 parents eafb323 + 3fa1d73 commit 6f8a723

File tree

8 files changed

+607
-0
lines changed

8 files changed

+607
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ Here is the status of the various API components:
7676
* [Help Center Articles](https://developer.zendesk.com/rest_api/docs/help_center/articles)
7777
* [Help Center Translations](https://developer.zendesk.com/rest_api/docs/help_center/translations) - Partial (List Translations, Update Translation)
7878
* [Help Center Subscriptions](https://developer.zendesk.com/rest_api/docs/help_center/subscriptions)
79+
* [Help Center Management Permission Groups](https://developer.zendesk.com/rest_api/docs/help_center/permission_groups)
80+
* [Help Center User Segments](https://developer.zendesk.com/rest_api/docs/help_center/user_segments)
7981
* [Topic Votes](http://developer.zendesk.com/documentation/rest_api/topic_votes.html)
8082
* [Account Settings](http://developer.zendesk.com/documentation/rest_api/account_settings.html)
8183
* [Activity Stream](http://developer.zendesk.com/documentation/rest_api/activity_stream.html)

src/main/java/org/zendesk/client/v2/Zendesk.java

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
import org.zendesk.client.v2.model.hc.Section;
6262
import org.zendesk.client.v2.model.hc.Subscription;
6363
import org.zendesk.client.v2.model.hc.Translation;
64+
import org.zendesk.client.v2.model.hc.PermissionGroup;
65+
import org.zendesk.client.v2.model.hc.UserSegment;
6466
import org.zendesk.client.v2.model.schedules.Holiday;
6567
import org.zendesk.client.v2.model.schedules.Schedule;
6668
import org.zendesk.client.v2.model.targets.BasecampTarget;
@@ -1735,6 +1737,162 @@ public void deleteDynamicContentItemVariant(Long itemId, DynamicContentItemVaria
17351737
//////////////////////////////////////////////////////////////////////
17361738
// Action methods for Help Center
17371739
//////////////////////////////////////////////////////////////////////
1740+
/**
1741+
* Get all permission groups
1742+
*
1743+
* @return List of Permission Groups
1744+
*/
1745+
public Iterable<PermissionGroup> getPermissionGroups() {
1746+
return new PagedIterable<>(cnst("/guide/permission_groups.json"),
1747+
handleList(PermissionGroup.class, "permission_groups"));
1748+
}
1749+
/**
1750+
* Get permission group by id
1751+
*
1752+
* @param id
1753+
*/
1754+
public PermissionGroup getPermissionGroup(long id) {
1755+
return complete(submit(req("GET", tmpl("/guide/permission_groups/{id}.json").set("id", id)),
1756+
handle(PermissionGroup.class, "permission_group")));
1757+
}
1758+
/**
1759+
* Create permission group
1760+
*
1761+
* @param permissionGroup
1762+
*/
1763+
public PermissionGroup createPermissionGroup(PermissionGroup permissionGroup) {
1764+
return complete(submit(req("POST", tmpl("/guide/permission_groups.json"),
1765+
JSON, json(Collections.singletonMap("permission_group", permissionGroup))), handle(PermissionGroup.class, "permission_group")));
1766+
}
1767+
/**
1768+
* Update permission group
1769+
*
1770+
* @param permissionGroup
1771+
*/
1772+
public PermissionGroup updatePermissionGroup(PermissionGroup permissionGroup) {
1773+
checkHasId(permissionGroup);
1774+
return complete(submit(req("PUT", tmpl("/guide/permission_groups/{id}.json").set("id", permissionGroup.getId()),
1775+
JSON, json(Collections.singletonMap("permission_group", permissionGroup))), handle(PermissionGroup.class, "permission_group")));
1776+
}
1777+
/**
1778+
* Delete permission group
1779+
*
1780+
* @param permissionGroup
1781+
*/
1782+
public void deletePermissionGroup(PermissionGroup permissionGroup) {
1783+
checkHasId(permissionGroup);
1784+
deletePermissionGroup(permissionGroup.getId());
1785+
}
1786+
/**
1787+
* Delete permission group
1788+
*
1789+
* @param id
1790+
*/
1791+
public void deletePermissionGroup(long id) {
1792+
complete(submit(req("DELETE", tmpl("/guide/permission_groups/{id}.json").set("id", id)),
1793+
handleStatus()));
1794+
}
1795+
/**
1796+
* Get user segments
1797+
*
1798+
* @return List of User Segments
1799+
*/
1800+
public Iterable<UserSegment> getUserSegments() {
1801+
return new PagedIterable<>(cnst("/help_center/user_segments.json"),
1802+
handleList(UserSegment.class, "user_segments"));
1803+
}
1804+
/**
1805+
* Returns the list of user segments that a particular user belongs to
1806+
*
1807+
* @return List of User Segments
1808+
*/
1809+
public Iterable<UserSegment> getUserSegments(long id) {
1810+
return new PagedIterable<>(tmpl("/help_center/users/{id}/user_segments.json").set("id", id),
1811+
handleList(UserSegment.class, "user_segments"));
1812+
}
1813+
/**
1814+
* Request only user segments applicable on the account's current Guide plan
1815+
*
1816+
* @return List of User Segments
1817+
*/
1818+
public Iterable<UserSegment> getUserSegmentsApplicable() {
1819+
return new PagedIterable<>(cnst("/help_center/user_segments/applicable.json"),
1820+
handleList(UserSegment.class, "user_segments"));
1821+
}
1822+
/**
1823+
* Get user segment by id
1824+
*
1825+
* @param id
1826+
*/
1827+
public UserSegment getUserSegment(long id) {
1828+
return complete(submit(req("GET", tmpl("/help_center/user_segments/{id}.json").set("id", id)),
1829+
handle(UserSegment.class, "user_segment")));
1830+
}
1831+
1832+
/**
1833+
* List Sections using a User Segment
1834+
*
1835+
* @param userSegment
1836+
* @return List of Sections
1837+
*/
1838+
public Iterable<Section> getSections(UserSegment userSegment) {
1839+
checkHasId(userSegment);
1840+
return new PagedIterable<>(
1841+
tmpl("/help_center/user_segments/{id}/sections.json").set("id", userSegment.getId()),
1842+
handleList(Section.class, "sections"));
1843+
}
1844+
1845+
/**
1846+
* List Topics using a User Segment
1847+
*
1848+
* @param userSegment
1849+
* @return List of Topics
1850+
*/
1851+
public Iterable<Topic> getTopics(UserSegment userSegment) {
1852+
checkHasId(userSegment);
1853+
return new PagedIterable<>(
1854+
tmpl("/help_center/user_segments/{id}/topics.json").set("id", userSegment.getId()),
1855+
handleList(Topic.class, "topics"));
1856+
}
1857+
1858+
/**
1859+
* Create User Segment
1860+
*
1861+
* @param userSegment
1862+
*/
1863+
public UserSegment createUserSegment(UserSegment userSegment) {
1864+
return complete(submit(req("POST", tmpl("/help_center/user_segments.json"),
1865+
JSON, json(Collections.singletonMap("user_segment", userSegment))), handle(UserSegment.class, "user_segment")));
1866+
}
1867+
/**
1868+
* Update User Segment
1869+
*
1870+
* @param userSegment
1871+
*/
1872+
public UserSegment updateUserSegment(UserSegment userSegment) {
1873+
checkHasId(userSegment);
1874+
return complete(submit(req("PUT", tmpl("/help_center/user_segments/{id}.json").set("id", userSegment.getId()),
1875+
JSON, json(Collections.singletonMap("user_segment", userSegment))), handle(UserSegment.class, "user_segment")));
1876+
}
1877+
/**
1878+
* Delete User Segment
1879+
*
1880+
* @param userSegment
1881+
*/
1882+
public void deleteUserSegment(UserSegment userSegment) {
1883+
checkHasId(userSegment);
1884+
deleteUserSegment(userSegment.getId());
1885+
}
1886+
1887+
/**
1888+
* Delete User Segment
1889+
*
1890+
* @param id
1891+
*/
1892+
public void deleteUserSegment(long id) {
1893+
complete(submit(req("DELETE", tmpl("/help_center/user_segments/{id}.json").set("id", id)),
1894+
handleStatus()));
1895+
}
17381896

17391897
public List<String> getHelpCenterLocales() {
17401898
return complete(submit(
@@ -1787,6 +1945,17 @@ public Article createArticle(Article article) {
17871945
JSON, json(Collections.singletonMap("article", article))), handle(Article.class, "article")));
17881946
}
17891947

1948+
public Article createArticle(Article article, boolean notifySubscribers) {
1949+
checkHasSectionId(article);
1950+
1951+
Map map = new HashMap<String, Object>();
1952+
map.put("article", article);
1953+
map.put("notify_subscribers", notifySubscribers ? String.valueOf("true") : String.valueOf("false"));
1954+
1955+
return complete(submit(req("POST", tmpl("/help_center/sections/{id}/articles.json").set("id", article.getSectionId()),
1956+
JSON, json(Collections.unmodifiableMap(map))), handle(Article.class, "article")));
1957+
}
1958+
17901959
public Article updateArticle(Article article) {
17911960
checkHasId(article);
17921961
return complete(submit(req("PUT", tmpl("/help_center/articles/{id}.json").set("id", article.getId()),
@@ -2555,6 +2724,18 @@ private static void checkHasId(Holiday holiday) {
25552724
}
25562725
}
25572726

2727+
private static void checkHasId(PermissionGroup permissionGroup) {
2728+
if (permissionGroup.getId() == null) {
2729+
throw new IllegalArgumentException("PermissionGroup requires id");
2730+
}
2731+
}
2732+
2733+
private static void checkHasId(UserSegment userSegment) {
2734+
if (userSegment.getId() == null) {
2735+
throw new IllegalArgumentException("UserSegment requires id");
2736+
}
2737+
}
2738+
25582739
private static void checkHasToken(Attachment.Upload upload) {
25592740
if (upload.getToken() == null) {
25602741
throw new IllegalArgumentException("Upload requires token");
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package org.zendesk.client.v2.model.hc;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import org.zendesk.client.v2.model.SearchResultEntity;
6+
7+
import java.util.Date;
8+
import java.util.List;
9+
10+
/**
11+
* Management Permission Group
12+
* A management permission group defines which agents can create, update, archive, and publish articles.
13+
* https://developer.zendesk.com/rest_api/docs/help_center/permission_groups
14+
* @author Maxim Savenko ([email protected])
15+
*/
16+
public class PermissionGroup implements SearchResultEntity {
17+
/** Automatically assigned when the permission group is created */
18+
private Long id;
19+
/** Permission group name */
20+
private String name;
21+
/** The ids of user segments that have edit privileges */
22+
private List<Long> edit;
23+
/** The ids of user segments that have publish privileges */
24+
private List<Long> publish;
25+
/** When the permission group was created */
26+
@JsonProperty("created_at")
27+
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss Z")
28+
private Date createdAt;
29+
/** When the permission group was last updated */
30+
@JsonProperty("updated_at")
31+
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss Z")
32+
private Date updatedAt;
33+
/** Whether the permission group is built-in. Built-in permission groups cannot be modified */
34+
@JsonProperty("built_in")
35+
private Boolean builtIn;
36+
37+
public Long getId() {
38+
return id;
39+
}
40+
41+
public void setId(Long id) {
42+
this.id = id;
43+
}
44+
45+
public String getName() {
46+
return name;
47+
}
48+
49+
public void setName(String name) {
50+
this.name = name;
51+
}
52+
53+
public List<Long> getEdit() {
54+
return edit;
55+
}
56+
57+
public void setEdit(List<Long> edit) {
58+
this.edit = edit;
59+
}
60+
61+
public List<Long> getPublish() {
62+
return publish;
63+
}
64+
65+
public void setPublish(List<Long> publish) {
66+
this.publish = publish;
67+
}
68+
69+
public Date getCreatedAt() {
70+
return createdAt;
71+
}
72+
73+
public void setCreatedAt(Date createdAt) {
74+
this.createdAt = createdAt;
75+
}
76+
77+
public Date getUpdatedAt() {
78+
return updatedAt;
79+
}
80+
81+
public void setUpdatedAt(Date updatedAt) {
82+
this.updatedAt = updatedAt;
83+
}
84+
85+
public Boolean getBuiltIn() {
86+
return builtIn;
87+
}
88+
89+
public void setBuiltIn(Boolean builtIn) {
90+
this.builtIn = builtIn;
91+
}
92+
93+
@Override
94+
public String toString() {
95+
return "PermissionGroup{" +
96+
"id=" + id +
97+
", name='" + name + '\'' +
98+
", edit=" + edit +
99+
", publish=" + publish +
100+
", createdAt=" + createdAt +
101+
", updatedAt=" + updatedAt +
102+
", builtIn=" + builtIn +
103+
'}';
104+
}
105+
}

0 commit comments

Comments
 (0)