<?php// ------------- ~ Tango ~ ------------- \\// File: kernel/core/libmodule.php// Author: Alex Cartwright// Created: 5th September 2006// Recoded for TangoCMS 085// ------------- ~ Tango ~ ------------- \\ class libmodule { var $siteType; /* Stores which type of site to load, AdminCP ( admin ) or Main Site ( main ) */ var $tcmTemplate; /* Stores the data fetched from tcm_template in modGetModules() */ var $SCinfo; /* Stores all information about the module loaded into SC */ // --------------------------------------------------------------------------------------- // modGetModules will get pr)epare the rest of the script on what modules will be needed // to load, and inwhich sector they should be plugged into // --------------------------------------------------------------------------------------- function modGetModules( $siteType = 'main' ) { global $libmysql; // Store site type $this->siteType = $siteType; // Find out what Modules need to be loaded and inwhich Sector to be plugged into $templateQuery = $libmysql->Query( " SELECT * FROM `tcm_template` WHERE `type` = '$this->siteType' " ); while( $row = mysql_fetch_array( $templateQuery ) ) { // As {SC} is always unknown untill the page is loaded, we must replace the Section and Module parameters if ( $row['sector'] == 'SC' ) { $row['modname'] = _URLMOD; $row['section'] = _URLSEC; } // Store all results incase we need them later $tmpTemplate[] = $row; } // Include the MDR if ( $this->siteType == 'main' ) { require_once( 'admin/kernel/core/libmdr.php' ); } else { require_once( 'kernel/core/libmdr.php' ); } $libmdr = new libmdr(); foreach( $tmpTemplate as $key ) { // Display rules - Damm that's gonna be hard, I think I'll delay that till 086 $row = $libmdr->displayRules( $key, $tmpTemplate ); // We now need to store the Modules into an array and add single quotes to them // so that they can be used in a query to find the requested modules $templateModules[] = "'".$row['modname']."'"; // Save results so it can be used later on $this->tcmTemplate[] = $row; } // Make the array a string to be used in the query $templateModules = implode( ', ', $templateModules ); $this->findModules( $templateModules ); } // Find all requested modules that are needed and see if SC needs the theme // Note: This does not check if the physical files/classes exist - this is purely to see if the module is in the database // findModules will output an array in this kind of structure /* array ( 0 => array( 'NAME' => 'module', 'SECTION' => 2 'SECTOR' => 'SC', 'PERMISSION' => 1, 'TITLE' => 'Module Title', 'THEME' => 1, ) ) */ function findModules( $modules ) { global $libmysql; $modulesQuery = $libmysql->Query( " SELECT * FROM `tcm_modules` WHERE `type` = '$this->siteType' AND `name` IN ( $modules ) "); // Loop the results to find out if SC needs the theme while ( $row = mysql_fetch_array( $modulesQuery ) ) { $tcmModules[] = $row; } /* Debug echo '<pre>'; echo print_r( $tcmModules ); echo '</pre>'; die(); /* End Debug */ // Loop the results from tcm_tcm foreach( $this->tcmTemplate as $key ) { // tmp vars to see what module/section is needed $tmpModule = strtolower( $key['modname'] ); $tmpSection = strtolower( $key['section'] ); /* Debug echo 'Module: '.$tmpModule.' Section: '.$tmpSection.'<br />'; /* End Debug */ // To see if the module section exists in the database, we need to see if either // the Permission, Theme or Title ( Doesn't matter which ) for that section exists foreach( $tcmModules as $modKey ) { $foundModule = NULL; // As Array Index's start at 0, we need to alter the section for it to be correct $arraySection = $tmpSection - 1; // Get the correct values for Permission,Title and Theme based on the required Section $tmpPermission = explode( '-', $modKey['permission'] ); $modPermission = $tmpPermission[ $arraySection ]; // We don't check if we have a value for Permission, as this is to see if the Section Exists $tmpTitle = explode( '-', $modKey['title'] ); $modTitle = $tmpTitle[ $arraySection ]; // Check we have a value if ( empty( $modTitle ) ) { $modTitle = NULL; } $tmpTheme = explode( '-', $modKey['theme'] ); $modTheme = $tmpTheme[ $arraySection ]; // Check we have a value if ( empty( $modTheme ) ) { $modTheme = 1; } if ( strtolower( $modKey['name'] ) == $tmpModule && $modPermission != NULL ) { // This is the module we want, and the section exists in the database $requestedModules[] = array( 'name' => $tmpModule, 'section' => $tmpSection, 'sector' => $key['sector'], 'permission' => $modPermission, 'title' => $modTitle, 'theme' => $modTheme, ); // See if the current module is in Sector SC - if so check if it needs the theme if ( $key['sector'] == 'SC' ) { $this->SCinfo[] = array( 'name' => $tmpModule, 'section' => $tmpSection, 'sector' => $key['sector'], 'permission' => $modPermission, 'title' => $modTitle, 'theme' => $modTheme, ); } // Boolean value to see if we have found a module for that sector $foundModule = 1; break; } } // Check if a module was found for that sector if ( $foundModule != 1 ) { // Create a dummy array $tmpArray = array( 'theme' => 1, 'missing' => 1, 'sector' => $key['sector'], ); $requestedModules[] = $tmpArray; // Copy the array over to the SC Info too if ( $key['sector'] == 'SC' ) { $this->SCinfo[] = $tmpArray; } // Resert the dummy array $tmpArray = NULL; } } /* Debug echo '<pre>'; echo print_r( $requestedModules ); echo '</pre>'; die(); /* End Debug */ // Load module with or without theme? if ( $this->SCinfo[0]['theme'] == 1 ) { $this->loadTheme( $requestedModules ); } else { $this->loadNoTheme( $requestedModules ); } } // Load the SC module with no theme - this is normaly used for like Updates in modules function loadNoTheme( $modules ) { foreach( $modules as $key ) { // Find the SC if ( $key['sector'] == 'SC' ) { // Check Permission if ( libPermission( $key['permission'] ) == 1 ) { // Check if Class name and File Exists $tmpFile = 'modules/'.$key['name'].'/'.$key['name'].'_mod.php'; if ( file_exists( $tmpFile ) ) { // Ok file Exists - lets see if the class does require_once( $tmpFile ); $className = 'mod'.ucfirst( strtolower( $key['name'] ) ).'_sec'._URLSEC; if ( class_exists( $className ) ) { // Load the module! new $className(); } else { // Load the theme to show a Module doesn't exist error $this->loadTheme( $modules ); } } else { // Load the theme to show a Module doesn't exist error $this->loadTheme( $modules ); } } else { // Load the theme to show a Permission error $this->loadTheme( $modules ); } } } } function loadTheme( $modules ) { global $libsession; // Choose what theme to load if ( $_GET['usetheme'] != NULL && is_dir( 'themes/'.$_GET['usetheme'] ) ) { $templateTheme = $_GET['usetheme']; } else if ( $this->siteType == 'admin' ) { if ( $libsession->LoggedIn == 1 ) { $templateTheme = "themes/"._CONFIG_THEME."/main_template.html"; } else { $templateTheme = "themes/"._CONFIG_THEME."/login_template.html"; } } else { $templateTheme = "themes/"._CONFIG_THEME_MAIN."/main_template.html"; } // Load the modules into the theme $this->loadModules( $modules, $templateTheme ); } function loadModules( $modules, $templateTheme ) { // Loop every module to be replace into the correct Sectors of the template file // While doing this, we need to check for Permission, Module File Existing and Class exisitng foreach( $modules as $key ) { // First we check if the user has permission to load this module if ( libPermission( $key['permission'] ) == 1 ) { // Ok so user has permission, next thing we do is see if the module file exists $tmpFile = 'modules/'.$key['name'].'/'.$key['name'].'_mod.php'; if ( file_exists( $tmpFile ) ) { require_once( $tmpFile ); // Ok so the file exists - now we need to see if the class exists if ( $key['sector'] == 'SC' ) { $className = 'mod'.ucfirst( strtolower( $key['name'] ) ).'_sec'._URLSEC; } else { $className = 'mod'.ucfirst( strtolower( $key['name'] ) ).'_sec'.$key['section']; } if ( class_exists( $className ) ) { // Start output buffering ob_start(); new $className(); $buffer = ob_get_clean(); $templateTags[ $key['sector'] ] .= $buffer; // Gather CSS files ( if any ) and store them in an array $tempCSSDir = 'modules/'.$key['name'].'/template/'.$key['name'].'_css.css'; if ( file_exists( $tempCSSDir ) ) { // Put the CSS files into an array $templateTags['CSS'] .= '<link rel="StyleSheet" href="'.$tempCSSDir.'" type="text/css" media="screen" />'; } } else { global $libehc; $templateTags[ $key['sector'] ] .= $libehc->ErReport( 15 ); } } else { global $libehc; $templateTags[ $key['sector'] ] .= $libehc->ErReport( 15 ); } } else if ( $key['missing'] == 1 ) { global $libehc; $templateTags[ $key['sector'] ] = $libehc->ErReport( 15 ); } else { // If the module should be running in SC, we shall display a No Permission error if ( $key['sector'] == 'SC' ) { global $libehc; $templateTags[ $key['sector'] ] = $libehc->ErReport( 14 ); } } } /* Debug echo '<pre>'; echo print_r( $templateTags ); echo '</pre>'; die(); /* End Debug */ // ** If your looking through the source code - Here is where you can add more Tag replacement tags ** \\ // These are some Generic Hard Coded Tag's for people to use $templateTags['TITLE'] = _CONFIG_TITLE; // Check for errors if ( $_SESSION['error'] != NULL ) { global $libehc; $error = $libehc->ErReport( $_SESSION{'error'] ); $templateTags['ERROR'] = '<div class="main-error">'.$error.'</div>'; $_SESSION['error'] = NULL; } else { $templateTags['ERROR'] = NULL; } // Check we have CSS's to load if ( $templateTags['CSS'] == NULL ) { $templateTags['CSS'] = ''; } $template = new libtemplate( $templateTheme ); $template->replace_tags( $templateTags ); echo $template->page; } } ?>