diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php
index f8d0886aa..1bf0abc88 100644
--- a/airtime_mvc/application/Bootstrap.php
+++ b/airtime_mvc/application/Bootstrap.php
@@ -93,5 +93,27 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
$view = $this->getResource('view');
$view->headTitle(Application_Model_Preference::GetHeadTitle());
}
+
+ protected function _initZFDebug()
+ {
+ if (APPLICATION_ENV == "development"){
+ global $CC_DBC;
+
+ $autoloader = Zend_Loader_Autoloader::getInstance();
+ $autoloader->registerNamespace('ZFDebug');
+
+ $options = array(
+ 'plugins' => array('Variables',
+ 'Exception',
+ 'Memory',
+ 'Time')
+ );
+ $debug = new ZFDebug_Controller_Plugin_Debug($options);
+
+ $this->bootstrap('frontController');
+ $frontController = $this->getResource('frontController');
+ $frontController->registerPlugin($debug);
+ }
+ }
}
diff --git a/airtime_mvc/library/ZFDebug/Controller/Plugin/Debug.php b/airtime_mvc/library/ZFDebug/Controller/Plugin/Debug.php
new file mode 100644
index 000000000..830701a81
--- /dev/null
+++ b/airtime_mvc/library/ZFDebug/Controller/Plugin/Debug.php
@@ -0,0 +1,485 @@
+ array(
+ 'Variables' => null,
+ 'Time' => null,
+ 'Memory' => null),
+ 'z-index' => 255,
+ 'jquery_path' => 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
+ 'image_path' => null
+ );
+
+ /**
+ * Standard plugins
+ *
+ * @var array
+ */
+ public static $standardPlugins = array('Cache', 'Html', 'Database', 'Exception', 'File', 'Memory', 'Registry', 'Time', 'Variables');
+
+ /**
+ * Debug Bar Version Number
+ * for internal use only
+ *
+ * @var string
+ */
+ protected $_version = '1.5.4';
+
+ /**
+ * Creates a new instance of the Debug Bar
+ *
+ * @param array|Zend_Config $options
+ * @throws Zend_Controller_Exception
+ * @return void
+ */
+
+ protected $_closingBracket = null;
+
+ public function __construct($options = null)
+ {
+ if (isset($options)) {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ }
+
+ /*
+ * Verify that adapter parameters are in an array.
+ */
+ if (!is_array($options)) {
+ throw new Zend_Exception('Debug parameters must be in an array or a Zend_Config object');
+ }
+
+ $this->setOptions($options);
+ }
+
+ /**
+ * Creating ZF Version Tab always shown
+ */
+ $version = new ZFDebug_Controller_Plugin_Debug_Plugin_Text();
+ $version->setPanel($this->_getVersionPanel())
+ ->setTab($this->_getVersionTab())
+ ->setIdentifier('copyright')
+ ->setIconData('data:image/gif;base64,R0lGODlhEAAQAPcAAPb7/ef2+VepAGKzAIC8SavSiYS9Stvt0uTx4fX6+ur1632+QMLgrGOuApDIZO738drs0Ofz5t7v2MfjtPP6+t7v12SzAcvnyX2+PaPRhH2+Qmy3H3K5LPP6+cXkwIHAR2+4JHi7NePz8YC/Rc3ozfH49XK5KXq9OrzdpNzu1YrEUqrVkdzw5uTw4d/v2dDow5zOeO3279Hq0m+4JqrUhpnMbeHw3N3w6Mflwm22HmazBODy7tfu3un06r7gsuXy4sTisIzGXvH59ny9PdPr1rXZpMzlu36/Q5bLb+Pw3tDnxNHr1Lfbm+b199/x62q1Fp3NcdjszqTPh/L599vt04/GWmazCPb7/LHZnW63I3W6MXa7MmGuAt/y7Gq1E2m0Eb7cp9frzZLJaO/489bu3HW3N7rerN/v2q7WjIjEVuLx343FVrDXj9nt0cTjvW2zIoPBSNjv4OT09IXDUpvLeeHw3dPqyNLpxs/nwHe8OIvFWrPaoGe0C5zMb83mvHm8Oen06a3Xl9XqyoC/Qr/htWe0DofDU4nFWbPYk7ndqZ/PfYPBTMPhrqHRgoLBSujz55PKadHpxfX6+6LNeqPQfNXt2pPIYH2+O7vcoHi4OOf2+PL5+NTs2N3u1mi1E7XZl4zEVJjLaZHGauby5KTShmSzBO/38s/oz3i7MtbrzMHiuYTCT4fDTtXqye327uDv3JDHXu328JnMcu738LLanvD49ZTJYpPKauX19tvv44jBWo7GWpfKZ+Dv27XcpcrluXu8ONTs16zXleT08qfUjKzUlc7pzm63HaTRfZXKZuj06HG4KavViGe0EcDfqcjmxaDQgZrNdOHz77/ep4/HYL3esnW6LobCS3S5K57OctDp0JXKbez17N7x6cbkwLTZlbXXmLrcnrvdodHr06PQe8jkt5jIa93v13m8OI7CW3O6L3a7Nb7gs6nUjmu2GqjTgZjKaKLQeZnMc4LAReL08rTbopbLbuTx4KDOdtbry7DYmrvfrrPaoXK5K5zOegAAACH5BAEAAAAALAAAAAAQABAAAAhMAAEIHEiwoMGDCBMOlCKgoUMuHghInEiggEOHAC5eJNhQ4UAuAjwIJLCR4AEBDQS2uHiAYLGOHjNqlCmgYAONApQ0jBGzp8+fQH8GBAA7');
+ $this->registerPlugin($version);
+
+ /**
+ * Loading aready defined plugins
+ */
+ $this->_loadPlugins();
+ }
+
+ /**
+ * Sets options of the Debug Bar
+ *
+ * @param array $options
+ * @return ZFDebug_Controller_Plugin_Debug
+ */
+ public function setOptions(array $options = array())
+ {
+ if (isset($options['jquery_path'])) {
+ $this->_options['jquery_path'] = $options['jquery_path'];
+ }
+
+ if (isset($options['z-index'])) {
+ $this->_options['z-index'] = $options['z-index'];
+ }
+
+ if (isset($options['image_path'])) {
+ $this->_options['image_path'] = $options['image_path'];
+ }
+
+ if (isset($options['plugins'])) {
+ $this->_options['plugins'] = $options['plugins'];
+ }
+ return $this;
+ }
+
+ /**
+ * Register a new plugin in the Debug Bar
+ *
+ * @param ZFDebug_Controller_Plugin_Debug_Plugin_Interface
+ * @return ZFDebug_Controller_Plugin_Debug
+ */
+ public function registerPlugin(ZFDebug_Controller_Plugin_Debug_Plugin_Interface $plugin)
+ {
+ $this->_plugins[$plugin->getIdentifier()] = $plugin;
+ return $this;
+ }
+
+ /**
+ * Unregister a plugin in the Debug Bar
+ *
+ * @param string $plugin
+ * @return ZFDebug_Controller_Plugin_Debug
+ */
+ public function unregisterPlugin($plugin)
+ {
+ if (false !== strpos($plugin, '_')) {
+ foreach ($this->_plugins as $key => $_plugin) {
+ if ($plugin == get_class($_plugin)) {
+ unset($this->_plugins[$key]);
+ }
+ }
+ } else {
+ $plugin = strtolower($plugin);
+ if (isset($this->_plugins[$plugin])) {
+ unset($this->_plugins[$plugin]);
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Get a registered plugin in the Debug Bar
+ *
+ * @param string $identifier
+ * @return ZFDebug_Controller_Plugin_Debug_Plugin_Interface
+ */
+ public function getPlugin($identifier)
+ {
+ $identifier = strtolower($identifier);
+ if (isset($this->_plugins[$identifier])) {
+ return $this->_plugins[$identifier];
+ }
+ return false;
+ }
+
+ /**
+ * Defined by Zend_Controller_Plugin_Abstract
+ */
+ public function dispatchLoopShutdown()
+ {
+ if ($this->getRequest()->isXmlHttpRequest()) {
+ return;
+ }
+ $disable = Zend_Controller_Front::getInstance()->getRequest()->getParam('ZFDEBUG_DISABLE');
+ if (isset($disable)) {
+ return;
+ }
+
+ $html = '';
+
+ /**
+ * Creating menu tab for all registered plugins
+ */
+ foreach ($this->_plugins as $plugin)
+ {
+ $panel = $plugin->getPanel();
+ if ($panel == '') {
+ continue;
+ }
+
+ /* @var $plugin ZFDebug_Controller_Plugin_Debug_Plugin_Interface */
+ $html .= '
' . $panel . '
';
+ }
+
+ $html .= '';
+
+ /**
+ * Creating panel content for all registered plugins
+ */
+ foreach ($this->_plugins as $plugin)
+ {
+ $tab = $plugin->getTab();
+ if ($tab == '') {
+ continue;
+ }
+
+ if (null !== $this->_options['image_path'] && file_exists($this->_options['image_path'] .'/'. $plugin->getIdentifier() .'.png')) {
+ $plugin_icon = $this->_options['image_path'] .'/'. $plugin->getIdentifier() .'.png';
+ } else {
+ $plugin_icon = $plugin->getIconData();
+ }
+
+ /* @var $plugin ZFDebug_Controller_Plugin_Debug_Plugin_Interface */
+ $html .= '
';
+ $html .= '
getClosingBracket() .' ';
+ $html .= $tab . '';
+ }
+
+ $html .= '
«';
+
+ $html .= '
';
+ $this->_output($html);
+ }
+
+ ### INTERNAL METHODS BELOW ###
+
+ /**
+ * Load plugins set in config option
+ *
+ * @return void;
+ */
+ protected function _loadPlugins()
+ {
+ foreach($this->_options['plugins'] as $plugin => $options) {
+ if (is_numeric($plugin)) {
+ # Plugin passed as array value instead of key
+ $plugin = $options;
+ $options = array();
+ }
+
+ // Register an instance
+ if (is_object($plugin) && in_array('ZFDebug_Controller_Plugin_Debug_Plugin_Interface', class_implements($plugin))) {
+ $this->registerPlugin($plugin);
+ continue;
+ }
+
+ if (!is_string($plugin)) {
+ throw new Exception("Invalid plugin name", 1);
+ }
+ $plugin = ucfirst($plugin);
+
+ // Register a classname
+ if (in_array($plugin, ZFDebug_Controller_Plugin_Debug::$standardPlugins)) {
+ // standard plugin
+ $pluginClass = 'ZFDebug_Controller_Plugin_Debug_Plugin_' . $plugin;
+ } else {
+ // we use a custom plugin
+ if (!preg_match('~^[\w]+$~D', $plugin)) {
+ throw new Zend_Exception("ZFDebug: Invalid plugin name [$plugin]");
+ }
+ $pluginClass = $plugin;
+ }
+
+ require_once str_replace('_', DIRECTORY_SEPARATOR, $pluginClass) . '.php';
+ $object = new $pluginClass($options);
+ $this->registerPlugin($object);
+ }
+ }
+
+ /**
+ * Return version tab
+ *
+ * @return string
+ */
+ protected function _getVersionTab()
+ {
+ return ' ' . Zend_Version::VERSION . '/'.phpversion();
+ }
+
+ /**
+ * Returns version panel
+ *
+ * @return string
+ */
+ protected function _getVersionPanel()
+ {
+ $panel = 'ZFDebug v'.$this->_version.'
' .
+ '©2008-2009 Joakim Nygård & Andreas Pankratz
' .
+ 'The project is hosted at http://zfdebug.googlecode.com and released under the BSD License' . $this->getLinebreak() .
+ 'Includes images from the Silk Icon set by Mark James
'.
+ 'Disable ZFDebug temporarily by sending ZFDEBUG_DISABLE as a GET/POST parameter
';
+ // $panel .= 'Zend Framework '.Zend_Version::VERSION.' / PHP '.phpversion().' with extensions:
';
+ // $extensions = get_loaded_extensions();
+ // natcasesort($extensions);
+ // $panel .= implode('
', $extensions);
+ return $panel;
+ }
+
+ /**
+ * Returns path to the specific icon
+ *
+ * @return string
+ */
+ protected function _icon($kind)
+ {
+ switch ($kind) {
+ case 'database':
+ if (null === $this->_options['image_path'])
+ return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC';
+
+ return $this->_options['image_path'] . '/database.png';
+ break;
+ case 'exception':
+ if (null === $this->_options['image_path'])
+ return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJPSURBVDjLpZPLS5RhFMYfv9QJlelTQZwRb2OKlKuINuHGLlBEBEOLxAu46oL0F0QQFdWizUCrWnjBaDHgThCMoiKkhUONTqmjmDp2GZ0UnWbmfc/ztrC+GbM2dXbv4ZzfeQ7vefKMMfifyP89IbevNNCYdkN2kawkCZKfSPZTOGTf6Y/m1uflKlC3LvsNTWArr9BT2LAf+W73dn5jHclIBFZyfYWU3or7T4K7AJmbl/yG7EtX1BQXNTVCYgtgbAEAYHlqYHlrsTEVQWr63RZFuqsfDAcdQPrGRR/JF5nKGm9xUxMyr0YBAEXXHgIANq/3ADQobD2J9fAkNiMTMSFb9z8ambMAQER3JC1XttkYGGZXoyZEGyTHRuBuPgBTUu7VSnUAgAUAWutOV2MjZGkehgYUA6O5A0AlkAyRnotiX3MLlFKduYCqAtuGXpyH0XQmOj+TIURt51OzURTYZdBKV2UBSsOIcRp/TVTT4ewK6idECAihtUKOArWcjq/B8tQ6UkUR31+OYXP4sTOdisivrkMyHodWejlXwcC38Fvs8dY5xaIId89VlJy7ACpCNCFCuOp8+BJ6A631gANQSg1mVmOxxGQYRW2nHMha4B5WA3chsv22T5/B13AIicWZmNZ6cMchTXUe81Okzz54pLi0uQWp+TmkZqMwxsBV74Or3od4OISPr0e3SHa3PX0f3HXKofNH/UIG9pZ5PeUth+CyS2EMkEqs4fPEOBJLsyske48/+xD8oxcAYPzs4QaS7RR2kbLTTOTQieczfzfTv8QPldGvTGoF6/8AAAAASUVORK5CYII=';
+
+ return $this->_options['image_path'] . '/exception.png';
+ break;
+ case 'error':
+ if (null === $this->_options['image_path'])
+ return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC';
+
+ return $this->_options['image_path'] . '/error.png';
+ break;
+ default:
+ if (null === $this->_options['image_path'])
+ return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHhSURBVDjLpZI9SJVxFMZ/r2YFflw/kcQsiJt5b1ije0tDtbQ3GtFQYwVNFbQ1ujRFa1MUJKQ4VhYqd7K4gopK3UIly+57nnMaXjHjqotnOfDnnOd/nt85SURwkDi02+ODqbsldxUlD0mvHw09ubSXQF1t8512nGJ/Uz/5lnxi0tB+E9QI3D//+EfVqhtppGxUNzCzmf0Ekojg4fS9cBeSoyzHQNuZxNyYXp5ZM5Mk1ZkZT688b6thIBenG/N4OB5B4InciYBCVyGnEBHO+/LH3SFKQuF4OEs/51ndXMXC8Ajqknrcg1O5PGa2h4CJUqVES0OO7sYevv2qoFBmJ/4gF4boaOrg6rPLYWaYiVfDo0my8w5uj12PQleB0vcp5I6HsHAUoqUhR29zH+5B4IxNTvDmxljy3x2YCYUwZVlbzXJh9UKeQY6t2m0Lt94Oh5loPdqK3EkjzZi4MM/Y9Db3MTv/mYWVxaqkw9IOATNR7B5ABHPrZQrtg9sb8XDKa1+QOwsri4zeHD9SAzE1wxBTXz9xtvMc5ZU5lirLSKIz18nJnhOZjb22YKkhd4odg5icpcoyL669TAAujlyIvmPHSWXY1ti1AmZ8mJ3ElP1ips1/YM3H300g+W+51nc95YPEX8fEbdA2ReVYAAAAAElFTkSuQmCC';
+
+ return $this->_options['image_path'] . '/unknown.png';
+ break;
+ }
+ }
+
+ /**
+ * Returns html header for the Debug Bar
+ *
+ * @return string
+ */
+ protected function _headerOutput() {
+ $collapsed = isset($_COOKIE['ZFDebugCollapsed']) ? $_COOKIE['ZFDebugCollapsed'] : 0;
+
+ return ('
+
+ ');
+ }
+
+ /**
+ * Appends Debug Bar html output to the original page
+ *
+ * @param string $html
+ * @return void
+ */
+ protected function _output($html)
+ {
+ $response = $this->getResponse();
+ $response->setBody(preg_replace('/(<\/head>)/i', $this->_headerOutput() . '$1', $response->getBody()));
+ $response->setBody(str_ireplace('