예제 #1
0
 static function check_joomdle_system()
 {
     $params = JComponentHelper::getParams('com_joomdle');
     $joomla_config = new JConfig();
     /* PHP XMLRPC extension enabled */
     $php_exts = get_loaded_extensions();
     $xmlrpc_enabled = in_array('xmlrpc', $php_exts);
     $system[2]['description'] = JText::_('COM_JOOMDLE_XMLRPC_PHP_EXTENSION');
     $system[2]['value'] = $xmlrpc_enabled;
     if ($system[2]['value'] == '0') {
         $system[2]['error'] = JText::_('COM_JOOMDLE_XMLRPC_PHP_EXTENSION_ERROR');
     } else {
         $system[2]['error'] = '';
     }
     /* Error reporting */
     /*
             $display_errors = ini_get('display_errors');
             $error_reporting = ini_get('error_reporting');
             $system[6]['description'] = JText::_ ('COM_JOOMDLE_ERROR_REPORTING');
     
             if (($display_errors) && ($error_reporting & E_DEPRECATED))
             {
                 $system[6]['error'] =  JText::_ ('COM_JOOMDLE_DEPRECATED_ERRORS_ON');
                 $system[6]['value'] = 0;
             }
             else
             {
                 $system[6]['error'] = '';
                 $system[6]['value'] = 1;
             }
     */
     /*
     		$system[0]['description'] = JText::_ ('COM_JOOMDLE_JOOMLA WEB SERVICES');
     		$system[0]['value'] = $joomla_config->xmlrpc_server;
     		if ($joomla_config->xmlrpc_server == '0')
     			$system[0]['error'] =  JText::_ ('COM_JOOMDLE_JOOMLA WEB SERVICES ERROR');
     		else $system[0]['error'] = '';
     */
     /* Mandatory Joomdle plugins enabled */
     $system[5]['description'] = JText::_('COM_JOOMDLE_JOOMDLEHOOKS_PLUGIN');
     $system[5]['value'] = JPluginHelper::isEnabled('user', 'joomdlehooks');
     if (JPluginHelper::isEnabled('user', 'joomdlehooks') != '1') {
         $system[5]['error'] = JText::_('COM_JOOMDLE_JOOMDLEHOOKS_PLUGIN_ERROR');
     } else {
         $system[5]['error'] = '';
     }
     $comp_params = JComponentHelper::getParams('com_joomdle');
     $connection = $comp_params->get('connection_method');
     if ($connection == 'fgc') {
         /* file_get_contents call.  Test to see if allow_url_fopen PHP option is enabled */
         $system[1]['description'] = JText::_('COM_JOOMDLE_ALLOW_URL_FOPEN');
         $system[1]['value'] = ini_get('allow_url_fopen');
         if ($system[1]['value'] != '1') {
             $system[1]['error'] = JText::_('COM_JOOMDLE_ALLOW_URL_FOPEN_ERROR');
         } else {
             $system[1]['error'] = '';
         }
     } else {
         if ($connection == 'curl') {
             $system[1]['description'] = JText::_('COM_JOOMDLE_CURL_ENABLED');
             $system[1]['value'] = function_exists('curl_version') == "Enabled";
             if (!$system[1]['value']) {
                 $system[1]['error'] = JText::_('COM_JOOMDLE_CURL_ENABLED_ERROR');
             } else {
                 $system[1]['error'] = '';
             }
         }
     }
     if ($system[1]['error'] != '' || $system[2]['error'] != '') {
         /* If no working connection, no need to continue */
         return $system;
     }
     // Check bare HTTP connection
     $moodle_url = $params->get('MOODLE_URL');
     $moodle_file_url = $moodle_url . '/auth/joomdle/connection_test.php';
     $joomla_file_url = $moodle_url . '/auth/joomdle/connection_test_joomla.php';
     // Joomla to Moodle
     //	$result = file_get_contents ($moodle_file_url);
     $result = JoomdleHelperContent::get_file($moodle_file_url);
     $system[6]['description'] = JText::_('COM_JOOMDLE_JOOMDLE_JOOMLA_TO_MOODLE_CONNECTION');
     if (strncmp($result, 'OK', 2) != 0) {
         $system[6]['value'] = 0;
         $system[6]['error'] = JText::_('COM_JOOMDLE_JOOMLA_CANNOT_CONNECT_TO_MOODLE');
     } else {
         $system[6]['value'] = 1;
         $system[6]['error'] = '';
     }
     // Moodle to Joomla
     //	$result = file_get_contents ($joomla_file_url);
     $result = JoomdleHelperContent::get_file($joomla_file_url);
     $system[7]['description'] = JText::_('COM_JOOMDLE_JOOMDLE_MOODLE_TO_JOOMLA_CONNECTION');
     if (strncmp($result, 'OK', 2) != 0) {
         $system[7]['value'] = 0;
         $system[7]['error'] = JText::_('COM_JOOMDLE_MOODLE_CANNOT_CONNECT_TO_JOOMLA');
     } else {
         $system[7]['value'] = 1;
         $system[7]['error'] = '';
     }
     /* Test Moodle Web services in joomdle plugin */
     $system[3]['description'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES');
     $response = JoomdleHelperContent::call_method_debug('system_check');
     if ($response == '') {
         $system[3]['value'] = 0;
         $system[3]['error'] = JText::_('COM_JOOMDLE_EMPTY_RESPONSE_FROM_MOODLE');
     } else {
         if (is_array($response) && xmlrpc_is_fault($response)) {
             $code = $response['faultCode'];
             //."): ".$response['faultString'];
             switch ($code) {
                 case '702':
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_ERROR_702');
                     break;
                 case '704':
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_ERROR_704');
                     break;
                 case '7021':
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_ERROR 7021');
                     break;
                 case '7015':
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_ERROR 7015');
                     break;
                 case '0':
                     $system[3]['value'] = 0;
                     if (strstr($response['faultString'], 'joomdle_auth')) {
                         $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_AUTH_NOT_ENABLED');
                     } else {
                         if (strstr($response['faultString'], 'mnet_auth')) {
                             $system[3]['error'] = JText::_('COM_JOOMDLE_MNET_AUTH_NOT_ENABLED');
                         } else {
                             if (strstr($response['faultString'], 'Access control')) {
                                 $system[3]['error'] = JText::_('COM_JOOMDLE_ACCESS_CONTROL_ERROR');
                             }
                         }
                     }
                     break;
                 case '620':
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_ERROR_620');
                     break;
                 default:
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_WEB_SERVICES_UNEXPECTED_ERROR') . ": " . $code . ": " . $response['faultString'];
             }
         } else {
             if ($response['joomdle_auth'] != 1) {
                 $system[3]['value'] = 0;
                 $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMDLE_AUTH_NOT_ENABLED');
             } else {
                 if ($response['joomdle_configured'] == 0) {
                     $system[3]['value'] = 0;
                     $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMLA_URL_NOT_CONFIGURED_IN_MOODLE_PLUGIN');
                 } else {
                     if ($response['test_data'] != 'It works') {
                         if (strncmp($response['test_data'], 'XML-RPC Error (1): Access Denied', 32) == 0) {
                             $system[3]['value'] = 0;
                             $system[3]['error'] = JText::_('COM_JOOMDLE_IP_NOT_ALLOWED') . ": " . substr($response['test_data'], 32);
                         }
                         if (strncmp($response['test_data'], 'XML-RPC Error (1): Invalid token', 32) == 0) {
                             $system[3]['value'] = 0;
                             $system[3]['error'] = JText::_('COM_JOOMDLE_INVALID_TOKEN') . ": " . substr($response['test_data'], 33);
                         } else {
                             $system[3]['value'] = 0;
                             $system[3]['error'] = JText::_('COM_JOOMDLE_JOOMLA_URL_MISCONFIGURED_IN_MOODLE_PLUGIN');
                         }
                     } else {
                         $system[3]['value'] = 1;
                         $system[3]['error'] = '';
                     }
                 }
             }
         }
     }
     return $system;
 }