protected function request($type, $data, $class)
{
$vars = array();
$vars['m'] = 'API_' . $type;
$vars['input'] = 'pb';
$vars['output'] = $this->output == self::OUTPUT_BINARY ? self::OUTPUT_PB : $this->output;
$vars['sig'] = $this->signature;
if ($this->getIz() != "") {
$vars['iz'] = $this->getIz();
}
$b = $this->base;
// on vérifie que le mode magicien ou ami est activé
$authorization = false;
if ($this->isModeWizard()) {
$b .= "_w";
$authorization = true;
} elseif ($this->isModeFriend()) {
$b .= "_f";
$authorization = true;
}
if ($data !== null) {
if (get_class($data)) {
$fp = fopen('php://memory', 'r+b');
$data->write($fp);
rewind($fp);
$data = stream_get_contents($fp);
fclose($fp);
}
$vars["data"] = $data;
//urlencode($data);
}
if ($this->isFullInfos()) {
$vars['full_infos'] = $this->isFullInfos();
}
$isNbResults = false;
if (count($this->filters) > 0) {
$filterAPI = new \geneweb\api\object\Filters();
foreach ($this->filters as $filter) {
if ($filter instanceof filters\FilterOnlySosa) {
$filterAPI->setOnlySosa(true);
} elseif ($filter instanceof filters\FilterOnlyRecent) {
$filterAPI->setOnlyRecent(true);
} elseif ($filter instanceof filters\FilterSex) {
$filterAPI->setSex($filter->getSex());
} elseif ($filter instanceof filters\FilterNbResults) {
$filterAPI->setNbResults(true);
$isNbResults = true;
} elseif ($filter instanceof filters\FilterDateBirth || $filter instanceof filters\FilterDateDeath) {
$filterDateB = new \geneweb\api\object\FilterDate();
$filterDateB->setDay($filter->getDayBegin());
$filterDateB->setMonth($filter->getMonthBegin());
$filterDateB->setYear($filter->getYearBegin());
$filterDateE = new \geneweb\api\object\FilterDate();
$filterDateE->setDay($filter->getDayEnd());
$filterDateE->setMonth($filter->getMonthEnd());
$filterDateE->setYear($filter->getYearEnd());
$filterRange = new \geneweb\api\object\FilterDateRange();
$filterRange->setDateBegin($filterDateB);
$filterRange->setDateEnd($filterDateE);
if ($filter instanceof filters\FilterDateBirth) {
$filterAPI->setDateBirth($filterRange);
} else {
$filterAPI->setDateDeath($filterRange);
}
}
}
$fp = fopen('php://memory', 'r+b');
$filterAPI->write($fp);
rewind($fp);
$data = stream_get_contents($fp);
fclose($fp);
$vars["filters"] = $data;
//urlencode($data);
}
$this->filters = array();
$query = http_build_query($vars);
//for GET
$req = $this->url . $b . "?" . $query;
$this->lastUrl = $req;
$ci = curl_init();
curl_setopt($ci, CURLOPT_URL, $req);
curl_setopt($ci, CURLOPT_HEADER, false);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
// headers
$headers = array();
//si le mode ami ou magicien est activé, on envoie les authentifications
if ($authorization) {
array_push($headers, 'Authorization: Basic ' . base64_encode($this->user . ":" . $this->password));
}
//liens inter-arbres
//if ($this->linksTree) {
array_push($headers, 'Links-Tree: 1');
//}
//on ajoute les headers
if (!empty($headers)) {
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
}
$data = null;
$data_encoded = curl_exec($ci);
//var_dump(curl_getinfo($ci));
//var_dump($data_encoded);
if ($isNbResults) {
$class = $this->getClassname("InternalInt32");
}
if ($class !== null) {
if (curl_errno($ci)) {
$data = new $class();
} else {
try {
if ($this->output === self::OUTPUT_PB) {
$data = new $class($data_encoded);
if ($isNbResults) {
$data = $data->getValue();
}
} else {
$data = $data_encoded;
}
} catch (\Exception $e) {
if ($this->output === self::OUTPUT_PB) {
$data = new $class();
if ($isNbResults) {
$data = $data->getValue();
}
} else {
$data = $data_encoded;
}
}
curl_close($ci);
}
}
return $data;
}