Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 2154

Přidáno uživatelem Ondřej Fibich před asi 11 roky(ů)

Upravy:
- refs #563: dokumentace k AXO (controllery R)

Zobrazit rozdíly:

freenetis/branches/1.1/application/vendors/axo_doc/axo_doc.xml
<axo usage_type="access" section="Private_phone_contacts_Controller" value="contacts" action="delete" own="true"></axo>
</method>
</object>
<object name="redirect" type="controller">
<object name="redirect" type="controller" comment-en="Manages redirections - activation, viewing and deleting" comment-cs="Spravuje přesměrování - aktivaci, zobrazení a mazání">
<method name="__construct"></method>
<method name="index"></method>
<method name="show_all">
<!-- show_all(
$limit_results = 50, $order_by = 'ip_address',
$order_by_direction = 'desc', $page_word = null, $page = 1)
{
// access rights
if (!$this->acl_check_view('Redirect_Controller', 'redirect'))
Controller::error(ACCESS);
if (is_numeric($this->input->post('record_per_page')))
$limit_results = (int) $this->input->post('record_per_page');
$allowed_order_type = array('ip_address', 'name', 'datetime', 'member_id');
if (!in_array(strtolower($order_by), $allowed_order_type))
$order_by = 'ip_address';
if (strtolower($order_by_direction) != 'asc')
{
$order_by_direction = 'desc';
}
$filter_form = new Filter_form('mip');
$filter_form->add('ip_address')
->type('network_address')
->class(array
(
Filter_form::OPER_IS => 'ip_address',
Filter_form::OPER_IS_NOT => 'ip_address',
Filter_form::OPER_NETWORK_IS_IN => 'cidr',
Filter_form::OPER_NETWORK_IS_NOT_IN => 'cidr',
));
$filter_form->add('member_name')
->type('combo')
->callback('json/member_name');
$filter_form->add('type')
->type('select')
->values(array
(
Message_Model::INTERRUPTED_MEMBERSHIP_MESSAGE => __('Membership interrupt'),
Message_Model::DEBTOR_MESSAGE => __('Debtor'),
Message_Model::PAYMENT_NOTICE_MESSAGE => __('Payment notice'),
Message_Model::UNALLOWED_CONNECTING_PLACE_MESSAGE => __('Unallowed connecting place'),
Message_Model::CONNECTION_TEST_EXPIRED => __('Connection test expired'),
Message_Model::USER_MESSAGE => __('User message')
));
$filter_form->add('datetime')
->type('date')
->label(__('Date and time'));
$filter_form->add('comment');
// model
$message_model = new Message_Model();
$total_redirections = $message_model->count_all_redirections($filter_form->as_sql());
if (($sql_offset = ($page - 1) * $limit_results) > $total_redirections)
$sql_offset = 0;
$redirections = $message_model->get_all_redirections(
$sql_offset, $limit_results, $order_by, $order_by_direction,
$filter_form->as_sql()
);
$headline = __('Activated redirections');
$grid = new Grid('redirect/show_all', null, array
(
'current' => $limit_results,
'selector_increace' => 50,
'selector_min' => 50,
'selector_max_multiplier'=> 10,
'base_url' => Config::get('lang').'/redirect/show_all/'
. $limit_results.'/'.$order_by.'/'.$order_by_direction,
'uri_segment' => 'page',
'total_items' => $total_redirections,
'items_per_page' => $limit_results,
'style' => 'classic',
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'limit_results' => $limit_results,
//'url_array_ofset' => 1,
'filter' => $filter_form
));
$grid->order_callback_field('ip_address')
->label('IP address')
->callback('callback::ip_address_field');
$grid->order_callback_field('member_id')
->label('Member')
->callback('callback::member_field');
$grid->order_callback_field('message')
->label(__('Activated redirection').'&nbsp;'.help::hint('activated_redirection'))
->callback('callback::message_field');
$grid->order_field('datetime')
->label('Date and time');
$grid->order_field('comment');
$grid->callback_field('ip_address')
->label(__('Preview').'&nbsp;'.help::hint('redirection_preview'))
->callback('callback::redirection_preview_field');
$grid->datasource($redirections);
$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);
}
/**
* Adds IP address (or including IP addreses of member, or including IP addresses in subnet)
* to junction table for redirection.
*
* @param integer $ip_address_id
*/
public -->
<axo usage_type="unknown" section="Redirect_Controller" value="redirect" action="view" own="false"></axo>
<method name="show_all" comment-en="Shows all activated redirections" comment-cs="Zobrazuje všechny aktivovaná přesměrování">
<axo usage_type="access" section="Redirect_Controller" value="redirect" action="view" own="false"></axo>
</method>
<method name="activate_to_ip_address">
<!-- activate_to_ip_address($ip_address_id = null)
{
// access rights
if (!$this->acl_check_edit('Redirect_Controller', 'redirect'))
Controller::error(ACCESS);
if (!isset($ip_address_id))
Controller::warning(PARAMETER);
// ip address
$ip = new Ip_address_Model($ip_address_id);
if (!$ip->id)
Controller::error(RECORD);
// load list of usable redirection message
$message_model = new Message_Model();
$messages = $message_model->find_all();
foreach($messages as $message)
{
// IP address can be manually redirected only to user message,
// interrupted membership message, debtor message, payment notice message
if (Message_Model::can_be_activate_directly($message->type) &&
trim($message->text) != '')
{
$message_array[$message->id] = __(''.$message->name);
}
}
// no redirection possible for ip address?
if (empty($message_array))
{
status::warning('No redirection is possible to set for this IP address.');
url::redirect('ip_addresses/show/'.$ip_address_id);
}
// form
$form = new Forge('redirect/activate_to_ip_address/'.$ip_address_id);
$form->group('Redirection of IP address');
$form->dropdown('message_id')
->label('Redirection')
->options($message_array);
$form->textarea('comment')
->label('Comment of admin shown to user');
$form->submit('Activate');
// validation
if ($form->validate())
{
$form_data = $form->as_array(FALSE);
$db = Database::instance();
// delete old redirection if present
$db->delete('messages_ip_addresses', array
(
'message_id' => $form_data['message_id'],
'ip_address_id' => $ip->id
));
// database insert sets redirection for ip address
$db->insert('messages_ip_addresses', array
(
'message_id' => $form_data['message_id'],
'ip_address_id' => $ip->id,
'user_id' => $this->session->get('user_id'),
'comment' => $form_data['comment'],
'datetime' => date('Y-m-d H:i:s')
));
// set flash message
status::success('Redirection has been successfully set.');
$this->redirect(Path::instance()->previous());
}
if (Path::instance()->previous(0,1) == 'devices')
{
$device_name = $ip->iface->device->name;
if ($device_name == '')
{
$device_name = ORM::factory('enum_type')->get_value($device->type);
}
if ($ip->iface->name != '')
$iface_name = $ip->iface->name." (".$ip->iface->mac.")";
else
$iface_name = $ip->iface->mac;
// breadcrumbs menu
$breadcrumbs = breadcrumbs::add()
->link('members/show_all', 'Members',
$this->acl_check_view('Members_Controller','members'))
->disable_translation()
->link('members/show/' .
$iface->device->user->member->id,
'ID ' . $iface->device->user->member->id .
' - ' . $iface->device->user->member->name,
$this->acl_check_view(
'Members_Controller',
'members',
$iface->device->user->member->id)
)
->enable_translation()
->link('users/show_by_member/' .
$iface->device->user->member->id, 'Users',
$this->acl_check_view(
'Users_Controller', 'users',
$iface->device->user->member->id)
)
->disable_translation()
->link('users/show/' . $iface->device->user->id,
$iface->device->user->name .
' ' . $iface->device->user->surname .
' (' . $iface->device->user->login . ')',
$this->acl_check_view(
'Users_Controller', 'users',
$iface->device->user->member_id)
)
->enable_translation()
->link(
'devices/show_by_user/'.$iface->device->user_id,
'Devices', $this->acl_check_view(
'Devices_Controller',
'devices',
$iface->device->user->member_id
)
)
->link(
'devices/show/'.$iface->device_id,
$device_name, $this->acl_check_view(
'Devices_Controller', 'devices',
$iface->device->user->member_id
)
)
->link(
'devices/show_iface/'.$iface->id,
$iface_name,
$this->acl_check_view(
'Ifaces_Controller',
'iface',
$iface->device->user->member_id
)
)
->disable_translation()
->link(
'devices/show_ip_address/'.$ip->id,
$ip->ip_address,
$this->acl_check_view(
'Ip_addresses_Controller',
'ip_address',
$iface->device->user->member_id
)
);
}
else
{
$breadcrumbs = breadcrumbs::add()
->link('ip_addresses/show_all', 'IP addresses',
$this->acl_check_view('Ip_addresses_Controller', 'ip_address')
)->disable_translation()
->link('ip_addresses/show/' . $ip->id,
$ip->ip_address . ' (' . $ip->id . ')',
$this->acl_check_view('Ip_addresses_Controller', 'ip_address')
);
}
$breadcrumbs->enable_translation()->text('Redirection of IP address');
// view
$headline = __('Redirection of IP address');
$view = new View('main');
$view->title = $headline;
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('form');
$view->content->headline = $headline;
$view->content->form = $form->html();
$view->render(TRUE);
}
/**
* Deletes information from junction table for redirections.
*
* @param integer $ip_address_id IP address to cancel redirection
* @param integer $message_id Message to cancel redirection
* (multiple redirections for one IP address are possible)
* @param string $from Tells where return after setting this redirection
*/
public -->
<axo usage_type="unknown" section="Redirect_Controller" value="redirect" action="edit" own="false"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="true"></axo>
<axo usage_type="unknown" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="unknown" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="unknown" section="Devices_Controller" value="devices" action="view" own="true"></axo>
<axo usage_type="unknown" section="Devices_Controller" value="devices" action="view" own="true"></axo>
<axo usage_type="unknown" section="Ifaces_Controller" value="iface" action="view" own="true"></axo>
<axo usage_type="unknown" section="Ip_addresses_Controller" value="ip_address" action="view" own="true"></axo>
<axo usage_type="unknown" section="Ip_addresses_Controller" value="ip_address" action="view" own="false"></axo>
<axo usage_type="unknown" section="Ip_addresses_Controller" value="ip_address" action="view" own="false"></axo>
<method name="activate_to_ip_address" comment-en="Enables to activate a redirection to an IP address" comment-cs="Umožňuje aktivovat přesměrování na IP adresu">
<axo usage_type="access" section="Redirect_Controller" value="redirect" action="edit" own="false"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Devices_Controller" value="devices" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Devices_Controller" value="devices" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Ifaces_Controller" value="iface" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Ip_addresses_Controller" value="ip_address" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Ip_addresses_Controller" value="ip_address" action="view" own="false"></axo>
<axo usage_type="breadcrumbs" section="Ip_addresses_Controller" value="ip_address" action="view" own="false"></axo>
</method>
<method name="delete">
<!-- delete(
$ip_address_id = null, $message_id = null, $from = 'ip_address')
{
if (!$this->acl_check_delete('Redirect_Controller', 'redirect'))
Controller::error(ACCESS);
if (!isset($ip_address_id) || !isset($message_id))
Controller::warning(PARAMETER);
if (is_numeric($ip_address_id))
$array['ip_address_id'] = $ip_address_id;
if (is_numeric($message_id))
$array['message_id'] = $message_id;
if (isset($array) && !empty($array))
Database::instance()->delete('messages_ip_addresses', $array);
$ip = new Ip_address_Model($ip_address_id);
status::success('Redirection has been successfully canceled.');
if ($from == 'member')
{
if ($ip->iface_id)
{
$member_id = $ip->iface->device->user->member_id;
}
else
{
$member_id = $ip->member_id;
}
url::redirect('members/show/'.$member_id);
}
else
{
url::redirect('ip_addresses/show/'.$ip_address_id);
}
}
/**
* Adds all IP addresses of member to redirection.
*
* @author Jiri Svitak
* @param integer $member_id
*/
public -->
<axo usage_type="unknown" section="Redirect_Controller" value="redirect" action="delete" own="false"></axo>
<method name="delete" comment-en="Deletes member redirection" comment-cs="Zruší členské přesměrování">
<axo usage_type="access" section="Redirect_Controller" value="redirect" action="delete" own="false"></axo>
</method>
<method name="activate_to_member">
<!-- activate_to_member($member_id = null)
{
// access rights
if (!$this->acl_check_edit('Redirect_Controller', 'redirect'))
Controller::error(ACCESS);
if (!isset($member_id))
Controller::warning(PARAMETER);
// member
$member = new Member_Model($member_id);
if (!$member->id)
Controller::error(RECORD);
// load list of IP addresses belonging to member
$ip_model = new Ip_address_Model();
$ips = $ip_model->get_ip_addresses_of_member($member_id);
// load list of usable redirection message
$message_model = new Message_Model();
$messages = $message_model->find_all();
foreach($ips as $ip)
{
foreach($messages as $message)
{
// IP address can be manually redirected only to user message,
// interrupted membership message, debtor message, payment notice message
if (Message_Model::can_be_activate_directly($message->type) &&
trim($message->text) != '')
{
$message_array[$message->id] = __(''.$message->name);
}
}
}
// no redirection possible for this member?
if (empty($message_array))
{
status::warning('No redirection is possible to set for this IP address.');
url::redirect('members/show/'.$member_id);
}
// form
$form = new Forge('redirect/activate_to_member/'.$member_id);
$form->group('Redirection');
$form->dropdown('message_id')
->label('Message')
->options($message_array);
$form->textarea('comment')
->label('Comment of admin shown to user');
$form->submit('Activate');
// validation
if ($form->validate())
{
$form_data = $form->as_array(FALSE);
$db = Database::instance();
foreach($ips as $ip)
{
// delete old redirection if present
$db->delete('messages_ip_addresses', array
(
'message_id' => $form_data['message_id'],
'ip_address_id' => $ip->id
));
// database insert sets redirection for ip address
$db->insert('messages_ip_addresses', array
(
'message_id' => $form_data['message_id'],
'ip_address_id' => $ip->id,
'user_id' => $this->session->get('user_id'),
'comment' => $form_data['comment'],
'datetime' => date('Y-m-d H:i:s')
));
}
// set flash message
status::success('Redirection has been successfully set.');
url::redirect('members/show/'.$member_id);
}
else
{
$headline = __('Activate redirection to member');
// 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
)
)
->text($headline);
// view
$view = new View('main');
$view->title = $headline;
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('form');
$view->content->headline = $headline;
$view->content->form = $form->html();
$view->render(TRUE);
}
}
/**
* Cancel given redirection to all IP addresses of given member.
*
* @author Jiri Svitak
* @param integer $member_id
* @param integer $message_id
*/
public -->
<axo usage_type="unknown" section="Redirect_Controller" value="redirect" action="edit" own="false"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="true"></axo>
<method name="activate_to_member" comment-en="Enables to activate a redirection to a member" comment-cs="Umožňuje aktivovat členovi přesměrování">
<axo usage_type="access" section="Redirect_Controller" value="redirect" action="edit" own="false"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="true"></axo>
</method>
<method name="delete_from_member">
<!-- delete_from_member($member_id = null, $message_id = null)
{
// access rights
if (!$this->acl_check_delete('Redirect_Controller', 'redirect'))
Controller::error(ACCESS);
if (!isset($member_id) || !isset($message_id))
Controller::warning(PARAMETER);
$db = Database::instance();
$ip_model = new Ip_address_Model();
$ips = $ip_model->get_ip_addresses_of_member($member_id);
foreach($ips as $ip)
{
$db->delete('messages_ip_addresses', array
(
'message_id' => $message_id,
'ip_address_id' => $ip->id
));
}
// set flash message
status::success('Redirection has been successfully canceled.');
url::redirect('members/show/'.$member_id);
}
/**
* Function returns redirection logo
*
* @author David Raska
*/
public -->
<axo usage_type="unknown" section="Redirect_Controller" value="redirect" action="delete" own="false"></axo>
<method name="delete_from_member" comment-en="Deletes all members redirections" comment-cs="Zruší všechny přesměrování člena">
<axo usage_type="access" section="Redirect_Controller" value="redirect" action="delete" own="false"></axo>
</method>
<method name="logo"></method>
<method name="logo" comment-en="Logo for redirection page" comment-cs="Logo pro stránku s přesměrováním"></method>
</object>
<object name="registration" type="controller">
<object name="registration" type="controller" comment-en="Registration of an applicant - this part of system is available to an unlogged user" comment-cs="Registrace žadatele o členství - tato část sytému je dostupná nepřihlášenému uživateli">
<method name="index"></method>
<method name="complete"></method>
</object>
<object name="requests" type="controller">
<object name="requests" type="controller" comment-en="Requests" comment-cs="Požadavky">
<method name="__construct"></method>
<method name="index"></method>
<method name="show_all">
<!-- show_all(
$limit_results = 100, $order_by = 'date',
$order_by_direction = 'ASC',
$page_word = null, $page = 1)
{
// access control
if (!$this->acl_check_view(get_class($this), 'request'))
Controller::error(ACCESS);
// gets new selector
if (is_numeric($this->input->post('record_per_page')))
$limit_results = (int) $this->input->post('record_per_page');
$filter_form = new Filter_form('r');
$filter_form->add('state')
->type('select')
->values(Vote_Model::get_states());
$filter_form->add('uname')
->table('u')
->callback('json/user_fullname')
->label('User');
$filter_form->add('description');
$filter_form->add('suggest_amount')
->type('number');
$filter_form->add('date')
->type('date');
$request_model = new Request_Model();
// hide grid on its first load (#442)
$hide_grid = Settings::get('grid_hide_on_first_load') && $filter_form->is_first_load();
if (!$hide_grid)
{
try
{
$total_requests = $request_model->count_all_requests(
$filter_form->as_sql()
);
if (($sql_offset = ($page - 1) * $limit_results) > $total_requests)
$sql_offset = 0;
$requests = $request_model->get_all_requests(
$sql_offset, (int) $limit_results, $order_by, $order_by_direction,
$filter_form->as_sql()
);
}
catch (Exception $e)
{
if ($filter_form->is_loaded_from_saved_query())
{
status::error('Invalid saved query', $e);
// disable default query (loop protection)
if ($filter_form->is_loaded_from_default_saved_query())
{
ORM::factory('filter_query')->remove_default($filter_form->get_base_url());
}
$this->redirect(url_lang::current());
}
throw $e;
}
$vote_model = new Vote_Model();
$items_to_vote = $vote_model->get_all_items_user_can_vote(
$this->user_id
);
$request_to_vote = array();
if (array_key_exists(Vote_Model::REQUEST, $items_to_vote))
$request_to_vote = $items_to_vote[Vote_Model::REQUEST];
}
// create grid
$grid = new Grid('requests/show_all', NULL, 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').'/requests/show_all/'
. $limit_results.'/'.$order_by.'/'.$order_by_direction ,
'uri_segment' => 'page',
'total_items' => isset($total_requests) ? $total_requests : 0,
'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(get_class($this),'request'))
{
$grid->add_new_button(
'requests/add',
__('Add new request'),
array
(
'class' => 'popup_link'
)
);
}
$grid->order_field('id')
->class('center')
->label('ID');
$grid->order_link_field('user_id')
->link('users/show', 'uname')
->label('User');
$grid->order_callback_field('description')
->label(__('Description'))
->callback('callback::limited_text');
$grid->order_callback_field('suggest_amount')
->label(__('Suggest amount'))
->callback('callback::money');
$grid->order_field('date')
->label(__('Date'));
$grid->order_callback_field('approval_state')
->label(__('State'))
->help(help::hint('approval_state'))
->callback('callback::vote_state_field');
$grid->order_callback_field('comments_count')
->label(__('comments'))
->callback('callback::comments_field')
->class('center');
// user can vote -> show columns for form items
if (!$hide_grid && count($request_to_vote))
{
$grid->order_form_field('vote')
->label(__('Vote'))
->type('dropdown')
->options(array
(
NULL => '- '.__('Select vote').' -'
))
->callback(
'Votes_Controller::vote_form_field',
$request_to_vote,
Vote_Model::REQUEST
);
$grid->order_form_field('comment')
->label(__('Comment'))
->type('textarea')
->callback(
'Votes_Controller::comment_form_field',
$request_to_vote
);
}
$actions = $grid->grouped_action_field();
// access control
if ($this->acl_check_view(get_class($this),'request'))
{
$actions->add_action('id')
->icon_action('show')
->url('requests/show');
}
// access control
if ($this->acl_check_edit(get_class($this),'request'))
{
$actions->add_conditional_action('id')
->icon_action('edit')
->condition('is_item_new')
->url('requests/edit')
->class('popup_link');
}
// access control
if ($this->acl_check_delete(get_class($this),'request'))
{
$actions->add_conditional_action('id')
->icon_action('delete')
->condition('is_item_new')
->url('requests/delete')
->class('delete_link');
}
if (!$hide_grid)
$grid->datasource($requests);
// form is submited
if (isset ($_POST) && count ($_POST) > 1)
{
try
{
$vote_model = new Vote_Model();
$vote_model->transaction_start();
$request_ids = $_POST['ids'];
$votes = $_POST['vote'];
$comments = $_POST['comment'];
$approval_template_item_model = new Approval_template_item_Model();
// voting user
$user = new User_Model($this->user_id);
foreach ($request_ids as $request_id)
{
// user cannot vote about request
if (!in_array($request_id, $request_to_vote))
continue;
$request = $request_model->where('id', $request_id)->find();
if (!$request || !$request->id)
continue;
// finding aro group of logged user
$aro_group = $approval_template_item_model
->get_aro_group_by_approval_template_id_and_user_id(
$request->approval_template_id,
$this->user_id,
$request->suggest_amount
);
$new_vote = $votes[$request->id];
$new_comment = $comments[$request->id];
$vote = $vote_model->where(array
(
'user_id' => $this->user_id,
'type' => Vote_Model::REQUEST,
'fk_id' => $request->id
))->find();
// vote already exists
if ($vote && $vote->id)
{
if ($new_vote != '' && $new_vote == $vote->vote)
continue;
// new vote is not empty and different to old, change old
if ($new_vote != '')
{
$vote->vote = $new_vote;
$vote->comment = $new_comment;
$vote->time = date('Y-m-d H:i:s');
$vote->save_throwable();
$subject = mail_message::format('request_vote_update_subject');
$body = mail_message::format('request_vote_update', array
(
$user->name.' '.$user->surname,
$request->user->name.' '.$request->user->surname,
url_lang::base().'requests/show/'.$request->id
));
}
// new vote is empty, delete old
else
{
$vote->delete_throwable();
$subject = mail_message::format('request_vote_delete_subject');
$body = mail_message::format('request_vote_delete', array
(
$user->name.' '.$user->surname,
$request->user->name.' '.$request->user->surname,
url_lang::base().'requests/show/'.$request->id
));
}
// send message about adding vote to all watchers
Mail_message_Model::send_system_message_to_item_watchers(
$subject,
$body,
Vote_Model::REQUEST,
$request->id
);
}
// new vote is not empty
elseif ($new_vote != '')
{
// add new vote
Vote_Model::insert(
$this->user_id,
Vote_Model::REQUEST,
$request->id,
$new_vote,
$new_comment,
$aro_group->id
);
$subject = mail_message::format('request_vote_add_subject');
$body = mail_message::format('request_vote_add', array
(
$user->name.' '.$user->surname,
$request->user->name.' '.$request->user->surname,
url_lang::base().'requests/show/'.$request->id
));
// send message about adding vote to all watchers
Mail_message_Model::send_system_message_to_item_watchers(
$subject,
$body,
Vote_Model::REQUEST,
$request->id
);
}
// set up state of request
$request->state = Vote_Model::get_state($request);
$request->save_throwable();
switch ($request->state)
{
// request was approved
case Vote_Model::STATE_APPROVED:
$subject = mail_message::format('request_approve_subject');
$body = mail_message::format('request_approve', array
(
$request->user->name.' '.$request->user->surname,
url_lang::base().'requests/show/'.$request->id
));
// send messages about request approve to all watchers
Mail_message_Model::send_system_message_to_item_watchers(
$subject,
$body,
Vote_Model::REQUEST,
$request->id
);
break;
// request was rejected
case Vote_Model::STATE_REJECTED:
$subject = mail_message::format('request_reject_subject');
$body = mail_message::format('request_reject', array
(
$request->user->name.' '.$request->user->surname,
url_lang::base().'requests/show/'.$request->id
));
// send messages about request reject to all watchers
Mail_message_Model::send_system_message_to_item_watchers(
$subject,
$body,
Vote_Model::REQUEST,
$request->id
);
break;
}
// update state of approval template
Approval_template_Model::update_state(
$request->approval_template_id
);
}
$vote_model->transaction_commit();
status::success('Votes has been successfully updated.');
}
catch (Exception $e)
{
$vote_model->transaction_rollback();
}
url::redirect(url::base(TRUE).url::current(TRUE));
}
$view = new View('main');
$view->breadcrumbs = __('Requests');
$view->title = __('Requests');
$view->content = new View('show_all');
$view->content->headline = __('List of all requests');
$view->content->table = $grid;
$view->render(TRUE);
}
/**
* Shows all requests of user
*
* @author Michal Kliment
* @param integer $user_id
*/
public -->
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="false"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="new" own="false"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="false"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="edit" own="false"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="delete" own="false"></axo>
<axo usage_type="access" section="Requests_Controller" value="request" action="view" own="false"></axo>
<axo usage_type="links" section="Requests_Controller" value="request" action="new" own="false"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="view" own="false"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="edit" own="false"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="delete" own="false"></axo>
</method>
<method name="show_by_user">
<!-- show_by_user($user_id = NULL)
{
if (!$user_id || !is_numeric ($user_id))
Controller::warning (PARAMETER);
$user = new User_Model($user_id);
if (!$user->id)
Controller::error(RECORD);
if (!$this->acl_check_view('Requests_Controller', 'request', $user->member_id))
Controller::error(ACCESS);
$request_model = new Request_Model();
$pending_requests = $request_model->get_all_requests_by_user(
$user->id, 'pending'
);
$approval_template_item_model = new Approval_template_item_Model();
$total_pending = array();
$total_pending['suggest_amount'] = 0;
foreach ($pending_requests as $pending_request)
{
$total_pending['suggest_amount'] += $pending_request->suggest_amount;
}
// create grid
$pending_requests_grid = new Grid(url_lang::base().'requests/rejected', '', array
(
'use_paginator' => false,
'use_selector' => false,
'total_items' => count ($pending_requests)
));
if ($this->acl_check_new('Requests_Controller','request', $user->member_id))
{
$pending_requests_grid->add_new_button(
url_lang::base().'requests/add/'.$user->id,
__('Add new request'), array('class' => 'popup_link')
);
}
$pending_requests_grid->field('id')
->label(__('Id'));
$pending_requests_grid->callback_field('description')
->label(__('Description'))
->callback('callback::limited_text');
$pending_requests_grid->field('date')
->label(__('Date'));
$pending_requests_grid->callback_field('suggest_amount')
->label(__('Suggest amount'))
->callback('callback::money');
$pending_requests_grid->callback_field('approval_state')
->label(__('State'))
->help(help::hint('approval_state'))
->callback('callback::vote_state_field');
$pending_requests_grid->callback_field('comments_count')
->label(__('comments'))
->callback('callback::comments_field')
->class('center');
$actions = $pending_requests_grid->grouped_action_field();
// access control
if ($this->acl_check_view('Requests_Controller','request',$user->member_id))
{
$actions->add_action('id')
->icon_action('show')
->url('users/show_request');
}
// access control
if ($this->acl_check_edit('Requests_Controller','request',$user->member_id))
{
$actions->add_conditional_action('id')
->icon_action('edit')
->condition('is_item_new')
->url('requests/edit')
->class('popup_link');
}
// access control
if ($this->acl_check_delete('Requests_Controller','request',$user->member_id))
{
$actions->add_conditional_action('id')
->icon_action('delete')
->condition('is_item_new')
->url('requests/delete')
->class('delete_link');
}
$pending_requests_grid->datasource($pending_requests);
$approved_requests = $request_model->get_all_requests_by_user(
$user->id, 'approved'
);
$total_approved = array();
$total_approved['suggest_amount'] = 0;
foreach ($approved_requests as $approved_request)
{
$total_approved['suggest_amount'] += $approved_request->rating;
}
// create grid
$approved_requests_grid = new Grid('requests/rejected', '', array
(
'use_paginator' => false,
'use_selector' => false,
'total_items' => count ($approved_requests)
));
$approved_requests_grid->field('id')
->label(__('Id'));
$approved_requests_grid->callback_field('description')
->label(__('Description'))
->callback('callback::limited_text');
$approved_requests_grid->field('date')
->label(__('Date'));
$approved_requests_grid->callback_field('suggest_amount')
->label(__('Suggest amount'))
->callback('callback::money');
$approved_requests_grid->callback_field('approval_state')
->label(__('State'))
->help(help::hint('approval_state'))
->callback('callback::vote_state_field');
$approved_requests_grid->callback_field('comments_count')
->label(__('comments'))
->callback('callback::comments_field');
$actions = $approved_requests_grid->grouped_action_field();
// access control
if ($this->acl_check_view('Requests_Controller', 'request', $user->member_id))
{
$actions->add_action('id')
->icon_action('show')
->url('users/show_request');
}
$approved_requests_grid->datasource($approved_requests);
$rejected_requests = $request_model->get_all_requests_by_user(
$user->id, 'rejected'
);
$total_rejected = array();
$total_rejected['suggest_amount'] = 0;
foreach ($rejected_requests as $rejected_request)
{
$total_rejected['suggest_amount'] += $rejected_request->suggest_amount;
}
// create grid
$rejected_requests_grid = new Grid('requests/rejected', '', array(
//'separator' => '',
'use_paginator' => false,
'use_selector' => false,
'total_items' => count ($rejected_requests)
));
$rejected_requests_grid->field('id')
->label(__('Id'));
$rejected_requests_grid->callback_field('description')
->label(__('Description'))
->callback('callback::limited_text');
$rejected_requests_grid->field('date')
->label(__('Date'));
$rejected_requests_grid->callback_field('suggest_amount')
->label(__('Suggest amount'))
->callback('callback::money');
$rejected_requests_grid->callback_field('approval_state')
->label(__('State'))->help(help::hint('approval_state'))
->callback('callback::vote_state_field');
$rejected_requests_grid->callback_field('comments_count')
->label(__('comments'))
->callback('callback::comments_field');
$actions = $rejected_requests_grid->grouped_action_field();
// access control
if ($this->acl_check_view('Requests_Controller','request', $user->member_id))
{
$actions->add_action('id')
->icon_action('show')
->url('users/show_request');
}
$rejected_requests_grid->datasource($rejected_requests);
// breadcrumbs navigation
$breadcrumbs = breadcrumbs::add()
->link('members/show_all', 'Members',
$this->acl_check_view('Members_Controller', 'members'))
->disable_translation()
->link('members/show/'.$user->member->id,
'ID ' . $user->member->id . ' - ' . $user->member->name,
$this->acl_check_view(
'Members_Controller', 'members',
$user->member->id
)
)->enable_translation()
->link('users/show_by_member/' . $user->member_id,
'Users',
$this->acl_check_view(
'Users_Controller', 'users',
$user->member_id
)
)->disable_translation()
->link('users/show/'.$user->id,
$user->name . ' ' . $user->surname .
' (' . $user->login . ')',
$this->acl_check_view(
'Users_Controller','users',
$user->member_id
)
)->enable_translation()
->text('Requests');
$view = new View('main');
$view->title = __('List of requests of user').' '.$user->name.' '.$user->surname;
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('requests/show_by_user');
$view->content->headline = __('List of requests of user').' '.$user->name.' '.$user->surname;
$view->content->user = $user;
$view->content->pending_requests_grid = $pending_requests_grid;
$view->content->approved_requests_grid = $approved_requests_grid;
$view->content->rejected_requests_grid = $rejected_requests_grid;
$view->content->total_pending = $total_pending;
$view->content->total_approved = $total_approved;
$view->content->total_rejected = $total_rejected;
$view->render(TRUE);
}
/**
* Shows request
*
* @author Michal Kliment
* @param integer $request_id
*/
public -->
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="new" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="edit" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="delete" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="unknown" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="true"></axo>
<axo usage_type="unknown" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="unknown" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="access" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="links" section="Requests_Controller" value="request" action="new" own="true"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="edit" own="true"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="delete" own="true"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="grid-action" section="Requests_Controller" value="request" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="false"></axo>
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Users_Controller" value="users" action="view" own="true"></axo>
<axo usage_type="breadcrumbs" section="Users_Controller" value="users" action="view" own="true"></axo>
</method>
<method name="show">
<!-- show($request_id = NULL)
{
// missing or bad parameter
if (!$request_id || !is_numeric($request_id))
Controller::warning (PARAMETER);
$request = new Request_Model($request_id);
// record doesn't exist
if (!$request->id)
Controller::error(RECORD);
// access control
if (!$this->acl_check_new('Requests_Controller', 'request', $request->user->member_id))
Controller::error(ACCESS);
$approval_template_item_model = new Approval_template_item_Model();
$aro_groups = $approval_template_item_model->get_aro_groups_by_approval_template_id(
$request->approval_template_id, $request->suggest_amount
);
$user_aro_group = $approval_template_item_model->get_aro_group_by_approval_template_id_and_user_id(
$request->approval_template_id, $this->session->get('user_id'),
$request->suggest_amount
);
$i = 0;
$vote_groups = array();
$vote_grids = array();
$total_votes = array();
$sums = array();
$agrees = array();
$percents = array();
$user_vote = NULL;
foreach ($aro_groups as $aro_group)
{
$vote_groups[$i] = $aro_group->name;
$vote_model = new Vote_Model();
$votes = $vote_model->select(
'votes.id', 'votes.user_id',
'CONCAT(users.name,\' \',users.surname) as uname',
'vote', 'votes.comment', 'time'
)->join('users','users.id', 'votes.user_id')
->where('votes.type', Vote_Model::REQUEST)
->where('fk_id', $request->id)
->where('aro_group_id', $aro_group->id)
->find_all();
$total_votes[$i] = count($votes);
$sums[$i] = 0;
$agrees[$i] = 0;
$user_vote = NULL;
foreach ($votes as $vote)
{
if ($this->user_id == $vote->user_id)
$user_vote = $vote->vote;
$sums[$i] += $vote->vote;
if ($vote->vote == 0)
{
$total_votes[$i];
continue;
}
if ($vote->vote == 1)
{
$agrees[$i]++;
continue;
}
}
// create grid
$vote_grids[$i] = new Grid('requests/show/'.$request->id, '', array
(
'use_paginator' => false,
'use_selector' => false,
'selector_increace' => 200,
'selector_min' => 200,
'selector_max_multiplier' => 10,
'uri_segment' => 'page',
'style' => 'classic',
));
$vote_rights = $approval_template_item_model->check_user_vote_rights(
$request, $this->user_id
);
if ($user_aro_group &&
$user_aro_group->id == $aro_group->id &&
!$user_vote &&
$vote_rights)
{
$vote_grids[$i]->add_new_button(
url_lang::base().'votes/add/'.Vote_Model::REQUEST.'/'.$request->id,
__('Add vote'), array('class' => 'popup_link')
);
}
$vote_grids[$i]->callback_field('vote')
->label(__('Vote'))
->callback('callback::vote');
$vote_grids[$i]->link_field('user_id')
->link('users/show', 'uname')
->label('User');
$vote_grids[$i]->callback_field('comment');
$vote_grids[$i]->callback_field('time')
->label(__('Time'))
->callback('callback::datetime');
$actions = $vote_grids[$i]->grouped_action_field();
// user can change/delete vote
if ($request->state == Vote_Model::STATE_NEW || $request->state == Vote_Model::STATE_OPEN)
{
$actions->add_conditional_action()
->icon_action('edit')
->url('votes/edit')
->condition('is_own')
->class('popup_link');
$actions->add_conditional_action()
->icon_action('delete')
->url('votes/delete')
->condition('is_own')
->class('delete_link');
}
$vote_grids[$i]->datasource($votes);
$percents[$i] = ($total_votes[$i]) ? round($agrees[$i] / $total_votes[$i] * 100, 1) : 0;
$i++;
}
if ($this->acl_check_view(
'Comments_Controller', 'requests', $request->user->member_id
))
{
$comment_model = new Comment_Model();
$comments = $comment_model->get_all_comments_by_comments_thread(
$request->comments_thread_id
);
$comments_grid = new Grid('members', null, array
(
'separator' => '<br /><br />',
'use_paginator' => false,
'use_selector' => false,
));
$url = ($request->comments_thread_id) ?
'comments/add/'.$request->comments_thread_id :
'comments_threads/add/request/'.$request->id;
$comments_grid->add_new_button(
$url, __('Add comment to request'),
array
(
'class' => 'popup_link'
)
);
$comments_grid->field('text')
->label(__('Text'));
$comments_grid->link_field('user_id')
->link('users/show', 'user_name')
->label('User');
$comments_grid->field('datetime')
->label(__('Time'));
$actions = $comments_grid->grouped_action_field();
$actions->add_conditional_action()
->icon_action('edit')
->url('comments/edit')
->condition('is_own')
->class('popup_link');
$actions->add_conditional_action()
->icon_action('delete')
->url('comments/delete')
->condition('is_own')
->class('delete_link');
$comments_grid->datasource($comments);
}
$breadcrumbs = breadcrumbs::add();
if (url_lang::current(1) == 'users')
{
$breadcrumbs
->link('members/show_all', 'Members',
$this->acl_check_view('Members_Controller', 'members'))
->disable_translation()
->link('members/show/'.$request->user->member->id,
'ID ' . $request->user->member->id . ' - ' .
$request->user->member->name,
$this->acl_check_view(
'Members_Controller', 'members',
$request->user->member->id
)
)->enable_translation()
->link('users/show_by_member/' . $request->user->member_id,
'Users',
... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.

Také k dispozici: Unified diff