<?php /** * @package FWork * @subpackage index.php * @version 1.0b * @author Maksim O. Gusev maxgusev@gmail.com * @copyright 2016 Maksim O. Gusev * */ /* We determine our location */ $current_folder = realpath("."); $current_folder = rtrim($current_folder, '/') . '/'; /* Check the availability and accessibility of a base FWork class */ $fwork_core_class_def = $current_folder . "fwork/system/fwork.php"; if (is_readable($fwork_core_class_def) == FALSE) { exit("Error! Execution is interrupted! Cant read FWork core class definition: " . $fwork_core_class_def); } /* Load FWork core class definition */ require_once $fwork_core_class_def; /* Call FWork system */ $fwork = new fwork($current_folder); $fwork->run();
/** * */ public function run() { /* Try to create logger */ $log_file = $this->fwork_log_path . "fwork.log"; try { $this->logger = new logger($log_file, log_level::ERROR, get_class($this)); } catch (Exception $e) { $this->terminate($e); } /* Try to open log file */ try { $this->logger->open(); } catch (Exception $e) { $this->terminate($e); } $this->logger->write_message("I started! Version " . $this->version, log_level::NOTICE); /* Try to load config */ $this->config = new config($this->fwork_config_path); $this->logger->write_message("Load config \"router\"", log_level::NOTICE); $this->config->load('router'); $this->logger->write_message("Get from config default_controller: " . $this->config->item('default_controller'), log_level::NOTICE); $this->logger->write_message("Get from config default_method: " . $this->config->item('default_method'), log_level::NOTICE); $this->logger->write_message("Get from config 404_controller: " . $this->config->item('404_controller'), log_level::NOTICE); $this->logger->write_message("Load config \"site\"", log_level::NOTICE); $this->config->load('site'); $this->logger->write_message("Get from config base_url: " . $this->config->item('base_url'), log_level::NOTICE); /* Validate url */ fwork::$base_url = $this->config->item('base_url'); $full_url = $this->config->item('base_url') . $_SERVER['REQUEST_URI']; $this->logger->write_message("Try to validate full url: " . $full_url, log_level::NOTICE); $full_url_is_valid = filter_var($full_url, FILTER_VALIDATE_URL); if ($full_url_is_valid == FALSE) { $this->logger->write_message("Full url is not valid", log_level::WARNING); } /* Define controller and method name */ $c_name = $this->config->item('default_controller'); $m_name = $this->config->item('default_method'); /* Parse url */ $this->logger->write_message("Try to parse url", log_level::NOTICE); $url_cut = explode("?", $_SERVER['REQUEST_URI'], 2)[0]; $url_parts = explode('/', $url_cut); $this->logger->write_message("Url without GET variables: " . $url_cut, log_level::NOTICE); /* Convert URL parts to lower chars */ foreach ($url_parts as $key => $item) { $url_parts[$key] = mb_strtolower($item); } /* Parse url parts */ if (count($url_parts) < 2 || count($url_parts) > 3) { $c_name = $this->config->item('404_controller'); } if (count($url_parts) == 2) { if (strcmp($url_parts[1], '') !== 0) { $m_name = $url_parts[1]; } } if (count($url_parts) == 3) { $c_name = $url_parts[1]; if (strcmp($url_parts[2], '') !== 0) { $m_name = $url_parts[2]; } } $this->logger->write_message("Parsed controller from url: " . $c_name, log_level::NOTICE); $this->logger->write_message("Parsed method from url: " . $m_name, log_level::NOTICE); /* Try to load controller */ $c_class_file = fwork::$app_path . 'controllers/' . $c_name . '.php'; if (file_exists($c_class_file)) { $this->logger->write_message("Controller file found. Require filename: " . $c_class_file, log_level::NOTICE); require_once $c_class_file; } else { $this->logger->write_message("Controller file not found. Filename: " . $c_class_file, log_level::WARNING); $this->logger->write_message("Try to find 404 controller.", log_level::NOTICE); /* Try to route to 404 */ $c_name = $this->config->item('404_controller'); $c404_class_file = fwork::$app_path . 'controllers/' . $c_name . '.php'; if (file_exists($c404_class_file)) { $this->logger->write_message("Controller 404 file found. Require filename: " . $c404_class_file, log_level::NOTICE); require_once $c404_class_file; } else { $this->logger->write_message("Controller 404 file not found. Nothing to do.", log_level::WARNING); exit(1); } } $c_obj = new $c_name($m_name); $this->logger->write_message("I finished work", log_level::NOTICE); }