~george-edison55/jsstudio/addons_site

« back to all changes in this revision

Viewing changes to index.php

  • Committer: Nathan Osman
  • Date: 2011-08-21 21:57:47 UTC
  • Revision ID: admin@quickmediasolutions.com-20110821215747-vumosffkruwtgfa0
Initial commit of site contents.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
//=======================================================================
 
4
//                            index.php
 
5
//                  Copyright (C) 2011 Nathan Osman
 
6
//
 
7
// This program is free software: you can redistribute it and/or modify
 
8
// it under the terms of the GNU General Public License as published by
 
9
// the Free Software Foundation, either version 3 of the License, or
 
10
// (at your option) any later version.
 
11
//
 
12
// This program is distributed in the hope that it will be useful,
 
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
// GNU General Public License for more details.
 
16
//
 
17
// You should have received a copy of the GNU General Public License
 
18
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
//=======================================================================
 
20
 
 
21
// All controllers must derive from BaseController
 
22
require_once 'base_controller.php';
 
23
 
 
24
class JSStudioAddons
 
25
{
 
26
    private $controller = 'addons'; // the default controller
 
27
    private $action     = 'index';  // and the default action
 
28
    
 
29
    private function FatalError($details)
 
30
    {
 
31
        header('Content-type: text/plain');
 
32
        echo "This web application has encountered a serious internal error.\n" .
 
33
             "Please try reloading the page or contact <admin@quickmediasolutions.com> if you continue to encounter this error.\n\n" .
 
34
             'Details: ' . $details;
 
35
        exit;
 
36
    }
 
37
    
 
38
    // Converts one_class to OneClass
 
39
    private function GetClassName($raw_name)
 
40
    {
 
41
        return str_replace(' ', '', ucwords(str_replace('_', ' ', $raw_name))) . 'Controller';
 
42
    }
 
43
    
 
44
    private function ParseURL()
 
45
    {
 
46
        // The original requested path is passed to us
 
47
        // in a $_GET variable as 'url'.
 
48
        $url_parts = explode('/', $_GET['url']);
 
49
        
 
50
        // Grab the parameters that were supplied
 
51
        if(count($url_parts) > 0 && $url_parts[0] != '')
 
52
        {
 
53
            $this->controller = $url_parts[0];
 
54
            if(count($url_parts) > 1 && $url_parts[1] != '')
 
55
                $this->action = $url_parts[1];
 
56
        }
 
57
        
 
58
        // Make sure that there were no bad characters in the
 
59
        // controller and the action.
 
60
        if(!preg_match('/^\w+$/', $this->controller) ||
 
61
           !preg_match('/^\w+$/', $this->action))
 
62
            $this->FatalError('The request URL is invalid.');
 
63
    }
 
64
    
 
65
    public function RunController()
 
66
    {
 
67
        // We have a controller name... check for the file's
 
68
        // existence in the controller's folder.
 
69
        $controller_filename = "controllers/{$this->controller}.php";
 
70
        if(!is_file($controller_filename))
 
71
            $this->FatalError("The '{$this->controller}' controller does not exist.");
 
72
        
 
73
        // Load the controller file
 
74
        require $controller_filename;
 
75
        
 
76
        // Now attempt to find the appropriate class in the controller
 
77
        $class_name = $this->GetClassName($this->controller);
 
78
        if(class_exists($class_name) === FALSE)
 
79
            $this->FatalError("The class '$class_name' does not exist within the file '$controller_filename'.");
 
80
        
 
81
        // Create an instance of the class
 
82
        $controller_instance = new $class_name();
 
83
        
 
84
        // Make sure the class derives from BaseController
 
85
        if(!$controller_instance instanceof BaseController)
 
86
            $this->FatalError("The class '$class_name' must derive from BaseController.");
 
87
        
 
88
        // Make sure the specified method exists within the class
 
89
        $method_name = $this->action;
 
90
        if(method_exists($class_name, $method_name) === FALSE)
 
91
            $this->FatalError("The class '$class_name' does not contain a method for the action '$method_name'.");
 
92
        
 
93
        // Okay, now invoke the method
 
94
        $controller_instance->$method_name();
 
95
        
 
96
        // Return the view variables that were created by the controller
 
97
        return $controller_instance->GetViewVariables();
 
98
    }
 
99
    
 
100
    private function DisplayView($view_variables)
 
101
    {
 
102
        // Make sure that the view exists
 
103
        $view_filename = "views/{$this->controller}/{$this->action}.inc";
 
104
        if(!is_file($view_filename))
 
105
            $this->FatalError("The view for the action {$this->action} is missing.");
 
106
        
 
107
        // Now we need to import all of the variables
 
108
        // in $view_variables into the local scope.
 
109
        foreach($view_variables as $key =>$value)
 
110
            $$key = $value;
 
111
        
 
112
        // Now run the view
 
113
        require_once $view_filename;
 
114
    }
 
115
    
 
116
    public function Go()
 
117
    {
 
118
        // Start by parsing the URL
 
119
        $this->ParseURL();
 
120
        
 
121
        // Now run the selected controller
 
122
        $view_vars = $this->RunController();
 
123
        
 
124
        // ...and lastly display the view
 
125
        $this->DisplayView($view_vars);
 
126
    }
 
127
}
 
128
 
 
129
$addons = new JSStudioAddons();
 
130
$addons->Go();
 
131
 
 
132
?>