From 6c87461b1693d67f4c6b0f1d0ee853dce2d5bf3a Mon Sep 17 00:00:00 2001 From: paultrimor Date: Mon, 8 Feb 2021 09:40:15 -0500 Subject: [PATCH 1/4] Add import and export endpoints --- core/Api/UserApi.php | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/core/Api/UserApi.php b/core/Api/UserApi.php index d23aa47..8c27799 100755 --- a/core/Api/UserApi.php +++ b/core/Api/UserApi.php @@ -258,4 +258,52 @@ public function account_list($user_id, $query = array()) $filter['created_by'] = $user_id; return Account::search($filter); } + + /** + * Import new users from into DB + * + * @url GET /users/csv + */ + public function import_csv($data = array(), $mime = 'text/csv') + { + $this->_authorize('user_create'); + $csv_data = explode(PHP_EOL, $data); + $temp = array_pop($csv_data); + + // skip header row + $header_csv = str_getcsv($csv_data[0], ","); + foreach(array_slice($csv_data, 1) as $row) { + $row_csv = str_getcsv($row, ","); + $user_data = array_combine($header_csv, $row_csv); + + $oUser = new User(); + $this->set($oUser, $user_data); + $oUser->__set('active', intval($user_data['active'])); + if (!$oUser->save()) { + throw new CoreException(417, 'Could not save User'); + } + } + + /** + * Export all users form DB + * + * @url POST /users/csv + */ + public function export_csv() + { + $fields = array('username', 'passwd', 'first_name', 'last_name', 'email', 'address', 'company', 'active'); + $query = 'SELECT ' . implode(", ", $fields) . ' FROM usr'; + $result = DB::query('usr', $query); + $filepath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'users.csv'; + $handle = fopen($filepath, 'w'); + $head = implode(",", $fields) . "\n"; + fwrite($handle, $head); + while ($row = mysql_fetch_array($result, MYSQL_NUM)) { + $csv = implode(",",$row) . "\n"; + fwrite($handle, $csv); + } + fclose($handle); + return new SplFileInfo($filepath); + } + } } From 33072957303e630376f01a4c828cc7121cf711ca Mon Sep 17 00:00:00 2001 From: paultrimor Date: Thu, 11 Feb 2021 16:33:44 -0500 Subject: [PATCH 2/4] Minor comment fixes --- core/Api/UserApi.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/Api/UserApi.php b/core/Api/UserApi.php index 8c27799..a9f7eca 100755 --- a/core/Api/UserApi.php +++ b/core/Api/UserApi.php @@ -262,7 +262,7 @@ public function account_list($user_id, $query = array()) /** * Import new users from into DB * - * @url GET /users/csv + * @url POST /users/csv */ public function import_csv($data = array(), $mime = 'text/csv') { @@ -287,7 +287,7 @@ public function import_csv($data = array(), $mime = 'text/csv') /** * Export all users form DB * - * @url POST /users/csv + * @url GET /users/csv */ public function export_csv() { From 9f2aa617d1d4e42b29a29388373ad68f31c6828d Mon Sep 17 00:00:00 2001 From: paultrimor Date: Thu, 11 Feb 2021 16:34:11 -0500 Subject: [PATCH 3/4] Update docs --- docs/ApiGuide.md | 29 +++++++++++++++++++++++++++++ docs/api.md | 2 ++ 2 files changed, 31 insertions(+) diff --git a/docs/ApiGuide.md b/docs/ApiGuide.md index cb51252..a1ca359 100644 --- a/docs/ApiGuide.md +++ b/docs/ApiGuide.md @@ -1805,6 +1805,35 @@ list all exiting users, optionally client can filter users using query string (k + Attributes (User) +### Export All Users via CSV [/users/csv] + +list all exiting users, optionally client can filter users using query string (key value pair) in url, while using any of following fields + ++ Request + + + Headers + + Authentication: Bearer JWT + ++ Response 200 (text/csv) + + + csv (array[User]) + +### Import All Users via CSV [/users/csv] + +list all exiting users, optionally client can filter users using query string (key value pair) in url, while using any of following fields + ++ Request + + + Headers + + Authentication: Bearer JWT + + Body + + "CSV file contents" + ++ Attributes (user) + ## User Role Define [/users/{user_id}/roles/{role_id}] + Parameters diff --git a/docs/api.md b/docs/api.md index 9acaf3c..5d35e55 100644 --- a/docs/api.md +++ b/docs/api.md @@ -194,6 +194,8 @@ User Management * PUT users/{user_id}/roles/{role\_id} * DELETE users/{user_id}/roles/{role\_id} * GET /users/{user_id}/accounts +* GET /users/csv +* POST /users/csv Trunk / Termination Providers APIs ---------------------------------- From d40394f0efc1df09018cc0c7ee3e7c7576e9d69f Mon Sep 17 00:00:00 2001 From: paultrimor Date: Thu, 11 Feb 2021 16:41:59 -0500 Subject: [PATCH 4/4] Minor fix --- docs/ApiGuide.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/ApiGuide.md b/docs/ApiGuide.md index a1ca359..42563ed 100644 --- a/docs/ApiGuide.md +++ b/docs/ApiGuide.md @@ -1831,8 +1831,9 @@ list all exiting users, optionally client can filter users using query string (k + Body "CSV file contents" ++ Response 200 -+ Attributes (user) + + Attributes (user) ## User Role Define [/users/{user_id}/roles/{role_id}]