summaryrefslogtreecommitdiffstats
path: root/application/modules/user/controllers/PrebootController.php
diff options
context:
space:
mode:
authormichael pereira2011-03-29 10:59:15 +0200
committermichael pereira2011-03-29 10:59:15 +0200
commit03b4da383449c290ea01723095d1a87fa257fea5 (patch)
tree4943185a212ced33465b92811cd070bf8e45b717 /application/modules/user/controllers/PrebootController.php
parentupdatebutton geadded (diff)
downloadpbs2-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.php369
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');
+ }
+
+
+}
+
+
+