diff --git a/.gitignore b/.gitignore index 939d0c2..78ab9f5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ .php_cs.cache .credentials .credentials* -.vscode/ vendor/ scripts/ composer.lock diff --git a/adapters/OctopushShortcodeAdapter.php b/adapters/OctopushShortcodeAdapter.php index afa4802..d7ed533 100644 --- a/adapters/OctopushShortcodeAdapter.php +++ b/adapters/OctopushShortcodeAdapter.php @@ -38,9 +38,9 @@ class OctopushShortcodeAdapter implements AdapterInterface * Sender name to use instead of shortcode. */ private $sender; - + /** - * Octopush SMS type. + * Octopush SMS type */ private $sms_type; @@ -49,6 +49,7 @@ class OctopushShortcodeAdapter implements AdapterInterface */ private $api_url = 'https://api.octopush.com/v1/public'; + /** * Adapter constructor, called when instanciated by RaspiSMS. * @@ -63,7 +64,7 @@ class OctopushShortcodeAdapter implements AdapterInterface $this->api_key = $this->data['api_key']; $this->sms_type = self::SMS_TYPE_LOWCOST; - if (($this->data['sms_type'] ?? false) && 'premium' === $this->data['sms_type']) + if (($this->data['sms_type'] ?? false) && $this->data['sms_type'] === 'premium') { $this->sms_type = self::SMS_TYPE_PREMIUM; } @@ -233,7 +234,7 @@ class OctopushShortcodeAdapter implements AdapterInterface $data = [ 'text' => $text, - 'recipients' => [['phone_number' => $destination]], + 'recipients' => [['phone_number' => $destination]], 'sms_type' => $this->sms_type, 'purpose' => 'alert', ]; @@ -244,11 +245,12 @@ class OctopushShortcodeAdapter implements AdapterInterface } else { - $data['with_replies'] = 'True'; + $data['with_replies'] = "True"; } $data = json_encode($data); + $endpoint = $this->api_url . '/sms-campaign/send'; $curl = curl_init(); @@ -258,7 +260,7 @@ class OctopushShortcodeAdapter implements AdapterInterface curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - + $curl_response = curl_exec($curl); $http_code = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); @@ -330,7 +332,7 @@ class OctopushShortcodeAdapter implements AdapterInterface { return false; } - + $headers = [ 'api-login: ' . $this->login, 'api-key: ' . $this->api_key, @@ -348,7 +350,7 @@ class OctopushShortcodeAdapter implements AdapterInterface $http_code = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); - if (200 !== $http_code) + if ($http_code !== 200) { return false; } @@ -367,13 +369,14 @@ class OctopushShortcodeAdapter implements AdapterInterface header('Content-Encoding: none'); header('Content-Length: 0'); + $input = file_get_contents('php://input'); $content = json_decode($input, true); if (null === $content) { return false; } - + $uid = $content['message_id'] ?? false; $status = $content['status'] ?? false; @@ -382,6 +385,7 @@ class OctopushShortcodeAdapter implements AdapterInterface return false; } + switch ($status) { case 'DELIVERED': @@ -416,14 +420,14 @@ class OctopushShortcodeAdapter implements AdapterInterface header('Connection: close'); header('Content-Encoding: none'); header('Content-Length: 0'); - + $input = file_get_contents('php://input'); $content = json_decode($input, true); if (null === $content) { $response['error'] = true; $response['error_message'] = 'Cannot read input data from callback request.'; - + return $response; } diff --git a/adapters/OctopushVirtualNumberAdapter.php b/adapters/OctopushVirtualNumberAdapter.php index d758f8a..1715937 100644 --- a/adapters/OctopushVirtualNumberAdapter.php +++ b/adapters/OctopushVirtualNumberAdapter.php @@ -35,7 +35,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface private $api_key; /** - * Octopush SMS type. + * Octopush SMS type */ private $sms_type; @@ -45,10 +45,11 @@ class OctopushVirtualNumberAdapter implements AdapterInterface private $api_url = 'https://api.octopush.com/v1/public'; /** - * Octopush phone number. + * Octopush phone number */ private $number; + /** * Adapter constructor, called when instanciated by RaspiSMS. * @@ -64,7 +65,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface $this->number = $this->data['number']; $this->sms_type = self::SMS_TYPE_LOWCOST; - if (($this->data['sms_type'] ?? false) && 'premium' === $this->data['sms_type']) + if (($this->data['sms_type'] ?? false) && $this->data['sms_type'] === 'premium') { $this->sms_type = self::SMS_TYPE_PREMIUM; } @@ -117,6 +118,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface Envoi de SMS avec un numéro virtuel en utilisant Octopush. Pour trouver vos clés API Octopush cliquez ici.
Pour plus d\'information sur l\'utilisation de ce téléphone, reportez-vous à la documentation sur les téléphones "Octopush Numéro Virtuel". '; + } /** @@ -152,7 +154,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface 'description' => 'Type de SMS à employer coté Octopush, rentrez "low cost" ou "premium" selon le type de SMS que vous souhaitez employer. Laissez vide pour utiliser par défaut des SMS low cost.', 'required' => false, ], - ]; + ]; } /** @@ -231,15 +233,16 @@ class OctopushVirtualNumberAdapter implements AdapterInterface $data = [ 'text' => $text, - 'recipients' => [['phone_number' => $destination]], + 'recipients' => [['phone_number' => $destination]], 'sms_type' => $this->sms_type, 'purpose' => 'alert', 'sender' => $this->number, - 'with_replies' => 'True', + 'with_replies' => "True", ]; $data = json_encode($data); + $endpoint = $this->api_url . '/sms-campaign/send'; $curl = curl_init(); @@ -249,7 +252,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - + $curl_response = curl_exec($curl); $http_code = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); @@ -322,7 +325,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface { return false; } - + $headers = [ 'api-login: ' . $this->login, 'api-key: ' . $this->api_key, @@ -340,7 +343,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface $http_code = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); - if (200 !== $http_code) + if ($http_code !== 200) { return false; } @@ -359,13 +362,14 @@ class OctopushVirtualNumberAdapter implements AdapterInterface header('Content-Encoding: none'); header('Content-Length: 0'); + $input = file_get_contents('php://input'); $content = json_decode($input, true); if (null === $content) { return false; } - + $uid = $content['message_id'] ?? false; $status = $content['status'] ?? false; @@ -374,6 +378,7 @@ class OctopushVirtualNumberAdapter implements AdapterInterface return false; } + switch ($status) { case 'DELIVERED': @@ -408,14 +413,14 @@ class OctopushVirtualNumberAdapter implements AdapterInterface header('Connection: close'); header('Content-Encoding: none'); header('Content-Length: 0'); - + $input = file_get_contents('php://input'); $content = json_decode($input, true); if (null === $content) { $response['error'] = true; $response['error_message'] = 'Cannot read input data from callback request.'; - + return $response; } diff --git a/controllers/internals/Call.php b/controllers/internals/Call.php index 79ce96c..9f47aaa 100644 --- a/controllers/internals/Call.php +++ b/controllers/internals/Call.php @@ -136,7 +136,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Call + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Call($this->bdd); diff --git a/controllers/internals/Command.php b/controllers/internals/Command.php index 2059746..10f10c5 100644 --- a/controllers/internals/Command.php +++ b/controllers/internals/Command.php @@ -150,7 +150,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Command + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Command($this->bdd); diff --git a/controllers/internals/ConditionalGroup.php b/controllers/internals/ConditionalGroup.php index 17f66b0..bed5fa2 100644 --- a/controllers/internals/ConditionalGroup.php +++ b/controllers/internals/ConditionalGroup.php @@ -134,7 +134,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\ConditionalGroup + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\ConditionalGroup($this->bdd); diff --git a/controllers/internals/Contact.php b/controllers/internals/Contact.php index b9d19f9..502299e 100644 --- a/controllers/internals/Contact.php +++ b/controllers/internals/Contact.php @@ -15,23 +15,6 @@ namespace controllers\internals; { protected $model; - /** - * @param int $id_user : User id - * @param ?int $limit : Number of entry to return - * @param ?int $offset : Number of entry to avoid - * @param ?string $search : String to search for - * @param ?array $search_columns : List of columns to search on - * @param ?string $order_column : Name of the column to order by - * @param bool $order_desc : Should result be ordered DESC, if false order ASC - * @param bool $count : Should the query only count results - * - * @return array : Entries list - */ - public function datatable_list_for_user(int $id_user, ?int $limit = null, ?int $offset = null, ?string $search = null, ?array $search_columns = [], ?string $order_column = null, bool $order_desc = false, $count = false) - { - return $this->get_model()->datatable_list_for_user($id_user, $limit, $offset, $search, $search_columns, $order_column, $order_desc, $count); - } - /** * Return a contact for a user by a number. * @@ -368,7 +351,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Contact + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Contact($this->bdd); diff --git a/controllers/internals/Event.php b/controllers/internals/Event.php index cdf62b3..d43de0e 100644 --- a/controllers/internals/Event.php +++ b/controllers/internals/Event.php @@ -74,7 +74,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Event + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Event($this->bdd); diff --git a/controllers/internals/Group.php b/controllers/internals/Group.php index cf70970..c000d59 100644 --- a/controllers/internals/Group.php +++ b/controllers/internals/Group.php @@ -130,7 +130,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Group + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Group($this->bdd); diff --git a/controllers/internals/Media.php b/controllers/internals/Media.php index 25fb988..8d230fc 100644 --- a/controllers/internals/Media.php +++ b/controllers/internals/Media.php @@ -313,7 +313,7 @@ class Media extends StandardController /** * Get the model for the Controller. */ - protected function get_model(): \models\Media + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Media($this->bdd); diff --git a/controllers/internals/Phone.php b/controllers/internals/Phone.php index 8cef65e..b473a02 100644 --- a/controllers/internals/Phone.php +++ b/controllers/internals/Phone.php @@ -166,7 +166,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Phone + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Phone($this->bdd); diff --git a/controllers/internals/Quota.php b/controllers/internals/Quota.php index b93f8b2..e1bcaf1 100644 --- a/controllers/internals/Quota.php +++ b/controllers/internals/Quota.php @@ -288,7 +288,7 @@ class Quota extends StandardController /** * Get the model for the Controller. */ - protected function get_model(): \models\Quota + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Quota($this->bdd); diff --git a/controllers/internals/Received.php b/controllers/internals/Received.php index 3e6218e..b9b6cfc 100644 --- a/controllers/internals/Received.php +++ b/controllers/internals/Received.php @@ -15,26 +15,6 @@ namespace controllers\internals; { protected $model; - /** - * Return the list of entries for a user. - * - * @param int $id_user : User id - * @param ?int $limit : Number of entry to return - * @param ?int $offset : Number of entry to avoid - * @param ?string $search : String to search for - * @param ?array $search_columns : List of columns to search on - * @param ?string $order_column : Name of the column to order by - * @param bool $order_desc : Should result be ordered DESC, if false order ASC - * @param bool $count : Should the query only count results - * @param bool $unread : Should only unread messages be returned - * - * @return array : Entrys list - */ - public function datatable_list_for_user(int $id_user, ?int $limit = null, ?int $offset = null, ?string $search = null, ?array $search_columns = [], ?string $order_column = null, bool $order_desc = false, bool $count = false, bool $unread = false) - { - return $this->get_model()->datatable_list_for_user($id_user, $limit, $offset, $search, $search_columns, $order_column, $order_desc, $count, $unread); - } - /** * Return the list of unread messages for a user. * @@ -375,7 +355,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Received + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Received($this->bdd); diff --git a/controllers/internals/Scheduled.php b/controllers/internals/Scheduled.php index 09dc566..9282aed 100644 --- a/controllers/internals/Scheduled.php +++ b/controllers/internals/Scheduled.php @@ -544,7 +544,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Scheduled + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Scheduled($this->bdd); diff --git a/controllers/internals/Sended.php b/controllers/internals/Sended.php index 504cece..455cd0a 100644 --- a/controllers/internals/Sended.php +++ b/controllers/internals/Sended.php @@ -14,18 +14,17 @@ namespace controllers\internals; class Sended extends StandardController { protected $model; - + /** - * @param int $id_user : User id - * @param ?int $limit : Number of entry to return - * @param ?int $offset : Number of entry to avoid - * @param ?string $search : String to search for - * @param ?array $search_columns : List of columns to search on - * @param ?string $order_column : Name of the column to order by - * @param bool $order_desc : Should result be ordered DESC, if false order ASC - * @param bool $count : Should the query only count results + * Return the list of entries for a user. * - * @return array : Entries list + * @param int $id_user : User id + * @param ?int $limit : Number of entry to return + * @param ?int $offset : Number of entry to avoid + * @param ?string $search : String to search for + * @param ?array $orders : How to order results + * + * @return array : Entrys list */ public function datatable_list_for_user(int $id_user, ?int $limit = null, ?int $offset = null, ?string $search = null, ?array $search_columns = [], ?string $order_column = null, bool $order_desc = false, $count = false) { @@ -306,7 +305,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Sended + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Sended($this->bdd); diff --git a/controllers/internals/Setting.php b/controllers/internals/Setting.php index 84f62cf..d2620e5 100644 --- a/controllers/internals/Setting.php +++ b/controllers/internals/Setting.php @@ -89,7 +89,7 @@ namespace controllers\internals; /** * Get the model for the Controller. */ - protected function get_model(): \models\Setting + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Setting($this->bdd); diff --git a/controllers/internals/SmsStop.php b/controllers/internals/SmsStop.php index 29d310a..1cfc649 100644 --- a/controllers/internals/SmsStop.php +++ b/controllers/internals/SmsStop.php @@ -64,25 +64,24 @@ namespace controllers\internals; return $this->get_model()->get_by_number_for_user($id_user, $number); } - /** - * Parse a string to check if its a SMS stop. - * - * @param string $str : The string to check - * - * @return bool : true if sms stop, false else - */ - public function check_for_stop(string $str) - { - return 'stop' == trim(mb_strtolower($str)); - } - /** * Get the model for the Controller. */ - protected function get_model(): \models\SmsStop + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\SmsStop($this->bdd); return $this->model; } + + /** + * Parse a string to check if its a SMS stop + * + * @param string $str : The string to check + * @return bool : true if sms stop, false else + */ + public function check_for_stop (string $str) + { + return trim(mb_strtolower($str)) == 'stop'; + } } diff --git a/controllers/internals/StandardController.php b/controllers/internals/StandardController.php index 58d693e..6c9b52b 100644 --- a/controllers/internals/StandardController.php +++ b/controllers/internals/StandardController.php @@ -137,8 +137,6 @@ namespace controllers\internals; /** * Get the model for the Controller. - * - * @return \models\StandardModel */ - abstract protected function get_model(); + abstract protected function get_model(): \descartes\Model; } diff --git a/controllers/internals/Webhook.php b/controllers/internals/Webhook.php index bb2c3bd..3cbaff0 100644 --- a/controllers/internals/Webhook.php +++ b/controllers/internals/Webhook.php @@ -146,7 +146,7 @@ class Webhook extends StandardController /** * Get the model for the Controller. */ - protected function get_model(): \models\Webhook + protected function get_model(): \descartes\Model { $this->model = $this->model ?? new \models\Webhook($this->bdd); diff --git a/controllers/publics/Account.php b/controllers/publics/Account.php index 3daddfd..bcd4327 100644 --- a/controllers/publics/Account.php +++ b/controllers/publics/Account.php @@ -204,11 +204,10 @@ namespace controllers\publics; return $this->redirect(\descartes\Router::url('Connect', 'login')); } - + /** - * Allow to stop impersonating a user. - * - * @param mixed $csrf + * Allow to stop impersonating a user + * @param mixed $csrf */ public function stop_impersonate() { @@ -224,7 +223,6 @@ namespace controllers\publics; $_SESSION = $old_session; \FlashMessage\FlashMessage::push('success', 'Vous n\'incarnez plus l\'utilisateur ' . $user_email . '.'); - return $this->redirect(\descartes\Router::url('Dashboard', 'show')); } } diff --git a/controllers/publics/Connect.php b/controllers/publics/Connect.php index d254b97..8c5faf2 100644 --- a/controllers/publics/Connect.php +++ b/controllers/publics/Connect.php @@ -164,4 +164,5 @@ namespace controllers\publics; return $this->redirect(\descartes\Router::url('Connect', 'login')); } + } diff --git a/controllers/publics/Contact.php b/controllers/publics/Contact.php index 6fed079..600e5e8 100644 --- a/controllers/publics/Contact.php +++ b/controllers/publics/Contact.php @@ -45,43 +45,19 @@ namespace controllers\publics; return $this->render('contact/list'); } - /** * Return contacts as json. */ public function list_json() { - $draw = (int) ($_GET['draw'] ?? false); - - $columns = [ - 0 => 'name', - 1 => 'number', - 2 => 'created_at', - 3 => 'updated_at', - ]; - - $search = $_GET['search']['value'] ?? null; - $order_column = $columns[$_GET['order'][0]['column']] ?? null; - $order_desc = ($_GET['order'][0]['dir'] ?? 'asc') == 'desc' ? true : false; - $offset = (int) ($_GET['start'] ?? 0); - $limit = (int) ($_GET['length'] ?? 25); - - $entities = $this->internal_contact->datatable_list_for_user($_SESSION['user']['id'], $limit, $offset, $search, $columns, $order_column, $order_desc); - $count_entities = $this->internal_contact->datatable_list_for_user($_SESSION['user']['id'], $limit, $offset, $search, $columns, $order_column, $order_desc, true); + $entities = $this->internal_contact->list_for_user($_SESSION['user']['id']); foreach ($entities as &$entity) { $entity['number_formatted'] = \controllers\internals\Tool::phone_link($entity['number']); } - $records_total = $this->internal_contact->count_for_user($_SESSION['user']['id']); - header('Content-Type: application/json'); - echo json_encode([ - 'draw' => $draw, - 'recordsTotal' => $records_total, - 'recordsFiltered' => $count_entities, - 'data' => $entities, - ]); + echo json_encode(['data' => $entities]); } /** diff --git a/controllers/publics/Received.php b/controllers/publics/Received.php index 4d52ca7..d6ab5a4 100644 --- a/controllers/publics/Received.php +++ b/controllers/publics/Received.php @@ -47,31 +47,11 @@ namespace controllers\publics; } /** - * Return receiveds as json. - * - * @param bool $unread : Should we only search for unread messages + * Return received as json. */ - public function list_json(bool $unread = false) + public function list_json() { - $draw = (int) ($_GET['draw'] ?? false); - - $columns = [ - 0 => 'searchable_origin', - 1 => 'phone_name', - 2 => 'text', - 3 => 'at', - 4 => 'status', - 5 => 'command', - ]; - - $search = $_GET['search']['value'] ?? null; - $order_column = $columns[$_GET['order'][0]['column']] ?? null; - $order_desc = ($_GET['order'][0]['dir'] ?? 'asc') == 'desc' ? true : false; - $offset = (int) ($_GET['start'] ?? 0); - $limit = (int) ($_GET['length'] ?? 25); - - $entities = $this->internal_received->datatable_list_for_user($_SESSION['user']['id'], $limit, $offset, $search, $columns, $order_column, $order_desc, false, $unread); - $count_entities = $this->internal_received->datatable_list_for_user($_SESSION['user']['id'], $limit, $offset, $search, $columns, $order_column, $order_desc, true, $unread); + $entities = $this->internal_received->list_for_user($_SESSION['user']['id']); foreach ($entities as &$entity) { $entity['origin_formatted'] = \controllers\internals\Tool::phone_link($entity['origin']); @@ -81,15 +61,8 @@ namespace controllers\publics; } } - $records_total = $this->internal_received->count_for_user($_SESSION['user']['id']); - header('Content-Type: application/json'); - echo json_encode([ - 'draw' => $draw, - 'recordsTotal' => $records_total, - 'recordsFiltered' => $count_entities, - 'data' => $entities, - ]); + echo json_encode(['data' => $entities]); } /** @@ -100,6 +73,25 @@ namespace controllers\publics; $this->render('received/list', ['is_unread' => true]); } + /** + * Return unred received as json. + */ + public function list_unread_json() + { + $entities = $this->internal_received->list_unread_for_user($_SESSION['user']['id']); + foreach ($entities as &$entity) + { + $entity['origin_formatted'] = \controllers\internals\Tool::phone_link($entity['origin']); + if ($entity['mms']) + { + $entity['medias'] = $this->internal_media->gets_for_received($entity['id']); + } + } + + header('Content-Type: application/json'); + echo json_encode(['data' => $entities]); + } + /** * Mark messages as. * diff --git a/controllers/publics/Sended.php b/controllers/publics/Sended.php index d82bed6..b96e50e 100644 --- a/controllers/publics/Sended.php +++ b/controllers/publics/Sended.php @@ -53,7 +53,8 @@ namespace controllers\publics; */ public function list_json() { - $draw = (int) ($_GET['draw'] ?? false); + + $draw = (int)($_GET['draw'] ?? false); $columns = [ 0 => 'phone_name', diff --git a/controllers/publics/User.php b/controllers/publics/User.php index 1b20046..0581548 100644 --- a/controllers/publics/User.php +++ b/controllers/publics/User.php @@ -410,13 +410,13 @@ class User extends \descartes\Controller return $this->redirect(\descartes\Router::url('User', 'list')); } + /** - * Allow an admin to impersonate a user. - * + * Allow an admin to impersonate a user * @param mixed $csrf * @param array int $_GET['user_ids'] : Ids of users to impersonate, the array should actually contain one id only, we keep use of array for simpler compatibility in UI */ - public function impersonate($csrf) + public function impersonate ($csrf) { if (!$this->verify_csrf($csrf)) { @@ -425,7 +425,7 @@ class User extends \descartes\Controller return $this->redirect(\descartes\Router::url('User', 'list')); } - if (1 != count($_GET['user_ids'])) + if (count($_GET['user_ids']) != 1) { \FlashMessage\FlashMessage::push('danger', 'Vous devez séléctionner un et un seul utilisateur à incarner !'); @@ -460,17 +460,17 @@ class User extends \descartes\Controller $user['settings'] = $settings; - //Save old session to get it back later + //Save old session to get it back later $old_session = $_SESSION; $_SESSION = [ - 'old_session' => $old_session, + 'old_session' => $old_session, 'impersonate' => true, 'connect' => true, 'user' => $user, ]; \FlashMessage\FlashMessage::push('success', 'Vous incarnez désormais l\'utilisateur ' . $user['email'] . '.'); - return $this->redirect(\descartes\Router::url('Dashboard', 'show')); } + } diff --git a/models/Contact.php b/models/Contact.php index b9e682e..5646424 100644 --- a/models/Contact.php +++ b/models/Contact.php @@ -13,65 +13,6 @@ namespace models; class Contact extends StandardModel { - /** - * Return a list of sended messages for a user. - * Add a column contact_name and phone_name when available. - * - * @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 - * - * @return array - */ - public function datatable_list_for_user(int $id_user, ?int $limit = null, ?int $offset = null, ?string $search = null, ?array $search_columns = [], ?string $order_column = null, bool $order_desc = false, ?bool $count = false) - { - $params = [ - 'id_user' => $id_user, - ]; - - $query = $count ? 'SELECT COUNT(*) as nb' : 'SELECT * '; - $query .= ' - FROM ( - SELECT * FROM contact - WHERE id_user = :id_user - ) as results - '; - - if ($search && $search_columns) - { - $like_search = '%' . str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $search) . '%'; - $params[':like_search'] = $like_search; - - $query .= ' WHERE (0'; - - foreach ($search_columns as $column) - { - $query .= ' OR ' . $column . ' LIKE :like_search'; - } - - $query .= ')'; - } - - if ($order_column) - { - $query .= ' ORDER BY ' . $order_column . ($order_desc ? ' DESC' : ' ASC'); - } - - if (null !== $limit && !$count) - { - $limit = (int) $limit; - - $query .= ' LIMIT ' . $limit; - if (null !== $offset) - { - $offset = (int) $offset; - $query .= ' OFFSET ' . $offset; - } - } - - return $count ? $this->_run_query($query, $params)[0]['nb'] ?? 0 : $this->_run_query($query, $params); - } - /** * Return a contact by his number for a user. * diff --git a/models/Received.php b/models/Received.php index 66fc4b4..c25289f 100644 --- a/models/Received.php +++ b/models/Received.php @@ -20,60 +20,29 @@ namespace models; const STATUS_READ = 'read'; /** - * @param int $id_user : User id - * @param ?int $limit : Number of entry to return - * @param ?int $offset : Number of entry to avoid - * @param ?string $search : String to search for - * @param ?array $search_columns : List of columns to search on - * @param ?string $order_column : Name of the column to order by - * @param bool $order_desc : Should result be ordered DESC, if false order ASC - * @param bool $count : Should the query only count results - * @param bool $unread : Should only unread messages be returned + * Return a list of received messages for a user. + * Add a column contact_name and phone_name when available. * - * @return array : Entrys list + * @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 + * + * @return array */ - public function datatable_list_for_user(int $id_user, ?int $limit = null, ?int $offset = null, ?string $search = null, ?array $search_columns = [], ?string $order_column = null, bool $order_desc = false, bool $count = false, bool $unread = false) + public function list_for_user(int $id_user, $limit, $offset) { - $params = [ - 'id_user' => $id_user, - ]; + $query = ' + SELECT received.*, contact.name as contact_name, phone.name as phone_name + FROM received + LEFT JOIN contact + ON contact.number = received.origin + AND contact.id_user = received.id_user + LEFT JOIN phone + ON phone.id = received.id_phone + WHERE received.id_user = :id_user + '; - $query = $count ? 'SELECT COUNT(*) as nb' : 'SELECT * '; - $query .= ' - FROM ( - SELECT received.*, contact.name as contact_name, phone.name as phone_name, IF(contact.name IS NULL, received.origin, CONCAT(received.origin, " (", contact.name, ")")) as searchable_origin - FROM received - LEFT JOIN contact - ON contact.number = received.origin - AND contact.id_user = received.id_user - LEFT JOIN phone - ON phone.id = received.id_phone - WHERE received.id_user = :id_user - ' . ($unread ? ' AND received.status = \'unread\'' : '') . ' - ) as results -'; - - if ($search && $search_columns) - { - $like_search = '%' . str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $search) . '%'; - $params[':like_search'] = $like_search; - - $query .= ' WHERE (0'; - - foreach ($search_columns as $column) - { - $query .= ' OR ' . $column . ' LIKE :like_search'; - } - - $query .= ')'; - } - - if ($order_column) - { - $query .= ' ORDER BY ' . $order_column . ($order_desc ? ' DESC' : ' ASC'); - } - - if (null !== $limit && !$count) + if (null !== $limit) { $limit = (int) $limit; @@ -85,7 +54,11 @@ namespace models; } } - return $count ? $this->_run_query($query, $params)[0]['nb'] ?? 0 : $this->_run_query($query, $params); + $params = [ + 'id_user' => $id_user, + ]; + + return $this->_run_query($query, $params); } /** diff --git a/models/Sended.php b/models/Sended.php index b401ccc..9657619 100644 --- a/models/Sended.php +++ b/models/Sended.php @@ -48,15 +48,15 @@ namespace models; ON phone.id = sended.id_phone WHERE sended.id_user = :id_user ) as results - '; +'; if ($search && $search_columns) { $like_search = '%' . str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $search) . '%'; $params[':like_search'] = $like_search; - + $query .= ' WHERE (0'; - + foreach ($search_columns as $column) { $query .= ' OR ' . $column . ' LIKE :like_search'; @@ -82,7 +82,7 @@ namespace models; } } - return $count ? $this->_run_query($query, $params)[0]['nb'] ?? 0 : $this->_run_query($query, $params); + return ($count ? $this->_run_query($query, $params)[0]['nb'] ?? 0 : $this->_run_query($query, $params)) ; } /** diff --git a/routes.php b/routes.php index b9f6f96..5ddf90b 100644 --- a/routes.php +++ b/routes.php @@ -93,11 +93,9 @@ 'Received' => [ 'list' => '/received/', - 'list_json' => [ - '/received/json/', - '/received/json/{unread}/', - ], + 'list_json' => '/received/json/', 'list_unread' => '/unread/', + 'list_unread_json' => '/unread/json/', 'mark_as' => '/mark/{status}/{csrf}/', 'delete' => '/received/delete/{csrf}/', 'popup' => '/received/popup/', diff --git a/templates/contact/list.php b/templates/contact/list.php index 2284706..03de988 100644 --- a/templates/contact/list.php +++ b/templates/contact/list.php @@ -186,12 +186,11 @@ jQuery(document).ready(function() "language": { "url": HTTP_PWD + "/assets/js/datatables/french.json", }, - "orderMulti": false, "columnDefs": [{ 'targets': 'checkcolumn', 'orderable': false, }], - "serverSide": true, + "ajax": { 'url': '', 'dataSrc': 'data', diff --git a/templates/received/list.php b/templates/received/list.php index cd240b6..f470a11 100644 --- a/templates/received/list.php +++ b/templates/received/list.php @@ -83,14 +83,13 @@ jQuery(document).ready(function () "language": { "url": HTTP_PWD + "/assets/js/datatables/french.json", }, - "orderMulti": false, "columnDefs": [{ 'targets': 'checkcolumn', 'orderable': false, }], - "serverSide": true, + "ajax": { - 'url': ' true]) : \descartes\Router::url('Received', 'list_json'); ?>', + 'url': '', 'dataSrc': 'data', }, "columns" : [ diff --git a/templates/sended/list.php b/templates/sended/list.php index 9cb1761..a8ee985 100644 --- a/templates/sended/list.php +++ b/templates/sended/list.php @@ -73,7 +73,6 @@ jQuery(document).ready(function () "language": { "url": HTTP_PWD + "/assets/js/datatables/french.json", }, - "orderMulti": false, "columnDefs": [{ 'targets': 'checkcolumn', 'orderable': false, diff --git a/templates/smsstop/list.php b/templates/smsstop/list.php index 15cbcb5..5010c5d 100644 --- a/templates/smsstop/list.php +++ b/templates/smsstop/list.php @@ -40,7 +40,7 @@ Numéro - + @@ -50,7 +50,7 @@
- +
Action pour la séléction : @@ -74,11 +74,11 @@ jQuery(document).ready(function () "language": { "url": HTTP_PWD + "/assets/js/datatables/french.json", }, - "orderMulti": false, "columnDefs": [{ 'targets': 'checkcolumn', 'orderable': false, }], + "ajax": { 'url': '', 'dataSrc': 'data', @@ -86,15 +86,13 @@ jQuery(document).ready(function () "columns" : [ { data: 'number_formatted', - } - - ,{ + }, + { data: 'id', render: function (data, type, row, meta) { return ''; }, }, - ], "deferRender": true });