Changeset 575 for trunk/cgi-bin/main.cgi
- Timestamp:
- 12/21/12 17:43:19 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cgi-bin/main.cgi
r571 r575 286 286 $page->param(rowa => 'row'.($webvar{block} eq '' ? 1 : 0)); 287 287 $page->param(rowb => 'row'.($webvar{block} eq '' ? 0 : 1)); 288 $page->param(block => $webvar{block}); # fb-assign flag, if block is set, we're in fb-assign 289 $page->param(iscontained => ($webvar{fbtype} && $webvar{fbtype} ne 'y')); 290 291 # New special case- block to assign is specified 288 $page->param(allocfrom => $webvar{block}); # fb-assign flag, if block is set, we're in fb-assign 289 292 290 if ($webvar{block} ne '') { 291 292 # Common case, according to reported usage. Block to assign is specified. 293 293 my $block = new NetAddr::IP $webvar{block}; 294 295 # Handle contained freeblock allocation. 296 # This is a little dangerous, as it's *theoretically* possible to 297 # get fbtype='n' (aka a non-routed freeblock). However, should 298 # someone manage to get there, they get what they deserve. 299 if ($webvar{fbtype} ne 'y') { 300 # Snag the type of the container block from the database. 301 ## hmm. need a flag for parent class/type, sort of? 302 my $pblock = subParent($ip_dbh, $webvar{block}); 303 my $ptype = $pblock->{type}; 304 $ptype =~ s/c$/r/; 305 $page->param(fbdisptype => $list_alloctypes{$ptype}); 306 $page->param(type => $ptype); 294 $page->param(rdepth => $webvar{rdepth}); 295 296 $webvar{fbtype} = '' if !$webvar{fbtype}; 297 if ($webvar{fbtype} eq 'i') { 298 my $ipinfo = getBlockData($ip_dbh, $block); 299 $page->param( 300 fbip => 1, 301 block => $block, 302 fbdisptype => $list_alloctypes{$ipinfo->{type}}, 303 type => $ipinfo->{type}, 304 allocfrom => $ipinfo->{pool}, 305 ); 307 306 } else { 308 307 # get "primary" alloctypes, since these are all that can correctly be assigned if we're in this branch 309 my $tlist = getTypeList($ip_dbh, ' p');308 my $tlist = getTypeList($ip_dbh, 'n'); 310 309 $tlist->[0]->{sel} = 1; 311 $page->param(typelist => $tlist); 312 } 310 $page->param(typelist => $tlist, block => $block); 311 } 312 313 313 } else { 314 315 # Uncommon case, according to reported usage. Block to assign needs to be found based on criteria. 314 316 my $mlist = getMasterList($ip_dbh, 'c'); 315 317 $page->param(masterlist => $mlist); … … 364 366 # + Different flavours of netblock 365 367 366 if ($webvar{alloctype} =~ /^.i$/ ) {368 if ($webvar{alloctype} =~ /^.i$/ && $webvar{fbassign} ne 'y') { 367 369 my $plist = getPoolSelect($ip_dbh, $webvar{alloctype}, $webvar{pop}); 368 370 $page->param(staticip => 1); … … 375 377 if ($webvar{fbassign} && $webvar{fbassign} eq 'y') { 376 378 $cidr = new NetAddr::IP $webvar{block}; 379 $alloc_from = new NetAddr::IP $webvar{allocfrom}; 377 380 $webvar{maskbits} = $cidr->masklen; 378 381 } else { # done with direct freeblocks assignment … … 402 405 } 403 406 404 $cidr = findAllocateFrom($ip_dbh, $webvar{maskbits}, $webvar{alloctype}, $webvar{city}, $webvar{pop}, 405 (master => $webvar{allocfrom}, allowpriv => $webvar{allowpriv}) ); 407 ## fixme: add rdepth? 408 ($cidr,$webvar{rdepth}) = findAllocateFrom($ip_dbh, $webvar{maskbits}, $webvar{alloctype}, $webvar{city}, 409 $webvar{pop}, (master => $webvar{allocfrom}, allowpriv => $webvar{allowpriv}) ); 406 410 if (!$cidr) { 407 411 $page->param(err => $failmsg); … … 409 413 } 410 414 $cidr = new NetAddr::IP $cidr; 415 416 # this chunk now specific to "guided" allocation; freeblock-select can now slice-n-dice on its own. 417 $alloc_from = "$cidr"; 418 # If the block to be allocated is smaller than the one we found, 419 # figure out the "real" block to be allocated. 420 if ($cidr->masklen() ne $webvar{maskbits}) { 421 my $maskbits = $cidr->masklen(); 422 my @subblocks; 423 while ($maskbits++ < $webvar{maskbits}) { 424 @subblocks = $cidr->split($maskbits); 425 } 426 $cidr = $subblocks[0]; 427 } 411 428 } # check for freeblocks assignment or IPDB-controlled assignment 412 429 413 $alloc_from = "$cidr";414 415 # If the block to be allocated is smaller than the one we found,416 # figure out the "real" block to be allocated.417 if ($cidr->masklen() ne $webvar{maskbits}) {418 my $maskbits = $cidr->masklen();419 my @subblocks;420 while ($maskbits++ < $webvar{maskbits}) {421 @subblocks = $cidr->split($maskbits);422 }423 $cidr = $subblocks[0];424 }425 430 } # if ($webvar{alloctype} =~ /^.i$/) 426 431 … … 437 442 $page->param(typefull => $q->escapeHTML($disp_alloctypes{$webvar{alloctype}})); 438 443 $page->param(alloc_from => $alloc_from); 444 $page->param(rdepth => $webvar{rdepth}); 439 445 $page->param(cidr => $cidr); 440 446 $page->param(city => $q->escapeHTML($webvar{city})); … … 477 483 $webvar{privdata} = ''; 478 484 } 485 486 # split up some linked data for static IPs via guided allocation. needed for breadcrumbs lite. 487 ($webvar{alloc_from},$webvar{rdepth}) = split /,/, $webvar{alloc_from}; 488 479 489 # $code is "success" vs "failure", $msg contains OK for a 480 490 # successful netblock allocation, the IP allocated for static 481 491 # IP, or the error message if an error occurred. 482 492 483 my ($code,$msg) = allocateBlock($ip_dbh, $webvar{fullcidr}, $webvar{alloc_from}, 484 $webvar{custid}, $webvar{alloctype}, $webvar{city}, $webvar{desc}, $webvar{notes}, 485 $webvar{circid}, $webvar{privdata}, $webvar{node}); 493 my ($code,$msg) = allocateBlock($ip_dbh, cidr => $webvar{fullcidr}, alloc_from => $webvar{alloc_from}, 494 rdepth => $webvar{rdepth}, custid => $webvar{custid}, type => $webvar{alloctype}, city => $webvar{city}, 495 desc => $webvar{desc}, notes => $webvar{notes}, circid => $webvar{circid}, 496 privdata => $webvar{privdata}, nodeid => $webvar{node}); 486 497 487 498 if ($code eq 'OK') { … … 490 501 $page->param(staticip => $msg); 491 502 $page->param(custid => $webvar{custid}); 503 $page->param(parent => $webvar{alloc_from}, rdepth => $webvar{rdepth}-1); 492 504 $page->param(billinguser => $webvar{billinguser}); 493 505 mailNotify($ip_dbh, "a$webvar{alloctype}", "ADDED: $disp_alloctypes{$webvar{alloctype}} allocation", … … 499 511 $page->param(alloctype => $disp_alloctypes{$webvar{alloctype}}); 500 512 $page->param(custid => $webvar{custid}); 513 # breadcrumbs lite! provide at least a link to the parent of the block we just allocated. 514 my $binfo = getBlockData($ip_dbh, $webvar{fullcidr}, $webvar{rdepth}); 515 $page->param(parent => $binfo->{parent}, rdepth => $binfo->{rdepth}); 501 516 if ($webvar{alloctype} eq 'pr' && $webvar{billinguser}) { 502 517 $page->param(billinguser => $webvar{billinguser});
Note:
See TracChangeset
for help on using the changeset viewer.