|
<?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|
* This file is part of open source system FreeNetIS
|
|
* and it is released under GPLv3 licence.
|
|
*
|
|
* More info about licence can be found:
|
|
* http://www.gnu.org/licenses/gpl-3.0.html
|
|
*
|
|
* More info about project can be found:
|
|
* http://www.freenetis.org/
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Ulogd controller manages control over members traffic.
|
|
*
|
|
* @author Kliment Michal
|
|
* @package Controller
|
|
*/
|
|
class Ulogd_Controller extends Controller
|
|
{
|
|
/**
|
|
* Units
|
|
*
|
|
* @var array[string]
|
|
*/
|
|
public static $units = array
|
|
(
|
|
'kB', 'MB', 'GB', 'TB'
|
|
);
|
|
|
|
/**
|
|
* Contructs controller, only to setting of menu
|
|
*
|
|
* @author Michal Kliment
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
// contains items of menu
|
|
$this->sections = array
|
|
(
|
|
'actual_ip_addresses_traffic' => __('Actual traffic of IP addresses'),
|
|
'actual_members_traffic' => __('Actual traffic of members'),
|
|
'time_members_traffic' => __('Traffic of members in time')
|
|
);
|
|
|
|
// time of next update of ulogd
|
|
$this->ulogd_update_next = Settings::get('ulogd_update_last')
|
|
+ Settings::get('ulogd_update_interval');
|
|
|
|
// time of previous update ulogd
|
|
$this->ulogd_update_prev = Settings::get('ulogd_update_last')
|
|
- Settings::get('ulogd_update_interval');
|
|
}
|
|
|
|
/**
|
|
* Redirects to actual traffic of ip addresses
|
|
*
|
|
* @author Michal Kliment
|
|
*/
|
|
public function index()
|
|
{
|
|
url::redirect('ulogd/actual_ip_addresses_traffic');
|
|
}
|
|
|
|
/**
|
|
* Shows actual traffic of ip addresses
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $limit_results
|
|
* @param string $order_by
|
|
* @param string $order_by_direction
|
|
* @param string $page_word
|
|
* @param integer $page
|
|
*/
|
|
public function actual_ip_addresses_traffic(
|
|
$limit_results = 100, $order_by = '', $order_by_direction = 'DESC',
|
|
$page_word = null, $page = 1)
|
|
{
|
|
// access control
|
|
if (!$this->acl_check_view(get_class($this),'ip_address'))
|
|
Controller::error(ACCESS);
|
|
|
|
// gets new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
// by default orders by ulogd's type of traffic of active members
|
|
if ($order_by == '')
|
|
$order_by = Settings::get('ulogd_active_type');
|
|
|
|
// ASC or DESC
|
|
if (strtolower($order_by_direction) != 'asc')
|
|
$order_by_direction = 'DESC';
|
|
|
|
$ip_addresses_traffic_model = new Ip_addresses_traffic_Model();
|
|
|
|
// counts all traffics of ip addresses
|
|
$total_ip_addresses_traffics = $ip_addresses_traffic_model->count_all_ip_addresses_traffics();
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_ip_addresses_traffics)
|
|
$sql_offset = 0;
|
|
|
|
// returns all traffics of ip addresses
|
|
$ip_addresses_traffics = $ip_addresses_traffic_model->get_all_ip_addresses_traffics(
|
|
$sql_offset, (int) $limit_results, $order_by, $order_by_direction
|
|
);
|
|
|
|
// create grid
|
|
$grid = new Grid('actual_ip_addresses_traffic', '', array
|
|
(
|
|
'use_paginator' => true,
|
|
'use_selector' => true,
|
|
'current' => $limit_results,
|
|
'selector_increace' => 100,
|
|
'selector_min' => 100,
|
|
'selector_max_multiplier' => 20,
|
|
'base_url' => Config::get('lang').'/ulogd/actual_ip_addresses_traffic/'
|
|
. $limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|
'total_items' => $total_ip_addresses_traffics,
|
|
'items_per_page' => $limit_results,
|
|
'style' => 'classic',
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'limit_results' => $limit_results,
|
|
));
|
|
|
|
// first number for order number field
|
|
// direction for order number field
|
|
if ($order_by_direction == 'DESC')
|
|
{
|
|
$first_number = $sql_offset;
|
|
$direction = 1;
|
|
}
|
|
else
|
|
{
|
|
$first_number = $total_ip_addresses_traffics-($page-1)*$limit_results+1;
|
|
$direction = -1;
|
|
}
|
|
|
|
$grid->order_callback_field(Settings::get('ulogd_active_type'))
|
|
->label(__('Order'))
|
|
->callback('callback::ulogd_order_number_field', $first_number, $direction)
|
|
->help(help::hint('ulogd_order'))
|
|
->class('right');
|
|
|
|
$grid->callback_field('ip_address')
|
|
->label(__('Ip address'))
|
|
->class('right')
|
|
->order(FALSE)
|
|
->callback('callback::ulogd_ip_address_field');
|
|
|
|
$grid->order_callback_field('upload')
|
|
->label(__('Upload'))
|
|
->callback('callback::ulogd_traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('download')
|
|
->label(__('Download'))
|
|
->callback('callback::ulogd_traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('total')
|
|
->label(__('Total'))
|
|
->callback('callback::ulogd_traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('member_id')
|
|
->label(__('Member'))
|
|
->callback('callback::ulogd_member_field', __('Is not in system').'!');
|
|
|
|
$grid->datasource($ip_addresses_traffics);
|
|
|
|
$view = new View('main');
|
|
$view->title = __('Actual traffic of ip addresses');
|
|
$view->content = new View('ulogd/show_all');
|
|
$view->content->headline = __('Actual traffic of ip addresses');
|
|
$view->content->grid = $grid;
|
|
$view->content->current = 'actual_ip_addresses_traffic';
|
|
$view->content->text = __('Traffic for the period').': '.
|
|
date('Y/m/d H:i:s', $this->ulogd_update_prev) . ' - '.
|
|
date('Y/m/d H:i:s', Settings::get('ulogd_update_last')).
|
|
', '.__('Next update').': '.
|
|
date('Y/m/d H:i:s',$this->ulogd_update_next);
|
|
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows actual traffic of members
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $limit_results
|
|
* @param string $order_by
|
|
* @param string $order_by_direction
|
|
* @param string $page_word
|
|
* @param integer $page
|
|
*/
|
|
public function actual_members_traffic(
|
|
$limit_results = 100, $order_by = '', $order_by_direction = 'DESC',
|
|
$page_word = null, $page = 1)
|
|
{
|
|
// access control
|
|
if (!$this->acl_check_view(get_class($this),'member'))
|
|
Controller::error(ACCESS);
|
|
|
|
// gets new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
// by default orders by ulogd's type of traffic of active members
|
|
if ($order_by == '')
|
|
$order_by = Settings::get('ulogd_active_type');
|
|
|
|
// ASC or DESC
|
|
if (strtolower($order_by_direction) != 'asc')
|
|
$order_by_direction = 'DESC';
|
|
|
|
$members_traffic_model = new Members_traffic_Model();
|
|
|
|
// counts all traffics of members
|
|
$total_members_traffics = $members_traffic_model->count_all_members_traffics();
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_members_traffics)
|
|
$sql_offset = 0;
|
|
|
|
// returns all traffics of members
|
|
$members_traffics = $members_traffic_model->get_all_members_traffics(
|
|
$sql_offset, (int) $limit_results, $order_by, $order_by_direction
|
|
);
|
|
|
|
// create grid
|
|
$grid = new Grid('actual_members_traffic', '', array
|
|
(
|
|
'use_paginator' => true,
|
|
'use_selector' => true,
|
|
'current' => $limit_results,
|
|
'selector_increace' => 100,
|
|
'selector_min' => 100,
|
|
'selector_max_multiplier' => 20,
|
|
'base_url' => Config::get('lang').'/ulogd/actual_members_traffic/'
|
|
.$limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|
'total_items' => $total_members_traffics,
|
|
'items_per_page' => $limit_results,
|
|
'style' => 'classic',
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'limit_results' => $limit_results,
|
|
));
|
|
|
|
// first number for order number field
|
|
// direction for order number field
|
|
if ($order_by_direction == 'DESC')
|
|
{
|
|
$first_number = $sql_offset;
|
|
$direction = 1;
|
|
}
|
|
else
|
|
{
|
|
$first_number = $total_ip_addresses_traffics-($page-1)*$limit_results+1;
|
|
$direction = -1;
|
|
}
|
|
|
|
$grid->order_callback_field(Settings::get('ulogd_active_type'))
|
|
->label(__('Order'))
|
|
->callback('callback::order_number_field', $first_number, $direction)
|
|
->help(help::hint('ulogd_order'))
|
|
->class('right');
|
|
|
|
$grid->callback_field('member_id')
|
|
->label(__('Member'))
|
|
->callback('callback::member_field')
|
|
->order(FALSE);
|
|
|
|
$grid->order_callback_field('upload')
|
|
->label(__('Upload'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('download')
|
|
->label(__('Download'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('total')
|
|
->label(__('Total'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('active')
|
|
->label(__('Active'))
|
|
->callback('callback::active_field')
|
|
->class('center')
|
|
->help(help::hint('ulogd_active_button'));
|
|
|
|
$grid->datasource($members_traffics);
|
|
|
|
$view = new View('main');
|
|
$view->title = __('Actual traffic of members');
|
|
$view->content = new View('ulogd/show_all');
|
|
$view->content->headline = __('Actual traffic of members');
|
|
$view->content->grid = $grid;
|
|
$view->content->current = 'actual_members_traffic';
|
|
$view->content->text = __('Traffic for the period').': '.
|
|
date('Y/m/d H:i:s', $this->ulogd_update_prev) . ' - '.
|
|
date('Y/m/d H:i:s', Settings::get('ulogd_update_last')).
|
|
', '.__('Next update').': '.
|
|
date('Y/m/d H:i:s',$this->ulogd_update_next);
|
|
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows traffic of members in time
|
|
*
|
|
* @author Michal Kliment
|
|
* @param date $date_from
|
|
* @param date $date_to
|
|
* @param integer $limit_results
|
|
* @param string $order_by
|
|
* @param string $order_by_direction
|
|
* @param string $page_word
|
|
* @param integer $page
|
|
*/
|
|
public function time_members_traffic(
|
|
$date_from = NULL, $date_to = NULL, $limit_results = 100, $order_by = '',
|
|
$order_by_direction = 'DESC', $page_word = null, $page = 1)
|
|
{
|
|
// access control
|
|
if (!$this->acl_check_view(get_class($this),'member'))
|
|
Controller::error(ACCESS);
|
|
|
|
// gets new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
// date from is not valid, uses actual date
|
|
if (!$date_from || !valid::date_string($date_from))
|
|
$date_from = date('Y-m-d');
|
|
|
|
// date to is not valid, uses actual date
|
|
if (!$date_to || !valid::date_string($date_to) || $date_to < $date_from)
|
|
$date_to = $date_from;
|
|
|
|
// by default orders by ulogd's type of traffic of active members
|
|
if ($order_by == '')
|
|
$order_by = Settings::get('ulogd_active_type');
|
|
|
|
// ASC or DESC
|
|
if (strtolower($order_by_direction) != 'asc')
|
|
$order_by_direction = 'DESC';
|
|
|
|
$members_traffics_daily_model = new Members_traffics_daily_Model();
|
|
|
|
// count all daily traffics of members
|
|
$total_members_traffics = $members_traffics_daily_model->count_all_members_traffics_by_dates(
|
|
$date_from, $date_to
|
|
);
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_members_traffics)
|
|
$sql_offset = 0;
|
|
|
|
// returns all daily traffics of members
|
|
$members_traffics = $members_traffics_daily_model->get_all_members_traffics_by_dates(
|
|
$date_from, $date_to, $sql_offset, (int) $limit_results,
|
|
$order_by, $order_by_direction
|
|
);
|
|
|
|
// create grid
|
|
$grid = new Grid('time_members_traffic', '', array
|
|
(
|
|
'use_paginator' => true,
|
|
'use_selector' => true,
|
|
'current' => $limit_results,
|
|
'selector_increace' => 100,
|
|
'selector_min' => 100,
|
|
'selector_max_multiplier' => 20,
|
|
'base_url' => Config::get('lang').'/ulogd/time_members_traffic/'
|
|
.$date_from.'/'.$date_to.'/'.$limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|
'total_items' => $total_members_traffics,
|
|
'items_per_page' => $limit_results,
|
|
'style' => 'classic',
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'limit_results' => $limit_results,
|
|
'variables' => $date_from.'/'.$date_to.'/',
|
|
'url_array_ofset' => 2
|
|
));
|
|
|
|
// first number for order number field
|
|
// direction for order number field
|
|
if ($order_by_direction == 'DESC')
|
|
{
|
|
$first_number = $sql_offset;
|
|
$direction = 1;
|
|
}
|
|
else
|
|
{
|
|
$first_number = $total_ip_addresses_traffics-($page-1)*$limit_results+1;
|
|
$direction = -1;
|
|
}
|
|
|
|
$grid->order_callback_field(Settings::get('ulogd_active_type'))
|
|
->label(__('Order'))
|
|
->callback('callback::order_number_field', $first_number, $direction)
|
|
->help(help::hint('ulogd_order'))
|
|
->class('right');
|
|
|
|
$grid->callback_field('member_id')
|
|
->label(__('Member'))
|
|
->callback('callback::member_field')
|
|
->order(FALSE);
|
|
|
|
$grid->order_callback_field('upload')
|
|
->label(__('Upload'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('download')
|
|
->label(__('Download'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('total')
|
|
->label(__('Total'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->datasource($members_traffics);
|
|
|
|
// form to select date
|
|
$form = new Forge(url::base(TRUE).url::current(TRUE));
|
|
|
|
$form->group('Choose date');
|
|
|
|
$form->input('date_from')
|
|
->label(__('Date from').':')
|
|
->rules('required|valid_date_string')
|
|
->value($date_from);
|
|
|
|
$form->input('date_to')
|
|
->label(__('Date to').':')
|
|
->rules('required|valid_date_string')
|
|
->value($date_to);
|
|
|
|
$form->submit('Save');
|
|
|
|
// form is validate
|
|
if ($form->validate())
|
|
{
|
|
$form_data = $form->as_array();
|
|
|
|
// redirect to this page with new dates
|
|
url::redirect(
|
|
url_lang::base().'ulogd/time_members_traffic/'.
|
|
$form_data['date_from'].'/'.$form_data['date_to']
|
|
);
|
|
}
|
|
|
|
$view = new View('main');
|
|
$view->title = __('Traffic of members in time');
|
|
$view->content = new View('ulogd/show_all');
|
|
$view->content->headline = __('Traffic of members in time');
|
|
$view->content->grid = $form->html().'<br /><br />'.$grid;
|
|
$view->content->current = 'time_members_traffic';
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows traffics of member
|
|
*
|
|
* @author Michal Kliment
|
|
* @param type $member_id
|
|
* @param type $type
|
|
* @param type $limit_results
|
|
* @param string $order_by
|
|
* @param type $order_by_direction
|
|
* @param type $page_word
|
|
* @param type $page
|
|
*/
|
|
public function show_by_member (
|
|
$member_id = NULL, $type = 'daily', $limit_results = 50,
|
|
$order_by = NULL, $order_by_direction = 'ASC', $page_word = null,
|
|
$page = 1)
|
|
{
|
|
$allowed_types = array('daily', 'weekly', 'monthly', 'yearly');
|
|
$default_order_by = array('day', 'week', 'month', 'year');
|
|
|
|
// bad parameter
|
|
if (!$member_id || !is_numeric($member_id) || !in_array($type, $allowed_types))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$member = new Member_Model($member_id);
|
|
|
|
// member doesn't exist
|
|
if (!$member->id)
|
|
Controller::error(RECORD);
|
|
|
|
// access control
|
|
if (!$this->acl_check_view(get_class($this),'member', $member->id))
|
|
Controller::error(ACCESS);
|
|
|
|
// get new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
$type_number = array_search($type, $allowed_types);
|
|
|
|
// load default order by if is not set
|
|
if (!$order_by)
|
|
$order_by = $default_order_by[$type_number];
|
|
|
|
// filter
|
|
|
|
$filter_form = new Filter_form('d');
|
|
|
|
if ($type_number == 0)
|
|
{
|
|
$filter_form->add('day')
|
|
->type('date');
|
|
}
|
|
|
|
if ($type_number == 1)
|
|
{
|
|
$filter_form->add('week')
|
|
->type('number');
|
|
}
|
|
|
|
if ($type_number == 2)
|
|
{
|
|
$filter_form->add('month')
|
|
->type('select_number')
|
|
->values(array
|
|
(
|
|
1 => __('January'),
|
|
2 => __('February'),
|
|
3 => __('March'),
|
|
4 => __('April'),
|
|
5 => __('May'),
|
|
6 => __('June'),
|
|
7 => __('July'),
|
|
8 => __('August'),
|
|
9 => __('September'),
|
|
10 => __('October'),
|
|
11 => __('November'),
|
|
12 => __('December')
|
|
));
|
|
}
|
|
|
|
if ($type_number == 3)
|
|
{
|
|
$filter_form->add('year')
|
|
->type('number')->values(date::years());
|
|
}
|
|
|
|
$filter_form->add('upload')
|
|
->type('number');
|
|
|
|
$filter_form->add('download')
|
|
->type('number');
|
|
|
|
if ($type_number > 0)
|
|
{
|
|
$filter_form->add('avg_upload')
|
|
->label(__('Avarage day upload'))
|
|
->type('number');
|
|
|
|
$filter_form->add('avg_download')
|
|
->label(__('Avarage day download'))
|
|
->type('number');
|
|
}
|
|
|
|
$members_traffics_daily_model = new Members_traffics_daily_Model();
|
|
|
|
$total_traffics = $members_traffics_daily_model->count_member_traffics(
|
|
$member->id, $type, $filter_form->as_sql()
|
|
);
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_traffics)
|
|
$sql_offset = 0;
|
|
|
|
$traffics = $members_traffics_daily_model->get_member_traffics(
|
|
$member->id, $type, $sql_offset, $limit_results,
|
|
$order_by, $order_by_direction, $filter_form->as_sql()
|
|
);
|
|
|
|
$grid = new Grid('members', null, array
|
|
(
|
|
'current' => $limit_results,
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'total_items' => $total_traffics,
|
|
'selector_increace' => 50,
|
|
'selector_min' => 50,
|
|
'base_url' => Config::get('lang').'/ulogd/show_by_member/'
|
|
.$member_id.'/'.$type.'/'.$limit_results.'/'
|
|
.$order_by.'/'.$order_by_direction,
|
|
'uri_segment' => 'page',
|
|
'variables' => $member_id.'/'.$type.'/',
|
|
'url_array_ofset' => 2,
|
|
'style' => 'classic',
|
|
'total_items' => $total_traffics,
|
|
'items_per_page' => $limit_results,
|
|
'filter' => $filter_form
|
|
));
|
|
|
|
if ($type_number == 0)
|
|
{
|
|
$grid->order_field('day')
|
|
->label(__('Day'))
|
|
->class('center');
|
|
}
|
|
|
|
if ($type_number == 1)
|
|
{
|
|
$grid->order_callback_field('week')
|
|
->label(__('Week'))
|
|
->callback('callback::week_field')
|
|
->class('center');
|
|
}
|
|
|
|
if ($type_number == 2)
|
|
{
|
|
$grid->order_callback_field('month')
|
|
->label(__('Month'))
|
|
->callback('callback::month_field')
|
|
->class('center');
|
|
}
|
|
|
|
if ($type_number == 3)
|
|
{
|
|
$grid->order_field('year')
|
|
->label(__('Year'))
|
|
->class('center');
|
|
}
|
|
|
|
$grid->order_callback_field('upload')
|
|
->label(__('Upload'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('download')
|
|
->label(__('Download'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('total')
|
|
->label(__('Total'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
if ($type_number > 0)
|
|
{
|
|
$grid->order_callback_field('avg_upload')
|
|
->label(__('Avarage day upload'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
|
|
$grid->order_callback_field('avg_download')
|
|
->label(__('Avarage day download'))
|
|
->callback('callback::traffic_field')
|
|
->class('right');
|
|
}
|
|
|
|
$grid->datasource($traffics);
|
|
|
|
$arr_types = array();
|
|
|
|
foreach ($allowed_types as $allowed_type)
|
|
{
|
|
$arr_types[] = __(''.$allowed_type);
|
|
}
|
|
|
|
// form to group by type
|
|
$form = new Forge(url::base(TRUE).url::current(TRUE));
|
|
|
|
$form->dropdown('type')
|
|
->label(__('Group by').':')
|
|
->options($arr_types)
|
|
->selected($type_number);
|
|
|
|
$form->submit('Submit');
|
|
|
|
if ($form->validate())
|
|
{
|
|
url::redirect(
|
|
"ulogd/show_by_member/$member_id/".
|
|
$allowed_types[$form->type->value]
|
|
);
|
|
}
|
|
|
|
// breadcrumbs navigation
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('members/show_all', 'Members',
|
|
$this->acl_check_view('Members_Controller','members'))
|
|
->disable_translation()
|
|
->link('members/show/'.$member->id,
|
|
"ID $member->id - $member->name",
|
|
$this->acl_check_view(
|
|
'Members_Controller','members', $member->id
|
|
)
|
|
)
|
|
->enable_translation()
|
|
->text('Show traffic');
|
|
|
|
$view = new View('main');
|
|
$view->google_jsapi_enabled = TRUE;
|
|
$view->content = new View('ulogd/show_by_member');
|
|
$view->content->js_data_array_str = '';
|
|
|
|
$current_unit_id = 0;
|
|
// due to bug in Google Chart it draw graph only if there are more than 1 record
|
|
if ($total_traffics > 1)
|
|
{
|
|
$div = 1;
|
|
|
|
// finds ideal unit of transmitted data
|
|
if ($avg = $members_traffics_daily_model->avg_member_traffics($member->id, $type))
|
|
{
|
|
$val = ($avg->upload > $avg->download) ? $avg->upload : $avg->download;
|
|
|
|
while (($val /= $div) > 1024)
|
|
{
|
|
$div *= 1024;
|
|
$current_unit_id++;
|
|
}
|
|
}
|
|
|
|
$traffics = $members_traffics_daily_model->get_member_traffics(
|
|
$member->id, $type, 0, 0, '', '', $filter_form->as_sql()
|
|
);
|
|
|
|
foreach ($traffics as $traffic)
|
|
{
|
|
switch ($type)
|
|
{
|
|
case 'daily':
|
|
$text = $traffic->day;
|
|
$title = __('Day');
|
|
break;
|
|
case 'weekly':
|
|
$text = $traffic->week.'/'.$traffic->year;
|
|
$title = __('Week');
|
|
break;
|
|
case 'monthly':
|
|
$text = $traffic->month.'/'.$traffic->year;
|
|
$title = __('Month');
|
|
break;
|
|
case 'yearly':
|
|
$text = $traffic->year;
|
|
$title = __('Year');
|
|
break;
|
|
}
|
|
|
|
$view->content->js_data_array_str .= "
|
|
['$text', ".num::decimal_point(round($traffic->upload/$div,2)).
|
|
", ".num::decimal_point(round($traffic->download/$div,2))."],";
|
|
}
|
|
}
|
|
|
|
$view->title = __('Traffic of member').' '.$member->name;
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content->member = $member;
|
|
$view->content->title = __('Traffic of member').' '.$member->name;
|
|
$view->content->total_traffics = $total_traffics;
|
|
$view->content->current_unit_id = $current_unit_id;
|
|
$view->content->grid = $grid;
|
|
$view->content->form = $form;
|
|
$view->render(TRUE);
|
|
}
|
|
}
|