/** * Displays the status for the model passed as argument. * * This method assumes that the status includes a metadata value called 'labelTemplate' that contains * the HTML template of the rendering status. In this template the string '{label}' will be replaced by the * status label. * * Example : * 'status' => [ * 'draft' => [ * 'label' => 'Draft', * 'transition' => ['ready' ], * 'metadata' => [ * 'labelTemplate' => '<span class="label label-default">{label}</span>' * ] * ], * * @param BaseActiveRecord $model * @return string|NULL the HTML rendered status or null if not labelTemplate is found */ public static function renderLabel($model) { if ($model->hasWorkflowStatus()) { $labelTemplate = $model->getWorkflowStatus()->getMetadata('labelTemplate'); if (!empty($labelTemplate)) { return strtr($labelTemplate, ['{label}' => $model->getWorkflowStatus()->getLabel()]); } } return null; }
/** * 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]; }