1. sfWebDebugPanelCodeView.class.php
  2. /** * sfWebDebugPanelCodeView */
  3. class sfWebDebugPanelCodeView extends sfWebDebugPanel
  4. {
  5. public function getTitle()
  6. {
  7. sfProjectConfiguration::getActive()->loadHelpers('Url');
  8. return '<form style="display:inline"
  9. action="'.url_for('sfCodeView').'"><input type="text" name="class"
  10. size="5" value="sfCodeViewer"/></form>';
  11. }
  12. public function getPanelTitle()
  13. {
  14. return 'View php class code';
  15. }
  16. private function buildGroupedList($classes)
  17. {
  18. sfProjectConfiguration::getActive()->loadHelpers('Url');
  19. $coreList = "";
  20. $lastGroup = "";
  21. foreach ($classes as $className => $group)
  22. {
  23. if ($lastGroup != $group)
  24. {
  25. if (strlen($coreList)>0)
  26. {
  27. $coreList .= "</ul></li>";
  28. }
  29. $coreList .= "<li>".$group."<ul>";
  30. $lastGroup = $group;
  31. }
  32. $coreList .= "<li>".$className."</li>";
  33. }
  34. return "<ul>".$coreList."</ul>";
  35. }
  36. public function getPanelContent()
  37. {
  38. $coreList = "";
  39. $userList = "";
  40. $libDir = sfConfig::get("sf_symfony_lib_dir");
  41. $files = sfFinder::type('file')
  42. ->prune('plugins')
  43. ->prune('vendor')
  44. ->prune('skeleton')
  45. ->prune('default')
  46. ->name('*\.class\.php')
  47. ->in($libDir)
  48. ;
  49. sort($files, SORT_STRING);
  50. $classes = array();
  51. foreach ($files as $file)
  52. {
  53. $group = substr(str_replace(DIRECTORY_SEPARATOR, '/', dirname($file)),strlen($libDir)+1);
  54. $className = basename($file, '.class.php');
  55. $link = link_to($className, 'sfCodeView', array('class'=>$className));
  56. $classes[$link] = $group;
  57. }
  58. $coreList = $this->buildGroupedList($classes);
  59. //build user list
  60. $rootDir = sfConfig::get("sf_root_dir");
  61. $files = sfFinder::type('file')
  62. ->ignore_version_control()
  63. ->prune('cache')
  64. ->name('*\.php')
  65. ->sort_by_name()
  66. ->in($rootDir)
  67. ;
  68. $classes = array();
  69. $matches = array();
  70. foreach ($files as $file)
  71. {
  72. $group = substr(str_replace(DIRECTORY_SEPARATOR, '/', dirname($file)),strlen($rootDir)+1);
  73. preg_match_all('~^\s*(?:abstract\s+|final\s+)?(?:class|interface)\s+(\w+)~mi', file_get_contents($file), $matches);
  74. foreach ($matches[1] as $className)
  75. {
  76. $fileName = "";
  77. if ($className.'.class.php' != basename($file))
  78. {
  79. $fileName = ' ('.basename($file).')';
  80. }
  81. $link = link_to($className.$fileName, 'sfCodeView', array('class'=>$className));
  82. $classes[$link] = $group;
  83. }
  84. }
  85. $userList = $this->buildGroupedList($classes);
  86. return '<div id="sfCodeViewPluginContent">'.
  87. '<i>Enter the name of a class you want to view in the toolbar and hit \'enter\' to view its code</i>, or click one of the available classes below.'.
  88. '<div style="float: left; width:45%;"><h2>User classes</h2>'.$userList.'</div>'.
  89. '<div style="float: left; width:45%;"><h2>Symfony classes</h2>'.$coreList.'</div>'.
  90. '</div>';
  91. }
  92. }

Debug toolbar