/webConfig/PConfig.xml.php

https://bitbucket.org/mjdaley1/projectorcontrol · PHP · 117 lines · 76 code · 16 blank · 25 comment · 11 complexity · 609769c567320ae18c37e57e798421d1 MD5 · raw file

  1. <?php
  2. /*
  3. * Pconfig.xml.php
  4. * This script takes a single argument for a computer name and returns
  5. * a formatted XML configuration for the projector control.
  6. * If no active configuration is found to be stored in the database the
  7. * script returns nothing.
  8. * Place in the webroot of the server. /var/www/files
  9. */
  10. //Script requires Zend Framework 1.0.3+ to be installed and in the include_path directive
  11. //Require Zend_DB database abstractrion class
  12. require_once 'Zend/Db.php';
  13. //Setup and connect the database
  14. $db = Zend_Db::factory('Mysqli', array(
  15. 'host' => 'localhost',
  16. 'username' => 'configWeb',
  17. 'password' => 'delicious',
  18. 'dbname' => 'configweb'
  19. ));
  20. //Retrive GET information
  21. if (!isset($_GET['computername'])) { die(); }
  22. $computerName = $_GET['computername'];
  23. //Set up empty array to store config data in
  24. $config = array();
  25. //---------------------------------------------
  26. //SQL Queries
  27. $config['room'] = $db->fetchOne('SELECT room_number FROM configurations WHERE hostname = ? AND active = 1 LIMIT 1', $computerName);
  28. if (empty($config['room'])) { die(); } //This causes the script to die if no active servers were found.
  29. $config['servers'] = $db->fetchAll('SELECT type, port_number, max_clients FROM servers WHERE room_number = ?', $config['room']);
  30. if (empty($config['servers'])) { die(); } //No servers set up? Die!
  31. $config['projectors'] = $db->fetchAll('SELECT * FROM projectors WHERE room_number = ?', $config['room']);
  32. $config['inputs'] = $db->fetchAll('SELECT * FROM inputs WHERE room_number = ?', $config['room']);
  33. //---------------------------------------------
  34. //Begin building XML output
  35. $dom = new DOMDocument('1.0');
  36. //Root element
  37. $servConfig = $dom->appendChild($dom->createElement('Projector_Server_Configuration'));
  38. //Server elements
  39. foreach ($config['servers'] as $cnf)
  40. {
  41. $server = $servConfig->appendChild($dom->createElement('Server'));
  42. $serverType = $server->appendChild($dom->createElement('Server_Type'));
  43. $serverType->appendChild($dom->createTextNode($cnf['type']));
  44. $serverPort = $server->appendChild($dom->createElement('Server_Port'));
  45. $serverPort->appendChild($dom->createTextNode($cnf['port_number']));
  46. $maxClients = $server->appendChild($dom->createElement('Max_Clients'));
  47. $maxClients->appendChild($dom->createTextNode($cnf['max_clients']));
  48. //Temporary static user/pass sections for server_type 1
  49. if (1 == $cnf['type'])
  50. {
  51. $user = $server->appendChild($dom->createElement('User'));
  52. $user->appendChild($dom->createTextNode('foo'));
  53. $password = $server->appendChild($dom->createElement('Password'));
  54. $password->appendChild($dom->createTextNode(sha1('bar')));
  55. }
  56. }
  57. //Projector elements
  58. foreach ($config['projectors'] as $prj)
  59. {
  60. $projector = $servConfig->appendChild($dom->createElement('Projector'));
  61. $projectorType = $projector->appendChild($dom->createElement('Projector_Type'));
  62. $projectorType->appendChild($dom->createTextNode($prj['type']));
  63. $classroom = $projector->appendChild($dom->createElement('Classroom'));
  64. $classroom->appendChild($dom->createTextNode($prj['room_number']));
  65. $port = $projector->appendChild($dom->createElement('Port'));
  66. $port->appendChild($dom->createTextNode($prj['port']));
  67. $port->setAttribute('connectionType', $prj['port_type']);
  68. $muteScreen = $projector->appendChild($dom->createElement('Mute_Screen'));
  69. $muteScreen->appendChild($dom->createTextNode($prj['mute_screen']));
  70. //Booleans
  71. if (1 == $prj['ceiling'])
  72. {
  73. $ceiling = $projector->appendChild($dom->createElement('Ceiling_Projection'));
  74. }
  75. if (1 == $prj['rear'])
  76. {
  77. $rear = $projector->appendChild($dom->createElement('Rear_Projection'));
  78. }
  79. if (1 == $prj['sound'])
  80. {
  81. $sound = $projector->appendChild($dom->createElement('Sound'));
  82. }
  83. //Input sections handler for projector control v2 build
  84. foreach ($config['inputs'] as $inp)
  85. {
  86. $input = $projector->appendChild($dom->createElement('Input'));
  87. $inputName = $input->appendChild($dom->createElement('Input_Name'));
  88. $inputName->appendChild($dom->createTextNode($inp['name']));
  89. $inputNumber = $input->appendChild($dom->createElement('Input_Number'));
  90. $inputNumber->appendChild($dom->createTextNode($inp['number']));
  91. $inputVolume = $input->appendChild($dom->createElement('Input_Default_Volume'));
  92. $inputVolume->appendChild($dom->createTextNode($inp['default_volume']));
  93. }
  94. }
  95. //Format this XML nicely, please
  96. $dom->formatOutput = true;
  97. $output = $dom->saveXML();
  98. //Output the XML
  99. header('Content-Type: text/xml');
  100. print $output;
  101. ?>