/**
  * Redo the following three functions to pull from a common ValidationFields array that contains information 
  * about if they're required, what their rules are and whether or not they should be visible in an array version of the model.
  */
 public static function fromArray(array $arr, $mode = "add")
 {
     $res = parent::fromArray($arr, $mode);
     return $res;
 }
 /**
  * Redo the following three functions to pull from a common ValidationFields array that contains information 
  * about if they're required, what their rules are and whether or not they should be visible in an array version of the model.
  */
 public static function fromArray(array $arr, $mode = "add", $proxy_id = false)
 {
     global $ENTRADA_USER;
     $res = parent::fromArray($arr, $mode);
     if ($res && $mode != "fetch") {
         //due to the way generate_calendars works this is a necessary step
         $res->start = isset($res->observership_start_date) ? strtotime($res->observership_start_date) : (isset($res->start) ? $res->start : 0);
         $res->end = isset($res->observership_finish_date) ? strtotime($res->observership_finish_date) : (isset($res->end) ? $res->end : 0);
         if (!$res->start) {
             add_error("<strong>Observership Start</strong> is a required field. Please ensure you've provided a value.");
             $res->VALID = false;
         }
         if ($ENTRADA_USER->getGroup() != "staff" && $ENTRADA_USER->getGroup() != "medtech" && $res->start < strtotime(date("Y-m-d", time()))) {
             add_error("Entry of historical observerships is not available, any entered observership must start tomorrow or later.");
             $res->VALID = false;
         }
         if ($ENTRADA_USER->getGroup() == "staff" || $ENTRADA_USER->getGroup() == "medtech") {
             $res->status = "approved";
         }
         if (!$res->end) {
             $res->end = $res->start;
         }
         if ($res->end < $res->start) {
             add_error("<strong>Observership Start</strong> is before <strong>Observership End</strong>.");
             $res->VALID = false;
         }
         //if proxy id set, map it to the field used by Model/database
         if (isset($arr["preceptor_associated_director"]) && $arr["preceptor_associated_director"]) {
             $res->preceptor_proxy_id = (int) $arr["preceptor_associated_director"];
             $res->preceptor_firstname = "";
             $res->preceptor_lastname = "";
             $res->preceptor_email = "";
         } elseif (!(isset($arr["preceptor_associated_director"]) && $arr["preceptor_associated_director"]) && !(isset($arr["preceptor_firstname"]) && $arr["preceptor_firstname"] && isset($arr["preceptor_lastname"]) && $arr["preceptor_lastname"] && isset($arr["preceptor_email"]) && $arr["preceptor_email"])) {
             //if no proxy id, and no manually entered data, data is invalid and error needs to display
             add_error("<strong>Preceptor</strong> is a required field. Please ensure you've provided a value.");
             $res->VALID = false;
         } else {
             $res->preceptor_proxy_id = "";
         }
         if (isset($arr["activity_type"]) && $arr["activity_type"] == "ipobservership") {
             if (!isset($arr["observership_details"]) || !$arr["observership_details"] || trim($arr["observership_details"]) == "") {
                 add_error("<strong>Observership Details</strong> is a required field. Please ensure you've provided a value.");
                 $res->VALID = false;
             }
         }
         if (!isset($arr["activity_type"]) || trim($arr["activity_type"]) == "") {
             add_error("<strong>Activity Type</strong> is a required field. Please ensure you've provided a value.");
         }
         if (!isset($arr["clinical_discipline"]) || trim($arr["clinical_discipline"]) == "") {
             add_error("<strong>Eligible Clinical Disciplines</strong> is a required field. Please ensure you've provided a value.");
         }
         if (!isset($arr["organisation"]) || trim($arr["organisation"]) == "") {
             add_error("<strong>Organisation</strong> is a required field. Please ensure you've provided a value.");
         }
         if (!isset($arr["address_l1"]) || trim($arr["address_l1"]) == "") {
             add_error("<strong>Address Line 1</strong> is a required field. Please ensure you've provided a value.");
         }
         if (!isset($arr["city"]) || trim($arr["city"]) == "") {
             add_error("<strong>City</strong> is a required field. Please ensure you've provided a value.");
         }
         if (trim($arr["prov_state"]) == "0") {
             add_error("<strong>Province</strong> is a required field. Please ensure you've provided a value.");
         }
         if ($mode == "add") {
             if (!isset($arr["read"]) || !trim($arr["read"])) {
                 add_error("You must agree to the procedures and regulations of the Student Observership policy.");
                 $res->VALID = false;
             }
         }
         $res->student_id = $proxy_id ? $proxy_id : $ENTRADA_USER->getActiveId();
     }
     return $res;
 }