summaryrefslogtreecommitdiffstats
path: root/application/modules/ipxe/controllers/ResourceController.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/modules/ipxe/controllers/ResourceController.php')
-rw-r--r--application/modules/ipxe/controllers/ResourceController.php124
1 files changed, 124 insertions, 0 deletions
diff --git a/application/modules/ipxe/controllers/ResourceController.php b/application/modules/ipxe/controllers/ResourceController.php
new file mode 100644
index 0000000..0d1428a
--- /dev/null
+++ b/application/modules/ipxe/controllers/ResourceController.php
@@ -0,0 +1,124 @@
+<?php
+/*
+ * Copyright (c) 2011 - OpenSLX GmbH, RZ Uni Freiburg
+ * This program is free software distributed under the GPL version 2.
+ * See http://gpl.openslx.org/
+ *
+ * If you have any feedback please consult http://feedback.openslx.org/ and
+ * send your suggestions, praise, or complaints to feedback@openslx.org
+ *
+ * General information about OpenSLX can be found at http://openslx.org/
+ */
+
+class Ipxe_ResourceController extends Zend_Controller_Action
+{
+
+ private $thisSession;
+
+ public function init()
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $session = new Application_Model_Session();
+ $sm = new Application_Model_SessionMapper();
+
+ //TODO Error Messages if something failed
+ $alphaID = $this->_request->getParam('alpha');
+
+ if($alphaID != ""){
+ $alphasessionID = $alphaID;
+ $result = $sm->findBy(array('alphasessionID' => $alphasessionID),true);
+ # print_a($result);
+ $this->thisSession = $session->setOptions($result[0]);
+ $this->thisSession->setID($result[0]['sessionID']);
+ }
+
+ }
+
+ public function getvesamenuAction(){
+ if(is_dir("../resources/ipxe/")){
+
+ header('Content-Type: application/octet-stream');
+ $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']) == 'IE') ? 'inline' : 'attachment';
+ header('Content-Disposition: ' . $content_disp . '; filename="vesamenu.c32"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+
+ chdir("../resources/ipxe/");
+
+ header("Content-Length: ".filesize(getcwd()."/vesamenu.c32"));
+
+ passthru( "cat vesamenu.c32");
+ }else{
+ header('HTTP/1.0 404 Not Found');
+ }
+
+ }
+
+ public function getvesamenuconfigAction(){
+
+ header('Content-Type: text/html');
+ $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']) == 'IE') ? 'inline' : 'attachment';
+ header('Content-Disposition: ' . $content_disp . '; filename="vesamenu.conf"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+
+ $vesamenuView = new Zend_View();
+ $vesamenuView->addScriptPath(APPLICATION_PATH.'/modules/ipxe/views/scripts/resource/');
+ $vesamenuView->host = $_SERVER['HTTP_HOST'];
+
+ // Request Bootmenu
+ $pbsFilter = new Pbs_Filter();
+ $bootmenuID = $pbsFilter->evaluate();
+
+ if($bootmenuID != null){
+ $vesamenuView->alphaID = $this->thisSession->getAlphasessionID();
+
+ $bootmenuMapper = new Application_Model_BootMenuMapper();
+ $bm = $bootmenuMapper->find($bootmenuID);
+ $vesamenuView->title = $bm->getTitle();
+// $this->view->startcounter = $bm->getStartcounter();
+
+ $bootmenuentriesMapper = new Application_Model_BootMenuEntriesMapper();
+ $res = $bootmenuentriesMapper->findBy(array('bootmenuID' => $bootmenuID),false);
+ $vesamenuView->bmelist = $res;
+
+ }
+ else{
+
+ $vesamenuView->error = "You have no BootMenu.";
+ }
+
+ $vesamenu = $vesamenuView->render('getvesamenu.phtml');
+
+ header("Content-Length: ".(strlen($vesamenu)));
+
+ echo $vesamenu;
+ }
+
+ public function ipxeAction(){
+
+ header('Content-Type: text/plain');
+
+ $result = "#!ipxe\n";
+ $result .= "imgfree\n";
+
+ $result .= "chain http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenu/alpha/".$this->thisSession->getAlphasessionID()." http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$this->thisSession->getAlphasessionID();
+
+ header("Content-Length: ".(strlen($result)));
+
+ echo $result;
+
+ }
+
+
+
+}
+
+
+
+
+
+
+