<?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;
}
}
}
|