public function GetPropertyEditorUrl($courseId, $stylesheetUrl, $notificationFrameUrl = null) { // The local parameter map just contains method methodParameters. We'll // now create a complete parameter map that contains the web-service // params as well the actual method params. $request = new ServiceRequest($this->_configuration); $parameterMap = array('action' => 'properties.view'); $parameterMap['package'] = 'AppId|' . $this->_configuration->getAppId() . '!PackageId|' . $courseId; $parameterMap['appid'] = $this->_configuration->getAppId(); $parameterMap['ts'] = gmdate("YmdHis"); if (isset($notificationFrameUrl)) { $parameterMap['notificationframesrc'] = $notificationFrameUrl; } if (isset($stylesheetUrl)) { $parameterMap['stylesheet'] = $stylesheetUrl; } // Construct the url, concatonate all parameters as query string parameters $url = $this->_configuration->getScormEngineServiceUrl() . "/widget"; //$cnt = 0; //foreach ($parameterMap as $key => $value) //{ // Create a query string with URL-encoded values // $url .= ($cnt++ == 0 ? "?" : "&").$key."=".$parameterMap[$key]; //} $url .= '?' . $request->signParams($this->_configuration->getSecurityKey(), $parameterMap); //if (url.Length > 2000) // throw new ApplicationException("URL > 2000 bytes"); return $url; }