/** * @param mixed $primary * * @return Entity\DeleteResult */ public static function delete($primary) { global $USER_FIELD_MANAGER; // check primary static::normalizePrimary($primary); static::validatePrimary($primary); // get old data $oldData = static::getByPrimary($primary)->fetch(); $hlblock = static::getHighloadBlock(); $entity = static::getEntity(); $result = new Entity\DeleteResult(); //event before delete $event = new Entity\Event($entity, self::EVENT_ON_BEFORE_DELETE, array("id" => $primary)); $event->send(); $event->getErrors($result); //event before delete (modern with namespace) $event = new Entity\Event($entity, self::EVENT_ON_BEFORE_DELETE, array("id" => $primary, "primary" => $primary, "oldFields" => $oldData), true); $event->send(); $event->getErrors($result); // return if any error if (!$result->isSuccess(true)) { return $result; } //event on delete $event = new Entity\Event($entity, self::EVENT_ON_DELETE, array("id" => $primary)); $event->send(); //event on delete (modern with namespace) $event = new Entity\Event($entity, self::EVENT_ON_DELETE, array("id" => $primary, "primary" => $primary, "oldFields" => $oldData), true); $event->send(); // remove row $connection = Main\Application::getConnection(); $helper = $connection->getSqlHelper(); $tableName = $entity->getDBTableName(); $id = array(); foreach ($primary as $k => $v) { $id[] = $k . " = '" . $helper->forSql($v) . "'"; } $where = implode(' AND ', $id); $sql = "DELETE FROM " . $tableName . " WHERE " . $where; $connection->queryExecute($sql); $fields = $USER_FIELD_MANAGER->getUserFields('HLBLOCK_' . $hlblock['ID']); foreach ($oldData as $k => $v) { $userfield = $fields[$k]; // remove multi values if ($userfield['MULTIPLE'] == 'Y') { $utmTableName = HighloadBlockTable::getMultipleValueTableName($hlblock, $userfield); $connection->query(sprintf('DELETE FROM %s WHERE %s = %d', $helper->quote($utmTableName), $helper->quote('ID'), $primary['ID'])); } // remove files if ($userfield["USER_TYPE"]["BASE_TYPE"] == "file") { if (is_array($oldData[$k])) { foreach ($oldData[$k] as $value) { \CFile::delete($value); } } else { \CFile::delete($oldData[$k]); } } } //event after delete $event = new Entity\Event($entity, self::EVENT_ON_AFTER_DELETE, array("id" => $primary)); $event->send(); //event after delete (modern with namespace) $event = new Entity\Event($entity, self::EVENT_ON_AFTER_DELETE, array("id" => $primary, "primary" => $primary, "oldFields" => $oldData), true); $event->send(); return $result; }