/
CFDBFormIterator.php
105 lines (90 loc) · 3.63 KB
/
CFDBFormIterator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
/*
"Contact Form to Database" Copyright (C) 2011-2012 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/>.
*/
/**
* This class is an API for accessing a form and looping through its contents.
* Common shortcode options can be used to show/hide columns, search/filter fields, limit, orderby etc.
* Set them in the input $options array.
* Example code:
* <code>
* // Email all the "Mike"'s
* require_once(ABSPATH . 'wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php');
* $exp = new CFDBFormIterator();
* $exp->export('my-form', new array('show' => 'name,email', 'search' => 'mike'));
* while ($row = $exp->nextRow()) {
* wp_mail($row['email'], 'Hello ' . $row['name], 'How are you doing?');
* }
*
* </code>
*/
require_once('ExportBase.php');
require_once('CFDBExport.php');
class CFDBFormIterator extends ExportBase implements CFDBExport {
/**
* @var string
*/
var $formName;
/**
* @var CF7DBPlugin
*/
var $plugin;
/**
* Intended to be used by people who what to programmatically loop over the rows
* of a form.
* @param $formName string
* @param $options array of option_name => option_value
* @return void
*/
public function export($formName, $options = null) {
$this->formName = $formName;
$this->setOptions($options);
$this->setCommonOptions();
$this->setDataIterator($formName);
}
/**
* @return array|bool associative array of the row values or false if no more row exists
*/
public function nextRow() {
if ($this->dataIterator->nextRow()) {
$row = array();
$row['submit_time'] = $this->dataIterator->row['submit_time'];
$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']);
if ($this->plugin == null) {
require_once('CF7DBPlugin.php');
$this->plugin = new CF7DBPlugin();
}
}
foreach ($this->dataIterator->getDisplayColumns() as $aCol) {
$row[$aCol] = $this->dataIterator->row[$aCol];
if ($aCol == 'filter'){
$row[$aCol] = urldecode($row[$aCol]);
$row[$aCol] = urlencode($row[$aCol]);
}
// If it is a file, add in the URL for it by creating a field name appended with '_URL'
if ($fields_with_file && in_array($aCol, $fields_with_file)) {
$row[$aCol . '_URL'] = $this->plugin->getFileUrl($row['submit_time'], $this->formName, $aCol);
}
}
return $row;
}
else {
return false;
}
}
}