Completed
Push — master ( 276fbe...eb73da )
by Nazar
05:10
created

Controller::index_get()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 20
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 5
eloc 15
c 3
b 0
f 0
nc 5
nop 1
dl 0
loc 20
rs 8.8571
1
<?php
2
/**
3
 * @package   Comments
4
 * @category  modules
5
 * @author    Nazar Mokrynskyi <[email protected]>
6
 * @copyright Copyright (c) 2011-2016, Nazar Mokrynskyi
7
 * @license   MIT License, see license.txt
8
 */
9
namespace cs\modules\Comments\api;
10
use
11
	cs\Event,
12
	cs\ExitException,
13
	cs\Language,
14
	cs\User,
15
	cs\modules\Comments\Comments;
16
17
/**
18
 * Provides next events:
19
 *  api/Comments/add
20
 *  [
21
 *   'item'   => item    //Item id
22
 *   'module' => module  //Module
23
 *   'allow'  => &$allow //Whether allow or not
24
 *  ]
25
 *
26
 *  api/Comments/edit
27
 *  [
28
 *   'id'     => id      //Comment id
29
 *   'user'   => user    //User id
30
 *   'item'   => item_id //Item id
31
 *   'module' => module  //Module
32
 *   'allow'  => &$allow //Whether allow or not
33
 *  ]
34
 *
35
 *  api/Comments/delete
36
 *  [
37
 *   'id'     => id      //Comment id
38
 *   'user'   => user    //User id
39
 *   'item'   => item_id //Item id
40
 *   'module' => module  //Module
41
 *   'allow'  => &$allow //Whether allow or not
42
 *  ]
43
 */
44
class Controller {
45
	/**
46
	 * @param \cs\Request $Request
47
	 *
48
	 * @return array|array[]|int
1 ignored issue
show
Documentation introduced by
Should the return type not be false|integer|array|double|string? Also, consider making the array more specific, something like array<String>, or String[].

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

If the return type contains the type array, this check recommends the use of a more specific type like String[] or array<String>.

Loading history...
49
	 *
50
	 * @throws ExitException
51
	 */
52
	static function index_get ($Request) {
53
		$query    = $Request->query('module', 'item');
54
		$id       = $Request->route_ids(0);
55
		$Comments = Comments::instance();
56
		if ($query) {
57
			if ($Request->route_path[0] == 'count') {
58
				return $Comments->get_for_module_item_count($query['module'], $query['item']);
59
			}
60
			return $Comments->get_extended(
61
				$Comments->get_for_module_item($query['module'], $query['item'])
62
			);
63
		} elseif ($id) {
64
			$comment = $Comments->get_extended($id);
65
			if (!$comment) {
66
				throw new ExitException(404);
67
			}
68
			return $comment;
69
		}
70
		throw new ExitException(400);
71
	}
72
	/**
73
	 * @param \cs\Request  $Request
74
	 * @param \cs\Response $Response
75
	 *
76
	 * @throws ExitException
77
	 */
78
	static function index_post ($Request, $Response) {
79
		if (!User::instance()->user()) {
80
			throw new ExitException(403);
81
		}
82
		$data = $Request->data('item', 'module', 'text', 'parent');
83
		if (!$data) {
84
			throw new ExitException(400);
85
		}
86
		$L = Language::prefix('comments_');
87
		if (!strip_tags($data['text'])) {
88
			throw new ExitException($L->comment_cant_be_empty, 400);
89
		}
90
		$allow = false;
91
		Event::instance()->fire(
92
			'api/Comments/add',
93
			[
94
				'item'   => $data['item'],
95
				'module' => $data['module'],
96
				'allow'  => &$allow
97
			]
98
		);
99
		if (!$allow) {
100
			throw new ExitException($L->comment_sending_server_error, 500);
101
		}
102
		$Comments = Comments::instance();
103
		$id       = $Comments->add($data['item'], $data['module'], $data['text'], $data['parent']);
104
		if (!$id) {
105
			throw new ExitException($L->comment_sending_server_error, 500);
106
		}
107
		$Response->code = 201;
108
	}
109
	/**
110
	 * @param \cs\Request $Request
111
	 *
112
	 * @throws ExitException
113
	 */
114
	static function index_put ($Request) {
115
		if (!User::instance()->user()) {
116
			throw new ExitException(403);
117
		}
118
		$id = $Request->route(0);
119
		if (!$id) {
120
			throw new ExitException(400);
121
		}
122
		$L    = Language::prefix('comments_');
123
		$text = $Request->data('text');
124
		if (!strip_tags($text)) {
125
			throw new ExitException($L->comment_cant_be_empty, 400);
126
		}
127
		$Comments = Comments::instance();
128
		$comment  = $Comments->get($id);
129
		if (!$comment) {
130
			throw new ExitException(404);
131
		}
132
		$allow = false;
133
		Event::instance()->fire(
134
			'api/Comments/edit',
135
			[
136
				'id'     => $comment['id'],
137
				'user'   => $comment['user'],
138
				'item'   => $comment['item'],
139
				'module' => $comment['module'],
140
				'allow'  => &$allow
141
			]
142
		);
143
		if (
144
			!$allow ||
145
			!$Comments->set($comment['id'], $text)
146
		) {
147
			throw new ExitException($L->comment_editing_server_error, 500);
148
		}
149
	}
150
	/**
151
	 * @param \cs\Request $Request
152
	 *
153
	 * @throws ExitException
154
	 */
155
	static function index_delete ($Request) {
156
		if (!User::instance()->user()) {
157
			throw new ExitException(403);
158
		}
159
		$id = $Request->route(0);
160
		if (!$id) {
161
			throw new ExitException(400);
162
		}
163
		$Comments = Comments::instance();
164
		$comment  = $Comments->get($id);
165
		if (!$comment) {
166
			throw new ExitException(404);
167
		}
168
		$allow = false;
169
		Event::instance()->fire(
170
			'api/Comments/delete',
171
			[
172
				'id'     => $comment['id'],
173
				'user'   => $comment['user'],
174
				'item'   => $comment['item'],
175
				'module' => $comment['module'],
176
				'allow'  => &$allow
177
			]
178
		);
179
		if (
180
			!$allow ||
181
			!$Comments->del($comment['id'])
182
		) {
183
			throw new ExitException(Language::prefix('comments_')->comment_deleting_server_error, 500);
184
		}
185
	}
186
}
187