Example #1
0
 public function updateAction()
 {
     $data =& $_POST;
     $data = $this->noDupes($data);
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender();
     db()->beginTransaction();
     try {
         if ($data['id'] == '0') {
             $data['id'] = '';
         }
         if (isset($data['name']) == true) {
             $data['name'] = ltrim(rtrim($data['name']));
         }
         if (isset($data['description']) == true) {
             $data['description'] = ltrim(rtrim($data['description']));
         }
         if (isset($data['abstract']) == true) {
             $data['abstract'] = rtrim($data['abstract']);
         }
         if ($this->session->userid !== null) {
             $users = new Default_Model_Researchers();
             $users->filter->id->equals($this->session->userid);
             $user = $users->items[0];
             $apps = new Default_Model_Applications();
             if ($data['id'] != '') {
                 // UPDATE
                 $apps->filter->id->equals($data['id']);
                 $app = $apps->items[0];
                 if ($user->privs->canModifyApplicationName($app)) {
                     $app->name = $data['name'];
                 }
                 if ($user->privs->canModifyApplicationDescription($app)) {
                     $app->description = $data['description'];
                 }
                 if ($user->privs->canModifyApplicationAbstract($app)) {
                     $app->abstract = $data['abstract'];
                 }
                 if ($user->privs->canModifyApplicationStatus($app)) {
                     if ($data['statusID'] != '') {
                         $app->statusID = $data['statusID'];
                     }
                 }
                 if ($_POST['newimage'] !== "") {
                     if ($user->privs->canModifyApplicationLogo($app)) {
                         $imgfile = APPLICATION_PATH . "/../public/" . $_POST['newimage'];
                         if (file_exists(APPLICATION_PATH . "/../cache/app-logo-" . $data["id"] . ".png")) {
                             unlink(APPLICATION_PATH . "/../cache/app-logo-" . $data["id"] . ".png");
                         }
                         if (file_exists(APPLICATION_PATH . "/../cache/55x55/app-logo-" . $data["id"] . ".png")) {
                             unlink(APPLICATION_PATH . "/../cache/55x55/app-logo-" . $data["id"] . ".png");
                         }
                         if (file_exists(APPLICATION_PATH . "/../cache/100x100/app-logo-" . $data["id"] . ".png")) {
                             unlink(APPLICATION_PATH . "/../cache/55x55/app-logo-" . $data["id"] . ".png");
                         }
                         $app->logo = pg_escape_bytea(base64_encode(@file_get_contents($imgfile)));
                     }
                 }
                 if (isset($_POST['addedBy'])) {
                     if ($_POST['addedBy'] !== '') {
                         if ($user->privs->canGrantOwnership($app)) {
                             $app->addedBy = $_POST['addedBy'];
                             $app->ownerID = $_POST['addedBy'];
                         }
                     }
                 }
                 $app->lastUpdated = date('Y-m-d');
                 $app->keywords = null;
                 $app->save();
                 if ($user->privs->canModifyApplicationCategory($app)) {
                     $this->syncDBCollection("appid", $data['id'], "categoryid", "AppCategories", "AppCategory", $data);
                 }
                 /* set primary category */
                 $newapps = new Default_Model_Applications();
                 $newapps->filter->id->equals($app->id);
                 if (count($newapps->items) > 0) {
                     if (count($newapps->items[0]->categories) > 0) {
                         foreach ($newapps->items[0]->categories as $cat) {
                             if (isset($data["categoryID0"]) && $cat->categoryid == $data["categoryID0"]) {
                                 if (!$cat->isPrimary) {
                                     $cat->isPrimary = true;
                                     $cat->save();
                                     break;
                                 }
                             }
                         }
                     }
                 }
                 if ($user->privs->canModifyApplicationDiscipline($app)) {
                     $this->syncDBCollection("appid", $data['id'], "disciplineid", "AppDisciplines", "AppDiscipline", $data);
                 }
                 $this->session->privs = null;
                 if ($user->privs->canModifyApplicationVO($app)) {
                     $this->syncDBCollection("appid", $data['id'], "void", "AppVOs", "AppVO", $data, "vo");
                 }
                 if ($user->privs->canModifyApplicationMiddleware($app)) {
                     $this->syncDBCollection("appid", $data['id'], "middlewareid", "AppMiddlewares", "AppMiddleware", $data, "mw");
                 }
                 if ($user->privs->canAssociatePersonToApplication($app)) {
                     $this->syncDBCollection("appid", $data['id'], "researcherid", "ResearchersApps", "ResearchersApp", $data, "scicon");
                     $this->syncAppContactItems($data['id'], $data);
                 }
                 if ($user->privs->canModifyApplicationCountry($app)) {
                     $this->syncDBCollection("appid", $data['id'], "countryid", "AppManualCountries", "AppManualCountry", $data);
                 }
                 if ($user->privs->canModifyApplicationURLs($app)) {
                     $this->syncDBCollection("appid", $data['id'], "id", "AppUrls", "AppUrl", $data, "url");
                 }
                 if ($user->privs->canModifyApplicationDocuments($app)) {
                     // this is rather too complicated to be included in syncDBCollection...
                     if ($data['documents'] != "UNCHANGED") {
                         $xdocs = new SimpleXMLElement($data['documents']);
                         $docdata = array();
                         foreach ($xdocs->document as $doc) {
                             $ddd = "" . $doc;
                             $ddd = base64_decode($ddd);
                             $ddd = urldecode($ddd);
                             $ddd = json_decode($ddd, true);
                             $docdata[] = $ddd;
                         }
                         $docs = new Default_Model_AppDocuments();
                         $docs->filter->appid->equals($data['id']);
                         $docs->refresh();
                         $docCount = count($docs->items);
                         //handle existing and deleted entries
                         for ($i = $docCount - 1; $i >= 0; $i--) {
                             $existing = null;
                             foreach ($docdata as $docdatum) {
                                 $doc = $docs->items[$i];
                                 if ($doc->id == $docdatum['id']) {
                                     $existing = $this->populateAppDoc($doc, $docdatum);
                                     break;
                                 }
                             }
                             if ($existing === null) {
                                 $docs->remove($docs->items[$i]);
                             } else {
                                 $existing->save();
                             }
                         }
                         //handle new entries
                         foreach ($docdata as $docdatum) {
                             if ($docdatum['id'] == '' || strtolower($docdatum['id']) == 'null') {
                                 $doc = new Default_Model_AppDocument();
                                 //first time only main data is saved
                                 $doc->appID = $data['id'];
                                 $doc = $this->populateAppDoc($doc, $docdatum);
                                 $docs->add($doc);
                                 //second time referenced data is saved
                                 $doc = $this->populateAppDoc($doc, $docdatum);
                                 $doc->save();
                             }
                         }
                     }
                 }
             } else {
                 // INSERT
                 if ($user->privs->canInsertApplication()) {
                     if ($data['tool'] == "true") {
                         $data['tool'] = true;
                     } else {
                         $data['tool'] = false;
                     }
                     $app = new Default_Model_Application();
                     $app->name = $data['name'];
                     $app->description = $data['description'];
                     $app->abstract = $data['abstract'];
                     if ($data['statusID'] != '') {
                         $app->statusID = $data['statusID'];
                     }
                     //EGI RT #1820: Remove RESPECT
                     //$app->respect = $data['respect'];
                     $app->respect = false;
                     if ($data['tool']) {
                         $app->tool = true;
                     } else {
                         $app->tool = false;
                     }
                     $app->dateAdded = date('Y-m-d');
                     $app->lastUpdated = date('Y-m-d');
                     if (array_key_exists('addedBy', $_POST)) {
                         if ($user->privs->canGrantOwnership($app)) {
                             $app->addedBy = $_POST['addedBy'];
                             $app->ownerID = $_POST['addedBy'];
                         } else {
                             $app->addedBy = $this->session->userid;
                             $app->ownerID = $this->session->userid;
                         }
                     } else {
                         $app->addedBy = $this->session->userid;
                         $app->ownerID = $this->session->userid;
                     }
                     if ($_POST['newimage'] !== "") {
                         $imgfile = APPLICATION_PATH . "/../public/" . $_POST['newimage'];
                         $app->logo = pg_escape_bytea(base64_encode(@file_get_contents($imgfile)));
                     }
                     $app->keywords = null;
                     $apps->add($app);
                     $this->syncDBCollection("appid", $app->id, "categoryid", "AppCategories", "AppCategory", $data);
                     $this->syncDBCollection("appid", $app->id, "disciplineid", "AppDisciplines", "AppDiscipline", $data);
                     $this->session->lastAppID = $app->id;
                     $this->session->privs = null;
                 }
             }
         }
         db()->commit();
     } catch (Exception $e) {
         db()->rollBack();
         $this->getResponse()->clearAllHeaders();
         $this->getResponse()->setRawHeader("HTTP/1.0 500 Internal server error");
         $this->getResponse()->setHeader("Status", "500 Internal server error");
         echo base64_encode(encrypt($e, ApplicationConfiguration::api('key', '')));
         error_log("Transaction ROLLBACKed: {$e}");
     }
 }
Example #2
0
 public function getAppDocument()
 {
     if ($this->_appDocument === null) {
         $AppDocuments = new Default_Model_AppDocuments();
         $AppDocuments->filter->id->equals($this->getDocID());
         if ($AppDocuments->count() > 0) {
             $this->_appDocument = $AppDocuments->items[0];
         }
     }
     return $this->_appDocument;
 }
Example #3
0
 protected function init()
 {
     $this->_res = new Default_Model_Applications();
     $id = normalizeAppID($this);
     $this->_res->filter->id->numequals($id);
     $this->_res->refresh();
     if (count($this->_res->items) > 0) {
         $this->_res = $this->_res->items[0];
         $res = new Default_Model_AppDocuments();
         $res->filter->id->equals($this->getParam('pid'))->and($res->filter->appid->numequals($id));
         $res->refresh();
         if (!(count($res->items) > 0)) {
             $this->_res = null;
             $this->setError(RestErrorEnum::RE_ITEM_NOT_FOUND);
         }
     } else {
         $this->_res = null;
         $this->setError(RestErrorEnum::RE_ITEM_NOT_FOUND);
     }
 }