Skip to content

Commit

Permalink
Merge pull request #41 from joomdonation/use_controller_to_send_response
Browse files Browse the repository at this point in the history
Use controller instead of helper to send csv response
thanks  @joomdonation
  • Loading branch information
alikon authored May 20, 2018
2 parents 0b7ee0f + c4a6e9d commit dced2d0
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 44 deletions.
23 changes: 21 additions & 2 deletions administrator/components/com_userlogs/controllers/userlogs.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
defined('_JEXEC') or die;
JLoader::register('UserlogsHelper', JPATH_COMPONENT . '/helpers/userlogs.php');

use Joomla\CMS\Component\ComponentHelper;
use Joomla\Utilities\ArrayHelper;

/**
Expand Down Expand Up @@ -72,8 +73,26 @@ public function exportLogs()

if (count($data))
{
// Export data to CSV file
UserlogsHelper::dataToCsv($data);
$rows = UserlogsHelper::getCsvData($data);
$filename = "logs_" . JFactory::getDate();
$csvDelimiter = ComponentHelper::getComponent('com_userlogs')->getParams()->get('csv_delimiter', ',');

$app = JFactory::getApplication();
$app->setHeader('Content-Type', 'application/csv', true)
->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '.csv"', true)
->setHeader('Cache-Control', 'must-revalidate', true)
->sendHeaders();

$output = fopen("php://output", "w");

foreach ($rows as $row)
{
fputcsv($output, $row, $csvDelimiter);
}

fclose($output);

$app->close();
}
else
{
Expand Down
55 changes: 18 additions & 37 deletions administrator/components/com_userlogs/helpers/userlogs.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

defined('_JEXEC') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Filesystem\Path;

/**
Expand All @@ -20,53 +19,35 @@
class UserlogsHelper
{
/**
* Method to extract data array of objects into CSV file
* Method to convert logs objects array to associative array use for CSV export
*
* @param array $data The logs data to be exported
* @param array $data The logs data objects to be exported
*
* @return void
* @return array
*
* @since __DEPLOY_VERSION__
*/
public static function dataToCsv($data)
public static function getCsvData($data)
{
$date = JFactory::getDate();
$filename = "logs_" . $date;
$csvDelimiter = ComponentHelper::getComponent('com_userlogs')->getParams()->get('csv_delimiter', ',');

$app = JFactory::getApplication();
$app->setHeader('Content-Type', 'application/csv', true)
->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '.csv"', true)
->setHeader('Cache-Control', 'must-revalidate', true);

$app->sendHeaders();
$rows = array();

$headers = array('Id', 'Message', 'Date', 'Extension', 'User', 'Ip');
// Header row
$rows[] = array('Id', 'Message', 'Date', 'Extension', 'User', 'Ip');

$fp = fopen('php://temp', 'r+');
ob_end_clean();

fputcsv($fp, $headers, $csvDelimiter);

foreach ($data as $row)
foreach ($data as $log)
{
$log = array();
$log['id'] = $row->id;
$log['message'] = strip_tags(self::getHumanReadableLogMessage($row));
$log['date'] = $row->log_date;
$log['extension'] = self::translateExtensionName(strtoupper(strtok($row->extension, '.')));
$log['name'] = $row->name;
$log['ip_address'] = JText::_($row->ip_address);

fputcsv($fp, $log, $csvDelimiter);
$row = array();
$row['id'] = $log->id;
$row['message'] = strip_tags(self::getHumanReadableLogMessage($log));
$row['date'] = $log->log_date;
$row['extension'] = self::translateExtensionName(strtoupper(strtok($log->extension, '.')));
$row['name'] = $log->name;
$row['ip_address'] = JText::_($log->ip_address);

$rows[] = $row;
}

rewind($fp);
$content = stream_get_contents($fp);
echo $content;
fclose($fp);

$app->close();
return $rows;
}

/**
Expand Down
7 changes: 3 additions & 4 deletions administrator/components/com_userlogs/models/userlogs.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

/**
* Methods supporting a list of article records.
*
Expand Down Expand Up @@ -76,8 +74,9 @@ protected function getListQuery()
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('a.*')
->from($db->quoteName('#__user_logs', 'a'));
->select('a.*, u.name')
->from('#__user_logs AS a')
->innerJoin('#__users AS u ON a.user_id = u.id');

// Get ordering
$fullorderCol = $this->state->get('list.fullordering', 'a.id DESC');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
<?php echo $this->escape($item->log_date); ?>
</td>
<td>
<?php echo JUser::getInstance($item->user_id)->name; ?>
<?php echo $item->name; ?>
</td>
<?php if ($this->ip) : ?>
<td>
Expand Down

0 comments on commit dced2d0

Please sign in to comment.