117 lines
2.3 KiB
PHP
117 lines
2.3 KiB
PHP
<?php
|
|
|
|
class Icl_Stepper {
|
|
|
|
|
|
/**
|
|
* Added dummy element to match number of elements and to cover init action
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $_steps = array( null );
|
|
/**
|
|
* Current step
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $_step;
|
|
/**
|
|
* Next step can be forced with Icl_Stepper::setNextStep()
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $_nextStep = null;
|
|
|
|
/**
|
|
* Provide current step here
|
|
*
|
|
* @param int $step
|
|
*/
|
|
function __construct( $step = 0 ) {
|
|
if ( empty( $step ) ) {
|
|
$step = 0;
|
|
}
|
|
$this->_step = intval( $step );
|
|
}
|
|
|
|
/**
|
|
* Register steps (function names)
|
|
*/
|
|
public function registerSteps() {
|
|
$args = func_get_args();
|
|
$this->_steps = array_merge( $this->_steps, $args );
|
|
}
|
|
|
|
/**
|
|
* Returns current step
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getStep() {
|
|
return $this->_step;
|
|
}
|
|
|
|
/**
|
|
* Returns next step
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getNextStep() {
|
|
return ! is_null( $this->_nextStep ) ? $this->_nextStep : $this->_step += 1;
|
|
}
|
|
|
|
/**
|
|
* Sets current step
|
|
*
|
|
* @param int $num
|
|
*/
|
|
public function setStep( $num ) {
|
|
$this->_step = intval( $num );
|
|
}
|
|
|
|
/**
|
|
* Forcing next step
|
|
*
|
|
* @param int $num
|
|
*/
|
|
public function setNextStep( $num ) {
|
|
$this->_nextStep = intval( $num );
|
|
}
|
|
|
|
/**
|
|
* Calculates bar width
|
|
*
|
|
* @return int Should be used as percentage width (%)
|
|
*/
|
|
public function barWidth() {
|
|
return round( ( $this->_step * 100 ) / count( $this->_steps ) );
|
|
}
|
|
|
|
/**
|
|
* Calls current step's function
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function init() {
|
|
if ( $this->_step !== 0 && isset( $this->_steps[ $this->_step ] )
|
|
&& is_callable( $this->_steps[ $this->_step ] ) ) {
|
|
return call_user_func_array( $this->_steps[ $this->_step ], array( $this->_step, $this ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns initial HTML formatted screen
|
|
*
|
|
* @param string $message Message to be displayed
|
|
* @return string
|
|
*/
|
|
public function render( $message = '' ) {
|
|
$output = '<div class="progress-bar" style="width: 100%; height: 15px; background-color: #FFFFFFF; border: 1px solid #e6db55;">
|
|
<div class="progress" style="height: 100%; background-color: Yellow; width: ' . $this->barWidth() . '%;"></div>
|
|
</div>
|
|
<div class="message" style="clear:both;">' . $message . '</div>';
|
|
return $output;
|
|
}
|
|
|
|
}
|