This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | namespace App\Controller; |
||
3 | |||
4 | use App\Event\Notifications; |
||
5 | use Cake\Core\Configure; |
||
6 | use Cake\Database\Expression\QueryExpression; |
||
7 | use Cake\Event\Event; |
||
8 | use Cake\I18n\Time; |
||
9 | use Cake\Network\Exception\NotFoundException; |
||
10 | use Cake\Routing\Router; |
||
11 | |||
12 | class ConversationsController extends AppController |
||
13 | { |
||
14 | |||
15 | /** |
||
16 | * Initialization hook method. |
||
17 | * |
||
18 | * @return void |
||
19 | */ |
||
20 | public function initialize() |
||
21 | { |
||
22 | parent::initialize(); |
||
23 | |||
24 | $this->loadComponent('RequestHandler'); |
||
25 | } |
||
26 | |||
27 | /** |
||
28 | * BeforeFilter handle. |
||
29 | * |
||
30 | * @param Event $event The beforeFilter event that was fired. |
||
31 | * |
||
32 | * @return void |
||
33 | */ |
||
34 | public function beforeFilter(Event $event) |
||
35 | { |
||
36 | parent::beforeFilter($event); |
||
37 | |||
38 | $this->Auth->deny(); |
||
39 | |||
40 | if (Configure::read('Conversations.enabled') === false && $this->request->action != 'maintenance') { |
||
41 | $this->redirect(['action' => 'maintenance']); |
||
42 | } elseif (Configure::read('Conversations.enabled') === true && $this->request->action == 'maintenance') { |
||
43 | $this->redirect(['action' => 'index']); |
||
44 | } |
||
45 | } |
||
46 | |||
47 | /** |
||
48 | * Display all conversations for the user. |
||
49 | * |
||
50 | * @return void |
||
51 | */ |
||
52 | public function index() |
||
53 | { |
||
54 | $this->ConversationsUsers = $this->loadModel('ConversationsUsers'); |
||
0 ignored issues
–
show
|
|||
55 | |||
56 | $this->paginate = [ |
||
57 | 'maxLimit' => Configure::read('Conversations.conversations_per_page') |
||
58 | ]; |
||
59 | $conversations = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
60 | ->find() |
||
61 | ->contain([ |
||
62 | 'Users', |
||
63 | 'Conversations', |
||
64 | 'Conversations.Users' => function ($q) { |
||
65 | return $q->find('medium'); |
||
66 | }, |
||
67 | 'Conversations.LastMessage', |
||
68 | 'Conversations.LastMessageUser' |
||
69 | ]) |
||
70 | ->where([ |
||
71 | 'ConversationsUsers.user_id' => $this->Auth->user('id'), |
||
72 | 'Conversations.conversation_open <>' => 2 |
||
73 | ]) |
||
74 | ->order([ |
||
75 | 'ConversationsUsers.is_read' => 'ASC', |
||
76 | 'ConversationsUsers.is_star' => 'DESC', |
||
77 | 'Conversations.last_message_date' => 'DESC', |
||
78 | ]); |
||
79 | |||
80 | $conversations = $this->paginate($conversations); |
||
81 | |||
82 | $this->set(compact('conversations')); |
||
83 | } |
||
84 | |||
85 | /** |
||
86 | * Function to do an action when a user select a/many conversations. |
||
87 | * |
||
88 | * Action list : |
||
89 | * star : Conversations Important |
||
90 | * normal : Make normal conversation |
||
91 | * exit : Exit conversations |
||
92 | * |
||
93 | * @return void |
||
94 | * |
||
95 | * @throws NotFoundException |
||
96 | */ |
||
97 | public function action() |
||
98 | { |
||
99 | if (!$this->request->is('ajax')) { |
||
100 | throw new NotFoundException(); |
||
101 | } |
||
102 | |||
103 | $actionAllowed = ['star', 'normal', 'exit']; |
||
104 | |||
105 | View Code Duplication | if (!array_key_exists('action', $this->request->getParsedBody()) || !in_array($this->request->getData('action'), $actionAllowed)) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
106 | $json = []; |
||
107 | $json['error'] = '1'; |
||
108 | $json['message'] = __d('conversations', 'Action unknown.'); |
||
109 | |||
110 | $this->set(compact('json')); |
||
111 | $this->set('_serialize', 'json'); |
||
112 | |||
113 | return; |
||
114 | } |
||
115 | |||
116 | View Code Duplication | if (!array_key_exists('conversations', $this->request->getParsedBody())) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
117 | $json = []; |
||
118 | $json['error'] = '1'; |
||
119 | $json['message'] = __d('conversations', 'You have not chosen any conversations.'); |
||
120 | |||
121 | $this->set(compact('json')); |
||
122 | $this->set('_serialize', 'json'); |
||
123 | |||
124 | return; |
||
125 | } |
||
126 | |||
127 | $this->loadModel('ConversationsUsers'); |
||
128 | |||
129 | $action = $this->request->getData('action'); |
||
130 | $array = $this->request->getData('conversations'); |
||
131 | |||
132 | switch ($action) { |
||
133 | View Code Duplication | case "star": |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
134 | foreach ($array as $conversationId) { |
||
0 ignored issues
–
show
The expression
$array of type null|string|array is not guaranteed to be traversable. How about adding an additional type check?
There are different options of fixing this problem.
![]() |
|||
135 | $this->ConversationsUsers->updateAll( |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
136 | ['is_star' => 1], |
||
137 | [ |
||
138 | 'conversation_id' => $conversationId, |
||
139 | 'user_id' => $this->Auth->user('id') |
||
140 | ] |
||
141 | ); |
||
142 | } |
||
143 | |||
144 | $json['message'] = __d('conversations', 'Your conversation(s) has been Stared.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
145 | $json['error'] = '0'; |
||
146 | $json['redirect'] = Router::url(['action' => 'index']); |
||
147 | |||
148 | $this->set(compact('json')); |
||
149 | |||
150 | break; |
||
151 | |||
152 | View Code Duplication | case "normal": |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
153 | foreach ($array as $conversationId) { |
||
0 ignored issues
–
show
The expression
$array of type null|string|array is not guaranteed to be traversable. How about adding an additional type check?
There are different options of fixing this problem.
![]() |
|||
154 | $this->ConversationsUsers->updateAll( |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
155 | ['is_star' => 0], |
||
156 | [ |
||
157 | 'conversation_id' => $conversationId, |
||
158 | 'user_id' => $this->Auth->user('id') |
||
159 | ] |
||
160 | ); |
||
161 | } |
||
162 | |||
163 | $json['message'] = __d('conversations', 'Your conversation(s) has been set normal.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
164 | $json['error'] = '0'; |
||
165 | $json['redirect'] = Router::url(['action' => 'index']); |
||
166 | |||
167 | $this->set(compact('json')); |
||
168 | break; |
||
169 | |||
170 | case "exit": |
||
171 | foreach ($array as $conversationId) { |
||
0 ignored issues
–
show
The expression
$array of type null|string|array is not guaranteed to be traversable. How about adding an additional type check?
There are different options of fixing this problem.
![]() |
|||
172 | $user = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
173 | ->find() |
||
174 | ->contain([ |
||
175 | 'Conversations' |
||
176 | ]) |
||
177 | ->where([ |
||
178 | 'ConversationsUsers.user_id' => $this->Auth->user('id'), |
||
179 | 'ConversationsUsers.conversation_id' => $conversationId |
||
180 | ]) |
||
181 | ->first(); |
||
182 | |||
183 | //Check if the user is the owner of the conversation. |
||
184 | if ($user->conversation->user_id == $this->Auth->user('id')) { |
||
185 | $conversation = $this->Conversations->get($conversationId); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
186 | $conversation->conversation_open = 2; |
||
187 | $this->Conversations->save($conversation); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
188 | } else { |
||
189 | $this->ConversationsUsers->delete($user); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
190 | |||
191 | $conversation = $this->Conversations->get($conversationId); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
192 | $conversation->recipient_count = $user->conversation->recipient_count - 1; |
||
193 | $this->Conversations->save($conversation); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
194 | } |
||
195 | } |
||
196 | |||
197 | $json['message'] = __d('conversations', 'You have left your conversation(s) successfully.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
198 | $json['error'] = '0'; |
||
199 | $json['redirect'] = Router::url(['action' => 'index']); |
||
200 | |||
201 | $this->set(compact('json')); |
||
202 | break; |
||
203 | } |
||
204 | |||
205 | $this->set('_serialize', 'json'); |
||
206 | } |
||
207 | |||
208 | /** |
||
209 | * Create a new conversation. |
||
210 | * |
||
211 | * @return void |
||
212 | */ |
||
213 | public function create() |
||
214 | { |
||
215 | $this->loadModel('Conversations'); |
||
216 | $conversation = $this->Conversations->newEntity($this->request->getParsedBody(), ['validate' => 'create']); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
217 | |||
218 | if ($this->request->is('post')) { |
||
219 | $users = str_replace(",", "", trim(strtolower($this->request->getData('users')))); |
||
220 | $users = explode(" ", $users); |
||
221 | |||
222 | //Check max users. |
||
223 | if (!(count($users) <= Configure::read('Conversations.max_users_per_conversation'))) { |
||
224 | $this->Flash->error(__d('conversations', 'You cannot invite more than {0} user(s) in this conversation.', Configure::read('Conversations.max_users_per_conversation'))); |
||
225 | $this->set(compact('conversation')); |
||
226 | |||
227 | return; |
||
228 | } |
||
229 | |||
230 | $userMiniCount = false; |
||
231 | $this->loadModel('Users'); |
||
232 | |||
233 | //We check if at least one user in all list exist. |
||
234 | foreach ($users as $user) { |
||
235 | $userCheck = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
236 | ->find() |
||
237 | ->where([ |
||
238 | 'LOWER(Users.username)' => $user |
||
239 | ]) |
||
240 | ->first(); |
||
241 | |||
242 | //If an user exist and if the user is not the own of the conversation. |
||
243 | if ($userCheck && $userCheck->id != $this->Auth->user('id')) { |
||
244 | $userMiniCount = true; |
||
245 | break; |
||
246 | } |
||
247 | } |
||
248 | |||
249 | if ($userMiniCount === false) { |
||
250 | $this->Flash->error(__d('conversations', 'Please enter at least one valid recipient.')); |
||
251 | $this->set(compact('conversation')); |
||
252 | |||
253 | return; |
||
254 | } |
||
255 | |||
256 | $conversation->user_id = $this->Auth->user('id'); |
||
257 | $conversation->reply_count = 1; |
||
258 | $conversation->recipient_count = 1; |
||
259 | $conversation->last_message_user_id = $this->Auth->user('id'); |
||
260 | $conversation->last_message_date = new Time(); |
||
261 | |||
262 | if ($conversation = $this->Conversations->save($conversation)) { |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
263 | $this->loadModel('ConversationsMessages'); |
||
264 | $this->loadModel('ConversationsUsers'); |
||
265 | |||
266 | $data = []; |
||
267 | $data['message'] = $this->request->getData('message'); |
||
268 | $data['conversation_id'] = $conversation->id; |
||
269 | $data['user_id'] = $this->Auth->user('id'); |
||
270 | |||
271 | $entity = $this->ConversationsMessages->newEntity($data); |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
272 | $message = $this->ConversationsMessages->save($entity); |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
273 | |||
274 | $data = []; |
||
275 | $data['conversation_id'] = $conversation->id; |
||
276 | $data['user_id'] = $this->Auth->user('id'); |
||
277 | |||
278 | $entity = $this->ConversationsUsers->newEntity($data); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
279 | $user = $this->ConversationsUsers->save($entity); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
280 | |||
281 | $this->Conversations->updateAll( |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
282 | [ |
||
283 | 'first_message_id' => $message->id, |
||
284 | 'last_message_id' => $message->id |
||
285 | ], |
||
286 | [ |
||
287 | 'id' => $conversation->id |
||
288 | ] |
||
289 | ); |
||
290 | |||
291 | //Save all invited users. |
||
292 | foreach ($users as $user) { |
||
293 | $userExist = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
294 | ->find() |
||
295 | ->where([ |
||
296 | 'LOWER(Users.username)' => $user |
||
297 | ]) |
||
298 | ->first(); |
||
299 | |||
300 | //If the user exist. |
||
301 | if (is_null($userExist)) { |
||
302 | break; |
||
303 | } |
||
304 | |||
305 | //Check if the user is not already in the conversation. |
||
306 | $conversUserCheck = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
307 | ->find() |
||
308 | ->where([ |
||
309 | 'ConversationsUsers.conversation_id' => $conversation->id, |
||
310 | 'ConversationsUsers.user_id' => $userExist->id |
||
311 | ]) |
||
312 | ->first(); |
||
313 | |||
314 | if (!is_null($conversUserCheck)) { |
||
315 | break; |
||
316 | } |
||
317 | |||
318 | $data = []; |
||
319 | $data['conversation_id'] = $conversation->id; |
||
320 | $data['user_id'] = $userExist->id; |
||
321 | |||
322 | $entity = $this->ConversationsUsers->newEntity($data); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
323 | $user = $this->ConversationsUsers->save($entity); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
324 | |||
325 | $expression = new QueryExpression('recipient_count = recipient_count + 1'); |
||
326 | $this->Conversations->updateAll( |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
327 | [$expression], |
||
328 | [ |
||
329 | 'id' => $conversation->id |
||
330 | ] |
||
331 | ); |
||
332 | |||
333 | //Notifications Event. |
||
334 | $this->eventManager()->attach(new Notifications()); |
||
0 ignored issues
–
show
new \App\Event\Notifications() is of type object<App\Event\Notifications> , but the function expects a callable .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() The method
Cake\Event\EventManager::attach() has been deprecated with message: 3.0.0 Use on() instead.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead. ![]() |
|||
335 | $event = new Event('Model.Notifications.dispatch', $this, [ |
||
336 | 'sender_id' => $this->Auth->user('id'), |
||
337 | 'conversation_id' => $conversation->id, |
||
338 | 'type' => 'conversation.reply' |
||
339 | ]); |
||
340 | $this->eventManager()->dispatch($event); |
||
341 | } |
||
342 | |||
343 | $this->Flash->success(__d('conversations', 'Your conversation has been created successfully !')); |
||
344 | $this->redirect([ |
||
345 | '_name' => 'conversations-view', |
||
346 | 'slug' => $conversation->title, |
||
347 | 'id' => $conversation->id |
||
348 | ]); |
||
349 | } |
||
350 | } |
||
351 | |||
352 | $this->set(compact('conversation')); |
||
353 | } |
||
354 | |||
355 | /** |
||
356 | * Display a conversation. |
||
357 | * |
||
358 | * @return void|\Cake\Network\Response |
||
359 | */ |
||
360 | public function view() |
||
361 | { |
||
362 | $this->loadModel('ConversationsUsers'); |
||
363 | |||
364 | $conversation = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
365 | ->find() |
||
366 | ->contain([ |
||
367 | 'Users', |
||
368 | 'Conversations', |
||
369 | 'Conversations.LastMessage', |
||
370 | 'Conversations.LastMessageUser' |
||
371 | ]) |
||
372 | ->where([ |
||
373 | 'ConversationsUsers.conversation_id' => $this->request->id, |
||
374 | 'ConversationsUsers.user_id' => $this->Auth->user('id'), |
||
375 | 'Conversations.conversation_open <>' => 2 |
||
376 | ]) |
||
377 | ->first(); |
||
378 | |||
379 | if (is_null($conversation)) { |
||
380 | $this->Flash->error(__d('conversations', "This conversation doesn't exist or has been deleted.")); |
||
381 | |||
382 | return $this->redirect(['action' => 'index']); |
||
383 | } |
||
384 | |||
385 | $this->loadModel('ConversationsMessages'); |
||
386 | |||
387 | $this->paginate = [ |
||
388 | 'maxLimit' => Configure::read('Conversations.messages_per_page') |
||
389 | ]; |
||
390 | |||
391 | $messages = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
392 | ->find() |
||
393 | ->contain([ |
||
394 | 'Users' => function ($q) { |
||
395 | return $q->find('full')->formatResults(function ($users) { |
||
396 | return $users->map(function ($user) { |
||
397 | $user->online = $this->SessionsActivity->getOnlineStatus($user); |
||
0 ignored issues
–
show
The property
SessionsActivity does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
398 | |||
399 | return $user; |
||
400 | }); |
||
401 | }); |
||
402 | }, |
||
403 | 'Users.Groups', |
||
404 | 'LastEditUsers' => function ($q) { |
||
405 | return $q->find('short'); |
||
406 | }, |
||
407 | ]) |
||
408 | ->where([ |
||
409 | 'ConversationsMessages.conversation_id' => $this->request->id |
||
410 | ]) |
||
411 | ->order([ |
||
412 | 'ConversationsMessages.created' => 'ASC' |
||
413 | ]); |
||
414 | |||
415 | $messages = $this->paginate($messages); |
||
416 | |||
417 | //Update "is_read" for the current user. |
||
418 | $user = $this->ConversationsUsers->get($conversation->id); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
419 | $user->is_read = 1; |
||
420 | $this->ConversationsUsers->save($user); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
421 | |||
422 | //Current user. |
||
423 | $this->loadModel('Users'); |
||
424 | $currentUser = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
425 | ->find() |
||
426 | ->contain([ |
||
427 | 'Groups' => function ($q) { |
||
428 | return $q->select(['id', 'is_staff']); |
||
429 | } |
||
430 | ]) |
||
431 | ->where([ |
||
432 | 'Users.id' => $this->Auth->user('id') |
||
433 | ]) |
||
434 | ->select(['id', 'group_id']) |
||
435 | ->first(); |
||
436 | |||
437 | //Build the newEntity for the comment form. |
||
438 | $messageForm = $this->ConversationsMessages->newEntity(); |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
439 | |||
440 | $this->set(compact('conversation', 'messages', 'currentUser', 'messageForm')); |
||
441 | } |
||
442 | |||
443 | /** |
||
444 | * Action to search some users when adding an user in a conversation. |
||
445 | * |
||
446 | * @return void |
||
447 | * |
||
448 | * @throws \Cake\Network\Exception\NotFoundException |
||
449 | */ |
||
450 | public function inviteMember() |
||
451 | { |
||
452 | if (!$this->request->is('ajax')) { |
||
453 | throw new NotFoundException(); |
||
454 | } |
||
455 | $keyword = strtolower($this->request->getQuery('query')); |
||
456 | |||
457 | $this->loadModel('Users'); |
||
458 | $users = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
459 | ->find() |
||
460 | ->where(function ($q) use ($keyword) { |
||
461 | return $q |
||
462 | ->like('LOWER(Users.username)', "%$keyword%"); |
||
463 | }) |
||
464 | ->limit(12) |
||
465 | ->toArray(); |
||
466 | |||
467 | foreach ($users as $user) { |
||
468 | $json[] = h($user->username); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
469 | } |
||
470 | |||
471 | $this->set(compact('json')); |
||
472 | $this->set('_serialize', 'json'); |
||
473 | } |
||
474 | |||
475 | /** |
||
476 | * Quote a post. |
||
477 | * |
||
478 | * @throws \Cake\Network\Exception\NotFoundException |
||
479 | * |
||
480 | * @return mixed |
||
481 | */ |
||
482 | public function quote() |
||
483 | { |
||
484 | if (!$this->request->is('ajax')) { |
||
485 | throw new NotFoundException(); |
||
486 | } |
||
487 | |||
488 | $this->loadModel('ConversationsMessages'); |
||
489 | |||
490 | $message = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
491 | ->find() |
||
492 | ->where([ |
||
493 | 'ConversationsMessages.id' => $this->request->id |
||
494 | ]) |
||
495 | ->contain([ |
||
496 | 'Users' => function ($q) { |
||
497 | return $q->find('short'); |
||
498 | } |
||
499 | ]) |
||
500 | ->first(); |
||
501 | |||
502 | $json = []; |
||
503 | |||
504 | if (!is_null($message)) { |
||
505 | $message->toArray(); |
||
506 | |||
507 | $url = Router::url(['action' => 'go', $message->id]); |
||
508 | $text = __d('conversations', 'has said :'); |
||
509 | |||
510 | //Build the quote. |
||
511 | $json['message'] = <<<EOT |
||
512 | <div> |
||
513 | <div> |
||
514 | <a href="{$url}"> |
||
515 | <strong>{$message->user->full_name} {$text}</strong> |
||
516 | </a> |
||
517 | </div> |
||
518 | <blockquote> |
||
519 | $message->message |
||
520 | </blockquote> |
||
521 | </div><p> </p><p> </p> |
||
522 | EOT; |
||
523 | |||
524 | $json['error'] = false; |
||
525 | |||
526 | $this->set(compact('json')); |
||
527 | } else { |
||
528 | $json['post'] = __d('conversations', "This message doesn't exist."); |
||
529 | $json['error'] = true; |
||
530 | |||
531 | $this->set(compact('json')); |
||
532 | } |
||
533 | |||
534 | //Send response in JSON. |
||
535 | $this->set('_serialize', 'json'); |
||
536 | } |
||
537 | |||
538 | /** |
||
539 | * Get the form to edit a message. |
||
540 | * |
||
541 | * @throws \Cake\Network\Exception\NotFoundException When it's not an AJAX request. |
||
542 | * |
||
543 | * @return void |
||
544 | */ |
||
545 | public function getEditMessage() |
||
546 | { |
||
547 | if (!$this->request->is('ajax')) { |
||
548 | throw new NotFoundException(); |
||
549 | } |
||
550 | |||
551 | $this->loadModel('ConversationsMessages'); |
||
552 | $this->viewBuilder()->layout(false); |
||
0 ignored issues
–
show
false is of type boolean , but the function expects a string|null .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() The method
Cake\View\ViewBuilder::layout() has been deprecated with message: 3.4.0 Use setLayout()/getLayout() instead.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead. ![]() |
|||
553 | |||
554 | $message = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
555 | ->find() |
||
556 | ->where([ |
||
557 | 'ConversationsMessages.id' => $this->request->getData('id') |
||
558 | ]) |
||
559 | ->first(); |
||
560 | |||
561 | $json = [ |
||
562 | 'error' => false, |
||
563 | 'errorMessage' => '' |
||
564 | ]; |
||
565 | |||
566 | View Code Duplication | if (is_null($message)) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
567 | $json['error'] = true; |
||
568 | $json['errorMessage'] = __d('conversations', "This message doesn't exist or has been deleted !"); |
||
569 | |||
570 | $this->set(compact('json')); |
||
571 | |||
572 | return; |
||
573 | } |
||
574 | |||
575 | //Current user. |
||
576 | $this->loadModel('Users'); |
||
577 | $currentUser = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
578 | ->find() |
||
579 | ->contain([ |
||
580 | 'Groups' => function ($q) { |
||
581 | return $q->select(['id', 'is_staff']); |
||
582 | } |
||
583 | ]) |
||
584 | ->where([ |
||
585 | 'Users.id' => $this->Auth->user('id') |
||
586 | ]) |
||
587 | ->select(['id', 'group_id']) |
||
588 | ->first(); |
||
589 | |||
590 | if ($message->user_id != $this->Auth->user('id') && !$currentUser->group->is_staff) { |
||
591 | $json['error'] = true; |
||
592 | $json['errorMessage'] = __d('conversations', "You don't have the authorization to edit this message !"); |
||
593 | |||
594 | $this->set(compact('json')); |
||
595 | |||
596 | return; |
||
597 | } |
||
598 | |||
599 | $this->set(compact('json', 'message')); |
||
600 | } |
||
601 | |||
602 | /** |
||
603 | * Edit a message. |
||
604 | * |
||
605 | * @param int $id Id of the message. |
||
606 | * |
||
607 | * @return \Cake\Network\Response |
||
608 | */ |
||
609 | public function messageEdit($id = null) |
||
610 | { |
||
611 | if (!$this->request->is(['post', 'put'])) { |
||
612 | throw new NotFoundException(); |
||
613 | } |
||
614 | |||
615 | $this->loadModel('ConversationsMessages'); |
||
616 | |||
617 | $message = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
618 | ->find() |
||
619 | ->where([ |
||
620 | 'ConversationsMessages.id' => $id |
||
621 | ]) |
||
622 | ->first(); |
||
623 | |||
624 | if (is_null($message)) { |
||
625 | $this->Flash->error(__d('conversations', "This post doesn't exist or has been deleted !")); |
||
626 | |||
627 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
628 | } |
||
629 | |||
630 | //Current user. |
||
631 | $this->loadModel('Users'); |
||
632 | $currentUser = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
633 | ->find() |
||
634 | ->contain([ |
||
635 | 'Groups' => function ($q) { |
||
636 | return $q->select(['id', 'is_staff']); |
||
637 | } |
||
638 | ]) |
||
639 | ->where([ |
||
640 | 'Users.id' => $this->Auth->user('id') |
||
641 | ]) |
||
642 | ->select(['id', 'group_id']) |
||
643 | ->first(); |
||
644 | |||
645 | if ($message->user_id != $this->Auth->user('id') && !$currentUser->group->is_staff) { |
||
646 | $this->Flash->error(__d('conversations', "You don't have the authorization to edit this post !")); |
||
647 | |||
648 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
649 | } |
||
650 | |||
651 | $this->ConversationsMessages->patchEntity($message, $this->request->getParsedBody()); |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
652 | $message->last_edit_date = new Time(); |
||
653 | $message->last_edit_user_id = $this->Auth->user('id'); |
||
654 | $message->edit_count++; |
||
655 | |||
656 | if ($this->ConversationsMessages->save($message)) { |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
657 | $this->Flash->success(__d('conversations', 'This message has been edited successfully !')); |
||
658 | } |
||
659 | |||
660 | return $this->redirect(['action' => 'go', $message->id]); |
||
661 | } |
||
662 | |||
663 | /** |
||
664 | * Redirect an user to a conversation, page and message. |
||
665 | * |
||
666 | * @param int $messageId Id of the message. |
||
667 | * |
||
668 | * @return \Cake\Network\Response |
||
669 | */ |
||
670 | View Code Duplication | public function go($messageId = null) |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
671 | { |
||
672 | $this->loadModel('ConversationsMessages'); |
||
673 | |||
674 | $message = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
675 | ->find() |
||
676 | ->contain([ |
||
677 | 'Conversations' |
||
678 | ]) |
||
679 | ->where([ |
||
680 | 'ConversationsMessages.id' => $messageId |
||
681 | ]) |
||
682 | ->first(); |
||
683 | |||
684 | if (is_null($message)) { |
||
685 | $this->Flash->error(__d('conversations', "This message doesn't exist or has been deleted.")); |
||
686 | |||
687 | return $this->redirect(['controller' => 'conversations', 'action' => 'index']); |
||
688 | } |
||
689 | |||
690 | $message->toArray(); |
||
691 | |||
692 | //Count the number of messages before this message. |
||
693 | $messagesBefore = $this->ConversationsMessages |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
694 | ->find() |
||
695 | ->where([ |
||
696 | 'ConversationsMessages.conversation_id' => $message->conversation_id, |
||
697 | 'ConversationsMessages.created <' => $message->created |
||
698 | ]) |
||
699 | ->count(); |
||
700 | |||
701 | //Get the number of messages per page. |
||
702 | $messagesPerPage = Configure::read('Conversations.messages_per_page'); |
||
703 | |||
704 | //Calculate the page. |
||
705 | $page = ceil($messagesBefore / $messagesPerPage); |
||
706 | |||
707 | $page = ($page > 1) ? $page : 1; |
||
708 | |||
709 | //Redirect the user. |
||
710 | return $this->redirect([ |
||
711 | '_name' => 'conversations-view', |
||
712 | 'slug' => $message->conversation->title, |
||
713 | 'id' => $message->conversation->id, |
||
714 | '?' => ['page' => $page], |
||
715 | '#' => 'message-' . $messageId |
||
716 | ]); |
||
717 | } |
||
718 | |||
719 | /** |
||
720 | * Function to kick an user from a conversation. |
||
721 | * |
||
722 | * @return void |
||
723 | */ |
||
724 | public function kick() |
||
725 | { |
||
726 | if (!$this->request->is('ajax')) { |
||
727 | throw new NotFoundException(); |
||
728 | } |
||
729 | |||
730 | $this->loadModel('ConversationsUsers'); |
||
731 | |||
732 | $currentUser = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
733 | ->find() |
||
734 | ->contain([ |
||
735 | 'Conversations', |
||
736 | 'Users' => function ($q) { |
||
737 | return $q->find('short'); |
||
738 | }, |
||
739 | 'Users.Groups' => function ($q) { |
||
740 | return $q->select(['id', 'is_staff']); |
||
741 | } |
||
742 | ]) |
||
743 | ->where([ |
||
744 | 'ConversationsUsers.user_id' => $this->Auth->user('id'), |
||
745 | 'ConversationsUsers.conversation_id' => $this->request->id |
||
746 | ]) |
||
747 | ->first(); |
||
748 | |||
749 | //Check if the current user is the owner of this conversation or if he is not a staff member. |
||
750 | if ($currentUser->user_id != $currentUser->conversation->user_id && !$currentUser->user->group->is_staff) { |
||
751 | $json['message'] = __d('conversations', 'You cannot kick this user from this conversation.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
752 | $json['error'] = true; |
||
753 | |||
754 | $this->set(compact('json')); |
||
755 | $this->set('_serialize', 'json'); |
||
756 | |||
757 | return; |
||
758 | } |
||
759 | |||
760 | $user = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
761 | ->find() |
||
762 | ->contain([ |
||
763 | 'Conversations', |
||
764 | 'Users' => function ($q) { |
||
765 | return $q->find('short'); |
||
766 | }, |
||
767 | 'Users.Groups' => function ($q) { |
||
768 | return $q->select(['id', 'is_staff']); |
||
769 | } |
||
770 | ]) |
||
771 | ->where([ |
||
772 | 'ConversationsUsers.user_id' => $this->request->user_id, |
||
773 | 'ConversationsUsers.conversation_id' => $this->request->id |
||
774 | ]) |
||
775 | ->first(); |
||
776 | |||
777 | //Check if the user to kick is in the conversation and if he is not owner of this conversation and if he is not a staff member. |
||
778 | if (is_null($user) || $this->request->user_id == $currentUser->conversation->user_id || $user->user->group->is_staff) { |
||
779 | $json['message'] = __d('conversations', 'You cannot kick this user from this conversation.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
780 | $json['error'] = true; |
||
781 | |||
782 | $this->set(compact('json')); |
||
783 | $this->set('_serialize', 'json'); |
||
784 | |||
785 | return; |
||
786 | } |
||
787 | |||
788 | $this->ConversationsUsers->delete($user); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
789 | |||
790 | $expression = new QueryExpression('recipient_count = recipient_count - 1'); |
||
791 | $this->Conversations->updateAll( |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
792 | [$expression], |
||
793 | [ |
||
794 | 'id' => $this->request->id |
||
795 | ] |
||
796 | ); |
||
797 | |||
798 | $json['message'] = __d('conversations', 'This user has been kicked successfully.'); |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
$json was never initialized. Although not strictly required by PHP, it is generally a good practice to add $json = array(); before regardless.
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code. Let’s take a look at an example: foreach ($collection as $item) {
$myArray['foo'] = $item->getFoo();
if ($item->hasBar()) {
$myArray['bar'] = $item->getBar();
}
// do something with $myArray
}
As you can see in this example, the array This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop. ![]() |
|||
799 | $json['error'] = false; |
||
800 | $json['id'] = $this->request->user_id; |
||
0 ignored issues
–
show
The property
user_id does not seem to exist in Cake\Http\ServerRequest .
An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name. If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading. ![]() |
|||
801 | $json['recipients'] = $currentUser->conversation->recipient_count - 1; |
||
802 | |||
803 | $this->set(compact('json')); |
||
804 | $this->set('_serialize', 'json'); |
||
805 | } |
||
806 | |||
807 | /** |
||
808 | * Reply to a conversation. |
||
809 | * |
||
810 | * @return void|\Cake\Network\Response |
||
811 | */ |
||
812 | public function reply() |
||
813 | { |
||
814 | $this->loadModel('ConversationsMessages'); |
||
815 | |||
816 | if ($this->request->is('post')) { |
||
817 | $conversation = $this->Conversations |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
818 | ->find() |
||
819 | ->where(['Conversations.id' => $this->request->id]) |
||
820 | ->first(); |
||
821 | |||
822 | $this->loadModel('ConversationsUsers'); |
||
823 | $user = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
824 | ->find() |
||
825 | ->where([ |
||
826 | 'ConversationsUsers.conversation_id' => $this->request->id, |
||
827 | 'ConversationsUsers.user_id' => $this->Auth->user('id') |
||
828 | ]) |
||
829 | ->first(); |
||
830 | |||
831 | //Check if the conversation is found. |
||
832 | if (is_null($user) || is_null($conversation) || $conversation->conversation_open == 2) { |
||
833 | $this->Flash->error(__d('conversations', "This conversation doesn't exist or has been deleted !")); |
||
834 | |||
835 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
836 | } |
||
837 | |||
838 | //Check if the conversation is open. |
||
839 | View Code Duplication | if ($conversation->conversation_open == false) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
840 | $this->Flash->error(__d('conversations', 'This conversation is closed, you cannot reply.')); |
||
841 | |||
842 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
843 | } |
||
844 | |||
845 | //Build the newEntity for the post form. |
||
846 | $this->request = $this->request |
||
847 | ->withData('conversation.last_post_date', new Time()) |
||
848 | ->withData('conversation.last_post_user_id', $this->Auth->user('id')) |
||
849 | ->withData('user_id', $this->Auth->user('id')) |
||
850 | ->withData('conversation_id', $this->request->id); |
||
851 | |||
852 | $message = $this->ConversationsMessages->newEntity($this->request->getParsedBody(), [ |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
853 | 'associated' => ['Conversations'], |
||
854 | 'validate' => 'create' |
||
855 | ]); |
||
856 | |||
857 | //Handle validation errors (Due to the redirect) |
||
858 | if (!empty($message->errors())) { |
||
859 | $this->Flash->conversationsReply('Validation errors', [ |
||
860 | 'key' => 'ConversationsReply', |
||
861 | 'params' => [ |
||
862 | 'errors' => $message->errors() |
||
863 | ] |
||
864 | ]); |
||
865 | |||
866 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
867 | } |
||
868 | |||
869 | if ($message->conversation->isNew() === true) { |
||
870 | $message->conversation->isNew(false); |
||
871 | } |
||
872 | |||
873 | $message->conversation->accessible('id', true); |
||
874 | $message->conversation->id = $this->request->id; |
||
0 ignored issues
–
show
The property
id does not seem to exist in Cake\Http\ServerRequest .
An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name. If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading. ![]() |
|||
875 | |||
876 | if ($message = $this->ConversationsMessages->save($message)) { |
||
0 ignored issues
–
show
The property
ConversationsMessages does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
877 | //Update the last message id for the conversation. |
||
878 | $this->loadModel('Conversations'); |
||
879 | $conversation = $this->Conversations->get($this->request->id); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
880 | $conversation->last_message_id = $message->id; |
||
881 | $conversation->last_message_date = new Time(); |
||
882 | $conversation->last_message_user_id = $this->Auth->user('id'); |
||
883 | $this->Conversations->save($conversation); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
884 | |||
885 | //Notifications Event. |
||
886 | $this->eventManager()->attach(new Notifications()); |
||
0 ignored issues
–
show
new \App\Event\Notifications() is of type object<App\Event\Notifications> , but the function expects a callable .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() The method
Cake\Event\EventManager::attach() has been deprecated with message: 3.0.0 Use on() instead.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead. ![]() |
|||
887 | $event = new Event('Model.Notifications.dispatch', $this, [ |
||
888 | 'sender_id' => $this->Auth->user('id'), |
||
889 | 'conversation_id' => $conversation->id, |
||
890 | 'type' => 'conversation.reply' |
||
891 | ]); |
||
892 | $this->eventManager()->dispatch($event); |
||
893 | |||
894 | $conversationOpen = !is_null($this->request->getData('conversation.conversation_open')) ? $this->request->getData('conversation.conversation_open') : true; |
||
895 | |||
896 | if ($conversationOpen == false) { |
||
897 | $this->Flash->success(__d('conversations', 'Your reply has been posted successfully and the conversation has been closed !')); |
||
898 | } else { |
||
899 | $this->Flash->success(__d('conversations', 'Your reply has been posted successfully !')); |
||
900 | } |
||
901 | |||
902 | //Redirect the user to the last page of the article. |
||
903 | return $this->redirect([ |
||
904 | 'controller' => 'conversations', |
||
905 | 'action' => 'go', |
||
906 | $message->id |
||
907 | ]); |
||
908 | } |
||
909 | } |
||
910 | |||
911 | $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
912 | } |
||
913 | |||
914 | /** |
||
915 | * Edit a conversation. |
||
916 | * |
||
917 | * @return \Cake\Network\Response |
||
918 | */ |
||
919 | public function edit() |
||
920 | { |
||
921 | $this->loadModel('Conversations'); |
||
922 | |||
923 | if ($this->request->is('put')) { |
||
924 | $conversation = $this->Conversations |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
925 | ->find() |
||
926 | ->where([ |
||
927 | 'Conversations.id' => $this->request->id |
||
928 | ]) |
||
929 | ->first(); |
||
930 | |||
931 | //Check if the conversation is found. |
||
932 | View Code Duplication | if (is_null($conversation)) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
933 | $this->Flash->error(__d('conversations', "This conversation doesn't exist or has been deleted !")); |
||
934 | |||
935 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
936 | } |
||
937 | |||
938 | //Check if the user has the permission to edit it. |
||
939 | View Code Duplication | if ($this->Auth->isAuthorized() === false) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
940 | $this->Flash->error(__d('conversations', "You don't have the authorization to edit this conversation !")); |
||
941 | |||
942 | return $this->redirect([ |
||
943 | 'controller' => 'conversations', |
||
944 | 'action' => 'go', |
||
945 | $conversation->last_message_id |
||
946 | ]); |
||
947 | } |
||
948 | |||
949 | $this->Conversations->patchEntity($conversation, $this->request->getParsedBody(), ['validate' => 'edit']); |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
950 | |||
951 | if ($this->Conversations->save($conversation)) { |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
952 | if ($conversation->conversation_open == false) { |
||
953 | $this->Flash->success(__d('conversations', 'Your conversation has been edited and closed successfully !')); |
||
954 | } else { |
||
955 | $this->Flash->success(__d('conversations', 'Your conversation has been edited successfully !')); |
||
956 | } |
||
957 | |||
958 | return $this->redirect([ |
||
959 | 'controller' => 'conversations', |
||
960 | 'action' => 'go', |
||
961 | $conversation->last_message_id |
||
962 | ]); |
||
963 | } |
||
964 | } |
||
965 | |||
966 | $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
967 | } |
||
968 | |||
969 | /** |
||
970 | * Function to invite user(s) in a conversation. |
||
971 | * |
||
972 | * @return void|\Cake\Network\Response |
||
973 | */ |
||
974 | public function invite() |
||
975 | { |
||
976 | $this->loadModel('ConversationsUsers'); |
||
977 | |||
978 | $conversation = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
979 | ->find() |
||
980 | ->contain([ |
||
981 | 'Conversations', |
||
982 | 'Users', |
||
983 | 'Users.Groups' |
||
984 | ]) |
||
985 | ->where([ |
||
986 | 'ConversationsUsers.conversation_id' => $this->request->id, |
||
987 | 'ConversationsUsers.user_id' => $this->Auth->user('id') |
||
988 | ]) |
||
989 | ->first(); |
||
990 | |||
991 | View Code Duplication | if (is_null($conversation) || $conversation->conversation->conversation_open != 1) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
992 | $this->Flash->error(__d('conversations', 'This conversation is closed or has been deleted !')); |
||
993 | |||
994 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
995 | } |
||
996 | |||
997 | if (!$conversation->conversation->open_invite && $conversation->conversation->user_id != $this->Auth->user('id') && !$conversation->user->group->is_staff) { |
||
998 | $this->Flash->error(__d('conversations', "You don't have the authorization to invite in this conversation !")); |
||
999 | |||
1000 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
1001 | } |
||
1002 | |||
1003 | if ($this->request->is(['post', 'put'])) { |
||
1004 | $users = str_replace(",", "", trim(strtolower($this->request->getData('users')))); |
||
1005 | $users = explode(" ", $users); |
||
1006 | |||
1007 | $maxUsersCheck = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1008 | ->find() |
||
1009 | ->where([ |
||
1010 | 'ConversationsUsers.conversation_id' => $this->request->id |
||
1011 | ]) |
||
1012 | ->count(); |
||
1013 | |||
1014 | //Check max users. |
||
1015 | if (count($users) + $maxUsersCheck >= Configure::read('Conversations.max_users_per_conversation')) { |
||
1016 | $this->Flash->error(__d('conversations', 'You cannot invite more than {0} user(s) in this conversation.', Configure::read('Conversations.max_users_per_conversation'))); |
||
1017 | |||
1018 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
1019 | } |
||
1020 | |||
1021 | $this->loadModel('Users'); |
||
1022 | $this->loadModel('Conversations'); |
||
1023 | |||
1024 | foreach ($users as $user) { |
||
1025 | $user = $this->Users |
||
0 ignored issues
–
show
The property
Users does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1026 | ->find() |
||
1027 | ->where([ |
||
1028 | 'LOWER(Users.username)' => $user |
||
1029 | ]) |
||
1030 | ->first(); |
||
1031 | |||
1032 | if (!is_null($user)) { |
||
1033 | $check = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1034 | ->find() |
||
1035 | ->where([ |
||
1036 | 'ConversationsUsers.conversation_id' => $this->request->id, |
||
1037 | 'ConversationsUsers.user_id' => $user->id |
||
1038 | ]) |
||
1039 | ->first(); |
||
1040 | |||
1041 | if (is_null($check)) { |
||
1042 | $data = []; |
||
1043 | $data['conversation_id'] = $this->request->id; |
||
0 ignored issues
–
show
The property
id does not seem to exist in Cake\Http\ServerRequest .
An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name. If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading. ![]() |
|||
1044 | $data['user_id'] = $user->id; |
||
1045 | |||
1046 | $entity = $this->ConversationsUsers->newEntity($data); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1047 | $this->ConversationsUsers->save($entity); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1048 | |||
1049 | $expression = new QueryExpression('recipient_count = recipient_count + 1'); |
||
1050 | $this->Conversations->updateAll( |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1051 | [$expression], |
||
1052 | [ |
||
1053 | 'id' => $this->request->id |
||
1054 | ] |
||
1055 | ); |
||
1056 | } |
||
1057 | } |
||
1058 | } |
||
1059 | |||
1060 | $this->Flash->success(__d('conversations', 'Your user(s) has been added successfully.')); |
||
1061 | } |
||
1062 | |||
1063 | return $this->redirect([ |
||
1064 | 'controller' => 'conversations', |
||
1065 | 'action' => 'go', |
||
1066 | $conversation->conversation->last_message_id |
||
1067 | ]); |
||
1068 | } |
||
1069 | |||
1070 | /** |
||
1071 | * Function to leave a conversation. |
||
1072 | * |
||
1073 | * @return void|\Cake\Network\Response |
||
1074 | */ |
||
1075 | public function leave() |
||
1076 | { |
||
1077 | $this->loadModel('ConversationsUsers'); |
||
1078 | |||
1079 | $user = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1080 | ->find() |
||
1081 | ->contain([ |
||
1082 | 'Conversations' |
||
1083 | ]) |
||
1084 | ->where([ |
||
1085 | 'ConversationsUsers.conversation_id' => $this->request->id, |
||
1086 | 'ConversationsUsers.user_id' => $this->Auth->user('id') |
||
1087 | ]) |
||
1088 | ->first(); |
||
1089 | |||
1090 | if (is_null($user)) { |
||
1091 | $this->Flash->error(__d('conversations', 'You are not in this conversation.')); |
||
1092 | |||
1093 | return $this->redirect($this->referer()); |
||
0 ignored issues
–
show
It seems like
$this->referer() targeting Cake\Controller\Controller::referer() can also be of type object<Cake\Http\ServerRequest> ; however, Cake\Controller\Controller::redirect() does only seem to accept string|array , maybe add an additional type check?
This check looks at variables that are passed out again to other methods. If the outgoing method call has stricter type requirements than the method itself, an issue is raised. An additional type check may prevent trouble. ![]() |
|||
1094 | } |
||
1095 | |||
1096 | if ($user->conversation->user_id != $this->Auth->user('id')) { |
||
1097 | $this->loadModel('Conversations'); |
||
1098 | |||
1099 | $this->ConversationsUsers->delete($user); |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1100 | |||
1101 | $expression = new QueryExpression('recipient_count = recipient_count - 1'); |
||
1102 | $this->Conversations->updateAll( |
||
0 ignored issues
–
show
The property
Conversations does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1103 | [$expression], |
||
1104 | [ |
||
1105 | 'id' => $this->request->id |
||
1106 | ] |
||
1107 | ); |
||
1108 | |||
1109 | $this->Flash->success(__d('conversations', 'You have left the conversation successfully.')); |
||
1110 | |||
1111 | return $this->redirect(['controller' => 'conversations', 'action' => 'index']); |
||
1112 | View Code Duplication | } else { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
1113 | $this->Flash->error(__d('conversations', 'You can not leave your own conversation.')); |
||
1114 | |||
1115 | return $this->redirect([ |
||
1116 | 'controller' => 'conversations', |
||
1117 | 'action' => 'go', |
||
1118 | $user->conversation->last_message_id |
||
1119 | ]); |
||
1120 | } |
||
1121 | } |
||
1122 | |||
1123 | /** |
||
1124 | * Search conversations. |
||
1125 | * |
||
1126 | * @return void |
||
1127 | */ |
||
1128 | public function search() |
||
1129 | { |
||
1130 | $this->loadModel('ConversationsUsers'); |
||
1131 | |||
1132 | //Check the keyword to search. (For pagination) |
||
1133 | View Code Duplication | if (!empty($this->request->getData('search'))) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
1134 | $keyword = $this->request->getData('search'); |
||
1135 | $this->request->session()->write('Search.Conversations.Keyword', $keyword); |
||
1136 | } else { |
||
1137 | if ($this->request->session()->read('Search.Conversations.Keyword')) { |
||
0 ignored issues
–
show
The expression
$this->request->session(...Conversations.Keyword') of type string|null is loosely compared to true ; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.
In PHP, under loose comparison (like For '' == false // true
'' == null // true
'ab' == false // false
'ab' == null // false
// It is often better to use strict comparison
'' === false // false
'' === null // false
![]() |
|||
1138 | $keyword = $this->request->session()->read('Search.Conversations.Keyword'); |
||
1139 | } else { |
||
1140 | $keyword = ''; |
||
1141 | } |
||
1142 | } |
||
1143 | |||
1144 | //Pagination |
||
1145 | $this->paginate = [ |
||
1146 | 'maxLimit' => Configure::read('Conversations.conversations_per_page') |
||
1147 | ]; |
||
1148 | |||
1149 | $conversations = $this->ConversationsUsers |
||
0 ignored issues
–
show
The property
ConversationsUsers does not exist on object<App\Controller\ConversationsController> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
1150 | ->find() |
||
1151 | ->contain([ |
||
1152 | 'Users', |
||
1153 | 'Conversations', |
||
1154 | 'Conversations.Users' => function ($q) { |
||
1155 | return $q->find('medium'); |
||
1156 | }, |
||
1157 | 'Conversations.LastMessage', |
||
1158 | 'Conversations.LastMessageUser' |
||
1159 | ]) |
||
1160 | ->where([ |
||
1161 | 'ConversationsUsers.user_id' => $this->Auth->user('id'), |
||
1162 | 'Conversations.conversation_open <>' => 2 |
||
1163 | ]) |
||
1164 | ->andWhere(function ($q) use ($keyword) { |
||
1165 | return $q |
||
1166 | ->like('Conversations.title', "%$keyword%"); |
||
1167 | }) |
||
1168 | ->order([ |
||
1169 | 'ConversationsUsers.is_read' => 'ASC', |
||
1170 | 'ConversationsUsers.is_star' => 'DESC', |
||
1171 | 'Conversations.last_message_date' => 'DESC', |
||
1172 | ]); |
||
1173 | |||
1174 | $conversations = $this->paginate($conversations); |
||
1175 | |||
1176 | $this->set(compact('conversations', 'keyword')); |
||
1177 | } |
||
1178 | |||
1179 | /** |
||
1180 | * Action to render the maintenance page. |
||
1181 | * |
||
1182 | * @return void |
||
1183 | */ |
||
1184 | public function maintenance() |
||
1185 | { |
||
1186 | } |
||
1187 | } |
||
1188 |
Since your code implements the magic setter
_set
, this function will be called for any write access on an undefined variable. You can add the@property
annotation to your class or interface to document the existence of this variable.Since the property has write access only, you can use the @property-write annotation instead.
Of course, you may also just have mistyped another name, in which case you should fix the error.
See also the PhpDoc documentation for @property.