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 dev_BootosController extends Zend_Controller_Action {
public function init() {
$db = Zend_Db_Table::getDefaultAdapter();
}
public function indexAction() {
$bootosmapper = new Application_Model_BootOsMapper();
$groupmapper = new Application_Model_GroupMapper();
$membershipmapper = new Application_Model_MembershipMapper();
$personmapper = new Application_Model_PersonMapper();
$configmapper = new Application_Model_ConfigMapper();
$this->view->bootoslist = $bootosmapper->fetchAll();
$this->view->update = array();
if(count($this->view->bootoslist) > 0) {
foreach ($this->view->bootoslist as $bootos) {
$this->view->update[$bootos->getID()] = $this->checkupdateAction($bootos);
$bootos->setGroupID("[".$bootos->getGroupID()."] ".$groupmapper->find($bootos->getGroupID())->getTitle());
$bootos->setMembershipID("[".$bootos->getMembershipID()."] ".$personmapper->find($membershipmapper->find($bootos->getMembershipID())->getPersonID())->getFirstname());
$bootos->setConfigID("[".$bootos->getConfigID()."] ".$configmapper->find($bootos->getConfigID())->getTitle());
}
}
}
public function createbootosAction() {
$groupmapper = new Application_Model_GroupMapper();
$configmapper = new Application_Model_ConfigMapper();
if (!isset($_POST["createbootos"])) {
try {
$createbootosForm = new dev_Form_BootosCreate(array('grouplist' => $groupmapper->fetchAll() , 'configlist' => $configmapper->fetchAll()));
} catch(Zend_Exception $e) {
print_a($e);
}
} else {
$createbootosForm = new dev_Form_BootosCreate(array('grouplist' => $groupmapper->fetchAll() , 'configlist' => $configmapper->fetchAll()), $_POST);
if ($createbootosForm->isValid($_POST)) {
$bootos = new Application_Model_BootOs($_POST);
$bootos->setMembershipID('1');
if($bootos->getConfigID() == '')
{ $bootos->setConfigID(NULL); }
$bootosmapper = new Application_Model_BootOsMapper();
$bootos->setCreated(time());
try {
exec("wget --spider ".$bootos->getPath_kernel()." 2>&1 | grep 'Remote file exists.'", $exists_kernel);
exec("wget --spider ".$bootos->getPath_init()." 2>&1 | grep 'Remote file exists.'" , $exists_init);
if(!array_pop($exists_init) || !array_pop($exists_kernel)) {
$this->view->createbootosForm = $createbootosForm;
return;
}
$bootosID = $bootosmapper->save($bootos);
$initpath = "../resources/bootos/".$bootosID."/initramfs/";
$kernelpath = "../resources/bootos/".$bootosID."/kernel/";
mkdir($initpath , 0777, true);
mkdir($kernelpath , 0777, true);
exec("wget -O '".$kernelpath."kernel' ".$bootos->getPath_kernel());
exec("wget -O '".$initpath."initramfs' ".$bootos->getPath_init());
} catch(Zend_Exception $e) {
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
}
$this->_redirect('/dev/bootos');
}
}
$this->view->createbootosForm = $createbootosForm;
}
public function checkupdateAction($bootos) {
exec("wget --server-response --spider '".escapeshellcmd($bootos->getPath_kernel())."' 2>&1 | grep 'Last-Modified:'", $kerneldate);
exec("wget --server-response --spider '".escapeshellcmd($bootos->getPath_init())."' 2>&1 | grep 'Last-Modified:'", $initdate);
$kerneldate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($kerneldate))));
$kernelname = array_pop(scandir("../resources/bootos/".$bootos->getID()."/kernel/"));
if($kernelname != "." && $kernelname != "..")
{ $kernelolddate = filemtime("../resources/bootos/".$bootos->getID()."/kernel/".$kernelname); }
else
{ $kernelolddate = false; }
$initdate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($initdate))));
$initname = array_pop(scandir("../resources/bootos/".$bootos->getID()."/initramfs/"));
if($initname != "." && $initname != "..")
{ $initolddate = filemtime("../resources/bootos/".$bootos->getID()."/initramfs/".$initname); }
else
{ $initolddate = false; }
//print_a($kernelname,$kerneldate,$kernelolddate,$initname,$initdate,$initolddate);
if($kerneldate > $kernelolddate || $initdate > $initolddate)
{ return true; }
else
{ return false; }
}
public function updatebootosAction() {
$bootosID = $this->_request->getParam('bootosID');
$bootosmapper = new Application_Model_BootOsMapper();
$bootos = $bootosmapper->find($bootosID);
$initpath = "../resources/bootos/".$bootosID."/initramfs/";
$kernelpath = "../resources/bootos/".$bootosID."/kernel/";
exec("wget -P ".$kernelpath." -N ".$bootos->getPath_kernel());
exec("wget -P ".$initpath." -N ".$bootos->getPath_init());
$this->_redirect('/dev/bootos');
}
public function editbootosAction() {
$bootosID = $this->_request->getParam('bootosID');
$groupmapper = new Application_Model_GroupMapper();
$configmapper = new Application_Model_ConfigMapper();
if (!isset($_POST["editbootos"])) {
$bootosID = $this->_request->getParam('bootosID');
if (!isset($bootosID) || !is_numeric($bootosID)) {
$this->_redirect('/dev/bootos');
} else {
$bootos = new Application_Model_BootOs();
$bootosmapper = new Application_Model_BootOsMapper();
$bootos = $bootosmapper->find($bootosID);
$editbootosForm = new dev_Form_BootosEdit(array('grouplist' => $groupmapper->fetchAll() , 'configlist' => $configmapper->fetchAll()));
$editbootosForm->populate($bootos->toArray());
}
} else {
$editbootosForm = new dev_Form_BootosEdit(array('grouplist' => $groupmapper->fetchAll() , 'configlist' => $configmapper->fetchAll()), $_POST);
if ($editbootosForm->isValid($_POST)) {
//TODO: Check for new URL and download new files.
$bootos = new Application_Model_BootOs($_POST);
$bootos->setMembershipID('1');
if($bootos->getConfigID() == '')
{ $bootos->setConfigID(NULL); }
$bootosmapper = new Application_Model_BootOsMapper();
$bootos->setCreated(time());
$bootos->setID($bootosID);
try {
$bootosmapper->save($bootos);
} catch(Zend_Exception $e) {
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
}
$this->_redirect('/dev/bootos');
}
}
$this->view->editbootosForm = $editbootosForm;
}
public function deletebootosAction() {
$bootosID = $this->_request->getParam('bootosID');
if (!isset($bootosID)) {
$this->_redirect('/dev/bootos');
} else {
$bootos = new Application_Model_BootOs();
$bootos->setID($bootosID);
$bootosmapper = new Application_Model_BootOsMapper();
$bootosmapper->delete($bootos);
}
$this->_redirect('/dev/bootos');
}
}