Skip to content

Commit

Permalink
added: hook to change exported columns
Browse files Browse the repository at this point in the history
  • Loading branch information
jeabakker committed Jan 16, 2018
1 parent 6a9d573 commit 38cd778
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 13 deletions.
16 changes: 8 additions & 8 deletions classes/CSVExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,25 +149,25 @@ public function process() {
$type = $this->getFormData('type');
$subtype = $this->getFormData('subtype');

// get possible exportable values for this content type/subtype
$available_values = csv_exporter_get_exportable_values($type, $subtype, true);

// get configured export fields
$exportable_values = $this->getFormData('exportable_values');
if (empty($exportable_values)) {

// prepare values for export
$column_config = csv_exporter_prepare_exportable_columns($exportable_values, $type, $subtype);

// check hook results
if (empty($column_config) || !is_array($column_config)) {
$this->unlockProcessing();
return;
}

// prepare for exporting
$fo = $this->getFileObject();
$seperator = csv_exporter_get_separator();
$exportable_values = array_keys($column_config);

// make csv header row
$headers = [];
foreach ($exportable_values as $export_value) {
$headers[] = array_search($export_value, $available_values);
}
$headers = array_values($column_config);

// create the new file with the headers
$fh = $fo->open('write');
Expand Down
42 changes: 40 additions & 2 deletions classes/ColdTrick/CSVExporter/ExportableValues.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ class ExportableValues {
*/
public static function getExportableValues($hook, $type, $return_value, $params) {

if (empty($params) || !is_array($params)) {
$content_type = elgg_extract('type', $params);
if (empty($content_type)) {
return;
}

$content_type = elgg_extract('type', $params);
$readable = (bool) elgg_extract('readable', $params, false);

// default exportable values
Expand Down Expand Up @@ -412,4 +412,42 @@ public static function exportGroupValue($hook, $type, $return_value, $params) {
break;
}
}

/**
* Change the label of the exported value
*
* @param string $hook the name of the hook
* @param string $type the type of the hook
* @param mixed $return_value the current return value
* @param array $params supplied params
*
* @return void|mixed
*/
public static function exportableColumnLabels($hook, $type, $return_value, $params) {

$type = elgg_extract('type', $params);
if (empty($type)) {
return;
}

$subtype = elgg_extract('subtype', $params);

$available_columns = csv_exporter_get_exportable_values($type, $subtype, true);

foreach ($return_value as $column_id => $label) {
if ($column_id !== $label) {
continue;
}

$new_label = array_search($column_id, $available_columns);
if ($new_label === false) {
// no better label found
continue;
}

$return_value[$column_id] = $new_label;
}

return $return_value;
}
}
25 changes: 25 additions & 0 deletions lib/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,28 @@ function csv_exported_get_readable_timestamp($time) {

return date(elgg_echo('friendlytime:date_format'), $time);
}

/**
* Prepare the selected columns for export
*
* @param string[] $selected_columns the column id's
* @param string $type entity type
* @param string $subtype entity subtype
*
* @return array|mixed
*/
function csv_exporter_prepare_exportable_columns($selected_columns, $type, $subtype = '') {

if (empty($selected_columns) || !is_array($selected_columns) || empty($type)) {
return $selected_columns;
}

$column_config = array_combine($selected_columns, $selected_columns);

$params = [
'type' => $type,
'subtype' => $subtype,
'selected_columns' => $selected_columns,
];
return elgg_trigger_plugin_hook('prepare:exportable_columns', 'csv_exporter', $params, $column_config);
}
1 change: 1 addition & 0 deletions start.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ function csv_exporter_init() {
elgg_register_plugin_hook_handler('export_value', 'csv_exporter', '\ColdTrick\CSVExporter\ExportableValues::exportObjectValue');
elgg_register_plugin_hook_handler('export_value', 'csv_exporter', '\ColdTrick\CSVExporter\ExportableValues::exportUserValue');
elgg_register_plugin_hook_handler('export_value', 'csv_exporter', '\ColdTrick\CSVExporter\ExportableValues::exportGroupValue');
elgg_register_plugin_hook_handler('prepare:exportable_columns', 'csv_exporter', '\ColdTrick\CSVExporter\ExportableValues::exportableColumnLabels', 9999);

elgg_register_plugin_hook_handler('register', 'menu:page', '\ColdTrick\CSVExporter\PageMenu::adminMenu');
elgg_register_plugin_hook_handler('register', 'menu:csv_exporter', '\ColdTrick\CSVExporter\CSVExporterMenu::register');
Expand Down
8 changes: 5 additions & 3 deletions views/default/csv_exporter/preview.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
$exportable_values = elgg_extract('exportable_values', $vars);
$form_fields = elgg_get_sticky_values('csv_exporter_preview');

$readable_values = csv_exporter_get_exportable_values($type, $subtype, true);
$column_config = csv_exporter_prepare_exportable_columns($exportable_values, $type, $subtype);

$content = '<table class="elgg-table">';

$content .= '<thead>';
$content .= '<tr>';
foreach ($exportable_values as $name) {
$content .= '<th>' . array_search($name, $readable_values) . '</th>';
foreach ($column_config as $label) {
$content .= '<th>' . $label . '</th>';
}
$content .= '</tr>';
$content .= '</thead>';
Expand Down Expand Up @@ -88,6 +88,8 @@
break;
}

$exportable_values = array_keys($column_config);

$entities = new ElggBatch('elgg_get_entities_from_relationship', $options);
foreach ($entities as $entity) {

Expand Down

0 comments on commit 38cd778

Please sign in to comment.