PHP Progress Library to Track User Progress
Published on by Paul Redmond
Progress is a PHP package to determine steps and progress with an expressive, object-oriented API:
This progress package is a simple way of taking multiple steps in a process and using them to create a progression system. You can define your steps through an expressive and simple API and let this package handle the heavy lifting. The result is a delightfully easy to use steps-and-progression system.
This library works by creating a Progress
instance with all the steps required to reach 100% progression. This library then asserts which steps are completed and returns the results:
use Mtownsend\Progress\Progress;use Mtownsend\Progress\Step; $step1 = (new Step('https://marktownsend.rocks', 'Portfolio Site'))->url();$step2 = (new Step(4, 'Bronze Level Developer'))->integer()->between(1, 5);$progress = (new Progress($step1, $step2)); var_dump($progress->get()); /*array(7) { 'total_steps' => int(2) 'percentage_complete' => double(100) 'percentage_incomplete' => double(0) 'steps_complete' => int(2) 'steps_incomplete' => int(0) 'complete_step_names' => array(2) { [0] => string(14) "Portfolio Site" [1] => string(22) "Bronze Level Developer" } 'incomplete_step_names' => array(0) {}}*/
As you can see, the above example’s progress is 100% because all of the data passed to each Step
passes the assertion test.
Let’s say the user hadn’t reached “Bronze Level Developer” yet; you might dynamically generate the progress instance like so:
use Mtownsend\Progress\Progress;use Mtownsend\Progress\Step; $developerLevel = 0; $step1 = (new Step('https://marktownsend.rocks', 'Portfolio Site'))->url();$step2 = (new Step($developerLevel, 'Bronze Level Developer'))->integer()->between(1, 5); $progress = (new Progress($step1, $step2)); var_dump($progress->get()); /*array(7) { 'total_steps' => int(2) 'percentage_complete' => double(50) 'percentage_incomplete' => double(50) 'steps_complete' => int(1) 'steps_incomplete' => int(1) 'complete_step_names' => array(1) { [0] => string(14) "Portfolio Site" } 'incomplete_step_names' => array(1) { [1] => string(22) "Bronze Level Developer" }}*/
The Progress library uses beberlei/assert under the hood. Thus you have full access to the assert library methods. In the above example, step two must be an integer between one and five, for example.
You can also assert if an individual step passes using the passed()
method:
<br></br>// Failing example$developerLevel = 0; $step2 = (new Step($developerLevel, 'Bronze Level Developer'))->integer()->between(1, 5); var_dump($step2->passed()); // bool(false) // Passing$developerLevel = 1; $step2 = (new Step($developerLevel, 'Bronze Level Developer'))->integer()->between(1, 5); var_dump($step2->passed());// bool(true)
You can learn more about this package, get full installation instructions, and view the source code on GitHub at mtownsend5512/progress.