Revize 1913
Přidáno uživatelem Michal Kliment před více než 11 roky(ů)
freenetis/branches/1.1/db_upgrades/upgrade_1.1.0~alpha25.php | ||
---|---|---|
<?php defined('SYSPATH') or die('No direct script access.');
|
||
/*
|
||
* This file is part of open source system FreenetIS
|
||
* and it is released under GPLv3 licence.
|
||
*
|
||
* More info about licence can be found:
|
||
* http://www.gnu.org/licenses/gpl-3.0.html
|
||
*
|
||
* More info about project can be found:
|
||
* http://www.freenetis.org/
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* This upgrade is not equal to any of previos upgrades
|
||
*
|
||
* @author Ondřej Fibich <ondrej.fibich@gmail.com>
|
||
*/
|
||
$upgrade_equal_to['1.1.0~alpha25'] = array();
|
||
|
||
/**
|
||
* Adds new table for membership transfers
|
||
*
|
||
* @author Michal Kliment
|
||
*/
|
||
$upgrade_sql['1.1.0~alpha25'] = array
|
||
(
|
||
"CREATE TABLE IF NOT EXISTS `membership_transfers` (
|
||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||
`from_member_id` int(11) NOT NULL,
|
||
`to_member_id` int(11) NOT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `from_member_id` (`from_member_id`),
|
||
KEY `to_member_id` (`to_member_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci",
|
||
|
||
"ALTER TABLE `membership_transfers` ADD FOREIGN KEY `to_member_id_fk` (`to_member_id`)
|
||
REFERENCES `members` (`id`) ON DELETE CASCADE",
|
||
|
||
"ALTER TABLE `membership_transfers` ADD FOREIGN KEY `from_member_id_fk` (`from_member_id`)
|
||
REFERENCES `members` (`id`) ON DELETE CASCADE;",
|
||
|
||
"INSERT INTO `axo` (`id`, `section_value`, `value`, `name`)
|
||
VALUES ('190', 'Membership_transfers_Controller', 'membership_transfer', 'Transfer of membership');",
|
||
|
||
"INSERT INTO `axo_map` (`acl_id`, `section_value`, `value`)
|
||
VALUES ('38', 'Membership_transfers_Controller', 'membership_transfer');"
|
||
);
|
freenetis/branches/1.1/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'add items' => 'Přidat položky',
|
||
'add link' => 'Přidat linku',
|
||
'add member fee payment by cash' => 'Přidat platbu členského příspěvku hotově',
|
||
'add membership transfer' => 'Přidat převod členství',
|
||
'add new' => 'Přidat nový',
|
||
'add new account' => 'Přidat nový účet',
|
||
'add new admin' => 'Přidat nového správce',
|
||
... | ... | |
'delete all unsended e-mails' => 'Smazat všechny neodeslané emaily',
|
||
'delete device' => 'Smazat zařízení',
|
||
'delete ip address' => 'Smazat IP adresu',
|
||
'delete membership transfer' => 'Smazat převod členství',
|
||
'delete own records' => 'Smazat vlastní záznamy',
|
||
'delete selection' => 'Smazat výběr',
|
||
'delete selected messages' => 'Smazat vybrané zprávy',
|
||
... | ... | |
'edit maximum count of allowed subnets of member' => 'Upravit maximální počet povolených podsítí člena',
|
||
'edit member' => 'Upravit člena',
|
||
'edit member limit' => 'Upravit limit člena',
|
||
'edit membership transfer' => 'Upravit převod členství',
|
||
'edit message' => 'Upravit zprávu',
|
||
'edit monitoring parameter of device' => 'Upravit parametry monitoringu zařízení',
|
||
'edit own records' => 'Upravovat vlastní záznamy',
|
||
... | ... | |
'frequency' => 'Frekvence',
|
||
'from/to' => 'Od/komu',
|
||
'from' => 'Od',
|
||
'from member' => 'Od člena',
|
||
'from2' => 'z',
|
||
'gateway' => 'Brána',
|
||
'gateway information' => 'Informace o bráně',
|
||
... | ... | |
'list of all redirection messages' => 'Seznam všech zpráv přesměrování',
|
||
'list of all members' => 'Seznam všech členů',
|
||
'list of all membership interrupts' => 'Seznam všech přerušení členství',
|
||
'list of all membership transfers' => 'Seznam všech převodů členství',
|
||
'list of all member calls' => 'Výpis všech hovorů člena',
|
||
'list of all phone operators' => 'Seznam všech telefonních operátorů',
|
||
'list of all redirected records' => 'Seznam všech přesměrovaných záznamů',
|
||
... | ... | |
'membership interruption has been succesfully updated' => 'Přerušení členství bylo úspěšně aktualizováno',
|
||
'membership of the member has been ended' => 'Členství člena bylo ukončeno.',
|
||
'membership of the member has been successfully restored' => 'Členství člena bylo úspěšně obnoveno.',
|
||
'membership transfer can be only from former member without debt' => 'Převod členství může být pouze od bývalého člena bez dluhu.',
|
||
'membership transfer from' => 'Převod členství od',
|
||
'membership transfer has been successfully added' => 'Převod členství byl úspěšně přidán.',
|
||
'membership transfer has been successfully deleted' => 'Převod členství byl úspěšně smazán.',
|
||
'membership transfer has been successfully updated' => 'Převod členství byl úspěšně aktualizován.',
|
||
'membership transfer to' => 'Převod členství na',
|
||
'membership transfers' => 'Převody členství',
|
||
'memory consumed' => 'Spotřeba paměti',
|
||
'message' => 'Zpráva',
|
||
'message for user' => 'Zpráva pro uživatele',
|
||
... | ... | |
'timestamp' => 'Čas',
|
||
'title' => 'Titul',
|
||
'to' => 'Komu',
|
||
'to member' => 'Na člena',
|
||
'today traffic' => 'Dnešní provoz',
|
||
'too short' => 'Příliš krátké',
|
||
'tools' => 'Nástroje',
|
freenetis/branches/1.1/application/i18n/cs_CZ/help.php | ||
---|---|---|
'login_name' => 'Přihlašovací jméno do systému je nutné k přihlášení. Přihlašovací jmémo může obsahovat znaky anglické abecedy, čísla, těčku a podtržítko, minimální délka jména je 5 znaků.',
|
||
'mail_to_field' => 'Políčko bere jako vstup login uživatele, kterému chcete odeslat zprávu. Příjemců můžete uvést více, oddělte je čárkou.',
|
||
'member_name' => 'Vyplňujte v případě přidávání nějaké organizace. Pokud připojujete běžného člena, tak jako výsledné jméno člena se použije jeho jméno a příjmení.',
|
||
'membership_transfer' => 'Převod členství je jediná možnost pro člena jak přesunout členský podíl na jiného člena.',
|
||
'modules' => 'Modul přidává některé nové funkce do systému. Moduly zde mohou být povoleny/zakázány.',
|
||
'monitoring_email_to' => 'E-mailová adresa, na kterou se budou odesílat informace z monitoringu.',
|
||
'monitoring_notification_down_host_interval' => 'Určuje do kolika minut od výpadku zařízení se bude zasílat upozornění. Výchozí hodnota je 10, pro zakázání zasílání nastavte 0.',
|
freenetis/branches/1.1/application/i18n/en_US/help.php | ||
---|---|---|
'login_name' => 'Login name is necessary for login to system. Login name can contains letters from english alphabet, numbers and dot. It has to contains at least 5 letters.',
|
||
'mail_to_field' => 'The box takes as input the user login you want to send a message. You can specify multiple recipients, separate them with commas.',
|
||
'member_name' => 'Fill in the case of adding an organization. If you connect a regular member, as the final name of the member uses his name and surname.',
|
||
'membership_transfer' => 'Transfer of membership is only way for member to move membership share to another member.',
|
||
'modules' => 'Module adds some new functionality to system. Modules can be enabled/disabled here.',
|
||
'monitoring_notification_down_host_interval' => 'It determines for how many minutes from host failure will be send notification. Default valueis 10, to disable of sending notifications set 0.',
|
||
'monitoring_notification_up_host_interval' => 'It determines for how many minutes from host funcionality again will be send notification. Default valueis 5, to disable of sending notifications set 0.',
|
freenetis/branches/1.1/application/models/member.php | ||
---|---|---|
ORDER BY m.id
|
||
");
|
||
}
|
||
|
||
/**
|
||
* Returns all former members without debt (used to membership transfer)
|
||
*
|
||
* @author Michal Kliment
|
||
* @return type
|
||
*/
|
||
public function get_all_former_members_without_debt()
|
||
{
|
||
return $this->db->query("
|
||
SELECT m.*
|
||
FROM members m
|
||
JOIN accounts a ON a.member_id = m.id
|
||
WHERE m.type = ? AND a.balance >= 0
|
||
", self::TYPE_FORMER);
|
||
}
|
||
}
|
freenetis/branches/1.1/application/models/membership_transfer.php | ||
---|---|---|
<?php defined('SYSPATH') or die('No direct script access.');
|
||
/*
|
||
* This file is part of open source system FreenetIS
|
||
* and it is released under GPLv3 licence.
|
||
*
|
||
* More info about licence can be found:
|
||
* http://www.gnu.org/licenses/gpl-3.0.html
|
||
*
|
||
* More info about project can be found:
|
||
* http://www.freenetis.org/
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* Membership transfer model.
|
||
*
|
||
* @package Model
|
||
*
|
||
* @property integer $id
|
||
* @property integer $from_member_id
|
||
* @property Member_Model $from_member
|
||
* @property integer $to_member_id
|
||
* @property Member_Model $to_member
|
||
*/
|
||
class Membership_transfer_Model extends ORM
|
||
{
|
||
protected $belongs_to = array
|
||
(
|
||
'from_member' => 'member',
|
||
'to_member' => 'member'
|
||
);
|
||
|
||
/**
|
||
* Returns all membership transfers
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $limit_from
|
||
* @param integer $limit_results
|
||
* @param string $order_by
|
||
* @param string $order_by_direction
|
||
* @param string $filter_sql
|
||
* @return MySQL_Iterator
|
||
*/
|
||
public function get_all_membership_transfers($limit_from = NULL, $limit_results = NULL,
|
||
$order_by = NULL, $order_by_direction = NULL, $filter_sql = '')
|
||
{
|
||
$limit = '';
|
||
$order = '';
|
||
$where = '';
|
||
|
||
if (!is_null($limit_from) && !is_null($limit_results))
|
||
{
|
||
$limit = 'LIMIT '.intval($limit_from).', '.intval($limit_results);
|
||
}
|
||
|
||
if (!is_null($order_by) && !is_null($order_by_direction))
|
||
{
|
||
$order = 'ORDER BY '.$this->db->escape_column($order_by).' '.$order_by_direction;
|
||
}
|
||
|
||
if ($filter_sql != '')
|
||
{
|
||
$where = 'WHERE '.$filter_sql;
|
||
}
|
||
|
||
return $this->db->query("
|
||
SELECT * FROM
|
||
(
|
||
SELECT mt.id,
|
||
mt.from_member_id, fm.name AS from_member_name,
|
||
mt.to_member_id, tm.name AS to_member_name
|
||
FROM membership_transfers mt
|
||
JOIN members fm ON mt.from_member_id = fm.id
|
||
JOIN members tm ON mt.to_member_id = tm.id
|
||
) mt
|
||
$where
|
||
$order
|
||
$limit
|
||
");
|
||
}
|
||
|
||
/**
|
||
* Counts all membership transfers
|
||
*
|
||
* @author Michal Kliment
|
||
* @param string $filter_sql
|
||
* @return integer
|
||
*/
|
||
public function count_all_membership_transfers($filter_sql = '')
|
||
{
|
||
return $this
|
||
->get_all_membership_transfers(NULL, NULL, NULL, NULL, $filter_sql)
|
||
->count();
|
||
}
|
||
|
||
/**
|
||
* Returns membership transfer with given from_member_id
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $from_member_id
|
||
* @return MySQL_Result
|
||
*/
|
||
public function get_transfer_from_member($from_member_id)
|
||
{
|
||
return $this->db->query("
|
||
SELECT mt.id, m.id AS member_id, m.name AS member_name
|
||
FROM membership_transfers mt
|
||
JOIN members m ON mt.to_member_id = m.id
|
||
WHERE mt.from_member_id = ?
|
||
", $from_member_id)->current();
|
||
}
|
||
|
||
/**
|
||
* Returns membership transfer with given to_member_id
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $to_member_id
|
||
* @return MySQL_Result
|
||
*/
|
||
public function get_transfer_to_member($to_member_id)
|
||
{
|
||
return $this->db->query("
|
||
SELECT mt.id, m.id AS member_id, m.name AS member_name
|
||
FROM membership_transfers mt
|
||
JOIN members m ON mt.from_member_id = m.id
|
||
WHERE mt.to_member_id = ?
|
||
", $to_member_id)->current();
|
||
}
|
||
|
||
/**
|
||
* Returns all members with transfer from
|
||
*
|
||
* @author Michal Kliment
|
||
* @return MySQL_Iterator
|
||
*/
|
||
public function get_all_members_with_transfer_from()
|
||
{
|
||
return $this->db->query("
|
||
SELECT m.*
|
||
FROM membership_transfers mt
|
||
JOIN members m ON mt.from_member_id = m.id
|
||
");
|
||
}
|
||
|
||
/**
|
||
* Returns all members with transfer to
|
||
*
|
||
* @author Michal Kliment
|
||
* @return MySQL_Iterator
|
||
*/
|
||
public function get_all_members_with_transfer_to()
|
||
{
|
||
return $this->db->query("
|
||
SELECT m.*
|
||
FROM membership_transfers mt
|
||
JOIN members m ON mt.to_member_id = m.id
|
||
");
|
||
}
|
||
|
||
/**
|
||
* Deletes membership transfer with given from_member_id
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $from_member_id
|
||
* @return type
|
||
*/
|
||
public function delete_transfer_from_member($from_member_id)
|
||
{
|
||
return $this->db->query("
|
||
DELETE FROM membership_transfers
|
||
WHERE from_member_id = ?
|
||
", $from_member_id);
|
||
}
|
||
}
|
freenetis/branches/1.1/application/controllers/members.php | ||
---|---|---|
// member doesn't exist
|
||
if (!$member->id)
|
||
Controller::error(RECORD);
|
||
|
||
$membership_transfer_model = new Membership_transfer_Model();
|
||
|
||
if ($member->type == Member_Model::TYPE_FORMER)
|
||
{
|
||
// find possible membership transfer from member
|
||
$membership_transfer_from_member = $membership_transfer_model->get_transfer_from_member($member->id);
|
||
}
|
||
|
||
// find possible membership transfer to member
|
||
$membership_transfer_to_member = $membership_transfer_model->get_transfer_to_member($member->id);
|
||
|
||
// access control
|
||
if (!$this->acl_check_view(get_class($this), 'members', $member->id))
|
||
... | ... | |
|
||
if ($member->id != Member_Model::ASSOCIATION && ($member->type != Member_Model::TYPE_APPLICANT))
|
||
{
|
||
if ($member->type != $former_type_id)
|
||
if ($member->type != Member_Model::TYPE_FORMER)
|
||
{
|
||
// end membership link
|
||
if ($this->acl_check_edit(get_class($this), 'members'))
|
||
... | ... | |
)
|
||
);
|
||
}
|
||
|
||
// only former member without debt can transfer his membership
|
||
if ($member->get_balance() >= 0)
|
||
{
|
||
// add new membership transfer
|
||
if (!$membership_transfer_from_member)
|
||
{
|
||
if ($this->acl_check_new('Membership_transfers_Controller', 'membership_transfer', $member->id))
|
||
{
|
||
$member_links[] = html::anchor(
|
||
'membership_transfers/add/'.$member_id,
|
||
__('Add membership transfer'),
|
||
array('class' => 'popup_link')
|
||
);
|
||
}
|
||
}
|
||
// edit membership transfer
|
||
else
|
||
{
|
||
if ($this->acl_check_edit('Membership_transfers_Controller', 'membership_transfer', $member->id))
|
||
{
|
||
$member_links[] = html::anchor(
|
||
'membership_transfers/edit/'.$membership_transfer_from_member->id,
|
||
__('Edit membership transfer'),
|
||
array('class' => 'popup_link')
|
||
);
|
||
}
|
||
|
||
if ($this->acl_check_delete('Membership_transfers_Controller', 'membership_transfer', $member->id))
|
||
{
|
||
$member_links[] = html::anchor(
|
||
'membership_transfers/delete/'.$membership_transfer_from_member->id,
|
||
__('Delete membership transfer'),
|
||
array('class' => 'delete_link')
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
... | ... | |
$view->content->total_traffic = @$total_traffic;
|
||
$view->content->today_traffic = @$today_traffic;
|
||
$view->content->month_traffic = @$month_traffic;
|
||
$view->content->membership_transfer_from_member = isset($membership_transfer_from_member) ? $membership_transfer_from_member : NULL;
|
||
$view->content->membership_transfer_to_member = $membership_transfer_to_member;
|
||
$view->content->member_links = implode(' | ', $member_links);
|
||
$view->content->user_links = implode(' | ', $user_links);
|
||
$view->render(TRUE);
|
||
... | ... | |
if (!$this->acl_check_edit(get_class($this), 'members', $member_id))
|
||
Controller::error(ACCESS);
|
||
|
||
// this sets member to regular member
|
||
$member->leaving_date = '0000-00-00';
|
||
$enum_type_model = new Enum_type_Model();
|
||
$member->type = $enum_type_model->get_type_id('Regular member');
|
||
|
||
if ($member->save())
|
||
try
|
||
{
|
||
$member->transaction_start();
|
||
|
||
// this sets member to regular member
|
||
$member->leaving_date = '0000-00-00';
|
||
$member->type = Member_Model::TYPE_REGULAR;
|
||
|
||
$member->save_throwable();
|
||
|
||
$membership_transfer_model = new Membership_transfer_Model();
|
||
|
||
// remove membership transfer from member (if exist)
|
||
$membership_transfer_model->delete_transfer_from_member($member->id);
|
||
|
||
$member->transaction_commit();
|
||
status::success('Membership of the member has been successfully restored.');
|
||
}
|
||
else
|
||
catch (Exception $e)
|
||
{
|
||
$member->transaction_rollback();
|
||
status::error('Error - cant restore membership.');
|
||
Log::add('error', $e->getTraceAsString());
|
||
}
|
||
|
||
// redirect
|
||
url::redirect('members/show/'.(int)$member_id);
|
||
$this->redirect('members/show/', $member->id);
|
||
}
|
||
|
||
/**
|
freenetis/branches/1.1/application/controllers/membership_transfers.php | ||
---|---|---|
<?php defined('SYSPATH') or die('No direct script access.');
|
||
/*
|
||
* This file is part of open source system FreenetIS
|
||
* and it is released under GPLv3 licence.
|
||
*
|
||
* More info about licence can be found:
|
||
* http://www.gnu.org/licenses/gpl-3.0.html
|
||
*
|
||
* More info about project can be found:
|
||
* http://www.freenetis.org/
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* Controller performs actions with membership transfers
|
||
*
|
||
* @package Controller
|
||
*/
|
||
class Membership_transfers_Controller extends Controller
|
||
{
|
||
/**
|
||
* Index method only redirect to show all
|
||
*
|
||
* @author Michal Kliment
|
||
*/
|
||
public function index()
|
||
{
|
||
$this->redirect('show_all');
|
||
}
|
||
|
||
/**
|
||
* Shows all membership transfers
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $limit_results
|
||
* @param string $order_by
|
||
* @param string $order_by_direction
|
||
* @param string $page_word
|
||
* @param integer $page
|
||
*/
|
||
public function show_all($limit_results = 50, $order_by = 'id',
|
||
$order_by_direction = 'ASC', $page_word = null, $page = 1)
|
||
{
|
||
// access control
|
||
if (!$this->acl_check_view('Membership_transfers_Controller', 'membership_transfer'))
|
||
Controller::error (ACCESS);
|
||
|
||
$filter_form = new Filter_form();
|
||
|
||
$filter_form->add('from_member_name')
|
||
->callback('json/member_name')
|
||
->label('From member');
|
||
|
||
$filter_form->add('to_member_name')
|
||
->callback('json/member_name')
|
||
->label('To member');
|
||
|
||
// get new selector
|
||
if (is_numeric($this->input->get('record_per_page')))
|
||
$limit_results = (int) $this->input->get('record_per_page');
|
||
|
||
$membership_transfer_model = new Membership_transfer_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_membership_transfers = $membership_transfer_model
|
||
->count_all_membership_transfers($filter_form->as_sql());
|
||
|
||
// limit check
|
||
if (($sql_offset = ($page - 1) * $limit_results) > $total_membership_transfers)
|
||
$sql_offset = 0;
|
||
|
||
$membership_transfers = $membership_transfer_model->get_all_membership_transfers(
|
||
$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');
|
||
// 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;
|
||
}
|
||
|
||
}
|
||
|
||
// grid of devices
|
||
$grid = new Grid('membership_transfers', null, array
|
||
(
|
||
'current' => $limit_results,
|
||
'selector_increace' => 50,
|
||
'selector_min' => 50,
|
||
'selector_max_multiplier' => 20,
|
||
'base_url' => Config::get('lang'). '/membership_transfers/show_all/'
|
||
. $limit_results.'/'.$order_by.'/'.$order_by_direction,
|
||
'uri_segment' => 'page',
|
||
'total_items' => isset($total_membership_transfers) ? $total_membership_transfers : 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('Membership_transfers_Controller', 'membership_transfer'))
|
||
{
|
||
$grid->add_new_button(
|
||
'membership_transfers/add',
|
||
'Add membership transfer',
|
||
array
|
||
(
|
||
'class' => 'popup_link'
|
||
)
|
||
);
|
||
}
|
||
|
||
$grid->order_field('id')
|
||
->label('ID');
|
||
|
||
$grid->order_link_field('from_member_id')
|
||
->link('members/show', 'from_member_name')
|
||
->label('From member');
|
||
|
||
$grid->order_link_field('to_member_id')
|
||
->link('members/show', 'to_member_name')
|
||
->label('To member');
|
||
|
||
$actions = $grid->grouped_action_field();
|
||
|
||
if ($this->acl_check_edit('Membership_transfers_Controller', 'membership_transfer'))
|
||
{
|
||
$actions->add_action('id')
|
||
->icon_action('edit')
|
||
->url('membership_transfers/edit')
|
||
->label('Edit')
|
||
->class('popup_link');
|
||
}
|
||
|
||
if ($this->acl_check_delete('Membership_transfers_Controller', 'membership_transfer'))
|
||
{
|
||
$actions->add_action('id')
|
||
->icon_action('delete')
|
||
->url('membership_transfers/delete')
|
||
->label('Edit')
|
||
->class('delete_link');
|
||
}
|
||
|
||
if (!$hide_grid)
|
||
$grid->datasource($membership_transfers);
|
||
|
||
$title = __('List of all membership transfers');
|
||
|
||
$view = new View('main');
|
||
$view->title = $title;
|
||
$view->breadcrumbs = __('Membership transfers');
|
||
$view->content = new View('show_all');
|
||
$view->content->headline = $title;
|
||
$view->content->table = $grid;
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Add new membership transfer
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $from_member_id
|
||
*/
|
||
public function add($from_member_id = NULL)
|
||
{
|
||
$member_model = new Member_Model();
|
||
|
||
$membership_transfer_model = new Membership_transfer_Model();
|
||
|
||
$members = array();
|
||
$former_members = array();
|
||
$members_with_transfer_from = array();
|
||
$members_with_transfer_to = array();
|
||
|
||
if ($this->acl_check_view('Members_Controller', 'members'))
|
||
{
|
||
$members = arr::from_objects(
|
||
$member_model->get_all_members_to_dropdown()
|
||
);
|
||
|
||
$former_members = arr::from_objects(
|
||
$member_model->get_all_former_members_without_debt(), 'id'
|
||
);
|
||
|
||
$members_with_transfer_from = arr::from_objects(
|
||
$membership_transfer_model->get_all_members_with_transfer_from(), 'id'
|
||
);
|
||
|
||
$members_with_transfer_to = arr::from_objects(
|
||
$membership_transfer_model->get_all_members_with_transfer_to(), 'id'
|
||
);
|
||
}
|
||
|
||
$breadcrumbs = breadcrumbs::add();
|
||
|
||
// from member is set
|
||
if ($from_member_id)
|
||
{
|
||
$from_member = new Member_Model($from_member_id);
|
||
|
||
// record doesn't exist
|
||
if (!$from_member->id)
|
||
Controller::error (RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_new('Membership_transfers_Controller', 'membership_transfer', $from_member->id))
|
||
Controller::error (ACCESS);
|
||
|
||
// membership transfer can be only from former member'
|
||
if ($from_member->type != Member_Model::TYPE_FORMER || $from_member->get_balance() < 0)
|
||
{
|
||
status::warning('Membership transfer can be only from former member without debt');
|
||
url::redirect(Path::instance()->previous());
|
||
}
|
||
|
||
// this member has already membership transfer
|
||
if (in_array($from_member->id, $members_with_transfer_from))
|
||
{
|
||
status::warning('This member has already membership transfer.');
|
||
url::redirect(Path::instance()->previous());
|
||
}
|
||
|
||
$arr_from_members = array
|
||
(
|
||
$from_member->id => $members[$from_member->id]
|
||
);
|
||
|
||
$breadcrumbs->link('members/show_all', 'Members',
|
||
$this->acl_check_view('Members_Controller','members'))
|
||
->disable_translation()
|
||
->link('members/show/'.$from_member->id,
|
||
"ID $from_member->id - $from_member->name",
|
||
$this->acl_check_view(
|
||
'Members_Controller','members', $from_member->id
|
||
)
|
||
);
|
||
}
|
||
else
|
||
{
|
||
// access control
|
||
if (!$this->acl_check_new('Membership_transfers_Controller', 'membership_transfer'))
|
||
Controller::error (ACCESS);
|
||
|
||
$arr_from_members = array
|
||
(
|
||
NULL => '----- '.__('Select member').' -----'
|
||
);
|
||
|
||
foreach ($members as $member_id => $member)
|
||
{
|
||
// member is former and have not membership transfer from
|
||
if (in_array($member_id, $former_members)
|
||
&& !in_array($member_id, $members_with_transfer_from))
|
||
{
|
||
$arr_from_members[$member_id] = $member;
|
||
}
|
||
}
|
||
|
||
$breadcrumbs->link('membership_transfers/show_all', 'Membership transfers',
|
||
$this->acl_check_view('Membership_transfers_Controller','membership_transfer'));
|
||
}
|
||
|
||
$arr_to_members = array
|
||
(
|
||
NULL => '----- '.__('Select member').' -----'
|
||
);
|
||
|
||
foreach ($members as $member_id => $member)
|
||
{
|
||
// member is not former and have not membership transfer to
|
||
if (!in_array($member_id, $former_members)
|
||
&& !in_array($member_id, $members_with_transfer_to))
|
||
{
|
||
$arr_to_members[$member_id] = $member;
|
||
}
|
||
}
|
||
|
||
$form = new Forge();
|
||
|
||
$form->dropdown('from_member_id')
|
||
->options($arr_from_members)
|
||
->label('From member')
|
||
->rules('required');
|
||
|
||
$form->dropdown('to_member_id')
|
||
->options($arr_to_members)
|
||
->label('To member')
|
||
->rules('required');
|
||
|
||
$form->submit('Submit');
|
||
|
||
// form is validate
|
||
if ($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
try
|
||
{
|
||
$membership_transfer = new Membership_transfer_Model();
|
||
|
||
$membership_transfer->transaction_start();
|
||
|
||
$membership_transfer->from_member_id = $form_data['from_member_id'];
|
||
$membership_transfer->to_member_id = $form_data['to_member_id'];
|
||
|
||
$membership_transfer->save_throwable();
|
||
|
||
$membership_transfer->transaction_commit();
|
||
status::success('Membership transfer has been successfully added.');
|
||
}
|
||
catch (Exception $e)
|
||
{
|
||
$membership_transfer->transaction_rollback();
|
||
status::error('Error - Cannot add membership transfer.');
|
||
}
|
||
|
||
$this->redirect(Path::instance()->previous());
|
||
}
|
||
else
|
||
{
|
||
$title = __('Add membership transfer');
|
||
|
||
$breadcrumbs->text($title);
|
||
|
||
$view = new View('main');
|
||
$view->breadcrumbs = $breadcrumbs->html();
|
||
$view->title = $title;
|
||
$view->content = new View('form');
|
||
$view->content->headline = $title;
|
||
$view->content->form = $form;
|
||
$view->render(TRUE);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Edits membership transfer
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $membership_transfer_id
|
||
*/
|
||
public function edit($membership_transfer_id = NULL)
|
||
{
|
||
// bad parameter
|
||
if (!$membership_transfer_id)
|
||
Controller::warning (PARAMETER);
|
||
|
||
$membership_transfer = new Membership_transfer_Model($membership_transfer_id);
|
||
|
||
// record doesn't exist
|
||
if (!$membership_transfer->id)
|
||
Controller::error(RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_edit('Membership_transfers_Controller',
|
||
'membership_transfer', $membership_transfer->from_member_id)
|
||
&& !$this->acl_check_edit('Membership_transfers_Controller',
|
||
'membership_transfer', $membership_transfer->to_member_id))
|
||
{
|
||
Controller::error(ACCESS);
|
||
}
|
||
|
||
$member_model = new Member_Model();
|
||
|
||
$membership_transfer_model = new Membership_transfer_Model();
|
||
|
||
$members = array();
|
||
$former_members = array();
|
||
$members_with_transfer_from = array();
|
||
$members_with_transfer_to = array();
|
||
|
||
if ($this->acl_check_view('Members_Controller', 'members'))
|
||
{
|
||
$members = arr::from_objects(
|
||
$member_model->get_all_members_to_dropdown()
|
||
);
|
||
|
||
$former_members = arr::from_objects(
|
||
$member_model->get_all_former_members_without_debt(), 'id'
|
||
);
|
||
|
||
$members_with_transfer_from = arr::from_objects(
|
||
$membership_transfer_model->get_all_members_with_transfer_from(), 'id'
|
||
);
|
||
|
||
$members_with_transfer_to = arr::from_objects(
|
||
$membership_transfer_model->get_all_members_with_transfer_to(), 'id'
|
||
);
|
||
}
|
||
|
||
|
||
$arr_from_members = array
|
||
(
|
||
$membership_transfer->from_member_id => $members[$membership_transfer->from_member_id]
|
||
);
|
||
|
||
|
||
$arr_to_members = array
|
||
(
|
||
NULL => '----- '.__('Select member').' -----'
|
||
);
|
||
|
||
foreach ($members as $member_id => $member)
|
||
{
|
||
// member is not former and have not membership transfer to
|
||
if ($member_id == $membership_transfer->to_member_id ||
|
||
(!in_array($member_id, $former_members)
|
||
&& !in_array($member_id, $members_with_transfer_to)))
|
||
{
|
||
$arr_to_members[$member_id] = $member;
|
||
}
|
||
}
|
||
|
||
$form = new Forge();
|
||
|
||
$form->dropdown('from_member_id')
|
||
->options($arr_from_members)
|
||
->label('From member')
|
||
->rules('required');
|
||
|
||
$form->dropdown('to_member_id')
|
||
->options($arr_to_members)
|
||
->label('To member')
|
||
->rules('required')
|
||
->selected($membership_transfer->to_member_id);
|
||
|
||
$form->submit('Submit');
|
||
|
||
// form is validate
|
||
if ($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
try
|
||
{
|
||
$membership_transfer->transaction_start();
|
||
|
||
$membership_transfer->from_member_id = $form_data['from_member_id'];
|
||
$membership_transfer->to_member_id = $form_data['to_member_id'];
|
||
|
||
$membership_transfer->save_throwable();
|
||
|
||
$membership_transfer->transaction_commit();
|
||
status::success('Membership transfer has been successfully updated.');
|
||
}
|
||
catch (Exception $e)
|
||
{
|
||
$membership_transfer->transaction_rollback();
|
||
status::error('Error - Cannot update membership transfer.');
|
||
}
|
||
|
||
$this->redirect(Path::instance()->previous());
|
||
}
|
||
else
|
||
{
|
||
$breadcrumbs = breadcrumbs::add();
|
||
|
||
if (Path::instance()->uri(TRUE)->previous(0,1) == 'members')
|
||
{
|
||
$breadcrumbs->link('members/show_all', 'Members',
|
||
$this->acl_check_view('Members_Controller','members'))
|
||
->disable_translation()
|
||
->link('members/show/'.$membership_transfer->from_member->id,
|
||
"ID ".$membership_transfer->from_member->id." - ".$membership_transfer->from_member->name,
|
||
$this->acl_check_view(
|
||
'Members_Controller','members', $membership_transfer->from_member->id
|
||
)
|
||
);
|
||
}
|
||
else
|
||
{
|
||
$breadcrumbs->link('membership_transfers/show_all',
|
||
'Membership transfers',
|
||
$this->acl_check_view('Membership_transfers_Controller','membership_transfer'));
|
||
}
|
||
|
||
$title = __('Edit membership transfer');
|
||
|
||
$breadcrumbs->text($title);
|
||
|
||
$view = new View('main');
|
||
$view->breadcrumbs = $breadcrumbs->html();
|
||
$view->title = $title;
|
||
$view->content = new View('form');
|
||
$view->content->headline = $title;
|
||
$view->content->form = $form;
|
||
$view->render(TRUE);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Deletes membership transfer
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $membership_transfer_id
|
||
*/
|
||
public function delete($membership_transfer_id = NULL)
|
||
{
|
||
// bad parameter
|
||
if (!$membership_transfer_id)
|
||
Controller::warning (PARAMETER);
|
||
|
||
$membership_transfer = new Membership_transfer_Model($membership_transfer_id);
|
||
|
||
// record doesn't exist
|
||
if (!$membership_transfer->id)
|
||
Controller::error(RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_delete('Membership_transfers_Controller',
|
||
'membership_transfer', $membership_transfer->from_member_id)
|
||
&& !$this->acl_check_delete('Membership_transfers_Controller',
|
||
'membership_transfer', $membership_transfer->to_member_id))
|
||
{
|
||
Controller::error(ACCESS);
|
||
}
|
||
|
||
try
|
||
{
|
||
$membership_transfer->transaction_start();
|
||
|
||
$membership_transfer->delete_throwable();
|
||
|
||
$membership_transfer->transaction_commit();
|
||
status::success('Membership transfer has been successfully deleted.');
|
||
}
|
||
catch (Exception $e)
|
||
{
|
||
$membership_transfer->transaction_rollback();
|
||
status::error('Error - Cannot delete membership transfer.');
|
||
}
|
||
|
||
$this->redirect(Path::instance()->previous());
|
||
}
|
||
}
|
freenetis/branches/1.1/application/libraries/MY_Controller.php | ||
---|---|---|
'users');
|
||
}
|
||
|
||
// list of membership interrupts
|
||
if ($this->acl_check_view('Membership_transfers_Controller', 'membership_transfer'))
|
||
{
|
||
$menu->addItem(
|
||
'membership_transfers/show_all',
|
||
__('Membership transfers'),
|
||
'users');
|
||
}
|
||
|
||
/**
|
||
* @todo Add own AXO
|
||
*/
|
freenetis/branches/1.1/application/views/members/show.php | ||
---|---|---|
<th><?php echo __('Entrance date').' '.help::hint('entrance_date', Settings::get('deduct_day')) ?></th>
|
||
<td><?php echo $member->entrance_date ?></td>
|
||
</tr>
|
||
<?php if ($this->acl_check_view('Membership_transfers_Controller', 'membership_transfer', $member->id) && $membership_transfer_to_member): ?>
|
||
<tr>
|
||
<th><?php echo __('Membership transfer from').' '.help::hint('membership_transfer') ?></th>
|
||
<td><?php echo html::anchor(url_lang::base().'members/show/'.$membership_transfer_to_member->member_id, $membership_transfer_to_member->member_name) ?></td>
|
||
</tr>
|
||
<?php endif ?>
|
||
<?php } ?>
|
||
<?php if ($this->acl_check_view('Members_Controller', 'leaving_date', $member->id) && $member->leaving_date != '0000-00-00') { ?>
|
||
<tr>
|
||
... | ... | |
<td><?php echo $member->leaving_date ?></td>
|
||
</tr>
|
||
<?php } ?>
|
||
<?php if ($this->acl_check_view('Membership_transfers_Controller', 'membership_transfer', $member->id) && $membership_transfer_from_member): ?>
|
||
<tr>
|
||
<th><?php echo __('Membership transfer to').' '.help::hint('membership_transfer') ?></th>
|
||
<td><?php echo html::anchor(url_lang::base().'members/show/'.$membership_transfer_from_member->member_id, $membership_transfer_from_member->member_name) ?></td>
|
||
</tr>
|
||
<?php endif ?>
|
||
<?php if ($member->organization_identifier) { ?>
|
||
<tr>
|
||
<th><?php echo __('Organization identifier') ?></th>
|
freenetis/branches/1.1/version.php | ||
---|---|---|
* The current version of FreenetIS.
|
||
* This value must be changed by developers in a new release of FreenetIS.
|
||
*/
|
||
define('FREENETIS_VERSION', '1.1.0~alpha24');
|
||
define('FREENETIS_VERSION', '1.1.0~alpha25');
|
Také k dispozici: Unified diff
freenetis-1.1.0~alpha25
Opravy:
- fixes #8: Prevod clenstvi