Ejemplo n.º 1
0
 /**
  * Verify that a variable is of a given type.
  *
  * @param mixed $data
  *   The value to validate.
  * @param string $type
  *   The type to validate against.
  * @param bool $abort
  *   If TRUE, the operation will CRM_Core_Error::fatal() on invalid data.
  * @name string $name
  *   The name of the attribute
  *
  * @return mixed
  *   The data, escaped if necessary
  */
 public static function validate($data, $type, $abort = TRUE, $name = 'One of parameters ')
 {
     switch ($type) {
         case 'Integer':
         case 'Int':
             if (CRM_Utils_Rule::integer($data)) {
                 return (int) $data;
             }
             break;
         case 'Positive':
             if (CRM_Utils_Rule::positiveInteger($data)) {
                 return (int) $data;
             }
             break;
         case 'Boolean':
             if (CRM_Utils_Rule::boolean($data)) {
                 return $data;
             }
             break;
         case 'Float':
         case 'Money':
             if (CRM_Utils_Rule::numeric($data)) {
                 return $data;
             }
             break;
         case 'Text':
         case 'String':
         case 'Link':
         case 'Memo':
             return $data;
         case 'Date':
             // a null date is valid
             if (strlen(trim($data)) == 0) {
                 return trim($data);
             }
             if (preg_match('/^\\d{8}$/', $data) && CRM_Utils_Rule::mysqlDate($data)) {
                 return $data;
             }
             break;
         case 'Timestamp':
             // a null timestamp is valid
             if (strlen(trim($data)) == 0) {
                 return trim($data);
             }
             if ((preg_match('/^\\d{14}$/', $data) || preg_match('/^\\d{8}$/', $data)) && CRM_Utils_Rule::mysqlDate($data)) {
                 return $data;
             }
             break;
         case 'ContactReference':
             // null is valid
             if (strlen(trim($data)) == 0) {
                 return trim($data);
             }
             if (CRM_Utils_Rule::validContact($data)) {
                 return $data;
             }
             break;
         case 'MysqlColumnNameOrAlias':
             if (CRM_Utils_Rule::mysqlColumnNameOrAlias($data)) {
                 return $data;
             }
             break;
         case 'MysqlOrderByDirection':
             if (CRM_Utils_Rule::mysqlOrderByDirection($data)) {
                 return strtolower($data);
             }
             break;
         case 'MysqlOrderBy':
             if (CRM_Utils_Rule::mysqlOrderBy($data)) {
                 return $data;
             }
             break;
         default:
             CRM_Core_Error::fatal("Cannot recognize {$type} for {$data}");
             break;
     }
     if ($abort) {
         $data = htmlentities($data);
         CRM_Core_Error::fatal("{$name} (value: {$data}) is not of the type {$type}");
     }
     return NULL;
 }