mchev / laravel-odk
Laravel-ODK 是一个围绕 ODK Central API 的简单封装,使处理其端点变得轻松!
v1.3.0
2023-02-06 15:32 UTC
Requires
- php: ^7.4|^8.0
- guzzlehttp/guzzle: ^7.4.5
- illuminate/http: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0
- phpunit/phpunit: ^9.0
README
这是一个社区项目,不是官方的 Laravel 项目。
Laravel-ODK 是一个围绕 ODK Central API 的简单封装,使处理其端点变得轻松!有关 API 的更多信息,请参阅 https://odkcentral.docs.apiary.io/
安装
您可以通过 composer 安装此包。
composer require mchev/laravel-odk
配置
发布包的配置。
php artisan vendor:publish --provider="Mchev\LaravelOdk\Providers\OdkCentralServiceProvider" --tag=config
以下配置将被发布到 config/odkcentral.php。
return [ /* |-------------------------------------------------------------------------- | ODK Central API url |-------------------------------------------------------------------------- | | Here you may specify the default url for the API calls. | Example : https://private-anon-cecdde38ec-odkcentral.apiary-mock.com/v1 | */ 'api_url' => env('ODK_API_URL'), /* |-------------------------------------------------------------------------- | ODK Central Authentification |-------------------------------------------------------------------------- | | An administrator user of your ODK Central app. | */ 'user_email' => env('ODK_USER_EMAIL'), 'user_password' => env('ODK_USER_PASSWORD'), ];
在您的 .env
文件中设置您的 ODK Central App 的 ODK_API_URL
、ODK_USER_EMAIL
和 ODK_USER_PASSWORD
。
ODK_API_URL="https://your_host.com/v1"
ODK_USER_EMAIL=your_email
ODK_USER_PASSWORD=your_password
别忘了运行 php artisan config:clear
如果您稍后更改了凭证,您还必须运行 php artisan cache:clear
。认证令牌将被缓存3600秒。
使用
namespace App\Http\Controllers; use Mchev\LaravelOdk\OdkCentral; class SomeController { public function testOdk() { $odk = new OdkCentral; $project = $odk->projects(1)->get(); dd($project); } }
使用 Facade 的用法
namespace App\Http\Controllers; use Mchev\LaravelOdk\Facades\OdkCentral; class SomeController { public function returnFormFields($projectId, $xmlFormId) { $fields = OdkCentral::projects($projectId)->forms($xmlFormId)->fields()->get(); dd($fields); } }
用户
// Get all users. $users = $odk->users()->get(); // Searching users $users = $odk->users('Jane')->get(); // You can also use eloquent 💥 $users = $odk->users()->get()->sortBy('displayName'); // Creating a new user. $user = $odk->users()->create([ 'email' => 'example@email.com', 'password' => 'password' // Optional (That email address will receive a message instructing the new user on how to claim their new account and set a password.) ]); // Getting User details $user = $odk->users($userId)->get(); // Getting authenticated User details $user = $odk->users()->current(); // Modifying a User $user = $odk->users($userId)->update([ 'displayName' => 'New name', // string 'email' => 'new.email.address@demo.org' // string ]); // Directly updating a user password $user = $odk->users($userId)->updatePassword([ 'old' => 'old.password', // string 'new' => 'new.password' // string ]); // Initiating a password reset $user = $odk->users()->passwordReset($userEmail); // Deleting a User $user = $odk->users($userId)->delete();
应用程序用户
// Listing all App Users. $appUsers = $odk->projects($projectId)->appUsers()->get(); // Creating a new App User. $appUser = $odk->projects($projectId)->appUsers()->create([ 'displayName' => 'Jane Doe' ]); // Deleting a App User $appUser = $odk->projects($projectId)->appUsers($appUserId)->delete();
项目
// Get a list of projects. $projects = $odk->projects()->get(); // Creating a Project. $project = $odk->projects()->create([ 'name' => 'My new project' ]); // Getting Project details $project = $odk->projects($projectId)->get(); // Updating Project Details $project = $odk->projects($projectId)->update([ 'name' => 'New name', // string | required 'archived' => false // boolean | optional ]); // Deep Updating Project and Form Details $project = $odk->projects($projectId)->deepUpdate([ 'name' => 'New name', // string | required 'archived' => false, // boolean | optional 'forms' => [ { "xmlFormId": "simple", "state": "open", "assignments": [ { "roleId": 2, "actorId": 14 } ] } ], // array | infos : https://odkcentral.docs.apiary.io/#reference/project-management/projects/deep-updating-project-and-form-details ]); // Enabling Project Managed Encryption $project = $odk->projects($projectId)->encrypt([ 'passphrase' => 'Super duper secret', // string | required 'hint' => 'My reminder' // string | optional ]); // Deleting a Project $project = $odk->projects($projectId)->delete();
表单
// List all forms of a project. $forms = $odk->projects($projectId)->forms()->get(); // Creating new form (sending XForms XML or XLSForm file) // If the second parameter is set to false, the form will be stored as draft. $form = $odk->projects($projectId)->forms()->create($request->file('your_input_file'), true); // Getting form details $form = $odk->projects($projectId)->forms($xmlFormId)->get(); // Getting form schema fields $form = $odk->projects($projectId)->forms($xmlFormId)->fields()->get(); // You may optionally add the 'true' parameter to the fields() method to sanitize the field names and paths to match the way they will be outputted for OData // Listing form attachments $form = $odk->projects($projectId)->forms($xmlFormId)->attachments()->get(); // Downloading a form attachment return $odk->projects($projectId)->forms($xmlFormId)->downloadAttachment($filename); // Modifying a form $form = $odk->projects($projectId)->forms($xmlFormId)->update([ 'state' => 'open' ]); // Deleting a form $form = $odk->projects($projectId)->forms($xmlFormId)->delete(); // Download form file (xml, xls, xlsx) return $odk->projects($projectId)->forms($xmlFormId)->xlsx()->download(); // xml(), xls(), xlsx()
草稿
// Let's say we already have our form $form = $odk->projects($projectId)->forms($xmlFormId); // Create a new draft $form->draft()->create($request->file('your_input_file')); // Getting Draft Form Details $form->draft()->get(); // Getting Draft Form Fields $form->draft()->fields(); // Publish the draft $form->draft()->publish('v1.2.0'); // string | optional // Deleting the draft $form->draft()->delete();
提交
// Listing all submissions on a form $submissions = $odk->projects($projectId)->forms($xmlFormId)->submissions()->get(); // Getting Submission metadata $submissions = $odk->projects($projectId)->forms($xmlFormId)->submissions($instanceId)->get(); // Updating Submission metadata $submissions = $odk->projects($projectId)->forms($xmlFormId)->submissions($instanceId)->update([ 'reviewState' => 'approved' // null, edited, hasIssues, rejected, approved | enum ]); // Retrieving Submission XML $submissions = $odk->projects($projectId)->forms($xmlFormId)->submissions($instanceId)->xml(); // Geting Submission comments $submissions = $odk->projects($projectId)->forms($xmlFormId)->submissions($instanceId)->comments()->get(); // Posting Submission comments $submission = $odk->projects($projectId)->forms($xmlFormId)->submissions($instanceId)->comments()->create([ 'body' => 'this is the text of my comment', ]);
答案/响应
// Our form $form = $odk->projects($projectId)->forms($xmlFormId); // You can get answers directly : $answers = $form()->answers(); // OR $anwserWithRepeats = $form()->answersWithRepeats(); // If you need to get only answers associated to a submission : $answers = $form()->submissions($submissionId)->answers(); // OR $anwserWithRepeats = $form()->submissions($submissionId)->answersWithRepeats(); // answersWithRepeats() method accept a boolean parameter to only get the questions and responses (no meta, ids, etc) $onlyAnswers = $form()->submissions($submissionId)->answersWithRepeats(true);
Odata
// Our form $form = $odk->projects($projectId)->forms($xmlFormId); /** * OData request. * * @param string $url * @param boolean $top * @param boolean $skip * @param boolean $count * @param boolean $wkt * @param string $filter * @param boolean $expand */ $data = $form->odata($url= '', $top = false, $skip = false, $count = false, $wkt = false, $filter = '', $expand = false)->get(); // Example : $submissions = $form->odata('Submissions')->get();
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件
Laravel 包模板
此包是使用 Laravel 包模板 生成的。