/** * * Returns an escaped href or src attribute value for a generic URI. * * @param Solar_Uri|string $spec The href or src specification. * * @return string * */ public function href($spec) { if ($spec instanceof Solar_Uri) { // fetch the full href, not just the path/query/fragment $href = $spec->get(true); } else { $href = $spec; } return $this->_view->escape($href); }
/** * * Prepares $this->_headers, $this->_cookies, and $this->content for the * request. * * @return array A sequential array where element 0 is a URI object, * element 1 is string of headers (including cookies), and element 2 is a * string of content. * * @todo Only generate $content on POST and PUT? * */ protected function _prepareRequest() { // get the URI if (!$this->_uri) { throw $this->_exception('ERR_NO_URI'); } else { $uri = clone $this->_uri; } // what kind of request is this? $is_get = $this->_method == Solar_Http_Request::METHOD_GET; $is_post = $this->_method == Solar_Http_Request::METHOD_POST; $is_put = $this->_method == Solar_Http_Request::METHOD_PUT; // do we have any body content? if (is_array($this->content) && ($is_post || $is_put)) { // is a POST or PUT with a data array. // convert from array and force the content-type. $content = http_build_query($this->content); $content_type = 'application/x-www-form-urlencoded'; } elseif (is_array($this->content) && $is_get) { // is a GET with a data array. // merge the content array to the cloned uri query params. $uri->query = array_merge($uri->query, $this->content); // now clear out the content $content = null; $content_type = null; } elseif (is_string($this->content)) { // honor as set by the user $content = $this->content; $content_type = $this->_content_type; } else { // no recognizable content $content = null; $content_type = null; } // get a list of the headers as they are now $list = $this->_headers; // force the content-type header if needed if ($content_type) { if ($this->_charset) { $content_type .= "; charset={$this->_charset}"; } $list['Content-Type'] = $content_type; } // auto-set the content-length if ($this->_config['auto_set_length']) { if ($content) { $list['Content-Length'] = strlen($content); } else { unset($list['Content-Length']); } } // force the user-agent header if needed if ($this->_user_agent) { $list['User-Agent'] = $this->_user_agent; } // force the referer if needed if ($this->_referer) { $list['Referer'] = $this->_referer->get(true); } // convert the list of all header values to a sequential array $headers = array(); foreach ($list as $key => $set) { settype($set, 'array'); foreach ($set as $val) { $headers[] = Solar_Mime::headerLine($key, $val); } } // create additional cookies in the headers array if ($this->_cookies) { $val = array(); foreach ($this->_cookies as $name => $data) { $val[] = "{$name}=" . urlencode($data); } $headers[] = Solar_Mime::headerLine('Cookie', implode(';', $val)); } // done! return array($uri, $headers, $content); }
/** * Queries the couchdb database directly * * @param Solar_Uri $uri The uri object to use * @param Solar_Http_Request $request The request object to use * * @return array the result * @author Bahtiar Gadimov <*****@*****.**> */ public function query(Solar_Uri $uri, Solar_Http_Request_Adapter $request = null) { if ($request == null) { $request = $this->getHttpRequest(); } //print($uri->get(true)."\n\n"); //print("\n"); //Solar::dump($request); //print("\n"); $request->setUri($uri->get(true)); $json = $request->fetch()->content; $result = json_decode($json, true); if (isset($result['error']) && isset($result['reason'])) { $this->_createException($result); } return $result; }