4 require_once
"Services/ADT/classes/class.ilADTFactory.php";
59 $this->
language = $DIC->language()->getLangKey();
60 $this->logger = $DIC->logger()->amet();
66 $this->
read($a_field_id);
83 $set =
$ilDB->query(
"SELECT field_type" .
84 " FROM adv_mdf_definition" .
85 " WHERE field_id = " .
$ilDB->quote($a_field_id,
"integer"));
86 $a_type =
$ilDB->fetchAssoc($set);
87 $a_type = $a_type[
"field_type"];
90 if (self::isValidType($a_type)) {
91 $class =
"ilAdvancedMDFieldDefinition" . self::getTypeString($a_type);
92 require_once
"Services/AdvancedMetaData/classes/Types/class." . $class .
".php";
93 return new $class($a_field_id,
$language);
104 public static function exists($a_field_id)
108 $ilDB = $DIC[
'ilDB'];
110 $set =
$ilDB->query(
"SELECT field_type" .
111 " FROM adv_mdf_definition" .
112 " WHERE field_id = " .
$ilDB->quote($a_field_id,
"integer"));
113 if (
$ilDB->fetchAssoc($set)) {
129 self::TYPE_TEXT =>
"Text",
130 self::TYPE_SELECT =>
"Select",
131 self::TYPE_DATE =>
"Date",
132 self::TYPE_DATETIME =>
"DateTime",
133 self::TYPE_FLOAT =>
"Float",
134 self::TYPE_LOCATION =>
"Location",
135 self::TYPE_INTEGER =>
"Integer",
136 self::TYPE_SELECT_MULTI =>
"SelectMulti" ,
137 self::TYPE_EXTERNAL_LINK =>
'ExternalLink',
138 self::TYPE_INTERNAL_LINK =>
'InternalLink',
139 self::TYPE_ADDRESS =>
"Address" 141 $map = array_flip($map);
142 if (array_key_exists($a_type, $map)) {
143 return self::getInstance(null, $map[$a_type]);
158 $ilDB = $DIC[
'ilDB'];
162 $query =
"SELECT * FROM adv_mdf_definition" .
163 " WHERE record_id = " .
$ilDB->quote($a_record_id,
"integer");
164 if ($a_only_searchable) {
165 $query .=
" AND searchable = " .
$ilDB->quote(1,
"integer");
167 $query .=
" ORDER BY position";
169 while ($row =
$ilDB->fetchAssoc($set)) {
170 $field = self::getInstance(null, $row[
"field_type"],
$language);
171 $field->import($row);
172 $defs[$row[
"field_id"]] = $field;
182 $ilDB = $DIC[
'ilDB'];
186 $query =
"SELECT amf.* FROM adv_md_record_objs aro" .
187 " JOIN adv_md_record amr ON aro.record_id = amr.record_id" .
188 " JOIN adv_mdf_definition amf ON aro.record_id = amf.record_id" .
189 " WHERE obj_type = " .
$ilDB->quote($a_obj_type,
'text');
190 if ((
bool) $a_active_only) {
191 $query .=
" AND active = " .
$ilDB->quote(1,
"integer");
193 $query .=
" ORDER BY aro.record_id,position";
196 $field = self::getInstance(null, $row[
"field_type"]);
197 $field->import($row);
198 $defs[$row[
"field_id"]] = $field;
213 $ilDB = $DIC[
'ilDB'];
215 $query =
"SELECT field_id, field_type FROM adv_mdf_definition" .
216 " WHERE import_id = " .
$ilDB->quote($a_import_id,
'text');
218 if (
$ilDB->numRows($set)) {
219 $row =
$ilDB->fetchAssoc($set);
220 return self::getInstance($row[
"field_id"], $row[
"field_type"]);
233 $ilDB = $DIC[
'ilDB'];
235 $field_ids = array();
237 $query =
"SELECT field_id FROM adv_md_record amr" .
238 " JOIN adv_mdf_definition amfd ON (amr.record_id = amfd.record_id)" .
239 " WHERE active = " .
$ilDB->quote(1,
"integer") .
240 " AND searchable = " .
$ilDB->quote(1,
"integer");
242 while ($row =
$ilDB->fetchAssoc($set)) {
243 $field_ids[] = $row[
"field_id"];
257 $group_def =
$factory->getDefinitionInstanceByType(
"Group");
258 foreach ($a_defs as $def) {
259 $group_def->addElement($def->getFieldId(), $def->getADTDefinition());
261 $group =
$factory->getInstanceByDefinition($group_def);
264 foreach ($group->getElements() as $element_id => $element) {
265 $a_defs[$element_id]->setADT($element);
300 self::TYPE_SELECT_MULTI,
301 self::TYPE_EXTERNAL_LINK,
302 self::TYPE_INTERNAL_LINK,
315 return in_array((
int) $a_type, self::getValidTypes());
323 abstract public function getType();
333 if (self::isValidType($a_type)) {
335 self::TYPE_TEXT =>
"Text",
336 self::TYPE_SELECT =>
"Select",
337 self::TYPE_DATE =>
"Date",
338 self::TYPE_DATETIME =>
"DateTime",
339 self::TYPE_FLOAT =>
"Float",
340 self::TYPE_LOCATION =>
"Location",
341 self::TYPE_INTEGER =>
"Integer",
342 self::TYPE_SELECT_MULTI =>
"SelectMulti" ,
343 self::TYPE_EXTERNAL_LINK =>
'ExternalLink',
344 self::TYPE_INTERNAL_LINK =>
'InternalLink',
345 self::TYPE_ADDRESS =>
"Address" 347 return $map[$a_type];
357 if (!strlen($language)) {
361 return strcmp($record->getDefaultLanguage(),
$language) === 0;
372 return "udf_type_" . strtolower(self::getTypeString($this->
getType()));
408 if (!$this->adt instanceof
ilADT) {
422 if (!$this->adt instanceof
ilADT) {
438 $this->field_id = (int) $a_id;
458 $this->record_id = (int) $a_id;
478 if ($a_id_string !== null) {
479 $a_id_string = trim($a_id_string);
481 $this->import_id = $a_id_string;
501 $this->position = (int) $a_pos;
521 if ($a_title !== null) {
522 $a_title = trim($a_title);
524 $this->title = $a_title;
544 if ($a_desc !== null) {
545 $a_desc = trim($a_desc);
547 $this->description = $a_desc;
591 $this->searchable = (bool) $a_status;
611 $this->required = (bool) $a_status;
703 $title->setRequired(
true);
715 $title->setDisabled(
true);
724 $translations->modifyTranslationInfoForDescription($this->
getFieldId(), $a_form, $desc,
$language);
734 $desc->setDisabled(
true);
745 $check->setDisabled(
true);
781 $is_translation = (($active_language !==
'') && ($active_language != $record->getDefaultLanguage()));
782 if (!$a_form->
getItemByPostVar(
"title")->getDisabled() && !$is_translation) {
785 if (!$a_form->
getItemByPostVar(
"description")->getDisabled() && !$is_translation) {
819 if ($a_form->
getInput(
"searchable")) {
821 $hidden->setValue(1);
842 $ilDB = $DIC[
'ilDB'];
844 $sql =
"SELECT max(position) pos" .
845 " FROM adv_mdf_definition" .
847 $set =
$ilDB->query($sql);
848 if (
$ilDB->numRows($set)) {
849 $pos =
$ilDB->fetchAssoc($set);
850 return (
int) $pos[
"pos"];
864 return 'il_' .
IL_INST_ID .
'_adv_md_field_' . $a_field_id;
875 "field_type" => array(
"integer", $this->
getType()),
876 "record_id" => array(
"integer", $this->
getRecordId()),
877 "import_id" => array(
"text", $this->
getImportId()),
878 "title" => array(
"text", $this->
getTitle()),
880 "position" => array(
"integer", $this->
getPosition()),
881 "searchable" => array(
"integer", $this->
isSearchable()),
882 "required" => array(
"integer", $this->
isRequired())
886 if (is_array($def)) {
887 $fields[
"field_values"] = array(
"text", serialize($def));
898 protected function import(array $a_data)
909 $field_values = unserialize($a_data[
'field_values']);
910 if ($a_data[
"field_values"] && is_array($field_values)) {
918 protected function read($a_field_id)
922 $ilDB = $DIC[
'ilDB'];
924 if (!(
int) $a_field_id) {
928 $sql =
"SELECT * FROM adv_mdf_definition" .
929 " WHERE field_id = " .
$ilDB->quote($a_field_id,
"integer");
930 $set =
$ilDB->query($sql);
931 if (
$ilDB->numRows($set)) {
932 $row =
$ilDB->fetchAssoc($set);
940 public function save($a_keep_pos =
false)
944 $ilDB = $DIC[
'ilDB'];
950 $next_id =
$ilDB->nextId(
"adv_mdf_definition");
963 $fields[
"field_id"] = array(
"integer", $next_id);
965 $ilDB->insert(
"adv_mdf_definition", $fields);
977 $ilDB = $DIC[
'ilDB'];
980 return $this->
save();
984 "adv_mdf_definition",
986 array(
"field_id" => array(
"integer", $this->
getFieldId()))
993 public function delete()
997 $ilDB = $DIC[
'ilDB'];
1004 include_once(
"Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php");
1007 $query =
"DELETE FROM adv_mdf_definition" .
1028 'searchable' => ($this->
isSearchable() ?
'Yes' :
'No'),
1029 'fieldType' => self::getTypeString($this->
getType())));
1036 foreach ($translations->getTranslations($this->getFieldId()) as $translation) {
1037 $a_writer->
xmlStartTag(
'FieldTranslation', [
'language' => $translation->getLangKey()]);
1038 $a_writer->
xmlElement(
'FieldTranslationTitle', [], (
string) $translation->getTitle());
1039 $a_writer->
xmlElement(
'FieldTranslationDescription',[], (
string) $translation->getDescription());
1040 $a_writer->
xmlEndTag(
'FieldTranslation');
1042 $a_writer->
xmlEndTag(
'FieldTranslations');
1162 $ilDB = $DIC[
'ilDB'];
1167 foreach ($a_records as $record) {
1168 if ($record[
"sub_type"] ==
"-") {
1169 $obj_ids[] = $record[
"obj_id"];
1173 $sql =
"SELECT obj_id,type" .
1174 " FROM object_data" .
1175 " WHERE " .
$ilDB->in(
"obj_id", $obj_ids,
"",
"integer") .
1176 " AND " .
$ilDB->in(
"type", $a_object_types,
"",
"text");
1177 $set =
$ilDB->query($sql);
1178 while ($row =
$ilDB->fetchAssoc($set)) {
1187 include_once(
'Services/ADT/classes/ActiveRecord/class.ilADTActiveRecordByType.php');
1192 $element_id =
"loc";
1198 if (
sizeof($objects)) {
1200 foreach ($objects as $item) {
1201 if ($item[
"obj_id"] == $a_obj_id &&
1202 $item[
"sub_type"] == $sub_obj_type) {
1203 $res[] = $item[
"sub_id"];
1226 include_once(
'Services/ADT/classes/ActiveRecord/class.ilADTActiveRecordByType.php');
1230 if (
sizeof($objects)) {
1266 $class = get_class($this);
1267 $obj =
new $class();
1268 $obj->setRecordId($a_new_record_id);
isSearchable()
Is searchable.
getDescription()
Get description.
setPosition($a_pos)
Set position.
parseSearchObjects(array $a_records, array $a_object_types)
Add object-data needed for global search to AMD search results.
__construct($a_field_id=null, string $language='')
Constructor.
toXML(ilXmlWriter $a_writer)
To Xml.
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
isFilterSupported()
Is search by filter supported.
const SUBACTION_FIELD_PROPERTIES
setSearchValueSerialized(ilADTSearchBridge $a_adt_search, $a_value)
Set value from search persistence.
save($a_keep_pos=false)
Create new field entry.
hasPermissions($a_context_type, $a_context_id, array $a_action_ids)
Check permissions.
getADTDefinition()
Get ADT definition instance.
setTitle($a_title)
Get title.
isRequired()
Is required field.
AMD field abstract base class.
importValueFromXML($a_cdata)
Import value from xml.
setImportId($a_id_string)
Set import id.
getADT()
Get ADT instance.
setValue($a_value)
Set Value.
searchSubObjects(ilADTSearchBridge $a_adt_search, $a_obj_id, $sub_obj_type)
static getADTGroupForDefinitions(array $a_defs)
Init ADTGroup for definitions.
setSerializedValue($a_value)
Set current value(s) in serialized form (for easy persisting)
static _deleteByFieldId($a_field_id, ilADT $a_adt)
Delete values by field_id.
getImportId()
Get import id.
const ACTION_FIELD_EDIT_PROPERTY
update()
Update field entry.
importFromECS($a_ecs_type, $a_value, $a_sub_id)
Import meta data from ECS.
static getInstance()
Get singleton.
static getInstanceByImportId($a_import_id)
Get definition instance by import id.
xmlEndTag($tag)
Writes an endtag.
static getTypeString($a_type)
Get type string.
const SUBACTION_FIELD_SEARCHABLE
getDBProperties()
Get all definition properties for DB.
hasPermission($a_context_type, $a_context_id, $a_action_id, $a_action_sub_id=null)
Check permission.
prepareCustomDefinitionFormConfirmation(ilPropertyFormGUI $a_form)
setDescription($a_desc)
Set description.
getSerializedValue()
Get current value(s) in serialized form (for easy persisting)
importCustomDefinitionFormPostValues(ilPropertyFormGUI $a_form, string $language='')
Import custom post values from definition form.
static exists($a_field_id)
Check if field exists.
static find($a_table, $a_type, $a_field_id, $a_condition, $a_additional_fields=null)
Find entries.
getSearchQueryParserValue(ilADTSearchBridge $a_adt_search)
Get value for search query parser.
static _getInstanceByRecordId($a_record_id)
Get instance by record id.
Advanced metadata permission helper.
getSearchValueSerialized(ilADTSearchBridge $a_adt_search)
Get value for search persistence.
foreach($_POST as $key=> $value) $res
const SUBACTION_FIELD_TITLE
static getSearchableDefinitionIds()
Get searchable definition ids (performance is key)
getFieldDefinitionForTableGUI(string $content_language)
Parse properties for table gui.
static getInstancesByObjType($a_obj_type, $a_active_only=true)
setSearchable($a_status)
Toggle searchable.
setRequired($a_status)
Toggle required.
importDefinitionFormPostValuesNeedsConfirmation()
generateImportId($a_field_id)
Generate unique record id.
getLastPosition()
Get last position of record.
importXMLProperty($a_key, $a_value)
Import property from XML.
prepareElementForSearch(ilADTSearchBridge $a_bridge)
Prepare search form elements.
static getValidTypes()
Get all valid types.
static getInstanceByRecordId(int $record_id)
prepareElementForEditor(ilADTFormBridge $a_bridge)
Prepare editor form elements.
getLuceneSearchString($a_value)
Get search string in lucene syntax.
ADT search bridge base class.
getFieldDefinition()
Get (type-specific) field definition.
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
setADT(ilADT $a_adt)
Set ADT instance.
addPropertiesToXML(ilXmlWriter $a_writer)
Add (type-specific) properties to xml export.
importDefinitionFormPostValues(ilPropertyFormGUI $a_form, ilAdvancedMDPermissionHelper $a_permissions, string $active_language)
Import post values from definition form.
getValueForXML(ilADT $element)
Parse ADT value for xml (export)
useDefaultLanguageMode(string $language)
Check if default language mode has to be used: no language given or language equals default language...
read($a_field_id)
Read field definition.
_clone($a_new_record_id)
Clone field definition.
importFieldDefinition(array $a_def)
Import (type-specific) field definition from DB.
This class represents a text area property in a property form.
getPosition()
Get position.
static getInstance($a_field_id, $a_type=null, string $language='')
Get definition instance by type.
const SUBACTION_FIELD_DESCRIPTION
searchObjects(ilADTSearchBridge $a_adt_search, ilQueryParser $a_parser, array $a_object_types, $a_locate, $a_search_type)
Search objects.
initADTDefinition()
Init adt instance.
getTypeTitle()
Get type title (lang id)
addToFieldDefinitionForm(ilPropertyFormGUI $a_form, ilAdvancedMDPermissionHelper $a_permissions, string $language='')
Add input elements to definition form.
ADT definition base class.
isSearchSupported()
Is search supported at all.
getSQLCondition($a_element_id)
Get SQL condition for current value(s)
getRecordId()
Get record id.
static getInstancesByRecordId($a_record_id, $a_only_searchable=false, string $language='')
Get definitions by record id.
getFieldId()
Get field_id.
addCustomFieldToDefinitionForm(ilPropertyFormGUI $a_form, $a_disabled=false, string $language='')
Add custom input elements to definition form.
setRecordId($a_id)
Set record id.
getComplexOptionsOverview($a_parent_gui, string $parent_cmd)
static getInstanceByTypeString($a_type)
Get instance by type string (used by import)
static isValidType($a_type)
Is given type valid.
prepareDefinitionFormConfirmation(ilPropertyFormGUI $a_form)
setFieldId($a_id)
Set field_id.