EXTENSIONS_DIR . '/disabled', 'enterprise' => ENTERPRISE_DIR . '/' . EXTENSIONS_DIR . '/disabled'); foreach ($dirs as $type => $dir) { $handle = false; if (file_exists ($dir)) $handle = @opendir ($dir); if (empty ($handle)) continue; $ignores = array ('.', '..'); $file = readdir ($handle); while ($file !== false) { if (in_array ($file, $ignores)) { $file = readdir ($handle); continue; } $filepath = realpath ($dir."/".$file); if (! is_readable ($filepath) || is_dir ($filepath) || ! preg_match ("/.*\.php$/", $filepath)) { $file = readdir ($handle); continue; } //$content = file_get_contents($filepath); $content = ''; $data = array(); $data['operation_menu'] = false; if (preg_match("//", $content)) { $data['operation_menu'] = true; } $data['godmode_menu'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_godmode_menu_option(\n|.)*\?>/', $content)) { $data['godmode_menu'] = true; } $data['operation_function'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_main_function(\n|.)*\?>/', $content)) { $data['operation_function'] = true; } $data['login_function'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_login_function(\n|.)*\?>/', $content)) { $data['login_function'] = true; } $data['extension_ope_tab'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_opemode_tab_agent(\n|.)*\?>/', $content)) { $data['extension_ope_tab'] = true; } $data['extension_god_tab'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_godmode_tab_agent(\n|.)*\?>/', $content)) { $data['extension_god_tab'] = true; } $data['godmode_function'] = false; if (preg_match('/<\?php(\n|.)*extensions_add_godmode_function(\n|.)*\?>/', $content)) { $data['godmode_function'] = true; } $data['enterprise'] = false; if ($type == 'enterprise') { $data['enterprise'] = true; } $data['enabled'] = false; $extensions[$file] = $data; $file = readdir ($handle); } } return $extensions; } /** * Get info of all extensions (enabled/disabled) */ function extensions_get_extension_info() { global $config; $return = array (); foreach($config['extensions'] as $extension) { $data = array(); $data['godmode_function'] = false; if (!empty($extension['godmode_function'])) { $data['godmode_function'] = true; } $data['godmode_menu'] = false; if (!empty($extension['godmode_menu'])) { $data['godmode_menu'] = true; } $data['operation_function'] = false; if (!empty($extension['main_function'])) { $data['operation_function'] = true; } $data['operation_menu'] = false; if (!empty($extension['operation_menu'])) { $data['operation_menu'] = true; } $data['login_function'] = false; if (!empty($extension['login_function'])) { $data['login_function'] = true; } $data['extension_ope_tab'] = false; if (!empty($extension['extension_ope_tab'])) { $data['extension_ope_tab'] = true; } $data['extension_god_tab'] = false; if (!empty($extension['extension_god_tab'])) { $data['extension_god_tab'] = true; } $data['enterprise'] = (bool)$extension['enterprise']; $data['enabled'] = true; $return[$extension['file']] = $data; } $return = $return + extensions_get_disabled_extensions(); return $return; } /** * Load all extensions * * @param array $extensions */ function extensions_load_extensions ($process_login) { global $config; global $extension_file; foreach ($config['extensions'] as $extension) { $extension_file = $extension['file']; $path_extension = realpath ($extension['dir'] . "/" . $extension_file); //-------------------------------------------------------------- // // PHP BUG // // #66518 need some exceptions for php's include or require // // https://bugs.php.net/bug.php?id=66518 //-------------------------------------------------------------- //~ if ($process_login) { //~ //Check the syntax for avoid PHP errors //~ $output = null; //~ $return_var = null; //~ exec('php -l ' . $path_extension, $output, $return_code); //~ if ($return_code !== 0) { //~ // There is a error. //~ //~ set_pandora_error_for_header( //~ __('There are some errors in the PHP file of extension %s .', $extension_file)); //~ } //~ else { //~ require_once($path_extension); //~ } //~ } //~ else { require_once($path_extension); //~ } } } /** * This function adds a link to the extension with the given name in Operation menu. * * @param string name Name of the extension in the Operation menu * @param string fatherId Id of the parent menu item for the current extension * @param string subfatherId Id of the parent submenu item for the current extension * @param string icon Path to the icon image (18x18 px). If this parameter is blank then predefined icon will be used */ function extensions_add_operation_menu_option ($name, $fatherId = null, $icon = null, $version="N/A", $subfatherId = null, $acl = 'AR') { global $config; global $extension_file; /* $config['extension_file'] is set in extensions_load_extensions(), since that function must be called before any function the extension call, we are sure it will be set. */ $option_menu['name'] = $name; $option_menu['acl'] = $acl; $extension = &$config['extensions'][$extension_file]; $option_menu['sec2'] = $extension['dir'] . '/' . mb_substr ($extension_file, 0, -4); $option_menu['fatherId'] = $fatherId; $option_menu['subfatherId'] = $subfatherId; $option_menu['icon'] = $icon; $option_menu['version'] = $version; $extension['operation_menu'] = $option_menu; } /** * This function adds a link to the extension with the given name in Godmode menu. * * @param string name Name of the extension in the Godmode menu * @param string acl User ACL level required to see this extension in the godmode menu * @param string fatherId Id of the parent menu item for the current extension * @param string subfatherId Id of the parent submenu item for the current extension * @param string icon Path to the icon image (18x18 px). If this parameter is blank then predefined icon will be used */ function extensions_add_godmode_menu_option ($name, $acl, $fatherId = null, $icon = null, $version="N/A", $subfatherId = null) { global $config; global $extension_file; /* $config['extension_file'] is set in extensions_load_extensions(), since that function must be called before any function the extension call, we are sure it will be set. */ $option_menu['acl'] = $acl; $option_menu['name'] = $name; $extension = &$config['extensions'][$extension_file]; $option_menu['sec2'] = $extension['dir'] . '/' . mb_substr ($extension_file, 0, -4); $option_menu['fatherId'] = $fatherId; $option_menu['subfatherId'] = $subfatherId; $option_menu['icon'] = $icon; $option_menu['version'] = $version; $extension['godmode_menu'] = $option_menu; } /** * Add in the header tabs in Godmode agent menu the extension tab. * * @param tabId Id of the extension tab * @param tabName Name of the extension tab * @param tabIcon Path to the image icon * @param tabFunction Name of the function to execute when this extension is called */ function extensions_add_godmode_tab_agent($tabId, $tabName, $tabIcon, $tabFunction, $version="N/A", $acl = 'AW') { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['extension_god_tab'] = array(); $extension['extension_god_tab']['id'] = $tabId; $extension['extension_god_tab']['name'] = $tabName; $extension['extension_god_tab']['icon'] = $tabIcon; $extension['extension_god_tab']['function'] = $tabFunction; $extension['extension_god_tab']['version'] = $version; $extension['extension_ope_tab']['acl'] = $acl; } /** * Add in the header tabs in Operation agent menu the extension tab. * * @param tabId Id of the extension tab * @param tabName Name of the extension tab * @param tabIcon Path to the image icon * @param tabFunction Name of the function to execute when this extension is called */ function extensions_add_opemode_tab_agent($tabId, $tabName, $tabIcon, $tabFunction, $version="N/A", $acl = 'AR') { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['extension_ope_tab'] = array(); $extension['extension_ope_tab']['id'] = $tabId; $extension['extension_ope_tab']['name'] = $tabName; $extension['extension_ope_tab']['icon'] = $tabIcon; $extension['extension_ope_tab']['function'] = $tabFunction; $extension['extension_ope_tab']['version'] = $version; $extension['extension_ope_tab']['acl'] = $acl; } /** * Add the function to call when user clicks on the Operation menu link * * @param string $function_name Callback function name */ function extensions_add_main_function ($function_name) { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['main_function'] = $function_name; } /** * Add the function to call when user clicks on the Godmode menu link * * @param string $function_name Callback function name */ function extensions_add_godmode_function ($function_name) { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['godmode_function'] = $function_name; } /** * Adds extension function when user login on Pandora console * * @param string $function_name Callback function name */ function extensions_add_login_function ($function_name) { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['login_function'] = $function_name; } /** * Adds extension function when translation string * * @param string $function_name Callback function name */ function extensions_add_translation_string_function($translate_function_name) { global $config; global $extension_file; $extension = &$config['extensions'][$extension_file]; $extension['translate_function'] = $translate_function_name; } ?>