Projekt

Obecné

Profil

Stáhnout (16.5 KB) Statistiky
| Větev: | Tag: | Revize:
<?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/
*
*/

/**
* Controller performs device active links actions.
*
* @package Controller
*/
class Device_active_links_Controller extends Controller
{
/**
* Constructor, only test if networks is enabled
*/
public function __construct()
{
parent::__construct();
// access control
if (!Settings::get('networks_enabled'))
Controller::error (ACCESS);
}
/**
* Index redirects to show all
*/
public function index()
{
url::redirect('device_active_links/show_all');
}
/**
* Function shows all device active_links.
*
* @param integer $limit_results devices per page
* @param string $order_by sorting column
* @param string $order_by_direction sorting direction
*/
public function show_all($limit_results = 50, $order_by = 'device_id',
$order_by_direction = 'ASC', $page_word = null, $page = 1)
{
// access control
if (!$this->acl_check_view('Device_active_links_Controller', 'active_links'))
Controller::error(ACCESS);
$filter_form = new Filter_form('dal');
$filter_form->add('url_pattern')
->label('URL pattern');
$filter_form->add('name');
$filter_form->add('title')
->label('Link title');
$filter_form->add('show_in_user_grid')
->type('select')
->values(arr::bool());
$filter_form->add('show_in_grid')
->type('select')
->values(arr::bool());
// get new selector
if (is_numeric($this->input->post('record_per_page')))
$limit_results = (int) $this->input->post('record_per_page');
$device_active_link_model = new Device_active_link_Model;
$total_active_links = $device_active_link_model->count_all_active_links($filter_form->as_sql());
// limit check
if (($sql_offset = ($page - 1) * $limit_results) > $total_active_links)
$sql_offset = 0;
// query
$active_links = $device_active_link_model->get_all_active_links(array
(
'offset' => $sql_offset,
'limit' => (int) $limit_results,
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'filter_sql' => $filter_form->as_sql()
));
// headline
$headline = __('Device active links');
// grid of devices
$grid = new Grid('device_active_links', null, array
(
'current' => $limit_results,
'selector_increace' => 50,
'selector_min' => 50,
'selector_max_multiplier' => 20,
'base_url' => Config::get('lang'). '/device_active_links/show_all/'
. $limit_results.'/'.$order_by.'/'.$order_by_direction,
'uri_segment' => 'page',
'total_items' => $total_active_links,
'items_per_page' => $limit_results,
'style' => 'classic',
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'limit_results' => $limit_results,
'filter' => $filter_form
));
if ($this->acl_check_new('Device_active_links_Controller', 'active_links'))
{
$grid->add_new_button('device_active_links/add', 'Add new device active link');
}
$grid->order_field('id')
->label('ID')
->class('center');
$grid->order_field('url_pattern')
->label('URL pattern');
$grid->order_field('name')
->label('Name');
$grid->order_field('title')
->label('Link title');
$grid->order_callback_field('devices_count')
->class('center');
$grid->order_callback_field('as_form')
->label('Send as form')
->callback('callback::enabled_field', '')
->class('center');
$grid->order_callback_field('show_in_user_grid')
->callback('callback::enabled_field', '')
->class('center');
$grid->order_callback_field('show_in_grid')
->callback('callback::enabled_field', '')
->class('center');
$actions = $grid->grouped_action_field();
if ($this->acl_check_view('Device_active_links_Controller', 'active_links'))
{
$actions->add_action('id')
->icon_action('show')
->url('device_active_links/show');
}
if ($this->acl_check_edit('Device_active_links_Controller', 'active_links'))
{
$actions->add_action('id')
->icon_action('edit')
->url('device_active_links/edit');
}
if ($this->acl_check_delete('Device_active_links_Controller', 'active_links'))
{
$actions->add_action('id')
->icon_action('delete')
->url('device_active_links/delete')
->class('delete_link');
}
$grid->datasource($active_links);
// view
$view = new View('main');
$view->title = $headline;
$view->breadcrumbs = $headline;
$view->content = new View('show_all');
$view->content->headline = $headline;
$view->content->table = $grid;
$view->render(TRUE);
} // end of show_all function
/**
* Function shows device action link.
*
* @param integer $device_id
*/
public function show($active_link_id = null)
{
if (!$this->acl_check_view('Device_active_links_Controller', 'active_links'))
{
Controller::error(ACCESS);
}
if (!isset($active_link_id))
{
Controller::warning(PARAMETER);
}
$active_link = new Device_active_link_Model($active_link_id);
if ($active_link->id == 0)
{
Controller::error(RECORD);
}
$devices = $active_link->get_active_link_devices();
$device_templates = $active_link->get_active_link_devices(NULL,
Device_active_link_Model::TYPE_TEMPLATE
);
$devices_grid = new Grid('devices', null, array
(
'use_paginator' => false,
'use_selector' => false,
'total_items' => $devices->count()
));
$devices_grid->Field('id')
->label('ID');
$devices_grid->Field('name');
if ($this->acl_check_view('Devices_Controller', 'devices'))
{
$actions = $devices_grid->grouped_action_field();
$actions->add_conditional_action('id')
->icon_action('show')
->url('devices/show');
}
$devices_grid->datasource($devices);
$device_templates_grid = new Grid('device_templaes', null, array
(
'use_paginator' => false,
'use_selector' => false,
'total_items' => $device_templates->count()
));
$device_templates_grid->Field('id')
->label('ID');
$device_templates_grid->Field('name');
if ($this->acl_check_view('Device_templates_Controller', 'device_template'))
{
$actions = $device_templates_grid->grouped_action_field();
$actions->add_conditional_action('id')
->icon_action('show')
->url('device_templates/show');
}
$device_templates_grid->datasource($device_templates);
// breadcrumbs navigation
$breadcrumbs = breadcrumbs::add()
->link('device_active_links/show_all', 'Device active links',
$this->acl_check_view('Device_active_links_Controller','active_links'))
->disable_translation()
->text('ID ' . $active_link->id . ' - ' .
(!$active_link->name ? $active_link->title : $active_link->name));
// view
$view = new View('main');
$view->title = __('Device active link').' '.
(!$active_link->name ? $active_link->title : $active_link->name);
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('device_active_links/show');
$view->content->active_link = $active_link;
$view->content->devices_grid = $devices_grid;
$view->content->device_templates_grid = $device_templates_grid;
$view->content->headline = __('Device active link').' '.
(!$active_link->name ? $active_link->title : $active_link->name);
$view->render(TRUE);
} // end of show
/**
* Adds new device active link
*/
public function add()
{
if (!$this->acl_check_new('Device_active_links_Controller', 'active_links'))
{
Controller::error(ACCESS);
}
$device_model = new Device_Model();
$devices = $device_model->select_list_device();
$device_template_model = new Device_template_Model();
$all_device_templates = $device_template_model->get_all_templates();
$device_templates = array();
foreach ($all_device_templates AS $dt)
{
$device_templates[$dt->id] = $dt->name.' ('.$dt->enum_type_translated.')';
}
// forge form
$form = new Forge();
$form->input('url_pattern')
->label('URL pattern')
->help(help::hint('url_pattern'))
->rules('required')
->style('width:400px');
$form->input('name')
->label('Name')
->help(help::hint('active_link_name'));
$form->input('title')
->label('Link title')
->help(help::hint('active_link_title'))
->rules('required');
$form->dropdown('as_form')
->label('Send as form')
->help(help::hint('send_as_form'))
->options(arr::bool())
->selected(0);
$form->dropdown('show_in_user_grid')
->options(arr::bool());
$form->dropdown('show_in_grid')
->options(arr::bool());
$form->dropdown('devices[]')
->label('Devices')
->options($devices)
->multiple('multiple')
->size(20);
$form->dropdown('device_templates[]')
->label('Device templates')
->help(help::hint('active_link_device_templates'))
->options($device_templates)
->multiple('multiple')
->size(20);
$form->submit('Add');
// validates form and saves data
if ($form->validate())
{
$form_data = $form->as_array();
if (!$form_data['devices'])
{
$form_data['devices'] = array();
}
$dal = new Device_active_link_Model();
try
{
$dal->transaction_start();
$dal->url_pattern = $form_data['url_pattern'];
$dal->name = $form_data['name'];
$dal->title = $form_data['title'];
$dal->show_in_user_grid = $form_data['show_in_user_grid'];
$dal->show_in_grid = $form_data['show_in_grid'];
$dal->as_form = $form_data['as_form'];
$dal->save_throwable();
// map devices
$dal->map_devices_to_active_link($form_data['devices'], $dal->id);
// map templates
$dal->map_devices_to_active_link(
$form_data['device_templates'],
$dal->id,
Device_active_link_Model::TYPE_TEMPLATE
);
$dal->transaction_commit();
$this->redirect('device_active_links/show_all');
}
catch (Exception $e)
{
$dal->transaction_rollback();
Log::add_exception($e);
status::error('Device active link has not been successfully saved.', $e);
}
}
$headline = __('Add new device active link');
$breadcrumbs = breadcrumbs::add()
->link('device_active_links/show_all', 'Device active links',
$this->acl_check_view('Device_active_links_Controller', 'active_links'))
->disable_translation()
->text($headline);
$view = new View('main');
$view->title = $headline;
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('device_active_links/add');
$view->content->form = $form->html();
$view->content->headline = $headline;
$view->render(TRUE);
} // end of function add
/**
* Function edits device.
*
* @param integer $device_active_link_id
*/
public function edit($device_active_link_id = null)
{
if (!$this->acl_check_edit('Device_active_links_Controller', 'active_links'))
{
Controller::error(ACCESS);
}
// Get devices
$device_model = new Device_Model();
$devices = $device_model->select_list_device();
// Get device templates
$device_template_model = new Device_template_Model();
$all_device_templates = $device_template_model->get_all_templates();
$device_templates = array();
foreach ($all_device_templates AS $dt)
{
$device_templates[$dt->id] = $dt->name.' ('.$dt->enum_type_translated.')';
}
// Get selected devices
$active_link = new Device_active_link_Model($device_active_link_id);
$selected_devices = array();
foreach ($active_link->get_active_link_devices() AS $device)
{
$selected_devices[] = $device->id;
}
// get selected device templates
$selected_device_templates = array();
foreach ($active_link->get_active_link_devices(NULL, Device_active_link_Model::TYPE_TEMPLATE) AS $dt)
{
$selected_device_templates[] = $dt->id;
}
// forge form
$form = new Forge();
$form->input('url_pattern')
->label('URL pattern')
->help(help::hint('url_pattern'))
->rules('required')
->value(htmlspecialchars_decode($active_link->url_pattern))
->style('width:600px');
$form->input('name')
->label('Name')
->help(help::hint('active_link_name'))
->value($active_link->name);
$form->input('title')
->label('Link title')
->help(help::hint('active_link_title'))
->rules('required')
->value($active_link->title);
$form->dropdown('as_form')
->label('Send as form')
->help(help::hint('send_as_form'))
->options(arr::bool())
->selected($active_link->as_form);
$form->dropdown('show_in_user_grid')
->options(arr::bool())
->selected($active_link->show_in_user_grid);
$form->dropdown('show_in_grid')
->options(arr::bool())
->selected($active_link->show_in_grid);
$form->dropdown('devices[]')
->label('Devices')
->options($devices)
->selected($selected_devices)
->multiple('multiple')
->size(20);
$form->dropdown('device_templates[]')
->label('Device templates')
->help(help::hint('active_link_device_templates'))
->options($device_templates)
->selected($selected_device_templates)
->multiple('multiple')
->size(20);
$form->submit('Edit');
// validates form and saves data
if ($form->validate())
{
$form_data = $form->as_array();
if (!$form_data['devices'])
{
$form_data['devices'] = array();
}
try
{
$active_link->transaction_start();
$active_link->url_pattern = $form_data['url_pattern'];
$active_link->name = $form_data['name'];
$active_link->title = $form_data['title'];
$active_link->show_in_user_grid = $form_data['show_in_user_grid'];
$active_link->show_in_grid = $form_data['show_in_grid'];
$active_link->as_form = $form_data['as_form'];
$active_link->save_throwable();
$active_link->unmap_devices_from_active_link($active_link->id);
$active_link->map_devices_to_active_link($form_data['devices'], $active_link->id);
$active_link->unmap_devices_from_active_link($active_link->id,
Device_active_link_Model::TYPE_TEMPLATE
);
$active_link->map_devices_to_active_link($form_data['device_templates'], $active_link->id,
Device_active_link_Model::TYPE_TEMPLATE
);
$active_link->transaction_commit();
$this->redirect(Path::instance()->previous());
}
catch (Exception $e)
{
$active_link->transaction_rollback();
Log::add_exception($e);
status::error('Device active link has not been successfully saved.', $e);
}
}
$headline = __('Edit device active link');
$breadcrumbs = breadcrumbs::add()
->link('device_active_links/show_all', 'Device active links',
$this->acl_check_view('Device_active_links_Controller', 'active_links'))
->link('device_active_links/show/' . $active_link->id,
'ID ' . $active_link->id . ' - ' .
(!$active_link->name ? $active_link->title : $active_link->name),
$this->acl_check_view('Device_active_links_Controller','active_links'))
->disable_translation()
->text($headline);
$view = new View('main');
$view->title = __('Edit device active link').' '.
(!$active_link->name ? $active_link->title : $active_link->name);
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('device_active_links/add');
$view->content->form = $form->html();
$view->content->headline = __('Edit device active link').' '.
(!$active_link->name ? $active_link->title : $active_link->name);
$view->render(TRUE);
}
/**
* Deletes device action link
*
* @author David Raška
* @param integer $device_active_link_id
*/
public function delete($device_active_link_id = null)
{
if (!isset($device_active_link_id))
{
Controller::warning(PARAMETER);
}
$active_link = new Device_active_link_Model($device_active_link_id);
if (!$active_link->id)
{
Controller::error(RECORD);
}
if (!$this->acl_check_delete('Device_active_links_Controller', 'active_links'))
{
Controller::error(ACCESS);
}
$linkback = Path::instance()->previous();

if (url::slice(url_lang::uri($linkback), 1, 1) == 'show')
{
$linkback = 'device_active_links/show_all';
}
// delete
try
{
$active_link->delete_throwable();
status::success('Device active link has been successfully deleted.');
}
catch (Exception $e)
{
Log::add_exception($e);
status::error(__($e->getMessage()), $e);
}
$this->redirect($linkback);
}
}
(20-20/90)