Skip to content

Commit e19e099

Browse files
committed
3.0.1
1 parent 9121a9e commit e19e099

File tree

2 files changed

+194
-158
lines changed

2 files changed

+194
-158
lines changed

code/Module.class.php

Lines changed: 185 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
namespace FormTools\Modules\ExportManager;
55

66
use FormTools\Core;
7+
use FormTools\Fields;
8+
use FormTools\FieldTypes;
9+
use FormTools\Forms;
10+
use FormTools\General as CoreGeneral;
711
use FormTools\Hooks;
812
use FormTools\Module as FormToolsModule;
913
use FormTools\Modules;
1014
use FormTools\Sessions;
1115
use FormTools\Settings;
16+
use FormTools\Submissions;
17+
use FormTools\Views;
18+
1219
use PDOException;
1320

1421

@@ -19,8 +26,8 @@ class Module extends FormToolsModule
1926
protected $author = "Ben Keen";
2027
protected $authorEmail = "[email protected]";
2128
protected $authorLink = "http://formtools.org";
22-
protected $version = "3.0.0";
23-
protected $date = "2017-10-01";
29+
protected $version = "3.0.1";
30+
protected $date = "2017-10-07";
2431
protected $originLanguage = "en_us";
2532
protected $jsFiles = array(
2633
"{MODULEROOT}/scripts/admin.js",
@@ -360,7 +367,7 @@ public function addExcelExportGroup()
360367
{assign var=value value=\$submission.\$col_name}
361368
<td>
362369
{smart_display_field form_id=\$form_id view_id=\$view_id submission_id=\$submission_id
363-
field_info=\$field_info field_types=\$field_types settings=\$settings value=\$value escape=\"excel\"}
370+
field_info=\$field_info field_types=\$field_types settings=\$settings value=\$value escape="excel"}
364371
</td>
365372
{/foreach}
366373
</tr>
@@ -558,4 +565,179 @@ private function createTables()
558565
$db->execute();
559566
}
560567
}
568+
569+
public function export ($params)
570+
{
571+
$L = $this->getLangStrings();
572+
$root_dir = Core::getRootDir();
573+
$root_url = Core::getRootUrl();
574+
575+
// if any of the required fields weren't entered, just output a simple blank message
576+
if (empty($params["form_id"]) || empty($params["view_id"]) || empty($params["order"]) ||
577+
empty($params["search_fields"]) || empty($params["export_group_id"])) {
578+
echo $L["notify_export_incomplete_fields"];
579+
exit;
580+
}
581+
582+
$form_id = $params["form_id"];
583+
$view_id = $params["view_id"];
584+
$order = $params["order"];
585+
$search_fields = $params["search_fields"];
586+
$export_group_id = $params["export_group_id"];
587+
$export_type_id = $params["export_type_id"];
588+
$results = $params["results"];
589+
590+
set_time_limit(300);
591+
592+
// if the user only wants to display the currently selected rows, limit the query to those submission IDs
593+
$submission_ids = array();
594+
if ($results == "selected") {
595+
$submission_ids = Sessions::get("form_{$form_id}_selected_submissions");
596+
}
597+
598+
// perform the almighty search query
599+
$results_info = Submissions::searchSubmissions($form_id, $view_id, "all", 1, $order, "all", $search_fields, $submission_ids);
600+
601+
$form_info = Forms::getForm($form_id);
602+
$view_info = Views::getView($view_id);
603+
$form_fields = Fields::getFormFields($form_id, array(
604+
"include_field_type_info" => true,
605+
"include_field_settings" => true
606+
));
607+
$field_types = FieldTypes::get(true);
608+
609+
// display_fields contains ALL the information we need for the fields in the template
610+
$display_fields = array();
611+
foreach ($view_info["fields"] as $view_field_info) {
612+
$curr_field_id = $view_field_info["field_id"];
613+
foreach ($form_fields as $form_field_info) {
614+
if ($form_field_info["field_id"] != $curr_field_id) {
615+
continue;
616+
}
617+
$display_fields[] = array_merge($form_field_info, $view_field_info);
618+
}
619+
}
620+
621+
// first, build the list of information we're going to send to the export type smarty template
622+
$placeholders = General::getExportFilenamePlaceholderHash();
623+
$placeholders["export_group_id"] = $export_group_id;
624+
$placeholders["export_type_id"] = $export_type_id;
625+
$placeholders["export_group_results"] = $results;
626+
$placeholders["field_types"] = $field_types;
627+
$placeholders["same_page"] = CoreGeneral::getCleanPhpSelf();
628+
$placeholders["display_fields"] = $display_fields;
629+
$placeholders["submissions"] = $results_info["search_rows"];
630+
$placeholders["num_results"] = $results_info["search_num_results"];
631+
$placeholders["view_num_results"] = $results_info["view_num_results"];
632+
$placeholders["form_info"] = $form_info;
633+
$placeholders["view_info"] = $view_info;
634+
$placeholders["timezone_offset"] = Sessions::get("account.timezone_offset");
635+
636+
// pull out a few things into top level placeholders for easy use
637+
$placeholders["form_id"] = $form_id;
638+
$placeholders["form_name"] = $form_info["form_name"];
639+
$placeholders["form_url"] = $form_info["form_url"];
640+
$placeholders["view_id"] = $view_id;
641+
$placeholders["view_name"] = $view_info["view_name"];
642+
$placeholders["settings"] = Settings::get();
643+
644+
$export_group_info = ExportGroups::getExportGroup($export_group_id);
645+
$export_types = ExportTypes::getExportTypes($export_group_id);
646+
647+
648+
// if the export type ID isn't available, the export group only contains a single (visible) export type
649+
$export_type_info = array();
650+
if (empty($export_type_id)) {
651+
foreach ($export_types as $curr_export_type_info) {
652+
if ($curr_export_type_info["export_type_visibility"] == "show") {
653+
$export_type_info = $curr_export_type_info;
654+
break;
655+
}
656+
}
657+
} else {
658+
$export_type_info = ExportTypes::getExportType($export_type_id);
659+
}
660+
661+
$placeholders["export_group_name"] = CoreGeneral::createSlug(CoreGeneral::evalSmartyString($export_group_info["group_name"]));
662+
$placeholders["export_group_type"] = CoreGeneral::createSlug(CoreGeneral::evalSmartyString($export_type_info["export_type_name"]));
663+
$placeholders["page_type"] = $export_group_info["action"]; // "file" / "popup" or "new_window"
664+
$placeholders["filename"] = CoreGeneral::evalSmartyString($export_type_info["filename"], $placeholders);
665+
666+
$template = $export_type_info["export_type_smarty_template"];
667+
$placeholders["export_type_name"] = $export_type_info["export_type_name"];
668+
669+
$plugin_dirs = array("$root_dir/modules/export_manager/smarty_plugins");
670+
$export_type_smarty_template = CoreGeneral::evalSmartyString($template, $placeholders, "", $plugin_dirs);
671+
672+
673+
// next, add the placeholders needed for the export group smarty template
674+
$template = $export_group_info["smarty_template"];
675+
$placeholders["export_group_name"] = CoreGeneral::evalSmartyString($export_group_info["group_name"]);
676+
$placeholders["export_types"] = $export_types;
677+
$placeholders["export_type_smarty_template"] = $export_type_smarty_template;
678+
679+
$page = CoreGeneral::evalSmartyString($template, $placeholders);
680+
681+
if ($export_group_info["action"] == "new_window" || $export_group_info["action"] == "popup") {
682+
683+
// if required, send the HTTP headers
684+
if (!empty($export_group_info["headers"])) {
685+
$headers = preg_replace("/\r\n|\r/", "\n", $export_group_info["headers"]);
686+
$header_lines = explode("\n", $headers);
687+
foreach ($header_lines as $header) {
688+
header(CoreGeneral::evalSmartyString($header, $placeholders));
689+
}
690+
}
691+
echo $page;
692+
693+
// create a file on the server
694+
} else {
695+
$settings = Settings::get("", "export_manager");
696+
$file_upload_dir = $settings["file_upload_dir"];
697+
$file_upload_url = $settings["file_upload_url"];
698+
699+
$file = "$file_upload_dir/{$placeholders["filename"]}";
700+
if ($handle = @fopen($file, "w")) {
701+
fwrite($handle, $page);
702+
fclose($handle);
703+
@chmod($file, 0777);
704+
705+
$placeholders = array("url" => "$file_upload_url/{$placeholders["filename"]}");
706+
$message = CoreGeneral::evalSmartyString($L["notify_file_generated"], $placeholders);
707+
echo json_encode(array(
708+
"success" => 1,
709+
"message" => $message,
710+
"target_message_id" => "ft_message"
711+
));
712+
exit;
713+
} else {
714+
$placeholders = array(
715+
"url" => "$file_upload_url/{$placeholders["filename"]}",
716+
"folder" => $file_upload_dir,
717+
"export_manager_settings_link" => "$root_url/modules/export_manager/settings.php"
718+
);
719+
$message = CoreGeneral::evalSmartyString($L["notify_file_not_generated"], $placeholders);
720+
echo json_encode(array(
721+
"success" => 0,
722+
"message" => $message,
723+
"target_message_id" => "ft_message"
724+
));
725+
exit;
726+
}
727+
}
728+
}
729+
730+
731+
/**
732+
* Wrapper methods. This is for convenience: anyone consuming this module can just call:
733+
* $module = Modules::getModuleInstance();
734+
* and access the methods here.
735+
*/
736+
public function getExportGroups() {
737+
return ExportGroups::getExportGroups();
738+
}
739+
740+
public function getExportTypes($export_group, $only_return_visible) {
741+
return ExportTypes::getExportTypes($export_group, $only_return_visible);
742+
}
561743
}

export.php

Lines changed: 9 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,8 @@
1010
require_once("../../global/library.php");
1111

1212
use FormTools\Core;
13-
use FormTools\Fields;
14-
use FormTools\FieldTypes;
15-
use FormTools\Forms;
16-
use FormTools\General as CoreGeneral;
1713
use FormTools\Modules;
1814
use FormTools\Sessions;
19-
use FormTools\Settings;
20-
use FormTools\Submissions;
21-
use FormTools\Views;
22-
use FormTools\Modules\ExportManager\General;
23-
use FormTools\Modules\ExportManager\ExportGroups;
24-
use FormTools\Modules\ExportManager\ExportTypes;
2515

2616
$module = Modules::initModulePage("client");
2717
$L = $module->getLangStrings();
@@ -41,148 +31,12 @@
4131

4232
$export_group_results = Modules::loadModuleField("export_manager", "export_group_{$export_group_id}_results", "export_group_{$export_group_id}_results");
4333

44-
// if any of the required fields weren't entered, just output a simple blank message
45-
if (empty($form_id) || empty($view_id) || empty($order) || empty($search_fields) || empty($export_group_id)) {
46-
echo $L["notify_export_incomplete_fields"];
47-
exit;
48-
}
49-
50-
set_time_limit(300);
51-
52-
// if the user only wants to display the currently selected rows, limit the query to those submission IDs
53-
$submission_ids = array();
54-
if ($results == "selected") {
55-
$submission_ids = Sessions::get("form_{$form_id}_selected_submissions");
56-
}
57-
58-
// perform the almighty search query
59-
$results_info = Submissions::searchSubmissions($form_id, $view_id, "all", 1, $order, "all", $search_fields, $submission_ids);
60-
$search_rows = $results_info["search_rows"];
61-
$search_num_results = $results_info["search_num_results"];
62-
$view_num_results = $results_info["view_num_results"];
63-
64-
$form_info = Forms::getForm($form_id);
65-
$view_info = Views::getView($view_id);
66-
$form_fields = Fields::getFormFields($form_id, array("include_field_type_info" => true, "include_field_settings" => true));
67-
$field_types = FieldTypes::get(true);
68-
69-
70-
// display_fields contains ALL the information we need for the fields in the template
71-
$display_fields = array();
72-
foreach ($view_info["fields"] as $view_field_info) {
73-
$curr_field_id = $view_field_info["field_id"];
74-
foreach ($form_fields as $form_field_info) {
75-
if ($form_field_info["field_id"] != $curr_field_id) {
76-
continue;
77-
}
78-
$display_fields[] = array_merge($form_field_info, $view_field_info);
79-
}
80-
}
81-
82-
// first, build the list of information we're going to send to the export type smarty template
83-
$placeholders = General::getExportFilenamePlaceholderHash();
84-
$placeholders["export_group_id"] = $export_group_id;
85-
$placeholders["export_type_id"] = $export_type_id;
86-
$placeholders["export_group_results"] = $results;
87-
$placeholders["field_types"] = $field_types;
88-
$placeholders["same_page"] = CoreGeneral::getCleanPhpSelf();
89-
$placeholders["display_fields"] = $display_fields;
90-
$placeholders["submissions"] = $results_info["search_rows"];
91-
$placeholders["num_results"] = $results_info["search_num_results"];
92-
$placeholders["view_num_results"] = $results_info["view_num_results"];
93-
$placeholders["form_info"] = $form_info;
94-
$placeholders["view_info"] = $view_info;
95-
$placeholders["timezone_offset"] = Sessions::get("account.timezone_offset");
96-
97-
// pull out a few things into top level placeholders for easy use
98-
$placeholders["form_id"] = $form_id;
99-
$placeholders["form_name"] = $form_info["form_name"];
100-
$placeholders["form_url"] = $form_info["form_url"];
101-
$placeholders["view_id"] = $view_id;
102-
$placeholders["view_name"] = $view_info["view_name"];
103-
$placeholders["settings"] = Settings::get();
104-
105-
$export_group_info = ExportGroups::getExportGroup($export_group_id);
106-
$export_types = ExportTypes::getExportTypes($export_group_id);
107-
108-
109-
// if the export type ID isn't available, the export group only contains a single (visible) export type
110-
$export_type_info = array();
111-
if (empty($export_type_id)) {
112-
foreach ($export_types as $curr_export_type_info) {
113-
if ($curr_export_type_info["export_type_visibility"] == "show") {
114-
$export_type_info = $curr_export_type_info;
115-
break;
116-
}
117-
}
118-
} else {
119-
$export_type_info = ExportTypes::getExportType($export_type_id);
120-
}
121-
122-
$placeholders["export_group_name"] = CoreGeneral::createSlug(CoreGeneral::evalSmartyString($export_group_info["group_name"]));
123-
$placeholders["export_group_type"] = CoreGeneral::createSlug(CoreGeneral::evalSmartyString($export_type_info["export_type_name"]));
124-
$placeholders["page_type"] = $export_group_info["action"]; // "file" / "popup" or "new_window"
125-
$placeholders["filename"] = CoreGeneral::evalSmartyString($export_type_info["filename"], $placeholders);
126-
127-
$template = $export_type_info["export_type_smarty_template"];
128-
$placeholders["export_type_name"] = $export_type_info["export_type_name"];
129-
130-
$plugin_dirs = array("$root_dir/modules/export_manager/smarty_plugins");
131-
$export_type_smarty_template = CoreGeneral::evalSmartyString($template, $placeholders, "", $plugin_dirs);
132-
133-
134-
// next, add the placeholders needed for the export group smarty template
135-
$template = $export_group_info["smarty_template"];
136-
$placeholders["export_group_name"] = CoreGeneral::evalSmartyString($export_group_info["group_name"]);
137-
$placeholders["export_types"] = $export_types;
138-
$placeholders["export_type_smarty_template"] = $export_type_smarty_template;
139-
140-
$page = CoreGeneral::evalSmartyString($template, $placeholders);
141-
142-
if ($export_group_info["action"] == "new_window" || $export_group_info["action"] == "popup") {
143-
144-
// if required, send the HTTP headers
145-
if (!empty($export_group_info["headers"])) {
146-
$headers = preg_replace("/\r\n|\r/", "\n", $export_group_info["headers"]);
147-
$header_lines = explode("\n", $headers);
148-
foreach ($header_lines as $header) {
149-
header(CoreGeneral::evalSmartyString($header, $placeholders));
150-
}
151-
}
152-
echo $page;
153-
154-
// create a file on the server
155-
} else {
156-
$settings = Settings::get("", "export_manager");
157-
$file_upload_dir = $settings["file_upload_dir"];
158-
$file_upload_url = $settings["file_upload_url"];
159-
160-
$file = "$file_upload_dir/{$placeholders["filename"]}";
161-
if ($handle = @fopen($file, "w")) {
162-
fwrite($handle, $page);
163-
fclose($handle);
164-
@chmod($file, 0777);
165-
166-
$placeholders = array("url" => "$file_upload_url/{$placeholders["filename"]}");
167-
$message = CoreGeneral::evalSmartyString($L["notify_file_generated"], $placeholders);
168-
echo json_encode(array(
169-
"success" => 1,
170-
"message" => $message,
171-
"target_message_id" => "ft_message"
172-
));
173-
exit;
174-
} else {
175-
$placeholders = array(
176-
"url" => "$file_upload_url/{$placeholders["filename"]}",
177-
"folder" => $file_upload_dir,
178-
"export_manager_settings_link" => "$root_url/modules/export_manager/settings.php"
179-
);
180-
$message = CoreGeneral::evalSmartyString($L["notify_file_not_generated"], $placeholders);
181-
echo json_encode(array(
182-
"success" => 0,
183-
"message" => $message,
184-
"target_message_id" => "ft_message"
185-
));
186-
exit;
187-
}
188-
}
34+
$module->export(array(
35+
"form_id" => $form_id,
36+
"view_id" => $view_id,
37+
"order" => $order,
38+
"search_fields" => $search_fields,
39+
"export_group_id" => $export_group_id,
40+
"export_type_id" => $export_type_id,
41+
"results" => $results
42+
));

0 commit comments

Comments
 (0)