| [fb2ee20] | 1 | <?php | 
|---|
 | 2 | /** | 
|---|
 | 3 |  * @file    index.php | 
|---|
| [3551804] | 4 |  * @brief   OpenGnsys Server REST API manager. | 
|---|
| [fb2ee20] | 5 |  * @warning All input and output messages are formatted in JSON. | 
|---|
 | 6 |  * @note    Some ideas are based on article "How to create REST API for Android app using PHP, Slim and MySQL" by Ravi Tamada, thanx. | 
|---|
 | 7 |  * @license GNU GPLv3+ | 
|---|
 | 8 |  * @author  Ramón M. Gómez, ETSII Univ. Sevilla | 
|---|
| [3551804] | 9 |  * @version 1.1.0 - First version | 
|---|
| [ac8b234e] | 10 |  * @date    2016-09-19 | 
|---|
| [fb2ee20] | 11 |  */ | 
|---|
 | 12 |  | 
|---|
 | 13 |  | 
|---|
 | 14 | // Auxiliar functions. | 
|---|
 | 15 |  | 
|---|
 | 16 | /** | 
|---|
 | 17 |  * @brief    Check if user is administrator and print error messages if not. | 
|---|
 | 18 |  * @param    int adminid   Administrator id. | 
|---|
 | 19 |  * @return   boolean       "true" if admin id. is equals to global user id., otherwise "false". | 
|---|
 | 20 |  */ | 
|---|
 | 21 | function checkAdmin($adminid) { | 
|---|
 | 22 |         global $userid; | 
|---|
 | 23 |  | 
|---|
 | 24 |         if ($adminid == $userid) { | 
|---|
 | 25 |                 return true; | 
|---|
 | 26 |         } else { | 
|---|
 | 27 |                 // Print error message. | 
|---|
 | 28 |                 $response['message'] = 'Cannot access this resource'; | 
|---|
 | 29 |                 jsonResponse(401, $response); | 
|---|
 | 30 |                 return false; | 
|---|
 | 31 |         } | 
|---|
 | 32 | } | 
|---|
 | 33 |  | 
|---|
| [606a0c7] | 34 | /** | 
|---|
 | 35 |  * @fn    addClassroomGroup(&$classroomGroups, $rs) | 
|---|
 | 36 |  * @brief Funcion privada usada para añadir grupos de aulas recursivamente | 
|---|
 | 37 |  * @param classroomGroups Grupos de aulas que pueden contener más grupos | 
|---|
 | 38 |  * @param rs resultset de la consulta a la base de datos. | 
|---|
 | 39 |  */ | 
|---|
 | 40 | function addClassroomGroup(&$classroomGroups, $rs){ | 
|---|
 | 41 |  | 
|---|
 | 42 |         array_walk($classroomGroups, function(&$group,$key){ | 
|---|
 | 43 |                 global $rs; | 
|---|
 | 44 |                 if (isset($group['id']) && $group['id'] === $rs->campos["group_group_id"]) { | 
|---|
 | 45 |                         array_push($group["classroomGroups"],array("id" => $rs->campos["group_id"],  | 
|---|
 | 46 |                                 "name" => $rs->campos["nombregrupoordenador"],  | 
|---|
 | 47 |                                 "comments" => $rs->campos["comentarios"], | 
|---|
 | 48 |                                 "classroomGroups" => array())); | 
|---|
 | 49 |                 } | 
|---|
 | 50 |                 else if(count($group["classroomGroups"]) > 0){ | 
|---|
 | 51 |                         addClassroomGroup($group["classroomGroups"], $rs); | 
|---|
 | 52 |                 } | 
|---|
 | 53 |                 /**/ | 
|---|
 | 54 |         }); | 
|---|
 | 55 | } | 
|---|
| [fb2ee20] | 56 |  | 
|---|
| [2a337db] | 57 | /** | 
|---|
 | 58 |  * @fn    getStatus(ouid, labid, [clntid]) | 
|---|
 | 59 |  * @brief    Returns client execution status or status of all lab's clients. | 
|---|
 | 60 |  * @param    ouid    OU id. | 
|---|
 | 61 |  * @param    labid   Lab. id. | 
|---|
 | 62 |  * @param    clntid  Client id. (optional) | 
|---|
 | 63 |  * @return   string  JSON object or array of objects including status data. | 
|---|
 | 64 |  */ | 
|---|
 | 65 | function getStatus($ouid, $labid, $clntid=0) { | 
|---|
 | 66 |         global $userid; | 
|---|
 | 67 |         global $cmd; | 
|---|
 | 68 |         global $LONCABECERA; | 
|---|
 | 69 |         global $LONHEXPRM; | 
|---|
 | 70 |         $app = \Slim\Slim::getInstance(); | 
|---|
 | 71 |         $clientid = $clientip = ""; | 
|---|
 | 72 |         $urls = Array(); | 
|---|
 | 73 |         // Status mapping. | 
|---|
 | 74 |         $status = Array('OFF'=>"off", | 
|---|
 | 75 |                         'INI'=>"initializing", | 
|---|
| [d57fcbc] | 76 |                         'OPG'=>"oglive", | 
|---|
| [2a337db] | 77 |                         'BSY'=>"busy", | 
|---|
 | 78 |                         'LNX'=>"linux", | 
|---|
 | 79 |                         'OSX'=>"macos", | 
|---|
 | 80 |                         'WIN'=>"windows", | 
|---|
 | 81 |                         'UNK'=>"unknown"); | 
|---|
 | 82 |         // Parameters. | 
|---|
 | 83 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 84 |         $labid = htmlspecialchars($labid); | 
|---|
 | 85 |         $single = is_numeric(explode("/", $app->request->getResourceUri())[6]); | 
|---|
 | 86 |  | 
|---|
 | 87 |         // Database query. | 
|---|
 | 88 |         $cmd->texto = <<<EOD | 
|---|
 | 89 | SELECT adm.idadministradorcentro, entornos.ipserveradm, entornos.portserveradm, | 
|---|
 | 90 |        aulas.idaula, ordenadores.idordenador, ordenadores.ip | 
|---|
 | 91 |   FROM entornos, ordenadores | 
|---|
 | 92 |   JOIN aulas USING(idaula) | 
|---|
 | 93 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 94 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 95 |    AND adm.idcentro='$ouid' | 
|---|
 | 96 |    AND aulas.idaula='$labid' | 
|---|
 | 97 | EOD; | 
|---|
 | 98 |         // Request for a single client. | 
|---|
 | 99 |         if ($single) { | 
|---|
 | 100 |                 $clntid = htmlspecialchars($clntid); | 
|---|
 | 101 |                 $cmd->texto .= <<<EOD | 
|---|
 | 102 |    AND ordenadores.idordenador='$clntid'; | 
|---|
 | 103 | EOD; | 
|---|
 | 104 |         } else { | 
|---|
 | 105 |                 $response = Array(); | 
|---|
 | 106 |         } | 
|---|
 | 107 |         $rs=new Recordset; | 
|---|
 | 108 |         $rs->Comando=&$cmd; | 
|---|
 | 109 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
 | 110 |         $rs->Primero(); | 
|---|
 | 111 |         // Check if user is an UO admin and asset exists. | 
|---|
 | 112 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and (($single and checkParameter($rs->campos["idordenador"])) or (! $single and checkParameter($rs->campos["idaula"])))) { | 
|---|
 | 113 |                 // First, try to connect to ogAdmCleint service. | 
|---|
 | 114 |                 $serverip = $rs->campos["ipserveradm"]; | 
|---|
 | 115 |                 $serverport = $rs->campos["portserveradm"]; | 
|---|
 | 116 |                 while (!$rs->EOF) { | 
|---|
 | 117 |                         $id[$rs->campos["ip"]] = $rs->campos["idordenador"]; | 
|---|
 | 118 |                         $stat[$rs->campos["ip"]] = $status['OFF']; | 
|---|
 | 119 |                         $rs->Siguiente(); | 
|---|
 | 120 |                 } | 
|---|
 | 121 |                 // Connect to reset client's status. | 
|---|
 | 122 |                 $clientid = implode(",", $id); | 
|---|
 | 123 |                 $clientip = implode(";", array_keys($id)); | 
|---|
 | 124 |                 $reqframe = "nfn=Sondeo\r". | 
|---|
 | 125 |                             "ido=$clientid\r". | 
|---|
 | 126 |                             "iph=$clientip\r"; | 
|---|
 | 127 |                 $result = sendCommand($serverip, $serverport, $reqframe, $values); | 
|---|
 | 128 |                 // Connect to fetch client's status. | 
|---|
 | 129 |                 // Asuming client is off by default. | 
|---|
 | 130 |                 $values["tso"]="OFF"; | 
|---|
 | 131 |                 // Iterate to check client's status. | 
|---|
 | 132 |                 // Exit if status!=OFF or end iterations (status=OFF). | 
|---|
 | 133 |                 $maxIter = 30; | 
|---|
 | 134 |                 for ($i=1; $i<$maxIter and preg_match('/OFF/', $values["tso"]); $i++) { | 
|---|
 | 135 |                         // Connect to check status. | 
|---|
 | 136 |                         $reqframe = "nfn=respuestaSondeo\r". | 
|---|
 | 137 |                                     "ido=$clientid\r". | 
|---|
 | 138 |                                     "iph=$clientip\r"; | 
|---|
 | 139 |                         $result = sendCommand($serverip, $serverport, $reqframe, $values); | 
|---|
 | 140 |                         // Wait until next checking (0.1 ms). | 
|---|
 | 141 |                         usleep(100000); | 
|---|
 | 142 |                 } | 
|---|
 | 143 |                 // Parse status response. | 
|---|
 | 144 |                 if ($result) { | 
|---|
 | 145 |                         // Check status type. | 
|---|
 | 146 |                         if (checkParameter($values["tso"])) { | 
|---|
 | 147 |                                 foreach (explode(";", $values["tso"]) as $data) { | 
|---|
 | 148 |                                         if (!empty($data)) { | 
|---|
 | 149 |                                                 list($clip, $clst) = explode("/", $data); | 
|---|
 | 150 |                                                 if ($clst != "OFF") { | 
|---|
 | 151 |                                                         // Update current status. | 
|---|
 | 152 |                                                         $stat[$clip] = $status[$clst]; | 
|---|
 | 153 |                                                 } | 
|---|
 | 154 |                                         } | 
|---|
 | 155 |                                 } | 
|---|
 | 156 |                         } | 
|---|
 | 157 |                         // Prepare request to new OGAgent for OSes. | 
|---|
 | 158 |                         foreach ($stat as $ip => $st) { | 
|---|
 | 159 |                                 if ($st == "off") { | 
|---|
 | 160 |                                         $urls[$ip] = "https://$ip:8000/opengnsys/status"; | 
|---|
 | 161 |                                 } | 
|---|
 | 162 |                         } | 
|---|
 | 163 |                         // Send request to OGAgents. | 
|---|
 | 164 |                         if (isset($urls)) { | 
|---|
 | 165 |                                 $result = multiRequest($urls); | 
|---|
 | 166 |                         } | 
|---|
 | 167 |                         // Parse responses. | 
|---|
 | 168 |                         reset($urls); | 
|---|
 | 169 |                         foreach ($result as $res) { | 
|---|
 | 170 |                                 if (!empty($res['data'])) { | 
|---|
 | 171 |                                         // Get status and session data. | 
|---|
 | 172 |                                         $ip = key($urls); | 
|---|
 | 173 |                                         $data = json_decode($res['data']); | 
|---|
 | 174 |                                         if (@isset($status[$data->status])) { | 
|---|
 | 175 |                                                 $stat[$ip] = $status[$data->status]; | 
|---|
 | 176 |                                                 $logged[$ip] = $data->loggedin; | 
|---|
 | 177 |                                         } else { | 
|---|
 | 178 |                                                 $stat[$ip] = $status['UNK']; | 
|---|
 | 179 |                                         } | 
|---|
 | 180 |                                 } | 
|---|
 | 181 |                                 unset($urls[$ip]); | 
|---|
 | 182 |                         } | 
|---|
 | 183 |                         // Compose JSON response. | 
|---|
 | 184 |                         if ($single) { | 
|---|
 | 185 |                                 // Single response. | 
|---|
 | 186 |                                 $response['id'] = reset($id); | 
|---|
 | 187 |                                 $response['ip'] = key($id); | 
|---|
 | 188 |                                 $response['status'] = $stat[$ip]; | 
|---|
 | 189 |                                 empty($logged[$ip]) || $response['loggedin'] = $logged[$ip]; | 
|---|
 | 190 |                         } else { | 
|---|
 | 191 |                                 // Multiple responses. | 
|---|
 | 192 |                                 foreach ($stat as $ip => $st) { | 
|---|
 | 193 |                                         $tmp = Array(); | 
|---|
 | 194 |                                         $tmp['id'] = $id[$ip]; | 
|---|
 | 195 |                                         $tmp['ip'] = $ip; | 
|---|
 | 196 |                                         $tmp['status'] = $stat[$ip]; | 
|---|
 | 197 |                                         empty($logged[$ip]) || $tmp['loggedin'] = $logged[$ip]; | 
|---|
 | 198 |                                         array_push($response, $tmp); | 
|---|
 | 199 |                                 } | 
|---|
 | 200 |                         } | 
|---|
 | 201 |                         jsonResponse(200, $response); | 
|---|
 | 202 |                 } else { | 
|---|
 | 203 |                         // Access error. | 
|---|
 | 204 |                         $response['message'] = "Cannot access to OpenGnsys server"; | 
|---|
 | 205 |                         jsonResponse(500, $response); | 
|---|
 | 206 |                 } | 
|---|
 | 207 |         } | 
|---|
 | 208 |         $rs->Cerrar();  | 
|---|
 | 209 | } | 
|---|
 | 210 |  | 
|---|
| [fb2ee20] | 211 |  | 
|---|
| [3551804] | 212 | // REST routes. | 
|---|
| [fb2ee20] | 213 |  | 
|---|
 | 214 | /** | 
|---|
 | 215 |  * @brief    user login. | 
|---|
 | 216 |  * @note     Route: /login, Method: POST | 
|---|
 | 217 |  * @param    string username   User name. | 
|---|
 | 218 |  * @param    string password   User password. | 
|---|
 | 219 |  * @return   string            JSON response with user id. and API key. | 
|---|
 | 220 |  * @note     User's API key is stored in a new field of "usuarios" table. | 
|---|
 | 221 |  */ | 
|---|
 | 222 | $app->post('/login', | 
|---|
 | 223 |     function() use ($app) { | 
|---|
 | 224 |         global $cmd; | 
|---|
 | 225 |         global $userid; | 
|---|
 | 226 |  | 
|---|
| [5ff84a5] | 227 |         $response = Array(); | 
|---|
| [fb2ee20] | 228 |         // Reading JSON parameters. | 
|---|
 | 229 |         try { | 
|---|
 | 230 |                 $input = json_decode($app->request()->getBody()); | 
|---|
 | 231 |                 $user = htmlspecialchars($input->username); | 
|---|
 | 232 |                 $pass = htmlspecialchars($input->password); | 
|---|
 | 233 |         } catch (Exception $e) { | 
|---|
| [29bc749] | 234 |                 // Error message. | 
|---|
| [fb2ee20] | 235 |                 $response["message"] = $e->getMessage(); | 
|---|
 | 236 |                 jsonResponse(400, $response); | 
|---|
 | 237 |                 $app->stop(); | 
|---|
 | 238 |         } | 
|---|
 | 239 |  | 
|---|
| [3551804] | 240 |         // Checking parameters.  | 
|---|
| [fb2ee20] | 241 |         if (! empty($user) and ! empty($pass)) { | 
|---|
 | 242 |                 // Database query. | 
|---|
 | 243 |                 $cmd->texto = "SELECT idusuario, apikey | 
|---|
 | 244 |                                  FROM usuarios | 
|---|
| [7441e57] | 245 |                                 WHERE usuario='$user' AND pasguor=SHA2('$pass',224)"; | 
|---|
| [fb2ee20] | 246 |                 $rs=new Recordset; | 
|---|
 | 247 |                 $rs->Comando=&$cmd; | 
|---|
 | 248 |                 if ($rs->Abrir()) { | 
|---|
 | 249 |                         $rs->Primero(); | 
|---|
 | 250 |                         if (!$rs->EOF){ | 
|---|
 | 251 |                                 // JSON response. | 
|---|
 | 252 |                                 $userid=$rs->campos["idusuario"]; | 
|---|
 | 253 |                                 $apikey=$rs->campos["apikey"]; | 
|---|
 | 254 |                                 $response['userid'] = $userid; | 
|---|
 | 255 |                                 $response['apikey'] = $apikey; | 
|---|
 | 256 |                                 jsonResponse(200, $response); | 
|---|
 | 257 |                         } else { | 
|---|
 | 258 |                                 // Credentials error. | 
|---|
 | 259 |                                 $response['message'] = 'Login failed. Incorrect credentials'; | 
|---|
 | 260 |                                 jsonResponse(401, $response); | 
|---|
 | 261 |                                 $app->stop(); | 
|---|
 | 262 |                         } | 
|---|
 | 263 |                         $rs->Cerrar(); | 
|---|
 | 264 |                 } else { | 
|---|
 | 265 |                         // Access error. | 
|---|
 | 266 |                         $response['message'] = "An error occurred. Please try again"; | 
|---|
 | 267 |                         jsonResponse(500, $response); | 
|---|
 | 268 |                         $app->stop(); | 
|---|
 | 269 |                 } | 
|---|
 | 270 |         } else { | 
|---|
 | 271 |                 # Error: missing some input parameter. | 
|---|
 | 272 |                 $response['message'] = 'Missing username or password'; | 
|---|
 | 273 |                 jsonResponse(400, $response); | 
|---|
 | 274 |                 $app->stop(); | 
|---|
 | 275 |         } | 
|---|
 | 276 |     } | 
|---|
 | 277 | ); | 
|---|
 | 278 |  | 
|---|
 | 279 | /** | 
|---|
 | 280 |  * @brief    List all defined Organizational Units | 
|---|
 | 281 |  * @note     Route: /ous, Method: GET | 
|---|
 | 282 |  * @param    no | 
|---|
| [1485b99] | 283 |  * @return   JSON array with id. and name for every defined OU | 
|---|
| [fb2ee20] | 284 |  */ | 
|---|
| [18391d1] | 285 | $app->get('/ous(/)', function() { | 
|---|
| [fb2ee20] | 286 |         global $cmd; | 
|---|
 | 287 |  | 
|---|
 | 288 |         $cmd->texto = "SELECT * FROM centros"; | 
|---|
 | 289 |         $rs=new Recordset; | 
|---|
 | 290 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 291 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [5ff84a5] | 292 |         $response = Array(); | 
|---|
| [fb2ee20] | 293 |         $rs->Primero(); | 
|---|
 | 294 |         while (!$rs->EOF) { | 
|---|
| [5ff84a5] | 295 |                 $tmp = Array(); | 
|---|
| [1485b99] | 296 |                 $tmp['id'] = $rs->campos["idcentro"]; | 
|---|
 | 297 |                 $tmp['name'] = $rs->campos["nombrecentro"]; | 
|---|
| [4a511f81] | 298 |                 array_push($response, $tmp); | 
|---|
| [fb2ee20] | 299 |                 $rs->Siguiente(); | 
|---|
 | 300 |         } | 
|---|
 | 301 |         $rs->Cerrar();  | 
|---|
 | 302 |         jsonResponse(200, $response); | 
|---|
| [3551804] | 303 |    }  | 
|---|
| [fb2ee20] | 304 | ); | 
|---|
 | 305 |  | 
|---|
 | 306 | /** | 
|---|
 | 307 |  * @brief    Get Organizational Unit data | 
|---|
 | 308 |  * @note     Route: /ous/id, Method: GET | 
|---|
 | 309 |  * @param    id      OU id. | 
|---|
| [1485b99] | 310 |  * @return   JSON string with OU's parameters | 
|---|
| [fb2ee20] | 311 |  */ | 
|---|
| [18391d1] | 312 | $app->get('/ous/:ouid(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 313 |     function($ouid) { | 
|---|
 | 314 |         global $cmd; | 
|---|
| [18391d1] | 315 |         global $userid; | 
|---|
| [fb2ee20] | 316 |  | 
|---|
 | 317 |         $ouid = htmlspecialchars($ouid); | 
|---|
| [18391d1] | 318 |         // Show OU information if user is OU's admin. | 
|---|
 | 319 |         $cmd->texto = <<<EOD | 
|---|
 | 320 | SELECT * | 
|---|
 | 321 |   FROM centros | 
|---|
 | 322 |  RIGHT JOIN administradores_centros USING(idcentro) | 
|---|
 | 323 |  WHERE administradores_centros.idadministradorcentro = '$userid' | 
|---|
 | 324 |    AND centros.idcentro = '$ouid' | 
|---|
 | 325 |  LIMIT 1; | 
|---|
 | 326 | EOD; | 
|---|
| [fb2ee20] | 327 |         $rs=new Recordset; | 
|---|
 | 328 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 329 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 330 |         $rs->Primero(); | 
|---|
| [18391d1] | 331 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and | 
|---|
 | 332 |             checkParameter($rs->campos["idcentro"])) { | 
|---|
| [bbc672f] | 333 |                 $response['id'] = $ouid; | 
|---|
 | 334 |                 $response['name'] = $rs->campos["nombrecentro"]; | 
|---|
| [fb2ee20] | 335 |                 $response['description'] = $rs->campos["comentarios"]; | 
|---|
 | 336 |                 jsonResponse(200, $response); | 
|---|
 | 337 |         } | 
|---|
 | 338 |         $rs->Cerrar();  | 
|---|
 | 339 |     } | 
|---|
 | 340 | ); | 
|---|
 | 341 |  | 
|---|
| [18391d1] | 342 | /** | 
|---|
 | 343 |  * @brief    List group of labs in an Organizational Unit | 
|---|
 | 344 |  * @note     Route: /ous/id/groups, Method: GET | 
|---|
 | 345 |  * @param    id      OU id. | 
|---|
 | 346 |  * @return   JSON array of OU groups | 
|---|
 | 347 |  */ | 
|---|
 | 348 | $app->get('/ous/:ouid/groups(/)', 'validateApiKey', function($ouid) { | 
|---|
| [23a72c0] | 349 |         global $cmd; | 
|---|
 | 350 |         global $userid; | 
|---|
 | 351 |  | 
|---|
 | 352 |         $ouid = htmlspecialchars($ouid); | 
|---|
| [18391d1] | 353 |         // List group of labs if user is OU's admin. | 
|---|
 | 354 |         $cmd->texto = <<<EOD | 
|---|
 | 355 | SELECT adm.idadministradorcentro, grupos.* | 
|---|
 | 356 |   FROM grupos | 
|---|
 | 357 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 358 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 359 |    AND idcentro='$ouid'; | 
|---|
 | 360 | EOD; | 
|---|
 | 361 |         $rs=new Recordset; | 
|---|
 | 362 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 363 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [18391d1] | 364 |         $rs->Primero(); | 
|---|
 | 365 |         // Check if user is an UO admin. | 
|---|
 | 366 |         if (checkAdmin($rs->campos["idadministradorcentro"])) { | 
|---|
| [5ff84a5] | 367 |                 $response = Array(); | 
|---|
| [18391d1] | 368 |                 // Read data. | 
|---|
 | 369 |                 if (! is_null($rs->campos["idcentro"])) { | 
|---|
 | 370 |                         while (!$rs->EOF) { | 
|---|
| [5ff84a5] | 371 |                                 $tmp = Array(); | 
|---|
| [18391d1] | 372 |                                 $tmp['id'] = $rs->campos["idgrupo"]; | 
|---|
 | 373 |                                 $tmp['name'] = $rs->campos["nombregrupo"]; | 
|---|
 | 374 |                                 $tmp['type'] = $rs->campos["tipo"]; | 
|---|
 | 375 |                                 $tmp['comments'] = $rs->campos["comentarios"]; | 
|---|
| [23a72c0] | 376 |                                 if($rs->campos["grupoid"] != 0){ | 
|---|
 | 377 |                                         $tmp['parent']['id'] = $rs->campos["grupoid"]; | 
|---|
 | 378 |                                 } | 
|---|
 | 379 |                                 array_push($response, $tmp); | 
|---|
 | 380 |                                 $rs->Siguiente(); | 
|---|
 | 381 |                         } | 
|---|
 | 382 |                 } | 
|---|
| [18391d1] | 383 |                 jsonResponse(200, $response); | 
|---|
| [23a72c0] | 384 |         } | 
|---|
| [18391d1] | 385 |         $rs->Cerrar(); | 
|---|
| [23a72c0] | 386 |     } | 
|---|
 | 387 | ); | 
|---|
 | 388 |  | 
|---|
| [ac8b234e] | 389 | /** | 
|---|
 | 390 |  * @brief    List all labs defined in an OU | 
|---|
 | 391 |  * @note     Route: /ous/id/labs, Method: GET | 
|---|
 | 392 |  * @param    id      OU id. | 
|---|
| [18391d1] | 393 |  * @return   JSON array of all UO's labs data  | 
|---|
| [ac8b234e] | 394 |  */ | 
|---|
| [18391d1] | 395 | $app->get('/ous/:ouid/labs(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 396 |     function($ouid) { | 
|---|
| [606a0c7] | 397 |         global $userid; | 
|---|
| [fb2ee20] | 398 |         global $cmd; | 
|---|
 | 399 |  | 
|---|
 | 400 |         $ouid = htmlspecialchars($ouid); | 
|---|
| [2aa8687] | 401 |         // Database query. | 
|---|
| [fb2ee20] | 402 |         $cmd->texto = <<<EOD | 
|---|
| [18391d1] | 403 | SELECT adm.idadministradorcentro, aulas.*, grp.idgrupo AS group_id, | 
|---|
| [606a0c7] | 404 |        grp.nombregrupoordenador, grp.grupoid AS group_group_id, grp.comentarios | 
|---|
| [fb2ee20] | 405 |   FROM aulas | 
|---|
 | 406 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
| [606a0c7] | 407 |   LEFT JOIN gruposordenadores AS grp USING(idaula) | 
|---|
| [18391d1] | 408 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
| [5ff84a5] | 409 |    AND adm.idcentro='$ouid' | 
|---|
| [606a0c7] | 410 |  ORDER BY aulas.idaula, grp.idgrupo | 
|---|
| [fb2ee20] | 411 | EOD; | 
|---|
 | 412 |         $rs=new Recordset; | 
|---|
 | 413 |         $rs->Comando=&$cmd; | 
|---|
| [606a0c7] | 414 |         if (!$rs->Abrir()) return(false);       // Error opening recordset. | 
|---|
| [18391d1] | 415 |         // Check if user is an UO admin. | 
|---|
| [fb2ee20] | 416 |         $rs->Primero(); | 
|---|
| [18391d1] | 417 |         if (checkAdmin($rs->campos["idadministradorcentro"])) { | 
|---|
| [5ff84a5] | 418 |                 $response = Array(); | 
|---|
| [18391d1] | 419 |                 if (! is_null($rs->campos["idcentro"])) { | 
|---|
 | 420 |                         while (!$rs->EOF) { | 
|---|
 | 421 |                                 // En los resultados las aulas vienen repetidas tantas veces como grupos tengan, solo dejamos uno | 
|---|
 | 422 |                                 $classroomIndex = -1; | 
|---|
 | 423 |                                 $found=false; | 
|---|
 | 424 |                                 $index = 0; | 
|---|
 | 425 |                                 while(!$found && $index < count($response)){ | 
|---|
 | 426 |                                         if(isset($response[$index]["id"]) && $response[$index]["id"] == $rs->campos["idaula"]){ | 
|---|
 | 427 |                                                 $classroomIndex = $index; | 
|---|
 | 428 |                                                 $found = true; | 
|---|
 | 429 |                                         } | 
|---|
 | 430 |                                         $index++; | 
|---|
| [606a0c7] | 431 |                                 } | 
|---|
| [18391d1] | 432 |                                 if(!$found){ | 
|---|
| [5ff84a5] | 433 |                                         $tmp = Array(); | 
|---|
| [18391d1] | 434 |                                         $tmp['id'] = $rs->campos["idaula"]; | 
|---|
 | 435 |                                         $tmp['name'] = $rs->campos["nombreaula"]; | 
|---|
 | 436 |                                         $tmp['inremotepc'] = $rs->campos["inremotepc"]==0 ? false: true; | 
|---|
 | 437 |                                         $tmp['group']['id'] = $rs->campos["grupoid"]; | 
|---|
 | 438 |                                         $tmp['ou']['id'] = $ouid; | 
|---|
 | 439 |                                         array_push($response, $tmp); | 
|---|
| [606a0c7] | 440 |                                 } | 
|---|
| [18391d1] | 441 |                                 else{ | 
|---|
 | 442 |                                         // Le añadimos el grupo en cuestion siempre que no sea un subgrupo | 
|---|
 | 443 |                                         if($rs->campos["group_group_id"] == 0){ | 
|---|
 | 444 |                                                 array_push($response[$classroomIndex]['classroomGroups'], | 
|---|
 | 445 |                                                         array("id" => $rs->campos["group_id"], | 
|---|
 | 446 |                                                         "name" => $rs->campos["nombregrupoordenador"], | 
|---|
 | 447 |                                                         "comments" => $rs->campos["comentarios"], | 
|---|
 | 448 |                                                         "classroomGroups" => array())); | 
|---|
 | 449 |                                         } | 
|---|
 | 450 |                                         else { | 
|---|
 | 451 |                                                 // Buscamos el grupo donde añadir el grupo | 
|---|
 | 452 |                                                 addClassroomGroup($response[$classroomIndex]['classroomGroups'], $rs); | 
|---|
 | 453 |                                         } | 
|---|
| [606a0c7] | 454 |                                 } | 
|---|
| [18391d1] | 455 |                                 $rs->Siguiente(); | 
|---|
| [606a0c7] | 456 |                         } | 
|---|
| [fb2ee20] | 457 |                 } | 
|---|
 | 458 |                 jsonResponse(200, $response); | 
|---|
 | 459 |         } | 
|---|
 | 460 |         $rs->Cerrar();  | 
|---|
 | 461 |     } | 
|---|
 | 462 | ); | 
|---|
 | 463 |  | 
|---|
| [ac8b234e] | 464 | /** | 
|---|
 | 465 |  * @brief    Get lab data | 
|---|
 | 466 |  * @note     Route: /ous/id1/labs/id2, Method: GET | 
|---|
 | 467 |  * @param    id1     OU id. | 
|---|
 | 468 |  * @param    id2     lab id. | 
|---|
 | 469 |  * @return   JSON string with lab parameters | 
|---|
 | 470 |  */ | 
|---|
| [4139899] | 471 | $app->get('/ous/:ouid/labs/:labid(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 472 |     function($ouid, $labid) { | 
|---|
| [4139899] | 473 |         global $userid; | 
|---|
| [fb2ee20] | 474 |         global $cmd; | 
|---|
 | 475 |  | 
|---|
 | 476 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 477 |         $labid = htmlspecialchars($labid); | 
|---|
| [2aa8687] | 478 |         // Database query. | 
|---|
| [fb2ee20] | 479 |         $cmd->texto = <<<EOD | 
|---|
| [2aa8687] | 480 | SELECT adm.idadministradorcentro, COUNT(idordenador) AS defclients, aulas.* | 
|---|
| [fb2ee20] | 481 |   FROM aulas | 
|---|
 | 482 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 483 |   LEFT JOIN ordenadores USING(idaula) | 
|---|
| [4139899] | 484 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 485 |    AND idcentro='$ouid' | 
|---|
| [fb2ee20] | 486 |    AND idaula='$labid'; | 
|---|
 | 487 | EOD; | 
|---|
 | 488 |         $rs=new Recordset; | 
|---|
 | 489 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 490 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 491 |         $rs->Primero(); | 
|---|
| [4139899] | 492 |         // Check if user is an UO admin and lab exists. | 
|---|
 | 493 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idaula"])) { | 
|---|
| [bbc672f] | 494 |                 $response['id'] = $rs->campos["idaula"]; | 
|---|
 | 495 |                 $response['name'] = $rs->campos["nombreaula"]; | 
|---|
 | 496 |                 $response['location'] = $rs->campos["ubicacion"]; | 
|---|
| [fb2ee20] | 497 |                 $response['description'] = $rs->campos["comentarios"]; | 
|---|
 | 498 |                 $response['inremotepc'] = $rs->campos["inremotepc"]==0 ? false: true; | 
|---|
| [bbc672f] | 499 |                 $response['capacity'] = $rs->campos["puestos"]; | 
|---|
| [fb2ee20] | 500 |                 $response['defclients'] = $rs->campos["defclients"]; | 
|---|
 | 501 |                 $response['projector'] = $rs->campos["cagnon"]==0 ? false: true; | 
|---|
 | 502 |                 $response['board'] = $rs->campos["pizarra"]==0 ? false: true; | 
|---|
 | 503 |                 $response['routerip'] = $rs->campos["router"]; | 
|---|
 | 504 |                 $response['netmask'] = $rs->campos["netmask"]; | 
|---|
 | 505 |                 $response['ntp'] = $rs->campos["ntp"]; | 
|---|
 | 506 |                 $response['dns'] = $rs->campos["dns"]; | 
|---|
 | 507 |                 $response['proxyurl'] = $rs->campos["proxy"]; | 
|---|
 | 508 |                 switch ($rs->campos["modomul"]) { | 
|---|
 | 509 |                         case 1:  $response['mcastmode'] = "half-duplex"; break; | 
|---|
 | 510 |                         case 2:  $response['mcastmode'] = "full-duplex"; break; | 
|---|
 | 511 |                         default: $response['mcastmode'] = $rs->campos["modomul"]; | 
|---|
 | 512 |                 } | 
|---|
 | 513 |                 $response['mcastip'] = $rs->campos["ipmul"]; | 
|---|
 | 514 |                 $response['mcastport'] = $rs->campos["pormul"]; | 
|---|
 | 515 |                 $response['mcastspeed'] = $rs->campos["velmul"]; | 
|---|
 | 516 |                 $response['p2pmode'] = $rs->campos["modp2p"]; | 
|---|
 | 517 |                 $response['p2ptime'] = $rs->campos["timep2p"]; | 
|---|
| [0126b05] | 518 |                 $response['picture'] = $rs->campos["urlfoto"]; | 
|---|
| [fb2ee20] | 519 |                 jsonResponse(200, $response); | 
|---|
 | 520 |         } | 
|---|
 | 521 |         $rs->Cerrar();  | 
|---|
 | 522 |     } | 
|---|
 | 523 | ); | 
|---|
 | 524 |  | 
|---|
| [213a832] | 525 |  | 
|---|
| [4139899] | 526 | /** | 
|---|
 | 527 |  * @brief    List all clients defined in a lab | 
|---|
 | 528 |  * @note     Route: /ous/id1/labs/id2/clients, Method: GET | 
|---|
 | 529 |  * @param    id1     OU id. | 
|---|
 | 530 |  * @param    id2     lab id. | 
|---|
 | 531 |  * @return   JSON data with lab id. and array of lab parameters | 
|---|
 | 532 |  */ | 
|---|
 | 533 | $app->get('/ous/:ouid/labs/:labid/clients(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 534 |     function($ouid, $labid) { | 
|---|
| [4139899] | 535 |         global $userid; | 
|---|
| [fb2ee20] | 536 |         global $cmd; | 
|---|
 | 537 |  | 
|---|
 | 538 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 539 |         $labid = htmlspecialchars($labid); | 
|---|
| [2aa8687] | 540 |         // Database query. | 
|---|
| [fb5338c] | 541 |         $cmd->texto = <<<EOD | 
|---|
| [2aa8687] | 542 | SELECT adm.idadministradorcentro, ordenadores.*, aulas.idaula AS labid | 
|---|
| [fb5338c] | 543 |   FROM ordenadores | 
|---|
| [4139899] | 544 |  RIGHT JOIN aulas USING(idaula) | 
|---|
| [fb5338c] | 545 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
| [4139899] | 546 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
| [2aa8687] | 547 |    AND adm.idcentro='$ouid' | 
|---|
 | 548 |    AND aulas.idaula='$labid'; | 
|---|
| [fb5338c] | 549 | EOD; | 
|---|
| [fb2ee20] | 550 |         $rs=new Recordset; | 
|---|
 | 551 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 552 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 553 |         $rs->Primero(); | 
|---|
| [4139899] | 554 |         // Check if user is an UO admin and lab exists. | 
|---|
 | 555 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["labid"])) { | 
|---|
| [5ff84a5] | 556 |                 $response = Array(); | 
|---|
| [fb2ee20] | 557 |                 while (!$rs->EOF) { | 
|---|
| [4139899] | 558 |                         if (!is_null($rs->campos["idordenador"])) { | 
|---|
| [5ff84a5] | 559 |                                 $tmp = Array(); | 
|---|
| [4139899] | 560 |                                 $tmp['id'] = $rs->campos["idordenador"]; | 
|---|
 | 561 |                                 $tmp['name'] = $rs->campos["nombreordenador"]; | 
|---|
 | 562 |                                 $tmp['ip'] = $rs->campos["ip"]; | 
|---|
 | 563 |                                 $tmp['mac'] = $rs->campos["mac"]; | 
|---|
 | 564 |                                 $tmp['ou']['id'] = $ouid; | 
|---|
 | 565 |                                 $tmp['lab']['id'] = $labid; | 
|---|
 | 566 |                                 array_push($response, $tmp); | 
|---|
 | 567 |                         } | 
|---|
| [fb2ee20] | 568 |                         $rs->Siguiente(); | 
|---|
 | 569 |                 } | 
|---|
 | 570 |                 jsonResponse(200, $response); | 
|---|
 | 571 |         } | 
|---|
 | 572 |         $rs->Cerrar();  | 
|---|
 | 573 |     } | 
|---|
 | 574 | ); | 
|---|
 | 575 |  | 
|---|
| [4139899] | 576 | /** | 
|---|
| [2a337db] | 577 |  * @brief    Get execution status of all clients defined in a lab | 
|---|
 | 578 |  * @note     Route: /ous/id1/labs/id2clients/id3/status, Method: GET | 
|---|
 | 579 |  * @param    id1     OU id. | 
|---|
 | 580 |  * @param    id2     lab id. | 
|---|
 | 581 |  * @return   JSON string with array of all client status defined in a lab | 
|---|
 | 582 |  */ | 
|---|
 | 583 | $app->get('/ous/:ouid/labs/:labid/clients/status(/)', 'validateApiKey', 'getStatus'); | 
|---|
 | 584 |  | 
|---|
 | 585 | /** | 
|---|
| [4139899] | 586 |  * @brief    Get client data | 
|---|
 | 587 |  * @note     Route: /ous/id1/labs/id2clients/id3, Method: GET | 
|---|
 | 588 |  * @param    id1     OU id. | 
|---|
 | 589 |  * @param    id2     lab id. | 
|---|
 | 590 |  * @param    id3     client id. | 
|---|
| [2aa8687] | 591 |  * @return   JSON string with hardware parameters | 
|---|
| [4139899] | 592 |  */ | 
|---|
 | 593 | $app->get('/ous/:ouid/labs/:labid/clients/:clntid(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 594 |     function($ouid, $labid, $clntid) { | 
|---|
| [4139899] | 595 |         global $userid; | 
|---|
| [fb2ee20] | 596 |         global $cmd; | 
|---|
 | 597 |  | 
|---|
 | 598 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 599 |         $labid = htmlspecialchars($labid); | 
|---|
 | 600 |         $clntid = htmlspecialchars($clntid); | 
|---|
| [2aa8687] | 601 |         // Database query. | 
|---|
| [fb5338c] | 602 |         $cmd->texto = <<<EOD | 
|---|
| [2aa8687] | 603 | SELECT adm.idadministradorcentro, ordenadores.* | 
|---|
| [fb5338c] | 604 |   FROM ordenadores | 
|---|
 | 605 |   JOIN aulas USING(idaula) | 
|---|
 | 606 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
| [4139899] | 607 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 608 |    AND idcentro='$ouid' | 
|---|
| [fb5338c] | 609 |    AND idaula='$labid' | 
|---|
 | 610 |    AND idordenador='$clntid'; | 
|---|
 | 611 | EOD; | 
|---|
| [fb2ee20] | 612 |         $rs=new Recordset; | 
|---|
 | 613 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 614 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 615 |         $rs->Primero(); | 
|---|
| [4139899] | 616 |         // Check if user is an UO admin, lab exists and client exists. | 
|---|
 | 617 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idaula"]) and checkParameter($rs->campos["idordenador"])) { | 
|---|
| [2aa8687] | 618 |                 // Read data. | 
|---|
| [bbc672f] | 619 |                 $response['id'] = $rs->campos["idordenador"]; | 
|---|
 | 620 |                 $response['name'] = $rs->campos["nombreordenador"]; | 
|---|
 | 621 |                 $response['serialno'] = $rs->campos["numserie"]; | 
|---|
| [fb2ee20] | 622 |                 $response['netiface'] = $rs->campos["netiface"]; | 
|---|
 | 623 |                 $response['netdriver'] = $rs->campos["netdriver"]; | 
|---|
 | 624 |                 $response['mac'] = $rs->campos["mac"]; | 
|---|
 | 625 |                 $response['ip'] = $rs->campos["ip"]; | 
|---|
 | 626 |                 $response['netmask'] = $rs->campos["mascara"]; | 
|---|
 | 627 |                 $response['routerip'] = $rs->campos["router"]; | 
|---|
| [4a511f81] | 628 |                 $response['repo']['id'] = $rs->campos["idrepositorio"]; | 
|---|
 | 629 |                 //$response['hardprofile']['id'] = $rs->campos["idperfilhard"]; | 
|---|
 | 630 |                 //$response['menu']['id'] = $rs->campos["idmenu"]; | 
|---|
| [fb5338c] | 631 |                 $response['validation'] = $rs->campos["validacion"]==0 ? false: true; | 
|---|
 | 632 |                 $response['boottype'] = $rs->campos["arranque"]; | 
|---|
| [0126b05] | 633 |                 $response['picture'] = $rs->campos["fotoord"]; | 
|---|
| [fb2ee20] | 634 |                 jsonResponse(200, $response); | 
|---|
 | 635 |         } | 
|---|
 | 636 |         $rs->Cerrar();  | 
|---|
 | 637 |     } | 
|---|
 | 638 | ); | 
|---|
 | 639 |  | 
|---|
| [2aa8687] | 640 | /** | 
|---|
 | 641 |  * @brief    Get client's harware configuration data | 
|---|
 | 642 |  * @note     Route: /ous/id1/labs/id2clients/id3/hardware, Method: GET | 
|---|
 | 643 |  * @param    id1     OU id. | 
|---|
 | 644 |  * @param    id2     lab id. | 
|---|
 | 645 |  * @param    id3     client id. | 
|---|
 | 646 |  * @return   JSON string with cleint parameters | 
|---|
 | 647 |  */ | 
|---|
 | 648 | $app->get('/ous/:ouid/labs/:labid/clients/:clntid/hardware(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 649 |     function($ouid, $labid, $clntid) { | 
|---|
| [4139899] | 650 |         global $userid; | 
|---|
| [fb2ee20] | 651 |         global $cmd; | 
|---|
 | 652 |  | 
|---|
 | 653 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 654 |         $labid = htmlspecialchars($labid); | 
|---|
 | 655 |         $clntid = htmlspecialchars($clntid); | 
|---|
| [2aa8687] | 656 |         // Database query. | 
|---|
| [fb2ee20] | 657 |         $cmd->texto = <<<EOD | 
|---|
| [2aa8687] | 658 | SELECT adm.idadministradorcentro, ordenadores.idordenador, ordenadores.nombreordenador, | 
|---|
| [fb2ee20] | 659 |        tipohardwares.nemonico, hardwares.descripcion | 
|---|
| [2aa8687] | 660 |   FROM ordenadores | 
|---|
 | 661 |   JOIN aulas USING(idaula) | 
|---|
 | 662 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 663 |   LEFT JOIN perfileshard_hardwares USING(idperfilhard) | 
|---|
 | 664 |   LEFT JOIN hardwares ON perfileshard_hardwares.idhardware=hardwares.idhardware | 
|---|
 | 665 |   LEFT JOIN tipohardwares ON tipohardwares.idtipohardware=hardwares.idtipohardware | 
|---|
 | 666 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 667 |    AND adm.idcentro='$ouid' | 
|---|
 | 668 |    AND aulas.idaula='$labid' | 
|---|
 | 669 |    AND ordenadores.idordenador='$clntid'; | 
|---|
| [fb2ee20] | 670 | EOD; | 
|---|
 | 671 |         $rs=new Recordset; | 
|---|
 | 672 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 673 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 674 |         $rs->Primero(); | 
|---|
| [2aa8687] | 675 |         // Check if user is an UO admin and client exists. | 
|---|
 | 676 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idordenador"])) { | 
|---|
 | 677 |                 // Read data. | 
|---|
| [bbc672f] | 678 |                 $response['id'] = $rs->campos["idordenador"]; | 
|---|
 | 679 |                 $response['name'] = $rs->campos["nombreordenador"]; | 
|---|
| [5ff84a5] | 680 |                 $response['hardware'] = Array(); | 
|---|
| [fb2ee20] | 681 |                 while (!$rs->EOF) { | 
|---|
| [2aa8687] | 682 |                         if (!is_null($rs->campos["nemonico"])) { | 
|---|
| [5ff84a5] | 683 |                                 $tmp = Array(); | 
|---|
| [2aa8687] | 684 |                                 $tmp['type'] = $rs->campos["nemonico"]; | 
|---|
 | 685 |                                 $tmp['description'] = $rs->campos["descripcion"]; | 
|---|
 | 686 |                                 array_push($response['hardware'], $tmp); | 
|---|
 | 687 |                         } | 
|---|
| [fb2ee20] | 688 |                         $rs->Siguiente(); | 
|---|
 | 689 |                 } | 
|---|
 | 690 |                 jsonResponse(200, $response); | 
|---|
 | 691 |         } | 
|---|
 | 692 |         $rs->Cerrar();  | 
|---|
 | 693 |     } | 
|---|
 | 694 | ); | 
|---|
 | 695 |  | 
|---|
| [2aa8687] | 696 | /** | 
|---|
 | 697 |  * @brief    Get client's disk configuration data | 
|---|
 | 698 |  * @note     Route: /ous/id1/labs/id2clients/id3/diskcfg, Method: GET | 
|---|
 | 699 |  * @param    id1     OU id. | 
|---|
 | 700 |  * @param    id2     lab id. | 
|---|
 | 701 |  * @param    id3     client id. | 
|---|
 | 702 |  * @return   JSON string with disk parameters | 
|---|
 | 703 |  */ | 
|---|
 | 704 | $app->get('/ous/:ouid/labs/:labid/clients/:clntid/diskcfg(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 705 |     function($ouid, $labid, $clntid) { | 
|---|
| [2aa8687] | 706 |         global $userid; | 
|---|
| [fb2ee20] | 707 |         global $cmd; | 
|---|
 | 708 |  | 
|---|
 | 709 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 710 |         $labid = htmlspecialchars($labid); | 
|---|
 | 711 |         $clntid = htmlspecialchars($clntid); | 
|---|
| [2aa8687] | 712 |         // Database query. | 
|---|
| [fb2ee20] | 713 |         $cmd->texto = <<<EOD | 
|---|
| [2aa8687] | 714 | SELECT adm.idadministradorcentro, ordenadores.idordenador AS clientid, | 
|---|
 | 715 |        ordenadores.nombreordenador, ordenadores_particiones.*, tipospar.tipopar, | 
|---|
| [208ee50] | 716 |        sistemasficheros.nemonico, nombresos.nombreso, imagenes.nombreca, | 
|---|
 | 717 |        (imagenes.revision - ordenadores_particiones.revision) AS difimagen | 
|---|
| [fb2ee20] | 718 |   FROM ordenadores_particiones | 
|---|
 | 719 |  RIGHT JOIN ordenadores USING(idordenador) | 
|---|
| [2aa8687] | 720 |   JOIN aulas USING(idaula) | 
|---|
 | 721 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
| [fb2ee20] | 722 |   LEFT JOIN tipospar USING(codpar) | 
|---|
 | 723 |   LEFT JOIN sistemasficheros USING(idsistemafichero) | 
|---|
 | 724 |   LEFT JOIN nombresos USING(idnombreso) | 
|---|
 | 725 |   LEFT JOIN imagenes USING(idimagen) | 
|---|
| [2aa8687] | 726 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 727 |    AND adm.idcentro='$ouid' | 
|---|
 | 728 |    AND aulas.idaula='$labid' | 
|---|
 | 729 |    AND ordenadores.idordenador='$clntid' | 
|---|
| [fb2ee20] | 730 |  ORDER BY numdisk ASC, numpar ASC; | 
|---|
 | 731 | EOD; | 
|---|
 | 732 |         $rs=new Recordset; | 
|---|
 | 733 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 734 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 735 |         $rs->Primero(); | 
|---|
| [2aa8687] | 736 |         // Check if user is an UO admin and client exists. | 
|---|
 | 737 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["clientid"])) { | 
|---|
 | 738 |                 // Read data. | 
|---|
| [bbc672f] | 739 |                 $response['id'] = $rs->campos["clientid"]; | 
|---|
 | 740 |                 $response['name'] = $rs->campos["nombreordenador"]; | 
|---|
| [5ff84a5] | 741 |                 $response['diskcfg'] = Array(); | 
|---|
| [fb2ee20] | 742 |                 while (!$rs->EOF) { | 
|---|
| [d57fcbc] | 743 |                         // Skip header. | 
|---|
| [fb2ee20] | 744 |                         if ($rs->campos["numdisk"] == 0) { | 
|---|
 | 745 |                                 $rs->Siguiente(); | 
|---|
 | 746 |                                 continue; | 
|---|
 | 747 |                         } | 
|---|
| [5ff84a5] | 748 |                         $tmp = Array(); | 
|---|
| [2fd9054] | 749 |                         // Common data. | 
|---|
 | 750 |                         $tmp['disk'] = $rs->campos["numdisk"]; | 
|---|
 | 751 |                         $tmp['size'] = $rs->campos["tamano"]; | 
|---|
| [fb2ee20] | 752 |                         if ($rs->campos["numpar"] == 0) { | 
|---|
| [2aa8687] | 753 |                                 // Disk data. | 
|---|
| [fb2ee20] | 754 |                                 switch ($rs->campos["codpar"]) { | 
|---|
 | 755 |                                         case 1:  $tmp['parttable'] = "MSDOS"; break; | 
|---|
 | 756 |                                         case 2:  $tmp['parttable'] = "GPT"; break; | 
|---|
 | 757 |                                         case 3:  $tmp['parttable'] = "LVM"; break; | 
|---|
 | 758 |                                         case 4:  $tmp['parttable'] = "ZPOOL"; break; | 
|---|
 | 759 |                                         default: $tmp['parttable'] = $rs->campos["codpar"]; | 
|---|
 | 760 |                                 } | 
|---|
 | 761 |                         } else { | 
|---|
| [2aa8687] | 762 |                                 // Partition data. | 
|---|
| [fb2ee20] | 763 |                                 $tmp['partition'] = $rs->campos["numpar"]; | 
|---|
 | 764 |                                 $tmp['parttype'] = $rs->campos["tipopar"]; | 
|---|
 | 765 |                                 $tmp['filesystem'] = $rs->campos["nemonico"]; | 
|---|
 | 766 |                                 $tmp['usage'] = $rs->campos["uso"]; | 
|---|
 | 767 |                                 if ($rs->campos["nombreso"] != null) { | 
|---|
 | 768 |                                         $tmp['os'] = $rs->campos["nombreso"]; | 
|---|
| [df81ab78] | 769 |                                         if ($rs->campos["idimagen"] > 0) { | 
|---|
| [2aa8687] | 770 |                                                 // Restored image data. | 
|---|
| [df81ab78] | 771 |                                                 $tmp['image']['id'] = $rs->campos["idimagen"]; | 
|---|
 | 772 |                                                 $tmp['image']['deploydate'] = $rs->campos["fechadespliegue"]; | 
|---|
| [2aa8687] | 773 |                                                 // Check if image is updated. | 
|---|
| [df81ab78] | 774 |                                                 $tmp['image']['updated'] = ($rs->campos["difimagen"]>0 ? "false" : "true"); | 
|---|
 | 775 |                                         } | 
|---|
| [fb2ee20] | 776 |                                 } | 
|---|
 | 777 |                                 //$tmp['cachedata'] = $rs->campos["cache"]; | 
|---|
 | 778 |                         } | 
|---|
 | 779 |                         array_push($response['diskcfg'], $tmp); | 
|---|
 | 780 |                         $rs->Siguiente(); | 
|---|
 | 781 |                 } | 
|---|
 | 782 |                 jsonResponse(200, $response); | 
|---|
 | 783 |         } | 
|---|
 | 784 |         $rs->Cerrar();  | 
|---|
 | 785 |     } | 
|---|
 | 786 | ); | 
|---|
 | 787 |  | 
|---|
| [2aa8687] | 788 | /** | 
|---|
 | 789 |  * @brief    Get client's execution status | 
|---|
 | 790 |  * @note     Route: /ous/id1/labs/id2clients/id3/status, Method: GET | 
|---|
 | 791 |  * @param    id1     OU id. | 
|---|
 | 792 |  * @param    id2     lab id. | 
|---|
 | 793 |  * @param    id3     client id. | 
|---|
 | 794 |  * @return   JSON string with client status | 
|---|
 | 795 |  */ | 
|---|
| [213a832] | 796 | $app->get('/ous/:ouid/labs/:labid/clients/:clntid/status(/)', 'validateApiKey', 'getStatus'); | 
|---|
| [fb2ee20] | 797 |  | 
|---|
| [2aa8687] | 798 | /** | 
|---|
 | 799 |  * @brief    List all image repositories defined in an OU | 
|---|
 | 800 |  * @note     Route: /ous/id/repos, Method: GET | 
|---|
 | 801 |  * @param    id      OU id. | 
|---|
 | 802 |  * @return   JSON array of all UO's repo data  | 
|---|
 | 803 |  */ | 
|---|
 | 804 | $app->get('/ous/:ouid/repos(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 805 |     function($ouid) { | 
|---|
| [2aa8687] | 806 |         global $userid; | 
|---|
| [fb2ee20] | 807 |         global $cmd; | 
|---|
 | 808 |  | 
|---|
 | 809 |         $ouid = htmlspecialchars($ouid); | 
|---|
| [2aa8687] | 810 |         // Database query. | 
|---|
 | 811 |         $cmd->texto = <<<EOD | 
|---|
| [5ff84a5] | 812 | SELECT adm.idadministradorcentro, adm.idcentro AS ouid, repositorios.* | 
|---|
| [2aa8687] | 813 |   FROM repositorios | 
|---|
 | 814 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 815 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 816 |    AND adm.idcentro='$ouid'; | 
|---|
 | 817 | EOD; | 
|---|
| [fb2ee20] | 818 |         $rs=new Recordset; | 
|---|
 | 819 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 820 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 821 |         $rs->Primero(); | 
|---|
| [2aa8687] | 822 |         // Check if user is an UO admin. | 
|---|
| [5ff84a5] | 823 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["ouid"])) { | 
|---|
 | 824 |                 $response = Array(); | 
|---|
| [fb2ee20] | 825 |                 while (!$rs->EOF) { | 
|---|
| [2aa8687] | 826 |                         if (! is_null($rs->campos["idcentro"])) { | 
|---|
| [5ff84a5] | 827 |                                 $tmp = Array(); | 
|---|
| [2aa8687] | 828 |                                 $tmp['id'] = $rs->campos["idrepositorio"]; | 
|---|
 | 829 |                                 $tmp['name'] = $rs->campos["nombrerepositorio"]; | 
|---|
 | 830 |                                 $tmp['ou']['id'] = $ouid; | 
|---|
 | 831 |                                 array_push($response, $tmp); | 
|---|
 | 832 |                         } | 
|---|
| [fb2ee20] | 833 |                         $rs->Siguiente(); | 
|---|
 | 834 |                 } | 
|---|
 | 835 |                 jsonResponse(200, $response); | 
|---|
 | 836 |         } | 
|---|
 | 837 |         $rs->Cerrar();  | 
|---|
 | 838 |     } | 
|---|
 | 839 | ); | 
|---|
 | 840 |  | 
|---|
| [2aa8687] | 841 | /** | 
|---|
 | 842 |  * @brief    Get image repository data | 
|---|
 | 843 |  * @note     Route: /ous/id1/repos/id2, Method: GET | 
|---|
 | 844 |  * @param    id1     OU id. | 
|---|
 | 845 |  * @param    id2     repo id. | 
|---|
 | 846 |  * @return   JSON string with repo parameters | 
|---|
 | 847 |  */ | 
|---|
 | 848 | $app->get('/ous/:ouid/repos/:repoid(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 849 |     function($ouid, $repoid) { | 
|---|
| [2aa8687] | 850 |         global $userid; | 
|---|
| [fb2ee20] | 851 |         global $cmd; | 
|---|
 | 852 |  | 
|---|
 | 853 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 854 |         $repoid = htmlspecialchars($repoid); | 
|---|
| [2aa8687] | 855 |         // Database query. | 
|---|
 | 856 |         $cmd->texto = <<<EOD | 
|---|
 | 857 | SELECT adm.idadministradorcentro, repositorios.* | 
|---|
 | 858 |   FROM repositorios | 
|---|
 | 859 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 860 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 861 |    AND adm.idcentro='$ouid' | 
|---|
 | 862 |    AND idrepositorio='$repoid'; | 
|---|
 | 863 | EOD; | 
|---|
| [fb2ee20] | 864 |         $rs=new Recordset; | 
|---|
 | 865 |         $rs->Comando=&$cmd; | 
|---|
| [2aa8687] | 866 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 867 |         $rs->Primero(); | 
|---|
| [2aa8687] | 868 |         // Check if user is an UO admin and repo exists. | 
|---|
 | 869 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idrepositorio"])) { | 
|---|
 | 870 |                 // Read data. | 
|---|
| [bbc672f] | 871 |                 $response['id'] = $rs->campos["idrepositorio"]; | 
|---|
 | 872 |                 $response['name'] = $rs->campos["nombrerepositorio"]; | 
|---|
| [fb2ee20] | 873 |                 $response['description'] = $rs->campos["comentarios"]; | 
|---|
| [4a511f81] | 874 |                 $response['ip'] = $rs->campos["ip"]; | 
|---|
| [fb2ee20] | 875 |                 //$response['port'] = $rs->campos["puertorepo"]; | 
|---|
 | 876 |                 jsonResponse(200, $response); | 
|---|
 | 877 |         } | 
|---|
 | 878 |         $rs->Cerrar();  | 
|---|
 | 879 |     } | 
|---|
 | 880 | ); | 
|---|
 | 881 |  | 
|---|
| [5ff84a5] | 882 | /** | 
|---|
 | 883 |  * @brief    List all images defined in an OU | 
|---|
 | 884 |  * @note     Route: /ous/id/images, Method: GET | 
|---|
 | 885 |  * @param    id      OU id. | 
|---|
 | 886 |  * @return   JSON array of all UO's image data  | 
|---|
 | 887 |  */ | 
|---|
 | 888 | $app->get('/ous/:ouid/images(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 889 |     function($ouid) { | 
|---|
| [5ff84a5] | 890 |         global $userid; | 
|---|
| [fb2ee20] | 891 |         global $cmd; | 
|---|
 | 892 |  | 
|---|
 | 893 |         $ouid = htmlspecialchars($ouid); | 
|---|
| [5ff84a5] | 894 |         // Database query. | 
|---|
 | 895 |         $cmd->texto = <<<EOD | 
|---|
 | 896 | SELECT adm.idadministradorcentro, adm.idcentro AS ouid, imagenes.* | 
|---|
 | 897 |   FROM imagenes | 
|---|
 | 898 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 899 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 900 |    AND adm.idcentro='$ouid'; | 
|---|
 | 901 | EOD; | 
|---|
| [fb2ee20] | 902 |         $rs=new Recordset; | 
|---|
 | 903 |         $rs->Comando=&$cmd; | 
|---|
| [5ff84a5] | 904 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 905 |         $rs->Primero(); | 
|---|
| [5ff84a5] | 906 |         // Check if user is an UO admin. | 
|---|
 | 907 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["ouid"])) { | 
|---|
 | 908 |                 $response = Array(); | 
|---|
| [fb2ee20] | 909 |                 while (!$rs->EOF) { | 
|---|
| [5ff84a5] | 910 |                         if (! is_null($rs->campos["idcentro"])) { | 
|---|
 | 911 |                                 $tmp = Array(); | 
|---|
 | 912 |                                 $tmp['id'] = $rs->campos["idimagen"]; | 
|---|
 | 913 |                                 $tmp['name'] = $rs->campos["nombreca"]; | 
|---|
 | 914 |                                 $tmp['inremotepc'] = $rs->campos["inremotepc"]==0 ? false: true; | 
|---|
 | 915 |                                 $tmp['ou']['id'] = $ouid; | 
|---|
 | 916 |                                 array_push($response, $tmp); | 
|---|
 | 917 |                         } | 
|---|
| [fb2ee20] | 918 |                         $rs->Siguiente(); | 
|---|
 | 919 |                 } | 
|---|
 | 920 |                 jsonResponse(200, $response); | 
|---|
 | 921 |         } | 
|---|
 | 922 |     } | 
|---|
 | 923 | ); | 
|---|
 | 924 |  | 
|---|
| [5ff84a5] | 925 | /** | 
|---|
 | 926 |  * @brief    Get image data | 
|---|
 | 927 |  * @note     Route: /ous/id1/images/id2, Method: GET | 
|---|
 | 928 |  * @param    id1     OU id. | 
|---|
 | 929 |  * @param    id2     image id. | 
|---|
 | 930 |  * @return   JSON string with image parameters | 
|---|
 | 931 |  */ | 
|---|
 | 932 | $app->get('/ous/:ouid/images/:imgid(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 933 |     function($ouid, $imgid) { | 
|---|
| [5ff84a5] | 934 |         global $userid; | 
|---|
| [fb2ee20] | 935 |         global $cmd; | 
|---|
 | 936 |  | 
|---|
 | 937 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 938 |         $imgid = htmlspecialchars($imgid); | 
|---|
| [5ff84a5] | 939 |         // Database query. | 
|---|
 | 940 |         $cmd->texto = <<<EOD | 
|---|
| [2154cbb] | 941 | SELECT adm.idadministradorcentro, imagenes.*, nombreso AS os | 
|---|
| [5ff84a5] | 942 |   FROM imagenes | 
|---|
 | 943 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
| [2154cbb] | 944 |   LEFT JOIN perfilessoft USING(idperfilsoft) | 
|---|
 | 945 |   LEFT JOIN nombresos USING(idnombreso) | 
|---|
| [5ff84a5] | 946 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 947 |    AND adm.idcentro='$ouid' | 
|---|
 | 948 |    AND idimagen='$imgid'; | 
|---|
 | 949 | EOD; | 
|---|
| [fb2ee20] | 950 |         $rs=new Recordset; | 
|---|
 | 951 |         $rs->Comando=&$cmd; | 
|---|
| [5ff84a5] | 952 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 953 |         $rs->Primero(); | 
|---|
| [5ff84a5] | 954 |         // Check if user is an UO admin and repo exists. | 
|---|
 | 955 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idimagen"])) { | 
|---|
 | 956 |                 // Read data. | 
|---|
| [bbc672f] | 957 |                 $response['id'] = $rs->campos["idimagen"]; | 
|---|
 | 958 |                 $response['name'] = $rs->campos["nombreca"]; | 
|---|
| [fb2ee20] | 959 |                 $response['description'] = $rs->campos["descripcion"]; | 
|---|
 | 960 |                 $response['comments'] = $rs->campos["comentarios"]; | 
|---|
 | 961 |                 $response['inremotepc'] = $rs->campos["inremotepc"]==0 ? false: true; | 
|---|
| [3b5daf8] | 962 |                 $response['repo']['id'] = $rs->campos["idrepositorio"]; | 
|---|
| [fb2ee20] | 963 |                 switch ($rs->campos["tipo"]) { | 
|---|
| [5ff84a5] | 964 |                         // Image type. | 
|---|
| [fb2ee20] | 965 |                         case 1:  $response['type'] = "monolithic"; break; | 
|---|
 | 966 |                         case 2:  $response['type'] = "base"; break; | 
|---|
 | 967 |                         case 3:  $response['type'] = "incremental"; | 
|---|
 | 968 |                                  $response['baseimg'] = $rs->campos["imagenid"]; | 
|---|
 | 969 |                                  $response['path'] = $rs->campos["ruta"]; | 
|---|
 | 970 |                                  break; | 
|---|
 | 971 |                         default: $response['type'] = $rs->campos["tipo"]; | 
|---|
 | 972 |                 } | 
|---|
 | 973 |                 if ($rs->campos["idordenador"] != 0) { | 
|---|
| [5ff84a5] | 974 |                         // Source client data. | 
|---|
| [3b5daf8] | 975 |                         $response['client']['id'] = $rs->campos["idordenador"]; | 
|---|
 | 976 |                         $response['client']['disk'] = $rs->campos["numdisk"]; | 
|---|
 | 977 |                         $response['client']['partition'] = $rs->campos["numpar"]; | 
|---|
| [fb2ee20] | 978 |                         $response['creationdate'] = $rs->campos["fechacreacion"]; | 
|---|
| [bbc672f] | 979 |                         $response['release'] = $rs->campos["revision"]; | 
|---|
| [2154cbb] | 980 |                         $response['os'] = $rs->campos["os"]; | 
|---|
| [fb2ee20] | 981 |                 } | 
|---|
 | 982 |                 jsonResponse(200, $response); | 
|---|
 | 983 |         } | 
|---|
 | 984 |         $rs->Cerrar();  | 
|---|
 | 985 |     } | 
|---|
 | 986 | ); | 
|---|
 | 987 |  | 
|---|
 | 988 | // Lista de softeare instalado en una imagen. | 
|---|
| [5ff84a5] | 989 | $app->get('/ous/:ouid/images/:imgid/software(/)', 'validateApiKey', | 
|---|
| [fb2ee20] | 990 |     function($ouid, $imgid) { | 
|---|
| [5ff84a5] | 991 |         global $userid; | 
|---|
| [fb2ee20] | 992 |         global $cmd; | 
|---|
 | 993 |  | 
|---|
 | 994 |         $ouid = htmlspecialchars($ouid); | 
|---|
 | 995 |         $imgid = htmlspecialchars($imgid); | 
|---|
| [5ff84a5] | 996 |         // Database query. | 
|---|
| [fb2ee20] | 997 |         $cmd->texto = <<<EOD | 
|---|
| [5ff84a5] | 998 | SELECT adm.idadministradorcentro, imagenes.idimagen, imagenes.nombreca, | 
|---|
 | 999 |        nombresos.nombreso, softwares.descripcion | 
|---|
 | 1000 |   FROM imagenes | 
|---|
 | 1001 |  RIGHT JOIN administradores_centros AS adm USING(idcentro) | 
|---|
 | 1002 |   LEFT JOIN perfilessoft USING(idperfilsoft) | 
|---|
| [bbc672f] | 1003 |   LEFT JOIN nombresos USING(idnombreso) | 
|---|
| [fb2ee20] | 1004 |   LEFT JOIN perfilessoft_softwares USING(idperfilsoft) | 
|---|
 | 1005 |   LEFT JOIN softwares USING(idsoftware) | 
|---|
| [5ff84a5] | 1006 |  WHERE adm.idadministradorcentro = '$userid' | 
|---|
 | 1007 |    AND imagenes.idimagen='$imgid' | 
|---|
| [fb2ee20] | 1008 |  ORDER BY softwares.descripcion ASC; | 
|---|
 | 1009 | EOD; | 
|---|
 | 1010 |         $rs=new Recordset; | 
|---|
 | 1011 |         $rs->Comando=&$cmd; | 
|---|
| [5ff84a5] | 1012 |         if (!$rs->Abrir()) return(false);       // Error oppening recordset. | 
|---|
| [fb2ee20] | 1013 |         $rs->Primero(); | 
|---|
| [5ff84a5] | 1014 |         // Check if user is an UO admin and repo exists. | 
|---|
 | 1015 |         if (checkAdmin($rs->campos["idadministradorcentro"]) and checkParameter($rs->campos["idimagen"])) { | 
|---|
| [bbc672f] | 1016 |                 $response['id'] = $rs->campos["idimagen"]; | 
|---|
 | 1017 |                 $response['name'] = $rs->campos["nombreca"]; | 
|---|
| [5ff84a5] | 1018 |                 if (is_null($rs->campos["nombreso"])) { | 
|---|
 | 1019 |                         // Null object. | 
|---|
 | 1020 |                         $response['software'] = Array(); | 
|---|
 | 1021 |                         jsonResponse(200, $response, JSON_FORCE_OBJECT); | 
|---|
 | 1022 |                 } else { | 
|---|
 | 1023 |                         // Read data. | 
|---|
 | 1024 |                         $response['software']['os'] = $rs->campos["nombreso"]; | 
|---|
 | 1025 |                         //$response['software']['type'] = ...;  // OS type | 
|---|
 | 1026 |                         $response['software']['applications'] = Array(); | 
|---|
 | 1027 |                         while (!$rs->EOF) { | 
|---|
 | 1028 |                                 // Ignoring empty fields. | 
|---|
 | 1029 |                                 if (!is_null($rs->campos["descripcion"])) { | 
|---|
 | 1030 |                                         array_push($response['software']['application'], $rs->campos["descripcion"]); | 
|---|
 | 1031 |                                 } | 
|---|
| [fb2ee20] | 1032 |                                 $rs->Siguiente(); | 
|---|
 | 1033 |                         } | 
|---|
| [5ff84a5] | 1034 |                         jsonResponse(200, $response); | 
|---|
| [fb2ee20] | 1035 |                 } | 
|---|
 | 1036 |         } | 
|---|
 | 1037 |         $rs->Cerrar();  | 
|---|
 | 1038 |     } | 
|---|
 | 1039 | ); | 
|---|
 | 1040 |  | 
|---|
| [21e5ee3] | 1041 | ?> | 
|---|