Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
contact-form-7-to-database-extension
:
ExportToCsvUtf8.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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 ExportToCsvUtf8 extends ExportBase implements CFDBExport { var $useBom = false; var $useShiftJIS = false; // for Japanese var $bak = false; public function setUseBom($use) { $this->useBom = $use; } public function setUseShiftJIS($use) { // If mb_convert_encoding function is not enabled (mb_string module is not installed), // then converting cannot be done. if ($use && !function_exists('mb_convert_encoding')) { $this->useShiftJIS = false; } else { $this->useShiftJIS = $use; } } public function export($formName, $options = null) { if (isset($options['bak']) && $options['bak'] == 'true') { $this->bak = true; $options['hide'] = 'Submitted'; $options['show'] = 'submit_time,/.*/'; $options['unbuffered'] = 'true'; } $this->setOptions($options); $this->setCommonOptions(); // Security Check if (!$this->isAuthorized()) { $this->assertSecurityErrorMessage(); return; } if ($this->options && !$this->bak && is_array($this->options)) { if (isset($this->options['bom'])) { $this->useBom = $this->options['bom'] == 'true'; } } // Headers $charSet = 'UTF-8'; if ($this->useShiftJIS) { $charSet = 'Shift_JIS'; } $this->echoHeaders( array("Content-Type: text/csv; charset=$charSet", "Content-Disposition: attachment; filename=\"$formName.csv\"")); $this->echoCsv($formName); } /** * Convert Shift-JIS (Standard Encoding for Japanese Applications) to UTF-8. * @param $str string * @return string */ public function japanese_convert_utf8_to_sjis($str) { $utf_escape_patterns_revert = array( // The code number of Japanese two-byte character "ー" is separated by Japanese encoding types. '/\xE2\x80\x93/' => "\xE2\x88\x92", // Hyphen '/\xE2\x80\xA2/' => "\xE3\x83\xBB" // Centered dot ); $str = preg_replace( array_keys($utf_escape_patterns_revert), array_values($utf_escape_patterns_revert), $str); return $str; } public function echoCsv($formName) { 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); } $eol = "\n"; // Query DB for the data for that form $submitTimeKeyName = 'Submit_Time_Key'; $this->setDataIterator($formName, $submitTimeKeyName); // Column Headers if (isset($this->options['header']) && $this->options['header'] != 'true') { // do not output column headers } else { foreach ($this->dataIterator->displayColumns as $aCol) { printf('"%s",', str_replace('"', '""', $aCol)); } echo $eol; } // Rows $showFileUrlsInExport = $this->plugin->getOption('ShowFileUrlsInExport') == 'true'; while ($this->dataIterator->nextRow()) { $fields_with_file = null; if ($showFileUrlsInExport && 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 = isset($this->dataIterator->row[$aCol]) ? $this->dataIterator->row[$aCol] : ''; if ($showFileUrlsInExport && $fields_with_file && $cell && in_array($aCol, $fields_with_file)) { $cell = $this->plugin->getFileUrl($this->dataIterator->row[$submitTimeKeyName], $formName, $aCol); } if ($this->useShiftJIS) { printf('"%s",', str_replace('"', '""', mb_convert_encoding($this->japanese_convert_utf8_to_sjis($cell), "SJIS-win", "utf-8"))); } else { printf('"%s",', str_replace('"', '""', $cell)); } } echo $eol; } } }