source: llx-bootmanager/trunk/fuentes/install.llx-bootmanager/usr/share/llxbootmanager/www-boot/menu.php @ 415

Last change on this file since 415 was 415, checked in by hectorgh, 4 years ago

adding project files

File size: 3.8 KB
Line 
1<?php
2
3$MAC=$_GET["mac"];
4 
5header ( "Content-type: text/plain" );
6
7$default_boot=""; // To set default boot when reading
8
9function write_header($time){
10echo "
11MENU TITLE Arrencada per xarxa de LliureX
12MENU BACKGROUND pxe/lliurex-pxe.png
13
14MENU WIDTH 80
15MENU MARGIN 10
16MENU ROWS 12
17MENU TABMSGROW 18
18MENU CMDLINEROW 12
19MENU ENDROW 24
20MENU TIMEOUTROW 20
21menu color title  1;36;44   #ff8bc2ff #00000000 std
22menu color unsel  37;44     #ff1069c5 #00000000 std
23menu color sel    7;37;40   #ff000000 #ffff7518 all
24menu color hotkey 1;37;44   #ffffffff #00000000 std
25menu color hotsel 1;7;37;40 #ff000431 #ffff7518 all
26menu color border 0 #00ffffff #00ffffff none
27TIMEOUT ".$time."
28";
29}
30
31function getBootTimeOut(){
32        $cfgpath="/etc/llxbootmanager/bootcfg.json";
33        $data=file_get_contents($cfgpath);
34        $json_data=json_decode($data, true);
35        return $json_data["timeout"];
36}
37
38function getBootOrder(){
39        $cfgpath="/etc/llxbootmanager/bootcfg.json";
40        $data=file_get_contents($cfgpath);
41        $json_data=json_decode($data, true);
42        return $json_data["bootorder"];
43}
44
45function getClientSpecificBoot($MAC){
46
47        $defboot=null;
48        try{
49                $cfgpath="/etc/llxbootmanager/clients.json";
50                $data=file_get_contents($cfgpath);
51                $json_data=json_decode($data, true);
52                foreach ($json_data["clients"] as $client){
53                        if ($MAC==$client["mac"])  {
54                                // IDEA: Can check if it is bootable?
55                                return $client["boot"];
56                               
57                                }
58                }
59        }catch (Exception $e){
60                return null;                   
61        }
62        return $defboot;
63}
64
65
66function findMenuEntry($menuList, $option){
67        $MenuEntry=new stdClass();
68        $MenuEntry->arraypos=-1;
69        $MenuEntry->menuitem=null;
70
71        $pos=0;
72        foreach($menuList as $menuItem){
73                if($option==$menuItem->id){
74                        $MenuEntry->arraypos=$pos;
75                        $MenuEntry->menuitem=$menuItem;
76                        echo ("_pos_".$pos."\n");
77                }
78                $pos=$pos+1;
79        }
80        return $MenuEntry;
81}
82
83// Is there any specific boot for MAC?
84$specificBoot=getClientSpecificBoot($MAC);
85if ($specificBoot==null) error_log("Mac unregistered");
86else error_log($specificBoot);
87
88// Write Menu
89$timeout=getBootTimeOut();
90if ($specificBoot!=null) $timeout="1"; // Set to minimum
91write_header($timeout);
92
93// Getting boot order
94$bootorder=getBootOrder();
95
96// Setting bootlist
97$bootlist=array();
98
99// Setting menu entries
100$menuList=array();
101
102// Setting rescue menu entries
103$rescueMenu=array();
104
105// Include all files in pxemenu.d menu to $menulist
106foreach (glob("pxemenu.d/*.php") as $filename)
107{
108     $MenuEntryListObject=null;
109        // $ filename should define $MenuEntryListObject
110     include $filename;
111       
112        if($MenuEntryListObject!=null){
113                foreach($MenuEntryListObject as $entry){
114                        $current_label=explode("\n", str_replace("label ", "",$entry->menuString))[0];
115                        // If there's not default boot or it exists and is current, let's add.
116                        error_log("specific boot:".$specificBoot."*");
117                        error_log("Current Label:".$current_label."*");
118                        array_push($rescueMenu, $entry); // Filling rescue menu
119                        if (($specificBoot==null)||($specificBoot==$current_label)) 
120                                array_push($menuList, $entry);
121                }
122                // If menulist is empty, overwrite by rescuemenu
123                if (count($menuList)==0) {
124                        error_log("[LLXBootmanager Warning] Entry ".$specificBoot." does not exists.");
125                        $menuList=$rescueMenu;
126                        }
127        }
128       
129}
130
131// Ordering menu list
132foreach ($bootorder as $option){
133        $entry=findMenuEntry($menuList, $option);  // find option in menu list
134        if ($entry->menuitem!=null){
135                //echo "Adding: ".$entry->menuitem->id." Removing: ".$entry->arraypos."\n";
136                array_push($bootlist, $entry->menuitem); // Adding menu entry to boot list
137                unset($menuList[$entry->arraypos]);
138                $menuList=array_values($menuList);
139        }
140}
141
142/* REMOVED:
143 * If menu entries are not in list them won't be shown.
144 *
145 // Adding options that are not in the list
146foreach ($menuList as $entry)
147        array_push($bootlist, $entry); // Adding menu entry to boot list
148*/
149
150foreach ($bootlist as $opt){
151        //echo $opt->id;
152        echo $opt->menuString."\n";
153 }
154
155?>
156
157
Note: See TracBrowser for help on using the repository browser.