public static function prepareData($data)
{
static $parents = array();
$result = array();
if (is_array($data) || $data instanceof CMap) {
foreach ($data as $key => $value) {
$result[$key] = self::prepareData($value);
}
} elseif (is_object($data)) {
if (!in_array($data, $parents, true)) {
array_push($parents, $data);
$result['class'] = get_class($data);
if ($data instanceof CActiveRecord) {
foreach ($data->attributes as $field => $value) {
$result[$field] = $value;
}
}
foreach (get_object_vars($data) as $key => $value) {
$result[$key] = self::prepareData($value);
}
array_pop($parents);
} else {
$result = get_class($data) . '()';
}
} else {
$result = $data;
}
return $result;
}