track_da_files.admin.inc in Track da files 8
Same filename and directory in other branches
Administrative page callbacks for Track da files module.
File
includes/track_da_files.admin.incView source
<?php
/**
* @file
* Administrative page callbacks for Track da files module.
*/
/**
* Settings form.
*/
function track_da_files_config_form() {
// Variable which stores options to show in main reports.
$track_da_files_report_datas = variable_get('track_da_files_report_datas', array(
'total_ips',
'average_by_ip',
'last_display',
));
// Variable which stores datas that will appear in files displays reports.
$track_da_files_report_files_datas = variable_get('track_da_files_report_files_datas', array(
'timestamp',
'filesize',
'filemime',
));
// Variable which stores stores options to show in file specific report.
$track_da_files_single_file_report_datas = variable_get('track_da_files_single_file_report_datas', array(
'id',
'referer',
'browser',
'browser_version',
'browser_platform',
'ip',
'uid',
));
// Variable which stores value for enabling user specific report.
$track_da_files_user_report_enabled = variable_get('track_da_files_user_report_enabled', 1);
// Variable which stores stores options to show in user specific report.
$track_da_files_single_user_report_datas = variable_get('track_da_files_single_user_report_datas', array(
'referer',
'browser',
'browser_version',
'browser_platform',
'ip',
));
// Variable storing value for enabling showing tracking datas on the site.
$track_da_files_file_field_links_show_enabled = variable_get('track_da_files_file_field_links_show_enabled', 1);
if (module_exists('colorbox')) {
$track_da_files_colorbox_enabled = variable_get('track_da_files_colorbox_enabled', 0);
}
$form['track_da_files'] = array(
'#type' => 'vertical_tabs',
);
// Main report configuration section.
$form['track_da_files']['track_da_files_report_datas'] = array(
'#type' => 'fieldset',
'#title' => t('Main report'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['track_da_files']['track_da_files_report_datas']['track_da_files_report_datas'] = array(
'#type' => 'checkboxes',
'#title' => t('Displays datas to show in main report'),
'#options' => array(
'total_ips' => t('Total ips'),
'average_by_ip' => t('Average count by ip'),
'last_display' => t('Last display date'),
),
'#default_value' => $track_da_files_report_datas,
'#description' => t('Datas that will appear in main files displays reports.'),
);
$form['track_da_files']['track_da_files_report_datas']['track_da_files_report_files_datas'] = array(
'#type' => 'checkboxes',
'#title' => t('Files datas to show in main report'),
'#options' => array(
'timestamp' => t('Created'),
'filesize' => t('File size'),
'filemime' => t('File mime'),
),
'#default_value' => $track_da_files_report_files_datas,
'#description' => t('Specific files datas that will appear in main report.'),
);
// File specific report configuration section.
$form['track_da_files']['file_specific_reports'] = array(
'#type' => 'fieldset',
'#title' => t('File report'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['track_da_files']['file_specific_reports']['track_da_files_single_file_report_datas'] = array(
'#type' => 'checkboxes',
'#title' => t('Displays datas to show in file report'),
'#options' => array(
'id' => t('Related content'),
'browser' => t('Browser'),
'browser_version' => t('Browser version'),
'browser_platform' => t('Browser platform'),
'referer' => t('Displayed from URL'),
'ip' => t('Ip'),
'uid' => t('User who displayed file'),
),
'#default_value' => $track_da_files_single_file_report_datas,
'#description' => t('Datas that will appear in file specific report.'),
);
// User specific report configuration section.
$form['track_da_files']['user_specific_reports'] = array(
'#type' => 'fieldset',
'#title' => t('User report'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['track_da_files']['user_specific_reports']['track_da_files_user_report_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Enable user specific report'),
'#default_value' => $track_da_files_user_report_enabled,
);
$form['track_da_files']['user_specific_reports']['track_da_files_single_user_report_datas'] = array(
'#type' => 'checkboxes',
'#title' => t('Displays datas to show in user report'),
'#options' => array(
'browser' => t('Browser'),
'browser_version' => t('Browser version'),
'browser_platform' => t('Browser platform'),
'referer' => t('Displayed from URL'),
'ip' => t('Ip'),
),
'#default_value' => $track_da_files_single_user_report_datas,
'#description' => t('Datas that will appear in users displays reports.'),
'#states' => array(
'visible' => array(
':input[name=track_da_files_user_report_enabled]' => array(
'checked' => TRUE,
),
),
),
);
// Configure to show datas near from file field links.
$form['file_field_links_show'] = array(
'#type' => 'fieldset',
'#title' => t('File field links'),
);
$form['file_field_links_show']['track_da_files_file_field_links_show_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Provide counter near file field links'),
'#default_value' => $track_da_files_file_field_links_show_enabled,
'#description' => t('A counter showing number of times a file has been displayed will appear in a near from files links'),
);
if (module_exists('colorbox')) {
$form['track_da_files_colorbox'] = array(
'#type' => 'fieldset',
'#title' => t('Colorbox'),
);
$form['track_da_files_colorbox']['track_da_files_colorbox_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Enable Track da files colorbox compatibility'),
'#default_value' => $track_da_files_colorbox_enabled,
'#description' => t('When enabled, in content interface select display "tdf : Colorbox image" for desired fields'),
);
}
// Render the role overview.
$form['track_da_files_roles']['role_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Roles'),
);
$form['track_da_files_roles']['role_settings']['track_da_files_roles'] = array(
'#type' => 'radios',
'#title' => t('Add tracking for roles'),
'#options' => array(
t('Add to the selected roles only'),
t('Add to every role except the selected ones'),
),
'#default_value' => variable_get('track_da_files_roles', 0),
);
$role_options = array_map('check_plain', user_roles());
$form['track_da_files_roles']['role_settings']['track_da_files_specific_roles'] = array(
'#type' => 'checkboxes',
'#title' => t('Roles'),
'#default_value' => variable_get('track_da_files_specific_roles', array()),
'#options' => $role_options,
'#description' => t('If none of the roles are selected, all users will be tracked. If a user has any of the roles checked, that user will be tracked (or excluded, depending on the setting above).'),
);
return system_settings_form($form);
}
/**
* Build variables which can be used to create reports table.
*/
/*function track_da_files_table_build() {
// We check avalaible optional datas.
$track_da_files_report_datas = variable_get('track_da_files_report_datas', array(
'total_ips',
'average_by_ip',
'last_display',
)
);
$track_da_files_report_files_datas = variable_get('track_da_files_report_files_datas', array(
'timestamp',
'filesize',
'filemime',
)
);
// We prepare main report table header.
$header = array(
array('data' => t('Filename')),
array(
'data' => t('Counter'),
'field' => 'counter',
'sort' => 'DESC',
),
);
// We put displays datas in main report table header.
foreach ($track_da_files_report_datas as $data => $value) {
if (!empty($value)) {
if ($value == 'total_ips') {
$header[] = array(
'data' => t('Total ips'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'average_by_ip') {
$header[] = array(
'data' => t('Average by ip'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'last_display') {
$header[] = array(
'data' => t('Last display'),
'field' => $value,
'sort' => 'DESC',
);
}
}
}
// We put files datas in main report table header.
foreach ($track_da_files_report_files_datas as $data => $value) {
if (!empty($value)) {
if ($value == 'timestamp') {
$header[] = array(
'data' => t('Created'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'filesize') {
$header[] = array(
'data' => t('File size'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'filemime') {
$header[] = array(
'data' => t('File mime'),
'field' => $value,
'sort' => 'DESC',
);
}
}
}
$header[] = array('data' => t('File datas'));
// We prepare fields.
$fields = array('pid', 'recid');
foreach ($track_da_files_report_datas as $key => $value) {
if ($value == 'average_by_ip') {
$average_by_ip = $value;
}
elseif ($value == 'total_ips') {
$total_ips = $value;
}
elseif ($value == 'last_display') {
$last_display = $value;
}
else {
$fields[] = $value;
}
}
$fields2 = array('filename');
foreach ($track_da_files_report_files_datas as $key => $value) {
if ($value) {
$fields2[] = $value;
}
}
// We select the datas in database.
$query = db_select('track_da_files', 't');
$query->groupBy('pid');
$query->addExpression('COUNT(recid)', 'counter');
$query->addExpression('COUNT(DISTINCT(ip))', 'total_ips');
$query->addExpression('MAX(time)', 'last_display');
$query->addExpression('ROUND(COUNT(recid) / COUNT(DISTINCT(ip)))', 'average_by_ip');
$query->join('track_da_files_paths', 'p', 't.pid = p.pid');
$query->join('file_managed', 'f', 'p.fid = f.fid');
$query
->extend('PagerDefault')
->limit(20)
->extend('TableSort')
->orderByHeader($header)
->fields('f', $fields2)
->fields('t', $fields)
->fields('p', array('fid', 'path'));
$results = $query->execute();
$rows = array();
// We loop into the results to build table rows for the main report table.
foreach ($results as $key => $record) {
foreach ($record as $key2 => $row) {
if ($key2 == 'filename') {
$rows[$key][$key2] = l($row, file_create_url($record->path));
}
elseif (($key2 == 'pid') || ($key2 == 'path')) {
unset($rows[$key][$key2]);
}
elseif (($key2 == 'last_display' && !empty($last_display)) || ($key2 == 'timestamp')) {
$rows[$key][$key2] = format_date($row, 'short');
}
elseif ($key2 == 'filesize') {
$rows[$key][$key2] = format_size($row);
}
elseif ((($key2 == 'filemime') || ($key2 == 'counter')) || (!empty($total_ips) && $key2 == 'total_ips')) {
$rows[$key][$key2] = $row;
}
elseif ($key2 == 'fid') {
$rows[$key][$key2] = l(t('View more'), 'admin/reports/track_da_files/file_report/' . $record->fid . '/' . $record->pid);
}
elseif ((!empty($average_by_ip)) && ($key2 == 'recid')) {
$rows[$key][$key2] = $record->average_by_ip;
}
}
}
// We reorder rows to match table headers order.
$rows_indexes_ordered = array(
'filename',
'counter',
'total_ips',
'recid',
'last_display',
'timestamp',
'filesize',
'filemime',
'fid',
);
$rows_ordered = array();
foreach ($rows as $row => $value) {
foreach ($value as $key => $value2) {
$keys[] = $key;
}
}
$rows_final = array();
$variables = array();
foreach ($rows as $row) {
foreach ($rows_indexes_ordered as $index) {
if (in_array($index, $keys)) {
$rows_ordered[$index] = $row[$index];
}
}
$rows_final[] = $rows_ordered;
}
$variables = array(
'header' => $header,
'rows' => $rows_final,
);
return $variables;
}
*/
/**
* Build variables used to create file report.
*/
function track_da_files_table_build_file_report($fid, $pid) {
$track_da_files_single_file_report_datas = variable_get('track_da_files_single_file_report_datas', array(
'id',
'referer',
'browser',
'browser_version',
'browser_platform',
'ip',
'uid',
));
$track_da_files_user_report_enabled = variable_get('track_da_files_user_report_enabled', 1);
// We prepare table header for file specific report.
$header = array(
array(
'data' => t('Time'),
),
);
// Header datas.
foreach ($track_da_files_single_file_report_datas as $data => $value) {
if (!empty($value)) {
if ($value == 'uid') {
$header[] = array(
'data' => t('Username'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'id') {
$header[] = array(
'data' => t('Related content'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'referer') {
$header[] = array(
'data' => t('Displayed from'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser') {
$header[] = array(
'data' => t('Browser'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser_version') {
$header[] = array(
'data' => t('Browser version'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser_platform') {
$header[] = array(
'data' => t('Platform'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'ip') {
$header[] = array(
'data' => t('Ip'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'uid') {
$header[] = array(
'data' => t('User name'),
'field' => $value,
'sort' => 'DESC',
);
}
}
}
// We build an array with header values to make some verifications.
foreach ($header as $key => $value) {
foreach ($value as $value2) {
$header_values[] = $value2;
}
}
if ($track_da_files_user_report_enabled) {
$header[] = array(
'data' => t('User datas'),
);
}
// We prepare fields.
$fields = array(
'time',
);
if (isset($track_da_files_single_file_report_datas['id']) && $track_da_files_single_file_report_datas['id'] == '0') {
unset($track_da_files_single_file_report_datas['id']);
}
foreach ($track_da_files_single_file_report_datas as $key => $value) {
if (!empty($value)) {
if ($value == 'id') {
$fields[] = 'id';
$fields[] = 'type';
}
else {
$fields[] = $value;
}
}
}
if ($track_da_files_user_report_enabled && !in_array('uid', $header_values)) {
$fields[] = 'uid';
}
$query = db_select('track_da_files', 't');
$query
->extend('PagerDefault')
->limit(20)
->extend('TableSort')
->orderByHeader($header)
->fields('t', $fields)
->condition('pid', $pid);
$results = $query
->execute();
$rows = array();
// We loop into the results to build table rows for file report table.
foreach ($results as $key => $record) {
foreach ($record as $key2 => $row) {
if ($key2 == 'time') {
$rows[$key][$key2] = format_date($row, 'short');
}
elseif ($key2 == 'id') {
if ($record->type == 'node') {
$node = node_load($row);
$rows[$key][$key2] = l($node->title, $record->type . '/' . $row) . '<br />(' . t('content') . ')';
}
elseif ($record->type == 'comment') {
$comment = comment_load($row);
$rows[$key][$key2] = l($comment->subject, $record->type . '/' . $row, array(
'fragment' => 'comment-' . $row,
)) . '<br />(' . t('comment') . ')';
}
else {
$rows[$key][$key2] = ' ';
}
}
elseif ($key2 == 'type') {
unset($rows[$key][$key2]);
}
elseif ($key2 == 'uid') {
$uid = $row;
$user = user_load($uid);
if ($track_da_files_user_report_enabled) {
if (in_array('uid', $header_values)) {
if (!empty($user->name)) {
$rows[$key][$key2] = theme('username', array(
'account' => $user,
));
}
else {
$rows[$key][$key2] = t('Anonymous user');
}
}
$rows[$key]['view_more'] = l(t('View more'), 'admin/reports/track_da_files/user_report/' . $uid);
}
else {
$rows[$key][$key2] = theme('username', array(
'account' => $user,
));
}
}
else {
$rows[$key][$key2] = $row;
}
}
}
$variables = array(
'header' => $header,
'rows' => $rows,
);
return $variables;
}
/**
* Build variables used to create table which shows datas for a specific user.
*/
function track_da_files_table_build_user_report($uid) {
$track_da_files_user_report_enabled = variable_get('track_da_files_user_report_enabled', 1);
$track_da_files_single_user_report_datas = variable_get('track_da_files_single_user_report_datas', array(
'referer',
'browser',
'browser_version',
'browser_platform',
'ip',
));
if ($track_da_files_user_report_enabled) {
$header = array(
array(
'data' => t('Filename'),
),
array(
'data' => t('time'),
'field' => 'time',
'sort' => 'DESC',
),
);
// Header datas.
foreach ($track_da_files_single_user_report_datas as $data => $value) {
if (!empty($value)) {
if ($value == 'referer') {
$header[] = array(
'data' => t('Displayed from'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser') {
$header[] = array(
'data' => t('Browser'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser_version') {
$header[] = array(
'data' => t('Browser version'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'browser_platform') {
$header[] = array(
'data' => t('Platform'),
'field' => $value,
'sort' => 'DESC',
);
}
elseif ($value == 'ip') {
$header[] = array(
'data' => t('Ip'),
'field' => $value,
'sort' => 'DESC',
);
}
}
}
// We prepare fields.
$fields = array(
'time',
);
foreach ($track_da_files_single_user_report_datas as $key => $value) {
if ($value) {
$fields[] = $value;
}
}
$query = db_select('track_da_files', 't');
$query
->join('track_da_files_paths', 'p', 't.pid = p.pid');
$query
->extend('PagerDefault')
->limit(20)
->extend('TableSort')
->orderByHeader($header)
->fields('p', array(
'fid',
))
->fields('t', $fields)
->condition('uid', $uid);
$results = $query
->execute();
$rows = array();
// We loop into results to build rows for user report table.
foreach ($results as $key => $record) {
foreach ($record as $key2 => $row) {
if ($key2 == 'time') {
$rows[$key][$key2] = format_date($row, 'short');
}
elseif ($key2 == 'fid') {
$file = file_load($row);
if (isset($file->filename)) {
$rows[$key][$key2] = $file->filename;
}
else {
$rows[$key][$key2] = t('No name');
}
}
else {
$rows[$key][$key2] = $row;
}
}
}
$variables = array(
'header' => $header,
'rows' => $rows,
);
return $variables;
}
else {
return drupal_access_denied();
}
}
/**
* Builds a table which shows number of displays by file.
*/
function track_da_files_table($fid = NULL, $pid = NULL) {
$output = '';
$variables = '';
// Load specific CSS.
drupal_add_css(drupal_get_path('module', 'track_da_files') . '/includes/track_da_files.css');
if (!empty($fid) && !empty($pid)) {
$variables = track_da_files_table_build_file_report($fid, $pid);
$file = file_load($fid);
$filename = $file->filename;
$output .= '<p>' . t('Datas for @filename', array(
'@filename' => $filename,
)) . '</p>';
$form = drupal_get_form('track_da_files_table_action_form', $fid, $pid);
}
else {
$variables = track_da_files_table_build();
$form = drupal_get_form('track_da_files_table_action_form');
}
// Table.
$output .= theme('table', $variables);
// Pager.
$output .= theme('pager', array(), 20, 0);
// Clear datas and export to CSV buttons.
$output .= drupal_render($form);
return $output;
}
/**
* Builds a table which shows datas for a specific user.
*/
function track_da_files_table_user_report($uid) {
$output = '';
// Load specific CSS.
drupal_add_css(drupal_get_path('module', 'track_da_files') . '/includes/track_da_files.css');
$variables = track_da_files_table_build_user_report($uid);
$user = user_load($uid);
if ($uid == '0') {
$output .= '<p>' . t('Datas for anonymous users') . '</p>';
}
else {
$output .= '<p>' . t('Datas for !username', array(
'!username' => theme('username', array(
'account' => $user,
)),
)) . '</p>';
}
// Table.
$output .= theme('table', $variables);
// Pager.
$output .= theme('pager', array(), 20, 0);
// Clear datas and export to CSV buttons.
$form = drupal_get_form('track_da_files_user_table_action_form', $uid);
$output .= drupal_render($form);
return $output;
}
/**
* Clear and export forms for main report and file report.
*/
function track_da_files_table_action_form($form, &$form_state) {
if (isset($form_state['build_info']['args'][0]) && isset($form_state['build_info']['args'][1])) {
// File report export.
if (user_access('administer track da files')) {
$form['track_da_files_table_action']['track_da_files_export_files_datas'] = array(
'#type' => 'submit',
'#value' => t('Export datas into CSV file'),
'#submit' => array(
'track_da_files_export_files_datas_submit',
),
);
}
// File report clear.
if (user_access('initialize tracked files displays datas')) {
$form['track_da_files_table_action']['track_da_files_clear_file_datas'] = array(
'#type' => 'fieldset',
'#title' => t('Clear file datas'),
'#description' => t('Datas will be removed for this file.'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['track_da_files_table_action']['track_da_files_clear_file_datas']['clear'] = array(
'#type' => 'submit',
'#value' => t('Remove all datas for this file'),
'#submit' => array(
'track_da_files_clear_file_datas_submit',
),
);
}
}
else {
// Main report export.
if (user_access('administer track da files')) {
$form['track_da_files_table_action']['track_da_files_export_files_datas'] = array(
'#type' => 'submit',
'#value' => t('Export datas into CSV file'),
'#submit' => array(
'track_da_files_export_files_datas_submit',
),
);
}
// Main report clear.
if (user_access('initialize tracked files displays datas')) {
$form['track_da_files_table_action']['track_da_files_clear_file_datas'] = array(
'#type' => 'fieldset',
'#title' => t('Clear all files datas'),
'#description' => t('Datas will be cleared for all files.'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['track_da_files_table_action']['track_da_files_clear_file_datas']['clear'] = array(
'#type' => 'submit',
'#value' => t('Clear datas'),
'#submit' => array(
'track_da_files_clear_file_datas_submit',
),
);
}
}
return $form;
}
/**
* Function to return form for user report clear and export buttons.
*/
function track_da_files_user_table_action_form($form, &$form_state) {
if (isset($form_state['build_info']['args'][0])) {
// User report export.
if (user_access('administer track da files')) {
$form['track_da_files_user_table_action']['track_da_files_export_users_datas'] = array(
'#type' => 'submit',
'#value' => t('Export datas into CSV file'),
'#submit' => array(
'track_da_files_export_users_datas_submit',
),
);
}
// User report clear.
if (user_access('initialize tracked files displays datas')) {
$form['track_da_files_user_table_action']['track_da_files_clear_user_datas'] = array(
'#type' => 'fieldset',
'#title' => t('Clear user datas'),
'#description' => t('Datas will be removed for this user.'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['track_da_files_user_table_action']['track_da_files_clear_user_datas']['clear'] = array(
'#type' => 'submit',
'#value' => t('Remove all datas for this user'),
'#submit' => array(
'track_da_files_clear_user_datas_submit',
),
);
}
}
return $form;
}
Functions
Name | Description |
---|---|
track_da_files_config_form | Settings form. |
track_da_files_table | Builds a table which shows number of displays by file. |
track_da_files_table_action_form | Clear and export forms for main report and file report. |
track_da_files_table_build_file_report | Build variables used to create file report. |
track_da_files_table_build_user_report | Build variables used to create table which shows datas for a specific user. |
track_da_files_table_user_report | Builds a table which shows datas for a specific user. |
track_da_files_user_table_action_form | Function to return form for user report clear and export buttons. |