File "ExportToHtmlTable.php"
Full Path: /www/wwwroot/shphe-en.com/wp-content/plugins/contact-form-7-to-database-extension/ExportToHtmlTable.php
File size: 12.59 KB
MIME-type: --
Charset: utf-8
<?php
/*
"Contact Form to Database" Copyright (C) 2011-2013 Michael Simpson (email : michael.d.simpson@gmail.com)
This file is part of Contact Form to Database.
Contact Form to Database is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Contact Form to Database 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Contact Form to Database.
If not, see <http://www.gnu.org/licenses/>.
*/
require_once('ExportBase.php');
require_once('CFDBExport.php');
class ExportToHtmlTable extends ExportBase implements CFDBExport {
/**
* @var bool
*/
static $wroteDefaultHtmlTableStyle = false;
var $useBom = false;
public function setUseBom($use) {
$this->useBom = $use;
}
/**
* Echo a table of submitted form data
* @param string $formName
* @param array $options
* @return void
*/
public function export($formName, $options = null) {
$this->setOptions($options);
$this->setCommonOptions(true);
$canDelete = false;
$useDT = false;
$editMode = false;
$printScripts = false;
$printStyles = false;
if ($options && is_array($options)) {
if (isset($options['useDT'])) {
$useDT = $options['useDT'];
//$this->htmlTableClass = '';
if (isset($options['printScripts'])) {
$printScripts = $options['printScripts'];
}
if (isset($options['printStyles'])) {
$printStyles = $options['printStyles'];
}
if (isset($options['edit'])) {
$editMode = 'true' == $options['edit'];
}
}
if (isset($options['canDelete'])) {
$canDelete = $options['canDelete'];
}
}
// Security Check
if (!$this->isAuthorized()) {
$this->assertSecurityErrorMessage();
return;
}
if ($editMode && !$this->plugin->canUserDoRoleOption('CanChangeSubmitData')) {
$editMode = false;
}
// Headers
$this->echoHeaders('Content-Type: text/html; charset=UTF-8');
if ($this->isFromShortCode) {
ob_start();
if ($this->useBom) {
// File encoding UTF-8 Byte Order Mark (BOM) http://wiki.sdn.sap.com/wiki/display/ABAP/Excel+files+-+CSV+format
echo chr(239) . chr(187) . chr(191);
}
}
else {
if ($this->useBom) {
// File encoding UTF-8 Byte Order Mark (BOM) http://wiki.sdn.sap.com/wiki/display/ABAP/Excel+files+-+CSV+format
echo chr(239) . chr(187) . chr(191);
}
if ($printScripts) {
$pluginUrl = plugins_url('/', __FILE__);
wp_enqueue_script('datatables', $pluginUrl . 'DataTables/media/js/jquery.dataTables.min.js', array('jquery'));
wp_print_scripts('datatables');
}
if ($printStyles) {
$pluginUrl = plugins_url('/', __FILE__);
wp_enqueue_style('datatables-demo', $pluginUrl .'DataTables/media/css/demo_table.css');
wp_enqueue_style('jquery-ui.css', $pluginUrl . 'jquery-ui/jquery-ui.css');
wp_print_styles(array('jquery-ui.css', 'datatables-demo'));
}
}
// Query DB for the data for that form
$submitTimeKeyName = 'Submit_Time_Key';
$this->setDataIterator($formName, $submitTimeKeyName);
if ($useDT) {
$dtJsOptions = isset($options['dt_options']) ?
$options['dt_options'] :
'"bJQueryUI": true, "aaSorting": [], "iDisplayLength": -1, "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "' . __('All', 'contact-form-7-to-database-extension') . '"]]';
$i18nUrl = $this->plugin->getDataTableTranslationUrl();
if ($i18nUrl) {
if (!empty($dtJsOptions)) {
$dtJsOptions .= ',';
}
$dtJsOptions .= " \"oLanguage\": { \"sUrl\": \"$i18nUrl\" }";
}
$dtJsOptions = stripslashes($dtJsOptions); // unescape single quotes when posted via URL
?>
<script type="text/javascript" language="Javascript">
jQuery(document).ready(function() {
jQuery('#<?php echo $this->htmlTableId ?>').dataTable({
<?php
echo $dtJsOptions;
if ($editMode) {
do_action_ref_array('cfdb_edit_fnDrawCallbackJsonForSC', array($this->htmlTableId));
}
?> })
});
</script>
<?php
}
if ($this->htmlTableClass == $this->defaultTableClass && !ExportToHtmlTable::$wroteDefaultHtmlTableStyle) {
?>
<style type="text/css">
table.<?php echo $this->defaultTableClass ?> {
margin-top: 1em;
border-spacing: 0;
border: 0 solid gray;
font-size: x-small;
}
br {
<?php /* Thanks to Alberto for this style which means that in Excel IQY all the text will
be in the same cell, not broken into different cells */ ?>
mso-data-placement: same-cell;
}
table.<?php echo $this->defaultTableClass ?> th {
padding: 5px;
border: 1px solid gray;
}
table.<?php echo $this->defaultTableClass ?> th > td {
font-size: x-small;
background-color: #E8E8E8;
}
table.<?php echo $this->defaultTableClass ?> tbody td {
padding: 5px;
border: 1px solid gray;
font-size: x-small;
}
table.<?php echo $this->defaultTableClass ?> tbody td > div {
max-height: 100px;
overflow: auto;
}
</style>
<?php
ExportToHtmlTable::$wroteDefaultHtmlTableStyle = true;
}
if ($this->style) {
?>
<style type="text/css">
<?php echo $this->style ?>
</style>
<?php
}
?>
<!-- 列表 -->
<ul class="inquiry-list">
<?php
$showLineBreaks = $this->plugin->getOption('ShowLineBreaksInDataTable');
$showLineBreaks = 'false' != $showLineBreaks;
while ($this->dataIterator->nextRow()) {
$submitKey = $this->dataIterator->row[$submitTimeKeyName];
?>
<?php if ($canDelete) { // Put in the delete checkbox ?>
<li class="inquiry-item">
<div class="inquiry-item-in">
<dl>
<dt>选择询盘:</dt>
<dd><input type="checkbox" id="delete_<?php echo $submitKey ?>" name="<?php echo $submitKey ?>" value="row"/></dd>
</dl>
<?php
}
$fields_with_file = null;
if (isset($this->dataIterator->row['fields_with_file']) && $this->dataIterator->row['fields_with_file'] != null) {
$fields_with_file = explode(',', $this->dataIterator->row['fields_with_file']);
}
foreach ($this->dataIterator->displayColumns as $aCol) {
$cell = $this->rawValueToPresentationValue(
$this->dataIterator->row[$aCol],
$showLineBreaks,
($fields_with_file && in_array($aCol, $fields_with_file)),
$this->dataIterator->row[$submitTimeKeyName],
$formName,
$aCol);
// NOTE: the ID field is used to identify the cell when an edit happens and we save that to the server
printf('<div class="dis_'.$aCol.'"><dl><dt class="%s-in %s">%s</dt><dd><div class="inquiry">%s</div></dd></dl></div>', $aCol, $submitKey, $aCol, $cell);
}
?>
</div>
</li>
<?php
} ?>
</ul>
<?php
if (isset($this->options['header']) && $this->options['header'] != 'true') {
// do not output column headers
}
else {
?>
<?php if ($canDelete) { ?>
<button id="delete" name="delete" onclick="this.form.submit()"><?php _e('删除选中询盘', 'contact-form-7-to-database-extension')?></button>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#selectall').click(function() {
jQuery('#<?php echo $this->htmlTableId ?>').find('input[id^="delete_"]').attr('checked', this.checked);
});
});
</script>
<?php
}
foreach ($this->dataIterator->displayColumns as $aCol) {
$colDisplayValue = $aCol;
if ($this->headers && isset($this->headers[$aCol])) {
$colDisplayValue = $this->headers[$aCol];
}
printf('', $colDisplayValue, $formName, $aCol, $colDisplayValue);
}
?>
<?php
} ?>
<?php
$showLineBreaks = $this->plugin->getOption('ShowLineBreaksInDataTable');
$showLineBreaks = 'false' != $showLineBreaks;
while ($this->dataIterator->nextRow()) {
$submitKey = $this->dataIterator->row[$submitTimeKeyName];
?>
<?php if ($canDelete) { // Put in the delete checkbox ?>
<?php
}
$fields_with_file = null;
if (isset($this->dataIterator->row['fields_with_file']) && $this->dataIterator->row['fields_with_file'] != null) {
$fields_with_file = explode(',', $this->dataIterator->row['fields_with_file']);
}
foreach ($this->dataIterator->displayColumns as $aCol) {
$cell = $this->rawValueToPresentationValue(
$this->dataIterator->row[$aCol],
$showLineBreaks,
($fields_with_file && in_array($aCol, $fields_with_file)),
$this->dataIterator->row[$submitTimeKeyName],
$formName,
$aCol);
// NOTE: the ID field is used to identify the cell when an edit happens and we save that to the server
printf('', $aCol, $submitKey, $aCol, $cell);
}
?><?php
} ?>
</div>
</body>
</html>
<?php
if ($this->isFromShortCode) {
// If called from a shortcode, need to return the text,
// otherwise it can appear out of order on the page
$output = ob_get_contents();
ob_end_clean();
return $output;
}
}
public function &rawValueToPresentationValue(&$value, $showLineBreaks, $isUrl, &$submitTimeKey, &$formName, &$fieldName) {
$value = htmlentities($value, null, 'UTF-8'); // no HTML injection
if ($showLineBreaks) {
$value = str_replace("\r\n", '<br/>', $value); // preserve DOS line breaks
$value = str_replace("\n", '<br/>', $value); // preserve UNIX line breaks
}
if ($isUrl) {
$fileUrl = $this->plugin->getFileUrl($submitTimeKey, $formName, $fieldName);
$value = "<a href=\"$fileUrl\">$value</a>";
}
return $value;
}
}