Hi tvidotto,
A bit complex to explain but here's an example. The form html is:
<?php
$debug = $paramsvalues->debug;
// redirect user to home page if not Manager or higher
$user = & JFactory::getUser();
if ( ! in_array($user->gid, array('23' , '24' , '25')) ) {
$mainframe->redirect("index.php");
}
// set database table name
$table = "#__chronoforms_8";
$database = & JFactory::getDBO();
// Read records from database
$sql = "SELECT cf_id, recordtime, team_array, team_size, team_cost
FROM $table
WHERE backup = 'false';";
$database->setQuery($sql);
if ( ! $database->query() ) {
$mainframe->enqueuemessage($database->getErrorMsg(), 'error');
}
$rows = $database->loadObjectList();
$cf_id_array = array();
foreach ( $rows as $row ) {
$team_name = substr($row->team_array, 0, strpos($row->team_array, ";"));
echo $row->recordtime . " : " . $team_name . "<br />";
$cf_id_array[] = "'".$row->cf_id."'";
}
?>
<input type="submit" name="submit" value="Backup" />
<!-- <input type="submit" name="submit" value="Delete"
onclick="javascript:return confirm('Are you sure you want to delete these records ?')" /> -->
<input type="hidden" name="user_id" value="<?php echo $user->id; ?>" />
<input type="hidden" name="cf_id_list" value="<?php echo implode(',',$cf_id_array); ?>" />
<input type="hidden" name="table" value="<?php echo $table; ?>" />
This reads the new records from the table and shows a summary list with two buttons.
The OnSubmit After code is:
<?php
$user = & JFactory::getUser();
// Check the user is authorised
if ( ! in_array($user->gid, array('23' , '24' , '25')) ) {
$mainframe->redirect("index.php");
}
// Check the user is the same user as submitted the form
if ( !$user->id == JRequest::getVar('user_id','', 'post', 'string', '' ) ) {
$mainframe->redirect("index.php");
}
// get data from the post array
$table = JRequest::getVar('table','', 'post', 'string', '' );
$cf_id_list = JRequest::getVar('cf_id_list','', 'post', 'string', '' );
$submit = JRequest::getVar('submit','', 'post', 'string', '' );
// Check which submit button was used - Backup or Delete
if ( $submit == 'Backup' ) {
// backup the selected records to an Excel spreadsheet
$table_fields = array('team_name', 'find_out', 'title',
'first_name', 'last_name', 'dob', 'address1', 'address2', 'city',
'postcode', 'phone', 'email', 'gender', 'data_prot', 'gift_aid',
'attracted', 'status');
$sql = "
SELECT *
FROM $table
WHERE cf_id IN ($cf_id_list);";
$database->setQuery($sql);
$datarows = $database->loadObjectList();
$data_array = array();
$i = 0;
// this is some code to pack the data that can probably be ignored
foreach ( $datarows as $row ) {
$semi_1 = $semi_2 = $team_name = $find_out = "";
$semi_1 = strpos($row->team_array, ";");
$team_name = substr($row->team_array, 0, $semi_1);
$semi_1++;
$semi_2 = strpos($row->team_array, ";", $semi_1);
$find_out = substr($row->team_array, $semi_1, $semi_2 - $semi_1);
$team_array = explode( '|', $row->team_array );
foreach ( $team_array as $team_member ) {
$member_array[$i] = array_combine($table_fields, explode('; ',$team_member));
$member_array[$i]['team_name'] = $team_name;
$member_array[$i]['find_out'] = $find_out;
$member_array[$i]['team_id'] = $row->cf_id;
$member_array[$i]['recordtime'] = $row->recordtime;
$member_array[$i]['team_size'] = $row->team_size;
$i++;
}
}
// write the data to the spreadsheet using the function below
writeSpreadSheet($table_fields, $member_array);
} elseif ( $submit == 'Delete' ){
// Delete the records from the database
$sql = "
DELETE
FROM $table
WHERE uidp IN ($uidp_list);";
$database->setQuery($sql);
if (!$database->query()) {
$mainframe->enqueuemessage($database->getErrorMsg(), 'error');
} else {
$mainframe->enqueuemessage("Records were deleted");
}
} else {
// it wasn't backup or delete so redirect
$mainframe->redirect("index.php");
}
/**
* Write the selected records to an Excel spreadsheet
* This is an edited copy of the function from ChronoForms admin
*
* @param array $table_fields the table fields to write
* @param object list $datarows the data to write
*/
function writeSpreadSheet($table_fields, $datarows)
{
include_once JPATH_BASE.DS.'administrator'.DS.'components'
.DS.'com_chronocontact'.DS.'excelwriter'.DS.'Writer.php';
$xls = & new Spreadsheet_Excel_Writer();
$xls->send("Hearts+Heroes_" . date('j_n_Y') . ".xls");
$format = & $xls->addFormat();
$format->setBold();
$format->setColor("blue");
$sheet = & $xls->addWorksheet('Teams at '.date("m-d-Y"));
$titcol = 0;
foreach ( $table_fields as $table_field ) {
$sheet->writeString(0, $titcol, $table_field, $format);
$titcol ++;
}
$datacol = 0;
$rowcount = 1;
foreach ( $datarows as $datarow ) {
foreach ( $table_fields as $table_field ) {
$sheet->writeString($rowcount, $datacol, $datarow[$table_field], 0);
$datacol ++;
}
$datacol = 0;
$rowcount ++;
}
$xls->close();
exit();
}
?>
This is beta code and may not work without debugging!
Note, later versions of this code didn't actually delete the records but set a 'deleted' flag instead.
Bob