Page($obj, $small); } else if($this->className() != 'WireDebugInfo') { // if other classes extend and implement their own class-specific methods $className = $obj->className(); if(method_exists($this, $className)) { $info = $this->$className($obj, $small); } } if(!$small) { $changes = $obj->getChanges(); if(count($changes)) $info['changes'] = $changes; $hooks = $this->getHooksInfo($obj); if(count($hooks)) $info['hooks'] = $hooks; } return $info; } /** * Get hooks debug info for the given Wire object * * @param Wire $obj * @return array * */ public function getHooksInfo(Wire $obj) { $hooks = array(); foreach($obj->getHooks() as $hook) { list($class, $priority) = explode(':', $hook['id']); $key = ''; $value = ''; if($hook['options']['before']) $key .= "before "; if($hook['options']['type'] == 'property') { $key .= "property "; } else if($hook['options']['after']) { if(wireMethodExists($class, $hook['method']) || wireMethodExists($class, '___' . $hook['method'])) { $key .= "after "; } } if($hook['options']['type'] == 'property' || !$hook['options']['allInstances']) { $key .= "$class" . '->' . "$hook[method]"; } else { $key .= "$class::$hook[method]"; } $filename = ''; if(!empty($hook['toObject'])) { /** @var Wire $toObject */ $toObject = $hook['toObject']; $value .= $toObject->className() . "->"; $ref = new \ReflectionClass($hook['toObject']); $filename = $ref->getFileName(); } if(!empty($hook['toMethod'])) { if(is_string($hook['toMethod'])) { $value .= "$hook[toMethod]()"; } else if(is_callable($hook['toMethod'])) { $ref = new \ReflectionFunction($hook['toMethod']); $filename = $ref->getFileName(); $value = "anonymous function()"; } } if($filename) $value .= " in " . basename($filename); if($priority != "100.0") $value .= " ($priority)"; if(!isset($hooks[$key])) { $hooks[$key] = $value; } else { if(!is_array($hooks[$key])) $hooks[$key] = array($hooks[$key]); $hooks[$key][] = $value; } } return $hooks; } /** * Debug info specific to Page objects * * @param Page $page * @param bool $small * @return array * */ public function Page(Page $page, $small = false) { if($small) { // minimal debug info $info = array( 'id' => $page->id, 'name' => $page->name, 'parent' => $page->parent && $page->parent->id ? $page->parent->path() : '', 'status' => implode(', ', $page->status(true)), 'template' => $page->template ? $page->template->name : '', 'numChildren' => $page->numChildren(), ); if(empty($info['numChildren'])) unset($info['numChildren']); if(empty($info['status'])) unset($info['status']); foreach($page->getArray() as $fieldName => $fieldValue) { if(is_object($fieldValue)) { $className = wireClassName($fieldValue); if(method_exists($fieldValue, '__toString')) { $fieldValue = (string) $fieldValue; if($fieldValue !== $className) $fieldValue = "($className) $fieldValue"; } else { $fieldValue = $className; } } $info[$fieldName] = $fieldValue; } return $info; } // verbose debug info $info = array( 'instanceID' => $page->instanceID, 'id' => $page->id, 'name' => $page->name, 'namePrevious' => '', 'path' => $page->path(), 'status' => implode(', ', $page->status(true)), 'statusPrevious' => 0, 'template' => $page->template ? $page->template->name : '', 'templatePrevious' => '', 'parent' => $page->parent ? $page->parent->path : '', 'parentPrevious' => '', 'numChildren' => $page->numChildren(), 'sort' => $page->sort, 'sortfield' => $page->sortfield, 'created' => $page->created, 'modified' => $page->modified, 'published' => $page->published, 'createdUser' => $page->createdUser ? $page->createdUser->name : $page->created_users_id, 'modifiedUser' => $page->modifiedUser ? $page->modifiedUser->name : $page->modified_users_id, ); if($page->namePrevious) { $info['namePrevious'] = $page->namePrevious; } else { unset($info['namePrevious']); } if($page->statusPrevious !== null) { $info['statusPrevious'] = implode(', ', $page->status(true, $page->statusPrevious)); } else { unset($info['statusPrevious']); } if($page->templatePrevious) { $info['templatePrevious'] = $page->templatePrevious->name; } else { unset($info['templatePrevious']); } if($page->parentPrevious) { $info['parentPrevious'] = $page->parentPrevious->path(); } else { unset($info['parentPrevious']); } if($page->isNew()) $info['isNew'] = 1; $info['isLoaded'] = (int) $page->isLoaded(); $info['outputFormatting'] = (int) $page->outputFormatting(); if($page->quietMode) $info['quietMode'] = 1; foreach(array('created', 'modified', 'published') as $key) { $info[$key] = wireDate($this->wire('config')->dateFormat, $info[$key]) . " " . "(" . wireDate('relative', $info[$key]) . ")"; } return $info; } }