/**
  * sign request data with OAuth
  * 
  * @param array (	"method => signature methos
  * 					"key" => consumer key
  * 					"secret" => shared secret
  * 					"token"	=> request token
  * 					"url" => request url
  * 					data => array (key => value)
  * 				)
  * 						
  * @return array	signed data
  */
 private static function signOAuth($a_params)
 {
     require_once './Customizing/global/plugins/Services/Repository/RepositoryObject/ExternalContent/lib/OAuth.php';
     switch ($a_params['sign_method']) {
         case "HMAC_SHA1":
             $method = new OAuthSignatureMethod_HMAC_SHA1();
             break;
         case "PLAINTEXT":
             $method = new OAuthSignatureMethod_PLAINTEXT();
             break;
         case "RSA_SHA1":
             $method = new OAuthSignatureMethod_RSA_SHA1();
             break;
         default:
             return "ERROR: unsupported signature method!";
     }
     $consumer = new OAuthConsumer($a_params["key"], $a_params["secret"], $a_params["callback"]);
     $request = OAuthRequest::from_consumer_and_token($consumer, $a_params["token"], $a_params["http_method"], $a_params["url"], $a_params["data"]);
     $request->sign_request($method, $consumer, $a_params["token"]);
     // Pass this back up "out of band" for debugging
     self::$last_oauth_base_string = $request->get_signature_base_string();
     return $request->get_parameters();
 }
 /**
  * Apply a function with parameters to fill a field
  * 
  * @param $a_field
  * @param $a_maxdepth
  * @return unknown_type
  */
 private function fillCalculatedField($a_field, $a_maxdepth)
 {
     // process the function parameters
     $parsed_params = array();
     foreach ($a_field['params'] as $param_name => $param_value) {
         foreach ($this->fields as $field_name => $field) {
             if ($param_value == $this->typedef->getPlaceholder($field_name)) {
                 $param_value = $this->fillField($field, $a_maxdepth);
             }
             $parsed_params[$param_name] = $param_value;
         }
     }
     // apply the function
     require_once "./Customizing/global/plugins/Services/Repository/RepositoryObject/ExternalContent/classes/class.ilExternalContentFunctions.php";
     $value = ilExternalContentFunctions::applyFunction($a_field['function'], $parsed_params);
     // save the value so that it is not re-calculated
     $this->fields[$a_field['field_name']]['field_value'] = $value;
     return $value;
 }