/**
  * Execute any math functions inside a token
  *
  * @param string $token
  *
  * @return string
  */
 protected function calculateFunctions($token)
 {
     if (isset(self::$cache_math_function_tokens[$this->field->getId()][$token])) {
         $result = self::$cache_math_function_tokens[$this->field->getId()][$token];
         if ($result === false) {
             return $token;
         }
     } else {
         $pattern = '#';
         foreach (self::getFunctions() as $function) {
             $pattern .= "({$function})\\(([^)]*)\\)|";
         }
         if (!preg_match_all(rtrim($pattern, '|') . '#', $token, $result)) {
             // No functions found inside token, just return token again
             self::$cache_math_function_tokens[$this->field->getId()][$token] = false;
             return $token;
         }
     }
     // Function found inside token, calculate!
     foreach ($result[0] as $k => $to_replace) {
         $function_args = $this->getFunctionArgs($k, $result);
         $function = $function_args['function'];
         $args = $this->substituteFieldValues($function_args['args']);
         $token = str_replace($to_replace, $this->calculateFunction($function, $args), $token);
     }
     return $token;
 }
 /**
  * Load the value
  */
 protected function loadValue()
 {
     if ($this->value === NULL) {
         $datatype = $this->field->getDatatype();
         $query = "SELECT * FROM il_dcl_stloc" . $datatype->getStorageLocation() . "_value WHERE record_field_id = " . $this->db->quote($this->id, "integer");
         $set = $this->db->query($query);
         $rec = $this->db->fetchAssoc($set);
         $this->value = $rec['value'];
     }
 }
 /**
  * Load the value
  */
 protected function loadValue()
 {
     if ($this->value === NULL) {
         $datatype = $this->field->getDatatype();
         switch ($datatype->getId()) {
             case ilDataCollectionDatatype::INPUTFORMAT_RATING:
                 return true;
         }
         $query = "SELECT * FROM il_dcl_stloc" . $datatype->getStorageLocation() . "_value WHERE record_field_id = " . $this->db->quote($this->id, "integer");
         $set = $this->db->query($query);
         $rec = $this->db->fetchAssoc($set);
         $this->value = $rec['value'];
     }
 }
 /**
  * @param ilDataCollectionField $a_set
  */
 public function fillRow(ilDataCollectionField $a_set)
 {
     global $lng, $ilCtrl;
     if (!$a_set->isStandardField()) {
         $this->tpl->setVariable('FIELD_ID', $a_set->getId());
     }
     $this->tpl->setVariable('NAME', 'order[' . $a_set->getId() . ']');
     $this->tpl->setVariable('VALUE', $this->order);
     $this->tpl->setVariable('CHECKBOX_VISIBLE', 'visible[' . $a_set->getId() . ']');
     if ($a_set->isVisible()) {
         $this->tpl->setVariable('CHECKBOX_VISIBLE_CHECKED', 'checked');
     }
     /* Don't enable setting filter for MOB fields or reference fields that reference a MOB field */
     $show_filter = true;
     $show_exportable = true;
     if ($a_set->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_MOB || $a_set->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_FILE) {
         $show_filter = false;
     }
     if ($a_set->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_REFERENCE) {
         $ref_field = ilDataCollectionCache::getFieldCache((int) $a_set->getFieldRef());
         if ($ref_field && ($ref_field->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_MOB || $ref_field->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_FILE)) {
             $show_filter = false;
         }
     }
     if ($a_set->getId() == 'comments') {
         $show_filter = false;
         $show_exportable = false;
     }
     if ($show_filter) {
         $this->tpl->setVariable('CHECKBOX_FILTERABLE', 'filterable[' . $a_set->getId() . ']');
         if ($a_set->isFilterable()) {
             $this->tpl->setVariable('CHECKBOX_FILTERABLE_CHECKED', 'checked');
         }
     } else {
         $this->tpl->setVariable('NO_FILTER', '');
     }
     if ($show_exportable) {
         $this->tpl->setVariable('CHECKBOX_EXPORTABLE', 'exportable[' . $a_set->getId() . ']');
         if ($a_set->getExportable()) {
             $this->tpl->setVariable('CHECKBOX_EXPORTABLE_CHECKED', 'checked');
         }
     } else {
         $this->tpl->setVariable('NO_FILTER_EXPORTABLE', '');
     }
     if (!$a_set->isStandardField()) {
         $this->tpl->setVariable('CHECKBOX_NAME_LOCKED', 'locked[' . $a_set->getId() . ']');
         if ($a_set->getLocked()) {
             $this->tpl->setVariable('CHECKBOX_CHECKED_LOCKED', 'checked');
         }
     } else {
         $this->tpl->setVariable('NOT_LOCKED', '');
     }
     $this->order = $this->order + 10;
     $this->tpl->setVariable('ORDER_NAME', 'order[' . $a_set->getId() . ']');
     $this->tpl->setVariable('ORDER_VALUE', $this->order);
     $this->tpl->setVariable('TITLE', $a_set->getTitle());
     $this->tpl->setVariable('DESCRIPTION', $a_set->getDescription());
     $this->tpl->setVariable('DATATYPE', $a_set->getDatatypeTitle());
     if (!$a_set->isStandardField()) {
         switch ($a_set->getRequired()) {
             case 0:
                 $required = ilUtil::getImagePath('icon_not_ok.svg');
                 break;
             case 1:
                 $required = ilUtil::getImagePath('icon_ok.svg');
                 break;
         }
         switch ($a_set->isUnique()) {
             case 0:
                 $uniq = ilUtil::getImagePath('icon_not_ok.svg');
                 break;
             case 1:
                 $uniq = ilUtil::getImagePath('icon_ok.svg');
                 break;
         }
         $this->tpl->setVariable('REQUIRED', $required);
         $this->tpl->setVariable('UNIQUE', $uniq);
     } else {
         $this->tpl->setVariable('NO_REQUIRED', '');
         $this->tpl->setVariable('NO_UNIQUE', '');
     }
     $ilCtrl->setParameterByClass('ildatacollectionfieldeditgui', 'field_id', $a_set->getId());
     if (!$a_set->isStandardField()) {
         include_once './Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php';
         $alist = new ilAdvancedSelectionListGUI();
         $alist->setId($a_set->getId());
         $alist->setListTitle($lng->txt('actions'));
         if ($this->table->hasPermissionToFields($this->parent_obj->parent_obj->ref_id)) {
             $alist->addItem($lng->txt('edit'), 'edit', $ilCtrl->getLinkTargetByClass('ildatacollectionfieldeditgui', 'edit'));
             $alist->addItem($lng->txt('delete'), 'delete', $ilCtrl->getLinkTargetByClass('ildatacollectionfieldeditgui', 'confirmDelete'));
         }
         $this->tpl->setVariable('ACTIONS', $alist->getHTML());
     }
 }
 /**
  * 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();
             }
         }
     }
 }
 /**
  * initEditCustomForm
  *
  * @param string $a_mode values: create | edit
  */
 public function initForm($a_mode = "create")
 {
     global $ilCtrl, $lng;
     include_once "./Services/Form/classes/class.ilPropertyFormGUI.php";
     $this->form = new ilPropertyFormGUI();
     if ($a_mode == "edit") {
         $this->form->setTitle($lng->txt('dcl_edit_field'));
         $hidden_prop = new ilHiddenInputGUI("field_id");
         $this->form->addItem($hidden_prop);
         $this->form->setFormAction($ilCtrl->getFormAction($this), "update");
         $this->form->addCommandButton('update', $lng->txt('dcl_update_field'));
     } else {
         $this->form->setTitle($lng->txt('dcl_new_field'));
         $hidden_prop = new ilHiddenInputGUI("table_id");
         $hidden_prop->setValue($this->field_obj->getTableId());
         $this->form->addItem($hidden_prop);
         $this->form->setFormAction($ilCtrl->getFormAction($this), "save");
         $this->form->addCommandButton('save', $lng->txt('dcl_create_field'));
     }
     $this->form->addCommandButton('cancel', $lng->txt('cancel'));
     $text_prop = new ilTextInputGUI($lng->txt("title"), "title");
     $text_prop->setRequired(true);
     $text_prop->setInfo(sprintf($lng->txt('fieldtitle_allow_chars'), ilDataCollectionField::_getTitleValidChars(false)));
     $text_prop->setValidationRegexp(ilDataCollectionField::_getTitleValidChars(true));
     $this->form->addItem($text_prop);
     $edit_datatype = new ilRadioGroupInputGUI($lng->txt('dcl_datatype'), 'datatype');
     foreach (ilDataCollectionDatatype::getAllDatatypes() as $datatype) {
         $opt = new ilRadioOption($lng->txt('dcl_' . $datatype['title']), $datatype['id']);
         foreach (ilDataCollectionDatatype::getProperties($datatype['id']) as $property) {
             //Type Reference: List Tabels
             if ($datatype['id'] == ilDataCollectionDatatype::INPUTFORMAT_REFERENCE and $property['id'] == ilDataCollectionField::PROPERTYID_REFERENCE) {
                 // Get Tables
                 require_once "./Modules/DataCollection/classes/class.ilDataCollectionTable.php";
                 $tables = $this->parent_obj->getDataCollectionObject()->getTables();
                 foreach ($tables as $table) {
                     foreach ($table->getRecordFields() as $field) {
                         //referencing references may lead to endless loops.
                         if ($field->getDatatypeId() != ilDataCollectionDatatype::INPUTFORMAT_REFERENCE) {
                             $options[$field->getId()] = $table->getTitle() . "->" . $field->getTitle();
                         }
                     }
                 }
                 $table_selection = new ilSelectInputGUI('', 'prop_' . $property['id']);
                 $table_selection->setOptions($options);
                 //$table_selection->setValue($this->table_id);
                 $opt->addSubItem($table_selection);
             } elseif ($datatype['id'] == ilDataCollectionDatatype::INPUTFORMAT_REFERENCELIST and $property['id'] == ilDataCollectionField::PROPERTYID_REFERENCELIST) {
                 // Get Tables
                 require_once "./Modules/DataCollection/classes/class.ilDataCollectionTable.php";
                 $tables = $this->parent_obj->getDataCollectionObject()->getTables();
                 foreach ($tables as $table) {
                     foreach ($table->getRecordFields() as $field) {
                         //referencing references may lead to endless loops.
                         if ($field->getDatatypeId() != ilDataCollectionDatatype::INPUTFORMAT_REFERENCELIST) {
                             $options[$field->getId()] = $table->getTitle() . "->" . $field->getTitle();
                         }
                     }
                 }
                 $table_selection = new ilSelectInputGUI('', 'prop_' . $property['id']);
                 $table_selection->setOptions($options);
                 $opt->addSubItem($table_selection);
             } elseif ($property['datatype_id'] == $datatype['id']) {
                 if ($property['inputformat'] == ilDataCollectionDatatype::INPUTFORMAT_BOOLEAN) {
                     $subitem = new ilCheckboxInputGUI($lng->txt('dcl_' . $property['title']), 'prop_' . $property['id']);
                     $opt->addSubItem($subitem);
                 } else {
                     $subitem = new ilTextInputGUI($lng->txt('dcl_' . $property['title']), 'prop_' . $property['id']);
                     $opt->addSubItem($subitem);
                 }
             }
         }
         $edit_datatype->addOption($opt);
     }
     $edit_datatype->setRequired(true);
     //you can't change type but we still need it in POST
     if ($a_mode == "edit") {
         $edit_datatype->setDisabled(true);
     }
     $this->form->addItem($edit_datatype);
     // Description
     $text_prop = new ilTextAreaInputGUI($lng->txt("dcl_field_description"), "description");
     $this->form->addItem($text_prop);
     // Required
     $cb = new ilCheckboxInputGUI($lng->txt("dcl_field_required"), "required");
     $this->form->addItem($cb);
     //Unique
     $cb = new ilCheckboxInputGUI($lng->txt("dcl_unique"), "unique");
     $this->form->addItem($cb);
 }
 static function passThroughFilter(ilDataCollectionRecord $record, ilDataCollectionField $field, $filter)
 {
     $pass = false;
     $type_id = $field->getDatatypeId();
     $value = $record->getRecordFieldValue($field->getId());
     switch ($type_id) {
         case ilDataCollectionDatatype::INPUTFORMAT_TEXT:
             if (!$filter || strpos(strtolower($value), strtolower($filter)) !== false) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_NUMBER:
             if ((!$filter['from'] || $value >= $filter['from']) && (!$filter['to'] || $value <= $filter['to'])) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_BOOLEAN:
             if ($filter == "checked" && $value == 1 || $filter == "not_checked" && $value == 0 || $filter == '' || !$filter) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_DATETIME:
             if ((!$filter['from'] || $value >= $filter['from']) && (!$filter['to'] || $value <= $filter['to'])) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_FILE:
             if (!ilObject2::_exists($value) || ilObject2::_lookupType($value, false) != "file") {
                 $pass = true;
                 break;
             }
             $file_obj = new ilObjFile($value, false);
             $file_name = $file_obj->getTitle();
             if (!$filter || strpos(strtolower($file_name), strtolower($filter)) !== false) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_REFERENCE:
             $props = $field->getProperties();
             if ($filter && $props[ilDataCollectionField::PROPERTYID_N_REFERENCE] && is_array($value) && in_array($filter, $value)) {
                 $pass = true;
             }
             if (!$filter || $filter == $value) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_RATING:
             if (!$filter || $filter <= $value['avg']) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_ILIAS_REF:
             $obj_id = ilObject::_lookupObjId($value);
             if (!$filter || strpos(strtolower(ilObject::_lookupTitle($obj_id)), strtolower($filter)) !== false) {
                 $pass = true;
             }
             break;
         case ilDataCollectionDatatype::INPUTFORMAT_MOB:
             $m_obj = new ilObjMediaObject($value, false);
             $file_name = $m_obj->getTitle();
             if (!$filter || strpos(strtolower($file_name), strtolower($filter)) !== false) {
                 $pass = true;
             }
             break;
     }
     //for the fields owner and last edit by, we check the name, not the ID
     if (($field->getId() == "owner" || $field->getId() == "last_edit_by") && $filter) {
         $pass = false;
         $user = new ilObjUser($value);
         if (strpos($user->getFullname(), $filter) !== false) {
             $pass = true;
         }
     }
     return $pass;
 }
 public static function buildFieldFromRecord($rec)
 {
     $fields_cache =& self::$fields_cache;
     if (isset($fields_cache[$rec["id"]])) {
         return $fields_cache[$rec["id"]];
     }
     $field = new ilDataCollectionField();
     $field->setId($rec["id"]);
     $field->setTableId($rec["table_id"]);
     $field->setTitle($rec["title"]);
     $field->setDescription($rec["description"]);
     $field->setDatatypeId($rec["datatype_id"]);
     $field->setRequired($rec["required"]);
     $field->setUnique($rec["is_unique"]);
     $field->setLocked($rec["is_locked"]);
     $fields_cache[$rec["id"]] = $field;
     return $field;
 }
 /**
  * initEditCustomForm
  *
  * @param string $a_mode values: create | edit
  */
 public function initForm($a_mode = "create")
 {
     global $ilCtrl, $lng;
     include_once "./Services/Form/classes/class.ilPropertyFormGUI.php";
     $this->form = new ilPropertyFormGUI();
     if ($a_mode == "edit") {
         $this->form->setTitle($lng->txt('dcl_edit_field'));
         $hidden_prop = new ilHiddenInputGUI("field_id");
         $this->form->addItem($hidden_prop);
         $this->form->setFormAction($ilCtrl->getFormAction($this), "update");
         $this->form->addCommandButton('update', $lng->txt('dcl_update_field'));
     } else {
         $this->form->setTitle($lng->txt('dcl_new_field'));
         $hidden_prop = new ilHiddenInputGUI("table_id");
         $hidden_prop->setValue($this->field_obj->getTableId());
         $this->form->addItem($hidden_prop);
         $this->form->setFormAction($ilCtrl->getFormAction($this), "save");
         $this->form->addCommandButton('save', $lng->txt('dcl_create_field'));
     }
     $this->form->addCommandButton('cancel', $lng->txt('cancel'));
     $text_prop = new ilTextInputGUI($lng->txt("title"), "title");
     $text_prop->setRequired(true);
     $text_prop->setInfo(sprintf($lng->txt('fieldtitle_allow_chars'), ilDataCollectionField::_getTitleValidChars(false)));
     $text_prop->setValidationRegexp(ilDataCollectionField::_getTitleValidChars(true));
     $this->form->addItem($text_prop);
     $edit_datatype = new ilRadioGroupInputGUI($lng->txt('dcl_datatype'), 'datatype');
     foreach (ilDataCollectionDatatype::getAllDatatypes() as $datatype) {
         $opt = new ilRadioOption($lng->txt('dcl_' . $datatype['title']), $datatype['id']);
         foreach (ilDataCollectionDatatype::getProperties($datatype['id']) as $property) {
             //Type Reference: List Tabels
             if ($datatype['id'] == ilDataCollectionDatatype::INPUTFORMAT_REFERENCE and $property['id'] == ilDataCollectionField::PROPERTYID_REFERENCE) {
                 $options = array();
                 // Get Tables
                 require_once "./Modules/DataCollection/classes/class.ilDataCollectionTable.php";
                 $tables = $this->parent_obj->getDataCollectionObject()->getTables();
                 foreach ($tables as $table) {
                     foreach ($table->getRecordFields() as $field) {
                         //referencing references may lead to endless loops.
                         if ($field->getDatatypeId() != ilDataCollectionDatatype::INPUTFORMAT_REFERENCE) {
                             $options[$field->getId()] = $table->getTitle() . self::REFERENCE_SEPARATOR . $field->getTitle();
                         }
                     }
                 }
                 $table_selection = new ilSelectInputGUI('', 'prop_' . $property['id']);
                 $table_selection->setOptions($options);
                 //$table_selection->setValue($this->table_id);
                 $opt->addSubItem($table_selection);
             } elseif ($datatype['id'] == ilDataCollectionDatatype::INPUTFORMAT_REFERENCELIST and $property['id'] == ilDataCollectionField::PROPERTYID_N_REFERENCE) {
                 // Get Tables
                 require_once "./Modules/DataCollection/classes/class.ilDataCollectionTable.php";
                 $tables = $this->parent_obj->getDataCollectionObject()->getTables();
                 foreach ($tables as $table) {
                     foreach ($table->getRecordFields() as $field) {
                         //referencing references may lead to endless loops.
                         if ($field->getDatatypeId() != ilDataCollectionDatatype::INPUTFORMAT_REFERENCELIST) {
                             $options[$field->getId()] = $table->getTitle() . self::REFERENCE_SEPARATOR . $field->getTitle();
                         }
                     }
                 }
                 $table_selection = new ilSelectInputGUI('', 'prop_' . $property['id']);
                 $table_selection->setOptions($options);
                 $opt->addSubItem($table_selection);
             } elseif ($property['id'] == ilDataCollectionField::PROPERTYID_FORMULA_EXPRESSION) {
                 $table = ilDataCollectionCache::getTableCache((int) $_GET['table_id']);
                 $fields = array();
                 foreach ($table->getFieldsForFormula() as $f) {
                     $placeholder = $f->isStandardField() ? $f->getId() : $f->getTitle();
                     $fields[] = '<a class="dclPropExpressionField" data-placeholder="' . $placeholder . '">' . $f->getTitle() . '</a>';
                 }
                 $subitem = new ilTextAreaInputGUI($lng->txt('dcl_prop_expression'), 'prop_' . $property['id']);
                 $operators = implode(', ', array_keys(ilDclExpressionParser::getOperators()));
                 $functions = implode(', ', ilDclExpressionParser::getFunctions());
                 $subitem->setInfo(sprintf($lng->txt('dcl_prop_expression_info'), $operators, $functions, implode('<br>', $fields)));
                 $opt->addSubItem($subitem);
             } elseif ($property['datatype_id'] == $datatype['id']) {
                 //All other Types: List properties saved in propertie definition table
                 if ($property['inputformat'] == ilDataCollectionDatatype::INPUTFORMAT_BOOLEAN) {
                     $subitem = new ilCheckboxInputGUI($lng->txt('dcl_' . $property['title']), 'prop_' . $property['id']);
                     $opt->addSubItem($subitem);
                 } elseif ($property['inputformat'] == ilDataCollectionDatatype::INPUTFORMAT_NUMBER) {
                     $subitem = new ilNumberInputGUI($lng->txt('dcl_' . $property['title']), 'prop_' . $property['id']);
                     // TODO: Nicer way to add additional info to fields (need changes in language-logic)
                     /*if($lng->txt('dcl_'.$property['title'].'_info') != '-dcl_'.$property['title'].'_info-') {
                     			$subitem->setInfo($lng->txt('dcl_'.$property['title'].'_info'));
                     		}*/
                     $subitem->setSize(5);
                     if ($property['title'] == 'length') {
                         $subitem->setMaxValue(4000);
                         $subitem->setInfo($lng->txt('dcl_' . $property['title'] . '_info'));
                     }
                     $opt->addSubItem($subitem);
                 } elseif ($property['inputformat'] == ilDataCollectionDatatype::INPUTFORMAT_NON_EDITABLE_VALUE) {
                     $subitem = new ilNonEditableValueGUI($lng->txt('dcl_' . $property['title']));
                     $subitem->setValue(implode(', ', ilDataCollectionDatatype::$mob_suffixes));
                     $opt->addSubItem($subitem);
                 } else {
                     $subitem = new ilTextInputGUI($lng->txt('dcl_' . $property['title']), 'prop_' . $property['id']);
                     // TODO: Nicer way to add additional info to fields (need changes in language-logic)
                     /*if($lng->txt('dcl_'.$property['title'].'_info') != '-dcl_'.$property['title'].'_info-') {
                     			$subitem->setInfo($lng->txt('dcl_'.$property['title'].'_info'));
                     		}*/
                     if ($property['title'] == 'regex') {
                         $subitem->setInfo($lng->txt('dcl_' . $property['title'] . '_info'));
                     }
                     $opt->addSubItem($subitem);
                 }
             }
         }
         $edit_datatype->addOption($opt);
     }
     $edit_datatype->setRequired(true);
     //you can't change type but we still need it in POST
     if ($a_mode == "edit") {
         $edit_datatype->setDisabled(true);
     }
     $this->form->addItem($edit_datatype);
     // Description
     $text_prop = new ilTextAreaInputGUI($lng->txt("dcl_field_description"), "description");
     $this->form->addItem($text_prop);
     // Required
     $cb = new ilCheckboxInputGUI($lng->txt("dcl_field_required"), "required");
     $this->form->addItem($cb);
     //Unique
     $cb = new ilCheckboxInputGUI($lng->txt("dcl_unique"), "unique");
     $this->form->addItem($cb);
 }
 /**
  *  saveRecordListViewdefinition
  *
  * @param string $a_mode values: create | update
  */
 public function save($a_mode = "create")
 {
     global $ilCtrl, $lng;
     $this->initForm();
     if ($this->form->checkInput()) {
         //Get fields
         require_once "./Modules/DataCollection/classes/class.ilDataCollectionField.php";
         $fields = ilDataCollectionField::getAll($this->table_id);
         //TODO tabledefs global definieren
         $tabledefinition = array("id" => array("title" => $lng->txt("id")), "table_id" => array("title" => $lng->txt("dcl_table_id")), "create_date" => array("title" => $lng->txt("create_date")), "last_update" => array("title" => $lng->txt("last_update")), "owner" => array("title" => $lng->txt("owner")));
         // Array zusammenführen TODO
         foreach ($fields as $key => $value) {
             $tabledefinition[$key] = $value;
         }
         foreach ($tabledefinition as $key => $field) {
             if ($this->form->getInput("visible_" . $key)) {
                 $this->view_obj->setArrFieldOrder($this->form->getInput("order_" . $key), $key);
             }
         }
         $this->view_obj->doCreate();
         ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
         $ilCtrl->redirect($this, "edit");
     } else {
         ilUtil::sendSuccess($lng->txt("msg_obj_modified"), false);
         $this->form_gui->setValuesByPost();
         $this->tpl->setContent($this->form_gui->getHTML());
     }
 }
 /**
  * @return array|mixed|string
  */
 public function getHTML()
 {
     $values = $this->getValue();
     $record_field = $this;
     if (!$values or !count($values)) {
         return "";
     }
     $html = "";
     $cut = false;
     $tpl = new ilTemplate("tpl.reference_hover.html", true, true, "Modules/DataCollection");
     $tpl->setCurrentBlock("reference_list");
     $elements = array();
     foreach ($values as $value) {
         $ref_record = ilDataCollectionCache::getRecordCache($value);
         if (!$ref_record->getTableId() or !$record_field->getField() or !$record_field->getField()->getTableId()) {
             //the referenced record_field does not seem to exist.
             $record_field->setValue(NULL);
             $record_field->doUpdate();
         } else {
             $elements[] = array('value' => $ref_record->getRecordFieldHTML($this->getField()->getFieldRef()), 'sort' => $ref_record->getRecordFieldSortingValue($this->getField()->getFieldRef()));
         }
     }
     //sort fetched elements
     $is_numeric = false;
     $ref_field = new ilDataCollectionField($record_field->getField()->getFieldRef());
     switch ($ref_field->getDatatypeId()) {
         case ilDataCollectionDatatype::INPUTFORMAT_DATETIME:
         case ilDataCollectionDatatype::INPUTFORMAT_NUMBER:
             $is_numeric = true;
             break;
     }
     $elements = ilUtil::sortArray($elements, 'sort', 'asc', $is_numeric);
     //concat
     foreach ($elements as $element) {
         if (strlen($html) < $this->max_reference_length) {
             $html .= $element['value'] . ", ";
         } else {
             $cut = true;
         }
         $tpl->setCurrentBlock("reference");
         $tpl->setVariable("CONTENT", $element['value']);
         $tpl->parseCurrentBlock();
     }
     $html = substr($html, 0, -2);
     if ($cut) {
         $html .= "...";
     }
     $tpl->setVariable("RECORD_ID", $this->getRecord()->getId());
     $tpl->setVariable("ALL", $html);
     $tpl->parseCurrentBlock();
     return $tpl->get();
 }
 /**
  * @param ilDataCollectionTable $original
  */
 public function cloneStructure(ilDataCollectionTable $original)
 {
     $this->setTitle($original->getTitle());
     $this->setDescription($original->getDescription());
     $this->setIsVisible($original->getIsVisible());
     $this->setEditByOwner($original->getEditByOwner());
     $this->setAddPerm($original->getAddPerm());
     $this->setEditPerm($original->getEditPerm());
     $this->setDeletePerm($original->getDeletePerm());
     $this->setLimited($original->getLimited());
     $this->setLimitStart($original->getLimitStart());
     $this->setLimitEnd($original->getLimitEnd());
     $this->setViewOwnRecordsPerm($original->getViewOwnRecordsPerm());
     $this->setExportEnabled($original->getExportEnabled());
     $this->setPublicCommentsEnabled($original->getPublicCommentsEnabled());
     $this->setDefaultSortFieldOrder($original->getDefaultSortFieldOrder());
     $this->doCreate();
     // reset stdFields to get new for the created object
     $default_sort_field = 0;
     // Clone standard-fields
     $org_std_fields = $original->getStandardFields();
     foreach ($this->getStandardFields() as $element_key => $std_field) {
         $std_field->cloneStructure($org_std_fields[$element_key]);
         if ($std_field->getId() == $original->getDefaultSortField()) {
             $default_sort_field = $std_field->getId();
         }
     }
     // Clone fields
     $new_fields = array();
     foreach ($original->getFields() as $orig_field) {
         if (!$orig_field->isStandardField()) {
             $new_field = new ilDataCollectionField();
             $new_field->setTableId($this->getId());
             $new_field->cloneStructure($orig_field->getId());
             $new_fields[$orig_field->getId()] = $new_field;
             if ($orig_field->getId() == $original->getDefaultSortField()) {
                 $default_sort_field = $new_field->getId();
             }
         }
     }
     $this->setDefaultSortField($default_sort_field);
     $this->doUpdate();
     //TODO: Find better way to copy data (include referenced data)
     // Clone Records with recordfields
     /*foreach($original->getRecords() as $orig_record){
     			$new_record = new ilDataCollectionRecord();
     			$new_record->setTableId($this->getId());
     			$new_record->cloneStructure($orig_record->getId(), $new_fields);
     		}*/
     if ($old_view_id = ilDataCollectionRecordViewViewdefinition::getIdByTableId($original->getId())) {
         $old_view = new ilDataCollectionRecordViewViewdefinition($old_view_id);
         $old_view->setTableId($original->getId());
         $viewdef = new ilDataCollectionRecordViewViewdefinition();
         $viewdef->setTableId($this->id);
         $viewdef->setXMLContent($old_view->getXMLContent(false));
         $viewdef->create();
     }
 }
 /**
  * @param ilDataCollectionField $originalField
  */
 public function cloneProperties(ilDataCollectionField $originalField)
 {
     $orgProps = $originalField->getProperties();
     if ($orgProps == NULL) {
         return;
     }
     foreach ($orgProps as $id => $value) {
         $fieldprop_obj = new ilDataCollectionFieldProp();
         $fieldprop_obj->setDatatypePropertyId($id);
         $fieldprop_obj->setFieldId($this->getId());
         // If reference field, we must reset the referenced field, otherwise it will point to the old ID
         if ($originalField->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_REFERENCE && $id == ilDataCollectionField::PROPERTYID_REFERENCE) {
             $value = NULL;
         }
         $fieldprop_obj->setValue($value);
         $fieldprop_obj->doCreate();
     }
 }
 /**
  * fill row 
  *
  * @access public
  * @param $a_set
  */
 public function fillRow(ilDataCollectionField $a_set)
 {
     global $lng, $ilCtrl;
     $this->tpl->setVariable('NAME', "order[" . $a_set->getId() . "]");
     $this->tpl->setVariable('VALUE', $this->order);
     $this->tpl->setVariable("CHECKBOX_VISIBLE", "visible[" . $a_set->getId() . "]");
     if ($a_set->isVisible()) {
         $this->tpl->setVariable("CHECKBOX_VISIBLE_CHECKED", "checked");
     }
     $this->tpl->setVariable("CHECKBOX_FILTERABLE", "filterable[" . $a_set->getId() . "]");
     if ($a_set->isFilterable()) {
         $this->tpl->setVariable("CHECKBOX_FILTERABLE_CHECKED", "checked");
     }
     if (!$a_set->isStandardField()) {
         $this->tpl->setVariable("CHECKBOX_NAME_LOCKED", "locked[" . $a_set->getId() . "]");
         if ($a_set->getLocked()) {
             $this->tpl->setVariable("CHECKBOX_CHECKED_LOCKED", "checked");
         }
     } else {
         $this->tpl->setVariable("NOT_LOCKED", "-");
     }
     $this->order = $this->order + 10;
     $this->tpl->setVariable("ORDER_NAME", "order[" . $a_set->getId() . "]");
     $this->tpl->setVariable("ORDER_VALUE", $this->order);
     $this->tpl->setVariable('TITLE', $a_set->getTitle());
     $this->tpl->setVariable('DESCRIPTION', $a_set->getDescription());
     $this->tpl->setVariable('DATATYPE', $a_set->getDatatypeTitle());
     if (!$a_set->isStandardField()) {
         switch ($a_set->getRequired()) {
             case 0:
                 $required = ilUtil::getImagePath('icon_not_ok.png');
                 break;
             case 1:
                 $required = ilUtil::getImagePath('icon_ok.png');
                 break;
         }
         switch ($a_set->isUnique()) {
             case 0:
                 $uniq = ilUtil::getImagePath('icon_not_ok.png');
                 break;
             case 1:
                 $uniq = ilUtil::getImagePath('icon_ok.png');
                 break;
         }
         $this->tpl->setVariable('REQUIRED', $required);
         $this->tpl->setVariable('UNIQUE', $uniq);
     } else {
         $this->tpl->setVariable('NO_REQUIRED', "-");
         $this->tpl->setVariable('NO_UNIQUE', "-");
     }
     $ilCtrl->setParameterByClass("ildatacollectionfieldeditgui", "field_id", $a_set->getId());
     if (!$a_set->isStandardField()) {
         include_once "./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php";
         $alist = new ilAdvancedSelectionListGUI();
         $alist->setId($a_set->getId());
         $alist->setListTitle($lng->txt("actions"));
         if ($this->table->hasPermissionToFields($this->parent_obj->parent_obj->ref_id)) {
             $alist->addItem($lng->txt('edit'), 'edit', $ilCtrl->getLinkTargetByClass("ildatacollectionfieldeditgui", 'edit'));
             $alist->addItem($lng->txt('delete'), 'delete', $ilCtrl->getLinkTargetByClass("ildatacollectionfieldeditgui", 'confirmDelete'));
         }
         $this->tpl->setVariable("ACTIONS", $alist->getHTML());
     }
 }
 public function cloneStructure($original_id)
 {
     $original = ilDataCollectionCache::getTableCache($original_id);
     $this->setEditByOwner($original->getEditByOwner());
     $this->setAddPerm($original->getAddPerm());
     $this->setEditPerm($original->getEditPerm());
     $this->setDeletePerm($original->getDeletePerm());
     $this->setLimited($original->getLimited());
     $this->setLimitStart($original->getLimitStart());
     $this->setLimitEnd($original->getLimitEnd());
     $this->setTitle($original->getTitle());
     $this->doCreate();
     //clone fields.
     foreach ($original->getRecordFields() as $field) {
         $new_field = new ilDataCollectionField();
         $new_field->setTableId($this->getId());
         $new_field->cloneStructure($field->getId());
     }
     if ($old_view_id = ilDataCollectionRecordViewViewdefinition::getIdByTableId($original_id)) {
         $old_view = new ilDataCollectionRecordViewViewdefinition($old_view_id);
         $old_view->setTableId($original_id);
         $viewdef = new ilDataCollectionRecordViewViewdefinition();
         $viewdef->setTableId($this->id);
         $viewdef->setXMLContent($old_view->getXMLContent(false));
         $viewdef->create();
     }
 }
 /**
  * @param ilDataCollectionField $field
  * @param array                 $warnings
  *
  * @return bool
  */
 private function checkImportType($field, &$warnings)
 {
     global $lng;
     if (in_array($field->getDatatypeId(), $this->supported_import_datatypes)) {
         return true;
     } else {
         $warnings[] = $field->getTitle() . ": " . $lng->txt("dcl_not_supported_in_import");
         return false;
     }
 }
 /**
  * @param string          $a_entity
  * @param                 $a_types
  * @param array           $a_rec
  * @param ilImportMapping $a_mapping
  * @param string          $a_schema_version
  */
 public function importRecord($a_entity, $a_types, $a_rec, $a_mapping, $a_schema_version)
 {
     switch ($a_entity) {
         case 'dcl':
             // Calling new_obj->create() will create the main table for us
             $new_obj = new ilObjDataCollection();
             $new_obj->setTitle($a_rec['title']);
             $new_obj->setDescription($a_rec['description']);
             $new_obj->setApproval($a_rec['approval']);
             $new_obj->setPublicNotes($a_rec['public_notes']);
             $new_obj->setNotification($a_rec['notification']);
             $new_obj->setPublicNotes($a_rec['public_notes']);
             $new_obj->setOnline(false);
             $new_obj->setRating($a_rec['rating']);
             $new_obj->create();
             $this->import_dc_object = $new_obj;
             $a_mapping->addMapping('Modules/DataCollection', 'dcl', $a_rec['id'], $new_obj->getId());
             break;
         case 'il_dcl_table':
             // If maintable, update. Other tables must be created as well
             $table = $this->count_imported_tables > 0 ? new ilDataCollectionTable() : ilDataCollectionCache::getTableCache($this->import_dc_object->getMainTableId());
             $table->setTitle($a_rec['title']);
             $table->setObjId($this->import_dc_object->getId());
             $table->setDescription($a_rec['description']);
             $table->setAddPerm($a_rec['add_perm']);
             $table->setEditPerm($a_rec['edit_perm']);
             $table->setDeletePerm($a_rec['delete_perm']);
             $table->setEditByOwner($a_rec['edit_by_owner']);
             $table->setLimited($a_rec['limited']);
             $table->setLimitStart($a_rec['limit_start']);
             $table->setLimitEnd($a_rec['limit_end']);
             $table->setIsVisible($a_rec['is_visible']);
             $table->setExportEnabled($a_rec['export_enabled']);
             $table->setDefaultSortField($a_rec['default_sort_field_id']);
             $table->setDefaultSortFieldOrder($a_rec['default_sort_field_order']);
             $table->setPublicCommentsEnabled($a_rec['public_comments']);
             $table->setViewOwnRecordsPerm($a_rec['view_own_records_perm']);
             if ($this->count_imported_tables > 0) {
                 $table->doCreate(false);
                 // false => Do not create views! They are imported later
             } else {
                 $table->doUpdate();
                 $this->count_imported_tables++;
                 // Delete views from maintable because we want to import them from the xml data
                 $set = $this->db->query('SELECT * FROM il_dcl_view WHERE table_id = ' . $this->db->quote($table->getId(), 'integer'));
                 $view_ids = array();
                 while ($row = $this->db->fetchObject($set)) {
                     $view_ids[] = $row->id;
                 }
                 if (count($view_ids)) {
                     $this->db->manipulate("DELETE FROM il_dcl_viewdefinition WHERE view_id IN (" . implode(',', $view_ids) . ")");
                 }
                 $this->db->manipulate("DELETE FROM il_dcl_view WHERE table_id = " . $this->db->quote($table->getId(), 'integer'));
             }
             $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['id'], $table->getId());
             break;
         case 'il_dcl_field':
             $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
             if ($new_table_id) {
                 $field = new ilDataCollectionField();
                 $field->setTableId($new_table_id);
                 $field->setDatatypeId($a_rec['datatype_id']);
                 $field->setTitle($a_rec['title']);
                 $field->setDescription($a_rec['description']);
                 $field->setRequired($a_rec['required']);
                 $field->setUnique($a_rec['is_unique']);
                 $field->setLocked($a_rec['is_locked']);
                 $field->doCreate();
                 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['id'], $field->getId());
                 // Check if this field was used as default order by, if so, update to new id
                 $table = ilDataCollectionCache::getTableCache($new_table_id);
                 if ($table && $table->getDefaultSortField() == $a_rec['id']) {
                     $table->setDefaultSortField($field->getId());
                     $table->doUpdate();
                 }
             }
             break;
         case 'il_dcl_record':
             $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
             if ($new_table_id) {
                 $record = new ilDataCollectionRecord();
                 $record->setTableId($new_table_id);
                 $datetime = new ilDateTime(time(), IL_CAL_UNIX);
                 $record->setCreateDate($datetime);
                 $record->setLastUpdate($datetime);
                 $record->setOwner($this->user->getId());
                 $record->setLastEditBy($this->user->getId());
                 $record->doCreate();
                 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['id'], $record->getId());
             }
             break;
         case 'il_dcl_view':
             $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
             if ($new_table_id) {
                 if ($a_rec['type'] == 0 && $a_rec['formtype'] == 0) {
                     // RecordViewViewDefinition: Create a new RecordViewViewdefinition. Note that the associated Page object is NOT created.
                     // Creation of the Page object is handled by the import of Services/COPage
                     $definition = new ilDataCollectionRecordViewViewdefinition();
                     $definition->setTableId($new_table_id);
                     $definition->create(true);
                     // DO not create DB entries for page object
                     // This mapping is needed for the import handled by Services/COPage
                     $a_mapping->addMapping('Services/COPage', 'pg', 'dclf:' . $a_rec['id'], 'dclf:' . $definition->getId());
                     $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['id'], $definition->getId());
                 } else {
                     // Other definitions - grab next ID from il_dcl_view
                     $view_id = $this->db->nextId("il_dcl_view");
                     $sql = "INSERT INTO il_dcl_view (id, table_id, type, formtype) VALUES (" . $this->db->quote($view_id, "integer") . ", " . $this->db->quote($new_table_id, "integer") . ", " . $this->db->quote($a_rec['type'], "integer") . ", " . $this->db->quote($a_rec['formtype'], "integer") . ")";
                     $this->db->manipulate($sql);
                     $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['id'], $view_id);
                 }
             }
             break;
         case 'il_dcl_viewdefinition':
             $new_view_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['view_id']);
             $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field']);
             $field = $new_field_id ? $new_field_id : $a_rec['field'];
             if ($new_view_id) {
                 $sql = 'INSERT INTO il_dcl_viewdefinition (view_id, field, field_order, is_set) VALUES (' . $this->db->quote($new_view_id, 'integer') . ', ' . $this->db->quote($field, 'text') . ', ' . $this->db->quote($a_rec['field_order'], 'integer') . ', ' . $this->db->quote($a_rec['is_set'], 'integer') . ')';
                 $this->db->manipulate($sql);
             }
             break;
         case 'il_dcl_field_prop':
             $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field_id']);
             if ($new_field_id) {
                 $prop = new ilDataCollectionFieldProp();
                 $prop->setFieldId($new_field_id);
                 $prop->setDatatypePropertyId($a_rec['datatype_prop_id']);
                 // For field references, we need to get the new field id of the referenced field
                 // If the field_id does not yet exist (e.g. referenced table not yet created), store temp info and fix before finishing import
                 $value = $a_rec['value'];
                 $refs = array(ilDataCollectionField::PROPERTYID_REFERENCE, ilDataCollectionField::PROPERTYID_N_REFERENCE);
                 $fix_refs = false;
                 if (in_array($prop->getDatatypePropertyId(), $refs)) {
                     $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['value']);
                     if ($new_field_id === false) {
                         $value = NULL;
                         $fix_refs = true;
                     }
                 }
                 $prop->setValue($value);
                 $prop->doCreate();
                 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_field_prop', $a_rec['id'], $prop->getId());
                 if ($fix_refs) {
                     $this->import_temp_refs_props[$prop->getId()] = $a_rec['value'];
                 }
             }
             break;
         case 'il_dcl_record_field':
             $record_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['record_id']);
             $field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field_id']);
             if ($record_id && $field_id) {
                 $record = ilDataCollectionCache::getRecordCache($record_id);
                 $field = ilDataCollectionCache::getFieldCache($field_id);
                 $record_field = new ilDataCollectionRecordField($record, $field);
                 // Created in constructor if not existing
                 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_record_field', $a_rec['id'], $record_field->getId());
                 $this->import_record_field_cache[$record_field->getId()] = $record_field;
             }
             break;
         case 'il_dcl_stloc1_value':
         case 'il_dcl_stloc2_value':
         case 'il_dcl_stloc3_value':
             $new_record_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record_field', $a_rec['record_field_id']);
             if ($new_record_field_id) {
                 /** @var ilDataCollectionRecordField $record_field */
                 $record_field = $this->import_record_field_cache[$new_record_field_id];
                 if (is_object($record_field)) {
                     // Need to rewrite internal references and lookup new objects if MOB or File
                     // For some fieldtypes it's better to reset the value, e.g. ILIAS_REF
                     switch ($record_field->getField()->getDatatypeId()) {
                         case ilDataCollectionDatatype::INPUTFORMAT_MOB:
                             // Check if we got a mapping from old object
                             $new_mob_id = $a_mapping->getMapping('Services/MediaObjects', 'mob', $a_rec['value']);
                             $value = $new_mob_id ? (int) $new_mob_id : NULL;
                             $this->import_temp_new_mob_ids[] = $new_mob_id;
                             break;
                         case ilDataCollectionDatatype::INPUTFORMAT_FILE:
                             $new_file_id = $a_mapping->getMapping('Modules/File', 'file', $a_rec['value']);
                             $value = $new_file_id ? (int) $new_file_id : NULL;
                             break;
                         case ilDataCollectionDatatype::INPUTFORMAT_REFERENCE:
                         case ilDataCollectioNDatatype::INPUTFORMAT_REFERENCELIST:
                             // If we are referencing to a record from a table that is not yet created, return value is always false because the record does exist neither
                             // Solution: Temporary store all references and fix them before finishing the import.
                             $new_record_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['value']);
                             if ($new_record_id === false) {
                                 $this->import_temp_refs[$new_record_field_id] = $a_rec['value'];
                             }
                             $value = $new_record_id ? (int) $new_record_id : NULL;
                             break;
                         case ilDataCollectionDatatype::INPUTFORMAT_ILIAS_REF:
                             $value = NULL;
                             break;
                         default:
                             $value = $a_rec['value'];
                             if ($a_entity == 'il_dcl_stloc3_value' && (is_null($value) || empty($value))) {
                                 $value = '0000-00-00 00:00:00';
                             }
                     }
                     $record_field->setValue($value, true);
                     $record_field->doUpdate();
                 }
             }
             break;
     }
 }