69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace cURL;
 | 
						|
 | 
						|
class Options extends Collection
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var array Array of cURL constants required for intelligent setters
 | 
						|
     */
 | 
						|
    protected static $curlConstantsTable = array();
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Applies options to Request object
 | 
						|
     * 
 | 
						|
     * @param Request $request
 | 
						|
     * 
 | 
						|
     * @return self
 | 
						|
     */
 | 
						|
    public function applyTo(Request $request)
 | 
						|
    {
 | 
						|
        if (!empty($this->data)) {
 | 
						|
            curl_setopt_array($request->getHandle(), $this->data);
 | 
						|
        }
 | 
						|
        
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Prepares array for intelligent setters
 | 
						|
     * 
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public static function loadCurlConstantsTable()
 | 
						|
    {
 | 
						|
        $constants = get_defined_constants(true);
 | 
						|
        $table = array();
 | 
						|
        foreach ($constants['curl'] as $key => $value) {
 | 
						|
            if (strpos($key, 'CURLOPT_') === 0) {
 | 
						|
                $key = str_ireplace(array('CURLOPT', '_'), '', $key);
 | 
						|
                $table[$key] = $value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        self::$curlConstantsTable = $table;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Intelligent setters
 | 
						|
     * 
 | 
						|
     * @param string $name Function name
 | 
						|
     * @param array $args Arguments
 | 
						|
     * 
 | 
						|
     * @return self
 | 
						|
     */
 | 
						|
    public function __call($name, $args)
 | 
						|
    {
 | 
						|
        if (substr($name, 0, 3) == 'set' && isset($args[0])) {
 | 
						|
            if (empty(self::$curlConstantsTable)) {
 | 
						|
                self::loadCurlConstantsTable();
 | 
						|
            }
 | 
						|
            $const = strtoupper(substr($name, 3));
 | 
						|
            if (isset(self::$curlConstantsTable[$const])) {
 | 
						|
                $this->data[self::$curlConstantsTable[$const]] = $args[0];
 | 
						|
                return $this;
 | 
						|
            } else {
 | 
						|
                throw new Exception('Constant CURLOPT_'.$const.' does not exist.');
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |