diff --git a/adapters/OctopushShortcodeAdapter.php b/adapters/OctopushShortcodeAdapter.php index 4147066..24c42e0 100644 --- a/adapters/OctopushShortcodeAdapter.php +++ b/adapters/OctopushShortcodeAdapter.php @@ -355,6 +355,7 @@ class OctopushShortcodeAdapter implements AdapterInterface $status = \models\Sended::STATUS_DELIVERED; break; + case 'NOT_ALLOWED': case 'INVALID_DESTINATION_ADDRESS': case 'OUT_OF_DATE': @@ -363,6 +364,7 @@ class OctopushShortcodeAdapter implements AdapterInterface $status = \models\Sended::STATUS_FAILED; break; + default: $status = \models\Sended::STATUS_UNKNOWN; diff --git a/adapters/OctopushVirtualNumberAdapter.php b/adapters/OctopushVirtualNumberAdapter.php index 8a36d96..f3b1aec 100644 --- a/adapters/OctopushVirtualNumberAdapter.php +++ b/adapters/OctopushVirtualNumberAdapter.php @@ -355,6 +355,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface $status = \models\Sended::STATUS_DELIVERED; break; + case 'NOT_ALLOWED': case 'INVALID_DESTINATION_ADDRESS': case 'OUT_OF_DATE': @@ -363,6 +364,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface $status = \models\Sended::STATUS_FAILED; break; + default: $status = \models\Sended::STATUS_UNKNOWN; diff --git a/adapters/OvhSmsShortcodeAdapter.php b/adapters/OvhSmsShortcodeAdapter.php index 10172a6..f23019a 100644 --- a/adapters/OvhSmsShortcodeAdapter.php +++ b/adapters/OvhSmsShortcodeAdapter.php @@ -347,11 +347,13 @@ namespace adapters; $status = \models\Sended::STATUS_DELIVERED; break; + case 2: case 16: $status = \models\Sended::STATUS_FAILED; break; + default: $status = \models\Sended::STATUS_UNKNOWN; diff --git a/adapters/OvhSmsVirtualNumberAdapter.php b/adapters/OvhSmsVirtualNumberAdapter.php index bc2d27d..48df00d 100644 --- a/adapters/OvhSmsVirtualNumberAdapter.php +++ b/adapters/OvhSmsVirtualNumberAdapter.php @@ -346,11 +346,13 @@ namespace adapters; $status = \models\Sended::STATUS_DELIVERED; break; + case 2: case 16: $status = \models\Sended::STATUS_FAILED; break; + default: $status = \models\Sended::STATUS_UNKNOWN; diff --git a/adapters/TestAdapter.php b/adapters/TestAdapter.php index 240ed32..1856a6e 100644 --- a/adapters/TestAdapter.php +++ b/adapters/TestAdapter.php @@ -257,10 +257,12 @@ namespace adapters; $return['status'] = \models\Sended::STATUS_DELIVERED; break; + case \models\Sended::STATUS_FAILED: $return['status'] = \models\Sended::STATUS_FAILED; break; + default: $return['status'] = \models\Sended::STATUS_UNKNOWN; diff --git a/adapters/TwilioVirtualNumberAdapter.php b/adapters/TwilioVirtualNumberAdapter.php index 3faac6a..4120bdc 100644 --- a/adapters/TwilioVirtualNumberAdapter.php +++ b/adapters/TwilioVirtualNumberAdapter.php @@ -325,10 +325,12 @@ class TwilioVirtualNumberAdapter implements AdapterInterface $status = \models\Sended::STATUS_DELIVERED; break; + case 'failed': $status = \models\Sended::STATUS_FAILED; break; + default: $status = \models\Sended::STATUS_UNKNOWN; diff --git a/controllers/internals/ConditionalGroup.php b/controllers/internals/ConditionalGroup.php index 4cba89d..e22707d 100644 --- a/controllers/internals/ConditionalGroup.php +++ b/controllers/internals/ConditionalGroup.php @@ -114,11 +114,11 @@ namespace controllers\internals; { $contact['datas'] = json_decode($contact['datas']); $contact = (object) $contact; - + //Add metas of contact by adding contact without datas $metas = clone $contact; - unset($metas->datas); - unset($metas->id_user); + $metas->datas = null; + $metas->id_user = null; $datas = ['contact' => $contact->datas, 'contact_metas' => $metas]; $is_valid = $ruler->evaluate_condition($condition, $datas); diff --git a/controllers/internals/Console.php b/controllers/internals/Console.php index dcb16d3..0ce0ac1 100644 --- a/controllers/internals/Console.php +++ b/controllers/internals/Console.php @@ -68,10 +68,11 @@ namespace controllers\internals; } /** - * Check if a user exists based on email + * Check if a user exists based on email. * - * @param string $email : User email - * @return exit code 1 on false, 0 else + * @param string $email : User email + * + * @return void : exit code 1 on false, 0 else */ public function user_exists(string $email) { @@ -79,6 +80,7 @@ namespace controllers\internals; $internal_user = new \controllers\internals\User($bdd); $user = $internal_user->get_by_email($email); + exit($user ? 0 : 1); } @@ -105,18 +107,20 @@ namespace controllers\internals; $api_key = $api_key ?? $internal_user->generate_random_api_key(); $success = $internal_user->update($user['id'], $email, $password, $admin, $api_key, $status, $encrypt_password); echo json_encode(['id' => $user['id']]); + exit($success ? 0 : 1); } $new_user_id = $internal_user->create($email, $password, $admin, $api_key, $status, $encrypt_password); echo json_encode(['id' => $new_user_id]); + exit($new_user_id ? 0 : 1); } /** * Update a user status. * - * @param string $id : User id + * @param string $id : User id * @param string $status : User status, default \models\User::STATUS_ACTIVE */ public function update_user_status(string $id, string $status) @@ -131,14 +135,14 @@ namespace controllers\internals; } $success = $internal_user->update_status($user['id'], $status); + exit($success ? 0 : 1); } - - + /** - * Delete a user + * Delete a user. * - * @param string $id : User id + * @param string $id : User id */ public function delete_user(string $id) { @@ -146,6 +150,7 @@ namespace controllers\internals; $internal_user = new \controllers\internals\User($bdd); $success = $internal_user->delete($id); + exit($success ? 0 : 1); } } diff --git a/controllers/internals/ExpressionProvider.php b/controllers/internals/ExpressionProvider.php index b7cb49b..fa40361 100644 --- a/controllers/internals/ExpressionProvider.php +++ b/controllers/internals/ExpressionProvider.php @@ -27,14 +27,14 @@ class ExpressionProvider implements ExpressionFunctionProviderInterface { return null; }); - + //Exists must be personnalized because it inverse is_null - $exists = new ExpressionFunction('exists', function ($var) + $exists = new ExpressionFunction('exists', function ($str) { - return sprintf('!is_null(%1$s)', $str); + return sprintf('isset(%1$s)', $str); }, function ($arguments, $var) { - return null !== $var; + return isset($var); }); return [ diff --git a/controllers/internals/Mailer.php b/controllers/internals/Mailer.php index aed0c8d..052b6ef 100755 --- a/controllers/internals/Mailer.php +++ b/controllers/internals/Mailer.php @@ -52,7 +52,7 @@ class Mailer extends \descartes\Controller * @param array $destinations : Destinations address * @param string $subject : Message subject * @param string $message : Message - * @param ?string $alt_message : Alt Message if no html support. Null if message is not html. + * @param ?string $alt_message : Alt Message for clients with no html support. Use default (null) if mail to send is textonly and not html. * @param array $attachments : List of path to attachment files * * @return bool : false on error, true else @@ -79,7 +79,7 @@ class Mailer extends \descartes\Controller if ($alt_message) { - $mail->isHTML($html); + $mail->isHTML(true); $mail->AltBody = $alt_message; } diff --git a/controllers/internals/Phone.php b/controllers/internals/Phone.php index 68b9429..80cc079 100644 --- a/controllers/internals/Phone.php +++ b/controllers/internals/Phone.php @@ -60,9 +60,9 @@ namespace controllers\internals; * @param string $adapter : The adapter to use the phone * @param string json $adapter_datas : A JSON string representing adapter's datas (for example credentials for an api) * - * @return bool : false on error, true on success + * @return bool|int : false on error, new id on success */ - public function create(int $id_user, string $name, string $adapter, string $adapter_datas): bool + public function create(int $id_user, string $name, string $adapter, string $adapter_datas) { $phone = [ 'id_user' => $id_user, @@ -71,7 +71,7 @@ namespace controllers\internals; 'adapter_datas' => $adapter_datas, ]; - return (bool) $this->get_model()->insert($phone); + return $this->get_model()->insert($phone); } /** diff --git a/controllers/internals/Scheduled.php b/controllers/internals/Scheduled.php index 9c9b596..7f4ac6a 100644 --- a/controllers/internals/Scheduled.php +++ b/controllers/internals/Scheduled.php @@ -244,7 +244,7 @@ namespace controllers\internals; if (!isset($users_phones[$scheduled['id_user']])) { $phones = $internal_phone->gets_for_user($scheduled['id_user']); - $users_phones[$scheduled['id_user']] = $phones ? $phones : []; + $users_phones[$scheduled['id_user']] = $phones ?: []; } $phone_to_use = null; @@ -335,14 +335,12 @@ namespace controllers\internals; if ((int) ($users_settings[$scheduled['id_user']]['templating'] ?? false)) { $contact['datas'] = json_decode($contact['datas'], true); - + //Add metas of contact by adding contact without datas $metas = $contact; - unset($metas['datas']); - unset($metas['id_user']); - - $datas = ['contact' => $contact['datas'], 'contact_metas' => $metas]; + unset($metas['datas'], $metas['id_user']); + $datas = ['contact' => $contact['datas'], 'contact_metas' => $metas]; $render = $internal_templating->render($scheduled['text'], $datas); diff --git a/controllers/internals/Tool.php b/controllers/internals/Tool.php index f1bdb75..ad48153 100644 --- a/controllers/internals/Tool.php +++ b/controllers/internals/Tool.php @@ -97,26 +97,32 @@ namespace controllers\internals; $logo = 'fa-user'; break; + case 'CONTACT_ADD': $logo = 'fa-user'; break; + case 'GROUP_ADD': $logo = 'fa-group'; break; + case 'CONDITIONAL_GROUP_ADD': $logo = 'fa-bullseye'; break; + case 'SCHEDULED_ADD': $logo = 'fa-calendar'; break; + case 'COMMAND_ADD': $logo = 'fa-terminal'; break; + default: $logo = 'fa-question'; } @@ -169,7 +175,8 @@ namespace controllers\internals; if (!isset($_SESSION['connect']) || !$_SESSION['connect']) { header('Location: /'); - die(); + + exit(); } } @@ -217,26 +224,32 @@ namespace controllers\internals; $result['content'] = 'Impossible de télécharger le fichier car il dépasse les ' . ini_get('upload_max_filesize') / (1000 * 1000) . ' Mégaoctets.'; break; + case UPLOAD_ERR_FORM_SIZE: $result['content'] = 'Le fichier dépasse la limite de taille.'; break; + case UPLOAD_ERR_PARTIAL: $result['content'] = 'L\'envoi du fichier a été interrompu.'; break; + case UPLOAD_ERR_NO_FILE: $result['content'] = 'Aucun fichier n\'a été envoyé.'; break; + case UPLOAD_ERR_NO_TMP_DIR: $result['content'] = 'Le serveur ne dispose pas de fichier temporaire permettant l\'envoi de fichiers.'; break; + case UPLOAD_ERR_CANT_WRITE: $result['content'] = 'Impossible d\'envoyer le fichier car il n\'y a plus de place sur le serveur.'; break; + case UPLOAD_ERR_EXTENSION: $result['content'] = 'Le serveur a interrompu l\'envoi du fichier.'; @@ -284,26 +297,32 @@ namespace controllers\internals; $result['content'] = 'Impossible de télécharger le fichier car il dépasse les ' . ini_get('upload_max_filesize') / (1000 * 1000) . ' Mégaoctets.'; break; + case UPLOAD_ERR_FORM_SIZE: $result['content'] = 'Le fichier dépasse la limite de taille.'; break; + case UPLOAD_ERR_PARTIAL: $result['content'] = 'L\'envoi du fichier a été interrompu.'; break; + case UPLOAD_ERR_NO_FILE: $result['content'] = 'Aucun fichier n\'a été envoyé.'; break; + case UPLOAD_ERR_NO_TMP_DIR: $result['content'] = 'Le serveur ne dispose pas de fichier temporaire permettant l\'envoi de fichiers.'; break; + case UPLOAD_ERR_CANT_WRITE: $result['content'] = 'Impossible d\'envoyer le fichier car il n\'y a plus de place sur le serveur.'; break; + case UPLOAD_ERR_EXTENSION: $result['content'] = 'Le serveur a interrompu l\'envoi du fichier.'; diff --git a/controllers/publics/Api.php b/controllers/publics/Api.php index b93d612..d97beba 100644 --- a/controllers/publics/Api.php +++ b/controllers/publics/Api.php @@ -35,7 +35,7 @@ namespace controllers\publics; ]; const ERROR_MESSAGES = [ - 'INVALID_CREDENTIALS' => 'Invalid API Key. Please provide a valid API key as GET or POST parameter "api_key".', + 'INVALID_CREDENTIALS' => 'Invalid API Key. Please provide a valid API key as GET or POST parameter "api_key" or a HTTP "X-Api-Key".', 'INVALID_PARAMETER' => 'You have specified an invalid parameter : ', 'MISSING_PARAMETER' => 'One require parameter is missing : ', 'CANNOT_CREATE' => 'Cannot create a new entry.', @@ -51,6 +51,7 @@ namespace controllers\publics; private $internal_contact; private $internal_group; private $internal_conditional_group; + private $internal_adapter; private $user; /** @@ -71,6 +72,7 @@ namespace controllers\publics; $this->internal_contact = new \controllers\internals\Contact($bdd); $this->internal_group = new \controllers\internals\Group($bdd); $this->internal_conditional_group = new \controllers\internals\ConditionalGroup($bdd); + $this->internal_adapter = new \controllers\internals\Adapter(); //If no user, quit with error $this->user = false; @@ -303,4 +305,174 @@ namespace controllers\publics; return $this->json($return); } + + /** + * Create a new phone. + * + * @param string $_POST['name'] : Phone name + * @param string $_POST['adapter'] : Phone adapter + * @param array $_POST['adapter_datas'] : Phone adapter datas + * + * @return int : id phone the new phone on success + */ + public function post_phone() + { + $return = self::DEFAULT_RETURN; + + $name = $_POST['name'] ?? false; + $adapter = $_POST['adapter'] ?? false; + $adapter_datas = !empty($_POST['adapter_datas']) ? $_POST['adapter_datas'] : []; + + if (!$name) + { + $return['error'] = self::ERROR_CODES['MISSING_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['MISSING_PARAMETER'] . ' You must specify phone name.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + if (!$adapter) + { + $return['error'] = self::ERROR_CODES['MISSING_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['MISSING_PARAMETER'] . ' You must specify adapter name.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + $name_exist = $this->internal_phone->get_by_name($name); + if ($name_exist) + { + $return['error'] = self::ERROR_CODES['INVALID_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['INVALID_PARAMETER'] . ' This name is already used for another phone.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + $adapters = $this->internal_adapter->list_adapters(); + $find_adapter = false; + foreach ($adapters as $metas) + { + if ($metas['meta_classname'] === $adapter) + { + $find_adapter = $metas; + + break; + } + } + + if (!$find_adapter) + { + $return['error'] = self::ERROR_CODES['INVALID_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['INVALID_PARAMETER'] . ' adapter. Adapter "' . $adapter . '" does not exists.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + //If missing required data fields, error + foreach ($find_adapter['meta_datas_fields'] as $field) + { + if (false === $field['required']) + { + continue; + } + + if (!empty($adapter_datas[$field['name']])) + { + continue; + } + + $return['error'] = self::ERROR_CODES['MISSING_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['MISSING_PARAMETER'] . ' You must speicify param ' . $field['name'] . ' (' . $field['description'] . ') for this phone.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + //If field phone number is invalid + foreach ($find_adapter['meta_datas_fields'] as $field) + { + if (false === ($field['number'] ?? false)) + { + continue; + } + + if (!empty($adapter_datas[$field['name']])) + { + $adapter_datas[$field['name']] = \controllers\internals\Tool::parse_phone($adapter_datas[$field['name']]); + + if ($adapter_datas[$field['name']]) + { + continue; + } + } + + $return['error'] = self::ERROR_CODES['INVALID_PARAMETER']; + $return['message'] = self::ERROR_MESSAGES['INVALID_PARAMETER'] . ' field ' . $field['name'] . ' is not a valid phone number.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + $adapter_datas = json_encode($adapter_datas); + + //Check adapter is working correctly with thoses names and datas + $adapter_classname = $find_adapter['meta_classname']; + $adapter_instance = new $adapter_classname($adapter_datas); + $adapter_working = $adapter_instance->test(); + + if (!$adapter_working) + { + $return['error'] = self::ERROR_CODES['CANNOT_CREATE']; + $return['message'] = self::ERROR_MESSAGES['CANNOT_CREATE'] . ' : Impossible to validate this phone, verify adapters parameters.'; + $this->auto_http_code(false); + + return $this->json($return); + } + + $phone_id = $this->internal_phone->create($this->user['id'], $name, $adapter, $adapter_datas); + if (false === $phone_id) + { + $return['error'] = self::ERROR_CODES['CANNOT_CREATE']; + $return['message'] = self::ERROR_MESSAGES['CANNOT_CREATE']; + $this->auto_http_code(false); + + return $this->json($return); + } + + $return['response'] = $phone_id; + $this->auto_http_code(true); + + return $this->json($return); + } + + /** + * Delete a phone. + * + * @param int $id : Id of phond to delete + * + * @return bool : void + */ + public function delete_phone(int $id) + { + $return = self::DEFAULT_RETURN; + $success = $this->internal_phone->delete_for_user($this->user['id'], $id); + + if (!$success) + { + $return['error'] = self::ERROR_CODES['CANNOT_DELETE']; + $return['message'] = self::ERROR_MESSAGES['CANNOT_DELETE']; + $this->auto_http_code(false); + + return $this->json($return); + } + + $return['response'] = true; + $this->auto_http_code(true); + + return $this->json($return); + } } diff --git a/controllers/publics/Callback.php b/controllers/publics/Callback.php index 9f5b6ae..a41df9e 100644 --- a/controllers/publics/Callback.php +++ b/controllers/publics/Callback.php @@ -52,6 +52,7 @@ use Monolog\Logger; http_response_code(401); echo json_encode(['error' => 'Invalid API key. You must provide a valid GET or POST api_key param.']); $this->logger->error('Callback call failed with invalid api key : ' . $api_key); + exit(1); } diff --git a/controllers/publics/Command.php b/controllers/publics/Command.php index 7536aa9..27a42e7 100644 --- a/controllers/publics/Command.php +++ b/controllers/publics/Command.php @@ -44,9 +44,9 @@ namespace controllers\publics; { $this->render('command/list'); } - + /** - * Return commands as json + * Return commands as json. */ public function list_json() { diff --git a/controllers/publics/ConditionalGroup.php b/controllers/publics/ConditionalGroup.php index a486a66..4fc0fd5 100644 --- a/controllers/publics/ConditionalGroup.php +++ b/controllers/publics/ConditionalGroup.php @@ -48,9 +48,9 @@ namespace controllers\publics; { $this->render('conditional_group/list'); } - + /** - * Return conditionnals groups as json + * Return conditionnals groups as json. */ public function list_json() { diff --git a/controllers/publics/Contact.php b/controllers/publics/Contact.php index e931750..3e93380 100644 --- a/controllers/publics/Contact.php +++ b/controllers/publics/Contact.php @@ -42,9 +42,9 @@ namespace controllers\publics; { return $this->render('contact/list'); } - + /** - * Return contacts as json + * Return contacts as json. */ public function list_json() { @@ -288,16 +288,19 @@ namespace controllers\publics; //Try to import file $invalid_type = false; + switch ($read_file['mime_type']) { case 'text/csv': $result = $this->internal_contact->import_csv($id_user, $read_file['content']); break; + case 'application/json': $result = $this->internal_contact->import_json($id_user, $read_file['content']); break; + default: $invalid_type = true; } @@ -338,16 +341,19 @@ namespace controllers\publics; //Try to export contacts $invalid_type = false; + switch ($format) { case 'csv': $result = $this->internal_contact->export_csv($id_user); break; + case 'json': $result = $this->internal_contact->export_json($id_user); break; + default: $invalid_type = true; } diff --git a/controllers/publics/Discussion.php b/controllers/publics/Discussion.php index 81e540e..7c7b79a 100644 --- a/controllers/publics/Discussion.php +++ b/controllers/publics/Discussion.php @@ -48,9 +48,9 @@ namespace controllers\publics; { $this->render('discussion/list'); } - + /** - * Return discussions as json + * Return discussions as json. */ public function list_json() { diff --git a/controllers/publics/Event.php b/controllers/publics/Event.php index 84445c6..3d6d9a4 100644 --- a/controllers/publics/Event.php +++ b/controllers/publics/Event.php @@ -44,7 +44,7 @@ namespace controllers\publics; } /** - * Return events as json + * Return events as json. */ public function list_json() { @@ -74,7 +74,7 @@ namespace controllers\publics; return $this->redirect(\descartes\Router::url('Event', 'list')); } - + if (!\controllers\internals\Tool::is_admin()) { \FlashMessage\FlashMessage::push('danger', 'Vous devez être administrateur pour supprimer un event !'); diff --git a/controllers/publics/Group.php b/controllers/publics/Group.php index 95dbf47..97dbc52 100644 --- a/controllers/publics/Group.php +++ b/controllers/publics/Group.php @@ -44,10 +44,9 @@ namespace controllers\publics; { $this->render('group/list'); } - - + /** - * Return groups as json + * Return groups as json. */ public function list_json() { diff --git a/controllers/publics/Phone.php b/controllers/publics/Phone.php index b942062..9843d4b 100644 --- a/controllers/publics/Phone.php +++ b/controllers/publics/Phone.php @@ -73,7 +73,7 @@ class Phone extends \descartes\Controller } /** - * Return phones as json with additionnals datas about callbacks + * Return phones as json with additionnals datas about callbacks. */ public function list_json() { @@ -245,10 +245,6 @@ class Phone extends \descartes\Controller } } - var_dump($field); - var_dump($adapter_datas[$field['name']]); - die(); - \FlashMessage\FlashMessage::push('danger', 'Vous avez fourni un numéro de téléphone avec un format invalide.'); return $this->redirect(\descartes\Router::url('Phone', 'add')); diff --git a/controllers/publics/Received.php b/controllers/publics/Received.php index 28bd2b4..e5ba67e 100644 --- a/controllers/publics/Received.php +++ b/controllers/publics/Received.php @@ -43,9 +43,9 @@ namespace controllers\publics; { $this->render('received/list', ['is_unread' => false]); } - + /** - * Return received as json + * Return received as json. */ public function list_json() { @@ -66,9 +66,9 @@ namespace controllers\publics; { $this->render('received/list', ['is_unread' => true]); } - + /** - * Return unred received as json + * Return unred received as json. */ public function list_unread_json() { @@ -83,15 +83,15 @@ namespace controllers\publics; } /** - * Mark messages as + * Mark messages as. * - * @param string $status : New status of the message, read or unread + * @param string $status : New status of the message, read or unread * @param array int $_GET['ids'] : Ids of receiveds to delete * @param mixed $csrf * * @return boolean; */ - public function mark_as ($status, $csrf) + public function mark_as($status, $csrf) { if (!$this->verify_csrf($csrf)) { @@ -99,15 +99,15 @@ namespace controllers\publics; return $this->redirect(\descartes\Router::url('Received', 'list')); } - + $ids = $_GET['ids'] ?? []; foreach ($ids as $id) { - if ($status === \models\Received::STATUS_UNREAD) + if (\models\Received::STATUS_UNREAD === $status) { $this->internal_received->mark_as_unread_for_user($_SESSION['user']['id'], $id); } - elseif ($status === \models\Received::STATUS_READ) + elseif (\models\Received::STATUS_READ === $status) { $this->internal_received->mark_as_read_for_user($_SESSION['user']['id'], $id); } diff --git a/controllers/publics/Scheduled.php b/controllers/publics/Scheduled.php index 8755cf6..fba8db9 100644 --- a/controllers/publics/Scheduled.php +++ b/controllers/publics/Scheduled.php @@ -49,9 +49,9 @@ namespace controllers\publics; { $this->render('scheduled/list'); } - + /** - * Return scheduleds as json + * Return scheduleds as json. */ public function list_json() { diff --git a/controllers/publics/Sended.php b/controllers/publics/Sended.php index 58c5913..fa0a67c 100644 --- a/controllers/publics/Sended.php +++ b/controllers/publics/Sended.php @@ -18,6 +18,7 @@ namespace controllers\publics; { private $internal_sended; private $internal_phone; + private $internal_contact; /** * Cette fonction est appelée avant toute les autres : @@ -46,7 +47,7 @@ namespace controllers\publics; } /** - * Return sendeds as json + * Return sendeds as json. */ public function list_json() { @@ -59,7 +60,6 @@ namespace controllers\publics; header('Content-Type: application/json'); echo json_encode(['data' => $entities]); } - /** * Cette fonction va supprimer une liste de sendeds. diff --git a/controllers/publics/SmsStop.php b/controllers/publics/SmsStop.php index 1dcb102..38dd40a 100644 --- a/controllers/publics/SmsStop.php +++ b/controllers/publics/SmsStop.php @@ -41,9 +41,9 @@ namespace controllers\publics; { $this->render('smsstop/list'); } - + /** - * Return smsstops as json + * Return smsstops as json. */ public function list_json() { diff --git a/controllers/publics/Templating.php b/controllers/publics/Templating.php index 50b475e..c8f78fb 100644 --- a/controllers/publics/Templating.php +++ b/controllers/publics/Templating.php @@ -70,8 +70,7 @@ namespace controllers\publics; //Add metas of contact by adding contact without datas $metas = $contact; - unset($metas['datas']); - unset($metas['id_user']); + unset($metas['datas'], $metas['id_user']); $datas = [ 'contact' => $contact['datas'], diff --git a/controllers/publics/User.php b/controllers/publics/User.php index bd6132c..2b22a6a 100644 --- a/controllers/publics/User.php +++ b/controllers/publics/User.php @@ -44,9 +44,9 @@ class User extends \descartes\Controller { $this->render('user/list'); } - + /** - * Return users as json + * Return users as json. */ public function list_json() { diff --git a/controllers/publics/Webhook.php b/controllers/publics/Webhook.php index 20ad309..836b3ee 100644 --- a/controllers/publics/Webhook.php +++ b/controllers/publics/Webhook.php @@ -38,9 +38,9 @@ namespace controllers\publics; { $this->render('webhook/list'); } - + /** - * Return commands as json + * Return commands as json. */ public function list_json() { diff --git a/daemons/AbstractDaemon.php b/daemons/AbstractDaemon.php index 93e3530..9ff146f 100644 --- a/daemons/AbstractDaemon.php +++ b/daemons/AbstractDaemon.php @@ -125,6 +125,7 @@ abstract class AbstractDaemon if (-1 === $sid) { //Error $this->logger->critical("Cannot make the child process with pid {$pid} independent."); + exit(1); } @@ -138,6 +139,7 @@ abstract class AbstractDaemon if (!$success) { $this->logger->critical('Cannot create PID directory : ' . $this->pid_dir); + exit(2); } } diff --git a/models/Group.php b/models/Group.php index eb47dae..d247b93 100644 --- a/models/Group.php +++ b/models/Group.php @@ -15,9 +15,9 @@ namespace models; { /** * Return a list of groups for a user. - * Add a column nb_contacts + * Add a column nb_contacts. * - * @param int $id_user : user id + * @param int $id_user : user id * @param ?int $limit : Number of entry to return or null * @param ?int $offset : Number of entry to ignore or null * @@ -30,28 +30,29 @@ namespace models; FROM `group` as g LEFT JOIN group_contact as gc ON g.id = gc.id_group - WHERE id_user = :id_user + WHERE id_user = :id_user GROUP BY g.id '; - if ($limit !== null) + if (null !== $limit) { $limit = (int) $limit; $query .= ' LIMIT ' . $limit; - if ($offset !== null) + if (null !== $offset) { $offset = (int) $offset; $query .= ' OFFSET ' . $offset; } } - + $params = [ 'id_user' => $id_user, ]; return $this->_run_query($query, $params); } + /** * Return a group by his name for a user. * @@ -102,7 +103,7 @@ namespace models; public function get_contacts(int $id_group) { $query = ' - SELECT * + SELECT * FROM `contact` WHERE id IN (SELECT id_contact FROM `group_contact` WHERE id_group = :id_group) '; diff --git a/models/Media.php b/models/Media.php index 68ca4df..253ed44 100644 --- a/models/Media.php +++ b/models/Media.php @@ -26,7 +26,7 @@ namespace models; */ public function get_for_user(int $id_user, int $id) { - $query = ' + $query = ' SELECT * FROM `' . $this->get_table_name() . '` WHERE id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) AND id = :id @@ -51,7 +51,7 @@ namespace models; */ public function gets_for_user(int $id_user) { - $query = ' + $query = ' SELECT * FROM `' . $this->get_table_name() . '` WHERE id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) '; @@ -73,7 +73,7 @@ namespace models; */ public function get_for_scheduled_and_user(int $id_user, int $id_scheduled) { - $query = ' + $query = ' SELECT * FROM `' . $this->get_table_name() . '` WHERE id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) AND id_scheduled = :id_scheduled @@ -105,7 +105,7 @@ namespace models; $limit = (int) $limit; $offset = (int) $offset; - $query = ' + $query = ' SELECT * FROM media WHERE id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) LIMIT ' . $limit . ' OFFSET ' . $offset; @@ -127,7 +127,7 @@ namespace models; */ public function gets_in_for_user(int $id_user, $ids) { - $query = ' + $query = ' SELECT * FROM media WHERE id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) AND id '; @@ -151,7 +151,7 @@ namespace models; */ public function delete_for_user(int $id_user, int $id) { - $query = ' + $query = ' DELETE FROM media WHERE id = :id AND id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) @@ -172,7 +172,7 @@ namespace models; */ public function delete_for_scheduled_and_user(int $id_user, int $id_scheduled) { - $query = ' + $query = ' DELETE FROM media WHERE id_scheduled = :id_scheduled AND id_scheduled IN (SELECT id FROM scheduled WHERE id_user = :id_user) diff --git a/models/Received.php b/models/Received.php index aa76325..23a8c05 100644 --- a/models/Received.php +++ b/models/Received.php @@ -18,12 +18,12 @@ namespace models; { const STATUS_UNREAD = 'unread'; const STATUS_READ = 'read'; - + /** * Return a list of received messages for a user. - * Add a column contact_name and phone_name when available + * Add a column contact_name and phone_name when available. * - * @param int $id_user : user id + * @param int $id_user : user id * @param ?int $limit : Number of entry to return or null * @param ?int $offset : Number of entry to ignore or null * @@ -42,31 +42,30 @@ namespace models; WHERE received.id_user = :id_user '; - if ($limit !== null) + if (null !== $limit) { $limit = (int) $limit; $query .= ' LIMIT ' . $limit; - if ($offset !== null) + if (null !== $offset) { $offset = (int) $offset; $query .= ' OFFSET ' . $offset; } } - + $params = [ 'id_user' => $id_user, ]; return $this->_run_query($query, $params); } - - + /** * Return a list of unread received messages for a user. - * Add a column contact_name and phone_name when available + * Add a column contact_name and phone_name when available. * - * @param int $id_user : user id + * @param int $id_user : user id * @param ?int $limit : Number of entry to return or null * @param ?int $offset : Number of entry to ignore or null * @@ -86,18 +85,18 @@ namespace models; AND status = :status '; - if ($limit !== null) + if (null !== $limit) { $limit = (int) $limit; $query .= ' LIMIT ' . $limit; - if ($offset !== null) + if (null !== $offset) { $offset = (int) $offset; $query .= ' OFFSET ' . $offset; } } - + $params = [ 'id_user' => $id_user, 'status' => self::STATUS_UNREAD, @@ -190,7 +189,7 @@ namespace models; */ public function count_by_day_since_for_user(int $id_user, $date) { - $query = " + $query = " SELECT COUNT(id) as nb, DATE_FORMAT(at, '%Y-%m-%d') as at_ymd FROM received WHERE at > :date @@ -215,7 +214,7 @@ namespace models; */ public function get_discussions_for_user(int $id_user) { - $query = ' + $query = ' SELECT discussions.at, discussions.number, contact.name as contact_name FROM ( SELECT at, destination as number FROM sended @@ -246,7 +245,7 @@ namespace models; */ public function get_since_by_date_for_user(int $id_user, $date) { - $query = " + $query = " SELECT * FROM received WHERE at > STR_TO_DATE(:date, '%Y-%m-%d %h:%i:%s') @@ -272,7 +271,7 @@ namespace models; */ public function get_since_by_date_for_origin_and_user(int $id_user, $date, string $origin) { - $query = " + $query = " SELECT * FROM received WHERE at > STR_TO_DATE(:date, '%Y-%m-%d %h:%i:%s') diff --git a/models/Sended.php b/models/Sended.php index 8d5e61d..f0235ba 100644 --- a/models/Sended.php +++ b/models/Sended.php @@ -19,12 +19,12 @@ namespace models; const STATUS_UNKNOWN = 'unknown'; const STATUS_DELIVERED = 'delivered'; const STATUS_FAILED = 'failed'; - + /** * Return a list of sended messages for a user. - * Add a column contact_name and phone_name when available + * Add a column contact_name and phone_name when available. * - * @param int $id_user : user id + * @param int $id_user : user id * @param ?int $limit : Number of entry to return or null * @param ?int $offset : Number of entry to ignore or null * @@ -43,18 +43,18 @@ namespace models; WHERE sended.id_user = :id_user '; - if ($limit !== null) + if (null !== $limit) { $limit = (int) $limit; $query .= ' LIMIT ' . $limit; - if ($offset !== null) + if (null !== $offset) { $offset = (int) $offset; $query .= ' OFFSET ' . $offset; } } - + $params = [ 'id_user' => $id_user, ]; @@ -137,7 +137,7 @@ namespace models; */ public function count_by_day_since_for_user($id_user, $date) { - $query = " + $query = " SELECT COUNT(id) as nb, DATE_FORMAT(at, '%Y-%m-%d') as at_ymd FROM sended WHERE at > :date @@ -163,7 +163,7 @@ namespace models; */ public function get_since_by_date_for_user($date, $id_user) { - $query = " + $query = " SELECT * FROM sended WHERE at > STR_TO_DATE(:date, '%Y-%m-%d %h:%i:%s') diff --git a/models/StandardModel.php b/models/StandardModel.php index 8ae077f..8c3b07c 100644 --- a/models/StandardModel.php +++ b/models/StandardModel.php @@ -93,9 +93,9 @@ namespace models; return []; } - $query = ' + $query = ' SELECT * FROM `' . $this->get_table_name() . '` - WHERE id_user = :id_user + WHERE id_user = :id_user AND id '; $params = []; diff --git a/models/User.php b/models/User.php index ff3c659..1394855 100644 --- a/models/User.php +++ b/models/User.php @@ -67,7 +67,7 @@ namespace models; } /** - * Delete a user + * Delete a user. * * @param int $id : Id de l'utilisateur a supprimer * diff --git a/routes.php b/routes.php index 08e4fa4..e359e2d 100644 --- a/routes.php +++ b/routes.php @@ -182,6 +182,12 @@ 'delete_scheduled' => [ '/api/scheduled/{id}/', ], + 'post_phone' => [ + '/api/phone/', + ], + 'delete_phone' => [ + '/api/phone/{id}/', + ], ], ); diff --git a/templates/phone/list.php b/templates/phone/list.php index 19cffce..c1f934b 100644 --- a/templates/phone/list.php +++ b/templates/phone/list.php @@ -88,7 +88,7 @@ jQuery(document).ready(function () "columns" : [ {data: 'id', render: jQuery.fn.dataTable.render.text()}, {data: 'name', render: jQuery.fn.dataTable.render.text()}, - {data: 'name', render: jQuery.fn.dataTable.render.text()}, + {data: 'adapter', render: jQuery.fn.dataTable.render.text()}, { data: '_', render: function (data, type, row, meta) { diff --git a/tests/php-cs-fixer/php-cs-fixer.phar b/tests/php-cs-fixer/php-cs-fixer.phar index 638b218..5f7b5f0 100644 Binary files a/tests/php-cs-fixer/php-cs-fixer.phar and b/tests/php-cs-fixer/php-cs-fixer.phar differ