Пример #1
0
 /**
  * validate form array values by model object
  * @param array $aForm
  * @param object $oModel a redbean model
  * @return boolean true for validate ok, false otherwise
  */
 public function validateFormByModel(&$aForm, &$oModel)
 {
     try {
         $bValid = $oModel->isValid();
     } catch (Exception $e) {
         $this->addMessage("Exception validating form: " . $e->getMessage(), "error");
         return false;
     }
     if (!$bValid) {
         $bFoundInvalid = false;
         $aErrorStack = $oModel->getErrorStack();
         //var_dump($oModel->getErrorStack());
         $iCnt = 0;
         //var_dump($aErrorStack->toArray());
         foreach ($aErrorStack as $sKey => $aError) {
             $sTargetField = $oModel->getTable()->getTableName() . "." . $sKey;
             //$this->addMessage("Field " . $sKey . ": " . implode(",", $aError), "error");
             foreach ($aForm as $sFieldKey => &$mFieldValue) {
                 if ($sFieldKey[0] != "#") {
                     //if not #dbfield, skip to next sfieldkey
                     if (!isset($mFieldValue["#dbfield"])) {
                         continue;
                     }
                     $sField = $mFieldValue["#dbfield"];
                     $sTable = "";
                     if (strpos($sField, ".") !== false) {
                         $aField = explode(".", $sField);
                         $sTable = $aField[0];
                         $sField = $aField[1];
                         $sTableField = $sTable . "." . $sField;
                     } else {
                         //form doesnt contain table, therefore void table name
                         $sTargetField = $sKey;
                         $sTableField = $sField;
                     }
                     //echo "finding: " . $sTableField . ", loop: " . $sTargetField . "\r\n<br/>";
                     if ($sTableField == $sTargetField) {
                         $sError = "";
                         foreach ($aError as $sErrorType) {
                             //echo "errotype: " . $sErrorType;
                             switch ($sErrorType) {
                                 case "length":
                                     $sError .= "Field length: " . strlen($mFieldValue["#value"]) . " exceed maximum length: " . $mFieldValue["#maxlength"];
                                     $bFoundInvalid = true;
                                     break;
                                 default:
                                     $sError .= FlexiModelUtil::getErrorStackLabel($sErrorType) . "\r\n<br/>";
                                     $bFoundInvalid = true;
                             }
                         }
                         $mFieldValue["#notice"] = array("msg" => $sError);
                         break;
                     }
                 }
             }
         }
         if ($bFoundInvalid) {
             return false;
         }
     }
     FlexiLogger::debug(__METHOD__, "is valid");
     return true;
 }