merge master
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('BASEPATH')) {
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
}
|
||||||
|
|
||||||
|
class CT_Amp_Loader extends CI_Controller {
|
||||||
|
|
||||||
|
function __construct() {
|
||||||
|
parent::__construct();
|
||||||
|
$this->load->model('information_model');
|
||||||
|
$this->load->model('InfoMetas_model');
|
||||||
|
//$this->load->library('Tags_analysis');
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://localhost:8002/guide-use.php/amp_loader/test/?info_url=/yangtzecruise/
|
||||||
|
/**
|
||||||
|
* 加载已经发布的页面
|
||||||
|
*/
|
||||||
|
public function load() {
|
||||||
|
$info_url = $this->input->get_post('info_url');
|
||||||
|
$webcode = $this->input->get_post('webcode');
|
||||||
|
if(!isset($webcode) ) {
|
||||||
|
$webcode="ct";
|
||||||
|
}
|
||||||
|
// $info_url="/yangtzecruise/";
|
||||||
|
// $webcode="cht";
|
||||||
|
|
||||||
|
$information_detail = $this->information_model->ct_get_by_url($info_url, $webcode);
|
||||||
|
$ic_id = $information_detail->ic_id;
|
||||||
|
$meta_amp_status = $this->InfoMetas_model->get($ic_id, 'AMP_STATUS');
|
||||||
|
if ($meta_amp_status) {
|
||||||
|
$meta_amp_html = $this->InfoMetas_model->get($ic_id, 'AMP');
|
||||||
|
//$include_price_html = $this->tags_analysis->replace_price_tag($meta_amp_html);
|
||||||
|
echo $meta_amp_html;
|
||||||
|
} else {
|
||||||
|
header('HTTP/1.1 404 Not Found');
|
||||||
|
header("status: 404 Not Found");
|
||||||
|
show_404();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://localhost:8002/guide-use.php/amp_loader/test/?info_url=/yangtzecruise/
|
||||||
|
/**
|
||||||
|
* 测试保存的页面
|
||||||
|
*/
|
||||||
|
public function test() {
|
||||||
|
// $info_url = $this->input->get_post('info_url');
|
||||||
|
$info_url = "/yangtzecruise/";
|
||||||
|
$information_detail = $this->information_model->ct_get_by_url($info_url, "cht");
|
||||||
|
if (empty($information_detail)) {
|
||||||
|
echo $info_url.'没有信息类型';
|
||||||
|
}
|
||||||
|
$ic_id = $information_detail->ic_id;
|
||||||
|
$meta_amp_html = $this->InfoMetas_model->get($ic_id, 'AMP');
|
||||||
|
//$include_price_html = $this->tags_analysis->replace_price_tag($meta_amp_html);
|
||||||
|
echo $meta_amp_html;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ??MY_Composer
|
||||||
|
*
|
||||||
|
* @author lmr
|
||||||
|
*/
|
||||||
|
class MY_Composer
|
||||||
|
{
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
include("C:/VHD/icht-ga/vendor/autoload.php");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,555 @@
|
|||||||
|
<?php
|
||||||
|
//============================================================+
|
||||||
|
// File name : class.wordphp.php
|
||||||
|
// Begin : 2014-03-09
|
||||||
|
// Last Update : 2018-06-22
|
||||||
|
// Version : 1.1
|
||||||
|
// License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2014 Ricardo Pinto
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 2.1 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Description : PHP class to read DOCX file into HTML format
|
||||||
|
//
|
||||||
|
// Author: Ricardo Pinto
|
||||||
|
//
|
||||||
|
// (c) Copyright:
|
||||||
|
// Ricardo Pinto
|
||||||
|
//============================================================+
|
||||||
|
|
||||||
|
class WordPHP
|
||||||
|
{
|
||||||
|
private $debug = false;
|
||||||
|
private $file;
|
||||||
|
private $rels_xml;
|
||||||
|
private $doc_xml;
|
||||||
|
private $doc_media = array();
|
||||||
|
private $last = 'none';
|
||||||
|
private $encoding = 'UTF-8';
|
||||||
|
private $tmpDir = 'tmp';
|
||||||
|
//图片目录和前缀
|
||||||
|
public $img_dir = '';
|
||||||
|
public $img_prex = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CONSTRUCTOR
|
||||||
|
*
|
||||||
|
* @param Boolean $debug Debug mode or not
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct($debug_=null, $encoding=null)
|
||||||
|
{
|
||||||
|
if($debug_ != null) {
|
||||||
|
$this->debug = $debug_;
|
||||||
|
}
|
||||||
|
if ($encoding != null) {
|
||||||
|
$this->encoding = $encoding;
|
||||||
|
}
|
||||||
|
$this->tmpDir = dirname(__FILE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the tmp directory where images will be stored
|
||||||
|
*
|
||||||
|
* @param string $tmp The location
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function setTmpDir($tmp)
|
||||||
|
{
|
||||||
|
$this->tmpDir = $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* READS The Document and Relationships into separated XML files
|
||||||
|
*
|
||||||
|
* @param var $object The class variable to set as DOMDocument
|
||||||
|
* @param var $xml The xml file
|
||||||
|
* @param string $encoding The encoding to be used
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function setXmlParts(&$object, $xml, $encoding)
|
||||||
|
{
|
||||||
|
$object = new DOMDocument();
|
||||||
|
$object->encoding = $encoding;
|
||||||
|
$object->preserveWhiteSpace = false;
|
||||||
|
$object->formatOutput = true;
|
||||||
|
$object->loadXML($xml);
|
||||||
|
$object->saveXML();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* READS The Document and Relationships into separated XML files
|
||||||
|
*
|
||||||
|
* @param String $filename The filename
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function readZipPart($filename)
|
||||||
|
{
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
$_xml = 'word/document.xml';
|
||||||
|
$_xml_rels = 'word/_rels/document.xml.rels';
|
||||||
|
|
||||||
|
if (true === $zip->open($filename)) {
|
||||||
|
if (($index = $zip->locateName($_xml)) !== false) {
|
||||||
|
$xml = $zip->getFromIndex($index);
|
||||||
|
}
|
||||||
|
//Get the relationships
|
||||||
|
if (($index = $zip->locateName($_xml_rels)) !== false) {
|
||||||
|
$xml_rels = $zip->getFromIndex($index);
|
||||||
|
}
|
||||||
|
// load all images if they exist
|
||||||
|
for ($i=0; $i<$zip->numFiles;$i++) {
|
||||||
|
$zip_element = $zip->statIndex($i);
|
||||||
|
if(preg_match("([^\s]+(\.(?i)(jpg|jpeg|png|gif|bmp))$)",$zip_element['name'])) {
|
||||||
|
$this->doc_media[$zip_element['name']] = $zip_element['name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$zip->close();
|
||||||
|
} else die('non zip file');
|
||||||
|
|
||||||
|
$enc = mb_detect_encoding($xml);
|
||||||
|
$this->setXmlParts($this->doc_xml, $xml, $enc);
|
||||||
|
$this->setXmlParts($this->rels_xml, $xml_rels, $enc);
|
||||||
|
|
||||||
|
if($this->debug) {
|
||||||
|
echo "<textarea style='width:100%; height: 200px;'>";
|
||||||
|
echo $this->doc_xml->saveXML();
|
||||||
|
echo "</textarea>";
|
||||||
|
echo "<textarea style='width:100%; height: 200px;'>";
|
||||||
|
echo $this->rels_xml->saveXML();
|
||||||
|
echo "</textarea>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CHECKS THE FONT FORMATTING OF A GIVEN ELEMENT
|
||||||
|
* Currently checks and formats: bold, italic, underline, background color and font family
|
||||||
|
*
|
||||||
|
* @param XML $xml The XML node
|
||||||
|
* @return String HTML formatted code
|
||||||
|
*/
|
||||||
|
private function checkFormating(&$xml)
|
||||||
|
{
|
||||||
|
$node = trim($xml->readOuterXML());
|
||||||
|
$t = '';
|
||||||
|
// add <br> tags
|
||||||
|
if (mb_strstr($node,'<w:br ')) $t = '<br>';
|
||||||
|
// look for formatting tags
|
||||||
|
$f = "<span style='";
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($node);
|
||||||
|
$img = null;
|
||||||
|
|
||||||
|
while ($reader->read()) {
|
||||||
|
if($reader->name == "w:b") {
|
||||||
|
$f .= "font-weight: bold,";
|
||||||
|
}
|
||||||
|
if($reader->name == "w:i") {
|
||||||
|
$f .= "text-decoration: underline,";
|
||||||
|
}
|
||||||
|
if($reader->name == "w:color") {
|
||||||
|
$f .="color: #".$reader->getAttribute("w:val").",";
|
||||||
|
}
|
||||||
|
if($reader->name == "w:rFont") {
|
||||||
|
$f .="font-family: #".$reader->getAttribute("w:ascii").",";
|
||||||
|
}
|
||||||
|
if($reader->name == "w:shd" && $reader->getAttribute("w:val") != "clear" && $reader->getAttribute("w:fill") != "000000") {
|
||||||
|
$f .="background-color: #".$reader->getAttribute("w:fill").",";
|
||||||
|
}
|
||||||
|
$temp_rx = $reader->readInnerXml();
|
||||||
|
if($reader->name == 'w:drawing' && !empty($temp_rx)) {
|
||||||
|
$r = $this->checkImageFormating($reader);
|
||||||
|
$img = $r !== null ? "<image src='".$r."' />" : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$f = rtrim($f, ',');
|
||||||
|
$f .= "'>";
|
||||||
|
$t .= ($img !== null ? $img : htmlentities($xml->expand()->textContent));
|
||||||
|
|
||||||
|
return $f.$t."</span>";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CHECKS THE ELEMENT FOR UL ELEMENTS
|
||||||
|
* Currently under development
|
||||||
|
*
|
||||||
|
* @param XML $xml The XML node
|
||||||
|
* @return String HTML formatted code
|
||||||
|
*/
|
||||||
|
private function getListFormating(&$xml)
|
||||||
|
{
|
||||||
|
$node = trim($xml->readOuterXML());
|
||||||
|
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($node);
|
||||||
|
$ret="";
|
||||||
|
$close = "";
|
||||||
|
while ($reader->read()){
|
||||||
|
if($reader->name == "w:numPr" && $reader->nodeType == XMLReader::ELEMENT ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
if($reader->name == "w:numId" && $reader->hasAttributes) {
|
||||||
|
switch($reader->getAttribute("w:val")) {
|
||||||
|
case 1:
|
||||||
|
$ret['open'] = "<ol><li>";
|
||||||
|
$ret['close'] = "</li></ol>";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$ret['open'] = "<ul><li>";
|
||||||
|
$ret['close'] = "</li></ul>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CHECKS IF THERE IS AN IMAGE PRESENT
|
||||||
|
* Currently under development
|
||||||
|
*
|
||||||
|
* @param XML $xml The XML node
|
||||||
|
* @return String The location of the image
|
||||||
|
*/
|
||||||
|
private function checkImageFormating(&$xml)
|
||||||
|
{
|
||||||
|
$content = trim($xml->readInnerXml());
|
||||||
|
|
||||||
|
if (!empty($content)) {
|
||||||
|
|
||||||
|
$relId;
|
||||||
|
$notfound = true;
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($content);
|
||||||
|
|
||||||
|
while ($reader->read() && $notfound) {
|
||||||
|
if ($reader->name == "a:blip") {
|
||||||
|
$relId = $reader->getAttribute("r:embed");
|
||||||
|
$notfound = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// image id found, get the image location
|
||||||
|
if (!$notfound && $relId) {
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($this->rels_xml->saveXML());
|
||||||
|
|
||||||
|
while ($reader->read()) {
|
||||||
|
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name=='Relationship') {
|
||||||
|
if($reader->getAttribute("Id") == $relId) {
|
||||||
|
$link = "word/".$reader->getAttribute('Target');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
$im = null;
|
||||||
|
if (true === $zip->open($this->file)) {
|
||||||
|
$im = $this->createImage($zip->getFromName($link), $relId, $link);
|
||||||
|
}
|
||||||
|
$zip->close();
|
||||||
|
return $im;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an image in the filesystem
|
||||||
|
*
|
||||||
|
* @param objetc $image The image object
|
||||||
|
* @param string $relId The image relationship Id
|
||||||
|
* @param string $name The image name
|
||||||
|
* @return Array With HTML open and closing tag definition
|
||||||
|
*/
|
||||||
|
private function createImage($image, $relId, $name)
|
||||||
|
{
|
||||||
|
$arr = explode('.', $name);
|
||||||
|
$l = count($arr);
|
||||||
|
$ext = mb_strtolower($arr[$l-1]);
|
||||||
|
|
||||||
|
$im = imagecreatefromstring($image);
|
||||||
|
if (empty($this->img_dir)) {
|
||||||
|
$fname = $this->tmpDir.'/tmp/'.$relId.'.'.$ext;
|
||||||
|
} else {
|
||||||
|
$ext = str_ireplace('jpeg', 'jpg', $ext);
|
||||||
|
$fname = $this->img_dir.'/'.$this->img_prex.'_'.mb_strtolower($relId).'.'.$ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
switch ($ext) {
|
||||||
|
case 'png':
|
||||||
|
imagepng($im, $fname);
|
||||||
|
break;
|
||||||
|
case 'bmp':
|
||||||
|
imagebmp($im, $fname);
|
||||||
|
break;
|
||||||
|
case 'gif':
|
||||||
|
imagegif($im, $fname);
|
||||||
|
break;
|
||||||
|
case 'jpeg':
|
||||||
|
case 'jpg':
|
||||||
|
imagejpeg($im, $fname);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CHECKS IF ELEMENT IS AN HYPERLINK
|
||||||
|
*
|
||||||
|
* @param XML $xml The XML node
|
||||||
|
* @return Array With HTML open and closing tag definition
|
||||||
|
*/
|
||||||
|
private function getHyperlink(&$xml)
|
||||||
|
{
|
||||||
|
$ret = array('open'=>'<ul>','close'=>'</ul>');
|
||||||
|
$link ='';
|
||||||
|
if($xml->hasAttributes) {
|
||||||
|
$attribute = "";
|
||||||
|
while($xml->moveToNextAttribute()) {
|
||||||
|
if($xml->name == "r:id")
|
||||||
|
$attribute = $xml->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($attribute != "") {
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($this->rels_xml->saveXML());
|
||||||
|
|
||||||
|
while ($reader->read()) {
|
||||||
|
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name=='Relationship') {
|
||||||
|
if($reader->getAttribute("Id") == $attribute) {
|
||||||
|
$link = $reader->getAttribute('Target');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($link != "") {
|
||||||
|
$ret['open'] = "<a href='".$link."' target='_blank'>";
|
||||||
|
$ret['close'] = "</a>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROCESS TABLE CONTENT
|
||||||
|
*
|
||||||
|
* @param XML $xml The XML node
|
||||||
|
* @return THe HTML code of the table
|
||||||
|
*/
|
||||||
|
private function checkTableFormating(&$xml)
|
||||||
|
{
|
||||||
|
$table = "<table><tbody>";
|
||||||
|
|
||||||
|
while ($xml->read()) {
|
||||||
|
if ($xml->nodeType == XMLREADER::ELEMENT && $xml->name === 'w:tr') { //table row
|
||||||
|
$tc = $ts = "";
|
||||||
|
|
||||||
|
|
||||||
|
$tr = new XMLReader;
|
||||||
|
$tr->xml(trim($xml->readOuterXML()));
|
||||||
|
|
||||||
|
while ($tr->read()) {
|
||||||
|
if ($tr->nodeType == XMLREADER::ELEMENT && $tr->name === 'w:tcPr') { //table element properties
|
||||||
|
$ts = $this->processTableStyle(trim($tr->readOuterXML()));
|
||||||
|
}
|
||||||
|
if ($tr->nodeType == XMLREADER::ELEMENT && $tr->name === 'w:tc') { //table column
|
||||||
|
$tc .= $this->processTableRow(trim($tr->readOuterXML()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$table .= '<tr style="'.$ts.'">'.$tc.'</tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$table .= "</tbody></table>";
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROCESS THE TABLE ROW STYLE
|
||||||
|
*
|
||||||
|
* @param string $content The XML node content
|
||||||
|
* @return THe HTML code of the table
|
||||||
|
*/
|
||||||
|
private function processTableStyle($content)
|
||||||
|
{
|
||||||
|
/*border-collapse:collapse;
|
||||||
|
border-bottom:4px dashed #0000FF;
|
||||||
|
border-top:6px double #FF0000;
|
||||||
|
border-left:5px solid #00FF00;
|
||||||
|
border-right:5px solid #666666;*/
|
||||||
|
|
||||||
|
$tc = new XMLReader;
|
||||||
|
$tc->xml($content);
|
||||||
|
$style = "border-collapse:collapse;";
|
||||||
|
|
||||||
|
while ($tc->read()) {
|
||||||
|
if ($tc->name === "w:tcBorders") {
|
||||||
|
$tc2 = new SimpleXMLElement($tc->readOuterXML());
|
||||||
|
|
||||||
|
foreach ($tc2->children('w',true) as $ch) {
|
||||||
|
if (in_array($ch->getName(), array('left','top','botom','right'))) {
|
||||||
|
$line = $this->convertLine($ch['val']);
|
||||||
|
$style .= " border-".$ch->getName().":".$ch['sz']."px $line #".$ch['color'].";";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tc->next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $style;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function convertLine($in)
|
||||||
|
{
|
||||||
|
if (in_array($in, array('dotted')))
|
||||||
|
return "dashed";
|
||||||
|
|
||||||
|
if (in_array($in, array('dotDash','dotdotDash','dotted','dashDotStroked','dashed','dashSmallGap')))
|
||||||
|
return "dashed";
|
||||||
|
|
||||||
|
if (in_array($in, array('double','triple','threeDEmboss','threeDEngrave','thick')))
|
||||||
|
return "double";
|
||||||
|
|
||||||
|
if (in_array($in, array('nil','none')))
|
||||||
|
return "none";
|
||||||
|
|
||||||
|
return "solid";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROCESS THE TABLE ROW
|
||||||
|
*
|
||||||
|
* @param string $content The XML node content
|
||||||
|
* @return THe HTML code of the table
|
||||||
|
*/
|
||||||
|
private function processTableRow($content)
|
||||||
|
{
|
||||||
|
$tc = new XMLReader;
|
||||||
|
$tc->xml($content);
|
||||||
|
$ct = "";
|
||||||
|
|
||||||
|
while ($tc->read()) {
|
||||||
|
if ($tc->name === "w:r") {
|
||||||
|
$ct .= "<td>".$this->checkFormating($tc)."</td>";
|
||||||
|
$tc->next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ct;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* READS THE GIVEN DOCX FILE INTO HTML FORMAT
|
||||||
|
*
|
||||||
|
* @param String $filename The DOCX file name
|
||||||
|
* @return String With HTML code
|
||||||
|
*/
|
||||||
|
public function readDocument($filename)
|
||||||
|
{
|
||||||
|
$this->file = $filename;
|
||||||
|
$this->readZipPart($filename);
|
||||||
|
$reader = new XMLReader();
|
||||||
|
$reader->XML($this->doc_xml->saveXML());
|
||||||
|
|
||||||
|
$text = ''; $list_format="";
|
||||||
|
|
||||||
|
$formatting['header'] = 0;
|
||||||
|
// loop through docx xml dom
|
||||||
|
while ($reader->read()) {
|
||||||
|
// look for new paragraphs
|
||||||
|
$paragraph = new XMLReader;
|
||||||
|
$p = $reader->readOuterXML();
|
||||||
|
//return $p;
|
||||||
|
|
||||||
|
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'w:p') {
|
||||||
|
// set up new instance of XMLReader for parsing paragraph independantly
|
||||||
|
$paragraph->xml($p);
|
||||||
|
|
||||||
|
preg_match('/<w:pStyle w:val="(Heading.*?[1-6])"/',$p,$matches);
|
||||||
|
if(isset($matches[1])) {
|
||||||
|
switch($matches[1]){
|
||||||
|
case 'Heading1': $formatting['header'] = 1; break;
|
||||||
|
case 'Heading2': $formatting['header'] = 2; break;
|
||||||
|
case 'Heading3': $formatting['header'] = 3; break;
|
||||||
|
case 'Heading4': $formatting['header'] = 4; break;
|
||||||
|
case 'Heading5': $formatting['header'] = 5; break;
|
||||||
|
case 'Heading6': $formatting['header'] = 6; break;
|
||||||
|
default: $formatting['header'] = 0; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// open h-tag or paragraph
|
||||||
|
$text .= ($formatting['header'] > 0) ? '<h'.$formatting['header'].'>' : '<p>';
|
||||||
|
|
||||||
|
// loop through paragraph dom
|
||||||
|
while ($paragraph->read()) {
|
||||||
|
// look for elements
|
||||||
|
if ($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:r') {
|
||||||
|
if($list_format == "")
|
||||||
|
$text .= $this->checkFormating($paragraph);
|
||||||
|
else {
|
||||||
|
$text .= $list_format['open'];
|
||||||
|
$text .= $this->checkFormating($paragraph);
|
||||||
|
$text .= $list_format['close'];
|
||||||
|
}
|
||||||
|
$list_format ="";
|
||||||
|
$paragraph->next();
|
||||||
|
}
|
||||||
|
else if($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:pPr') { //lists
|
||||||
|
$list_format = $this->getListFormating($paragraph);
|
||||||
|
$paragraph->next();
|
||||||
|
}
|
||||||
|
else if($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:drawing') { //images
|
||||||
|
$text .= $this->checkImageFormating($paragraph);
|
||||||
|
$paragraph->next();
|
||||||
|
}
|
||||||
|
else if ($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:hyperlink') {
|
||||||
|
$hyperlink = $this->getHyperlink($paragraph);
|
||||||
|
$text .= $hyperlink['open'];
|
||||||
|
$text .= $this->checkFormating($paragraph);
|
||||||
|
$text .= $hyperlink['close'];
|
||||||
|
$paragraph->next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$text .= ($formatting['header'] > 0) ? '</h'.$formatting['header'].'>' : '</p>';
|
||||||
|
}
|
||||||
|
else if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'w:tbl') { //tables
|
||||||
|
$paragraph->xml($p);
|
||||||
|
$text .= $this->checkTableFormating($paragraph);
|
||||||
|
$reader->next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$reader->close();
|
||||||
|
if($this->debug) {
|
||||||
|
echo "<div style='width:100%; height: 200px;'>";
|
||||||
|
echo mb_convert_encoding($text, $this->encoding);
|
||||||
|
echo "</div>";
|
||||||
|
}
|
||||||
|
return mb_convert_encoding($text, $this->encoding);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,301 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
//数据接口
|
||||||
|
define("DATAUSER","guilintravel");
|
||||||
|
define("DATAKEY","0dbf1652763c2289533e27437a971854");
|
||||||
|
|
||||||
|
//订单接口
|
||||||
|
define("ORDERUSER","guilintravel");
|
||||||
|
define("ORDERKEY","07f811fe29f04008a8fcc86e81c012b9");
|
||||||
|
|
||||||
|
//数据返回格式地址
|
||||||
|
define("JSONRETURN","http://m.ctrip.com/restapi/soa2/12976/json/");
|
||||||
|
define("XMLRETURN","http://m.ctrip.com/restapi/soa2/12976/xml/");
|
||||||
|
|
||||||
|
|
||||||
|
class ctrip_train extends CI_Controller{
|
||||||
|
|
||||||
|
public function __construct(){
|
||||||
|
parent::__construct();
|
||||||
|
header('Access-Control-Allow-Origin:*');
|
||||||
|
header('Access-Control-Allow-Methods:POST, GET');
|
||||||
|
header('Access-Control-Max-Age:0');
|
||||||
|
header('Access-Control-Allow-Headers:x-requested-with, Content-Type');
|
||||||
|
header('Access-Control-Allow-Credentials:true');
|
||||||
|
$this->load->helper('ctrip');
|
||||||
|
$this->load->model("ctrip_model");
|
||||||
|
date_default_timezone_set('PRC');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index(){
|
||||||
|
exit('hello ctrip');
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询车次余票
|
||||||
|
public function search(){
|
||||||
|
//接收参数
|
||||||
|
$date = $this->input->get_post('date');
|
||||||
|
$from = $this->input->get_post('from');
|
||||||
|
$to = $this->input->get_post('to');
|
||||||
|
$TrainNo = $this->input->get_post('TrainNo');
|
||||||
|
|
||||||
|
if(!$date || !$from || !$to){
|
||||||
|
header("HTTP/1.1 404 Not Found");
|
||||||
|
exit('{"httpstatus":404,"data":{"seven":false,"cache":false,"result":[],"map":{}}}');
|
||||||
|
}else{
|
||||||
|
$isCache = false;
|
||||||
|
$iseven = false;
|
||||||
|
$cachedata = false;
|
||||||
|
$now_time = time();
|
||||||
|
$differ = (strtotime($date) - $now_time) / 86400;
|
||||||
|
if($differ > 29){
|
||||||
|
$date = date('Y-m-d',strtotime('+7day'));
|
||||||
|
$iseven = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//转换三字码为中文
|
||||||
|
$FromName = $this->ctrip_model->ReplaceCodeToName($from);
|
||||||
|
$ToName = $this->ctrip_model->ReplaceCodeToName($to);
|
||||||
|
|
||||||
|
|
||||||
|
if(!$FromName || !$ToName){
|
||||||
|
header("HTTP/1.1 404 Not Found");
|
||||||
|
exit('{"httpstatus":404,"data":{"seven":false,"cache":false,"result":[],"map":{}}}');
|
||||||
|
}else{
|
||||||
|
$from = $FromName->station_name;
|
||||||
|
$to = $ToName->station_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//生成请求链接
|
||||||
|
$TimeStamp = time();
|
||||||
|
$Sign = md5($TimeStamp.DATAKEY);
|
||||||
|
|
||||||
|
$url = JSONRETURN.'SearchS2S/?From='.urlencode($from).'&To='.urlencode($to).'&DepartDate='.$date.'&User='.DATAUSER.'&TimeStamp='.$TimeStamp.'&Sign='.$Sign;
|
||||||
|
|
||||||
|
$api_start_time = microtime(true);
|
||||||
|
|
||||||
|
//获取数据
|
||||||
|
$ResponseJson = post_ctrip($url,'','GET');
|
||||||
|
|
||||||
|
$api_end_time = microtime(true);
|
||||||
|
|
||||||
|
$ResponseData = json_decode($ResponseJson);
|
||||||
|
$api_responsive_time = $api_end_time - $api_start_time;
|
||||||
|
//print_r($ResponseData);die();
|
||||||
|
|
||||||
|
if(empty($ResponseData->Trains)){
|
||||||
|
log_message('error','ctrip_trian|status:trains is empty |相应时间:'.$api_responsive_time);
|
||||||
|
}else{
|
||||||
|
log_message('error','ctrip_trian|status:'.$ResponseData->ResponseStatus->Ack.'|相应时间:'.$api_responsive_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
//定义返回的json
|
||||||
|
$ReturnData = new stdClass();
|
||||||
|
$ReturnData->httpstatus = 200;
|
||||||
|
$ReturnData->data = new stdClass();
|
||||||
|
$ReturnData->data->seven = $iseven;
|
||||||
|
$ReturnData->data->cache = $isCache;
|
||||||
|
$ReturnData->data->result = array();
|
||||||
|
$ReturnData->data->map = new stdClass();
|
||||||
|
$obj = array();
|
||||||
|
$i = 0;
|
||||||
|
$PriceStr = '';
|
||||||
|
//数据解析
|
||||||
|
if(!empty($ResponseData->Trains)){
|
||||||
|
foreach ($ResponseData->Trains as $TrainInfo){
|
||||||
|
$obj[$TrainInfo->FromTelcode] = $TrainInfo->FromStationName;
|
||||||
|
$obj[$TrainInfo->ToTelcode] = $TrainInfo->ToStationName;
|
||||||
|
$SeaType = '';
|
||||||
|
$gjrwNum = $rwNum = $rzNum = $tdzNum = $wzNum = $yzNum = $edzNum = $ydzNum = $swzNum = $ywNum = $dwNum = null;
|
||||||
|
foreach($TrainInfo->Seats as $Seats){
|
||||||
|
if($Seats->SeatName == '高级软卧下'){
|
||||||
|
$gjrwXiaPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"6":"'.$gjrwXiaPrice.'","A6":"¥'.$Seats->Price.'",';
|
||||||
|
$gjrwNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '软卧下'){
|
||||||
|
$rwPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"4":"'.$rwPrice.'","A4":"¥'.$Seats->Price.'",';
|
||||||
|
$rwNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '软座'){
|
||||||
|
$rzPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"2":"'.$rzPrice.'","A2":"¥'.$Seats->Price.'",';
|
||||||
|
$rzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '特等座'){
|
||||||
|
$SeaType .= '"P":"¥'.$Seats->Price.'",';
|
||||||
|
$tdzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '无座'){
|
||||||
|
$SeaType .= '"WZ":"¥'.$Seats->Price.'",';
|
||||||
|
$wzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '硬座'){
|
||||||
|
$yzPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"1":"'.$yzPrice.'","A1":"¥'.$Seats->Price.'",';
|
||||||
|
$yzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '二等座'){
|
||||||
|
$SeaType .= '"O":"¥'.$Seats->Price.'",';
|
||||||
|
$edzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '一等座'){
|
||||||
|
$SeaType .= '"M":"¥'.$Seats->Price.'",';
|
||||||
|
$ydzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '商务座'){
|
||||||
|
$swzPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"9":"'.$swzPrice.'","A9":"¥'.$Seats->Price.'",';
|
||||||
|
$swzNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '硬卧下'){
|
||||||
|
$ywPrice = $Seats->Price * 10;
|
||||||
|
$SeaType .= '"3":"'.$ywPrice.'","A3":"¥'.$Seats->Price.'",';
|
||||||
|
$ywNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Seats->SeatName == '动卧下'){
|
||||||
|
$SeaType .= '"F":"¥'.$Seats->Price.'",';
|
||||||
|
$dwNum = $Seats->TicketLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
$PriceStr = $SeaType.'"train_no":'.'"'.$TrainInfo->TrainNo.'"';
|
||||||
|
}
|
||||||
|
|
||||||
|
//对返回的数据进行容错处理
|
||||||
|
$gjrwNum = isset($gjrwNum) ? ticket_exchange($gjrwNum,$iseven) : '';
|
||||||
|
$rwNum = isset($rwNum) ? ticket_exchange($rwNum,$iseven) : '';
|
||||||
|
$rzNum = isset($rzNum) ? ticket_exchange($rzNum,$iseven) : '';
|
||||||
|
$tdzNum = isset($tdzNum) ? ticket_exchange($tdzNum,$iseven) : '';
|
||||||
|
$wzNum = isset($wzNum) ? ticket_exchange($wzNum,$iseven) : '';
|
||||||
|
$ywNum = isset($ywNum) ? ticket_exchange($ywNum,$iseven) : '';
|
||||||
|
$yzNum = isset($yzNum) ? ticket_exchange($yzNum,$iseven) : '';
|
||||||
|
$edzNum = isset($edzNum) ? ticket_exchange($edzNum,$iseven) : '';
|
||||||
|
$ydzNum = isset($ydzNum) ? ticket_exchange($ydzNum,$iseven) : '';
|
||||||
|
$swzNum = isset($swzNum) ? ticket_exchange($swzNum,$iseven) : '';
|
||||||
|
$dwNum = isset($dwNum) ? ticket_exchange($dwNum,$iseven) : '';
|
||||||
|
$runMin = $TrainInfo->DurationMinutes % 60;
|
||||||
|
$runHour = ($TrainInfo->DurationMinutes - $runMin) / 60;
|
||||||
|
|
||||||
|
$ReturnData->data->result[$i] = '|预定|'.$TrainInfo->Train12306No.'|'.$TrainInfo->TrainNo.'|'.$TrainInfo->FromStationName.'|'.$TrainInfo->ToStationName.'|'.$TrainInfo->FromTelcode.'|'.$TrainInfo->ToTelcode.'|'.$TrainInfo->StartTime.'|'.$TrainInfo->ArriveTime.'|'.$runHour.':'.$runMin.'|'.$TrainInfo->CanWebBuy.'||'.date('Ymd',strtotime($date)).'||||||||'.$gjrwNum.'||'.$rwNum.'|'.$rzNum.'|'.$tdzNum.'|'.$wzNum.'||'.$ywNum.'|'.$yzNum.'|'.$edzNum.'|'.$ydzNum.'|'.$swzNum.'|'.$dwNum.'||';
|
||||||
|
|
||||||
|
$data = '{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{'.$PriceStr.'},"messages":[],"validateMessages":{}}';
|
||||||
|
$ReturnData->data->price[$i] = $data;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//print_r($ResponseData);
|
||||||
|
$ReturnData->data->map = (object)$obj;
|
||||||
|
print_r(json_encode($ReturnData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询经停站
|
||||||
|
public function getstopstation(){
|
||||||
|
//接收参数
|
||||||
|
$DepartDate = $this->input->get_post('DepartDate');
|
||||||
|
$TrainNo = $this->input->get_post('TrainNo');
|
||||||
|
|
||||||
|
if(!$DepartDate || !$TrainNo){
|
||||||
|
exit('传参错误!');
|
||||||
|
}else{
|
||||||
|
//生成请求链接
|
||||||
|
$TimeStamp = time();
|
||||||
|
$Sign = md5($TimeStamp.DATAKEY);
|
||||||
|
|
||||||
|
$url = JSONRETURN.'GetStopStations/?DepartDate='.$DepartDate.'&TrainNo='.$TrainNo.'&User='.DATAUSER.'&TimeStamp='.$TimeStamp.'&Sign='.$Sign;
|
||||||
|
|
||||||
|
$ResponseJson = post_ctrip($url,'','GET');
|
||||||
|
$ResponseData = json_decode($ResponseJson);
|
||||||
|
|
||||||
|
//构造12306格式
|
||||||
|
$ReturnData = array();
|
||||||
|
$ReturnData['validateMessagesShowId'] = '_validatorMessage';
|
||||||
|
$ReturnData['status'] = true;
|
||||||
|
$ReturnData['httpstatus'] = 200;
|
||||||
|
$ReturnData['data'] = array();
|
||||||
|
$i = 0;
|
||||||
|
$Last_num = count($ResponseData->StopStations);
|
||||||
|
foreach($ResponseData->StopStations as $items){
|
||||||
|
if($i == 0){
|
||||||
|
$ReturnData['data']['data'][$i]['start_station_name'] = $items->StationName;
|
||||||
|
$ReturnData['data']['data'][$i]['station_train_code'] = $TrainNo;
|
||||||
|
$ReturnData['data']['data'][$i]['end_station_name'] = $ResponseData->StopStations[$Last_num-1]->StationName;
|
||||||
|
}
|
||||||
|
$ReturnData['data']['data'][$i]['arrive_time'] = $items->ArrivalTime;
|
||||||
|
$ReturnData['data']['data'][$i]['station_name'] = $items->StationName;
|
||||||
|
$ReturnData['data']['data'][$i]['start_time'] = $items->StartTime;
|
||||||
|
$ReturnData['data']['data'][$i]['stopover_time'] = $items->StopMinutes;
|
||||||
|
$ReturnData['data']['data'][$i]['station_no'] = $items->StationNo;
|
||||||
|
$ReturnData['data']['data'][$i]['isEnabled'] = true;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$ReturnData['messages'] = array();
|
||||||
|
$ReturnData['validateMessages'] = new stdClass();
|
||||||
|
print_r(json_encode($ReturnData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取所有站点信息
|
||||||
|
public function getallstation(){
|
||||||
|
//生成请求参数
|
||||||
|
$TimeStamp = time();
|
||||||
|
$Sign = md5($TimeStamp.DATAKEY);
|
||||||
|
|
||||||
|
$url = JSONRETURN.'/GetAllStations/?&User='.DATAUSER.'&TimeStamp='.$TimeStamp.'&Sign='.$Sign;
|
||||||
|
|
||||||
|
$ResponseJson = post_ctrip($url,'','GET');
|
||||||
|
|
||||||
|
$ResponseData = json_decode($ResponseJson);
|
||||||
|
|
||||||
|
$data = array();
|
||||||
|
foreach ($ResponseData->Stations as $items){
|
||||||
|
$data['StationName'] = isset($items->StationName) ? checkNull($items->StationName) : '';
|
||||||
|
$data['PinYin'] = isset($items->PinYin) ? checkNull($items->PinYin) : '';
|
||||||
|
$data['Telecode'] = isset($items->Telecode) ? checkNull($items->Telecode) : '';
|
||||||
|
$data['Address'] = isset($items->Address) ? checkNull($items->Address) : '';
|
||||||
|
$data['Geography'] = isset($items->Geography) ? checkNull($items->Geography) : '';
|
||||||
|
$this->ctrip_model->AddOrUpdate($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询中转方案
|
||||||
|
public function gettraintrainsfer(){
|
||||||
|
$FromCode = $this->input->get_post('FromCode');
|
||||||
|
$ToCode = $this->input->get_post('ToCode');
|
||||||
|
$DepartDate = $this->input->get_post('DepartDate');
|
||||||
|
|
||||||
|
if(!$FromCode || !$ToCode || !$DepartDate){
|
||||||
|
exit('传参错误!');
|
||||||
|
}else{
|
||||||
|
$TimeStamp = time();
|
||||||
|
$Sign = md5($TimeStamp.DATAKEY);
|
||||||
|
|
||||||
|
$FromName = $this->ctrip_model->ReplaceCodeToName($FromCode);
|
||||||
|
$ToName = $this->ctrip_model->ReplaceCodeToName($ToCode);
|
||||||
|
|
||||||
|
$From = $FromName->station_name;
|
||||||
|
$To = $ToName->station_name;
|
||||||
|
|
||||||
|
$url = JSONRETURN.'GetTrainTransfer?User='.DATAUSER.'&TimeStamp='.$TimeStamp.'&Sign='.$Sign.'&From='.urlencode($From).'&To='.urlencode($To).'&DepartDate='.$DepartDate;
|
||||||
|
|
||||||
|
|
||||||
|
$ResponseJson = post_ctrip($url,'','GET');
|
||||||
|
//$ResponseData = json_decode($ResponseJson);
|
||||||
|
print_r($ResponseJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
//中文转换为座位简码
|
||||||
|
/*
|
||||||
|
硬座、软座、二等座、一等座、特等座、商务座、硬卧、软卧、高级软卧、棚车、包厢硬卧、一等软座、二等软座、高级动卧、混编硬座、混编硬卧、包厢软座、特等软座、动卧、二人软包、一人软包、一等双软、二等双软、混编软座、混编软卧、观光座、一等包座、无座、硬卧上、硬卧中、硬卧下、软卧上、软卧下、高级软卧上、高级软卧下、高级动卧上、高级动卧下、动卧上、动卧下
|
||||||
|
*/
|
||||||
|
function ReplaceToCode($SeatName){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//验证站点信息是否为空
|
||||||
|
function checkNull($info){
|
||||||
|
if(empty($info)){
|
||||||
|
return '';
|
||||||
|
}else{
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//验证参数是否存在并且是否为数字
|
||||||
|
function checkNum($num){
|
||||||
|
if(isset($num)){
|
||||||
|
if(is_numeric($num)){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//余票转换
|
||||||
|
function ticket_exchange($num,$iseven){
|
||||||
|
if($iseven){
|
||||||
|
return '有';
|
||||||
|
}else{
|
||||||
|
if(is_numeric($num)){
|
||||||
|
if($num == 0){
|
||||||
|
return '无';
|
||||||
|
}elseif($num >= 99){
|
||||||
|
return '有';
|
||||||
|
}else{
|
||||||
|
return $num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//发送请求函数
|
||||||
|
function post_ctrip($url, $data = '', $method = 'GET') {
|
||||||
|
$user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1";
|
||||||
|
if(isset($_SERVER['HTTP_USER_AGENT'])) {
|
||||||
|
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
||||||
|
}
|
||||||
|
$curl = curl_init(); // 启动一个CURL会话
|
||||||
|
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
|
||||||
|
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent); // 模拟用户使用的浏览器
|
||||||
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
|
||||||
|
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
|
||||||
|
if ($method == 'POST' && !empty($data)) {
|
||||||
|
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
|
||||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
|
||||||
|
}
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 40); // 设置超时限制防止死循环
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 40000); // 设置超时限制防止死循环
|
||||||
|
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
|
||||||
|
$tmpInfo = curl_exec($curl); // 执行操作
|
||||||
|
$errno = curl_errno($curl);
|
||||||
|
if ($errno !== 0) {
|
||||||
|
log_message('error', 'ctripost'.$errno.curl_error($curl));
|
||||||
|
}
|
||||||
|
curl_close($curl); //关闭CURL会话
|
||||||
|
return $tmpInfo; //返回数据
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,538 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>China Reisen und China Rundreisen individuell | Chinarundreisen.com</title>
|
||||||
|
|
||||||
|
<link href="https://data.chinarundreisen.com/information-view/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<link href="https://data.chinarundreisen.com/information-view/information/css/order.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<link href="https://data.chinarundreisen.com/information-view/information/css/bootstrap-datetimepicker.min.css?v=201506022" rel="stylesheet" type="text/css"/>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://data.chinarundreisen.com/information-view/bootstrap/js/respond.min.js" type="text/javascript"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<script src="https://data.chinarundreisen.com/information-view/information/js/jquery.min.js" type="text/javascript"></script>
|
||||||
|
<script src="https://data.chinarundreisen.com/information-view/bootstrap/js/bootstrap.js" type="text/javascript"></script>
|
||||||
|
<script src="https://data.chinarundreisen.com/information-view/information/js/jquery-ui.min.1-11-3.js" type="text/javascript"></script>
|
||||||
|
<script src="https://data.chinarundreisen.com/information-view/information/js/jquery-ui-timepicker-addon.js" type="text/javascript"></script>
|
||||||
|
<style type="text/css">.popover{background-color:#f2f600;}</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="headerWrapper">
|
||||||
|
<div id="header">
|
||||||
|
<div id="mainnav" class="nav navbar" role="navigation">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 col-sm-4 logobox hidden-xs">
|
||||||
|
<a href="/">
|
||||||
|
<img width="135" src="http://data.chinarundreisen.com/public/pic/common/widget/header/pic/logo1_3d64397.jpg" alt="logo">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-14 col-sm-13 col-lg-offset-3 col-sm-offset-4">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<div class="col-xs-24 btn-lg"></div>
|
||||||
|
<div class="col-xs-24 text-white"><?php if(!isset($dear)) $dear='Liebe/r'; echo $dear; ?> <?php echo $username; ?></div>
|
||||||
|
<div class="col-xs-24 text-white">Buchungsnummer: <?php echo $userinfo[0]->COLI_ID; ?></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-7 col-sm-7 hidden-xs pull-right nopadding">
|
||||||
|
<div class="tollfree pull-right" style="padding-top:10px;">
|
||||||
|
<div class="currentNo col-sm-24 nopadding"><span class="glyphicon glyphicon-earphone" style="font-size:12px;"></span> +86 773 <?php echo $userinfo[0]->OPI_Telephone; ?>(GMT+8)</div>
|
||||||
|
<div class="col-sm-24">
|
||||||
|
<div class="currentNo col-sm-24 nopadding"> 800-822-4462(gebührenfrei aus Deutschland)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-24 btn-lg"></div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 welcome-text">
|
||||||
|
<h4 class="text-center text-red">Vielen Dank für die Buchung bei Chinarundreisen! </h4>
|
||||||
|
<h4 class="text-center text-red">Bitte füllen Sie das folgende Formular aus und schicken es zurück.</h4>
|
||||||
|
</div>
|
||||||
|
<form id="form-confirm-info" method="post" action="/secureinfoconfirm/confirm/save_confirm_info">
|
||||||
|
<div class="col-xs-24 personinfo-box">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="row panel-new-head">
|
||||||
|
<h4 class="text-red">Kunden informationen</h4>
|
||||||
|
<p>Bitte prüfen Sie, ob Ihr Name richtig geschrieben ist (vollständiger Name wie im Reisepass) . Da wir die Folgekosten durch ein wegen falschem Namen stornierten Hotel oder Flugticket nicht tragen, ist die richtige Schreibweise Ihres Namens und Ihrer alle Daten unbedingt wichtig.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 nopadding">
|
||||||
|
<div class="form-group col-sm-7 nopadding-R" style="margin-bottom:0px;">
|
||||||
|
<label style="width:100%;text-align:left !important;font-weight:normal">
|
||||||
|
<span class="col-xs-6 nopadding"></span>
|
||||||
|
<div class="col-xs-18 nopadding-L" style="height:15px;">
|
||||||
|
<div class="col-xs-11 nopadding text-right">Nachname</div>
|
||||||
|
<div class="col-xs-1 nopadding text-right" style="font-size:18px;width:10px;">/</div>
|
||||||
|
<div class="col-xs-11 nopadding" style="padding-left: 2px !important;">Name</div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm-4 nopadding-R" style="margin-bottom:0px;">
|
||||||
|
<label class="" style="font-weight:normal">Geburtstag</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm-4 nopadding-R" style="margin-bottom:0px;">
|
||||||
|
<label class="" style="font-weight:normal">Passnr.</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm-5 nopadding-R" style="margin-bottom:0px;">
|
||||||
|
<label class="" style="font-weight:normal">Verfallsdatum des Reisepasses</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-4" style="margin-bottom:0px;">
|
||||||
|
<label class="" style="font-weight:normal">Nationalität</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 nopadding personinfo-input-box">
|
||||||
|
|
||||||
|
<div class="form-group col-sm-7 nopadding-R">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 nopadding-R">
|
||||||
|
|
||||||
|
<select class="form-control input-sm nopadding-L" name="gender[]">
|
||||||
|
<option value="100001">Herr</option>
|
||||||
|
<option value="100003">Frau</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-18 nopadding-L">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="form-control input-sm nopadding">
|
||||||
|
<div class="col-xs-11 nopadding">
|
||||||
|
<input name="sur_name[]" class="common_input form-control input-sm nopadding-R" placeholder="" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie hier Ihren Nachname!">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-1 nopadding text-center" style="font-size:18px;width:10px;">/</div>
|
||||||
|
<div class="col-xs-11 col-sm-11 nopadding">
|
||||||
|
<input name="given_name[]" class="common_input form-control input-sm nopadding-R" placeholder="" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie hier Ihren Name!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-4 nopadding-R">
|
||||||
|
<div class="input-groups date " data-date="1970-05-20">
|
||||||
|
<input class="form-control input-sm common_input bd_datepicker" type="text" name="birthday[]" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihr Geburtsdatum ein!" autocomplete="off" style="color:#333333 !important;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-4 nopadding-R">
|
||||||
|
<input type="text" class="form-control input-sm common_input" name="passport[]" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Ausweisnummer ein!" autocomplete="off">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-5 nopadding-R">
|
||||||
|
<div class="input-groups date">
|
||||||
|
<input class="form-control input-sm common_input datepicker" type="text" name="passport_expiration_date[]" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie das Datum ein, wann Ihr Personalausweis abläuft!" autocomplete="off" style="color:#333333 !important;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group col-sm-4">
|
||||||
|
<div class="input-group">
|
||||||
|
<select class="form-control input-sm common_input" name="nationality[]">
|
||||||
|
<optgroup label="--Top Nationalitäten--">
|
||||||
|
<option value="6" selected="selected">
|
||||||
|
Deutschland
|
||||||
|
</option>
|
||||||
|
<option value="470">
|
||||||
|
Österreich
|
||||||
|
</option>
|
||||||
|
<option value="25">
|
||||||
|
die Schweiz
|
||||||
|
</option>
|
||||||
|
<option value="572">
|
||||||
|
Luxemburg
|
||||||
|
</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="--Mehr Nationalitäten--">
|
||||||
|
|
||||||
|
<option value="5">
|
||||||
|
Kanada
|
||||||
|
</option>
|
||||||
|
<option value="8">
|
||||||
|
Frankreich
|
||||||
|
</option>
|
||||||
|
<option value="527">
|
||||||
|
Finland
|
||||||
|
</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
<span class="input-group-addon" style="background:#fff;border:none;padding:2px 3px;">
|
||||||
|
<span class="glyphicon glyphicon-minuss text-danger"></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 add-personinfo-box">
|
||||||
|
<span class="text-red" id="btn-add-personinfo-box">
|
||||||
|
<span class="glyphicon glyphicon-plus"></span> Mitreisende hinzufügen
|
||||||
|
</span>
|
||||||
|
<div class="col-xs-24 btn-lg"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-xs-24 Home-Address">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon">
|
||||||
|
Kontakttelefon:
|
||||||
|
</span>
|
||||||
|
<div class="form-control input-sm nopadding" style="border:none;-webkit-box-shadow: inset 0 0px 0px rgba(0,0,0,0.075);box-shadow: inset 0 0px 0px rgba(0,0,0,0.">
|
||||||
|
<div class="col-xs-11 nopadding">
|
||||||
|
<input type="text" name="landline" value="" class="common_input form-control input-sm" placeholder="land line" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Nummer an Land ein!">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-13 nopadding">
|
||||||
|
<input type="text" name="mobile" value="" class="common_input form-control input-sm" placeholder="Handy" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Handynummer ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if($userinfo[0]->COLI_CustomerType!=44003){ ?>
|
||||||
|
<div class="form-group col-xs-24 Home-Address">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon" style="min-width:120px;">
|
||||||
|
Anschrift:
|
||||||
|
</span>
|
||||||
|
<div class="form-control input-sm hidden-xs nopadding">
|
||||||
|
<div class="col-xs-7 nopadding">
|
||||||
|
<input name="address_street" class="input_home_address form-control input-sm" placeholder="Straße" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Heimatadresse ein!">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-1 nopadding" style="font-size:18px;width:10px;">,</div>
|
||||||
|
<div class="col-xs-7 nopadding">
|
||||||
|
<input name="address_city" class="input_home_address form-control input-sm nopadding" placeholder="Stadt" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Heimatadresse ein!">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-1 nopadding hidden" style="font-size:18px;width:10px;">,</div>
|
||||||
|
<div class="col-xs-5 nopadding hidden">
|
||||||
|
<input name="address_state" class="input_home_address form-control input-sm nopadding" placeholder="State" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Heimatadresse ein!">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-1 nopadding" style="font-size:18px;width:10px;">,</div>
|
||||||
|
<div class="col-xs-8 nopadding">
|
||||||
|
<input name="address_country" class="input_home_address form-control input-sm nopadding" placeholder="Land" style="border:none;height:28px;" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Heimatadresse ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input class="form-control input-sm visible-xs-block" name="home_address">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 flightinfo-box">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="row panel-new-head">
|
||||||
|
<h4 class="text-red">Fluginformationen</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 flight-info-box">
|
||||||
|
<div class="form-group col-sm-6 nopadding">
|
||||||
|
<label>Ankunftsflug in China </label>
|
||||||
|
<input type="text" class="form-control input-sm" name="MEI_ArrivalFlightNo" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Flugnummer ein!">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-6 nopadding-R">
|
||||||
|
<label>Ankunftszeit</label>
|
||||||
|
<div class="input-groups date" >
|
||||||
|
<input class="form-control input-sm f_datepicker" type="text" name="MEI_ArrivalTime" value="" autocomplete="off" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Ankunftszeit ein!" style="color:#333333 !important;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-6 nopadding-R">
|
||||||
|
<label>Abflugnummer von China</label>
|
||||||
|
<input type="text" class="form-control input-sm" name="MEI_DepartureFlightNo" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Flugnummer ein!">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-6 nopadding-R">
|
||||||
|
<label>Abflugzeit</label>
|
||||||
|
<div class="input-groups date ">
|
||||||
|
<input class="form-control input-sm f_datepicker" type="text" name="MEI_DepartureTime" value="" autocomplete="off" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihre Abfahrtszeit ein!" style="color:#333333 !important;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="row panel-new-head">
|
||||||
|
<h4 class="text-red">
|
||||||
|
Besondere Anforderungen
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 special_request_box">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-24 nopadding">
|
||||||
|
<textarea class="form-control input-sm" rows="5" name="special_request" placeholder="Großes Bett für
|
||||||
|
Vegetarisches Essen für
|
||||||
|
Andere Abfahrts-/Ankunftszeit für
|
||||||
|
"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-24 btn-lg"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if($userinfo[0]->COLI_CustomerType!=44003){ ?>
|
||||||
|
<div class="col-xs-24">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<div class="row panel-new-head">
|
||||||
|
<h4 class="text-red">
|
||||||
|
Kontaktinformationen für Notfälle
|
||||||
|
<span class="text-muted" style="font-size:15px;">(im Falle eines Notfalls während Ihrer Chinareise)</span>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 new-form-horizontal emergencyx_box">
|
||||||
|
|
||||||
|
<div class="form-group col-sm-13">
|
||||||
|
<label class="col-sm-9 control-label nopadding-L">Kontaktsperson</label>
|
||||||
|
<div class="col-sm-13 nopadding">
|
||||||
|
<input type="text" class="form-control input-sm" name="emergency_person_name" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie Ihren Kontakt für Notfälle ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-11">
|
||||||
|
<label class="col-sm-7 control-label nopadding-L">Email Adresse</label>
|
||||||
|
<div class="col-sm-17 nopadding">
|
||||||
|
<input type="text" class="form-control input-sm" name="emergency_email" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie ihre E-Mail-Adresse ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-13">
|
||||||
|
<label class="col-sm-9 control-label nopadding-L">Beziehung mit ihm/ihr</label>
|
||||||
|
<div class="col-sm-13 nopadding">
|
||||||
|
<input type="text" class="form-control input-sm" name="emergency_relationship" placeholder="z.B.: Er ist der Vater von Sue." value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie hier Ihren Beziehungsstatus ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-sm-11">
|
||||||
|
<label class="col-sm-7 control-label nopadding-L">Telefon Nr. </label>
|
||||||
|
<div class="col-sm-17 nopadding">
|
||||||
|
<input type="text" class="form-control input-sm" name="emergency_telephone" placeholder="Länderkürzel + Postleitzahl (land line gibt es nicht in Deutschland)" value="" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="top" data-content="Bitte tragen Sie hier Ihre Telefonnummer ein!">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-24 btn-lg"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
<div class="col-xs-24">
|
||||||
|
<input type="hidden" name="toname" value="<?php echo $userinfo[0]->OPI_FirstName; ?>">
|
||||||
|
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
|
||||||
|
<input type="hidden" name="COLI_ID" value="<?php echo $userinfo[0]->COLI_ID; ?>">
|
||||||
|
<input type="hidden" name="COLI_SN" value="<?php echo $userinfo[0]->COLI_SN; ?>">
|
||||||
|
<input type="hidden" name="visitor_link" value="<?php echo $visitor_link; ?>">
|
||||||
|
<div class="col-sm-15 col-xs-24 nopadding">
|
||||||
|
<button type="submit" id="btn-add-userinfo" class="btn btn-danger btn-lg col-sm-9 col-xs-24 pull-right" style="min-width:300px;font-size:24px;">Überprüfen & Absenden</button>
|
||||||
|
</div>
|
||||||
|
<div class="partner-text col-sm-9 col-xs-24 text-left">Danke! Mit besten Grüßen, <?php echo $userinfo[0]->OPI_FirstName; ?></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">Fehler!</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" style="height:150px;">
|
||||||
|
<p class="text-danger lead" style="padding-top:10px;">Fehler: Bitte kontaktieren Sie Ihren Reisebegleiter.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$(".common_input,textarea").each(function(){
|
||||||
|
if ($(this).val()=='' && $(this).attr('placeholder')!='') {
|
||||||
|
var valstr=$(this).val($(this).attr('placeholder'));
|
||||||
|
$(this).css("color","#999999");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(".common_input,textarea").click(function(){
|
||||||
|
if ($(this).val()==$(this).attr('placeholder') || $(this).val()=='') {
|
||||||
|
$(this).val('');
|
||||||
|
$(this).css("color","#333333");
|
||||||
|
}
|
||||||
|
$(this).popover('hide');
|
||||||
|
});
|
||||||
|
$(".common_input,textarea").blur(function(){
|
||||||
|
if ($(this).val()=='' && $(this).attr('placeholder')!='') {
|
||||||
|
$(this).val($(this).attr('placeholder'));
|
||||||
|
$(this).css("color","#999999");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//提交信息
|
||||||
|
$("#form-confirm-info").submit(function(event){
|
||||||
|
event.preventDefault();
|
||||||
|
var $btn = $("#btn-add-userinfo").button('loading');
|
||||||
|
|
||||||
|
var flag=true;
|
||||||
|
$(".common_input").each(function(){
|
||||||
|
if ($(this).val()==$(this).attr('placeholder') || $(this).val()=='') {
|
||||||
|
$(this).popover('show');
|
||||||
|
flag = false;
|
||||||
|
$btn.button('reset');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
if (!flag) {
|
||||||
|
$btn.button('reset');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
$(".input_home_address").each(function()
|
||||||
|
{
|
||||||
|
if ($(this).val()==$(this).attr('placeholder')) {
|
||||||
|
$(this).val('');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ($("textarea").val()==$("textarea").attr('placeholder')) {
|
||||||
|
$("textarea").val('');
|
||||||
|
};
|
||||||
|
|
||||||
|
var url=$(this).attr('action');
|
||||||
|
var data=$(this).serialize();
|
||||||
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
url: url,
|
||||||
|
dataType: "json",
|
||||||
|
data: data,
|
||||||
|
success: function(json_data) {
|
||||||
|
if (json_data.status == 'ok') {
|
||||||
|
location.href='/secureinfoconfirm/confirm/index/0/0/0/gm';
|
||||||
|
} else {
|
||||||
|
$btn.button('reset');
|
||||||
|
$('#myModal').modal('show');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
||||||
|
$btn.button('reset');
|
||||||
|
alert(errorThrown);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//移除一个客户信息
|
||||||
|
$('body').on('click','.glyphicon-minus',function(){
|
||||||
|
if(confirm("entfernen den Kunde?"))
|
||||||
|
{
|
||||||
|
$(this).parents('.personinfo-input-box').remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//添加一个客户信息
|
||||||
|
$("#btn-add-personinfo-box").click(function()
|
||||||
|
{
|
||||||
|
var html=$(".personinfo-input-box:first").clone();
|
||||||
|
$('.add-personinfo-box').before(html);
|
||||||
|
|
||||||
|
var num=$(".personinfo-input-box").length;
|
||||||
|
var $currentbox=$(".personinfo-input-box:last");
|
||||||
|
|
||||||
|
$currentbox.find('.glyphicon-minuss').addClass('glyphicon-minus').removeClass('glyphicon-minuss');
|
||||||
|
$currentbox.find('label').remove();
|
||||||
|
$currentbox.find('input').val('');
|
||||||
|
$currentbox.find('.datepicker').removeClass('hasDatepicker').attr('id','');
|
||||||
|
$currentbox.find('.bd_datepicker').removeClass('hasDatepicker').attr('id','');
|
||||||
|
|
||||||
|
$('.datepicker').datepicker({
|
||||||
|
controlType: 'select',
|
||||||
|
oneLine: true,
|
||||||
|
changeMonth: true,
|
||||||
|
changeYear: true,
|
||||||
|
yearRange: '2010:2025',
|
||||||
|
timeFormat: 'mm/dd/yy'
|
||||||
|
});
|
||||||
|
$('.bd_datepicker').datepicker({
|
||||||
|
controlType: 'select',
|
||||||
|
oneLine: true,
|
||||||
|
changeMonth: true,
|
||||||
|
changeYear: true,
|
||||||
|
defaultDate:'-45y',
|
||||||
|
yearRange: '1920:2015',
|
||||||
|
timeFormat: 'mm/dd/yy'
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//日期初始化
|
||||||
|
|
||||||
|
$('.f_datepicker').datetimepicker({
|
||||||
|
controlType: 'select',
|
||||||
|
oneLine: true,
|
||||||
|
changeMonth: false,
|
||||||
|
changeYear: false,
|
||||||
|
timeFormat: 'H:mm'
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.bd_datepicker').datepicker({
|
||||||
|
controlType: 'select',
|
||||||
|
oneLine: true,
|
||||||
|
changeMonth: true,
|
||||||
|
changeYear: true,
|
||||||
|
defaultDate:'-45y',
|
||||||
|
yearRange: '1920:2015',
|
||||||
|
timeFormat: 'mm/dd/yy'
|
||||||
|
});
|
||||||
|
$('.datepicker').datepicker({
|
||||||
|
controlType: 'select',
|
||||||
|
oneLine: true,
|
||||||
|
changeMonth: true,
|
||||||
|
changeYear: true,
|
||||||
|
yearRange: '2010:2025',
|
||||||
|
timeFormat: 'mm/dd/yy'
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click','.common_input',function(){
|
||||||
|
$(this).popover('hide');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
//行程地图
|
||||||
|
|
||||||
|
class Index extends CI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('welcome');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.6 KiB |
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<system.webServer>
|
||||||
|
<staticContent>
|
||||||
|
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
|
||||||
|
</staticContent>
|
||||||
|
</system.webServer>
|
||||||
|
</configuration>
|
@ -0,0 +1,105 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<title>Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit</title>
|
||||||
|
<style type="text/css">
|
||||||
|
/*<![CDATA[ XML blockout */
|
||||||
|
<!--
|
||||||
|
p { margin-top: .75em;
|
||||||
|
text-align: justify;
|
||||||
|
margin-bottom: .75em;
|
||||||
|
}
|
||||||
|
h1,h2,h3 {
|
||||||
|
text-align: center; /* all headings centered */
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
div.centered {text-align:center;} /*work around for IE centering with CSS problem part 1 */
|
||||||
|
div.centered table {margin-left:auto; margin-right:auto; text-align:left;} /* work around for IE problem part 2 */
|
||||||
|
body{margin-left: 10%;
|
||||||
|
margin-right: 10%;
|
||||||
|
}
|
||||||
|
hr.large {width: 65%; margin-top: 2em; margin-bottom: 2em;}
|
||||||
|
hr.small {width: 45%; margin-top: 2em; margin-bottom: 2em;}
|
||||||
|
.pagenum { /* uncomment the next line for invisible page numbers */
|
||||||
|
/* visibility: hidden; */
|
||||||
|
position: absolute;
|
||||||
|
left: 92%;
|
||||||
|
font-size: smaller;
|
||||||
|
text-align: right;
|
||||||
|
} /* page numbers */
|
||||||
|
.sidenote {width: 20%; padding-bottom: .5em; padding-top: .5em;
|
||||||
|
padding-left: .5em; padding-right: .5em; margin-left: 1em;
|
||||||
|
float: right; clear: right; margin-top: 1em;
|
||||||
|
font-size: smaller; color: black; background: #eeeeee; border: solid 1px;}
|
||||||
|
.n {text-indent:0%;}
|
||||||
|
.bl {border-left: solid 2px;}
|
||||||
|
.ispace {margin-top: 2em;}
|
||||||
|
.center {text-align: center;}
|
||||||
|
.smcap {font-variant: small-caps;}
|
||||||
|
.caption {font-weight: bold;}
|
||||||
|
.figcenter {margin: auto; text-align: center;}
|
||||||
|
.footnote {margin-left: 10%; margin-right: 10%; font-size: 0.9em;}
|
||||||
|
.fnanchor {vertical-align: super; font-size: .8em; text-decoration: none;}
|
||||||
|
.gap {margin-top: 4em;}
|
||||||
|
.smallgap {margin-top: 2em;}
|
||||||
|
.poem {margin-left:10%; margin-right:10%; text-align: left;}
|
||||||
|
.poem br {display: none;}
|
||||||
|
.poem .stanza {margin: 1em 0em 1em 0em;}
|
||||||
|
.poem span.i4 {display: block; margin-left: 4em; padding-left: 3em; text-indent: -3em;}
|
||||||
|
// -->
|
||||||
|
/* XML end ]]>*/
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h2>Lorem Ipsum</h2>
|
||||||
|
|
||||||
|
<h1>Ipsum, Lorem</h1>
|
||||||
|
|
||||||
|
<div id="lipsum">
|
||||||
|
<p>
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam massa enim, tincidunt non hendrerit eget, malesuada et nisi. In hac habitasse platea dictumst. Praesent nec laoreet ante. Aenean tempus nisi in erat tempus tempus. Vestibulum imperdiet lobortis sapien eu tempus. Vivamus volutpat quam sed eros molestie vitae dignissim nulla ultricies. Vivamus dictum elit velit. Pellentesque pellentesque ornare ornare. Mauris vel gravida sapien. Praesent eleifend tristique ipsum nec tempor. Vestibulum cursus eleifend tellus, a egestas lectus euismod sed.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Duis nec massa quam. Nulla porta, enim ut consequat tincidunt, quam tortor consequat enim, eu interdum eros lorem eu turpis. Cras vestibulum orci quis felis tristique quis semper sem imperdiet. Sed mattis tincidunt risus scelerisque scelerisque. Aliquam nisl quam, bibendum quis luctus eu, sodales ut felis. Integer id turpis nisi. Phasellus mattis nulla eu odio faucibus a auctor orci tristique. Nulla ullamcorper, risus nec semper accumsan, libero lacus aliquet elit, quis lacinia metus nunc vestibulum turpis. Suspendisse vel sapien vel magna auctor aliquam. Aenean fringilla fringilla metus non imperdiet. Aliquam nisl lacus, tempus vitae commodo non, accumsan ut lectus. Nam in urna eu neque pretium aliquam. Maecenas sit amet urna lectus. Donec vitae metus enim.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Sed lacus nulla, faucibus eget ullamcorper ut, mollis at metus. Vivamus tortor felis, tincidunt at tristique ut, tincidunt feugiat velit. Ut euismod felis non urna luctus luctus. Integer nec urna massa. Mauris vestibulum hendrerit auctor. Morbi at tellus nec arcu scelerisque rhoncus. Phasellus facilisis interdum lorem vulputate posuere. Nullam quis felis est. Aenean metus augue, tempus non ultricies et, dapibus vel felis. Pellentesque at augue velit. Nulla erat nisi, posuere eu pellentesque id, pretium ac libero. Phasellus tincidunt sollicitudin sapien at mollis. Nullam et libero velit, nec tincidunt eros. Aliquam et sem elit. Quisque suscipit orci enim, vel aliquam nisi. Suspendisse in enim a ligula blandit volutpat in id velit.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Nam tempor neque nec ligula sollicitudin rhoncus. Etiam et lorem vel odio pharetra interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In imperdiet nisi sed diam rutrum gravida in vel massa. Nam ullamcorper ultrices diam, vitae consequat lacus consequat consequat. Curabitur laoreet leo sed tortor fringilla nec euismod libero lobortis. Donec non enim lectus. Suspendisse potenti. In hac habitasse platea dictumst. Fusce semper auctor neque nec lobortis. Praesent vitae mauris turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sed pharetra odio. Suspendisse potenti. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis eget odio purus, quis dapibus massa.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Curabitur ut dapibus eros. Donec tempor, felis ac facilisis bibendum, nisi purus pellentesque sem, sollicitudin tempor lectus nulla at mi. Maecenas quis urna ut ante pulvinar pellentesque. Duis auctor imperdiet suscipit. Pellentesque dui nulla, volutpat quis posuere a, gravida ornare augue. Proin nec felis pharetra magna pellentesque facilisis. Curabitur lacus libero, malesuada sed tincidunt ac, aliquet ut tortor. Etiam gravida lorem nulla, consectetur eleifend risus. Donec facilisis, turpis laoreet imperdiet laoreet, purus justo egestas nulla, et hendrerit leo eros at orci. Nunc vulputate mauris sit amet sapien accumsan nec euismod orci volutpat. Sed ultricies velit ut lorem venenatis in convallis tellus imperdiet. Aenean auctor ultrices est ultricies rhoncus. Phasellus non magna a leo luctus fermentum nec fermentum erat.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
Sed faucibus nisl quis diam mollis quis varius tortor tincidunt. Phasellus in turpis in tellus consectetur mollis. Donec a neque id metus condimentum dignissim. In hac habitasse platea dictumst. Pellentesque sem nisi, pulvinar nec sagittis vitae, lacinia non tellus. Aliquam dignissim dignissim volutpat. Pellentesque ut quam et mi tincidunt varius id vel quam. Duis consectetur elit ac ligula fringilla elementum. In elementum tellus viverra mi vehicula vitae tempus lectus laoreet. Nullam diam nibh, tincidunt vitae imperdiet a, luctus a felis. In posuere pulvinar volutpat. Pellentesque eget viverra justo.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Nullam nec sapien at felis molestie auctor. Sed dignissim erat eu nulla ullamcorper mattis. Curabitur felis sem, feugiat non semper ut, sollicitudin sed ipsum. Quisque cursus laoreet turpis, sit amet molestie neque consequat at. Vestibulum eu ligula quis nisl pulvinar rhoncus. Praesent faucibus, dolor in elementum ullamcorper, tellus ante mattis risus, ac imperdiet eros eros quis risus. Praesent luctus libero a diam pharetra eget placerat risus pulvinar. Donec sollicitudin pulvinar velit vel pellentesque. Quisque sagittis leo ac mauris congue adipiscing. In tempus facilisis facilisis. Aliquam erat volutpat. Suspendisse sagittis libero ipsum.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Aliquam at cursus ipsum. Vivamus purus mi, pretium at molestie id, dictum in quam. Proin egestas auctor iaculis. Maecenas sodales facilisis tellus eu bibendum. Vestibulum varius vehicula scelerisque. Praesent condimentum varius commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sem nisl, sagittis eu euismod non, tempor nec magna. Fusce sed auctor nisl. Phasellus porttitor sagittis est, sit amet eleifend elit dignissim et. Nam consectetur elementum elit non egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum a ultricies neque. Integer hendrerit nisi id dolor porta quis venenatis lacus dignissim. In vitae fringilla magna.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Fusce ultrices scelerisque felis, id semper quam posuere a. Sed nec erat eget velit euismod condimentum a in enim. Maecenas bibendum aliquam tincidunt. Mauris vestibulum neque at nulla sagittis id lacinia enim fermentum. Quisque adipiscing risus nec massa auctor condimentum. Mauris venenatis lacus justo, eu varius odio. Fusce commodo luctus felis, vitae lobortis lectus facilisis id. Nunc faucibus vestibulum urna et lacinia. Cras ornare quam neque, non gravida sapien. Cras porta, diam sit amet laoreet rutrum, massa erat commodo diam, eu rhoncus nisl massa ac metus. In sem mauris, venenatis nec euismod ac, suscipit condimentum neque. Quisque pretium blandit lectus, ut aliquet neque rhoncus eu. Vivamus ultrices porttitor tincidunt. Curabitur ut ipsum non ipsum ultrices tincidunt. Integer scelerisque augue nec nisl varius tristique. Morbi condimentum rutrum sodales. Pellentesque odio mauris, porttitor ac sollicitudin in, ultrices ut diam.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Sed congue adipiscing orci a pellentesque. Etiam quis neque eu nulla viverra egestas. Ut ultricies dui non enim rhoncus laoreet. Nulla molestie nibh non erat venenatis gravida. Pellentesque faucibus sem sit amet risus tincidunt non ultrices diam auctor. Praesent quis libero et tellus tempor molestie. Mauris ullamcorper feugiat libero sed elementum. Donec eget nunc eget diam hendrerit pulvinar. Ut ut imperdiet enim. Vestibulum sed quam lorem. Nunc ipsum massa, venenatis eget condimentum at, ornare id ante. Vestibulum ornare volutpat tincidunt. Etiam a eros erat. Curabitur lobortis, nisi a malesuada tincidunt, nisi enim congue eros, in dictum elit odio at nunc. Nam hendrerit porta velit a viverra.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Etiam vel velit urna. Donec commodo aliquet magna rhoncus pretium. Donec fermentum orci in diam dictum non pulvinar mi tristique. Morbi urna libero, sagittis vel facilisis nec, ornare vitae nunc. Pellentesque laoreet mi a mi condimentum sagittis. Donec eleifend, nisi sit amet tincidunt sollicitudin, leo magna accumsan elit, at adipiscing velit lacus id purus. Aenean nunc sapien, egestas vitae pretium viverra, bibendum vel tellus. Maecenas mattis dui ac justo facilisis sollicitudin. Proin in mi ac lacus hendrerit congue ac vitae elit. Aliquam erat volutpat. In hac habitasse platea dictumst. Phasellus dapibus diam vel velit consectetur tempor. Maecenas viverra suscipit bibendum. Sed non enim neque.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus at odio et odio volutpat egestas. Fusce non pellentesque felis. Nunc fermentum posuere sem quis egestas. Integer nec orci vel eros fringilla bibendum. Praesent placerat molestie elit at mattis. Nunc rutrum faucibus arcu non bibendum. Vestibulum at sapien sit amet sem iaculis congue. Morbi tempus, libero vitae interdum suscipit, lacus ipsum suscipit quam, non pretium nulla orci eget dui. Praesent et nisl turpis, ultricies convallis quam. In tempor urna et eros aliquet accumsan. Phasellus lobortis bibendum libero sit amet viverra. Aenean consectetur, neque eu cursus posuere, est leo molestie dui, sit amet vulputate mi erat eu tortor. Suspendisse arcu velit, porta sit amet adipiscing sed, ultrices id urna. In hendrerit iaculis massa in pretium. Vivamus eros augue, venenatis non hendrerit a, bibendum in tortor. Fusce et mauris lorem, vitae semper ligula. Nam iaculis, eros eu varius varius, orci sapien rhoncus arcu, et luctus urna lectus non quam. Donec gravida convallis justo at bibendum. Quisque non est velit, sed laoreet augue.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|