/**
  * save
  *
  * @param string $a_mode values: create | edit
  */
 public function save($a_mode = "create")
 {
     global $ilTabs;
     if (!ilObjDataCollection::_checkAccess($this->obj_id)) {
         $this->accessDenied();
         return;
     }
     $ilTabs->activateTab("id_fields");
     $this->initForm($a_mode);
     if ($this->checkInput($a_mode)) {
         if ($a_mode != "update") {
             $this->table = ilDataCollectionCache::getTableCache();
         } elseif ($this->table_id) {
             $this->table = ilDataCollectionCache::getTableCache($this->table_id);
         } else {
             $this->ctrl->redirectByClass("ildatacollectionfieldeditgui", "listFields");
         }
         $this->table->setTitle($this->form->getInput("title"));
         $this->table->setObjId($this->obj_id);
         $this->table->setIsVisible($this->form->getInput("is_visible"));
         $this->table->setAddPerm($this->form->getInput("add_perm"));
         $this->table->setEditPerm($this->form->getInput("edit_perm"));
         $this->table->setDeletePerm($this->form->getInput("delete_perm"));
         $this->table->setEditByOwner($this->form->getInput("edit_by_owner"));
         $this->table->setViewOwnRecordsPerm($this->form->getInput('view_own_records_perm'));
         $this->table->setExportEnabled($this->form->getInput("export_enabled"));
         $this->table->setDefaultSortField($this->form->getInput("default_sort_field"));
         $this->table->setDefaultSortFieldOrder($this->form->getInput("default_sort_field_order"));
         $this->table->setPublicCommentsEnabled($this->form->getInput('public_comments'));
         $this->table->setLimited($this->form->getInput("limited"));
         $this->table->setDescription($this->form->getInput('description'));
         $limit_start = $this->form->getInput("limit_start");
         $limit_end = $this->form->getInput("limit_end");
         $this->table->setLimitStart($limit_start["date"] . " " . $limit_start["time"]);
         $this->table->setLimitEnd($limit_end["date"] . " " . $limit_end["time"]);
         if (!$this->table->hasPermissionToAddTable($this->parent_object->ref_id)) {
             $this->accessDenied();
             return;
         }
         if ($a_mode == "update") {
             $this->table->doUpdate();
             ilUtil::sendSuccess($this->lng->txt("dcl_msg_table_edited"), true);
             $this->ctrl->redirectByClass("ildatacollectiontableeditgui", "edit");
         } else {
             $this->table->doCreate();
             ilUtil::sendSuccess($this->lng->txt("dcl_msg_table_created"), true);
             $this->ctrl->setParameterByClass("ildatacollectionfieldlistgui", "table_id", $this->table->getId());
             $this->ctrl->redirectByClass("ildatacollectionfieldlistgui", "listFields");
         }
     } else {
         $this->form->setValuesByPost();
         $this->tpl->setContent($this->form->getHTML());
     }
 }
Ejemplo n.º 2
0
 /**
  * Attention only use this for objects who have not yet been created (use like: $x = new ilObjDataCollection; $x->cloneStructure($id))
  *
  * @param $original_id The original ID of the dataselection you want to clone it's structure
  */
 public function cloneStructure($original_id)
 {
     $original = new ilObjDataCollection($original_id);
     $this->setApproval($original->getApproval());
     $this->setNotification($original->getNotification());
     $this->setPublicNotes($original->getPublicNotes());
     $this->setRating($original->getRating());
     // delete old tables.
     foreach ($this->getTables() as $table) {
         $table->doDelete(true);
     }
     // add new tables.
     foreach ($original->getTables() as $table) {
         $new_table = new ilDataCollectionTable();
         $new_table->setObjId($this->getId());
         $new_table->cloneStructure($table);
         if ($table->getId() == $original->getMainTableId()) {
             $this->setMainTableId($new_table->getId());
         }
     }
     // update because maintable id is now set.
     $this->doUpdate();
     // Set new field-ID of referenced fields
     foreach ($original->getTables() as $origTable) {
         foreach ($origTable->getRecordFields() as $origField) {
             if ($origField->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_REFERENCE) {
                 $newRefId = NULL;
                 $origFieldRefObj = ilDataCollectionCache::getFieldCache($origField->getFieldRef());
                 $origRefTable = ilDataCollectionCache::getTableCache($origFieldRefObj->getTableId());
                 // Lookup the new ID of the referenced field in the actual DC
                 $tableId = ilDataCollectionTable::_getTableIdByTitle($origRefTable->getTitle(), $this->getId());
                 $fieldId = ilDataCollectionField::_getFieldIdByTitle($origFieldRefObj->getTitle(), $tableId);
                 $field = ilDataCollectionCache::getFieldCache($fieldId);
                 $newRefId = $field->getId();
                 // Set the new refID in the actual DC
                 $tableId = ilDataCollectionTable::_getTableIdByTitle($origTable->getTitle(), $this->getId());
                 $fieldId = ilDataCollectionField::_getFieldIdByTitle($origField->getTitle(), $tableId);
                 $field = ilDataCollectionCache::getFieldCache($fieldId);
                 $field->setPropertyvalue($newRefId, ilDataCollectionField::PROPERTYID_REFERENCE);
                 $field->doUpdate();
             }
         }
     }
 }