diff --git a/core/Api/UserApi.php b/core/Api/UserApi.php index d23aa47..a9f7eca 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 POST /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 GET /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); + } + } } diff --git a/docs/ApiGuide.md b/docs/ApiGuide.md index cb51252..42563ed 100644 --- a/docs/ApiGuide.md +++ b/docs/ApiGuide.md @@ -1805,6 +1805,36 @@ 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" ++ Response 200 + + + 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 ----------------------------------