PHP Progress Library to Track User Progress

PHP Progress Library to Track User Progress

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:


// 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.

Filed in: News / packages

Newsletter

Join 31,000+ others and never miss out on new tips, tutorials, and more.

Laravel News Partners

Laravel Jobs

Laravel Senior Developer
Remote, Canada Only
BeMo Academic Consulting
Senior Fullstack Developer / Architect (w/m/d)
Remote / Munich - Germany
envivo.select GmbH
Medior full stack developer (Laravel)
Deventer (or remote) in the Netherlands, Dutch speaking required.
MSML B.V.
Senior Full Stack PHP Developer (Laravel)
Remote
MAPPEN
Senior Laravel Developer
Remote
ACTO