ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
ilObjQuestionPool Class Reference
+ Inheritance diagram for ilObjQuestionPool:
+ Collaboration diagram for ilObjQuestionPool:

Public Member Functions

 __construct (int $a_id=0, bool $a_call_by_reference=true)
 
 create ($a_upload=false)
 create questionpool object More...
 
 createReference ()
 Creates a database reference id for the object (saves the object to the database and creates a reference id in the database) More...
 
 update ()
 update object data More...
 
 read ($a_force_db=false)
 read object data from db into object More...
 
 delete ()
 delete object and all related data More...
 
 deleteQuestionpool ()
 
 deleteQuestion (int $question_id)
 
 loadFromDb ()
 
 saveToDb ()
 
 getQuestiontype ($question_id)
 
 isInUse (int $question_id)
 
 createQuestion (string $question_type, int $question_id=-1)
 
 duplicateQuestion (int $question_id)
 
 copyQuestion (int $question_id, int $questionpool_to)
 
 appendCounterToQuestionTitleIfNecessary (string $title)
 
 getPrintviewQuestions ()
 
 objectToXmlWriter (ilXmlWriter &$a_xml_writer, $a_inst, $a_target_dir, &$expLog, $questions)
 export pages of test to xml (see ilias_co.dtd) More...
 
 exportTitleAndDescription (ilXmlWriter &$a_xml_writer)
 
 modifyExportIdentifier ($a_tag, $a_param, $a_value)
 
 exportXMLPageObjects (&$a_xml_writer, $a_inst, &$expLog, $questions)
 export page objects to xml (see ilias_co.dtd) More...
 
 exportXMLMediaObjects (&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
 
 exportFileItems ($target_dir, &$expLog)
 export files of file itmes More...
 
 createExportDirectory ()
 creates data directory for export files (data_dir/qpl_data/qpl_<id>/export, depending on data directory that is set in ILIAS setup/ini) More...
 
 getExportDirectory ($type='')
 get export directory of questionpool More...
 
getAllQuestions ()
 Retrieve an array containing all question ids of the questionpool. More...
 
getAllQuestionIds ()
 
 checkQuestionParent (int $question_id)
 
 getImportMapping ()
 get array of (two) new created questions for import id More...
 
 questionsToXML ($questions)
 Returns a QTI xml representation of a list of questions. More...
 
 pasteFromClipboard ()
 Copies/Moves a question from the clipboard. More...
 
 copyToClipboard ($question_id)
 Copies a question to the clipboard. More...
 
 moveToClipboard (int $question_id)
 Moves a question to the clipboard. More...
 
 cleanupClipboard (int $deleted_question_id)
 
 getQuestionDetails ($question_ids)
 Returns an array containing the qpl_question and qpl_qst_type fields for an array of question ids. More...
 
 getDeleteableQuestionDetails ($question_ids)
 Returns an array containing the qpl_question and qpl_qst_type fields of deleteable questions for an array of question ids. More...
 
 getQplQuestions ()
 
 cloneObject (int $target_id, int $copy_id=0, bool $omit_tree=false)
 Creates a 1:1 copy of the object and places the copy in a given repository. More...
 
 getQuestionTypes ($all_tags=false, $fixOrder=false, $withDeprecatedTypes=true)
 
 getQuestionList ()
 
 isPluginActive ($questionType)
 Checks wheather or not a question plugin with a given name is active. More...
 
 purgeQuestions ()
 
 getTaxonomyIds ()
 get ids of all taxonomies corresponding to current pool More...
 
 isSkillServiceEnabled ()
 
 setSkillServiceEnabled (bool $skill_service_enabled)
 
 fromXML (?string $xml_file)
 
- Public Member Functions inherited from ilObject
 getObjectProperties ()
 
 flushObjectProperties ()
 
 withReferences ()
 determines whether objects are referenced or not (got ref ids or not) More...
 
 processAutoRating ()
 
 read ()
 
 getId ()
 
 setId (int $id)
 
 setRefId (int $ref_id)
 
 getRefId ()
 
 getType ()
 
 setType (string $type)
 
 getPresentationTitle ()
 get presentation title Normally same as title Overwritten for sessions More...
 
 getTitle ()
 
 getUntranslatedTitle ()
 Get untranslated object title WebDAV needs to access the untranslated title of an object. More...
 
 setTitle (string $title)
 
 getDescription ()
 
 setDescription (string $description)
 
 getLongDescription ()
 get object long description (stored in object_description) More...
 
 getImportId ()
 
 setImportId (string $import_id)
 
 setOfflineStatus (bool $status)
 
 getOfflineStatus ()
 
 supportsOfflineHandling ()
 
 getOwner ()
 
 getOwnerName ()
 get full name of object owner More...
 
 setOwner (int $usr_id)
 
 getCreateDate ()
 Get create date in YYYY-MM-DD HH-MM-SS format. More...
 
 getLastUpdateDate ()
 Get last update date in YYYY-MM-DD HH-MM-SS format. More...
 
 create ()
 note: title, description and type should be set when this function is called More...
 
 update ()
 
 MDUpdateListener (string $element)
 Metadata update listener. More...
 
 createMetaData ()
 
 updateMetaData ()
 
 deleteMetaData ()
 
 updateOwner ()
 update owner of object in db More...
 
 putInTree (int $parent_ref_id)
 maybe this method should be in tree object!? More...
 
 setPermissions (int $parent_ref_id)
 
 setParentRolePermissions (int $parent_ref_id)
 Initialize the permissions of parent roles (local roles of categories, global roles...) This method is overwritten in e.g. More...
 
 createReference ()
 creates reference for object More...
 
 countReferences ()
 
 delete ()
 delete object or referenced object (in the case of a referenced object, object data is only deleted if last reference is deleted) This function removes an object entirely from system!! More...
 
 initDefaultRoles ()
 init default roles settings Purpose of this function is to create a local role folder and local roles, that are needed depending on the object type. More...
 
 applyDidacticTemplate (int $tpl_id)
 
 getXMLZip ()
 
 getHTMLDirectory ()
 
 appendCopyInfo (int $target_id, int $copy_id, int $new_obj_id)
 Prepend Copy info if object with same name exists in that container. More...
 
 cloneDependencies (int $target_id, int $copy_id)
 Clone object dependencies. More...
 
 cloneMetaData (ilObject $target_obj)
 Copy meta data. More...
 
 selfOrParentWithRatingEnabled ()
 
 getPossibleSubObjects (bool $filter=true)
 get all possible sub objects of this type the object can decide which types of sub objects are possible jut in time overwrite if the decision distinguish from standard model More...
 

Static Public Member Functions

static _hasEqualPoints ($a_obj_id, $is_reference=false)
 Checks a question pool for questions with the same maximum points. More...
 
static _isWriteable ($object_id, $user_id)
 Returns true, if the question pool is writeable by a given user. More...
 
static _getAvailableQuestionpools (bool $use_object_id=false, bool $equal_points=false, bool $could_be_offline=false, bool $showPath=false, bool $with_questioncount=false, string $permission='read', int $usr_id=0)
 Returns the available question pools for the active user. More...
 
static _getQuestionTypes ($all_tags=false, $fixOrder=false, $withDeprecatedTypes=true)
 
static getQuestionTypeByTypeId ($type_id)
 
static getQuestionTypeTranslations ()
 
static & _getSelfAssessmentQuestionTypes ($all_tags=false)
 
static _updateQuestionCount (int $object_id)
 
static isSkillManagementGloballyActivated ()
 
- Static Public Member Functions inherited from ilObject
static _lookupObjIdByImportId (string $import_id)
 Get (latest) object id for an import id. More...
 
static _lookupImportId (int $obj_id)
 
static _lookupOwnerName (int $owner_id)
 Lookup owner name for owner id. More...
 
static _getIdForImportId (string $import_id)
 
static _getAllReferences (int $id)
 get all reference ids for object ID More...
 
static _lookupTitle (int $obj_id)
 
static lookupOfflineStatus (int $obj_id)
 Lookup offline status using objectDataCache. More...
 
static _lookupOwner (int $obj_id)
 Lookup owner user ID for object ID. More...
 
static _getIdsForTitle (string $title, string $type='', bool $partial_match=false)
 
static _lookupDescription (int $obj_id)
 
static _lookupLastUpdate (int $obj_id, bool $formatted=false)
 
static _getLastUpdateOfObjects (array $obj_ids)
 
static _lookupObjId (int $ref_id)
 
static _setDeletedDate (int $ref_id, int $deleted_by)
 
static setDeletedDates (array $ref_ids, int $user_id)
 
static _resetDeletedDate (int $ref_id)
 
static _lookupDeletedDate (int $ref_id)
 
static _writeTitle (int $obj_id, string $title)
 write title to db (static) More...
 
static _writeDescription (int $obj_id, string $desc)
 write description to db (static) More...
 
static _writeImportId (int $obj_id, string $import_id)
 write import id to db (static) More...
 
static _lookupType (int $id, bool $reference=false)
 
static _isInTrash (int $ref_id)
 
static _hasUntrashedReference (int $obj_id)
 checks whether an object has at least one reference that is not in trash More...
 
static _lookupObjectId (int $ref_id)
 
static _getObjectsDataForType (string $type, bool $omit_trash=false)
 get all objects of a certain type More...
 
static _exists (int $id, bool $reference=false, ?string $type=null)
 checks if an object exists in object_data More...
 
static _getObjectsByType (string $obj_type="", ?int $owner=null)
 
static _prepareCloneSelection (array $ref_ids, string $new_type, bool $show_path=true)
 Prepare copy wizard object selection. More...
 
static getIconForType (string $type)
 
static _getIcon (int $obj_id=0, string $size="big", string $type="", bool $offline=false)
 Get icon for repository item. More...
 
static collectDeletionDependencies (array &$deps, int $ref_id, int $obj_id, string $type, int $depth=0)
 Collect deletion dependencies. More...
 
static getDeletionDependencies (int $obj_id)
 Get deletion dependencies. More...
 
static getLongDescriptions (array $obj_ids)
 
static getAllOwnedRepositoryObjects (int $user_id)
 
static fixMissingTitles ($type, array &$obj_title_map)
 Try to fix missing object titles. More...
 
static _lookupCreationDate (int $obj_id)
 
static _getObjectTypeIdByTitle (string $type, ?\ilDBInterface $ilDB=null)
 

Protected Member Functions

 populateQuestionSkillAssignmentsXml (ilXmlWriter &$a_xml_writer, $questions)
 
- Protected Member Functions inherited from ilObject
 doMDUpdateListener (string $a_element)
 
 beforeMDUpdateListener (string $a_element)
 
 doCreateMetaData ()
 
 beforeCreateMetaData ()
 
 doUpdateMetaData ()
 
 beforeUpdateMetaData ()
 
 doDeleteMetaData ()
 
 beforeDeleteMetaData ()
 
 handleAutoRating ()
 
 hasAutoRating ()
 

Static Protected Member Functions

static _getQuestionCount (int $pool_id)
 

Private Member Functions

 exportXMLSettings ($xmlWriter)
 

Private Attributes

ilComponentRepository $component_repository
 
ilBenchmark $benchmark
 
array $mob_ids
 
array $file_ids
 
bool $skill_service_enabled
 
GeneralQuestionPropertiesRepository $questionrepository
 

Static Private Attributes

static $isSkillManagementGloballyActivated = null
 

Additional Inherited Members

- Data Fields inherited from ilObject
const TITLE_LENGTH = 255
 
const DESC_LENGTH = 128
 
const LONG_DESC_LENGTH = 4000
 
const TABLE_OBJECT_DATA = "object_data"
 
array $objectList
 
string $untranslatedTitle
 
- Protected Attributes inherited from ilObject
ilLogger $obj_log
 
ILIAS $ilias
 
ilObjectDefinition $obj_definition
 
ilDBInterface $db
 
ilLogger $log
 
ilErrorHandling $error
 
ilTree $tree
 
ilAppEventHandler $app_event_handler
 
ilRbacAdmin $rbac_admin
 
ilRbacReview $rbac_review
 
ilObjUser $user
 
ilLanguage $lng
 
LOMServices $lom_services
 
bool $call_by_reference
 
int $max_title = self::TITLE_LENGTH
 
int $max_desc = self::DESC_LENGTH
 
bool $add_dots = true
 
int $ref_id = null
 
string $type = ""
 
string $title = ""
 
string $desc = ""
 
string $long_desc = ""
 
int $owner = 0
 
string $create_date = ""
 
string $last_update = ""
 
string $import_id = ""
 
bool $register = false
 

Detailed Description

Definition at line 33 of file class.ilObjQuestionPool.php.

Constructor & Destructor Documentation

◆ __construct()

ilObjQuestionPool::__construct ( int  $a_id = 0,
bool  $a_call_by_reference = true 
)

Definition at line 43 of file class.ilObjQuestionPool.php.

44 {
45 global $DIC;
46 $this->component_repository = $DIC['component.repository'];
47 $this->benchmark = $DIC['ilBench'];
48
49 $local_dic = QuestionPoolDIC::dic();
50 $this->questionrepository = $local_dic['question.general_properties.repository'];
51
52 $this->type = 'qpl';
53
54 parent::__construct((int) $a_id, $a_call_by_reference);
55
56 $this->skill_service_enabled = false;
57 }
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26

References $DIC, and ILIAS\GlobalScreen\Provider\__construct().

+ Here is the call graph for this function:

Member Function Documentation

◆ _getAvailableQuestionpools()

static ilObjQuestionPool::_getAvailableQuestionpools ( bool  $use_object_id = false,
bool  $equal_points = false,
bool  $could_be_offline = false,
bool  $showPath = false,
bool  $with_questioncount = false,
string  $permission = 'read',
int  $usr_id = 0 
)
static

Returns the available question pools for the active user.

Returns
array The available question pools @access public

Definition at line 919 of file class.ilObjQuestionPool.php.

927 : array {
928 global $DIC;
929 $ilUser = $DIC['ilUser'];
930 $ilDB = $DIC['ilDB'];
931 $lng = $DIC['lng'];
932
933 $result_array = [];
934 $qpls = ilUtil::_getObjectsByOperations('qpl', $permission, $usr_id > 0 ? $usr_id : $ilUser->getId(), -1);
935 $obj_ids = [];
936 foreach ($qpls as $ref_id) {
938 $obj_ids[$ref_id] = $obj_id;
939 }
940 $titles = ilObject::_prepareCloneSelection($qpls, 'qpl');
941 if (count($obj_ids)) {
942 $in = $ilDB->in('object_data.obj_id', $obj_ids, false, 'integer');
943 if ($could_be_offline) {
944 $result = $ilDB->query(
945 'SELECT qpl_questionpool.*, object_data.title FROM qpl_questionpool, object_data WHERE ' .
946 'qpl_questionpool.obj_fi = object_data.obj_id AND ' . $in . ' ORDER BY object_data.title'
947 );
948 } else {
949 $result = $ilDB->queryF(
950 'SELECT qpl_questionpool.*, object_data.title FROM qpl_questionpool, object_data WHERE ' .
951 'qpl_questionpool.obj_fi = object_data.obj_id AND ' . $in . ' AND object_data.offline = %s ' .
952 'ORDER BY object_data.title',
953 ['text'],
954 [0]
955 );
956 }
957 while ($row = $ilDB->fetchAssoc($result)) {
958 $add = true;
959 if ($equal_points !== false) {
960 if (!ilObjQuestionPool::_hasEqualPoints($row['obj_fi'])) {
961 $add = false;
962 }
963 }
964 if ($add) {
965 $ref_id = array_search($row['obj_fi'], $obj_ids);
966 $title = (($showPath) ? $titles[$ref_id] : $row['title']);
967 if ($with_questioncount) {
968 $title .= ' [' . $row['questioncount'] . ' ' . ($row['questioncount'] == 1 ? $lng->txt(
969 'ass_question'
970 ) : $lng->txt('assQuestions')) . ']';
971 }
972
973 if ($use_object_id) {
974 $result_array[$row['obj_fi']] = [
975 'qpl_id' => $row['obj_fi'],
976 'qpl_title' => $row['title'],
977 'title' => $title,
978 'count' => $row['questioncount']
979 ];
980 } else {
981 $result_array[$ref_id] = [
982 'qpl_id' => $row['obj_fi'],
983 'qpl_title' => $row['title'],
984 'title' => $title,
985 'count' => $row['questioncount']
986 ];
987 }
988 }
989 }
990 }
991 return $result_array;
992 }
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
static _hasEqualPoints($a_obj_id, $is_reference=false)
Checks a question pool for questions with the same maximum points.
string $title
ilLanguage $lng
static _prepareCloneSelection(array $ref_ids, string $new_type, bool $show_path=true)
Prepare copy wizard object selection.
static _lookupObjId(int $ref_id)
static _getObjectsByOperations( $a_obj_type, string $a_operation, int $a_usr_id=0, int $limit=0)
Get all objects of a specific type and check access This function is not recursive,...

Referenced by ilObjTestGUI\buildInputPoolSelection(), ilObjTest\getAvailableQuestions(), and ilTestQuestionBrowserTableGUI\getQuestionParentObjIds().

+ Here is the caller graph for this function:

◆ _getQuestionCount()

static ilObjQuestionPool::_getQuestionCount ( int  $pool_id)
staticprotected

Definition at line 639 of file class.ilObjQuestionPool.php.

639 : int
640 {
641 global $DIC;
642 $ilDB = $DIC['ilDB'];
643 $result = $ilDB->queryF(
644 'SELECT COUNT(question_id) question_count FROM qpl_questions WHERE obj_fi = %s AND qpl_questions.tstamp > 0 AND original_id IS NULL AND complete = %s',
645 ['integer', 'text'],
646 [$pool_id, 1]
647 );
648 $row = $ilDB->fetchAssoc($result);
649 return $row['question_count'];
650 }

References $DIC, and $ilDB.

Referenced by _updateQuestionCount().

+ Here is the caller graph for this function:

◆ _getQuestionTypes()

static ilObjQuestionPool::_getQuestionTypes (   $all_tags = false,
  $fixOrder = false,
  $withDeprecatedTypes = true 
)
static

Definition at line 1051 of file class.ilObjQuestionPool.php.

1051 : array
1052 {
1053 global $DIC;
1054 $ilDB = $DIC['ilDB'];
1055 $lng = $DIC['lng'];
1056 $component_factory = $DIC['component.factory'];
1057 $disabled_question_types = QuestionPoolDIC::dic()['global_test_settings']->getDisabledQuestionTypes();
1058
1059 $lng->loadLanguageModule('assessment');
1060 $result = $ilDB->query('SELECT * FROM qpl_qst_type');
1061 $types = [];
1062 while ($row = $ilDB->fetchAssoc($result)) {
1063 if ($all_tags || (!in_array($row['question_type_id'], $disabled_question_types))) {
1064 if ($row['plugin'] == 0) {
1065 $types[$lng->txt($row['type_tag'])] = $row;
1066 } else {
1067 foreach ($component_factory->getActivePluginsInSlot('qst') as $pl) {
1068 if (strcmp($pl->getQuestionType(), $row['type_tag']) == 0) {
1069 $types[$pl->getQuestionTypeTranslation()] = $row;
1070 }
1071 }
1072 }
1073 }
1074 }
1075
1077 $orderer = new ilAssQuestionTypeOrderer($types, $orderMode);
1078 $types = $orderer->getOrderedTypes($withDeprecatedTypes);
1079
1080 return $types;
1081 }
const ORDER_MODE_FIX
order mode with fixed priority for ordering
const ORDER_MODE_ALPHA
order mode that orders by alphanumerical priority
loadLanguageModule(string $a_module)
Load language module.

References $DIC, $ilDB, $lng, ilAssQuestionTypeOrderer\ORDER_MODE_ALPHA, and ilAssQuestionTypeOrderer\ORDER_MODE_FIX.

Referenced by _getSelfAssessmentQuestionTypes(), ilTestRandomQuestionSetPoolDefinitionFormGUI\build(), ILIAS\TestQuestionPool\Questions\Presentation\QuestionTable\getFilter(), ilTestRandomQuestionSetSourcePoolDefinition\getTypeFilterAsTypeTags(), ilQuestionBrowserTableGUI\initFilter(), ilTestQuestionFilterLabelTranslator\loadTypeLabels(), ILIAS\Test\Questions\Presentation\QuestionsBrowserFilter\resolveQuestionTypeFilterOptions(), and ilTestRandomQuestionSetSourcePoolDefinition\setTypeFilterFromTypeTags().

+ Here is the caller graph for this function:

◆ _getSelfAssessmentQuestionTypes()

static & ilObjQuestionPool::_getSelfAssessmentQuestionTypes (   $all_tags = false)
static
Todo:
Make it more flexible

Definition at line 1127 of file class.ilObjQuestionPool.php.

1127 : array
1128 {
1129 $allowed_types = [
1130 'assSingleChoice' => 1,
1131 'assMultipleChoice' => 2,
1132 'assKprimChoice' => 3,
1133 'assClozeTest' => 4,
1134 'assMatchingQuestion' => 5,
1135 'assOrderingQuestion' => 6,
1136 'assOrderingHorizontal' => 7,
1137 'assImagemapQuestion' => 8,
1138 'assTextSubset' => 9,
1139 'assErrorText' => 10,
1140 'assLongMenu' => 11
1141 ];
1142 $satypes = [];
1143 $qtypes = ilObjQuestionPool::_getQuestionTypes($all_tags);
1144 foreach ($qtypes as $k => $t) {
1145 if (isset($allowed_types[$t['type_tag']])) {
1146 $t['order'] = $allowed_types[$t['type_tag']];
1147 $satypes[$k] = $t;
1148 }
1149 }
1150 return $satypes;
1151 }
static _getQuestionTypes($all_tags=false, $fixOrder=false, $withDeprecatedTypes=true)

References _getQuestionTypes().

Referenced by ilCopySelfAssQuestionTableGUI\getQuestions(), and ilPCQuestionGUI\insert().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _hasEqualPoints()

static ilObjQuestionPool::_hasEqualPoints (   $a_obj_id,
  $is_reference = false 
)
static

Checks a question pool for questions with the same maximum points.

Parameters
integer$a_obj_idObject id of the question pool @access private

Definition at line 658 of file class.ilObjQuestionPool.php.

658 : int
659 {
660 global $DIC;
661 $ilDB = $DIC['ilDB'];
662
663 if ($is_reference) {
664 $result = $ilDB->queryF(
665 'SELECT count(DISTINCT qpl_questions.points) equal_points FROM qpl_questions, object_reference WHERE object_reference.ref_id = %s AND qpl_questions.tstamp > 0 AND object_reference.obj_id = qpl_questions.obj_fi AND qpl_questions.original_id IS NULL',
666 ['integer'],
667 [$a_obj_id]
668 );
669 } else {
670 $result = $ilDB->queryF(
671 'SELECT count(DISTINCT points) equal_points FROM qpl_questions WHERE obj_fi = %s AND qpl_questions.tstamp > 0 AND qpl_questions.original_id IS NULL',
672 ['integer'],
673 [$a_obj_id]
674 );
675 }
676 if ($result->numRows() == 1) {
677 $row = $ilDB->fetchAssoc($result);
678 if ($row['equal_points'] == 1) {
679 return 1;
680 } else {
681 return 0;
682 }
683 }
684 return 0;
685 }

References $DIC, and $ilDB.

◆ _isWriteable()

static ilObjQuestionPool::_isWriteable (   $object_id,
  $user_id 
)
static

Returns true, if the question pool is writeable by a given user.

Parameters
integer$object_idThe object id of the question pool object
integer$user_idThe database id of the user @access public

Definition at line 801 of file class.ilObjQuestionPool.php.

801 : bool
802 {
803 global $DIC;
804 $rbacsystem = $DIC['rbacsystem'];
805
806 $refs = ilObject::_getAllReferences($object_id);
807 if (count($refs)) {
808 foreach ($refs as $ref_id) {
809 if ($rbacsystem->checkAccess('write', $ref_id) && (ilObject::_hasUntrashedReference($object_id))) {
810 return true;
811 }
812 }
813 }
814 return false;
815 }
static _hasUntrashedReference(int $obj_id)
checks whether an object has at least one reference that is not in trash
static _getAllReferences(int $id)
get all reference ids for object ID

References $DIC, ilObject\$ref_id, ilObject\_getAllReferences(), and ilObject\_hasUntrashedReference().

Referenced by assQuestion\isWriteable().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _updateQuestionCount()

static ilObjQuestionPool::_updateQuestionCount ( int  $object_id)
static

Definition at line 1167 of file class.ilObjQuestionPool.php.

1167 : void
1168 {
1169 global $DIC;
1170 $ilDB = $DIC['ilDB'];
1171 $ilDB->manipulateF(
1172 'UPDATE qpl_questionpool SET questioncount = %s, tstamp = %s WHERE obj_fi = %s',
1173 ['integer', 'integer', 'integer'],
1174 [ilObjQuestionPool::_getQuestionCount($object_id), time(), $object_id]
1175 );
1176 }
static _getQuestionCount(int $pool_id)

References $DIC, $ilDB, and _getQuestionCount().

Referenced by assQuestion\delete(), duplicateQuestion(), pasteFromClipboard(), and assQuestion\saveToDb().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ appendCounterToQuestionTitleIfNecessary()

ilObjQuestionPool::appendCounterToQuestionTitleIfNecessary ( string  $title)

Definition at line 270 of file class.ilObjQuestionPool.php.

270 : string
271 {
272 $result = $this->db->queryF(
273 "SELECT COUNT(question_id) AS cnt FROM qpl_questions WHERE obj_fi = %s AND title like %s",
274 ['integer','text'],
275 [$this->getId(), "{$title}%"]
276 );
277 $counter_object = $this->db->fetchObject($result);
278 if ($counter_object->cnt === 0) {
279 return $title;
280 }
281 return "{$title} ({$counter_object->cnt})";
282 }

References ilObject\$title, and ilObject\getId().

Referenced by copyQuestion(), ilObjTestGUI\copyQuestionToPool(), and duplicateQuestion().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkQuestionParent()

ilObjQuestionPool::checkQuestionParent ( int  $question_id)

Definition at line 589 of file class.ilObjQuestionPool.php.

589 : bool
590 {
591 $row = $this->db->fetchAssoc(
592 $this->db->queryF(
593 'SELECT COUNT(question_id) cnt FROM qpl_questions WHERE question_id = %s AND obj_fi = %s',
594 ['integer', 'integer'],
595 [$question_id, $this->getId()]
596 )
597 );
598
599 return (bool) $row['cnt'];
600 }

◆ cleanupClipboard()

ilObjQuestionPool::cleanupClipboard ( int  $deleted_question_id)

Definition at line 774 of file class.ilObjQuestionPool.php.

774 : void
775 {
776 if (ilSession::get('qpl_clipboard') == null) {
777 return;
778 }
779
780 $clip = ilSession::get('qpl_clipboard');
781 if (!isset($clip[$deleted_question_id])) {
782 return;
783 }
784
785 unset($clip[$deleted_question_id]);
786
787 if (!count($clip)) {
788 ilSession::clear('qpl_clipboard');
789 } else {
790 ilSession::set('qpl_clipboard', $clip);
791 }
792 }
static get(string $a_var)
static clear(string $a_var)
static set(string $a_var, $a_val)
Set a value.

References ilSession\clear(), ilSession\get(), and ilSession\set().

+ Here is the call graph for this function:

◆ cloneObject()

ilObjQuestionPool::cloneObject ( int  $target_id,
int  $copy_id = 0,
bool  $omit_tree = false 
)

Creates a 1:1 copy of the object and places the copy in a given repository.

@access public

Definition at line 1013 of file class.ilObjQuestionPool.php.

1013 : ?ilObject
1014 {
1015 $new_obj = parent::cloneObject($target_id, $copy_id, $omit_tree);
1016
1017 $new_obj->update();
1018
1019 $new_obj->setSkillServiceEnabled($this->isSkillServiceEnabled());
1020 $new_obj->saveToDb();
1021
1022 // clone the questions in the question pool
1023 $questions = $this->getQplQuestions();
1024 $questionIdsMap = [];
1025 foreach ($questions as $question_id) {
1026 $newQuestionId = $new_obj->copyQuestion($question_id, $new_obj->getId());
1027 $questionIdsMap[$question_id] = $newQuestionId;
1028 }
1029
1030 $this->cloneMetaData($new_obj);
1031 $new_obj->updateMetaData();
1032
1033 $duplicator = new ilQuestionPoolTaxonomiesDuplicator();
1034 $duplicator->setSourceObjId($this->getId());
1035 $duplicator->setSourceObjType($this->getType());
1036 $duplicator->setTargetObjId($new_obj->getId());
1037 $duplicator->setTargetObjType($new_obj->getType());
1038 $duplicator->setQuestionIdMapping($questionIdsMap);
1039 $duplicator->duplicate($duplicator->getAllTaxonomiesForSourceObject());
1040
1041 $new_obj->saveToDb();
1042
1043 return $new_obj;
1044 }
Class ilObject Basic functions for all objects.
cloneMetaData(ilObject $target_obj)
Copy meta data.

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ copyQuestion()

ilObjQuestionPool::copyQuestion ( int  $question_id,
int  $questionpool_to 
)

Definition at line 254 of file class.ilObjQuestionPool.php.

254 : int
255 {
256 $question_gui = $this->createQuestion('', $question_id);
257 if ($question_gui->getObject()->getObjId() == $questionpool_to) {
258 // the question is copied into the same question pool
259 return $this->duplicateQuestion($question_id);
260 } else {
261 // the question is copied into another question pool
263 $question_gui->getObject()->getTitle()
264 );
265
266 return $question_gui->getObject()->copyObject($this->getId(), $newtitle);
267 }
268 }
duplicateQuestion(int $question_id)
createQuestion(string $question_type, int $question_id=-1)
appendCounterToQuestionTitleIfNecessary(string $title)

References appendCounterToQuestionTitleIfNecessary(), createQuestion(), duplicateQuestion(), and ilObject\getId().

Referenced by pasteFromClipboard().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ copyToClipboard()

ilObjQuestionPool::copyToClipboard (   $question_id)

Copies a question to the clipboard.

Parameters
integer$question_idObject id of the question @access private

Definition at line 748 of file class.ilObjQuestionPool.php.

748 : void
749 {
750 if (ilSession::get('qpl_clipboard') == null) {
751 ilSession::set('qpl_clipboard', []);
752 }
753 $clip = ilSession::get('qpl_clipboard');
754 $clip[$question_id] = ['question_id' => $question_id, 'action' => 'copy'];
755 ilSession::set('qpl_clipboard', $clip);
756 }

References ilSession\get(), and ilSession\set().

+ Here is the call graph for this function:

◆ create()

ilObjQuestionPool::create (   $a_upload = false)

create questionpool object

Definition at line 62 of file class.ilObjQuestionPool.php.

62 : int
63 {
64 $id = parent::create();
65
66 // meta data will be created by
67 // import parser
68 if (!$a_upload) {
69 $this->createMetaData();
70 }
71 return $id;
72 }
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23

References $id, and ilObject\createMetaData().

+ Here is the call graph for this function:

◆ createExportDirectory()

ilObjQuestionPool::createExportDirectory ( )

creates data directory for export files (data_dir/qpl_data/qpl_<id>/export, depending on data directory that is set in ILIAS setup/ini)

Definition at line 499 of file class.ilObjQuestionPool.php.

499 : void
500 {
501 $qpl_data_dir = ilFileUtils::getDataDir() . '/qpl_data';
502 ilFileUtils::makeDir($qpl_data_dir);
503 if (!is_writable($qpl_data_dir)) {
504 $this->error->raiseError(
505 'Questionpool Data Directory (' . $qpl_data_dir
506 . ') not writeable.',
507 $this->error->FATAL
508 );
509 }
510
511 // create learning module directory (data_dir/lm_data/lm_<id>)
512 $qpl_dir = $qpl_data_dir . '/qpl_' . $this->getId();
513 ilFileUtils::makeDir($qpl_dir);
514 if (!@is_dir($qpl_dir)) {
515 $this->error->raiseError('Creation of Questionpool Directory failed.', $this->error->FATAL);
516 }
517 // create Export subdirectory (data_dir/lm_data/lm_<id>/Export)
519 if (!@is_dir($this->getExportDirectory('xlsx'))) {
520 $this->error->raiseError('Creation of Export Directory failed.', $this->error->FATAL);
521 }
523 if (!@is_dir($this->getExportDirectory('zip'))) {
524 $this->error->raiseError('Creation of Export Directory failed.', $this->error->FATAL);
525 }
526 }
error(string $a_errmsg)
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static getDataDir()
get data directory (outside webspace)
getExportDirectory($type='')
get export directory of questionpool

References error(), ilFileUtils\getDataDir(), getExportDirectory(), ilObject\getId(), and ilFileUtils\makeDir().

+ Here is the call graph for this function:

◆ createQuestion()

ilObjQuestionPool::createQuestion ( string  $question_type,
int  $question_id = -1 
)

Definition at line 233 of file class.ilObjQuestionPool.php.

234 {
235 if ($question_id > 0) {
236 return assQuestion::instantiateQuestionGUI($question_id);
237 }
238 $question_type_gui = $question_type . 'GUI';
239 $question_gui = new $question_type_gui();
240 return $question_gui;
241 }

Referenced by copyQuestion(), duplicateQuestion(), getDeleteableQuestionDetails(), and questionsToXML().

+ Here is the caller graph for this function:

◆ createReference()

ilObjQuestionPool::createReference ( )

Creates a database reference id for the object (saves the object to the database and creates a reference id in the database)

@access public

Reimplemented from ilObject.

Definition at line 80 of file class.ilObjQuestionPool.php.

80 : int
81 {
82 $result = parent::createReference();
83 $this->saveToDb();
84 return $result;
85 }

References saveToDb().

+ Here is the call graph for this function:

◆ delete()

ilObjQuestionPool::delete ( )

delete object and all related data

@access public

Returns
boolean true if all object data were removed; false if only a references were removed

Reimplemented from ilObject.

Definition at line 122 of file class.ilObjQuestionPool.php.

122 : bool
123 {
124 // always call parent delete function first!!
125 if (!parent::delete()) {
126 return false;
127 }
128
129 // delete meta data
130 $this->deleteMetaData();
131
132 //put here your module specific stuff
133 $this->deleteQuestionpool();
134
135 $qsaImportFails = new ilAssQuestionSkillAssignmentImportFails($this->getId());
136 $qsaImportFails->deleteRegisteredImportFails();
137
138 return true;
139 }

References ilObject\deleteMetaData(), deleteQuestionpool(), and ilObject\getId().

+ Here is the call graph for this function:

◆ deleteQuestion()

ilObjQuestionPool::deleteQuestion ( int  $question_id)

Definition at line 153 of file class.ilObjQuestionPool.php.

153 : void
154 {
155 $question = assQuestion::instantiateQuestion($question_id);
156 $question->delete($question_id);
157 }
static instantiateQuestion(int $question_id)

References assQuestion\instantiateQuestion().

Referenced by deleteQuestionpool().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ deleteQuestionpool()

ilObjQuestionPool::deleteQuestionpool ( )

Definition at line 141 of file class.ilObjQuestionPool.php.

141 : void
142 {
143 foreach ($this->getQplQuestions() as $question_id) {
144 $this->deleteQuestion($question_id);
145 }
146
147 $directory = ilFileUtils::getDataDir() . "/qpl_data/qpl_{$this->getId()}";
148 if (is_dir($directory)) {
149 ilFileUtils::delDir($directory);
150 }
151 }
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
deleteQuestion(int $question_id)

References ilFileUtils\delDir(), deleteQuestion(), ilFileUtils\getDataDir(), and getQplQuestions().

Referenced by delete().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ duplicateQuestion()

ilObjQuestionPool::duplicateQuestion ( int  $question_id)

Definition at line 243 of file class.ilObjQuestionPool.php.

243 : int
244 {
245 $question = $this->createQuestion('', $question_id);
247 $question->getObject()->getTitle()
248 );
249 $new_id = $question->getObject()->duplicate(false, $newtitle);
251 return $new_id;
252 }
static _updateQuestionCount(int $object_id)

References _updateQuestionCount(), appendCounterToQuestionTitleIfNecessary(), and createQuestion().

Referenced by copyQuestion().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportFileItems()

ilObjQuestionPool::exportFileItems (   $target_dir,
$expLog 
)

export files of file itmes

Definition at line 476 of file class.ilObjQuestionPool.php.

476 : void
477 {
478 foreach ($this->file_ids as $file_id) {
479 $expLog->write(date("[y-m-d H:i:s] ") . "File Item " . $file_id);
480 $file_dir = $target_dir . '/objects/il_' . IL_INST_ID . '_file_' . $file_id;
481 ilFileUtils::makeDir($file_dir);
482 $file_obj = new ilObjFile((int) $file_id, false);
483 $source_file = $file_obj->getFile($file_obj->getVersion());
484 if (!is_file($source_file)) {
485 $source_file = $file_obj->getFile();
486 }
487 if (is_file($source_file)) {
488 copy($source_file, $file_dir . '/' . $file_obj->getFileName());
489 }
490 unset($file_obj);
491 }
492 }
Class ilObjFile.
const IL_INST_ID
Definition: constants.php:40

References IL_INST_ID, and ilFileUtils\makeDir().

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportTitleAndDescription()

ilObjQuestionPool::exportTitleAndDescription ( ilXmlWriter $a_xml_writer)

Definition at line 386 of file class.ilObjQuestionPool.php.

386 : void
387 {
388 $a_xml_writer->xmlElement('Title', null, $this->getTitle());
389 $a_xml_writer->xmlElement('Description', null, $this->getDescription());
390 }
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)

References ilObject\getDescription(), ilObject\getTitle(), and ilXmlWriter\xmlElement().

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportXMLMediaObjects()

ilObjQuestionPool::exportXMLMediaObjects ( $a_xml_writer,
  $a_inst,
  $a_target_dir,
$expLog 
)

Definition at line 452 of file class.ilObjQuestionPool.php.

452 : void
453 {
454 foreach ($this->mob_ids as $mob_id) {
455 $expLog->write(date('[y-m-d H:i:s] ') . 'Media Object ' . $mob_id);
456 if (ilObjMediaObject::_exists((int) $mob_id)) {
457 $target_dir = $a_target_dir . DIRECTORY_SEPARATOR . 'objects'
458 . DIRECTORY_SEPARATOR . 'il_' . IL_INST_ID . '_mob_' . $mob_id;
459 ilFileUtils::createDirectory($target_dir);
460 $media_obj = new ilObjMediaObject((int) $mob_id);
461 $media_obj->exportXML($a_xml_writer, (int) $a_inst);
462 foreach ($media_obj->getMediaItems() as $item) {
463 $stream = $item->getLocationStream();
464 file_put_contents($target_dir . DIRECTORY_SEPARATOR . $item->getLocation(), $stream);
465 $stream->close();
466 }
467 unset($media_obj);
468 }
469 }
470 }
static createDirectory(string $a_dir, int $a_mod=0755)
create directory
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data

References ilObjMediaObject\_exists(), ilFileUtils\createDirectory(), and IL_INST_ID.

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportXMLPageObjects()

ilObjQuestionPool::exportXMLPageObjects ( $a_xml_writer,
  $a_inst,
$expLog,
  $questions 
)

export page objects to xml (see ilias_co.dtd)

Parameters
object$a_xml_writerilXmlWriter object that receives the xml data

Definition at line 407 of file class.ilObjQuestionPool.php.

407 : void
408 {
409 $ilBench = $this->benchmark;
410
411 foreach ($questions as $question_id) {
412 $ilBench->start('ContentObjectExport', 'exportPageObject');
413 $expLog->write(date('[y-m-d H:i:s] ') . 'Page Object ' . $question_id);
414
415 $attrs = [];
416 $a_xml_writer->xmlStartTag('PageObject', $attrs);
417
418 // export xml to writer object
419 $ilBench->start('ContentObjectExport', 'exportPageObject_XML');
420 $page_object = new ilAssQuestionPage($question_id);
421 $page_object->buildDom();
422 $page_object->insertInstIntoIDs($a_inst);
423 $mob_ids = $page_object->collectMediaObjects(false);
424 $file_ids = ilPCFileList::collectFileItems($page_object, $page_object->getDomDoc());
425 $xml = $page_object->getXMLFromDom(false, false, false, '', true);
426 $xml = str_replace('&', '&amp;', $xml);
427 $a_xml_writer->appendXML($xml);
428 $page_object->freeDom();
429 unset($page_object);
430 $ilBench->stop('ContentObjectExport', 'exportPageObject_XML');
431
432 $ilBench->start("ContentObjectExport", "exportPageObject_CollectMedia");
433 foreach ($mob_ids as $mob_id) {
434 $this->mob_ids[$mob_id] = $mob_id;
435 }
436 $ilBench->stop('ContentObjectExport', 'exportPageObject_CollectMedia');
437
438 // collect all file items
439 $ilBench->start('ContentObjectExport', 'exportPageObject_CollectFileItems');
440 //$file_ids = $page_obj->getFileItemIds();
441 foreach ($file_ids as $file_id) {
442 $this->file_ids[$file_id] = $file_id;
443 }
444 $ilBench->stop('ContentObjectExport', 'exportPageObject_CollectFileItems');
445
446 $a_xml_writer->xmlEndTag("PageObject");
447
448 $ilBench->stop('ContentObjectExport', 'exportPageObject');
449 }
450 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
start(string $a_module, string $a_bench)
start measurement
static collectFileItems(ilPageObject $a_page, DOMDocument $a_domdoc)
Get all file items that are used within the page.

References $benchmark, $file_ids, $mob_ids, ilPCFileList\collectFileItems(), and ilBenchmark\start().

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportXMLSettings()

ilObjQuestionPool::exportXMLSettings (   $xmlWriter)
private
Parameters
ilXmlWriter$xmlWriter

Definition at line 311 of file class.ilObjQuestionPool.php.

311 : void
312 {
313 $xmlWriter->xmlStartTag('Settings');
314 $xmlWriter->xmlElement('SkillService', null, (int) $this->isSkillServiceEnabled());
315 $xmlWriter->xmlEndTag('Settings');
316 }

References isSkillServiceEnabled().

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fromXML()

ilObjQuestionPool::fromXML ( ?string  $xml_file)

Definition at line 1246 of file class.ilObjQuestionPool.php.

1246 : void
1247 {
1248 $parser = new ilObjQuestionPoolXMLParser($this, $xml_file);
1249 $parser->startParsing();
1250 }

◆ getAllQuestionIds()

& ilObjQuestionPool::getAllQuestionIds ( )

Definition at line 567 of file class.ilObjQuestionPool.php.

567 : array
568 {
569 $query_result = $this->db->queryF(
570 'SELECT question_id, qpl_qst_type.type_tag, qpl_qst_type.plugin FROM qpl_questions, qpl_qst_type WHERE original_id IS NULL AND qpl_questions.tstamp > 0 AND obj_fi = %s AND complete = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id',
571 ['integer', 'text'],
572 [$this->getId(), 1]
573 );
574 $questions = [];
575 if ($query_result->numRows()) {
576 while ($row = $this->db->fetchAssoc($query_result)) {
577 if ($row['plugin']) {
578 if ($this->isPluginActive($row['type_tag'])) {
579 array_push($questions, $row['question_id']);
580 }
581 } else {
582 array_push($questions, $row['question_id']);
583 }
584 }
585 }
586 return $questions;
587 }
isPluginActive($questionType)
Checks wheather or not a question plugin with a given name is active.

References ilObject\getId(), and isPluginActive().

+ Here is the call graph for this function:

◆ getAllQuestions()

& ilObjQuestionPool::getAllQuestions ( )

Retrieve an array containing all question ids of the questionpool.

Returns
array An array containing all question ids of the questionpool

Definition at line 553 of file class.ilObjQuestionPool.php.

553 : array
554 {
555 $result = $this->db->queryF(
556 'SELECT question_id FROM qpl_questions WHERE obj_fi = %s AND qpl_questions.tstamp > 0 AND original_id IS NULL',
557 ['integer'],
558 [$this->getId()]
559 );
560 $questions = [];
561 while ($row = $this->db->fetchAssoc($result)) {
562 array_push($questions, $row['question_id']);
563 }
564 return $questions;
565 }

References ilObject\getId().

+ Here is the call graph for this function:

◆ getDeleteableQuestionDetails()

ilObjQuestionPool::getDeleteableQuestionDetails (   $question_ids)

Returns an array containing the qpl_question and qpl_qst_type fields of deleteable questions for an array of question ids.

Parameters
array$question_idsAn array containing the question ids
Returns
array An array containing the details of the requested questions @access public

Definition at line 854 of file class.ilObjQuestionPool.php.

854 : array
855 {
856 $result = [];
857 $query_result = $this->db->query(
858 'SELECT qpl_questions.*, qpl_qst_type.type_tag FROM qpl_questions, qpl_qst_type WHERE qpl_questions.question_type_fi = qpl_qst_type.question_type_id AND '
859 . $this->db->in('qpl_questions.question_id', $question_ids, false, 'integer')
860 . ' ORDER BY qpl_questions.title'
861 );
862 if ($query_result->numRows()) {
863 while ($row = $this->db->fetchAssoc($query_result)) {
864 if (!$this->questionrepository->isUsedInRandomTest($row['question_id'])) {
865 array_push($result, $row);
866 } else {
867 // the question was used in a random test prior to ILIAS 3.7 so it was inserted
868 // as a reference to the original question pool object and not as a copy. To allow
869 // the deletion of the question pool object, a copy must be created and all database references
870 // of the original question must changed with the reference of the copy
871
872 // 1. Create a copy of the original question
873 $question = $this->createQuestion('', $row['question_id']);
874 $duplicate_id = $question->getObject()->duplicate(true);
875 if ($duplicate_id > 0) {
876 // 2. replace the question id in the solutions
877 $affectedRows = $this->db->manipulateF(
878 'UPDATE tst_solutions SET question_fi = %s WHERE question_fi = %s',
879 ['integer', 'integer'],
880 [$duplicate_id, $row['question_id']]
881 );
882
883 // 3. replace the question id in the question list of random tests
884 $affectedRows = $this->db->manipulateF(
885 'UPDATE tst_test_rnd_qst SET question_fi = %s WHERE question_fi = %s',
886 ['integer', 'integer'],
887 [$duplicate_id, $row['question_id']]
888 );
889
890 // 4. replace the question id in the test results
891 $affectedRows = $this->db->manipulateF(
892 'UPDATE tst_test_result SET question_fi = %s WHERE question_fi = %s',
893 ['integer', 'integer'],
894 [$duplicate_id, $row['question_id']]
895 );
896
897 // 5. replace the question id in the test&assessment log
898 $affectedRows = $this->db->manipulateF(
899 'UPDATE ass_log SET question_fi = %s WHERE question_fi = %s',
900 ['integer', 'integer'],
901 [$duplicate_id, $row['question_id']]
902 );
903
904 // 6. The original question can be deleted, so add it to the list of questions
905 array_push($result, $row);
906 }
907 }
908 }
909 }
910 return $result;
911 }

References createQuestion().

+ Here is the call graph for this function:

◆ getExportDirectory()

ilObjQuestionPool::getExportDirectory (   $type = '')

get export directory of questionpool

Definition at line 531 of file class.ilObjQuestionPool.php.

531 : string
532 {
533 switch ($type) {
534 case 'xml':
535 $export_dir = ilExport::_getExportDirectory($this->getId(), $type, $this->getType());
536 break;
537 case 'xlsx':
538 case 'zip':
539 $export_dir = ilFileUtils::getDataDir() . "/qpl_data/qpl_{$this->getId()}/export_{$type}";
540 break;
541 default:
542 $export_dir = ilFileUtils::getDataDir() . '/qpl_data' . '/qpl_' . $this->getId() . '/export';
543 break;
544 }
545 return $export_dir;
546 }
static _getExportDirectory(int $a_obj_id, string $a_type="xml", string $a_obj_type="", string $a_entity="")
@depricated Get export directory for an repository object
string $type

References ilObject\$type, ilExport\_getExportDirectory(), ilFileUtils\getDataDir(), ilObject\getId(), and ilObject\getType().

Referenced by createExportDirectory().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getImportMapping()

ilObjQuestionPool::getImportMapping ( )

get array of (two) new created questions for import id

Definition at line 606 of file class.ilObjQuestionPool.php.

606 : array
607 {
608 return [];
609 }

◆ getPrintviewQuestions()

ilObjQuestionPool::getPrintviewQuestions ( )

Definition at line 284 of file class.ilObjQuestionPool.php.

284 : array
285 {
286 $query_result = $this->db->queryF(
287 'SELECT qpl_questions.*, qpl_qst_type.type_tag, qpl_qst_type.plugin, qpl_questions.tstamp updated FROM qpl_questions, qpl_qst_type WHERE qpl_questions.original_id IS NULL AND qpl_questions.tstamp > 0 AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id AND qpl_questions.obj_fi = %s',
288 ['integer'],
289 [$this->getId()]
290 );
291 $rows = [];
292 $types = $this->getQuestionTypeTranslations();
293 if ($query_result->numRows()) {
294 while ($row = $this->db->fetchAssoc($query_result)) {
295 $row['ttype'] = $types[$row['type_tag']];
296 if ($row['plugin']) {
297 if ($this->isPluginActive($row['type_tag'])) {
298 array_push($rows, $row);
299 }
300 } else {
301 array_push($rows, $row);
302 }
303 }
304 }
305 return $rows;
306 }

References ilObject\getId(), getQuestionTypeTranslations(), and isPluginActive().

+ Here is the call graph for this function:

◆ getQplQuestions()

ilObjQuestionPool::getQplQuestions ( )

Definition at line 994 of file class.ilObjQuestionPool.php.

994 : array
995 {
996 $questions = [];
997 $result = $this->db->queryF(
998 'SELECT qpl_questions.question_id FROM qpl_questions WHERE qpl_questions.original_id IS NULL AND qpl_questions.tstamp > 0 AND qpl_questions.obj_fi = %s',
1000 [$this->getId()]
1001 );
1002 while ($row = $this->db->fetchAssoc($result)) {
1003 $questions[] = $row['question_id'];
1004 }
1005 return $questions;
1006 }

References ILIAS\Survey\Mode\getId(), and ilDBConstants\T_INTEGER.

Referenced by deleteQuestionpool().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getQuestionDetails()

ilObjQuestionPool::getQuestionDetails (   $question_ids)

Returns an array containing the qpl_question and qpl_qst_type fields for an array of question ids.

Parameters
array$question_idsAn array containing the question ids
Returns
array An array containing the details of the requested questions @access public

Definition at line 824 of file class.ilObjQuestionPool.php.

824 : array
825 {
826 $result = [];
827 $query_result = $this->db->query(
828 'SELECT qpl_questions.*, qpl_qst_type.type_tag '
829 . 'FROM qpl_questions, qpl_qst_type '
830 . 'WHERE qpl_questions.question_type_fi = qpl_qst_type.question_type_id '
831 . 'AND ' . $this->db->in(
832 'qpl_questions.question_id',
833 $question_ids,
834 false,
835 'integer'
836 ) . ' ORDER BY qpl_questions.title'
837 );
838 if ($query_result->numRows()) {
839 while ($row = $this->db->fetchAssoc($query_result)) {
840 array_push($result, $row);
841 }
842 }
843 return $result;
844 }

◆ getQuestionList()

ilObjQuestionPool::getQuestionList ( )

Definition at line 1153 of file class.ilObjQuestionPool.php.

1153 : array
1154 {
1155 $questions = [];
1156 $result = $this->db->queryF(
1157 'SELECT qpl_questions.*, qpl_qst_type.* FROM qpl_questions, qpl_qst_type WHERE qpl_questions.original_id IS NULL AND qpl_questions.obj_fi = %s AND qpl_questions.tstamp > 0 AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id',
1158 ['integer'],
1159 [$this->getId()]
1160 );
1161 while ($row = $this->db->fetchAssoc($result)) {
1162 array_push($questions, $row);
1163 }
1164 return $questions;
1165 }

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getQuestiontype()

ilObjQuestionPool::getQuestiontype (   $question_id)

Definition at line 203 of file class.ilObjQuestionPool.php.

204 {
205 if ($question_id < 1) {
206 return null;
207 }
208
209 $result = $this->db->queryF(
210 'SELECT qpl_qst_type.type_tag FROM qpl_questions, qpl_qst_type WHERE qpl_questions.question_type_fi = qpl_qst_type.question_type_id AND qpl_questions.question_id = %s',
211 ['integer'],
212 [$question_id]
213 );
214
215 if ($result->numRows() == 1) {
216 $data = $this->db->fetchAssoc($result);
217 return $data['type_tag'];
218 }
219 return null;
220 }

References $data.

◆ getQuestionTypeByTypeId()

static ilObjQuestionPool::getQuestionTypeByTypeId (   $type_id)
static

Definition at line 1083 of file class.ilObjQuestionPool.php.

1084 {
1085 global $DIC;
1086 $ilDB = $DIC['ilDB'];
1087
1088 $query = 'SELECT type_tag FROM qpl_qst_type WHERE question_type_id = %s';
1089 $types = ['integer'];
1090 $values = [$type_id];
1091 $result = $ilDB->queryF($query, $types, $values);
1092
1093 if ($row = $ilDB->fetchAssoc($result)) {
1094 return $row['type_tag'];
1095 }
1096 return null;
1097 }

References $DIC, and $ilDB.

◆ getQuestionTypes()

ilObjQuestionPool::getQuestionTypes (   $all_tags = false,
  $fixOrder = false,
  $withDeprecatedTypes = true 
)

Definition at line 1046 of file class.ilObjQuestionPool.php.

1046 : array
1047 {
1048 return self::_getQuestionTypes($all_tags, $fixOrder, $withDeprecatedTypes);
1049 }

◆ getQuestionTypeTranslations()

static ilObjQuestionPool::getQuestionTypeTranslations ( )
static

Definition at line 1099 of file class.ilObjQuestionPool.php.

1099 : array
1100 {
1101 global $DIC;
1102 $ilDB = $DIC['ilDB'];
1103 $lng = $DIC['lng'];
1104 $component_factory = $DIC['component.factory'];
1105
1106 $lng->loadLanguageModule('assessment');
1107 $result = $ilDB->query('SELECT * FROM qpl_qst_type');
1108 $types = [];
1109 while ($row = $ilDB->fetchAssoc($result)) {
1110 if ($row['plugin'] == 0) {
1111 $types[$row['type_tag']] = $lng->txt($row['type_tag']);
1112 } else {
1113 foreach ($component_factory->getActivePluginsInSlot('qst') as $pl) {
1114 if (strcmp($pl->getQuestionType(), $row['type_tag']) == 0) {
1115 $types[$row['type_tag']] = $pl->getQuestionTypeTranslation();
1116 }
1117 }
1118 }
1119 }
1120 ksort($types);
1121 return $types;
1122 }

References $DIC, $ilDB, and $lng.

Referenced by getPrintviewQuestions().

+ Here is the caller graph for this function:

◆ getTaxonomyIds()

ilObjQuestionPool::getTaxonomyIds ( )

get ids of all taxonomies corresponding to current pool

Returns
array

Definition at line 1218 of file class.ilObjQuestionPool.php.

1218 : array
1219 {
1220 return ilObjTaxonomy::getUsageOfObject($this->getId());
1221 }
static getUsageOfObject(int $a_obj_id, bool $a_include_titles=false)

References ILIAS\Survey\Mode\getId(), and ilObjTaxonomy\getUsageOfObject().

+ Here is the call graph for this function:

◆ isInUse()

ilObjQuestionPool::isInUse ( int  $question_id)

Definition at line 222 of file class.ilObjQuestionPool.php.

222 : bool
223 {
224 $result = $this->db->queryF(
225 'SELECT COUNT(solution_id) solution_count FROM tst_solutions WHERE question_fi = %s',
226 ['integer'],
227 [$question_id]
228 );
229 $row = $this->db->fetchAssoc($result);
230 return $row['solution_count'];
231 }

◆ isPluginActive()

ilObjQuestionPool::isPluginActive (   $questionType)

Checks wheather or not a question plugin with a given name is active.

Parameters
string$a_pnameThe plugin name @access public

Definition at line 1184 of file class.ilObjQuestionPool.php.

1184 : bool
1185 {
1186 if (!$this->component_repository->getComponentByTypeAndName(
1188 'TestQuestionPool'
1189 )->getPluginSlotById('qst')->hasPluginName($questionType)) {
1190 return false;
1191 }
1192
1193 return $this->component_repository
1194 ->getComponentByTypeAndName(
1196 'TestQuestionPool'
1197 )
1198 ->getPluginSlotById(
1199 'qst'
1200 )
1201 ->getPluginByName(
1202 $questionType
1203 )->isActive();
1204 }

References ilComponentInfo\TYPE_COMPONENT.

Referenced by getAllQuestionIds(), and getPrintviewQuestions().

+ Here is the caller graph for this function:

◆ isSkillManagementGloballyActivated()

static ilObjQuestionPool::isSkillManagementGloballyActivated ( )
static

Definition at line 1235 of file class.ilObjQuestionPool.php.

1235 : ?bool
1236 {
1237 if (self::$isSkillManagementGloballyActivated === null) {
1238 $skmgSet = new ilSkillManagementSettings();
1239
1240 self::$isSkillManagementGloballyActivated = $skmgSet->isActivated();
1241 }
1242
1244 }

Referenced by ilObjQuestionPoolSettingsGeneralGUI\buildForm(), ilQuestionPoolSkillAdministrationGUI\isAccessDenied(), and ilObjQuestionPoolGUI\isSkillsTabRequired().

+ Here is the caller graph for this function:

◆ isSkillServiceEnabled()

ilObjQuestionPool::isSkillServiceEnabled ( )

Definition at line 1223 of file class.ilObjQuestionPool.php.

1223 : bool
1224 {
1226 }

Referenced by exportXMLSettings(), and saveToDb().

+ Here is the caller graph for this function:

◆ loadFromDb()

ilObjQuestionPool::loadFromDb ( )

Definition at line 159 of file class.ilObjQuestionPool.php.

159 : void
160 {
161 $result = $this->db->queryF(
162 'SELECT * FROM qpl_questionpool WHERE obj_fi = %s',
163 ['integer'],
164 [$this->getId()]
165 );
166 if ($result->numRows() == 1) {
167 $row = $this->db->fetchAssoc($result);
168 $this->setSkillServiceEnabled((bool) $row['skill_service']);
169 }
170 }
setSkillServiceEnabled(bool $skill_service_enabled)

References ilObject\getId(), and setSkillServiceEnabled().

Referenced by read().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ modifyExportIdentifier()

ilObjQuestionPool::modifyExportIdentifier (   $a_tag,
  $a_param,
  $a_value 
)

Definition at line 392 of file class.ilObjQuestionPool.php.

393 {
394 if ($a_tag == 'Identifier' && $a_param == 'Entry') {
395 $a_value = ilUtil::insertInstIntoID($a_value);
396 }
397
398 return $a_value;
399 }
static insertInstIntoID(string $a_value)
inserts installation id into ILIAS id

References ilUtil\insertInstIntoID().

+ Here is the call graph for this function:

◆ moveToClipboard()

ilObjQuestionPool::moveToClipboard ( int  $question_id)

Moves a question to the clipboard.

Parameters
integer$question_idObject id of the question @access private

Definition at line 764 of file class.ilObjQuestionPool.php.

764 : void
765 {
766 if (ilSession::get('qpl_clipboard') == null) {
767 ilSession::set('qpl_clipboard', []);
768 }
769 $clip = ilSession::get('qpl_clipboard');
770 $clip[$question_id] = ['question_id' => $question_id, 'action' => 'move'];
771 ilSession::set('qpl_clipboard', $clip);
772 }

References ilSession\get(), and ilSession\set().

+ Here is the call graph for this function:

◆ objectToXmlWriter()

ilObjQuestionPool::objectToXmlWriter ( ilXmlWriter $a_xml_writer,
  $a_inst,
  $a_target_dir,
$expLog,
  $questions 
)

export pages of test to xml (see ilias_co.dtd)

Parameters
object$a_xml_writerilXmlWriter object that receives the xml data

Definition at line 324 of file class.ilObjQuestionPool.php.

324 : void
325 {
326 $ilBench = $this->benchmark;
327
328 $this->mob_ids = [];
329 $this->file_ids = [];
330
331 $attrs = [];
332 $attrs['Type'] = 'Questionpool_Test';
333 $a_xml_writer->xmlStartTag('ContentObject', $attrs);
334
335 // MetaData
336 $this->exportTitleAndDescription($a_xml_writer);
337
338 // Settings
339 $this->exportXMLSettings($a_xml_writer);
340
341 // PageObjects
342 $expLog->write(date('[y-m-d H:i:s] ') . 'Start Export Page Objects');
343 $ilBench->start('ContentObjectExport', 'exportPageObjects');
344 $this->exportXMLPageObjects($a_xml_writer, $a_inst, $expLog, $questions);
345 $ilBench->stop('ContentObjectExport', 'exportPageObjects');
346 $expLog->write(date('[y-m-d H:i:s] ') . 'Finished Export Page Objects');
347
348 // MediaObjects
349 $expLog->write(date('[y-m-d H:i:s] ') . 'Start Export Media Objects');
350 $ilBench->start('ContentObjectExport', 'exportMediaObjects');
351 $this->exportXMLMediaObjects($a_xml_writer, $a_inst, $a_target_dir, $expLog);
352 $ilBench->stop('ContentObjectExport', 'exportMediaObjects');
353 $expLog->write(date('[y-m-d H:i:s] ') . 'Finished Export Media Objects');
354
355 // FileItems
356 $expLog->write(date('[y-m-d H:i:s] ') . 'Start Export File Items');
357 $ilBench->start('ContentObjectExport', 'exportFileItems');
358 $this->exportFileItems($a_target_dir, $expLog);
359 $ilBench->stop('ContentObjectExport', 'exportFileItems');
360 $expLog->write(date('[y-m-d H:i:s] ') . 'Finished Export File Items');
361
362 // skill assignments
363 $this->populateQuestionSkillAssignmentsXml($a_xml_writer, $questions);
364
365 $a_xml_writer->xmlEndTag('ContentObject');
366 }
exportFileItems($target_dir, &$expLog)
export files of file itmes
exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
exportXMLPageObjects(&$a_xml_writer, $a_inst, &$expLog, $questions)
export page objects to xml (see ilias_co.dtd)
populateQuestionSkillAssignmentsXml(ilXmlWriter &$a_xml_writer, $questions)
exportTitleAndDescription(ilXmlWriter &$a_xml_writer)
xmlEndTag(string $tag)
Writes an endtag.
xmlStartTag(string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
Writes a starttag.

References $benchmark, exportFileItems(), exportTitleAndDescription(), exportXMLMediaObjects(), exportXMLPageObjects(), exportXMLSettings(), populateQuestionSkillAssignmentsXml(), ilXmlWriter\xmlEndTag(), and ilXmlWriter\xmlStartTag().

+ Here is the call graph for this function:

◆ pasteFromClipboard()

ilObjQuestionPool::pasteFromClipboard ( )

Copies/Moves a question from the clipboard.

@access private

Definition at line 692 of file class.ilObjQuestionPool.php.

692 : bool
693 {
694 $success = false;
695 if (ilSession::get('qpl_clipboard') != null) {
696 $success = true;
697 foreach (ilSession::get('qpl_clipboard') as $question_object) {
698 if (strcmp($question_object['action'], 'move') == 0) {
699 $result = $this->db->queryF(
700 'SELECT obj_fi FROM qpl_questions WHERE question_id = %s',
701 ['integer'],
702 [$question_object['question_id']]
703 );
704 if ($result->numRows() == 1) {
705 $row = $this->db->fetchAssoc($result);
706 $source_questionpool = $row['obj_fi'];
707 $affectedRows = $this->db->manipulateF(
708 'UPDATE qpl_questions SET obj_fi = %s WHERE question_id = %s',
709 ['integer', 'integer'],
710 [$this->getId(), $question_object['question_id']]
711 );
712 if (!$affectedRows) {
713 $success = false;
714 }
715
716 $source_path = CLIENT_WEB_DIR . '/assessment/' . $source_questionpool . '/' . $question_object['question_id'] . '/';
717 if (@is_dir($source_path)) {
718 $target_path = CLIENT_WEB_DIR . '/assessment/' . $this->getId() . '/';
719 if (!@is_dir($target_path)) {
720 ilFileUtils::makeDirParents($target_path);
721 }
722 rename($source_path, $target_path . $question_object['question_id']);
723 }
724
725 ilObjQuestionPool::_updateQuestionCount($source_questionpool);
726 }
727 } else {
728 $new_question_id = $this->copyQuestion($question_object['question_id'], $this->getId());
729 if (!$new_question_id) {
730 $success = false;
731 }
732 }
733 }
734 }
735 // update question count of question pool
737 ilSession::clear('qpl_clipboard');
738
739 return $success;
740 }
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
copyQuestion(int $question_id, int $questionpool_to)
const CLIENT_WEB_DIR
Definition: constants.php:47

References _updateQuestionCount(), ilSession\clear(), CLIENT_WEB_DIR, copyQuestion(), ilSession\get(), ilObject\getId(), and ilFileUtils\makeDirParents().

+ Here is the call graph for this function:

◆ populateQuestionSkillAssignmentsXml()

ilObjQuestionPool::populateQuestionSkillAssignmentsXml ( ilXmlWriter $a_xml_writer,
  $questions 
)
protected
Parameters
ilXmlWriter$a_xml_writer
$questions

Definition at line 372 of file class.ilObjQuestionPool.php.

372 : void
373 {
374 $assignmentList = new ilAssQuestionSkillAssignmentList($this->db);
375 $assignmentList->setParentObjId($this->getId());
376 $assignmentList->loadFromDb();
377 $assignmentList->loadAdditionalSkillData();
378
379 $skillQuestionAssignmentExporter = new ilAssQuestionSkillAssignmentExporter();
380 $skillQuestionAssignmentExporter->setXmlWriter($a_xml_writer);
381 $skillQuestionAssignmentExporter->setQuestionIds($questions);
382 $skillQuestionAssignmentExporter->setAssignmentList($assignmentList);
383 $skillQuestionAssignmentExporter->export();
384 }

References ilObject\getId().

Referenced by objectToXmlWriter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ purgeQuestions()

ilObjQuestionPool::purgeQuestions ( )

Definition at line 1206 of file class.ilObjQuestionPool.php.

1206 : void
1207 {
1208 $incompleteQuestionPurger = new ilAssIncompleteQuestionPurger($this->db);
1209 $incompleteQuestionPurger->setOwnerId($this->user->getId());
1210 $incompleteQuestionPurger->purge();
1211 }

References ILIAS\Repository\user().

+ Here is the call graph for this function:

◆ questionsToXML()

ilObjQuestionPool::questionsToXML (   $questions)

Returns a QTI xml representation of a list of questions.

Parameters
array$questionsAn array containing the question ids of the questions
Returns
string The QTI xml representation of the questions @access public

Definition at line 618 of file class.ilObjQuestionPool.php.

618 : string
619 {
620 $xml = '';
621 // export button was pressed
622 if (count($questions) > 0) {
623 foreach ($questions as $key => $value) {
624 $question = $this->createQuestion('', $value);
625 $xml .= $question->getObject()->toXML();
626 }
627 if (count($questions) > 1) {
628 $xml = preg_replace('/<\/questestinterop>\s*<.xml.*?>\s*<questestinterop>/', '', $xml);
629 }
630 }
631 $xml = preg_replace(
632 '/(<\?xml[^>]*?>)/',
633 '\\1' . '<!DOCTYPE questestinterop SYSTEM "ims_qtiasiv1p2p1.dtd">',
634 $xml
635 );
636 return $xml;
637 }

References createQuestion().

+ Here is the call graph for this function:

◆ read()

ilObjQuestionPool::read (   $a_force_db = false)

read object data from db into object

Parameters
boolean@access public

Definition at line 110 of file class.ilObjQuestionPool.php.

110 : void
111 {
112 parent::read($a_force_db);
113 $this->loadFromDb();
114 }

References loadFromDb().

+ Here is the call graph for this function:

◆ saveToDb()

ilObjQuestionPool::saveToDb ( )

Definition at line 172 of file class.ilObjQuestionPool.php.

172 : void
173 {
174 $result = $this->db->queryF(
175 'SELECT id_questionpool FROM qpl_questionpool WHERE obj_fi = %s',
176 ['integer'],
177 [$this->getId()]
178 );
179
180 if ($result->numRows() == 1) {
181 $result = $this->db->update(
182 'qpl_questionpool',
183 [
184 'skill_service' => ['integer', (int) $this->isSkillServiceEnabled()],
185 'tstamp' => ['integer', time()]
186 ],
187 [
188 'obj_fi' => ['integer', $this->getId()]
189 ]
190 );
191 } else {
192 $next_id = $this->db->nextId('qpl_questionpool');
193
194 $result = $this->db->insert('qpl_questionpool', [
195 'id_questionpool' => ['integer', $next_id],
196 'skill_service' => ['integer', (int) $this->isSkillServiceEnabled()],
197 'tstamp' => ['integer', time()],
198 'obj_fi' => ['integer', $this->getId()]
199 ]);
200 }
201 }

References ilObject\getId(), and isSkillServiceEnabled().

Referenced by createReference().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setSkillServiceEnabled()

ilObjQuestionPool::setSkillServiceEnabled ( bool  $skill_service_enabled)

Definition at line 1228 of file class.ilObjQuestionPool.php.

1228 : void
1229 {
1230 $this->skill_service_enabled = $skill_service_enabled;
1231 }

Referenced by loadFromDb().

+ Here is the caller graph for this function:

◆ update()

ilObjQuestionPool::update ( )

update object data

@access public

Returns
boolean

Reimplemented from ilObject.

Definition at line 93 of file class.ilObjQuestionPool.php.

93 : bool
94 {
95 $this->updateMetaData();
96 if (!parent::update()) {
97 return false;
98 }
99
100 // put here object specific stuff
101
102 return true;
103 }

References ilObject\updateMetaData().

+ Here is the call graph for this function:

Field Documentation

◆ $benchmark

ilBenchmark ilObjQuestionPool::$benchmark
private

Definition at line 36 of file class.ilObjQuestionPool.php.

Referenced by exportXMLPageObjects(), and objectToXmlWriter().

◆ $component_repository

ilComponentRepository ilObjQuestionPool::$component_repository
private

Definition at line 35 of file class.ilObjQuestionPool.php.

◆ $file_ids

array ilObjQuestionPool::$file_ids
private

Definition at line 39 of file class.ilObjQuestionPool.php.

Referenced by exportXMLPageObjects().

◆ $isSkillManagementGloballyActivated

ilObjQuestionPool::$isSkillManagementGloballyActivated = null
staticprivate

Definition at line 1233 of file class.ilObjQuestionPool.php.

◆ $mob_ids

array ilObjQuestionPool::$mob_ids
private

Definition at line 38 of file class.ilObjQuestionPool.php.

Referenced by exportXMLPageObjects().

◆ $questionrepository

GeneralQuestionPropertiesRepository ilObjQuestionPool::$questionrepository
private

Definition at line 41 of file class.ilObjQuestionPool.php.

◆ $skill_service_enabled

bool ilObjQuestionPool::$skill_service_enabled
private

Definition at line 40 of file class.ilObjQuestionPool.php.


The documentation for this class was generated from the following file: