. */ define("PHPGITWEB_VERSION", "0.0.1"); require_once("lib/ContentProvider.class.php"); require_once("lib/ProjectLoader.class.php"); require_once("lib/CommitLoader.class.php"); require_once("lib/GitCommand.class.php"); require_once("lib/Tools.class.php"); require_once("lib/Validation.class.php"); require_once("lib/graph.class.php"); class PHPGitWeb { private $page, $rendertime; private $project, $project_loader, $project_header; public function __construct() { $this->rendertime = microtime(true); $this->page = new ContentProvider('main', 'main'); set_error_handler(array($this, "error_handler")); $this->append_header_nav('projects', '?a=projects', false); $this->page->set('git_version', GitCommand::core_version()); $this->project_loader = new ProjectLoader(); $this->page->append('title', GitConfig::GITWEB_TITLE); } public function get_project_loader() { return $this->project_loader; } public function load_project($project) { $this->project = $this->project_loader->getProject($project); if(!$this->project) $this->page->append('content', new ContentProvider('main', 'err404_project')); else { ContentProvider::overall_set('project', $this->project['name']); ContentProvider::overall_set('project_head', "HEAD"); $this->append_header_nav($this->project['name'], '?p='.$this->project['name'].'&a=summary', true); $this->append_title(" - ".$this->project['name'], false); $this->project_header = new ContentProvider('main', 'project_header'); $this->project_header->set('sub_nav', ""); $this->page->append('content', $this->project_header); } } public function get_project_header() { return $this->project_header; } public function load_content($page) { $class_name = 'page_'.basename($page); $class_file = 'pages/'.basename($page).'.class.php'; $static_file = 'pages/'.basename($page).'.html'; if(file_exists($class_file)) { require_once($class_file); $pageobj = new $class_name; $this->page->append('content', $pageobj->main($this, $this->project)); } else if(file_exists($static_file)) { $this->page->append('content', file_get_contents($static_file)); } else $this->page->append('content', file_get_contents('pages/404.html')); if($this->project_header) { $this->project_header->set('nav_summary', new ContentProvider('main', ($page == 'summary' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "summary", 'link' => "summary"))); $this->project_header->set('nav_shortlog', new ContentProvider('main', ($page == 'shortlog' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "shortlog", 'link' => "shortlog"))); $this->project_header->set('nav_log', new ContentProvider('main', ($page == 'log' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "log", 'link' => "log"))); $this->project_header->set('nav_commit', new ContentProvider('main', ($page == 'commit' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "commit", 'link' => "commit"))); $this->project_header->set('nav_commitdiff', new ContentProvider('main', ($page == 'commitdiff' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "commitdiff", 'link' => "commitdiff"))); $this->project_header->set('nav_tree', new ContentProvider('main', ($page == 'tree' ? 'project_header_nav_active' : 'project_header_nav_link'), array('name' => "tree", 'link' => "tree"))); } } public function append_header_nav($name, $link, $prepend_slash = true) { if($prepend_slash) $this->page->append('header_nav', ' / '); if($link) $this->page->append('header_nav', ''.$name.''); else $this->page->append('header_nav', $name); } public function append_title($name, $prepend_slash = true) { if($prepend_slash) $this->page->append('title', '/'); $this->page->append('title', $name); } public function append_sub_nav($html) { if($this->project_header) $this->project_header->append('sub_nav', $html); } public function load_extension($extension) { switch($extension) { case "graph": $graph = new graph_image_generator(); $graph->generate($_GET['gd']); break; } } public function get_content() { $html = $this->page->output(); $rendertime = round(microtime(true) - $this->rendertime,3); $html = str_replace(array("%rendertime%"), array($rendertime), $html); return $html; } public function error_handler($errno, $errstr, $errfile, $errline) { $error = new ContentProvider('main', 'error'); $etype = ""; switch($errno) { case E_ERROR: $etype = "E_ERROR"; break; case E_WARNING: $etype = "E_WARNING"; break; case E_PARSE: $etype = "E_PARSE"; break; case E_NOTICE: $etype = "E_NOTICE"; break; case E_CORE_ERROR: $etype = "E_CORE_ERROR"; break; case E_CORE_WARNING: $etype = "E_CORE_WARNING"; break; case E_COMPILE_ERROR: $etype = "E_COMPILE_ERROR"; break; case E_COMPILE_WARNING: $etype = "E_COMPILE_WARNING"; break; case E_USER_ERROR: $etype = "E_USER_ERROR"; break; case E_USER_WARNING: $etype = "E_USER_WARNING"; break; case E_USER_NOTICE: $etype = "E_USER_NOTICE"; break; case E_STRICT: $etype = "E_STRICT"; break; case E_RECOVERABLE_ERROR: $etype = "E_RECOVERABLE_ERROR"; break; case E_DEPRECATED: $etype = "E_DEPRECATED"; break; case E_USER_DEPRECATED: $etype = "E_USER_DEPRECATED"; break; } $error->set('errno', $errno); $error->set('errtype', $etype); $error->set('errstr', $errstr); $error->set('errfile', $errfile); $error->set('errline', $errline); $this->page->append('content', $error); } } ?>