<?php
/**
 * @package   AllediaFramework
 * @contact   www.alledia.com, hello@alledia.com
 * @copyright 2015 Alledia.com, All rights reserved
 * @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

namespace Alledia\Framework\Network;

defined('_JEXEC') or die();

class Request
{
    /**
     * post
     * POST request
     *
     * @access public
     * @param string $url - url
     * @param array $data - post data
     * @return string
     */
    public function post($url, $data = array())
    {
        if ($this->hasCURL()) {
            return $this->postCURL($url, $data);
        } else {
            return $this->postFOpen($url, $data);
        }
    }

    /**
     * hasCURL
     * Does the server have the curl extension ?
     *
     * @access protected
     * @return boolean
     */
    protected function hasCURL()
    {
        return function_exists('curl_init');
    }

    /**
     * postCURL
     * POST request with curl
     *
     * @access protected
     * @param string $url - url
     * @param array $data - post data
     * @return string
     */
    protected function postCURL($url, $data = array())
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, count($data));
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $contents = curl_exec($ch);
        curl_close($ch);

        return $contents;
    }

    /**
     * postFOpen
     * POST request with fopen
     *
     * @access protected
     * @param string $url - url
     * @param array $data - post data
     * @return string
     */
    protected function postFOpen($url, $data = array())
    {
        $stream = fopen($url, 'r', false, stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type: application/x-www-form-urlencoded',
                'content' => http_build_query(
                    $data
                )
            )
        )));

        $contents = stream_get_contents($stream);
        fclose($stream);

        return $contents;
    }
}
