Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 99

Přidáno uživatelem Tomáš Dulík před asi 16 roky(ů)

První část velkého přepsání ip_addresses.php - přidána kontrola rozsahů dle subnetu.

Zobrazit rozdíly:

freenetis/trunk/kohana/application/i18n/cs_CZ/texts.php
'number of the hours'=> 'počet hodin',
'old password'=> 'staré heslo',
'operating account' => 'Provozní účet',
'or'=>'nebo',
'origin account'=> 'Zdrojový účet',
'ospf area id' => 'OSPF area ID',
'outbound'=> 'odchozí',
......
'select interface' => 'Vyber rozhraní',
'select port' => 'Vyber port',
'select segment' => 'Vyber segment',
'select subnet name' => 'Vyber podsíť',
'select subnet name' => 'Vyber jméno podsítě',
'select subnet ip' => 'Vyber IP adresu podsítě',
'select subnet' => 'Vyber podsíť',
'select the member'=> 'Vyber člena',
'select user' => 'Vyber uživatele',
freenetis/trunk/kohana/application/controllers/members.php
<?php
class Members_Controller extends Controller {
protected $member_id = false;
protected $user_id = false;
protected $member_id= false;
protected $user_id= false;
function get_member_types() {
return array(
'regular'=>url_lang::lang('texts.Regular member'),
'applicant'=>url_lang::lang('texts.applicant')
);
}
function index()
{
url::redirect(url_lang::base().'members/show_all');
......
$form->input('middle_name')->label(url_lang::lang('texts.middle name').':')->rules('length[3,30]');
$form->input('surname')->label(url_lang::lang('texts.surname').':')->rules('required|length[3,60]');
$form->input('post_title')->label(url_lang::lang('texts.post title').':')->rules('length[3,30]');
$form->dropdown('type')->label(url_lang::lang('texts.Type').':')->options(array('member'=>url_lang::lang('texts.Honest member'),'wannabe'=>url_lang::lang('texts.Wanna be a member')));
$form->dropdown('type')->label(url_lang::lang('texts.Type').':')
->options(array('member'=>url_lang::lang('texts.Honest member'),'wannabe'=>url_lang::lang('texts.Wanna be a member')));
$form->input('membername')->label(url_lang::lang('texts.Members name').':')->rules('required|length[3,60]');
$form->group('')->label(url_lang::lang('texts.Password'));
$form->password('password')->label(url_lang::lang('texts.password').':')->rules('required|length[3,50]')->class('required');
......
if ($this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'],get_class($this),'edit_surname'))
$form->input('surname')->label(url_lang::lang('texts.surname').':')->rules('required|length[3,60]')->value($member_data->surname);
$form->input('post_title')->label(url_lang::lang('texts.post title').':')->rules('length[3,30]')->value($member_data->post_title);
if ($this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'],get_class($this),'edit_type'))$form->dropdown('type')->label(url_lang::lang('texts.Type').':')->options(array('regular'=>url_lang::lang('texts.Regular member'),'applicant'=>url_lang::lang('texts.applicant')))->selected($member_data->type);
if ($this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'],get_class($this),'edit_type'))
$form->dropdown('type')->label(url_lang::lang('texts.Type').':')
->options(MEMBER_TYPES)
->selected($member_data->type);
if ($this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'],get_class($this),'edit_membersname'))$form->input('membername')->label(url_lang::lang('texts.Members name').':')->rules('required|length[3,60]')->value($member_data->namem);
$form->group('')->label(url_lang::lang('texts.Contact informations'));
freenetis/trunk/kohana/application/controllers/ip_addresses.php
<?php
class Ip_addresses_Controller extends Controller {
protected $form;
protected $arr_mask_by_id;
protected $arr_net_by_id;
function index()
{
......
$this->subnet_id = $this->input->post('subnet_id');
$form = new Forge(url_lang::base()."ip_addresses/add/", '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$this->form=$form = new Forge(url_lang::base()."ip_addresses/add/", '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$iface_model = new Iface_Model();
$vlan_iface_model = new Vlan_iface_Model();
......
}
$subnet_model = new Subnet_Model();
$arr_subnets = array();
$subnets = $subnet_model->select('id','name')->orderby('name')->find_all();
$arr_subnets[0] = '----- '.url_lang::lang('texts.select subnet').' -----';
$subnets = $subnet_model
->select("id","name","network_address as net_str",
"inet_aton(network_address) as net",
"32-log2((~inet_aton(netmask) & 0xffffffff) + 1) as mask")
->orderby('name')->find_all();
$arr_subnets_netnames[]=$arr_subnets_names[] = '----- '.url_lang::lang('texts.select subnet').' -----';
$arr_subnets_ids[]=$arr_subnets_masks[]=$arr_subnets_nets[]=0;
foreach ($subnets as $subnet) {
$arr_subnets[$subnet->id] = $subnet->name;
$arr_subnets_names[$subnet->id] = $subnet->name . ": ". $subnet->net_str."/".$subnet->mask;
$this->arr_mask_by_id[$subnet->id]=$subnet->mask;
$this->arr_net_by_id[$subnet->id]=$subnet->net;
$arr_subnets_nets[] = $subnet->net;
$arr_subnets_masks[] = $subnet->mask;
$arr_subnets_netnames[] = $subnet->net_str."/".$subnet->mask.": ".$subnet->name ;
$arr_subnets_ids[]=$subnet->id;
}
$form->group('')->label(url_lang::lang('texts.IP addresses'));
array_multisort($arr_subnets_nets, SORT_NUMERIC, SORT_ASC,
$arr_subnets_masks, SORT_NUMERIC, SORT_ASC,
$arr_subnets_ids, SORT_NUMERIC, SORT_ASC,
$arr_subnets_netnames, SORT_STRING, SORT_ASC);
$arr_subnets_ips=array_combine($arr_subnets_ids, $arr_subnets_netnames);
//$form->group('')->label(url_lang::lang('texts.IP addresses'));
//$form->radio('iface_type')->label(url_lang::lang('texts.IP address').':')->rules('required|length[3,250]');
if (!$ssIface_id && !$ssVlan_iface_id) {
......
else {
$form->hidden('iface_type')->value($default);
}
$form->dropdown('iface_id')->label(url_lang::lang('texts.Interface name').':')->options($arr_ifaces)->rules('required')->class('ajax')->callback(array($this, 'callback_iface_selected'));
$form->input('IP_address')->label(url_lang::lang('texts.IP address').':')->rules('required|valid_ip');
$form->dropdown('subnet_id')->label(url_lang::lang('texts.Select subnet name').':')->options($arr_subnets)->class('ajax')->onchange('ajax_get_subnet(this.value)');
$form->group('')->label(url_lang::lang('texts.Subnet data'));
$form->dropdown('iface_id')->label(url_lang::lang('texts.Interface name').':')
->options($arr_ifaces)
->rules('required');
//->class('ajax')->callback(array($this, 'callback_iface_selected'));
$form->input('IP_address')->label(url_lang::lang('texts.IP address').':')
->callback(array($this, 'valid_ip'));
$form->dropdown('subnet_id')->label(url_lang::lang('texts.Select subnet name').':')
->options($arr_subnets_names);
//->class('ajax')->onchange('ajax_get_subnet(this.value)');
$form->group('')->label(url_lang::lang('texts.or'));
$form->dropdown('subnet_id2')->label(url_lang::lang('texts.Select subnet IP').':')
->options($arr_subnets_ips);
/**
* Removed by dulik for SVN rev. 98 - does not work with JavaScript disabled
* @todo Proper Ajax should be implemented - see http://learn.kohanaphp.com/2008/06/17/jquery-and-kohana-unobtrusive-ajax/
*
$form->group('')->label(url_lang::lang('texts.Subnet data'));
$form->input('subnet_name')->label(url_lang::lang('texts.Subnet name').':')->rules('required|length[3,250]')->callback(array($this, 'callback_subnet_selected'));
$form->input('subnet_network_address')->label(url_lang::lang('texts.Subnet network address').':')->rules('required|valid_ip')->callback(array($this, 'callback_subnet_selected'));
$form->input('subnet_netmask')->label(url_lang::lang('texts.Subnet netmask').':')->rules('required')->callback(array($this, 'callback_subnet_selected'));
$form->input('subnet_ospf_area_id')->label(url_lang::lang('texts.OSPF area ID').':')->rules('valid_digit')->callback(array($this, 'callback_subnet_selected'));
*/
$form->submit('submit')->value(url_lang::lang('texts.Save'));
special::required_forge_style($form, ' *', 'required');
......
if ($subnet_id = $form_data['subnet_id']) {
$ip->subnet_id = $subnet_id;
}
/**
* Removed by dulik for SVN rev. 98 - does not work with JavaScript disabled
else {
$subnet = new Subnet_Model();
......
if ($subnet->save()) $ip->subnet_id = $subnet->id;
}
*/
unset($form_data);
if ($ip->save()) {
......
exit;
}
} else {
//$form->IP_address->value("ahoj");
}
//----- end validate --------------------------------------------------
......
foreach ($subnets as $subnet) {
$arr_subnets[$subnet->id] = $subnet->name;
}
$form->group('')->label(url_lang::lang('texts.IP addresses'));
$form->group('')->label(url_lang::lang('texts.IP addresses'));
if (!$ssIface_id && !$ssVlan_iface_id) {
$form->radio('iface_type')->label(url_lang::lang('texts.Interface type').':')->options(array('iface'=>url_lang::lang('texts.Basic').' &nbsp; ','VLAN'=>url_lang::lang('texts.VLAN')))->default($default)->onchange('ajax_get_ifaces(this.value)');
......
//----- end EDIT --------------------------------------------------------------
//=============================================================================
function valid_ip($input) {
$method=$this->form->IP_address->method; // <FORM> method = POST, GET, ...
$ip=ip2long($this->input->$method('IP_address')); // Submitted values
$subnet_id=$this->input->$method('subnet_id');
$subnet_id2=$this->input->$method('subnet_id2');
if ($subnet_id==0 && $subnet_id2==0) { // subnet was not selected
if ($ip > 0) // try to find a subnet matching to the ip
$input->add_error('required', url_lang::lang('texts.Subnet not selected - trying to guess!'));
else
$input->add_error('required', url_lang::lang('texts.Invalid IP!'));
return false;
} else if ($subnet_id==0) $subnet_id=$subnet_id2;
else if ($subnet_id2==0);
else if ($subnet_id != $subnet_id2)
$input->add_error('required', url_lang::lang('texts.Select only one subnet!'));
$subnet=$this->arr_net_by_id[$subnet_id];
$mask=$this->arr_mask_by_id[$subnet_id];
if ($ip>0) $this->check_ip($ip, $subnet, $mask, $input);
else $input->add_error('required', url_lang::lang('texts.IP address required!'));
}
function check_ip($ip, $net, $mask, $input) {
$mask=0xffffffff<<(32-$mask) & 0xffffffff;
//printf(" ip=%lx, net=%lx, mask=%lx, AND=%lx", $ip, $net, $mask, $ip & $mask);
if (($ip & $mask) != $net)
$input->add_error('required', url_lang::lang('texts.IP address does not match the subnet/mask.'));
else if ($ip==$net || $ip==($net | ~$mask))
$input->add_error('required', url_lang::lang('texts.Invalid IP!'));
}
/**
* Removed by dulik for SVN rev. 98 - does not work with JavaScript disabled
//=============================================================================
//----- AJAX ------------------------------------------------------------------
......
if ($input->value != '' && $this->subnet_id) $input->readonly(true);
}
*/
//----- end CALLBACKs --------------------------------------------------------------
//=============================================================================
}
?>

Také k dispozici: Unified diff