예제 #1
0
 public function _doCheck()
 {
     // if not set to auto check and not forced to do so
     // when user click on "check updates" button
     // we don't actually try to get updates info
     $sefConfig =& Sh404sefFactory::getConfig();
     // prepare a default response object
     $response = new stdClass();
     $response->status = true;
     $response->statusMessage = JText::_('COM_SH404SEF_CLICK_TO_CHECK_UPDATES');
     $response->current = 0;
     $response->note = '';
     $response->changelogLink = '';
     $response->minVersionToUpgrade = 0;
     $response->maxVersionToUpgrade = 0;
     $response->shouldUpdate = false;
     $response->excludes = array();
     // check if allowed to auto check, w/o user clicking on button
     if (!$sefConfig->autoCheckNewVersion && empty(self::$_forced['updates'])) {
         return $response;
     }
     // get an http client
     require_once JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_sh404sef' . DS . 'lib' . DS . 'Zend' . DS . 'Http' . DS . 'Client.php';
     $hClient = new Sh_Zend_Http_Client();
     $hClient->setConfig(array('maxredirects' => 0, 'timeout' => 10));
     // find where to call ...
     $remoteConfig = Sh404sefHelperUpdates::getRemoteConfig($forced = false);
     // hardcoded default update server
     $defaultServers = array(array('url' => self::$_endPoint . '/' . self::$_updateFile));
     // try to read from remote, central, configuration file
     $remoteServers = empty($remoteConfig->config['updateservers']) ? array() : $remoteConfig->config['updateservers'];
     // merge default and remote
     $servers = array_merge($remoteServers, $defaultServers);
     // check for urls in both defaults and remote
     $serverList = array();
     foreach ($servers as $server) {
         $serverList[] = $server['url'];
     }
     $serverList = array_unique($serverList);
     // now iterate over server list, until we find one that responds
     foreach ($serverList as $server) {
         $response->status = true;
         // actually place a call to find about available updates
         try {
             $hClient->setUri($server);
         } catch (Exception $e) {
             //  move to next update server in list
             $response->status = false;
             continue;
         }
         // request file content
         $adapters = array('Sh_Zend_Http_Client_Adapter_Curl', 'Sh_Zend_Http_Client_Adapter_Socket');
         $rawResponse = null;
         foreach ($adapters as $adapter) {
             try {
                 $hClient->setAdapter($adapter);
                 $rawResponse = $hClient->request();
                 break;
             } catch (Exception $e) {
                 // need that to be Exception, so as to catche Sh_Zend_Exceptions.. as well
                 // we failed, let's try another method
             }
         }
         // (un)set flag if we have a response
         if (empty($rawResponse)) {
             $response->status = false;
             $msg = 'unknown code';
             $response->statusMessage = JText::sprintf('COM_SH404SEF_COULD_NOT_CHECK_FOR_NEW_VERSION', $msg);
         } else {
             if (!is_object($rawResponse) || $rawResponse->isError()) {
                 $response->status = false;
                 $msg = method_exists($rawResponse, 'getStatus') ? $rawResponse->getStatus() : 'unknown code';
                 $response->statusMessage = JText::sprintf('COM_SH404SEF_COULD_NOT_CHECK_FOR_NEW_VERSION', $msg);
             } else {
                 // communication was fine, check the file type
                 $type = $rawResponse->getHeader('Content-type');
                 if (strtolower($type) != 'text/xml' && strtolower($type) != 'application/xml') {
                     $response->status = false;
                     $response->statusMessage = JText::sprintf('COM_SH404SEF_COULD_NOT_CHECK_FOR_NEW_VERSION', $rawResponse->getStatus());
                 }
             }
         }
         // if there was a valid response, break out of
         // loop over available update servers
         if ($response->status) {
             break;
         }
     }
     // if we were not able to contact any update server
     // return this
     if (!$response->status) {
         return $response;
     }
     // get an xml object and parse the response
     $xml =& JFactory::getXMLparser('Simple');
     $xml->loadString($rawResponse->getBody());
     // into our response object
     // first version of version check used an xml file that could only hold one
     // version data set. So we only iterate over the "update" group if it exists
     if (empty($xml->document->update)) {
         $response = self::_readUpdateInformation($xml->document, $response);
     } else {
         foreach ($xml->document->update as $updateRecord) {
             $product = $updateRecord->product[0]->data();
             // only use if this update record is for us
             if ($product == self::$_product) {
                 $response = self::_readUpdateInformation($updateRecord, $response);
                 // find if user should update
                 $response = Sh404sefHelperUpdates::_updateRequired($response);
                 // if found an update, break out
                 if ($response->shouldUpdate) {
                     break;
                 }
             }
         }
     }
     // check if this is a valid information file
     return $response;
 }
예제 #2
0
파일: updates.php 프로젝트: justinlyon/scc
 public function _doCheck()
 {
     // if not set to auto check and not forced to do so
     // when user click on "check updates" button
     // we don't actually try to get updates info
     $sefConfig =& shRouter::shGetConfig();
     // prepare a default response object
     $response = new stdClass();
     $response->status = true;
     $response->statusMessage = JText16::_('COM_SH404SEF_CLICK_TO_CHECK_UPDATES');
     $response->current = 0;
     $response->note = '';
     $response->changelogLink = '';
     $response->minVersionToUpgrade = 0;
     $response->maxVersionToUpgrade = 0;
     $response->shouldUpdate = false;
     $response->excludes = array();
     // check if allowed to auto check, w/o user clicking on button
     if (!$sefConfig->autoCheckNewVersion && !self::$_forced) {
         return $response;
     }
     // get an http client
     require_once JPATH_COMPONENT . DS . 'lib' . DS . 'Zend' . DS . 'Http' . DS . 'Client.php';
     $hClient = new Zend_Http_Client();
     // set params
     $hClient->setUri(self::$_endPoint . '/' . self::$_product);
     $hClient->setConfig(array('maxredirects' => 0, 'timeout' => 10));
     // request file content
     $adapters = array('Zend_Http_Client_Adapter_Curl', 'Zend_Http_Client_Adapter_Socket');
     $rawResponse = null;
     foreach ($adapters as $adapter) {
         try {
             $hClient->setAdapter($adapter);
             $rawResponse = $hClient->request();
             break;
         } catch (Exception $e) {
             // need that to be Exception, so as to catche Zend_Exceptions.. as well
             // we failed, let's try another method
         }
     }
     // return if error
     if (!is_object($rawResponse) || $rawResponse->isError()) {
         $response->status = false;
         $msg = method_exists($rawResponse, 'getStatus') ? $rawResponse->getStatus() : 'unknown code';
         $response->statusMessage = JText16::sprintf('COM_SH404SEF_COULD_NOT_CHECK_FOR_NEW_VERSION', $msg);
         return $response;
     }
     // check the file
     $type = $rawResponse->getHeader('Content-type');
     if (strtolower($type) != 'text/xml' && strtolower($type) != 'application/xml') {
         $response->status = false;
         $response->statusMessage = JText16::sprintf('COM_SH404SEF_COULD_NOT_CHECK_FOR_NEW_VERSION', $rawResponse->getStatus());
         return $response;
     }
     // should be OK then
     $response->status = true;
     // get an xml object and parse the response
     $xml =& JFactory::getXMLparser('Simple');
     $xml->loadString($rawResponse->getBody());
     // into our response object
     $response->current = $xml->document->current[0]->data();
     $response->note = $xml->document->note[0]->data();
     $response->changelogLink = $xml->document->changelogLink[0]->data();
     $response->downloadLink = $xml->document->downloadLink[0]->data();
     $response->minVersionToUpgrade = $xml->document->minVersionToUpgrade[0]->data();
     $response->maxVersionToUpgrade = $xml->document->maxVersionToUpgrade[0]->data();
     $rawExcludes = $xml->document->exclude;
     $response->excludes = array();
     if (!empty($rawExcludes)) {
         foreach ($rawExcludes as $exclude) {
             $response->excludes[] = $exclude->data();
         }
     }
     // find if user should update
     $response = Sh404sefHelperUpdates::_updateRequired($response);
     // check if this is a valid information file
     return $response;
 }