OEModule\OphCiExamination\controllers\DefaultController::mergeNextStep PHP Метод

mergeNextStep() защищенный Метод

Merge workflow next step elements into existing elements.
protected mergeNextStep ( array $elements, ElementType $parent = null ) : array
$elements array
$parent ElementType
Результат array
    protected function mergeNextStep($elements, $parent = null)
    {
        if (!($event = $this->event)) {
            throw new \CException('No event set for step merging');
        }
        if (!($next_step = $this->getNextStep($event))) {
            throw new \CException('No next step available');
        }
        $parent_id = $parent ? $parent->id : null;
        //TODO: should we be passing episode here?
        $extra_elements = $this->getElementsByWorkflow($next_step, $this->episode, $parent_id);
        $extra_by_etid = array();
        foreach ($extra_elements as $extra) {
            $extra_by_etid[$extra->getElementType()->id] = $extra;
        }
        $merged_elements = array();
        foreach ($elements as $element) {
            $element_type = $element->getElementType();
            $merged_elements[] = $element;
            if (isset($extra_by_etid[$element_type->id])) {
                unset($extra_by_etid[$element_type->id]);
            }
        }
        foreach ($extra_by_etid as $extra_element) {
            $extra_element->setDefaultOptions();
            // Precache Element Type to avoid bug in usort
            $extra_element->getElementType();
            $merged_elements[] = $extra_element;
        }
        usort($merged_elements, function ($a, $b) {
            if ($a->getElementType()->display_order == $b->getElementType()->display_order) {
                return 0;
            }
            return $a->getElementType()->display_order > $b->getElementType()->display_order ? 1 : -1;
        });
        return $merged_elements;
    }
DefaultController