Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 2147

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

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

Zobrazit rozdíly:

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