public static function reorder($criterion_id, $fromId = null, $fromOldPosition = null, $oldPositionId = null) { if (!is_numeric($criterion_id)) { return false; } $modelQuestion = new Model_Question(); $orderBy = 0; $where = array('CriterionId = ?' => $criterion_id); $order = array('Designation ASC'); $questions = $modelQuestion->getAll($where, $order); $newPositionRowId = null; if ($fromId) { $newPositionRow = $modelQuestion->getQuestionById($fromId); $newPositionRowId = $newPositionRow->getId() ? $newPositionRow->getId() : null; } if ($fromOldPosition) { $fromOldPosition = $fromOldPosition ? $fromOldPosition : null; } $toPositionRowId = null; if ($oldPositionId) { $toPositionRow = $modelQuestion->getQuestionById($oldPositionId); $toPositionRowId = $toPositionRow->getId() ? $toPositionRow->getId() : null; $toNewPosition = $toPositionRow->getDesignation() ? $toPositionRow->getDesignation() : null; } if (!is_object($questions) && !(count($questions) > 0)) { return false; } foreach ($questions as $questionRow) { $orderBy++; if ($questionRow->getId() == $newPositionRowId) { // não editar $newPositionRowId continue; } $data['parent_id'] = $criterion_id; $data['question_type_id'] = $questionRow->getQuestionTypeId(); $data['parent_question_id'] = $questionRow->getParentQuestionId(); $data['value'] = $questionRow->getValue(); $data['supporting_text'] = $questionRow->getSupportingText(); $data['version'] = $questionRow->getVersion(); $data['status'] = $questionRow->getStatus(); $data['designation'] = $orderBy; if ($questionRow->getId() == $toPositionRowId) { $questionRow->setId($toPositionRowId); $data['designation'] = $toNewPosition + ($fromOldPosition <= $toNewPosition ? -1 : +1); } $modelQuestion->updateQuestion($questionRow, $data); } return true; }