You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							179 lines
						
					
					
						
							6.7 KiB
						
					
					
				
			
		
		
	
	
							179 lines
						
					
					
						
							6.7 KiB
						
					
					
				<?php
 | 
						|
/*
 | 
						|
* Licensed to the Apache Software Foundation (ASF) under one
 | 
						|
* or more contributor license agreements.  See the NOTICE file
 | 
						|
* distributed with this work for additional information
 | 
						|
* regarding copyright ownership.  The ASF licenses this file
 | 
						|
* to you under the Apache License, Version 2.0 (the
 | 
						|
* "License") +  you may not use this file except in compliance
 | 
						|
* with the License.  You may obtain a copy of the License at
 | 
						|
*
 | 
						|
*   http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
*
 | 
						|
* Unless required by applicable law or agreed to in writing,
 | 
						|
* software distributed under the License is distributed on an
 | 
						|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
						|
* KIND, either express or implied.  See the License for the
 | 
						|
* specific language governing permissions and limitations
 | 
						|
* under the License.
 | 
						|
*/
 | 
						|
/**
 | 
						|
 * Created on 03.01.2012 by eugen.schwert@gmail.com
 | 
						|
 * @package chamilo.plugin.openmeetings
 | 
						|
 * @requires CURL
 | 
						|
 */
 | 
						|
/**
 | 
						|
 * Class OpenMeetingsRestService
 | 
						|
 */
 | 
						|
class OpenMeetingsRestService
 | 
						|
{
 | 
						|
    function call($request, $returnAttribute = "return")
 | 
						|
    {
 | 
						|
        // This will allow you to view errors in the browser
 | 
						|
        // Note: set "display_errors" to 0 in production
 | 
						|
        // ini_set('display_errors',1);
 | 
						|
        
 | 
						|
        // Report all PHP errors (notices, errors, warnings, etc.)
 | 
						|
        // error_reporting(E_ALL);
 | 
						|
        
 | 
						|
        // URI used for making REST call. Each Web Service uses a unique URL.
 | 
						|
        // $request
 | 
						|
        
 | 
						|
        // Initialize the session by passing the request as a parameter
 | 
						|
        $session = curl_init ( $request );
 | 
						|
        
 | 
						|
        // Set curl options by passing session and flags
 | 
						|
        // CURLOPT_HEADER allows us to receive the HTTP header
 | 
						|
        curl_setopt ( $session, CURLOPT_HEADER, true );
 | 
						|
        
 | 
						|
        // CURLOPT_RETURNTRANSFER will return the response
 | 
						|
        curl_setopt ( $session, CURLOPT_RETURNTRANSFER, true );
 | 
						|
        
 | 
						|
        // Make the request
 | 
						|
        $response = curl_exec ( $session );
 | 
						|
        
 | 
						|
        // Close the curl session
 | 
						|
        curl_close ( $session );
 | 
						|
        
 | 
						|
        // Confirm that the request was transmitted to the OpenMeetings! Image Search Service
 | 
						|
        if (! $response) {
 | 
						|
            die ( "Request OpenMeetings! OpenMeetings Service failed and no response was returned." );
 | 
						|
        }
 | 
						|
        
 | 
						|
        // Create an array to store the HTTP response codes
 | 
						|
        $status_code = array ();
 | 
						|
        
 | 
						|
        // Use regular expressions to extract the code from the header
 | 
						|
        preg_match ( '/\d\d\d/', $response, $status_code );
 | 
						|
        
 | 
						|
        // Check the HTTP Response code and display message if status code is not 200 (OK)
 | 
						|
        switch ($status_code [0]) {
 | 
						|
            case 200 :
 | 
						|
                // Success
 | 
						|
                break;
 | 
						|
            case 503 :
 | 
						|
                error_log( 'Your call to OpenMeetings Web Services failed and returned an HTTP status of 503.
 | 
						|
                                 That means: Service unavailable. An internal problem prevented us from returning data to you.' );
 | 
						|
                return false;
 | 
						|
                break;
 | 
						|
            case 403 :
 | 
						|
                error_log( 'Your call to OpenMeetings Web Services failed and returned an HTTP status of 403.
 | 
						|
                                 That means: Forbidden. You do not have permission to access this resource, or are over your rate limit.' );
 | 
						|
                return false;
 | 
						|
                break;
 | 
						|
            case 400 :
 | 
						|
                // You may want to fall through here and read the specific XML error
 | 
						|
                error_log( 'Your call to OpenMeetings Web Services failed and returned an HTTP status of 400.
 | 
						|
                                 That means:  Bad request. The parameters passed to the service did not match as expected.   
 | 
						|
                                 The exact error is returned in the XML response.' );
 | 
						|
                return false;
 | 
						|
                break;
 | 
						|
            default :
 | 
						|
                error_log( 'Your call to OpenMeetings Web Services returned an unexpected HTTP status of: ' . $status_code [0] . " Request " . $request );
 | 
						|
                return false;
 | 
						|
        }
 | 
						|
        
 | 
						|
            // Get the XML from the response, bypassing the header
 | 
						|
        if (!($xml = strstr($response, '<ns'))) {
 | 
						|
            $xml = null;
 | 
						|
        }
 | 
						|
            
 | 
						|
        $dom = new DOMDocument();
 | 
						|
        $dom->loadXML($xml);
 | 
						|
            
 | 
						|
        if ($returnAttribute == "") {
 | 
						|
            //echo "XML".$xml."<br/>";
 | 
						|
            return $this->getArray($dom);
 | 
						|
        } else {
 | 
						|
            $returnNodeList = $dom->getElementsByTagName($returnAttribute);
 | 
						|
            $ret = array();
 | 
						|
            foreach ($returnNodeList as $returnNode) {
 | 
						|
                if ($returnNodeList->length == 1) {
 | 
						|
                    return $this->getArray($returnNode);
 | 
						|
                } else {
 | 
						|
                    $ret[] = $this->getArray($returnNode);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return $ret;
 | 
						|
        }
 | 
						|
            
 | 
						|
    }
 | 
						|
 | 
						|
    function getArray($node)
 | 
						|
    {
 | 
						|
        if (is_null($node) || !is_object($node)) {
 | 
						|
            return $node;
 | 
						|
        }
 | 
						|
        $array = false;
 | 
						|
        /*
 | 
						|
            echo("!!!!!!!! NODE " . XML_TEXT_NODE
 | 
						|
                    . " :: name = " . $node->nodeName
 | 
						|
                    . " :: local = " . $node->localName
 | 
						|
                    . " :: childs ? " . $node->hasChildNodes()
 | 
						|
                    . " :: count = " . ($node->hasChildNodes() ? $node->childNodes->length : -1)
 | 
						|
                    . " :: type = " . $node->nodeType
 | 
						|
                    . " :: val = " . $node->nodeValue
 | 
						|
                    . "\n");
 | 
						|
        /*
 | 
						|
        if ($node->hasAttributes()) {
 | 
						|
            foreach ($node->attributes as $attr) {
 | 
						|
                $array[$attr->nodeName] = $attr->nodeValue;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        */
 | 
						|
        if ($node->hasChildNodes()) {
 | 
						|
            foreach ($node->childNodes as $childNode) {
 | 
						|
                if ($childNode->nodeType != XML_TEXT_NODE) {
 | 
						|
                    if ($node->hasAttributes()) {
 | 
						|
                        foreach ($node->attributes as $attr) {
 | 
						|
                            if ($attr->localName == "nil") {
 | 
						|
                                return null;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if ($childNode->childNodes->length == 1) {
 | 
						|
                        $array[$childNode->localName] = $this->getArray($childNode);
 | 
						|
                    } else {
 | 
						|
                        $array[$childNode->localName][] = $this->getArray($childNode);
 | 
						|
                    }
 | 
						|
                } else {
 | 
						|
                    return $childNode->nodeValue;
 | 
						|
                    //echo("!!!!!!!! TEXT " . $childNode->nodeValue . "\n");
 | 
						|
                    //$array[$childNode->localName]
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $array;
 | 
						|
    }
 | 
						|
 | 
						|
    function getError()
 | 
						|
    {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    function fault()
 | 
						|
    {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
} |