function unserialize($infos, $mode) { global $openurl_map; global $class_path; $elements = array(); foreach ($infos as $key => $values) { switch ($key) { case "rft_id": //descripteurs identifier foreach ($values as $value) { if (preg_match('/([^:]+:[^:]*):.*/', $value, $match)) { $iclass = $openurl_map[strtolower('info:ofi/nam:' . $match[1])]['class']; $ident = new $iclass(); $ident->setEntityType($this->type); $ident->unserialize($value); $this->descriptors[] = $ident; } } break; case "rft_val_fmt": //By-Value $class = $openurl_map[strtolower($values[0])]['class']; break; case "rft_ref_fmt": //By-Reference $content = openurl_transport_http::get($infos["rft_ref"][0]); switch (self::$serialize) { case "kev_mtx": default: $content = openurl_serialize_kev_mtx::unserialize($content); foreach ($content as $key => $value) { $content[$key] = $value[0]; } break; } $byref = new $openurl_map[strtolower($values[0])]['class'](); $byref->setEntityType($this->type); $byref->unserialize($content, true); $this->descriptors[] = $byref; break; case "rft_dat": //Private Data break; default: //on colle les éléments du by-value dans un tableau if (substr($key, -3) != "ref") { $elements[$key] = $values[0]; } break; } } if ($class) { $byval = new $class(); $byval->setEntityType($this->type); $byval->unserialize($elements); $this->descriptors[] = $byval; } }
function unserialize($str) { global $include_path; global $openurl_map; global $url_ctx_val, $url_ctx_ref; $openurl_map = array(); //on va avoir besoin du mapping... require_once "{$include_path}/parser.inc.php"; _parser_($include_path . "/openurl/openurl_mapping.xml", array("ITEM" => "_getMapItem_"), "MAP"); $ctx = new openurl_context_object_kev_mtx_ctx(); if ($url_ctx_val != "") { //Transport By-Value $ctx->unserialize($url_ctx_val); } else { if ($url_ctx_ref != "") { //Transport By-Reference $content = openurl_transport_http::get($url_ctx_ref); $ctx->unserialize($content); } else { //Transport Inline $ctx->unserialize($str); } } }
function send() { return openurl_transport_http::get($this->generateURL()); }