The array returned is suitable to be used as list data value in (for instance) a dropdown list control.
Usage example : assuming model Post has a SimpleWorkflowBehavior the following code displays a dropdown list
containing all statuses defined in $post current the workflow :
echo Html::dropDownList( 'status', null, WorkflowHelper::getAllStatusListData( $post->getWorkflow()->getId(), $post->getWorkflowSource() ) )
public static getAllStatusListData ( string $workflowId, IWorkflowSource $workflowSource ) : array | ||
$workflowId | string | |
$workflowSource | IWorkflowSource | |
return | array |
public function testGetStatusDropDownData() { $model = new Item04(); $model->enterWorkflow(); $ar = WorkflowHelper::GetStatusDropDownData($model); $listData = WorkflowHelper::getAllStatusListData($model->getWorkflow()->getId(), $model->getWorkflowSource()); codecept_debug($ar); $expected = ['Item04Workflow/A' => 'Entry', 'Item04Workflow/B' => 'Published']; $this->assertTrue(is_array($ar)); $this->assertTrue(isset($ar['items']) && is_array($ar['items'])); $this->assertTrue(isset($ar['options']) && is_array($ar['options'])); $this->assertEquals(2, count($ar)); foreach ($listData as $status => $label) { $this->assertTrue(array_key_exists($status, $ar['items'])); } $this->assertTrue($ar['options']['Item04Workflow/C']['disabled']); $this->assertTrue($ar['options']['Item04Workflow/D']['disabled']); }
public function testGetAllStatusListData() { $ar = WorkflowHelper::getAllStatusListData('Item04Workflow', Yii::$app->workflowSource); $expected = ['Item04Workflow/A' => 'Entry', 'Item04Workflow/B' => 'Published', 'Item04Workflow/C' => 'node C', 'Item04Workflow/D' => 'node D']; $this->assertEquals(4, count(array_intersect_assoc($expected, $ar))); }
/** * Returns the items and options for a dropDownList * All status options are in the list, but invalid transitions are disabled * * Example: * <pre> * $statusDropDownData = WorkflowHelper::getStatusDropDownData($model); * // Html * echo Html::dropDownList('status', $model->status, $statusDropdown['items'], ['options' => $statusDropdown['options']]); * // ActiveForm * echo $form->field($model, 'status')->dropDownList($statusDropDownData['items'], ['options' => $statusDropDownData['options']]); * </pre> * * @param BaseActiveRecord|SimpleWorkflowBehavior $model * @return array */ public static function getStatusDropDownData($model) { $transitions = array_keys($model->getWorkflowSource()->getTransitions($model->getWorkflowStatus()->getId())); $items = WorkflowHelper::getAllStatusListData($model->getWorkflow()->getId(), $model->getWorkflowSource()); $options = []; foreach (array_keys($items) as $status) { if ($status != $model->getWorkflowStatus()->getId() && !in_array($status, $transitions)) { $options[$status]['disabled'] = true; } } return ['items' => $items, 'options' => $options]; }