if (!$isauth && $needs_auth) { continue; } // Zend appears to break class auto-loading. Therefore, if we //detect there is a module that requires Zend // we will include all the potential classes at this point. $needs_zend = isset($module['depends']['phpcomponent']) && stristr($module['depends']['phpcomponent'], 'zend'); if (!$force_autoload && $needs_zend) { fpbx_framework_autoloader(true); $force_autoload = true; } //do we have a license file $licFileExists = glob('/etc/schmooze/license-*.zl'); $complete_zend = !function_exists('zend_loader_install_license') || empty($licFileExists); try { if ($needs_zend && class_exists('\\Schmooze\\Zend') && file_exists($file) && \Schmooze\Zend::fileIsLicensed($file) && $complete_zend) { $file_exists = false; $zendedbroken[] = $key; } //emergency mode if ($needs_zend && $file_exists && !empty($bootstrap_settings['fix_zend'])) { $file_exists = false; $zended[$key] = $file; } //$file_exists = false; } catch (\Exception $e) { //Some fatal error happened freepbx_log(FPBX_LOG_WARNING, $e->getMessage()); $file_exists = false; $zendedbroken[] = $key; }
/** * Try to load a functions.inc.php if not previously loaded * @param string $module The module rawname */ public function loadFunctionsInc($module) { if ($this->checkStatus($module)) { $path = $this->FreePBX->Config->get("AMPWEBROOT"); $ifiles = get_included_files(); $relative = $module . "/functions.inc.php"; $absolute = $path . "/admin/modules/" . $relative; $data = \FreePBX::Modules()->getInfo($module); $needs_zend = isset($data[$module]['depends']['phpcomponent']) && stristr($data[$module]['depends']['phpcomponent'], 'zend'); $licFileExists = glob('/etc/schmooze/license-*.zl'); $complete_zend = !function_exists('zend_loader_install_license') || empty($licFileExists); if (file_exists($absolute)) { if ($needs_zend && class_exists('\\Schmooze\\Zend', false) && \Schmooze\Zend::fileIsLicensed($absolute) && $complete_zend) { return false; } $include = true; foreach ($ifiles as $file) { if (strpos($file, $relative) !== false) { $include = false; break; } } if ($include) { include $absolute; } } } }
// let hooking modules process the $_REQUEST $module_hook->process_hooks($itemid, $module_name, $module_page, $_REQUEST); // BMO: Pre display hooks. // getPreDisplay and getPostDisplay should probably never // be used. $bmo->GuiHooks->getPreDisplay($module_name, $_REQUEST); $licFileExists = glob('/etc/schmooze/license-*.zl'); $complete_zend = !(!function_exists('zend_loader_install_license') || empty($licFileExists)); // include the module page if (isset($cur_menuitem['disabled']) && $cur_menuitem['disabled']) { show_view($amp_conf['VIEW_MENUITEM_DISABLED'], $cur_menuitem); break; // we break here to avoid the generateconfigpage() below // } else { if (file_exists($module_file) && class_exists('\\Schmooze\\Zend') && \Schmooze\Zend::fileIsLicensed($module_file) && $complete_zend) { $amp_conf['VIEW_ZEND_CONFIG'] = empty($amp_conf['VIEW_ZEND_CONFIG']) ? 'views/zend_config.php' : $amp_conf['VIEW_ZEND_CONFIG']; if (file_exists($amp_conf['VIEW_ZEND_CONFIG'])) { echo load_view($amp_conf['VIEW_ZEND_CONFIG']); } else { die_freepbx(_("Your Zend Configuration is not fully setup. Please recitfy the problem and reload this page")); } } else { if (file_exists($module_file)) { //check module first and foremost, but not during quietmode if (!isset($_REQUEST['quietmode']) && $amp_conf['SIGNATURECHECK'] && !isset($_REQUEST['fw_popover'])) { //Since we are viewing this module update it's signature $gpgstatus = module_functions::create()->updateSignature($module_name, false); //check all cached signatures $modules = module_functions::create()->getAllSignatures(); if (!$modules['validation']) {
/** * Find the file for the object * @param string $objname The Object Name (same as class name, filename) * @param string $hint The location of the Class file * @return bool True if found or throws exception */ private function loadObject($objname, $hint = null) { $objname = str_replace('FreePBX\\modules\\', '', $objname); $class = class_exists($this->moduleNamespace . $objname, false) ? $this->moduleNamespace . $objname : (class_exists($this->freepbxNamespace . $objname, false) ? $this->freepbxNamespace . $objname : $objname); // If it already exists, we're fine. if (class_exists($class, false) && $class != "Directory") { //do reflection tests for ARI junk, we **dont** want to load ARI $class = new \ReflectionClass($class); //this is a stop gap, remove in 13 or 14 when ARI is no longer used if (!$class->hasMethod('navMenu') && !$class->hasMethod('rank')) { return true; } } // This is the file we loaded the class from, for debugging later. $loaded = false; if ($hint) { if (!file_exists($hint)) { throw new \Exception(sprintf(_("Attempted to load %s with a hint of %s and it didn't exist"), $objname, $hint)); } else { $try = $hint; } } else { // Does this exist as a default Library inside BMO? $try = __DIR__ . "/{$objname}.class.php"; } if (file_exists($try)) { include $try; $loaded = $try; } else { // It's a module, hopefully. // This is our root to search from $objname = $this->Modules->cleanModuleName($objname); $path = $this->Config->get_conf_setting('AMPWEBROOT') . "/admin/modules/"; $active_modules = array_keys(\FreePBX::create()->Modules->getActiveModules()); foreach ($active_modules as $module) { // Lets try this one.. //TODO: this needs to look with dirname not from webroot $try = $path . $module . "/{$objname}.class.php"; if (file_exists($try)) { //Now we need to make sure this is not a revoked module! try { $signature = \FreePBX::Modules()->getSignature($module); if (!empty($signature['status'])) { $revoked = $signature['status'] & GPG::STATE_REVOKED; if ($revoked) { return false; } } } catch (\Exception $e) { } $info = \FreePBX::Modules()->getInfo($module); $needs_zend = isset($info[$module]['depends']['phpcomponent']) && stristr($info[$module]['depends']['phpcomponent'], 'zend'); $licFileExists = glob('/etc/schmooze/license-*.zl'); $complete_zend = !function_exists('zend_loader_install_license') || empty($licFileExists); if ($needs_zend && class_exists('\\Schmooze\\Zend', false) && \Schmooze\Zend::fileIsLicensed($try) && $complete_zend) { break; } include $try; $loaded = $try; break; } } } // Right, after all of this we should now have our object ready to create. if (!class_exists($objname, false) && !class_exists($this->moduleNamespace . $objname, false) && !class_exists($this->freepbxNamespace . $objname, false)) { // Bad things have happened. if (!$loaded) { $sobjname = strtolower($objname); throw new \Exception(sprintf(_("Unable to locate the FreePBX BMO Class '%s'"), $objname) . sprintf(_("A required module might be disabled or uninstalled. Recommended steps (run from the CLI): 1) fwconsole ma install %s 2) fwconsole ma enable %s"), $sobjname, $sobjname)); //die_freepbx(sprintf(_("Unable to locate the FreePBX BMO Class '%s'"),$objname), sprintf(_("A required module might be disabled or uninstalled. Recommended steps (run from the CLI): 1) amportal a ma install %s 2) amportal a ma enable %s"),$sobjname,$sobjname)); } // We loaded a file that claimed to represent that class, but didn't. throw new \Exception(sprintf(_("Attempted to load %s but it didn't define the class %s"), $try, $objname)); } return true; }