module; } public function _validate_request($segments) { if (count($segments) == 0) return $segments; /* locate module controller */ if ($located = $this->locate($segments)) return $located; /* use a default 404_override controller */ if (isset($this->routes['404_override']) AND $this->routes['404_override']) { $segments = explode('/', $this->routes['404_override']); if ($located = $this->locate($segments)) return $located; } /* no controller found */ show_404(implode('/', $segments)); } /** Locate the controller **/ public function locate($segments) { $this->module = ''; $this->directory = ''; $ext = $this->config->item('controller_suffix').EXT; /* use module route if available */ if (isset($segments[0]) AND $routes = Modules::parse_routes($segments[0], implode('/', $segments))) { $segments = $routes; } /* get the segments array elements */ list($module, $directory, $controller) = array_pad($segments, 3, NULL); /* check modules */ foreach (Modules::$locations as $location => $offset) { /* module exists? */ if (is_dir($source = $location.$module.'/controllers/')) { $this->module = $module; $this->directory = $offset.$module.'/controllers/'; /* module sub-controller exists? */ if($directory AND is_file($source.$directory.$ext)) { return array_slice($segments, 1); } /* module sub-directory exists? */ if($directory AND is_dir($source.$directory.'/')) { $source = $source.$directory.'/'; $this->directory .= $directory.'/'; /* module sub-directory controller exists? */ if(is_file($source.$directory.$ext)) { return array_slice($segments, 1); } /* module sub-directory sub-controller exists? */ if($controller AND is_file($source.$controller.$ext)) { return array_slice($segments, 2); } } /* module controller exists? */ if(is_file($source.$module.$ext)) { return $segments; } } } /* application controller exists? */ if (is_file(APPPATH.'controllers/'.$module.$ext)) { return $segments; } /* application sub-directory controller exists? */ if($directory AND is_file(APPPATH.'controllers/'.$module.'/'.$directory.$ext)) { $this->directory = $module.'/'; return array_slice($segments, 1); } /* application sub-directory default controller exists? */ if (is_file(APPPATH.'controllers/'.$module.'/'.$this->default_controller.$ext)) { $this->directory = $module.'/'; return array($this->default_controller); } } public function set_class($class) { $this->class = $class.$this->config->item('controller_suffix'); } }