/** * Create a request from PHP's superglobals. * * @return self The request. */ public static function createGlobal() { $uri = new Uri(isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''); $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; $request = new self($uri, $method, $_GET, $_POST, $_COOKIE, UploadedFile::convert($_FILES), $_SERVER); foreach ($_SERVER as $name => $value) { if (substr_compare($name, 'HTTP_', 0, 5) === 0) { $request->setHeader(str_replace('_', '-', substr($name, 5)), $value); } } return $request; }
public static function buildFromCurlResponse($curl_response) { $response = new self(); $t = new \SimpleXMLElement($curl_response); foreach ($t as $k => $v) { if ($k == 'Request') { foreach ($t->Request[0] as $k => $v) { $response->setHeader($k, $v); } } else { $obj = ResponseObj::fromXML($k, $v); $response->setProperty($k, $obj); // echo $k.'.'. print_r($v, 1) ."\n"; } } return $response; }
/** */ public static function createFromRawResponse($rawResponse) { $response = new self($rawResponse); $lines = preg_split('/(\\r?\\n)/', $rawResponse); for ($i = 0; $i < count($lines); $i++) { if (0 == $i) { preg_match('/^HTTP\\/(\\d\\.\\d)\\s(\\d+)\\s(.+)/', $lines[$i], $statusLine); $response->setStatusCode($statusCode = $statusLine[2]); continue; } if (empty($lines[$i])) { $body = array_slice($lines, $i + 1); $response->setBody(implode("\n", $body)); break; } if (strpos($lines[$i], ':')) { $headerParts = explode(':', $lines[$i]); $response->setHeader($headerParts[0], $headerParts[1]); } } return $response; }
/** * Export record to PDF file * @param int $recordId - id of a record * @param string $moduleName - name of records module * @param int $templateId - id of pdf template * @param string $filePath - path name for saving pdf file * @param string $saveFlag - save option flag */ public function export($recordId, $moduleName, $templateId, $filePath = '', $saveFlag = '') { $template = Vtiger_PDF_Model::getInstanceById($templateId, $moduleName); $template->setMainRecordId($recordId); $pageOrientation = $template->get('page_orientation') == 'PLL_PORTRAIT' ? 'P' : 'L'; $pdf = new self('c', $template->get('page_format'), 0, '', $template->get('margin_left'), $template->get('margin_right'), $template->get('margin_top'), $template->get('margin_bottom'), $template->get('margin_top'), $template->get('margin_bottom'), $pageOrientation); $pdf->setTemplateId($templateId); $pdf->setRecordId($recordId); $pdf->setModuleName($moduleName); $pdf->setLanguage($template->get('language')); $pdf->setFileName($template->get('filename')); $origLanguage = vglobal('default_language'); vglobal('default_language', $template->get('language')); $pdf->parseParams($template->getParameters()); $pdf->setHeader('Header', $template->getHeader()); $pdf->setFooter('Footer', $template->getFooter()); $html = $template->getBody(); $pdf->loadHTML($html); vglobal('default_language', $origLanguage); $pdf->output($filePath, $saveFlag); }
/** * Create an instance from an input string. * @param string $str the stringified response * @return \vakata\http\Response the response instance * @codeCoverageIgnore */ public static function fromString($str) { $res = new self(); $break = strpos($str, "\r\n\r\n") === false ? "\n" : "\r\n"; // just in case someone breaks RFC 2616 list($headers, $message) = explode($break . $break, (string) $str, 2); $headers = explode($break, preg_replace("(" . $break . "\\s+)", " ", $headers)); if (isset($headers[0]) && substr($headers[0], 0, 5) === 'HTTP/') { $temp = explode(' ', substr($headers[0], 5)); $res->setProtocolVersion($temp[0]); $res->setStatusCode((int) $temp[1]); unset($headers[0]); $headers = array_values($headers); } foreach (array_filter($headers) as $v) { $v = explode(':', $v, 2); $res->setHeader(trim($v[0]), trim($v[1])); } $res->setBody($message); $res->removeHeader('Content-Length'); $res->removeHeader('Transfer-Encoding'); return $res; }
/** * Create a file response. * * @param string $path Path to file. * @param string|null $type Optional MIME type. * @return self The response. */ public static function file($path, $type = null) { $response = new self(Status::OK, new PhpStream($path, 'rb')); if (isset($type)) { $response->setHeader('Content-Type', $type); } return $response; }
/** * Create an instance from a stringified mail. * @param string $str the mail string * @return \vakata\mail\Mail the mail instance */ public static function fromString($mail) { $rtrn = new self(); $mail = $rtrn->parseParts($mail); foreach ($mail['head'] as $k => $v) { switch (strtolower($k)) { case 'to': $rtrn->setTo($v); break; case 'cc': $rtrn->setCc($v); break; case 'bcc': $rtrn->setBcc($v); break; case 'from': $rtrn->setFrom($v); break; case 'subject': $rtrn->setSubject($v); break; default: $rtrn->setHeader($k, $v); break; } } $rtrn->processPart($mail); return $rtrn; }
/** * Create an instance from a stringified request. * @param string $str the stringified request * @return \vakata\http\Request the request instance * @codeCoverageIgnore */ public static function fromString($str) { $req = new self(); $break = strpos($str, "\r\n\r\n") === false ? "\n" : "\r\n"; // just in case someone breaks RFC 2616 list($headers, $message) = explode($break . $break, $str, 2); $headers = explode($break, preg_replace("(" . $break . "\\s+)", " ", $headers)); if (isset($headers[0]) && strlen($headers[0])) { $temp = explode(' ', $headers[0]); if (in_array($temp[0], ['GET', 'POST', 'HEAD', 'PATCH', 'PUT', 'OPTIONS', 'TRACE', 'DELETE'])) { $req->setMethod($temp[0]); $req->setUrl($temp[1]); if (isset($temp[2])) { $req->setProtocolVersion(substr($temp[2], 5)); } unset($headers[0]); $headers = array_values($headers); } } foreach (array_filter($headers) as $v) { $v = explode(':', $v, 2); $req->setHeader(trim($v[0]), trim($v[1])); } if ($req->hasHeader('Host')) { $host = explode(':', $req->getHeader('Host'), 2); $req->getUrl()->setHost($host[0]); if (isset($host[1]) && (int) $host[1]) { $req->getUrl()->setPort($host[1]); } } if (strpos($req->getHeader('Content-Type'), 'multipart') !== false) { $bndr = trim(explode(' boundary=', $req->getHeader('Content-Type'))[1], '"'); $parts = explode($break . '--' . $bndr, $break . $message); array_pop($parts); array_shift($parts); $post = []; foreach ($parts as $item) { list($head, $body) = explode($break . $break, $item, 2); $head = explode($break, preg_replace("(" . $break . "\\s+)", " ", $head)); foreach ($head as $h) { if (strpos(strtolower($h), 'content-disposition') === 0) { $cd = explode(';', $h); $name = ''; $file = ''; foreach ($cd as $p) { if (strpos(trim($p), 'name=') === 0) { $name = trim(explode('name=', $p)[1], ' "'); } if (strpos(trim($p), 'filename=') === 0) { $file = trim(explode('filename=', $p)[1], ' "'); } } if ($file) { $req->addUpload($name, $body, $file); } else { $post[$name] = $body; } } } } $req->setBody(http_build_query($post)); } elseif (strlen($message)) { $req->setBody($message); } $req->removeHeader('Content-Length'); $req->removeHeader('Transfer-Encoding'); return $req; }
/** * Export record to PDF file * @param int $recordId - id of a record * @param string $moduleName - name of records module * @param int $templateId - id of pdf template * @param string $filePath - path name for saving pdf file * @param string $saveFlag - save option flag */ public function export($recordId, $moduleName, $templateId, $filePath = '', $saveFlag = '') { $pdf = new self(); $pdf->setTemplateId($templateId); $pdf->setRecordId($recordId); $pdf->setModuleName($moduleName); $template = Vtiger_PDF_Model::getInstanceById($templateId, $moduleName); $template->setMainRecordId($recordId); $pdf->setLanguage($template->get('language')); $pdf->setFileName($template->get('filename')); $origLanguage = vglobal('default_language'); vglobal('default_language', $template->get('language')); $pdf->parseParams($template->getParameters()); $html = ''; $pdf->setHeader('Header', $template->getHeader()); $pdf->setFooter('Footer', $template->getFooter()); $html = $template->getBody(); $pdf->loadHTML($html); vglobal('default_language', $origLanguage); $pdf->output($filePath, $saveFlag); }
/** * Construct the HttpResponse from a file, you can create the * dumps from actual traffic using "curl -i http://www.example.org > dump.txt" */ public static function fromFile($file) { $data = @file_get_contents($file); if (FALSE === $data) { throw new HttpResponseException("unable to read file"); } $response = new self(); // separate the headers from the content list($headerLines, $contentData) = explode("\r\n\r\n", $data); $headerLinesArray = explode("\r\n", $headerLines); // First header is HTTP response code, e.g.: HTTP/1.1 200 OK $responseCode = substr($headerLinesArray[0], 9, 3); $response->setStatusCode($responseCode); unset($headerLinesArray[0]); foreach ($headerLinesArray as $headerLine) { list($k, $v) = explode(":", $headerLine); $response->setHeader(trim($k), trim($v)); } $response->setContent($contentData); return $response; }
/** * Creates a new CSV object from a file. * * @param string $file the filename * @param bool $header whether or not to get the header row * * @return CsvParser a new instance */ public static function fromFile($file, $header = false) { ini_set('auto_detect_line_endings', true); if (true === extension_loaded('mbstring')) { mb_internal_encoding("UTF-8"); } $instance = new self(); if (($handle = fopen($file, "r")) !== false) { $hasHeader = $header; while (($data = fgetcsv($handle, self::LINE_BUFFER_SIZE, self::DELIMITER)) !== false) { // Skip the first row if (true === $hasHeader) { $hasHeader = false; $instance->setHeader($data); continue; } $instance->addRow($data); } fclose($handle); } return $instance; }