hasIdentity()) { $userIDsNamespace = Zend_Session::namespaceGet('userIDs'); if($userIDsNamespace['membershipID'] ==''){ $this->_redirect('/user/index'); } $this->bootosMapper = new Application_Model_BootOsMapper(); $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'); } $this->page = $this->_request->getParam('page'); } 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); } $groupID = $this->membership->getGroupID(); //ACL Darf er BootOs sehen? if(!Pbs_Acl::checkRight('boai') && !Pbs_Acl::checkRight('boui')) $this->_redirect('/user/index'); $groupgroupsMapper = new Application_Model_GroupGroupsMapper(); $parents = array(); $this->view->bootoslist = array(); $parents = $groupgroupsMapper->getParentGroups($groupID); foreach($parents as $k => $parent){ foreach($parent as $p){ $bootos = $this->bootosMapper->findBy(array("groupID" => $p)); foreach ($bootos as $b) if($b->getPublic() - $k >= 0 ) $this->view->bootoslist[] = $b; } } $this->view->bootoslist = array_reverse($this->view->bootoslist); $this->view->update = array(); $update = $this->_request->getParam('checkupdate'); $groupMapper = new Application_Model_GroupMapper(); $configMapper = new Application_Model_ConfigMapper(); if(count($this->view->bootoslist)>0){ foreach ($this->view->bootoslist as $bootos){ $this->view->update[$bootos->getID()] = $update && $this->checkupdateAction($bootos); if($bootos->getDefaultkcl() == null) $bootos->setDefaultkcl("none (edit Bootos to set KCL)"); $bootos->setGroupID("[".$bootos->getGroupID()."] ".$groupMapper->find($bootos->getGroupID())->getTitle()); $bootos->setConfigID("[".$bootos->getConfigID()."] ".$configMapper->find($bootos->getConfigID())->getTitle()); $bootos->setCreated(date(Zend_Registry::get('dateformat'),$bootos->getCreated())); $bootos->setExpires(date(Zend_Registry::get('dateformat'),$bootos->getExpires())); } } // Search $search = $this->_request->getParam('search'); $mySearch = new Pbs_Search(); $mySearch->setSearchTerm($search); $mySearch->setModule('bootos'); if($search != ''){ $this->view->search = $mySearch->getSearchTerm(); $this->view->bootoslist = $mySearch->search($this->view->bootoslist); } $this->view->searchform = $mySearch->searchForm(); // Pagination $pagination = new Pbs_Pagination(); $pagination->setPerPage(10); $pagination->setElement($this->view->bootoslist); $pagination->setRequestPage($this->_request->getParam('page')); $pagination->setPageUrl('/user/bootos/index'.((isset($this->view->search))?'/search/'.$this->view->search:'')); $this->view->bootoslist = $pagination->getElements(); $this->view->pagination = $pagination->pagination(); $this->view->page = $pagination->getRequestPage(); } public function searchAction(){ $this->_redirect('/user/bootos/index/search/'.($_GET['search'])); } public function createbootosAction() { //ACL Darf er BootISOs erstellen? if(!Pbs_Acl::checkRight('boc')) $this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/forbidden'); $groupID = $this->membership->getGroupID(); $groupgroupsMapper = new Application_Model_GroupGroupsMapper(); $childgroups = count($groupgroupsMapper->getChildGroups($groupID)); $configMapper = new Application_Model_ConfigMapper(); $configlist = $configMapper->findBy(array("groupID" => $groupID)); if (!isset($_POST["createbootos"])){ $bootosForm = new user_Form_Bootos(array( 'action' => 'createbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'page' => $this->page)); } else { $bootosForm = new user_Form_Bootos(array( 'action' => 'createbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'page' => $this->page),$_POST); if ($bootosForm->isValid($_POST)) { $bootos = new Application_Model_BootOs($_POST); $bootos->setGroupID($this->membership->getGroupID()); $bootos->setCreated(time()); try { $path_tmp = "../resources/bootos/"; mkdir($path_tmp ,0777, true); $hash = md5(microtime(1)); exec("wget -O '".$path_tmp."kernel".$hash."' ".escapeshellcmd($bootos->getPath_kernel())." 2>&1 | grep 'saved'", $status); exec("wget -O '".$path_tmp."initramfs".$hash."' ".escapeshellcmd($bootos->getPath_init())." 2>&1 | grep 'saved'", $status2); if(!array_pop($status) || !array_pop($status2)){ $this->view->bootosForm = $bootosForm; $pbsNotifier = new Pbs_Notifier(); echo $pbsNotifier->notify('The Resource was not found on the specified path','error'); return; } $bootosID = $this->bootosMapper->save($bootos); $initpath = "../resources/bootos/".$bootosID."/initramfs/"; $kernelpath = "../resources/bootos/".$bootosID."/kernel/"; mkdir($initpath ,0777, true); mkdir($kernelpath ,0777, true); exec("mv ../resources/bootos/kernel$hash $kernelpath"."kernel"); exec("mv ../resources/bootos/initramfs$hash $initpath"."initramfs"); }catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; $this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/error'); //TODO Delete File & delete bootiso from DB } $this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/ok'); } } $this->view->bootosForm = $bootosForm; } public function checkupdateAction($bootos) { //ACL Is he allowed to update Preboots? if(!Pbs_Acl::checkRight('bou')) $this->_redirect('/user/preboot/index/page/'.$this->page.'/updateresult/forbidden'); $bootosID = $bootos->getID(); if(is_file("../resources/bootos/$bootosID/kernel/kernel") && is_file("../resources/bootos/$bootosID/initramfs/initramfs")){ $kernelolddate = filemtime("../resources/bootos/".$bootosID."/kernel/kernel"); $initolddate = filemtime("../resources/bootos/".$bootosID."/initramfs/initramfs"); } else { $pbsNotifier = new Pbs_Notifier(); $this->view->notification = $pbsNotifier->notify('There are updates available','ok'); return true; } 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)))); $initdate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($initdate)))); //print_a($bootos->getPath_kernel(),$kerneldate,$kernelolddate,$initname,$initdate,$initolddate); if($kerneldate > $kernelolddate || $initdate > $initolddate){ $this->view->notification = $pbsNotifier->notify('There are updates available','ok'); return true; }else{ return false; } } public function updatebootosAction() { //ACL Is he allowed to update Preboots? if(!Pbs_Acl::checkRight('bou')) $this->_redirect('/user/bootiso/index/page/'.$this->page.'/updateresult/forbidden'); $bootosID = $this->_request->getParam('bootosID'); if (!is_numeric($bootosID)) $this->_redirect('/user/bootos/index/page/'.$this->page.'/updateresult/forbidden'); $bootos = $this->bootosMapper->find($bootosID); if($this->membership->getGroupID() != $bootos->getGroupID()) $this->_redirect('/user/bootos/index/page/'.$this->page.'/updateresult/forbidden'); $initpath = "../resources/bootos/".$bootosID."/initramfs/"; $kernelpath = "../resources/bootos/".$bootosID."/kernel/"; $path_tmp = "../resources/bootos/"; $hash = md5(microtime(1)); exec("wget -O '".$path_tmp."kernel".$hash."' ".escapeshellcmd($bootos->getPath_kernel())." 2>&1 | grep 'saved'", $status); exec("wget -O '".$path_tmp."initramfs".$hash."' ".escapeshellcmd($bootos->getPath_init())." 2>&1 | grep 'saved'", $status2); if(!array_pop($status) || !array_pop($status2)){ $this->_redirect('/user/bootos/index/page/'.$this->page.'/updateresult/404'); //TODO Delete Files in tmp } exec("mv ../resources/bootos/kernel$hash $kernelpath"."kernel"); exec("mv ../resources/bootos/initramfs$hash $initpath"."initramfs"); $this->_redirect('/user/bootos/index/page/'.$this->page.'/updateresult/ok'); } public function editbootosAction() { //ACL Is he allowed to edit Preboots? if(!Pbs_Acl::checkRight('boe') && !Pbs_Acl::checkRight('boem')) $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden'); $bootosID = $this->_request->getParam('bootosID'); if (!is_numeric($bootosID)) $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden'); $groupID = $this->membership->getGroupID(); $groupgroupsMapper = new Application_Model_GroupGroupsMapper(); $childgroups = count($groupgroupsMapper->getChildGroups($groupID)); $configMapper = new Application_Model_ConfigMapper(); $configlist = $configMapper->findBy(array("groupID" => $groupID)); $bootos = new Application_Model_BootOs(); $bootos = $this->bootosMapper->find($bootosID); if($this->membership->getGroupID() != $bootos->getGroupID()) $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden'); if (!isset($_POST["editbootos"])){ $bootosForm = new user_Form_Bootos(array( 'action' => 'editbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'page' => $this->page)); $bootosForm->populate($bootos->toArray()); }else{ $bootosForm = new user_Form_Bootos(array( 'action' => 'editbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'page' => $this->page),$_POST); if ($bootosForm->isValid($_POST)) { $bootosold = $bootos; $bootos = new Application_Model_BootOs($_POST); $bootos->setGroupID($this->membership->getGroupID()); $bootos->setCreated(time()); if($bootos->getConfigID() == '') $bootos->setConfigID(NULL); $bootos->setID($bootosID); if( $bootos->getConfigID() != $bootosold->getConfigID() || $bootos->getDefaultkcl() != $bootosold->getDefaultkcl() || $bootos->getExpires() != $bootosold->getExpires() || $bootos->getPublic() != $bootosold->getPublic() ){ //ACL Is he allowed to edit this? if(!Pbs_Acl::checkRight('boe')) $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden'); } if($bootos->getPath_kernel() != $bootosold->getPath_kernel() || $bootos->getPath_init() != $bootosold->getPath_init()){ //ACL Is he allowed to edit the Kernel/Init Path? if(!Pbs_Acl::checkRight('boe')) $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden'); $path_tmp = "../resources/bootos/"; $hash = md5(microtime(1)); exec("wget -O '".$path_tmp."kernel".$hash."' ".escapeshellcmd($bootos->getPath_kernel())." 2>&1 | grep 'saved'", $status); exec("wget -O '".$path_tmp."initramfs".$hash."' ".escapeshellcmd($bootos->getPath_init())." 2>&1 | grep 'saved'", $status2); if(!array_pop($status) || !array_pop($status2)){ $this->view->bootosForm = $bootosForm; $pbsNotifier = new Pbs_Notifier(); echo $pbsNotifier->notify('The Resource was not found on the specified path','error'); return; } $initpath = "../resources/bootos/".$bootosID."/initramfs/"; $kernelpath = "../resources/bootos/".$bootosID."/kernel/"; mkdir($initpath ,0777, true); mkdir($kernelpath ,0777, true); exec("mv ../resources/bootos/kernel$hash $kernelpath"."kernel"); exec("mv ../resources/bootos/initramfs$hash $initpath"."initramfs"); } try { $this->bootosMapper->save($bootos); }catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/error'); //TODO Delete Folder + Preboot } $this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/ok'); } } $this->view->bootosForm = $bootosForm; } public function deletebootosAction() { //ACL Is he allowed to delete Bootos? if(!Pbs_Acl::checkRight('bod')) $this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden'); try{ $bootosID = $this->_request->getParam('bootosID'); if (!is_numeric($bootosID)) $this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden'); $bootos = new Application_Model_BootOs(); $this->bootosMapper->find($bootosID, $bootos); if($this->membership->getGroupID() != $bootos->getGroupID()) $this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden'); $this->bootosMapper->delete($bootos); exec("rm -r ../resources/bootos/".$bootosID); }catch(Zend_Exception $e){ echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; $this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/error'); } $this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/ok'); } }