| 
<?php
 /**
 * This file is part of Linfo (c) 2010 Joseph Gillotti.
 *
 * Linfo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Linfo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Linfo.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
 * Keep out hackers...
 */
 
 
 /**
 * Set up class auto loading
 * @param string $class the name of the class being searched fro
 */
 
 
 
 /**
 * Exception for info classes
 */
 class GetInfoException extends Exception{}
 
 /**
 * Determine the OS
 * @return string|false if the OS is found, returns the name; Otherwise false
 */
 function determineOS() {
 
 
 list($os) = explode('_', PHP_OS, 2);
 
 // This magical constant knows all
 switch ($os) {
 
 // These are supported
 case 'Linux':
 case 'FreeBSD':
 case 'DragonFly':
 case 'OpenBSD':
 case 'NetBSD':
 case 'Minix':
 case 'Darwin':
 case 'SunOS':
 return PHP_OS;
 break;
 case 'WINNT':
 define('IS_WINDOWS', true);
 return 'Windows';
 break;
 case 'CYGWIN':
 define('IS_CYGWIN', true);
 return 'CYGWIN';
 break;
 
 // So anything else isn't
 default:
 return false;
 break;
 }
 }
 
 /**
 * Start up class based on result of determineOS
 * @param string $type the name of the operating system
 * @param array $settings linfo settings
 * @return array the system information
 */
 function parseSystem($type, $settings) {
 $class = 'OS_'.$type;
 try {
 $file = 'class.'.$class.'.php';
 //require $file;
 $info =  new $class($settings);
 }
 catch (GetInfoException $e) {
 exit($e->getMessage());
 }
 
 return $info;
 }
 
 /**
 * Deal with extra extensions
 * @param array $info the system information
 * @param array $settings linfo settings
 */
 function runExtensions(&$info, $settings) {
 
 // Info array is passed by reference so we can edit it directly
 $info['extensions'] = array();
 
 // Are there any extensions configured?
 if(!array_key_exists('extensions', $settings) || count($settings['extensions']) == 0)
 return;
 
 // Go through each enabled extension
 foreach((array)$settings['extensions'] as $ext => $enabled) {
 
 // Is it really enabled?
 if (empty($enabled))
 continue;
 
 // Does the file exist? load it then
 if (file_exists('class.ext.'.$ext.'.php'))
 require_once 'class.ext.'.$ext.'.php';
 else {
 
 // Issue an error and skip this thing otheriwse
 LinfoError::Fledging()->add('Extension Loader', 'Cannot find file for "'.$ext.'" extension.');
 continue;
 }
 
 // Name of its class
 $class = 'ext_'.$ext;
 
 // Make sure it exists
 if (!class_exists($class)) {
 LinfoError::Fledging()->add('Extension Loader', 'Cannot find class for "'.$ext.'" extension.');
 continue;
 }
 
 // Handle version checking
 $min_version = defined($class.'::LINFO_MIN_VERSION') ? constant($class.'::LINFO_MIN_VERSION') : false;
 if ($min_version !== false && strtolower(VERSION) != 'svn' && !version_compare(VERSION, $min_version, '>=')) {
 LinfoError::Fledging()->add('Extension Loader', '"'.$ext.'" extension requires at least Linfo v'.$min_version);
 continue;
 }
 
 // Load it
 $ext_class = new $class();
 
 // Deal with it
 $ext_class->work();
 
 // Does this edit the $info directly, instead of creating a separate output table type thing?
 if (!defined($class.'::LINFO_INTEGRATE')) {
 
 // Result
 $result = $ext_class->result();
 
 // Save result if it's good
 if ($result != false)
 $info['extensions'][$ext] = $result;
 }
 }
 }
 
 |