diff options
author | michael pereira | 2011-03-29 10:59:15 +0200 |
---|---|---|
committer | michael pereira | 2011-03-29 10:59:15 +0200 |
commit | 03b4da383449c290ea01723095d1a87fa257fea5 (patch) | |
tree | 4943185a212ced33465b92811cd070bf8e45b717 /application/modules/user/controllers/PrebootController.php | |
parent | updatebutton geadded (diff) | |
download | pbs2-03b4da383449c290ea01723095d1a87fa257fea5.tar.gz pbs2-03b4da383449c290ea01723095d1a87fa257fea5.tar.xz pbs2-03b4da383449c290ea01723095d1a87fa257fea5.zip |
Preboot User Controller fertig, ACL fehlt noch
Diffstat (limited to 'application/modules/user/controllers/PrebootController.php')
-rw-r--r-- | application/modules/user/controllers/PrebootController.php | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/application/modules/user/controllers/PrebootController.php b/application/modules/user/controllers/PrebootController.php new file mode 100644 index 0000000..e1e67a5 --- /dev/null +++ b/application/modules/user/controllers/PrebootController.php @@ -0,0 +1,369 @@ +<?php + +class User_PrebootController extends Zend_Controller_Action +{ + + protected $prebootMapper; + protected $membershipMapper; + protected $membership; + + public function init() + { + if (Zend_Auth::getInstance()->hasIdentity()) { + $userIDsNamespace = Zend_Session::namespaceGet('userIDs'); + if($userIDsNamespace['membershipID'] ==''){ + $pbsNotifier = new Pbs_Notifier(); + echo $pbsNotifier->notify('No membershipID set','forbidden'); + } + + $this->prebootMapper = new Application_Model_PreBootMapper(); + + $this->membershipMapper = new Application_Model_MembershipMapper(); + $this->membership = new Application_Model_Membership(); + $this->membershipMapper->find($userIDsNamespace['membershipID'],$this->membership); + + $this->db = Zend_Db_Table::getDefaultAdapter(); + } else { + $this->_helper->redirector('login', 'auth'); + } + } + + + public function indexAction() + { + $result = $this->_request->getParam('addresult'); + if($result != ""){ + $pbsNotifier = new Pbs_Notifier(); + $this->view->notification = $pbsNotifier->notify('create',$result); + } + $result = $this->_request->getParam('deleteresult'); + if($result != ""){ + $pbsNotifier = new Pbs_Notifier(); + $this->view->notification = $pbsNotifier->notify('delete',$result); + } + $result = $this->_request->getParam('modifyresult'); + if($result != ""){ + $pbsNotifier = new Pbs_Notifier(); + $this->view->notification = $pbsNotifier->notify('modify',$result); + } + $result = $this->_request->getParam('updateresult'); + if($result != ""){ + $pbsNotifier = new Pbs_Notifier(); + $this->view->notification = $pbsNotifier->notify('update',$result); + } + + $groupMapper = new Application_Model_GroupMapper(); + $personMapper = new Application_Model_PersonMapper(); + + $groupID = $this->membership->getGroupID(); + + //TODO ACL Darf er PrebootMenu sehen? + if(false) + $this->_redirect('/user/index'); + + $this->view->prebootlist = $this->prebootMapper->findBy("groupID", $groupID); + + $this->view->update = array(); + + $update = $this->_request->getParam('checkupdate'); + + foreach ($this->view->prebootlist as $preboot){ + $this->view->update[$preboot->getID()] = $update && $this->checkupdateAction($preboot); + $preboot->setGroupID("[".$preboot->getGroupID()."] ".$groupMapper->find($preboot->getGroupID())->getTitle()); + $preboot->setMembershipID("[".$preboot->getMembershipID()."] ".$personMapper->find($this->membershipMapper->find($preboot->getMembershipID())->getPersonID())->getFirstname()); + } + } + + public function createprebootAction() + { + + //TODO ACL Is he allowed to create Preboots? + if(false) + $this->_redirect('/user/preboot/index/addresult/forbidden'); + + if (!isset($_POST["createpreboot"])){ + $prebootForm = new user_Form_Preboot(array('action' => 'createpreboot')); + } else { + + $prebootForm = new user_Form_Preboot(array('action' => 'createpreboot'),$_POST); + + if ($prebootForm->isValid($_POST)) { + + $preboot = new Application_Model_PreBoot($_POST); + $preboot->setMembershipID($this->membership->getID()); + $preboot->setGroupID($this->membership->getGroupID()); + + try { + + $path_tmp = "../resources/bootmedium/"; + mkdir($path_tmp ,0777, true); + + $hash = md5(microtime(1)); + exec("wget -O '".$path_tmp."preboot.zip".$hash."' ".escapeshellcmd($preboot->getPath_preboot())." 2>&1 | grep 'saved'", $status); + + if(!array_pop($status)){ + $this->view->prebootForm = $prebootForm; + $pbsNotifier = new Pbs_Notifier(); + echo $pbsNotifier->notify('The Resource was not found on the specified path','error'); + + return; + } + + $prebootID = $this->prebootMapper->save($preboot); + + $path_preboot = "../resources/bootmedium/$prebootID/"; + mkdir($path_preboot ,0777, true); + + exec("mv ../resources/bootmedium/preboot.zip$hash ../resources/bootmedium/$prebootID/preboot.zip"); + + }catch(Zend_Exception $e) + { + echo "Caught exception: " . get_class($e) . "<br/>"; + echo "Message: " . $e->getMessage() . "<br/>"; + $this->_redirect('/user/preboot/index/addresult/error'); + //TODO Delete folder + preboot + + } + $this->_redirect('/user/preboot/index/addresult/ok'); + } + } + + $this->view->prebootForm = $prebootForm; + } + + public function checkupdateAction($preboot) + { + + //TODO ACL Is he allowed to update Preboots? + if(false) + $this->_redirect('/user/preboot/index/updateresult/forbidden'); + + $prebootID = $preboot->getID(); + exec("wget --server-response --spider ".escapeshellcmd($preboot->getPath_preboot())." 2>&1 | grep 'Last-Modified:'", $prebootdate); + + //print_a($prebootdate); + + $prebootdate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($prebootdate)))); + + if(is_file("../resources/bootmedium/$prebootID/preboot.zip")) + $prebootolddate = filemtime("../resources/bootmedium/".$prebootID."/preboot.zip"); + else + $prebootolddate = false; + + //print_a($prebootname,$prebootdate,$prebootolddate); + + $pbsNotifier = new Pbs_Notifier(); + + if($prebootdate > $prebootolddate){ + $this->view->notification = $pbsNotifier->notify('There are updates available','ok'); + return true; + } + else + return false; + + } + + public function updateprebootAction() + { + //TODO ACL Is he allowed to update Preboots? + if(false) + $this->_redirect('/user/preboot/index/updateresult/forbidden'); + + $prebootID = $this->_request->getParam('prebootID'); + if (!is_numeric($prebootID)) + $this->_redirect('/user/preboot/index/updateresult/forbidden'); + + + $preboot = new Application_Model_PreBoot(); + $this->prebootMapper->find($prebootID,$preboot); + + if($this->membership->getGroupID() != $preboot->getGroupID()) + $this->_redirect('/user/preboot/index/updateresult/forbidden'); + + + $path_preboot = "../resources/bootmedium/$prebootID/"; + + exec("wget -O '".$path_preboot."preboot.zip' ".escapeshellcmd($preboot->getPath_preboot())." 2>&1 | grep 'saved'", $status); + + if(!array_pop($status)){ + $this->_redirect('/user/preboot/index/modifyresult/404'); + } + + try{ + $filelist = array(); + $filelist = scandir($path_preboot); + + $bootisoMapper = new Application_Model_BootIsoMapper(); + + //TODO Lock preboot + + foreach($filelist as $file){ + if($file == preg_match('![0-9]+\.zip!')){ + $bootisoID = str_replace('.zip', '', $file); + $serialnumber = $bootisoMapper->find($bootisoID)->getSerialnumber(); + + copy("../resources/bootmedium/$prebootID/preboot.zip", "../resources/bootmedium/$prebootID/$bootisoID".".zip"); + $zip = new ZipArchive(); + $res = $zip->open("../resources/bootmedium/$prebootID/$bootisoID".".zip"); + if($res === true){ + $rootdir = $zip->getNameIndex(0); + $zip->addFromString($rootdir."build/rootfs/serial", $serialnumber); + $zip->close(); + } + } + } + }catch(Zend_Exception $e) + { + echo "Caught exception: " . get_class($e) . "<br/>"; + echo "Message: " . $e->getMessage() . "<br/>"; + $this->_redirect('/user/preboot/index/modifyresult/error'); + //TODO Delete Folder + Preboot + } + + $this->_redirect('/user/preboot/index/modifyresult/ok'); + } + + public function editprebootAction() + { + //TODO ACL Is he allowed to edit Preboots? + if(false) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + $prebootID = $this->_request->getParam('prebootID'); + + if (!is_numeric($prebootID)) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + if (!isset($_POST["editpreboot"])){ + + $preboot = new Application_Model_PreBoot(); + $this->prebootMapper->find($prebootID, $preboot); + + if($this->membership->getGroupID() != $preboot->getGroupID()) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + $prebootForm = new user_Form_Preboot(array('action' => 'editpreboot')); + $prebootForm->populate($preboot->toArray()); + + }else{ + + //TODO ACL Is he allowed to edit Preboots? + if(false) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + $prebootForm = new user_Form_Preboot(array('action' => 'editpreboot'),$_POST); + + if ($prebootForm->isValid($_POST)) { + + $prebootold = new Application_Model_PreBoot(); + $this->prebootMapper->find($prebootID, $prebootold); + + $preboot = new Application_Model_PreBoot($_POST); + $preboot->setMembershipID($this->membership->getID()); + $preboot->setGroupID($this->membership->getGroupID()); + + if($this->membership->getGroupID() != $preboot->getGroupID()) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + $preboot->setMembershipID($this->membership->getID()); + $preboot->setGroupID($this->membership->getGroupID()); + $preboot->setID($prebootID); + + $path_preboot = "../resources/bootmedium/$prebootID/"; + + if($preboot->getPath_preboot() != $prebootold->getPath_preboot()){ + + //TODO ACL Is he allowed to edit the Preboot Path? + if(false) + $this->_redirect('/user/preboot/index/modifyresult/forbidden'); + + exec("wget -O '".$path_preboot."preboot.zip' ".escapeshellcmd($preboot->getPath_preboot()) ." 2>&1 | grep 'saved'" , $status); + if(!array_pop($status)){ + $this->view->prebootForm = $prebootForm; + $pbsNotifier = new Pbs_Notifier(); + echo $pbsNotifier->notify('The Resource was not found on the specified path','error'); + + return; + } + + try{ + $filelist = array(); + $filelist = scandir($path_preboot); + + $bootisoMapper = new Application_Model_BootIsoMapper(); + + //TODO Lock preboot + + foreach($filelist as $file){ + if(preg_match('![0-9]+\.zip!',$file)){ + $bootisoID = str_replace('.zip', '', $file); + $serialnumber = $bootisoMapper->find($bootisoID)->getSerialnumber(); + + copy("../resources/bootmedium/$prebootID/preboot.zip", "../resources/bootmedium/$prebootID/$bootisoID".".zip"); + $zip = new ZipArchive(); + $res = $zip->open("../resources/bootmedium/$prebootID/$bootisoID".".zip"); + if($res === true){ + $rootdir = $zip->getNameIndex(0); + $zip->addFromString($rootdir."build/rootfs/serial", $serialnumber); + $zip->close(); + } + } + } + }catch(Zend_Exception $e){ + echo "Caught exception: " . get_class($e) . "<br/>"; + echo "Message: " . $e->getMessage() . "<br/>"; + $this->_redirect('/user/preboot/index/modifyresult/error'); + } + } + + try { + + $this->prebootMapper->save($preboot); + + }catch(Zend_Exception $e){ + echo "Caught exception: " . get_class($e) . "<br/>"; + echo "Message: " . $e->getMessage() . "<br/>"; + $this->_redirect('/user/preboot/index/modifyresult/error'); + //TODO Delete Folder + Preboot + } + + $this->_redirect('/user/preboot/index/modifyresult/ok'); + } + } + + $this->view->prebootForm = $prebootForm; + } + + public function deleteprebootAction() + { + + //TODO ACL Is he allowed to delete Preboots? + if(false) + $this->_redirect('/user/preboot/index/deleteresult/forbidden'); + + try{ + $prebootID = $this->_request->getParam('prebootID'); + if (!is_numeric($prebootID)) + $this->_redirect('/user/preboot/index/deleteresult/forbidden'); + + $preboot = new Application_Model_PreBoot(); + $this->prebootMapper->find($prebootID, $preboot); + + if($this->membership->getGroupID() != $preboot->getGroupID()) + $this->_redirect('/user/preboot/index/deleteresult/forbidden'); + + $this->prebootMapper->delete($preboot); + exec("rm -r ../resources/bootmedium/".$prebootID); + }catch(Zend_Exception $e){ + echo "Caught exception: " . get_class($e) . "<br/>"; + echo "Message: " . $e->getMessage() . "<br/>"; + $this->_redirect('/user/preboot/index/deleteresult/error'); + } + $this->_redirect('/user/preboot/index/deleteresult/ok'); + } + + +} + + + |