Skip to content

Commit 790b7c2

Browse files
committed
Merge pull request #246 from zendesk/jramos/MI-421/retrieve-articles
Retrieve articles
2 parents 3c592f5 + 747f0ca commit 790b7c2

File tree

8 files changed

+251
-90
lines changed

8 files changed

+251
-90
lines changed

src/Zendesk/API/Resources/HelpCenter.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Zendesk\API\HttpClient;
66
use Zendesk\API\Resources\HelpCenter\Categories;
7+
use Zendesk\API\Resources\HelpCenter\Articles;
78
use Zendesk\API\Traits\Utility\ChainedParametersTrait;
89
use Zendesk\API\Traits\Utility\InstantiatorTrait;
910

@@ -36,7 +37,8 @@ public function __construct(HttpClient $client)
3637
public static function getValidSubResources()
3738
{
3839
return [
39-
'categories' => Categories::class
40+
'categories' => Categories::class,
41+
'articles' => Articles::class,
4042
];
4143
}
4244
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Zendesk\API\Resources\HelpCenter;
4+
5+
use Zendesk\API\Traits\Resource\Defaults;
6+
use Zendesk\API\Traits\Resource\Locales;
7+
8+
/**
9+
* Class Articles
10+
* https://developer.zendesk.com/rest_api/docs/help_center/articles
11+
*/
12+
class Articles extends ResourceAbstract
13+
{
14+
use Defaults;
15+
use Locales;
16+
17+
/**
18+
* @{inheritdoc}
19+
*/
20+
protected $objectName = 'article';
21+
22+
/**
23+
* @{inheritdoc}
24+
*/
25+
protected function setupRoutes()
26+
{
27+
parent::setUpRoutes();
28+
$this->setRoutes([
29+
'bulkAttach' => "$this->resourceName/{articleId}/bulk_attachments.json",
30+
'updateSourceLocale' => "$this->resourceName/{articleId}/source_locale.json",
31+
]);
32+
}
33+
34+
/**
35+
* Bulk upload attachments to a specified article
36+
*
37+
* @param $articleId The article to update
38+
* @param $params An array of attachment ids
39+
* @throws \Exception
40+
*/
41+
public function bulkAttach($articleId, array $params, $routeKey = __FUNCTION__)
42+
{
43+
try {
44+
$route = $this->getRoute($routeKey, ['articleId' => $articleId]);
45+
} catch (RouteException $e) {
46+
if (! isset($this->resourceName)) {
47+
$this->resourceName = $this->getResourceNameFromClass();
48+
}
49+
50+
$route = $this->resourceName . '.json';
51+
$this->setRoute(__FUNCTION__, $route);
52+
}
53+
return $this->client->post(
54+
$route,
55+
['attachement_ids' => $params]
56+
);
57+
}
58+
}

src/Zendesk/API/Resources/HelpCenter/Categories.php

Lines changed: 2 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Zendesk\API\Resources\HelpCenter;
44

55
use Zendesk\API\Traits\Resource\Defaults;
6+
use Zendesk\API\Traits\Resource\Locales;
67

78
/**
89
* Class Categories
@@ -11,88 +12,18 @@
1112
class Categories extends ResourceAbstract
1213
{
1314
use Defaults;
15+
use Locales;
1416

1517
/**
1618
* {@inheritdoc}
1719
*/
1820
protected $objectName = 'category';
1921

20-
/**
21-
* @var locale
22-
*/
23-
private $locale;
24-
2522
/**
2623
* @inheritdoc
2724
*/
2825
protected function setUpRoutes()
2926
{
3027
$this->setRoute('updateSourceLocale', "{$this->resourceName}/{categoryId}/source_locale.json");
3128
}
32-
33-
/**
34-
* @inheritdoc
35-
*/
36-
public function getRoute($name, array $params = [])
37-
{
38-
$routesWithLocale = ['findAll', 'find', 'create', 'update'];
39-
40-
$locale = $this->getLocale();
41-
if (in_array($name, $routesWithLocale) && isset($locale)) {
42-
$originalResourceName = $this->resourceName;
43-
$this->resourceName = "help_center/{$locale}/categories";
44-
45-
$route = parent::getRoute($name, $params);
46-
47-
// Reset resourceName so it doesn't affect succeeding calls
48-
$this->resourceName = $originalResourceName;
49-
50-
return $route;
51-
} else {
52-
return parent::getRoute($name, $params);
53-
}
54-
}
55-
56-
/**
57-
* @return string
58-
*/
59-
public function getLocale()
60-
{
61-
return $this->locale;
62-
}
63-
64-
/**
65-
* @param string $locale
66-
*
67-
* @return Categories
68-
*/
69-
public function setLocale($locale)
70-
{
71-
if (is_string($locale)) {
72-
$this->locale = $locale;
73-
}
74-
75-
return $this;
76-
}
77-
78-
/**
79-
* Updates a categories source_locale property
80-
*
81-
* @param $categoryId The category to update
82-
* @param $sourceLocale The new source_locale
83-
*
84-
* @return array
85-
* @throws \Zendesk\API\Exceptions\RouteException
86-
*/
87-
public function updateSourceLocale($categoryId, $sourceLocale)
88-
{
89-
if (empty($categoryId)) {
90-
$categoryId = $this->getChainedParameter(get_class($this));
91-
}
92-
93-
return $this->client->put(
94-
$this->getRoute(__FUNCTION__, ['categoryId' => $categoryId]),
95-
['category_locale' => $sourceLocale]
96-
);
97-
}
9829
}

src/Zendesk/API/Resources/HelpCenter/ResourceAbstract.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,17 @@
22

33
namespace Zendesk\API\Resources\HelpCenter;
44

5+
use Zendesk\API\Traits\Resource\ResourceName;
6+
57
/**
68
* Abstract class for HelpCenter resources
79
*/
810
abstract class ResourceAbstract extends \Zendesk\API\Resources\ResourceAbstract
911
{
12+
use ResourceName;
1013

1114
/**
12-
* Appends the help_center/ prefix to resource names
13-
* @return string
14-
*/
15-
protected function getResourceNameFromClass()
16-
{
17-
$resourceName = parent::getResourceNameFromClass();
18-
19-
return 'help_center/' . $resourceName;
20-
}
15+
* @var $prefix
16+
**/
17+
protected $prefix = 'help_center/';
2118
}

src/Zendesk/API/Resources/Voice/ResourceAbstract.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22

33
namespace Zendesk\API\Resources\Voice;
44

5+
use Zendesk\API\Traits\Resource\ResourceName;
6+
57
/**
68
* Abstract class for Voice resources
79
*/
810
abstract class ResourceAbstract extends \Zendesk\API\Resources\ResourceAbstract
911
{
10-
/**
11-
* Appends the channels/voice/ prefix to resource names
12-
* @return string
13-
*/
14-
protected function getResourceNameFromClass()
15-
{
16-
$resourceName = parent::getResourceNameFromClass();
12+
use ResourceName;
1713

18-
return 'channels/voice/' . $resourceName;
19-
}
14+
/**
15+
* @var $prefix
16+
**/
17+
protected $prefix = 'channels/voice/';
2018
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
namespace Zendesk\API\Traits\Resource;
4+
5+
/**
6+
* Trait Locale
7+
*/
8+
trait Locales
9+
{
10+
11+
/**
12+
* Used for setting up the locale
13+
* @var locale
14+
*/
15+
protected $locale;
16+
17+
/**
18+
* @return string
19+
*/
20+
public function getLocale()
21+
{
22+
return $this->locale;
23+
}
24+
25+
/**
26+
* @param string $locale
27+
*/
28+
public function setLocale($locale)
29+
{
30+
if (is_string($locale)) {
31+
$this->locale = $locale;
32+
}
33+
34+
return $this;
35+
}
36+
37+
/**
38+
* Generate a route depending on a localization set
39+
* @param string $name
40+
* @param array $params
41+
*/
42+
public function getRoute($name, array $params = [])
43+
{
44+
$routesWithLocale = ['findAll', 'find', 'create', 'update'];
45+
46+
$locale = $this->getLocale();
47+
$resourceName = parent::getResourceNameFromClass();
48+
49+
if (in_array($name, $routesWithLocale) && isset($locale)) {
50+
$originalResourceName = $this->resourceName;
51+
$temp = explode('/', $resourceName);
52+
$className = $temp[count($temp) - 1];
53+
$this->resourceName = "help_center/$locale/" . $className;
54+
55+
$route = parent::getRoute($name, $params);
56+
57+
// Reset resourceName so it doesn't affect succeeding calls
58+
$this->resourceName = $originalResourceName;
59+
60+
return $route;
61+
} else {
62+
return parent::getRoute($name, $params);
63+
}
64+
}
65+
66+
/**
67+
* Updates a resource's source_locale property
68+
*
69+
* @param $categoryId The category to update
70+
* @param $sourceLocale The new source_locale
71+
*
72+
* @return array
73+
* @throws \Zendesk\API\Exceptions\RouteException
74+
*/
75+
public function updateSourceLocale($categoryId, $sourceLocale)
76+
{
77+
if (empty($categoryId)) {
78+
$categoryId = $this->getChainedParameter(get_class($this));
79+
}
80+
81+
return $this->client->put(
82+
$this->getRoute(__FUNCTION__, ["{$this->objectName}Id" => $categoryId]),
83+
["{$this->objectName}_locale" => $sourceLocale]
84+
);
85+
}
86+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Zendesk\API\Traits\Resource;
4+
5+
/**
6+
* Trait ResourceName
7+
**/
8+
9+
trait ResourceName
10+
{
11+
/**
12+
* Appends the prefix to resource names
13+
* @return string
14+
*/
15+
protected function getResourceNameFromClass()
16+
{
17+
$resourceName = parent::getResourceNameFromClass();
18+
19+
return $this->prefix . $resourceName;
20+
}
21+
}

0 commit comments

Comments
 (0)