Soft Delete Filter Builder
Adds consistent active/deleted filters to read queries.
Function signature
ogBuildSoftDeleteFilter(deleted_column = 'is_deleted', include_deleted = false, options = array())
Categories
- Database Integrity
Parameters
deleted_columnSoft-delete column name.include_deletedWhether deleted rows should be included.optionsOptional deleted value and active value settings. Recognized keys: `active_value`.Return value
Public-safe status string returned by the function.
- success
- message
- data
Compatibility
Existing function name, slug, path, and call order preserved; advertised metadata corrected to the actual source behavior.
Minimum PHP version: 7.4
Security notes
Use caller-owned allowlists and procedural mysqli prepared execution where SQL plans are returned; validate file paths, MIME policies, and permissions before file or download workflows.
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Builds a consistent soft-delete filter for database read plans.
*
* @param string $deleted_column Soft-delete column name.
* @param bool $include_deleted Whether deleted rows should be included.
* @param array $options Optional deleted value and active value settings.
* @return array Soft-delete filter plan.
*/
function ogBuildSoftDeleteFilter($deleted_column = 'is_deleted', $include_deleted = false, $options = array()) {
$result = array(
'success' => false,
'message' => '',
'data' => array()
);
$deleted_column = trim((string)$deleted_column);
if (empty($deleted_column) || !preg_match('/^[a-zA-Z0-9_]+$/', $deleted_column)) {
$result['message'] = 'Invalid soft-delete column.';
return $result;
}
if (!is_array($options)) {
$options = array();
}
$active_value = 0;
if (isset($options['active_value'])) {
$active_value = $options['active_value'];
}
if ($include_deleted) {
$result['success'] = true;
$result['message'] = 'Deleted rows will be included.';
$result['data'] = array(
'where' => '',
'types' => '',
'params' => array()
);
return $result;
}
$type = 's';
if (is_int($active_value)) {
$type = 'i';
} elseif (is_float($active_value)) {
$type = 'd';
}
$result['success'] = true;
$result['message'] = 'Soft-delete filter built.';
$result['data'] = array(
'where' => '`' . $deleted_column . '` = ?',
'types' => $type,
'params' => array($active_value)
);
return $result;
}