| @@ 250-333 (lines=84) @@ | ||
| 247 | return $handle; |
|
| 248 | } |
|
| 249 | ||
| 250 | protected function findSource() |
|
| 251 | { |
|
| 252 | $traces = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT); |
|
| 253 | ||
| 254 | // Not relevant to determine source |
|
| 255 | $internalClasses = array( |
|
| 256 | 'DB', 'SQLExpression', 'DataList', 'DataObject', |
|
| 257 | 'DataQuery', 'SQLSelect', 'SQLQuery', 'SS_Map', 'SS_ListDecorator', 'Object' |
|
| 258 | ); |
|
| 259 | ||
| 260 | $viewerClasses = array( |
|
| 261 | 'SSViewer_DataPresenter', 'SSViewer_Scope', 'SSViewer', |
|
| 262 | 'ViewableData' |
|
| 263 | ); |
|
| 264 | ||
| 265 | $sources = array(); |
|
| 266 | foreach ($traces as $trace) { |
|
| 267 | $class = isset($trace['class']) ? $trace['class'] : null; |
|
| 268 | $line = isset($trace['line']) ? $trace['line'] : null; |
|
| 269 | $function = isset($trace['function']) ? $trace['function'] : null; |
|
| 270 | $type = isset($trace['type']) ? $trace['type'] : '::'; |
|
| 271 | ||
| 272 | /* @var $object SSViewer */ |
|
| 273 | $object = isset($trace['object']) ? $trace['object'] : null; |
|
| 274 | ||
| 275 | if (!$class) { |
|
| 276 | continue; |
|
| 277 | } |
|
| 278 | if ($function && $function == '{closure}') { |
|
| 279 | continue; |
|
| 280 | } |
|
| 281 | if (strpos($class, 'DebugBar') === 0) { |
|
| 282 | continue; |
|
| 283 | } |
|
| 284 | if (in_array($class, $internalClasses)) { |
|
| 285 | continue; |
|
| 286 | } |
|
| 287 | if (in_array($class, $viewerClasses)) { |
|
| 288 | if ($function == 'includeGeneratedTemplate') { |
|
| 289 | $templates = $object->templates(); |
|
| 290 | ||
| 291 | $template = null; |
|
| 292 | if (isset($templates['main'])) { |
|
| 293 | $template = basename($templates['main']); |
|
| 294 | } else { |
|
| 295 | $keys = array_keys($templates); |
|
| 296 | $key = reset($keys); |
|
| 297 | if (isset($templates[$key])) { |
|
| 298 | $template = $key.':'.basename($templates[$key]); |
|
| 299 | } |
|
| 300 | } |
|
| 301 | if ($template) { |
|
| 302 | $sources[] = $template; |
|
| 303 | } |
|
| 304 | } |
|
| 305 | continue; |
|
| 306 | } |
|
| 307 | ||
| 308 | $name = $class; |
|
| 309 | if ($function) { |
|
| 310 | $name .= $type.$function; |
|
| 311 | } |
|
| 312 | if ($line) { |
|
| 313 | $name .= ':'.$line; |
|
| 314 | } |
|
| 315 | ||
| 316 | $sources[] = $name; |
|
| 317 | ||
| 318 | if (count($sources) > 3) { |
|
| 319 | break; |
|
| 320 | } |
|
| 321 | ||
| 322 | ||
| 323 | // We reached a Controller, exit loop |
|
| 324 | if ($object && $object instanceof Controller) { |
|
| 325 | break; |
|
| 326 | } |
|
| 327 | } |
|
| 328 | ||
| 329 | if (empty($sources)) { |
|
| 330 | return 'Undefined source'; |
|
| 331 | } |
|
| 332 | return implode(' > ', $sources); |
|
| 333 | } |
|
| 334 | ||
| 335 | /** |
|
| 336 | * Execute the given SQL query. |
|
| @@ 222-305 (lines=84) @@ | ||
| 219 | return $handle; |
|
| 220 | } |
|
| 221 | ||
| 222 | protected function findSource() |
|
| 223 | { |
|
| 224 | $traces = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT); |
|
| 225 | ||
| 226 | // Not relevant to determine source |
|
| 227 | $internalClasses = array( |
|
| 228 | 'DB', 'SQLExpression', 'DataList', 'DataObject', |
|
| 229 | 'DataQuery', 'SQLSelect', 'SQLQuery', 'SS_Map', 'SS_ListDecorator', 'Object' |
|
| 230 | ); |
|
| 231 | ||
| 232 | $viewerClasses = array( |
|
| 233 | 'SSViewer_DataPresenter', 'SSViewer_Scope', 'SSViewer', |
|
| 234 | 'ViewableData' |
|
| 235 | ); |
|
| 236 | ||
| 237 | $sources = array(); |
|
| 238 | foreach ($traces as $trace) { |
|
| 239 | $class = isset($trace['class']) ? $trace['class'] : null; |
|
| 240 | $line = isset($trace['line']) ? $trace['line'] : null; |
|
| 241 | $function = isset($trace['function']) ? $trace['function'] : null; |
|
| 242 | $type = isset($trace['type']) ? $trace['type'] : '::'; |
|
| 243 | ||
| 244 | /* @var $object SSViewer */ |
|
| 245 | $object = isset($trace['object']) ? $trace['object'] : null; |
|
| 246 | ||
| 247 | if (!$class) { |
|
| 248 | continue; |
|
| 249 | } |
|
| 250 | if ($function && $function == '{closure}') { |
|
| 251 | continue; |
|
| 252 | } |
|
| 253 | if (strpos($class, 'DebugBar') === 0) { |
|
| 254 | continue; |
|
| 255 | } |
|
| 256 | if (in_array($class, $internalClasses)) { |
|
| 257 | continue; |
|
| 258 | } |
|
| 259 | if (in_array($class, $viewerClasses)) { |
|
| 260 | if ($function == 'includeGeneratedTemplate') { |
|
| 261 | $templates = $object->templates(); |
|
| 262 | ||
| 263 | $template = null; |
|
| 264 | if (isset($templates['main'])) { |
|
| 265 | $template = basename($templates['main']); |
|
| 266 | } else { |
|
| 267 | $keys = array_keys($templates); |
|
| 268 | $key = reset($keys); |
|
| 269 | if (isset($templates[$key])) { |
|
| 270 | $template = $key.':'.basename($templates[$key]); |
|
| 271 | } |
|
| 272 | } |
|
| 273 | if ($template) { |
|
| 274 | $sources[] = $template; |
|
| 275 | } |
|
| 276 | } |
|
| 277 | continue; |
|
| 278 | } |
|
| 279 | ||
| 280 | $name = $class; |
|
| 281 | if ($function) { |
|
| 282 | $name .= $type.$function; |
|
| 283 | } |
|
| 284 | if ($line) { |
|
| 285 | $name .= ':'.$line; |
|
| 286 | } |
|
| 287 | ||
| 288 | $sources[] = $name; |
|
| 289 | ||
| 290 | if (count($sources) > 3) { |
|
| 291 | break; |
|
| 292 | } |
|
| 293 | ||
| 294 | ||
| 295 | // We reached a Controller, exit loop |
|
| 296 | if ($object && $object instanceof Controller) { |
|
| 297 | break; |
|
| 298 | } |
|
| 299 | } |
|
| 300 | ||
| 301 | if (empty($sources)) { |
|
| 302 | return 'Undefined source'; |
|
| 303 | } |
|
| 304 | return implode(' > ', $sources); |
|
| 305 | } |
|
| 306 | ||
| 307 | /** |
|
| 308 | * Execute the given SQL query. |
|