19 declare(strict_types=1);
34 protected DatabaseWrapper
$db;
41 SlotHandler $slot_handler
59 throw new \ilMDVocabulariesException(
'Source cannot be empty.');
62 throw new \ilMDVocabulariesException(
63 'Slot ' . $slot->value .
' is not available for controlled vocabularies.' 67 $id = $this->db->nextId(
'il_md_vocab_contr');
92 'il_md_vocab_contr_vals',
108 $result = $this->db->query(
109 'SELECT value FROM il_md_vocab_contr_vals JOIN il_md_vocab_contr ON id = vocab_id 110 WHERE slot = ' . $this->db->quoteAsString($slot->value) .
' AND ' .
111 $this->db->in(
'value', ...$values)
114 foreach ($result as $row) {
115 yield (
string) $row[
'value'];
121 $result = $this->db->query(
122 'SELECT id, slot, source, active, custom_input FROM il_md_vocab_contr 123 WHERE id = ' . $this->db->quoteAsInteger($vocab_id)
126 foreach ($result as $row) {
142 $result = $this->db->query(
143 'SELECT COUNT(*) AS count FROM il_md_vocab_contr WHERE active = 1 AND slot = ' .
144 $this->db->quoteAsString($slot->value)
147 foreach ($result as $row) {
148 return (
int) $row[
'count'];
175 $active_where =
'active = 1 AND ';
178 $result = $this->db->query(
179 'SELECT value, label FROM il_md_vocab_contr_vals JOIN il_md_vocab_contr ON id = vocab_id 180 WHERE slot = ' . $this->db->quoteAsString($slot->value) .
' AND ' . $active_where .
181 $this->db->in(
'value', ...$values)
184 $labels_by_value = [];
185 foreach ($result as $row) {
186 $labels_by_value[(string) $row[
'value']] = (
string) $row[
'label'];
188 foreach ($values as $value) {
189 if (!array_key_exists($value, $labels_by_value)) {
194 $labels_by_value[$value]
223 $this->db->manipulate(
224 'DELETE FROM il_md_vocab_contr_vals WHERE vocab_id = ' .
225 $this->db->quoteAsString($vocab_id)
227 $this->db->manipulate(
228 'DELETE FROM il_md_vocab_contr WHERE id = ' .
229 $this->db->quoteAsString($vocab_id)
239 foreach ($slots as $slot) {
243 $slot_values[] = $slot->value;
248 $where_active =
' AND active = 1';
250 $result = $this->db->query(
251 'SELECT id, slot, source, active, custom_input FROM il_md_vocab_contr 252 WHERE ' . $this->db->in(
'slot', ...$slot_values) .
256 foreach ($result as $row) {
264 $id = (string) $row[
'id'];
265 $source = (string) $row[
'source'];
268 if ($this->slot_handler->dataTypeForSlot($slot) === DataType::VOCAB_VALUE) {
269 $builder = $this->
factory->controlledVocabValue($slot,
$id, $source, ...$values);
271 $builder = $this->
factory->controlledString($slot,
$id, $source, ...$values);
274 return $builder->withIsDeactivated(!$row[
'active'])
275 ->withDisallowsCustomInputs(!$row[
'custom_input'])
284 $result = $this->db->query(
285 'SELECT value FROM il_md_vocab_contr_vals WHERE vocab_id = ' .
286 $this->db->quoteAsInteger($vocab_id) .
" ORDER BY COALESCE(NULLIF(label,''), value) ASC" 288 foreach ($result as $row) {
289 yield (
string) $row[
'value'];
296 SlotIdentifier::GENERAL_STRUCTURE,
297 SlotIdentifier::GENERAL_AGGREGATION_LEVEL,
298 SlotIdentifier::GENERAL_COVERAGE,
299 SlotIdentifier::GENERAL_IDENTIFIER_CATALOG,
300 SlotIdentifier::LIFECYCLE_STATUS,
301 SlotIdentifier::LIFECYCLE_CONTRIBUTE_PUBLISHER,
302 SlotIdentifier::METAMETADATA_IDENTIFIER_CATALOG,
303 SlotIdentifier::METAMETADATA_SCHEMA,
304 SlotIdentifier::TECHNICAL_REQUIREMENT_BROWSER,
305 SlotIdentifier::TECHNICAL_REQUIREMENT_OS,
306 SlotIdentifier::TECHNICAL_OTHER_PLATFORM_REQUIREMENTS,
307 SlotIdentifier::TECHNICAL_FORMAT,
308 SlotIdentifier::EDUCATIONAL_INTERACTIVITY_TYPE,
309 SlotIdentifier::EDUCATIONAL_LEARNING_RESOURCE_TYPE,
310 SlotIdentifier::EDUCATIONAL_INTERACTIVITY_LEVEL,
311 SlotIdentifier::EDUCATIONAL_SEMANTIC_DENSITY,
312 SlotIdentifier::EDCUCATIONAL_INTENDED_END_USER_ROLE,
313 SlotIdentifier::EDUCATIONAL_CONTEXT,
314 SlotIdentifier::EDUCATIONAL_DIFFICULTY,
315 SlotIdentifier::EDUCATIONAL_TYPICAL_AGE_RANGE,
316 SlotIdentifier::RIGHTS_COST,
317 SlotIdentifier::RIGHTS_CP_AND_OTHER_RESTRICTIONS,
318 SlotIdentifier::RELATION_KIND,
319 SlotIdentifier::RELATION_RESOURCE_IDENTIFIER_CATALOG,
320 SlotIdentifier::CLASSIFICATION_PURPOSE,
321 SlotIdentifier::CLASSIFICATION_KEYWORD,
322 SlotIdentifier::CLASSIFICATION_TAXPATH_SOURCE,
326 return in_array($slot, $valid_slots,
true);
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins