Ticket #2989: retrieve_op_conf_from_mysql.patch

File retrieve_op_conf_from_mysql.patch, 7.8 kB (added by Nick_Lewis, 4 months 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} 
Donate



Support
Download
Develop
Forums
News
Documentation
Paid Support
About

Paid Ads