Ticket #2989: retrieve_op_conf_from_mysql.patch

File retrieve_op_conf_from_mysql.patch, 7.8 kB (added by Nick_Lewis, 4 years ago)
  • after/retrieve_op_conf_from_mysql.pl

    old new  
    2828 
    2929######## LAYOUT INFO ######### 
    3030 
    31 # This layout info should really be in a "panel" table in the freepbx database 
     31# NOTE - These values may be overwritten by values in a table in the freepbx database named "panel" 
    3232 
    33 # structure is - Legend, startpos, stoppos, color1, color2 
    34 @rectangle1 = ("Trunks", 53, 80, "10ff10", "009900"); 
    35 @rectangle2 = ("Extensions", 1, 40, "1010ff", "099cccc"); 
    36 @rectangle3 = ("Parking lots", 49, 72, "ffff10", "cc9933"); 
    37 @rectangle4 = ("Conferences", 45, 68, "006666", "a01000"); 
    38 @rectangle5 = ("Queues", 41, 64, "ff1010", "a01000"); 
     33# structure is - ID, Legend, startpos, stoppos, color1, color2 
     34@rectangle1 = ("trunk","Trunks", 53, 80, "10ff10", "009900"); 
     35@rectangle2 = ("extension","Extensions", 1, 40, "1010ff", "99cccc"); 
     36@rectangle3 = ("parking","Parking lots", 49, 72, "ffff10", "cc9933"); 
     37@rectangle4 = ("conference","Conferences", 45, 68, "006666", "00a010"); 
     38@rectangle5 = ("queue","Queues", 41, 64, "ff1010", "a01000"); 
    3939@rectangles = (\@rectangle1,\@rectangle2,\@rectangle3,\@rectangle4,\@rectangle5); 
    4040 
     41$rectmarginx = 1; 
     42$rectmarginy = 1; 
     43$legendoffsetx = 3; 
     44$legendoffsety = 1;  
     45 
     46# $layoutbuttonsonly = 0 : allow display of buttons even if no corresponding layout info 
     47# $layoutbuttonsonly = 1 : suppress display of buttons if no corresponding layout info 
     48$layoutbuttonsonly = 1; 
     49 
    4150######## BUTTON INFO ######### 
    4251$buttonsizex = 246; # 1+244+1 from information in op_style.cfg 
    4352$buttonsizey = 28; # 1+26+1 from information in op_style.cfg 
    4453$numbuttonsx = 4; 
    4554$numbuttonsy = 20; 
     55$buttonsoriginx = -1; 
     56$buttonsoriginy = 32; 
    4657 
    4758 
    4859######## STYLE INFO ######### 
     60 
     61# NOTE - These values may be overwritten by the syleinfo function with values generated from the layout info 
     62 
    4963$extenpos="2-40"; 
    5064#$trunkpos="52-60,71-80"; 
    5165#$confepos=""; 
     
    5973 
    6074# End of changes 
    6175 
    62 #automated generation of style-info 
    63 $extenpos=styleinfo("Extensions"); 
    64 $trunkpos=styleinfo("Trunks"); 
    65 $parkingpos=styleinfo("Parking lots"); 
    66 $confepos=styleinfo("Conferences"); 
    67 $queuepos=styleinfo("Queues"); 
    68  
    6976 
    7077# Remove or add Zap trunks as needed 
    7178# Note: ZAP/* will match any ZAP channel that *is not referenced* in another button (ie: extensions) 
     
    233240  $dbh = DBI->connect("dbi:SQLite:dbname=$db_file","",""); 
    234241} 
    235242 
     243# Get layout-info from a "panel" table in the freepbx database 
     244if (table_exists($dbh,"panel")) { 
     245  $statement = "SELECT id, legend, startpos, stoppos, color1, color2 from panel"; 
     246  $result = $dbh->selectall_arrayref($statement); 
     247  @resultSet = @{$result}; 
     248  if ( $#resultSet == -1 ) { 
     249    print "Notice: no panel defined\n"; 
     250  } 
     251  push(@panellist, @{ $result }); 
     252  @rectangles = @panellist; 
     253} 
     254 
     255# Automated generation of style-info from layout-info 
     256$autoextenpos=styleinfo("extension"); 
     257$autotrunkpos=styleinfo("trunk"); 
     258$autoparkingpos=styleinfo("parking"); 
     259$autoconfepos=styleinfo("conference"); 
     260$autoqueuepos=styleinfo("queue"); 
     261 
     262if ($layoutbuttonsonly == 1) {$extenpos = $trunkpos = $parkingpos = $confepos = $queuepos = ""} 
     263 
     264if (defined($autoextenpos)) {$extenpos = $autoextenpos;} 
     265if (defined($autotrunkpos)) {$trunkpos = $autotrunkpos;} 
     266if (defined($autoparkingpos)) {$parkingpos = $autoparkingpos;} 
     267if (defined($autoconfepos)) {$confepos = $autoconfepos;} 
     268if (defined($autoqueuepos)) {$queuepos = $autoqueuepos;} 
     269 
     270 
    236271open( EXTEN, ">$op_conf" ) or die "Cannot create/overwrite config file: $op_conf ($!)\n"; 
    237272print EXTEN $warning_banner; 
    238273 
     
    537572 
    538573  foreach my $rect ( @rectangles ) { 
    539574    my $comment = @{$rect}[0]; 
    540     my $color1 = @{$rect}[3]; 
    541     my $color2 = @{$rect}[4]; 
    542     my $start = @{$rect}[1]; 
    543     my $stop = @{$rect}[2]; 
     575    my $color1 = @{$rect}[4]; 
     576    my $color2 = @{$rect}[5]; 
     577    my $start = @{$rect}[2]; 
     578    my $stop = @{$rect}[3]; 
    544579     
    545     my $xposition = $buttonsizex * int(($start-1)/$numbuttonsy); 
    546     my $yposition = $buttonsizey * (($start-1)%$numbuttonsy); 
     580    my $xposition = $buttonsoriginx + $buttonsizex * int(($start-1)/$numbuttonsy); 
     581    my $yposition = $buttonsoriginy + $buttonsizey * (($start-1)%$numbuttonsy); 
    547582    my $xsize = $buttonsizex * (1 + int(($stop-1)/$numbuttonsy) - int(($start-1)/$numbuttonsy)); 
    548583    my $ysize = $buttonsizey * (1 + (($stop-1)%$numbuttonsy) - (($start-1)%$numbuttonsy)); 
     584 
     585    if (($xsize <= 0) || ($ysize <= 0)) {next;} 
    549586     
    550     $xsize -= 2; 
    551     $ysize -= 2; 
     587    $xposition += $rectmarginx; 
     588    $yposition += $rectmarginy; 
     589    $xsize -= 2 * $rectmarginx; 
     590    $ysize -= 2 * $rectmarginy; 
    552591     
    553     $yposition += 32; 
    554    
    555592    print EXTEN "\n; $comment\n[rectangle]\nx=$xposition\ny=$yposition\nwidth=$xsize\nheight=$ysize\nline_width=0\nline_color=$color1\nfade_color1=$color1\nfade_color2=$color2\nrnd_border=2\nalpha=20\nlayer=bottom\n"; 
    556593  } 
    557594 
    558595  ### Write legends 
    559596 
    560597  foreach my $legend ( @rectangles ) { 
    561     my $text = @{$legend}[0]; 
    562     my $start = @{$legend}[1]; 
     598    my $text = @{$legend}[1]; 
     599    my $start = @{$legend}[2]; 
     600    my $stop = @{$legend}[3]; 
    563601     
    564     my $xposition = $buttonsizex * int(($start-1)/$numbuttonsy); 
    565     my $yposition = $buttonsizey * (($start-1)%$numbuttonsy); 
     602    my $xposition = $buttonsoriginx + $buttonsizex * int(($start-1)/$numbuttonsy); 
     603    my $yposition = $buttonsoriginy + $buttonsizey * (($start-1)%$numbuttonsy); 
     604    my $xsize = $buttonsizex * (1 + int(($stop-1)/$numbuttonsy) - int(($start-1)/$numbuttonsy)); 
     605    my $ysize = $buttonsizey * (1 + (($stop-1)%$numbuttonsy) - (($start-1)%$numbuttonsy)); 
     606 
     607    if (($xsize <= 0) || ($ysize <= 0)) {next;} 
    566608 
    567     $xposition += 3
    568     $yposition += 32
     609    $xposition += $legendoffsetx
     610    $yposition += $legendoffsety
    569611   
    570612    print EXTEN "\n[LEGEND]\nx=$xposition\ny=$yposition\ntext=$text\nfont_size=18\nfont_family=Arial\nuse_embed_fonts=1\n"; 
    571613  } 
     
    581623  foreach $range (@rangelist) { 
    582624    @rangeval=split("-",$range); 
    583625    return $rangeval[0] if $last < $rangeval[0]; 
    584     return $last+1 if $last < $rangeval[1]
     626    return $last+1 if defined($rangeval[1]) && ($last < $rangeval[1])
    585627    #Need to try another range def... 
    586628  } 
    587629  #If we get here, we ran out of positions :( 
     
    625667 
    626668 
    627669sub styleinfo { 
    628   my $legend = shift; 
     670  my $id = shift; 
     671  my $retval; 
    629672  foreach my $rect ( @rectangles ) { 
    630     if ($legend  eq @{$rect}[0]) { 
     673    if ($id  eq @{$rect}[0]) { 
    631674 
    632       my $start = @{$rect}[1]; 
    633       my $stop = @{$rect}[2]; 
     675      my $start = @{$rect}[2]; 
     676      my $stop = @{$rect}[3]; 
    634677       
    635678      my $xposition = int(($start-1)/$numbuttonsy); 
    636679      my $yposition = (($start-1)%$numbuttonsy); 
    637       my $xsize = int(($stop-1)/$numbuttonsy) - int(($start-1)/$numbuttonsy); 
    638       my $ysize = (($stop-1)%$numbuttonsy) - (($start-1)%$numbuttonsy); 
     680      my $xsize = 1 + int(($stop-1)/$numbuttonsy) - int(($start-1)/$numbuttonsy); 
     681      my $ysize = 1 + (($stop-1)%$numbuttonsy) - (($start-1)%$numbuttonsy); 
    639682   
     683      if (($xsize <= 0) || ($ysize <= 0)) {print "Warning: rectange '$id' has negative area\n"; last;} 
    640684      $styleinfo = ""; 
    641685      if ($ysize > 2) { 
    642         $styleinfo .= ($start + 1) . "-" . ($start + $ysize) . ","; 
     686        $styleinfo .= ($start + 1) . "-" . ($start + $ysize - 1) . ","; 
    643687      }  
    644688      elsif ($ysize == 2) { 
    645689        $styleinfo .= ($start + 1) . ","; 
    646690      } 
    647691       
    648       for (my $i = 1 ; $i <= $xsize ; $i++ ) { 
     692      for (my $i = 1 ; $i < $xsize ; $i++ ) { 
    649693        if ($ysize > 1) { 
    650           $styleinfo .= (($i + $xposition) * $numbuttonsy + $yposition + 1) . "-" . (($i + $xposition) * $numbuttonsy + $yposition + $ysize + 1) . ","; 
     694          $styleinfo .= (($i + $xposition) * $numbuttonsy + $yposition + 1) . "-" . (($i + $xposition) * $numbuttonsy + $yposition + $ysize) . ","; 
    651695        }  
    652696        else { 
    653697          $styleinfo .= (($i + $xposition) * $numbuttonsy + $yposition + 1) . ",";     
    654698        }  
    655699      } 
     700      $retval = $styleinfo; 
    656701      last; 
    657702    } 
    658703  } 
    659   return $styleinfo
     704  return $retval
    660705}