Projekt

Obecné

Profil

Stáhnout (9.14 KB) Statistiky
| Větev: | Tag: | Revize:
31ca0a32 Michal Kliment
<?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 manages automatical notification of the notification message.
*
* @package Controller
* @author Ondřej Fibich
*/
class Messages_auto_settings_Controller extends Controller
{
/**
* Only enable if notification enabled
*/
public function __construct()
{
parent::__construct();
if (!module::e('notification'))
self::error(ACCESS);
}

/**
* Shows all settings of the given message.
*/
public function show($message_id = NULL)
{
// check param
if (!intval($message_id))
{
self::warning(PARAMETER);
}
$message = new Message_Model($message_id);
$message_aa = new Messages_automatical_activation_Model();
// check if exists
if (!$message || !$message->id ||
!Message_Model::can_be_activate_automatically($message->type))
{
self::error(RECORD);
}
// access check
if (!$this->acl_check_view('Messages_Controller', 'auto_config'))
{
self::error(ACCESS);
}

// gets data
$query = $message_aa->get_message_settings($message->id);

// grid
$grid = new Grid('messages_auto_settings', null, array
(
'use_paginator' => false,
'use_selector' => false
));

if ($this->acl_check_new('Messages_Controller', 'auto_config'))
{
$grid->add_new_button(
'messages_auto_settings/add/' . $message->id,
__('Add new rule'), array('class' => 'popup_link')
);
}

$grid->field('id')
->label('ID');
$grid->callback_field('type')
->callback('callback::message_auto_setting_type');
$grid->callback_field('attribute')
->callback('callback::message_auto_setting_attribute');
if (Settings::get('redirection_enabled'))
{
$grid->callback_field('redirection_enabled')
->callback('callback::boolean')
->label('Redirection');
}
if (Settings::get('email_enabled'))
{
$grid->callback_field('email_enabled')
->callback('callback::boolean')
->label('E-mail');
}
if (Settings::get('sms_enabled'))
{
$grid->callback_field('sms_enabled')
->callback('callback::boolean')
->label('SMS');
}
$actions = $grid->grouped_action_field();
if ($this->acl_check_delete('Messages_Controller', 'auto_config'))
{
$actions->add_action()
->icon_action('delete')
->url('messages_auto_settings/delete')
->class('delete_link');
}
// load datasource
$grid->datasource($query);
// bread crumbs
$breadcrumbs = breadcrumbs::add()
->link('messages/show_all', 'Messages',
$this->acl_check_view('Messages_Controller', 'message'))
->text($message->name)
->text('Automatical activation settings')
->html();

// main view
$view = new View('main');
$view->title = __('Automatical activation settings');
$view->content = new View('show_all');
$view->breadcrumbs = $breadcrumbs;
$view->content->headline = __('Automatical activation settings');
$view->content->table = $grid;
$view->render(TRUE);
}

/**
* Adds a new rule
*
* @param integer $message_id
*/
public function add($message_id = NULL)
{
// check param
if (!$message_id || !is_numeric($message_id))
{
self::warning(PARAMETER);
}
// check access
if (!$this->acl_check_new('Messages_Controller', 'auto_config'))
{
self::error(ACCESS);
}

// load model
$message = new Message_Model($message_id);
$messages = Messages_automatical_activation_Model::get_type_messages();
// check exists
if (!$message->id ||
!Message_Model::can_be_activate_automatically($message->type))
{
self::error(RECORD);
}

// form
$form = new Forge('messages_auto_settings/add/' . $message_id);

$form->group('Basic information');
$form->dropdown('type')
->rules('required')
->options(array_map('strtolower', $messages))
->style('width:200px');
for ($i = 0; $i < Time_Activity_Rule::get_attribute_types_max_count(); $i++)
{
$form->input('attribute[' . $i . ']')
->callback(array($this, 'valid_attribute'))
->label(__('Attribute') . ' ' . ($i + 1));
}
if (Settings::get('redirection_enabled'))
{
$form->checkbox('redirection_enabled')
->label('Redirection of devices enabled')
->value('1')
->checked(TRUE);
}
if (Settings::get('email_enabled'))
{
$form->checkbox('email_enabled')
->label('Sending of e-mail messages enabled')
->value('1');
}
if (Settings::get('sms_enabled'))
{
$form->checkbox('sms_enabled')
->label('Sending of SMS messages enabled')
->value('1');
}
$form->submit('Add');

// validate form and save data
if ($form->validate())
{
try
{
// model
$message_asettings = new Messages_automatical_activation_Model();
// start transaction
$message_asettings->transaction_start();
// load data
$form_data = $form->as_array();
// prepare attribute
$attrs = @$_POST['attribute'];
$attrs_finished = array();
$count = Time_Activity_Rule::get_type_attributes_count($form_data['type']);
for ($i = 0; $i < $count; $i++)
{
if (is_array($attrs) && count($attrs))
{
$attrs_finished[] = array_shift($attrs);
}
else
{
$attrs_finished[] = NULL;
}
}
// save
$message_asettings->message_id = $message->id;
$message_asettings->type = $form_data['type'];
$message_asettings->attribute = implode('/', $attrs_finished);
$message_asettings->redirection_enabled =
Settings::get('redirection_enabled') &&
$form_data['redirection_enabled'];
$message_asettings->email_enabled =
Settings::get('email_enabled') &&
$form_data['email_enabled'];
$message_asettings->sms_enabled =
Settings::get('sms_enabled') &&
$form_data['sms_enabled'];
$message_asettings->save_throwable();
// commit transaction
$message_asettings->transaction_commit();

// message
status::success('Message automatical activation setting rule has been succesfully added');
// redirection
$this->redirect('messages_auto_settings/show', $message->id);
}
catch (Exception $e)
{
// roolback transaction
$message_asettings->transaction_rollback();
Log::add_exception($e);
// message
status::error('Error - cant add message automatical activation settings rule', $e);
}
}
// headline
$headline = __('Add automatical activation rule');
// bread crumbs
$breadcrumbs = breadcrumbs::add()
->link('messages/show_all', 'Messages',
$this->acl_check_view('Messages_Controller', 'message'))
->text($message->name)
->disable_translation()
->text($headline)
->html();

// view
$view = new View('main');
$view->title = $headline;
$view->breadcrumbs = $breadcrumbs;
$view->content = new View('form');
$view->content->form = $form->html();
$view->content->headline = $headline;
$view->render(TRUE);
}

/**
* Deletes settings rule
*
* @param integer $mesages_auto_settings_id
*/
public function delete($mesages_auto_settings_id = NULL)
{
// check param
if (!$mesages_auto_settings_id || !is_numeric($mesages_auto_settings_id))
{
self::warning(PARAMETER);
}
// check access
if (!$this->acl_check_delete('Messages_Controller', 'auto_config'))
{
self::error(ACCESS);
}

// load model
$maa = new Messages_automatical_activation_Model($mesages_auto_settings_id);
$message_id = $maa->message_id;
// check exists
if (!$maa->id)
{
Controller::error(RECORD);
}
// delete
if ($maa->delete())
{
status::success('Message automatical activation setting rule has been succesfully deleted.');
}
else
{
status::error('Error - cant delete message automatical activation settings rule.');
}

// redirect to show all
url::redirect('messages_auto_settings/show/' . $message_id);
}
/**
* Checks if attribute form element has valid value
*
* @param object $input
*/
public function valid_attribute($input = NULL)
{
if (empty($input) || !is_object($input))
{
Controller::error(PAGE);
}
$type = $this->input->post('type');
$value = trim($input->value);
$at = Messages_automatical_activation_Model::get_type_attributes($type);
$index = intval(substr($input->name, strlen('attribute[')));

if (!$at)
{
$input->add_error('required', __('Wrong input.'));
}
else if (isset($at[$index]['type']) && ($at[$index]['type'] !== FALSE))
{
if ($at[$index]['type'] == 'integer')
{
if (!preg_match("/^[0-9]+$/", $value))
{
$input->add_error('required', __('Numeric value required'));
}
else
{
if (isset($at[$index]['range_from']) &&
$at[$index]['range_from'] > intval($value))
{
$input->add_error('min_value', array($at[$index]['range_from']));
}
else if (isset($at[$index]['range_to']) &&
$at[$index]['range_to'] < intval($value))
{
$input->add_error('max_value', array($at[$index]['range_to']));
}
}
}
}
}

}