BaseEventTypeController::setAndValidateElementsFromData PHP Method

setAndValidateElementsFromData() protected method

Returns any validation errors that arise.
protected setAndValidateElementsFromData ( array $data ) : array
$data array
return array $errors
    protected function setAndValidateElementsFromData($data)
    {
        $errors = array();
        $elements = array();
        // only process data for elements that are part of the element type set for the controller event type
        foreach ($this->event_type->getAllElementTypes() as $element_type) {
            $from_data = $this->getElementsForElementType($element_type, $data);
            if (count($from_data) > 0) {
                $elements = array_merge($elements, $from_data);
            } elseif ($element_type->required) {
                $errors[$this->event_type->name][] = $element_type->name . ' is required';
                $elements[] = $element_type->getInstance();
            }
        }
        if (!count($elements)) {
            $errors[$this->event_type->name][] = 'Cannot create an event without at least one element';
        }
        // assign
        $this->open_elements = $elements;
        // validate
        foreach ($this->open_elements as $element) {
            $this->setValidationScenarioForElement($element);
            if (!$element->validate()) {
                $name = $element->getElementTypeName();
                foreach ($element->getErrors() as $errormsgs) {
                    foreach ($errormsgs as $error) {
                        $errors[$name][] = $error;
                    }
                }
            }
        }
        //event date
        if (isset($data['Event']['event_date'])) {
            $event = $this->event;
            $event->event_date = Helper::convertNHS2MySQL($data['Event']['event_date']);
            if (!$event->validate()) {
                foreach ($event->getErrors() as $errormsgs) {
                    foreach ($errormsgs as $error) {
                        $errors[$this->event_type->name][] = $error;
                    }
                }
            }
        }
        return $errors;
    }

Usage Example

Esempio n. 1
0
 /**
  * custom validation for virtual clinic referral.
  *
  * @TODO: this should hand off validation to a faked PatientTicket request via the API.
  *
  * @param array $data
  *
  * @return array
  */
 protected function setAndValidateElementsFromData($data)
 {
     $errors = parent::setAndValidateElementsFromData($data);
     if (isset($data['patientticket_queue']) && ($api = Yii::app()->moduleAPI->get('PatientTicketing'))) {
         $co_sid = @$data[\CHtml::modelName(models\Element_OphCiExamination_ClinicOutcome::model())]['status_id'];
         $status = models\OphCiExamination_ClinicOutcome_Status::model()->findByPk($co_sid);
         if ($status && $status->patientticket) {
             $err = array();
             $queue = null;
             if (!$data['patientticket_queue']) {
                 $err['patientticket_queue'] = 'You must select a valid Virtual Clinic for referral';
             } elseif (!($queue = $api->getQueueForUserAndFirm(Yii::app()->user, $this->firm, $data['patientticket_queue']))) {
                 $err['patientticket_queue'] = 'Virtual Clinic not found';
             }
             if ($queue) {
                 if (!$api->canAddPatientToQueue($this->patient, $queue)) {
                     $err['patientticket_queue'] = 'Cannot add Patient to Queue';
                 } else {
                     list($ignore, $fld_errs) = $api->extractQueueData($queue, $data, true);
                     $err = array_merge($err, $fld_errs);
                 }
             }
             if (count($err)) {
                 $et_name = models\Element_OphCiExamination_ClinicOutcome::model()->getElementTypeName();
                 if (@$errors[$et_name]) {
                     $errors[$et_name] = array_merge($errors[$et_name], $err);
                 } else {
                     $errors[$et_name] = $err;
                 }
             }
         }
     }
     return $errors;
 }
All Usage Examples Of BaseEventTypeController::setAndValidateElementsFromData
BaseEventTypeController