carbonPHP Initial commit v2.0
[carbonphp.git] / Source / carbon / libraries / Extensions.php
blob4b3e4bf754eda6274224db89b053b26ed7c9523e
1 <?php
2 /*------------------------------------------------------------
3 * CarbonPHP framework (C) Tom Bell
4 * http://tombell.org.uk
5 *------------------------------------------------------------*/
7 if (!defined('CARBON_PATH'))
9 exit('Direct script access is not allowed.');
12 class Carbon_Extensions
14 private $extensions_enabled = false;
15 private $extensions = array();
16 private $in_progress = false;
18 public function __construct()
20 $this->c_initialise();
22 log_message('debug', 'Extensions class initialised.');
25 private function c_initialise()
27 $config = load_class('Config');
29 if ($config->get_config_value('enable_extensions') == false)
31 return false;
34 @include(APP_PATH . 'config/extensions' . FILE_EXT);
36 if (!isset($extension) || !is_array($extension))
38 return false;
41 $this->extensions = $extension;
42 $this->extensions_enabled = true;
45 public function c_call_extension($which = '')
47 if (!$this->extensions_enabled || !isset($this->extenions[$which]))
49 return false;
52 if (isset($this->extensions[$which][0]) && is_array($this->extensions[$which][0]))
54 foreach ($this->extensions[$which] as $val)
56 $this->c_run_extension($val);
59 else
61 $this->c_run_extension($this->extensions[$which]);
64 return true;
67 private function c_run_extension($data)
69 if (!is_array($data))
71 return false;
74 if ($this->in_progress == true)
76 return true;
79 if (!isset($data['filepath']) || !isset($data['filename']))
81 return false;
84 $filepath = APP_PATH . $data['filepath'] . '/' . $data['filename'];
86 if (!file_exists($filepath))
88 return false;
91 $class = false;
92 $method = false;
93 $params = '';
95 if (isset($data['class']) && $data['class'] != '')
97 $class = $data['class'];
100 if (isset($data['method']))
102 $method = $data['method'];
105 if (isset($data['params']))
107 $params = $data['params'];
110 if ($class === false && $method === false)
112 return false;
115 $this->in_progess = true;
117 if ($class !== false)
119 if (!class_exists($class))
121 require($filepath);
124 $ext = new $class;
125 $ext->$method($params);
127 else
129 if (!function_exists($method))
131 require($filepath);
134 $method($params);
137 $this->in_progress = false;
139 return true;