geneweb\api\GenewebAPI::request PHP Méthode

request() protected méthode

Envoi de la requête à l'API de Geneweb
protected request ( string $type, $data, string $class ) : mixed
$type string
$class string
Résultat mixed
    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;
    }