diff --git a/dev/CodeViewer.php b/dev/CodeViewer.php
index 5be278fb5..e3768a837 100644
--- a/dev/CodeViewer.php
+++ b/dev/CodeViewer.php
@@ -6,6 +6,12 @@
* @subpackage tools
*/
class CodeViewer extends Controller {
+
+ public static $url_handlers = array (
+ '' => 'browse',
+ '$Class' => 'viewClass'
+ );
+
/**
* Define a simple finite state machine.
* Top keys are the state names. 'start' is the first state, and 'die' is the error state.
@@ -77,7 +83,52 @@ class CodeViewer extends Controller {
if(!Permission::check('ADMIN')) return Security::permissionFailure();
ManifestBuilder::load_test_manifest();
}
-
+
+ public function browse() {
+ $classes = ClassInfo::subclassesFor('SapphireTest');
+
+ array_shift($classes);
+ ksort($classes);
+
+ $result ='
View any of the following test classes
';
+ $result .='';
+
+ $result .='View any of the following other classes
';
+
+ $classes = array_keys(ClassInfo::allClasses());
+ sort($classes);
+
+ $result .='';
+
+ return $this->customise(array (
+ 'Content' => $result
+ ))->renderWith('CodeViewer');
+ }
+
+ public function viewClass(HTTPRequest $request) {
+ $class = $request->param('Class');
+
+ if(!class_exists($class)) {
+ throw new Exception('CodeViewer->viewClass(): not passed a valid class to view (does the class exist?)');
+ }
+
+ return $this->customise(array (
+ 'Content' => $this->testAnalysis(getClassFile($class))
+ ))->renderWith('CodeViewer');
+ }
+
+ public function Link($action = null) {
+ return Controller::join_links(Director::absoluteBaseURL(), 'dev/viewcode/', $action);
+ }
+
protected $classComment, $methodComment;
function saveClassComment($token) {
@@ -210,32 +261,6 @@ class CodeViewer extends Controller {
protected $classes = array();
protected $currentMethod, $currentClass;
- function Content() {
- $className = $this->urlParams['ID'];
- if($className && ClassInfo::exists($className)) {
- return $this->testAnalysis(getClassFile($className));
- } else {
- $result = "View any of the following test classes
";
- $classes = ClassInfo::subclassesFor('SapphireTest');
- ksort($classes);
- foreach($classes as $className) {
- if($className == 'SapphireTest') continue;
- $result .= "$className";
- }
-
- $result .= "View any of the following other classes
";
- global $_CLASS_MANIFEST;
- $classes = array_keys(ClassInfo::allClasses());
- sort($classes);
- foreach($classes as $className) {
- if(preg_match('/^[A-Za-z][A-Za-z0-9]*$/', $className) && isset($_CLASS_MANIFEST[$className])) {
- $result .= "$className";
- }
- }
- return $result;
- }
- }
-
function testAnalysis($file) {
$content = file_get_contents($file);
$tokens = token_get_all($content);