public function update() { if (sizeof($this->confirmed_objects)) { // we need the "old" options for the search $def = $this->getADTDefinition(); $def = clone $def; $def->setOptions(array_combine($this->old_options, $this->old_options)); $search = ilADTFactory::getInstance()->getSearchBridgeForDefinitionInstance($def, false, false); ilADTFactory::initActiveRecordByType(); foreach ($this->confirmed_objects as $old_option => $item_ids) { // get complete old values $old_values = array(); foreach ($this->findBySingleValue($search, $old_option) as $item) { $old_values[$item[0] . "_" . $item[1] . "_" . $item[2]] = $item[3]; } foreach ($item_ids as $item => $new_option) { $parts = explode("_", $item); $obj_id = $parts[0]; $sub_type = $parts[1]; $sub_id = $parts[2]; if (!$new_option) { // remove existing value $primary = array("obj_id" => array("integer", $obj_id), "sub_type" => array("text", $sub_type), "sub_id" => array("integer", $sub_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::deleteByPrimary("adv_md_values", $primary, "MultiEnum"); } else { // update existing value (with changed option) if (isset($old_values[$item])) { // find changed option in old value $old_value = explode(ilADTMultiEnumDBBridge::SEPARATOR, $old_values[$item]); // remove separators array_shift($old_value); array_pop($old_value); $old_idx = array_keys($old_value, $old_option); if (sizeof($old_idx)) { // switch option $old_idx = array_pop($old_idx); $old_value[$old_idx] = $new_option; $new_value = array_unique($old_value); // add separators $new_value = ilADTMultiEnumDBBridge::SEPARATOR . implode(ilADTMultiEnumDBBridge::SEPARATOR, $new_value) . ilADTMultiEnumDBBridge::SEPARATOR; $primary = array("obj_id" => array("integer", $obj_id), "sub_type" => array("text", $sub_type), "sub_id" => array("integer", $sub_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::writeByPrimary("adv_md_values", $primary, "MultiEnum", $new_value); } } } if ($sub_type == "wpg") { // #15763 - adapt advmd page lists include_once "Modules/Wiki/classes/class.ilPCAMDPageList.php"; ilPCAMDPageList::migrateField($obj_id, $this->getFieldId(), $old_option, $new_option, true); } } } $this->confirmed_objects = array(); } parent::update(); }
/** * Find all entries for object (regardless of sub-type/sub-id) * * @param int $a_obj_id * @return array */ public static function findByObjectId($a_obj_id) { include_once "Services/ADT/classes/class.ilADTFactory.php"; ilADTFactory::initActiveRecordByType(); return ilADTActiveRecordByType::readByPrimary("adv_md_values", array("obj_id" => array("integer", $a_obj_id))); }
public function update() { parent::update(); if (sizeof($this->confirmed_objects)) { ilADTFactory::initActiveRecordByType(); foreach ($this->confirmed_objects as $old_option => $item_ids) { foreach ($item_ids as $item => $new_option) { $item = explode("_", $item); $obj_id = $item[0]; $sub_type = $item[1]; $sub_id = $item[2]; if (!$new_option) { // remove existing value $primary = array("obj_id" => array("integer", $obj_id), "sub_type" => array("text", $sub_type), "sub_id" => array("integer", $sub_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::deleteByPrimary("adv_md_values", $primary, "Enum"); } else { // update existing value $primary = array("obj_id" => array("integer", $obj_id), "sub_type" => array("text", $sub_type), "sub_id" => array("integer", $sub_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::writeByPrimary("adv_md_values", $primary, "Enum", $new_option); } if ($sub_type == "wpg") { // #15763 - adapt advmd page lists include_once "Modules/Wiki/classes/class.ilPCAMDPageList.php"; ilPCAMDPageList::migrateField($obj_id, $this->getFieldId(), $old_option, $new_option); } } } } }
public function update() { parent::update(); if (sizeof($this->confirmed_objects)) { ilADTFactory::initActiveRecordByType(); foreach ($this->confirmed_objects as $old_option => $obj_ids) { foreach ($obj_ids as $obj_id => $new_option) { if (!$new_option) { // remove existing value $primary = array("obj_id" => array("integer", $obj_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::deleteByPrimary("adv_md_values", $primary, "Enum"); } else { // update existing value $primary = array("obj_id" => array("integer", $obj_id), "field_id" => array("integer", $this->getFieldId())); ilADTActiveRecordByType::writeByPrimary("adv_md_values", $primary, "Enum", $new_option); } } } } }