public function primaryKeyToCondition($condition, $objectKey = null)
{
$result = array();
// condition:
// [
// ["bla", "=", 1], "and"
//
// ]
//
// pk:
// 1
//
// pk:
// ["bla" => 2, "hosa" => 1]
//
// pk:
// [ ["bla" => 1], ["bla" => 2] ]
if ($condition instanceof Condition) {
return $condition->getRules();
}
if (is_array($condition) && array_key_exists(0, $condition) && is_array($condition[0]) && is_numeric(key($condition)) && is_numeric(key($condition[0]))) {
//its already a condition object
return $condition;
}
$primaries = null;
if ($objectKey && $this->objects->getDefinition($objectKey)) {
$primaries = $this->objects->getPrimaryList($objectKey);
}
if (array_key_exists(0, $condition)) {
foreach ($condition as $idx => $group) {
$cGroup = array();
if (is_array($group)) {
foreach ($group as $primKey => $primValue) {
if (!is_string($primKey)) {
$primKey = $primaries[$primKey];
}
if ($cGroup) {
$cGroup[] = 'and';
}
$cGroup[] = array($primKey, '=', $primValue);
}
} else {
$primKey = $idx;
if (!is_string($idx) && $primaries) {
$primKey = $primaries[0];
}
if ($cGroup) {
$cGroup[] = 'and';
}
$cGroup[] = array($primKey, '=', $group);
}
if ($result) {
$result[] = 'or';
}
$result[] = $cGroup;
}
} else {
//we only have to select one row
$group = array();
foreach ($condition as $primKey => $primValue) {
if ($group) {
$group[] = 'and';
}
$group[] = array($primKey, '=', $primValue);
}
$result[] = $group;
}
return $result;
}