Revize 2147
Přidáno uživatelem Ondřej Fibich před asi 11 roky(ů)
freenetis/branches/1.1/application/vendors/axo_doc/axo_doc.xml | ||
---|---|---|
<axo usage_type="breadcrumbs" section="Logs_Controller" value="logs" action="view" own="false"></axo>
|
||
</method>
|
||
</object>
|
||
<object name="mail" type="controller">
|
||
<object name="mail" type="controller" comment-en="User inner mail" comment-cs="Vnitřní uživatelská pošta">
|
||
<method name="index"></method>
|
||
<method name="inbox">
|
||
<!-- inbox($limit_results = 10, $page_word = null, $page = 1)
|
||
{
|
||
$mail_message_model = new Mail_message_Model();
|
||
|
||
$total_messages = $mail_message_model->count_all_inbox_messages_by_user_id(
|
||
$this->user_id
|
||
);
|
||
|
||
if (($sql_offset = ($page - 1) * $limit_results) > $total_messages)
|
||
$sql_offset = 0;
|
||
|
||
// finds all user's inbox messages
|
||
$messages = $mail_message_model->get_all_inbox_messages_by_user_id(
|
||
$this->user_id, $sql_offset, (int) $limit_results
|
||
);
|
||
|
||
// finds ids of all messages - for javascript mark-all function
|
||
$arr_ids = array();
|
||
|
||
foreach ($messages as $message)
|
||
{
|
||
$arr_ids[] = $message->id;
|
||
}
|
||
|
||
// mail redirection
|
||
if (Settings::get('email_enabled') && $this->acl_check_edit(
|
||
'Users_Controller', 'additional_contacts', $this->member_id
|
||
))
|
||
{
|
||
$uc_model = new Users_contacts_Model();
|
||
$email_redirections = $uc_model->get_redirected_email_boxes_of($this->user_id);
|
||
$contacts_link = html::anchor('/contacts/show_by_user/' . $this->user_id, __('here'));
|
||
|
||
if (count($email_redirections))
|
||
{
|
||
$emails = '';
|
||
foreach ($email_redirections as $e)
|
||
{
|
||
$emails .= $e->value . ', ';
|
||
}
|
||
|
||
status::minfo('Your inner mail is redirected to your following e-mail '
|
||
. 'addresses %s you can disable this %s.', TRUE,
|
||
array(substr($emails, 0, -2), $contacts_link));
|
||
}
|
||
else
|
||
{
|
||
status::minfo('You can redirect your inner mail to your e-mail box '
|
||
. 'by editing your e-mail %s.', TRUE, array($contacts_link));
|
||
}
|
||
}
|
||
|
||
// create grid
|
||
$grid = new Grid('mail/inbox', '', array
|
||
(
|
||
'use_paginator' => true,
|
||
'use_selector' => false,
|
||
'total_items' => $total_messages,
|
||
'current' => $limit_results,
|
||
'selector_increace' => 500,
|
||
'selector_min' => 500,
|
||
'selector_max_multiplier' => 20,
|
||
'base_url' => Config::get('lang') . '/mail/inbox/'
|
||
. $limit_results,
|
||
'uri_segment' => 'page',
|
||
'items_per_page' => $limit_results,
|
||
'style' => 'classic',
|
||
'limit_results' => $limit_results,
|
||
));
|
||
|
||
$grid->add_new_button(
|
||
'mail/mark_inbox_read', 'Mark all messages as read'
|
||
);
|
||
|
||
$grid->form_field('delete')
|
||
->order(false)
|
||
->type('checkbox');
|
||
|
||
$grid->callback_field('from_id')
|
||
->label(__('From'))
|
||
->class('grid_mail_from')
|
||
->order(false)
|
||
->callback('Mail_Controller::from_field');
|
||
|
||
$grid->callback_field('subject')
|
||
->label(__('Subject'))
|
||
->class('grid_mail_subject')
|
||
->order(false)
|
||
->callback('Mail_Controller::subject_field');
|
||
|
||
$grid->callback_field('time')
|
||
->label(__('Time'))
|
||
->class('grid_mail_time')
|
||
->order(false)
|
||
->callback('Mail_Controller::time_field');
|
||
|
||
$grid->grouped_action_field()
|
||
->add_action()
|
||
->icon_action('delete')
|
||
->url('mail/delete_message')
|
||
->class('delete_link');
|
||
|
||
// adds extra buttons for messages administration
|
||
$grid->form_extra_buttons = array
|
||
(
|
||
form::checkbox(
|
||
'mark_all','on', False,
|
||
'onclick="mark_all_checkboxs(\'delete\', new Array(\''.
|
||
implode('\',\'',$arr_ids).'\'))"'
|
||
).form::label(
|
||
'mark_all', __('Mark all'),
|
||
'class="mark_all_label"'
|
||
),
|
||
form::dropdown('operation', array
|
||
(
|
||
'delete' => __('Delete selected messages'),
|
||
'read' => __('Mark selected messages as read'),
|
||
'unread' => __('Mark selected messages as unread')
|
||
))
|
||
);
|
||
|
||
$grid->form_submit_value = __('Perform');
|
||
$grid->datasource($messages);
|
||
|
||
// form is post
|
||
if ($_POST && count($_POST))
|
||
{
|
||
$operation = $_POST['operation'];
|
||
$user_id = $this->session->get('user_id');
|
||
$mail_message_model = new Mail_message_Model();
|
||
// for each checked messages
|
||
if (isset($_POST['delete']) && is_array($_POST['delete']))
|
||
{
|
||
foreach ($_POST['delete'] as $message_id => $true)
|
||
{
|
||
$message = $mail_message_model->where('id', $message_id)->find();
|
||
|
||
// message doesn't exist
|
||
if (!$message->id)
|
||
continue;
|
||
|
||
// deletes message
|
||
if ($operation == 'delete')
|
||
{
|
||
// check if message is really from user inbox
|
||
if ($message->to_id == $user_id)
|
||
{
|
||
if ($message->from_deleted || $message->from_id == $user_id)
|
||
$message->delete();
|
||
else
|
||
{
|
||
$message->to_deleted = 1;
|
||
$message->readed = 1;
|
||
$message->save();
|
||
}
|
||
}
|
||
}
|
||
// marks as read
|
||
else if ($operation == 'read')
|
||
{
|
||
$message->readed = 1;
|
||
$message->save();
|
||
}
|
||
// marks as unread
|
||
else if ($operation == 'unread')
|
||
{
|
||
$message->readed = 0;
|
||
$message->save();
|
||
}
|
||
}
|
||
}
|
||
url::redirect(url::base(TRUE).url::current(TRUE));
|
||
}
|
||
|
||
$view = new View('main');
|
||
$view->title = __('Mail inbox');
|
||
$view->content = new View('mail/main');
|
||
$view->content->title = __('Mail inbox');
|
||
$view->content->content = $grid;
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Function to get all inbox messages of user
|
||
*
|
||
* @author Michal Kliment
|
||
* @param number $limit_results
|
||
* @param string $page_word
|
||
* @param number $page
|
||
*/
|
||
public -->
|
||
<axo usage_type="unknown" section="Users_Controller" value="additional_contacts" action="edit" own="true"></axo>
|
||
<method name="inbox" comment-en="Incomint messages" comment-cs="Příchozí zprávy">
|
||
<axo usage_type="access-partial" section="Users_Controller" value="additional_contacts" action="edit" own="true">
|
||
<comment lang="en">Enables to set mail redirection to a user e-mail</comment>
|
||
<comment lang="cs">Umožňuje nastavit přesměrování pošty na e-mail uživatele</comment>
|
||
</axo>
|
||
</method>
|
||
<method name="sent"></method>
|
||
<method name="show_message"></method>
|
||
... | ... | |
<method name="delete_message"></method>
|
||
<method name="mark_inbox_read"></method>
|
||
</object>
|
||
<object name="mail_messages" type="controller">
|
||
<object name="mail_messages" type="controller" comment-en="User inner mail - messages" comment-cs="Vnitřní uživatelská pošta - zprávy">
|
||
<method name="show"></method>
|
||
<method name="add"></method>
|
||
<method name="write"></method>
|
||
</object>
|
||
<object name="members" type="controller">
|
||
<object name="members" type="controller" comment-en="Manages members, applicants, membership end and registration export" comment-cs="Spravuje členy, zájemce o členstí, ukončení členství a export přhlášky">
|
||
<method name="index"></method>
|
||
<method name="show_all">
|
||
<!-- show_all(
|
||
$limit_results = 40, $order_by = 'id',
|
||
$order_by_direction = 'ASC', $page_word = 'page', $page = 1,
|
||
$regs = 0)
|
||
{
|
||
|
||
// access rights
|
||
if (!$this->acl_check_view(get_class($this), 'members'))
|
||
Controller::error(ACCESS);
|
||
|
||
$filter_form = Members_Controller::create_filter_form();
|
||
|
||
// gets new selector
|
||
if (is_numeric($this->input->post('record_per_page')))
|
||
$limit_results = (int) $this->input->post('record_per_page');
|
||
|
||
// parameters control
|
||
$allowed_order_type = array
|
||
(
|
||
'id', 'registration', 'name', 'street','redirect', 'street_number',
|
||
'town', 'quarter', 'ZIP_code', 'entrance_fee',
|
||
'debt_payment_rate', 'current_credit', 'entrance_date', 'comment',
|
||
'balance', 'type_name', 'redirect', 'whitelisted'
|
||
);
|
||
|
||
// order by check
|
||
if (!in_array(strtolower($order_by), $allowed_order_type))
|
||
$order_by = 'id';
|
||
|
||
// order by direction check
|
||
if (strtolower($order_by_direction) != 'desc')
|
||
$order_by_direction = 'asc';
|
||
|
||
// load members
|
||
$model_members = new Member_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_members = $model_members->count_all_members($filter_form->as_sql());
|
||
|
||
// limit check
|
||
if (($sql_offset = ($page - 1) * $limit_results) > $total_members)
|
||
$sql_offset = 0;
|
||
|
||
// query data
|
||
$query = $model_members->get_all_members(
|
||
$sql_offset, $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;
|
||
}
|
||
|
||
}
|
||
|
||
// path to form
|
||
$path = Config::get('lang') . '/members/show_all/' . $limit_results . '/'
|
||
. $order_by . '/' . $order_by_direction.'/'.$page_word.'/'
|
||
. $page.'/'.$regs;
|
||
|
||
// it creates grid to view all members
|
||
$grid = new Grid('members', null, array
|
||
(
|
||
'current' => $limit_results,
|
||
'selector_increace' => 40,
|
||
'selector_min' => 40,
|
||
'selector_max_multiplier' => 25,
|
||
'base_url' => $path,
|
||
'uri_segment' => 'page',
|
||
'total_items' => isset($total_members) ? $total_members : 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
|
||
));
|
||
|
||
// grid buttons
|
||
if ($this->acl_check_new(get_class($this), 'members'))
|
||
{
|
||
$grid->add_new_button('members/add', 'Add new member', array
|
||
(
|
||
'title' => __('Add new member'),
|
||
));
|
||
}
|
||
|
||
if (!$hide_grid && $this->acl_check_edit('Members_Controller', 'registration'))
|
||
{
|
||
if (!$regs)
|
||
{
|
||
$grid->add_new_button(
|
||
'members/show_all/'.$limit_results .
|
||
'/'.$order_by.'/'.$order_by_direction.
|
||
'/'.$page_word.'/'.$page.'/1'.server::query_string(),
|
||
'Edit registrations'
|
||
);
|
||
}
|
||
else
|
||
{
|
||
$grid->add_new_button(
|
||
'members/show_all/'.$limit_results .
|
||
'/'.$order_by.'/'.$order_by_direction.
|
||
'/'.$page_word.'/'.$page.'/0'.server::query_string(),
|
||
'End editing of registrations'
|
||
);
|
||
}
|
||
}
|
||
|
||
if (!$hide_grid && $this->acl_check_view(get_class($this), 'members'))
|
||
{
|
||
// export contacts
|
||
$grid->add_new_button(
|
||
'export/vcard/members' . server::query_string(),
|
||
'Export contacts', array
|
||
(
|
||
'title' => __('Export contacts'),
|
||
'class' => 'popup_link'
|
||
)
|
||
);
|
||
|
||
// csv export of members
|
||
$grid->add_new_button(
|
||
'export/csv/members' . server::query_string(),
|
||
'Export to CSV', array
|
||
(
|
||
'title' => __('Export to CSV'),
|
||
'class' => 'popup_link'
|
||
)
|
||
);
|
||
|
||
if (module::e('notification') &&
|
||
$this->acl_check_new('Notifications_Controller', 'members'))
|
||
{
|
||
$grid->add_new_button(
|
||
'notifications/members/' . server::query_string(),
|
||
'Notifications'
|
||
);
|
||
}
|
||
}
|
||
// database columns - some are commented out because of lack of space
|
||
|
||
$grid->order_field('id')
|
||
->label('ID');
|
||
|
||
if ($regs)
|
||
{
|
||
$grid->order_form_field('registrations')
|
||
->type('checkbox')
|
||
->label('Reg')
|
||
->class('center');
|
||
|
||
$grid->form_extra_buttons = array
|
||
(
|
||
form::hidden(
|
||
'url', url_lang::current().server::query_string()
|
||
)
|
||
);
|
||
}
|
||
else
|
||
{
|
||
$grid->order_callback_field('registration')
|
||
->label('Reg')
|
||
->class('center')
|
||
->callback('callback::registration_field');
|
||
}
|
||
|
||
$grid->order_callback_field('type')
|
||
->callback('callback::member_type_field');
|
||
|
||
$grid->order_field('name');
|
||
|
||
$grid->order_field('street');
|
||
|
||
$grid->order_field('street_number');
|
||
|
||
$grid->order_field('town');
|
||
|
||
if (Settings::get('finance_enabled'))
|
||
{
|
||
$grid->order_callback_field('balance')
|
||
->callback('callback::balance_field');
|
||
}
|
||
|
||
if (Settings::get('redirection_enabled'))
|
||
{
|
||
$grid->order_callback_field('redirect')
|
||
->label('Redirection')
|
||
->callback('callback::redirect_field');
|
||
}
|
||
|
||
if (module::e('notification'))
|
||
{
|
||
$grid->order_callback_field('whitelisted')
|
||
->label('Whitelist')
|
||
->callback('callback::whitelisted_field');
|
||
}
|
||
|
||
$actions = $grid->grouped_action_field();
|
||
|
||
// action fields
|
||
if ($this->acl_check_view(get_class($this), 'members'))
|
||
{
|
||
$actions->add_action('id')
|
||
->icon_action('member')
|
||
->url('members/show')
|
||
->label('Show member');
|
||
}
|
||
|
||
if (Settings::get('finance_enabled') && $this->acl_check_edit(get_class($this), 'members'))
|
||
{
|
||
$actions->add_action('aid')
|
||
->icon_action('money')
|
||
->url('transfers/show_by_account')
|
||
->label('Show transfers');
|
||
}
|
||
|
||
if (!$hide_grid)
|
||
{
|
||
// load data
|
||
$grid->datasource($query);
|
||
}
|
||
|
||
if (isset($_POST) && count($_POST) > 1)
|
||
{
|
||
$ids = $_POST["ids"];
|
||
$regs = $_POST["registrations"];
|
||
|
||
ORM::factory('member')->update_member_registrations($ids, $regs);
|
||
|
||
status::success('Registrations has been successfully updated.');
|
||
|
||
url::redirect($_POST['url']);
|
||
}
|
||
|
||
$headline = __('List of all members');
|
||
|
||
// view
|
||
$view = new View('main');
|
||
$view->title = $headline;
|
||
$view->breadcrumbs = __('Members');
|
||
$view->content = new View('show_all');
|
||
$view->content->table = $grid;
|
||
$view->content->headline = $headline;
|
||
$view->render(TRUE);
|
||
} // end of show_all function
|
||
|
||
/**
|
||
* Function shows list of all registered applicants.
|
||
*
|
||
* @author Ondřej Fibich
|
||
* @param integer $limit_results
|
||
* @param string $order_by
|
||
* @param string $order_by_direction
|
||
* @param integer $page_word
|
||
* @param integer $page
|
||
*/
|
||
public -->
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="new" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="registration" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="unknown" section="Notifications_Controller" value="members" action="new" 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="edit" own="false"></axo>
|
||
<axo usage_type="access" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="links" section="Members_Controller" value="members" action="new" own="false"></axo>
|
||
<axo usage_type="links" section="Members_Controller" value="registration" action="edit" own="false">
|
||
<comment lang="en">Enables to edit members registrations</comment>
|
||
<comment lang="cs">Umožňuje editovat přihlašky členů</comment>
|
||
</axo>
|
||
<axo usage_type="access" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="links" section="Notifications_Controller" value="members" action="new" own="false"></axo>
|
||
<axo usage_type="grid-action" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="grid-action" section="Members_Controller" value="members" action="edit" own="false"></axo>
|
||
</method>
|
||
<method name="applicants">
|
||
<!-- applicants(
|
||
$limit_results = 40, $order_by = 'id',
|
||
$order_by_direction = 'ASC', $page_word = 'page', $page = 1,
|
||
$regs = 0)
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_view(get_class($this),'members'))
|
||
Controller::error(ACCESS);
|
||
|
||
$town_model = new Town_Model();
|
||
$street_model = new Street_Model();
|
||
|
||
// filter form
|
||
$filter_form = new Filter_form('m');
|
||
|
||
$filter_form->add('name')
|
||
->callback('json/member_name');
|
||
|
||
$filter_form->add('id')
|
||
->type('number');
|
||
|
||
$filter_form->add('applicant_connected_from')
|
||
->type('date')
|
||
->label('Connected from');
|
||
|
||
$filter_form->add('applicant_registration_datetime')
|
||
->type('date')
|
||
->label('Registration time');
|
||
|
||
$filter_form->add('comment');
|
||
|
||
$filter_form->add('registration')
|
||
->type('select')
|
||
->values(arr::bool());
|
||
|
||
$filter_form->add('town')
|
||
->type('select')
|
||
->values(array_unique($town_model->select_list('town', 'town')));
|
||
|
||
$filter_form->add('street')
|
||
->type('select')
|
||
->values(array_unique($street_model->select_list('street', 'street')));
|
||
|
||
$filter_form->add('street_number')
|
||
->type('number');
|
||
|
||
// gets new selector
|
||
if (is_numeric($this->input->post('record_per_page')))
|
||
$limit_results = (int) $this->input->post('record_per_page');
|
||
|
||
// parameters control
|
||
$allowed_order_type = array
|
||
(
|
||
'id', 'registration', 'name', 'street', 'street_number', 'town',
|
||
'applicant_connected_from', 'applicant_registration_datetime',
|
||
'comment'
|
||
);
|
||
|
||
// order by check
|
||
if (!in_array(strtolower($order_by), $allowed_order_type))
|
||
$order_by = 'id';
|
||
|
||
// order by direction check
|
||
if (strtolower($order_by_direction) != 'desc')
|
||
$order_by_direction = 'asc';
|
||
|
||
// load members
|
||
$model_members = new Member_Model();
|
||
$total_members = $model_members->count_all_registered_applicants($filter_form->as_sql());
|
||
|
||
// limit check
|
||
if (($sql_offset = ($page - 1) * $limit_results) > $total_members)
|
||
$sql_offset = 0;
|
||
|
||
// query data
|
||
$query = $model_members->get_registered_applicants(
|
||
$sql_offset, $limit_results, $order_by, $order_by_direction,
|
||
$filter_form->as_sql()
|
||
);
|
||
|
||
// path to form
|
||
$path = Config::get('lang') . '/members/applicants/' . $limit_results . '/'
|
||
. $order_by . '/' . $order_by_direction.'/'.$page_word.'/'
|
||
. $page.'/'.$regs;
|
||
|
||
// grid
|
||
$grid = new Grid(null, null, array
|
||
(
|
||
'current' => $limit_results,
|
||
'selector_increace' => 40,
|
||
'selector_min' => 40,
|
||
'selector_max_multiplier' => 25,
|
||
'base_url' => $path,
|
||
'uri_segment' => 'page',
|
||
'total_items' => $total_members,
|
||
'items_per_page' => $limit_results,
|
||
'style' => 'classic',
|
||
'order_by' => $order_by,
|
||
'order_by_direction' => $order_by_direction,
|
||
'limit_results' => $limit_results,
|
||
'filter' => $filter_form,
|
||
'method' => 'get'
|
||
));
|
||
|
||
// approve applicant checkbox
|
||
$grid->order_form_field('toapprove')
|
||
->callback('callback::member_approve_avaiable')
|
||
->type('checkbox')
|
||
->class('center')
|
||
->label(' ');
|
||
|
||
$grid->form_submit_value = __('Approve selected applicants');
|
||
|
||
// database columns - some are commented out because of lack of space
|
||
$grid->order_field('id')
|
||
->label('ID');
|
||
|
||
$grid->order_field('name');
|
||
|
||
$grid->order_field('street');
|
||
|
||
$grid->order_field('street_number');
|
||
|
||
$grid->order_field('town');
|
||
|
||
$grid->order_field('applicant_registration_datetime')
|
||
->label('Registration time');
|
||
|
||
$grid->order_field('applicant_connected_from')
|
||
->label('Connected from');
|
||
|
||
$grid->order_callback_field('registration')
|
||
->callback('callback::registration_field');
|
||
|
||
$grid->order_callback_field('comment')
|
||
->callback('callback::limited_text');
|
||
|
||
$actions = $grid->grouped_action_field();
|
||
|
||
// action fields
|
||
if ($this->acl_check_view(get_class($this), 'members'))
|
||
{
|
||
$actions->add_action('id')
|
||
->icon_action('show')
|
||
->url('members/show');
|
||
}
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'members'))
|
||
{
|
||
$actions->add_conditional_action('id')
|
||
->condition('is_applicant_registration')
|
||
->icon_action('member')
|
||
->url('members/approve_applicant')
|
||
->label('Approve application for membership')
|
||
->class('popup_link');
|
||
}
|
||
|
||
if ($this->acl_check_delete(get_class($this), 'members'))
|
||
{
|
||
$actions->add_action('id')
|
||
->icon_action('delete')
|
||
->url('members/delete_applicant')
|
||
->class('delete_link');
|
||
}
|
||
|
||
// source
|
||
$grid->datasource($query);
|
||
|
||
// headline
|
||
$headline = __('Registered applicants');
|
||
|
||
// breadcrumbs navigation
|
||
$breadcrumbs = breadcrumbs::add()
|
||
->link('members/show_all', 'Members',
|
||
$this->acl_check_view(get_class($this),'members'))
|
||
->disable_translation()
|
||
->text($headline);
|
||
|
||
// description
|
||
$desc = '<br>' . __(
|
||
'Registered applicants can be approved using action button (placed in each line)'
|
||
) . '.<br>'. __(
|
||
'Delete applicants for refusing of their request'
|
||
) . '.';
|
||
|
||
if (isset($_GET) && count(@$_GET) && isset($_GET['toapprove']))
|
||
{
|
||
$this->multiple_applicants_details(@$_GET['toapprove']);
|
||
}
|
||
else
|
||
{
|
||
// view
|
||
$view = new View('main');
|
||
$view->title = $headline;
|
||
$view->breadcrumbs = $breadcrumbs->html();
|
||
$view->content = new View('show_all');
|
||
$view->content->description = $desc;
|
||
$view->content->table = $grid;
|
||
$view->content->headline = $headline;
|
||
$view->render(TRUE);
|
||
}
|
||
} // end of registered function
|
||
|
||
/**
|
||
* Form for approving multiple members
|
||
*
|
||
* @param array $selected
|
||
*/
|
||
private -->
|
||
<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="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="delete" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<method name="applicants" comment-en="Applicants of membership" comment-cs="Zájemci o členství">
|
||
<axo usage_type="access" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="grid-action" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
<axo usage_type="grid-action" section="Members_Controller" value="members" action="edit" own="false"></axo>
|
||
<axo usage_type="grid-action" section="Members_Controller" value="members" action="delete" own="false"></axo>
|
||
<axo usage_type="breadcrumbs" section="Members_Controller" value="members" action="view" own="false"></axo>
|
||
</method>
|
||
<method name="approve_multiple_applicants">
|
||
<!-- approve_multiple_applicants()
|
||
{
|
||
if (!$this->acl_check_edit('Variable_Symbols_Controller', 'variable_symbols') ||
|
||
!$this->acl_check_edit(get_class($this), 'qos_ceil') ||
|
||
!$this->acl_check_edit(get_class($this), 'qos_rate'))
|
||
{
|
||
Controller::error(ACCESS);
|
||
}
|
||
|
||
if (!isset($_POST) || !isset($_POST['toapprove']) || !isset($_POST['entrance_date']) ||
|
||
!isset($_POST['speed_class']))
|
||
{
|
||
Controller::error(PARAMETER);
|
||
}
|
||
|
||
$approved_count = 0;
|
||
$selected = @$_POST['toapprove'];
|
||
$date = @$_POST['entrance_date'];
|
||
$speed_class = @$_POST['speed_class'];
|
||
|
||
// approve selected applicants
|
||
foreach ($selected AS $applicant_id)
|
||
{
|
||
$member = new Member_Model($applicant_id);
|
||
|
||
try
|
||
{
|
||
$member->transaction_start();
|
||
|
||
// change member
|
||
$member->entrance_date = $date;
|
||
|
||
// get members account
|
||
$account = ORM::factory('account')->where(array
|
||
(
|
||
'member_id' => $member->id,
|
||
'account_attribute_id' => Account_attribute_Model::CREDIT
|
||
))->find();
|
||
|
||
// generate variable symbol
|
||
$var_sym = Variable_Key_Generator::factory()->generate($member->id);
|
||
|
||
$vs = new Variable_Symbol_Model();
|
||
|
||
$vs_not_unique = $vs->get_variable_symbol_id($var_sym);
|
||
|
||
if ($vs_not_unique && $vs_not_unique->id)
|
||
{
|
||
if ($vs_not_unique->account_id != $account->id)
|
||
{
|
||
throw new Exception(__('Variable symbol already exists in database.'));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$vs->account_id = $account->id;
|
||
$vs->variable_symbol = $var_sym;
|
||
$vs->save_throwable();
|
||
}
|
||
|
||
// set speed class
|
||
$member->speed_class_id = $speed_class;
|
||
|
||
// unlock and set to Regular member
|
||
$member->type = Member_Model::TYPE_REGULAR;
|
||
$member->locked = 0;
|
||
|
||
$member->save_throwable();
|
||
|
||
// access rights
|
||
$group_aro_map = new Groups_aro_map_Model();
|
||
|
||
// get main user
|
||
$main_user_id = NULL;
|
||
|
||
foreach ($member->users as $user)
|
||
{
|
||
if ($user->type == User_Model::MAIN_USER)
|
||
{
|
||
$main_user_id = $user->id;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!$main_user_id)
|
||
throw new Exception('Main user of applicant is missing');
|
||
|
||
// if is not member yet
|
||
if (!$group_aro_map->exist_row(
|
||
Aro_group_Model::REGULAR_MEMBERS, $main_user_id
|
||
))
|
||
{
|
||
// delete rights of applicant
|
||
$group_aro_map->detete_row(
|
||
Aro_group_Model::REGISTERED_APPLICANTS, $main_user_id
|
||
);
|
||
|
||
// insert regular member access rights
|
||
$groups_aro_map = new Groups_aro_map_Model();
|
||
$groups_aro_map->aro_id = $main_user_id;
|
||
$groups_aro_map->group_id = Aro_group_Model::REGULAR_MEMBERS;
|
||
$groups_aro_map->save_throwable();
|
||
|
||
// reload messages
|
||
ORM::factory('member')->reactivate_messages($applicant_id);
|
||
|
||
// inform new member
|
||
if (module::e('notification'))
|
||
{
|
||
Message_Model::activate_special_notice(
|
||
Message_Model::APPLICANT_APPROVE_MEMBERSHIP,
|
||
$member->id, $this->session->get('user_id'),
|
||
Notifications_Controller::ACTIVATE,
|
||
Notifications_Controller::KEEP
|
||
);
|
||
}
|
||
|
||
$member->transaction_commit();
|
||
}
|
||
|
||
$approved_count++;
|
||
}
|
||
catch (Exception $e)
|
||
{
|
||
Log::add_exception($e);
|
||
$member->transaction_rollback();
|
||
// error
|
||
status::error('Applicant for membership cannot be approved', $e);
|
||
}
|
||
}
|
||
|
||
status::info('Applicants for membership accepted (%d / %d)', TRUE, array($approved_count, count($selected)));
|
||
|
||
$this->redirect('members/applicants');
|
||
}
|
||
|
||
/**
|
||
* Form for approving of member
|
||
*
|
||
* @author Ondřej Fibich
|
||
* @see #369
|
||
* @param integer $member_id
|
||
*/
|
||
public -->
|
||
<axo usage_type="unknown" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_rate" action="edit" own="false"></axo>
|
||
<method name="approve_multiple_applicants" comment-en="Approving of applicants of membership (multiple)" comment-cs="Schválení zájemců o členství (více najednou)">
|
||
<axo usage_type="access" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="access" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="access" section="Members_Controller" value="qos_rate" action="edit" own="false"></axo>
|
||
</method>
|
||
<method name="approve_applicant">
|
||
<!-- approve_applicant($member_id = NULL)
|
||
{
|
||
// parameter is wrong
|
||
if (!$member_id || !is_numeric($member_id))
|
||
Controller::warning(PARAMETER);
|
||
|
||
$association = new Member_Model(Member_Model::ASSOCIATION);
|
||
$member = new Member_Model($member_id);
|
||
|
||
if (!condition::is_applicant_registration($member))
|
||
{
|
||
self::error(RECORD);
|
||
}
|
||
|
||
if (Settings::get('finance_enabled'))
|
||
{
|
||
$member_fee = new Members_fee_Model();
|
||
|
||
$additional_payment_amount = $member_fee->calculate_additional_payment_of_applicant(
|
||
$member->applicant_connected_from, date('Y-m-d')
|
||
);
|
||
}
|
||
|
||
// member doesn't exist
|
||
if (!$member->id)
|
||
Controller::error(RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_new(get_class($this), 'members') ||
|
||
!$this->acl_check_edit(get_class($this), 'entrance_date') ||
|
||
!$this->acl_check_new('Accounts_Controller', 'transfers'))
|
||
Controller::error(ACCESS);
|
||
|
||
// delete is enabled only on applicants
|
||
if ($member->type != Member_Model::TYPE_APPLICANT)
|
||
Controller::warning(PARAMETER);
|
||
|
||
// form
|
||
$form = new Forge();
|
||
|
||
$form->group('Basic information');
|
||
|
||
$form->date('entrance_date')
|
||
->label('Entrance date')
|
||
->years(date('Y', strtotime($association->entrance_date)), date('Y'))
|
||
->rules('required')
|
||
->value(time());
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'registration'))
|
||
{
|
||
$form->dropdown('registration')
|
||
->options(arr::rbool())
|
||
->selected($member->registration);
|
||
}
|
||
|
||
if (Settings::get('finance_enabled') &&
|
||
$this->acl_check_edit('Variable_Symbols_Controller', 'variable_symbols'))
|
||
{
|
||
$form->input('variable_symbol')
|
||
->rules('length[1,10]')
|
||
->class('join1')
|
||
->callback('Variable_Symbols_Controller::valid_var_sym')
|
||
->style('width:120px');
|
||
|
||
if (Variable_Key_Generator::get_active_driver())
|
||
{
|
||
$form->checkbox('variable_symbol_generate')
|
||
->label('Generate automatically')
|
||
->checked(TRUE)
|
||
->class('join2')
|
||
->style('width:auto;margin-left:5px');
|
||
}
|
||
}
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'qos_ceil') &&
|
||
$this->acl_check_edit(get_class($this), 'qos_rate'))
|
||
{
|
||
$speed_class = new Speed_class_Model();
|
||
$speed_classes = array(NULL => '') + $speed_class->select_list();
|
||
$def_speed_class = $speed_class->get_members_default_class();
|
||
|
||
$form->dropdown('speed_class')
|
||
->options($speed_classes)
|
||
->selected($def_speed_class ? $def_speed_class->id : $member->id)
|
||
->add_button('speed_classes')
|
||
->style('width:200px');
|
||
}
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'comment'))
|
||
{
|
||
$form->textarea('comment')
|
||
->rules('length[0,250]')
|
||
->value($member->comment);
|
||
}
|
||
|
||
if (Settings::get('finance_enabled') &&
|
||
Settings::get('self_registration_enable_additional_payment'))
|
||
{
|
||
$form->group(__('Additional demolition of membership fees') . ' ' . help::hint('applicant_additional_payment'));
|
||
|
||
$form->checkbox('allow_additional_payment')
|
||
->label('Allow additional payment')
|
||
->value(1);
|
||
|
||
$form->input('connection_payment_amount')
|
||
->label('Amount')
|
||
->value($additional_payment_amount)
|
||
->style('width: 70px');
|
||
}
|
||
|
||
$form->submit('Approve');
|
||
|
||
// sended
|
||
if ($form->validate())
|
||
{
|
||
try
|
||
{
|
||
$member->transaction_start();
|
||
|
||
$form_data = $form->as_array();
|
||
|
||
// change member
|
||
$member->entrance_date = date('Y-m-d', $form_data['entrance_date']);
|
||
|
||
if ($this->acl_check_edit('Members_Controller', 'registration'))
|
||
{
|
||
$member->registration = $form_data['registration'];
|
||
}
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'comment'))
|
||
{
|
||
$member->comment = $form_data['comment'];
|
||
}
|
||
|
||
if ($this->acl_check_edit('Variable_Symbols_Controller', 'variable_symbols') &&
|
||
(!empty($form_data['variable_symbol']) || (
|
||
isset($form_data['variable_symbol_generate']) &&
|
||
$form_data['variable_symbol_generate']
|
||
)))
|
||
{
|
||
$account = ORM::factory('account')->where(array
|
||
(
|
||
'member_id' => $member->id,
|
||
'account_attribute_id' => Account_attribute_Model::CREDIT
|
||
))->find();
|
||
|
||
if (!isset($form_data['variable_symbol_generate']) ||
|
||
!$form_data['variable_symbol_generate'])
|
||
{
|
||
$var_sym = $form_data['variable_symbol'];
|
||
}
|
||
else
|
||
{
|
||
$var_sym = Variable_Key_Generator::factory()->generate($member->id);
|
||
}
|
||
|
||
$vs = new Variable_Symbol_Model();
|
||
|
||
$vs_not_unique = $vs->get_variable_symbol_id($var_sym);
|
||
|
||
if ($vs_not_unique && $vs_not_unique->id)
|
||
{
|
||
if ($vs_not_unique->account_id != $account->id)
|
||
{
|
||
throw new Exception(__('Variable symbol already exists in database.'));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$vs->account_id = $account->id;
|
||
$vs->variable_symbol = $var_sym;
|
||
$vs->save_throwable();
|
||
}
|
||
}
|
||
|
||
if ($this->acl_check_edit(get_class($this), 'qos_ceil') &&
|
||
$this->acl_check_edit(get_class($this), 'qos_rate'))
|
||
{
|
||
$member->speed_class_id = $form_data['speed_class'];
|
||
}
|
||
|
||
$member->type = Member_Model::TYPE_REGULAR;
|
||
$member->locked = 0;
|
||
|
||
$member->save_throwable();
|
||
|
||
// access rights
|
||
$group_aro_map = new Groups_aro_map_Model();
|
||
|
||
// get main user
|
||
$main_user_id = NULL;
|
||
|
||
foreach ($member->users as $user)
|
||
{
|
||
if ($user->type == User_Model::MAIN_USER)
|
||
{
|
||
$main_user_id = $user->id;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!$main_user_id)
|
||
throw new Exception('Main user of applicant is missing');
|
||
|
||
// if is not member yet
|
||
if (!$group_aro_map->exist_row(
|
||
Aro_group_Model::REGULAR_MEMBERS, $main_user_id
|
||
))
|
||
{
|
||
// delete rights of applicant
|
||
$group_aro_map->detete_row(
|
||
Aro_group_Model::REGISTERED_APPLICANTS, $main_user_id
|
||
);
|
||
|
||
// insert regular member access rights
|
||
$groups_aro_map = new Groups_aro_map_Model();
|
||
$groups_aro_map->aro_id = $main_user_id;
|
||
$groups_aro_map->group_id = Aro_group_Model::REGULAR_MEMBERS;
|
||
$groups_aro_map->save_throwable();
|
||
}
|
||
|
||
// make transfer for connection
|
||
if (isset($form_data['allow_additional_payment']) &&
|
||
$form_data['allow_additional_payment'] &&
|
||
($form_data['connection_payment_amount'] > 0))
|
||
{
|
||
$operating_account = ORM::factory('account')
|
||
->where('account_attribute_id', Account_attribute_Model::OPERATING)
|
||
->find();
|
||
|
||
$credit_account = ORM::factory('account')->where(array
|
||
(
|
||
'member_id' => $member->id,
|
||
'account_attribute_id' => Account_attribute_Model::CREDIT
|
||
))->find();
|
||
|
||
Transfer_Model::insert_transfer(
|
||
$credit_account->id, $operating_account->id, null,
|
||
null, $this->session->get('user_id'),
|
||
null, $member->entrance_date,
|
||
date('Y-m-d H:i:s'),
|
||
__('Additional payment for member fees before membership'),
|
||
$form_data['connection_payment_amount']
|
||
);
|
||
}
|
||
|
||
// reload messages of worker
|
||
ORM::factory('member')->reactivate_messages($member_id);
|
||
|
||
// inform new member
|
||
if (module::e('notification'))
|
||
{
|
||
Message_Model::activate_special_notice(
|
||
Message_Model::APPLICANT_APPROVE_MEMBERSHIP,
|
||
$member->id, $this->session->get('user_id'),
|
||
Notifications_Controller::ACTIVATE,
|
||
Notifications_Controller::KEEP
|
||
);
|
||
}
|
||
|
||
unset($form_data);
|
||
|
||
$member->transaction_commit();
|
||
|
||
$this->redirect('members/show', $member_id);
|
||
}
|
||
catch (Exception $e)
|
||
{
|
||
Log::add_exception($e);
|
||
$member->transaction_rollback();
|
||
// error
|
||
status::error('Applicant for membership cannot be approved', $e);
|
||
}
|
||
}
|
||
|
||
$headline = __('Approve application for membership');
|
||
|
||
// breadcrumbs navigation
|
||
$breadcrumbs = breadcrumbs::add()
|
||
->link('members/show_all', 'Members',
|
||
$this->acl_check_view(get_class($this), 'members'))
|
||
->disable_translation()
|
||
->link('members/show/'.$member->id,
|
||
"ID $member->id - $member->name",
|
||
$this->acl_check_view(get_class($this), 'members', $member->id)
|
||
)->text($headline);
|
||
|
||
// view
|
||
$view = new View('main');
|
||
$view->breadcrumbs = $breadcrumbs->html();
|
||
$view->title = $headline;
|
||
$view->content = new View('form');
|
||
$view->content->headline = $headline;
|
||
$view->content->form = $form->html();
|
||
$view->content->link_back = '';
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Deletes registered applicants
|
||
*
|
||
* @author Ondřej Fibich
|
||
* @param integer $member_id
|
||
*/
|
||
public -->
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="new" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="entrance_date" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Accounts_Controller" value="transfers" action="new" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="registration" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_rate" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="comment" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="registration" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="comment" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="unknown" section="Members_Controller" value="qos_rate" 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="approve_applicant" comment-en="Approving of applicants of membership" comment-cs="Schválení zájemců o členství">
|
||
<axo usage_type="access" section="Members_Controller" value="members" action="new" own="false"></axo>
|
||
<axo usage_type="access" section="Members_Controller" value="entrance_date" action="edit" own="false"></axo>
|
||
<axo usage_type="access" section="Accounts_Controller" value="transfers" action="new" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="registration" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="qos_rate" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="comment" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="registration" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="comment" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Variable_Symbols_Controller" value="variable_symbols" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="qos_ceil" action="edit" own="false"></axo>
|
||
<axo usage_type="access-partial" section="Members_Controller" value="qos_rate" 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_applicant">
|
||
<!-- delete_applicant($member_id = NULL)
|
||
{
|
||
// parameter is wrong
|
||
if (!$member_id || !is_numeric($member_id))
|
||
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_delete(get_class($this), 'members'))
|
||
Controller::error(ACCESS);
|
||
|
||
// delete is enabled only on applicants
|
||
if ($member->type != Member_Model::TYPE_APPLICANT)
|
||
Controller::warning(PARAMETER);
|
||
|
||
// send notice with details
|
||
if (module::e('notification'))
|
||
{
|
||
Message_Model::activate_special_notice(
|
||
Message_Model::APPLICANT_REFUSE_MEMBERSHIP,
|
||
$member->id, $this->session->get('user_id'),
|
||
Notifications_Controller::ACTIVATE,
|
||
Notifications_Controller::KEEP
|
||
);
|
||
}
|
||
|
||
// delete user
|
||
foreach ($member->users as $user)
|
||
{
|
||
$user->delete_depends_items($user->id);
|
||
$user->delete();
|
||
}
|
||
|
||
// delete account
|
||
$member->delete_accounts($member->id);
|
||
|
||
// delete member
|
||
$member->delete();
|
||
|
||
// redirection to registered applicants
|
||
url::redirect('members/applicants');
|
||
}
|
||
|
||
/**
|
||
* Shows details of member.
|
||
*
|
||
* @param integer $member_id id of member to show
|
||
* @param string $order_by sorting column
|
||
* @param string $order_by_direction sorting direction
|
||
*/
|
||
public -->
|
||
<axo usage_type="unknown" section="Members_Controller" value="members" action="delete" own="false"></axo>
|
||
<method name="delete_applicant" comment-en="Deny applicant of membership" comment-cs="Nepřijetí zajemce o členství">
|
||
<axo usage_type="access" section="Members_Controller" value="members" action="delete" own="false"></axo>
|
||
</method>
|
||
<method name="show">
|
||
<!-- show(
|
Také k dispozici: Unified diff
Upravy:
- refs #563: dokumentace k AXO (controllery zacatek M
)