/** * Check unique field combinations. * The function is called by the validate() method automatically. It is * not necessary to call this manually in a validation process. * Errors that are found are stored in the $record parameter. * * @param array $record The record to validate */ public function validateUniqueFieldSets(&$record) { $db = $this->m_nodeObj->getDb(); foreach ($this->m_nodeObj->m_uniqueFieldSets as $uniqueFieldSet) { $query = $db->createQuery(); $query->addField('*'); $query->addTable($this->m_nodeObj->m_table); $attribs = []; foreach ($uniqueFieldSet as $field) { $attrib = $this->m_nodeObj->m_attribList[$field]; if ($attrib) { $attribs[] = $attrib; if (method_exists($attrib, 'createDestination') && isset($attrib->m_refKey) && is_array($attrib->m_refKey) && count($attrib->m_refKey) > 1) { $attrib->createDestination(); foreach ($attrib->m_refKey as $refkey) { $query->addCondition($query->quoteField($refkey) . " = '" . $db->escapeSQL($record[$attrib->fieldName()][$refkey]) . "'"); } } else { if (!$attrib->isNotNullInDb() && $attrib->isEmpty($record)) { $query->addCondition($query->quoteField($field) . ' IS NULL'); } else { $query->addCondition($query->quoteField($field) . " = '" . $attrib->value2db($record) . "'"); } } } else { Tools::atkerror("Field {$field} is mentioned in uniquefieldset but does not exist in " . $this->m_nodeObj->atkNodeUri()); } } if ($this->m_mode != 'add') { $query->addCondition('NOT (' . $this->m_nodeObj->primaryKey($record) . ')'); } if (count($db->getRows($query->buildSelect())) > 0) { Tools::atkTriggerError($record, $attribs, 'error_uniquefieldset'); } } }
/** * Checks if the file has a valid filetype. * * Note that obligatory and unique fields are checked by the * atkNodeValidator, and not by the validate() method itself. * * @param array $record The record that holds the value for this * attribute. If an error occurs, the error will * be stored in the 'atkerror' field of the record. * @param string $mode The mode for which should be validated ("add" or * "update") */ public function validate(&$record, $mode) { parent::validate($record, $mode); $this->isAllowedFileType($record); $error = $record[$this->fieldName()]['error']; if ($error > 0) { $error_text = $this->fetchFileErrorType($error); Tools::atkTriggerError($record, $this, $error_text, Tools::atktext($error_text, 'atk')); } }