*/
class CRM_Core_DAO extends DB_DataObject {
+ /**
+ * Primary key field(s).
+ *
+ * @var string[]
+ */
+ public static $_primaryKey = ['id'];
+
/**
* How many times has this instance been cloned.
*
if (empty($record['id'])) {
throw new CRM_Core_Exception("Cannot delete {$entityName} with no id.");
}
+ CRM_Utils_Type::validate($record['id'], 'Positive');
CRM_Utils_Hook::pre('delete', $entityName, $record['id'], $record);
$instance = new $className();
*/
public static function createSQLFilter($fieldName, $filter, $type = NULL, $alias = NULL, $returnSanitisedArray = FALSE) {
foreach ($filter as $operator => $criteria) {
- if (!CRM_Core_BAO_SchemaHandler::databaseSupportsUTF8MB4()) {
- foreach ((array) $criteria as $criterion) {
- if (!empty($criterion) && !is_numeric($criterion)
- // The first 2 criteria are redundant but are added as they
- // seem like they would
- // be quicker than this 3rd check.
- && max(array_map('ord', str_split($criterion))) >= 240) {
- // String contains unsupported emojis.
- // We return a clause that resolves to false as an emoji string by definition cannot be saved.
- // note that if we return just 0 for false if gets lost in empty checks.
- // https://stackoverflow.com/questions/16496554/can-php-detect-4-byte-encoded-utf8-chars
- return '0 = 1';
- }
- }
+ $emojiFilter = CRM_Utils_SQL::handleEmojiInQuery($criteria);
+ if ($emojiFilter === '0 = 1') {
+ return $emojiFilter;
}
if (in_array($operator, self::acceptedSQLOperators(), TRUE)) {